Let Compose lead the attributes, as their own doc always said

`Attribute::ALL` claims to be "roughly the order a photographer works in" and
then listed framing fifth, behind tone, colour and detail. Framing is the
first decision made about a photograph and the one every later judgement is
made inside — there is no sense balancing tones across a frame about to lose a
third of its width.

The contradiction was harmless while the list only fed a row of chips nobody
reads in order. It stops being harmless now that the same list drives a column
read top to bottom.

`declared::Attr::ALL` moves with it. The two are separate spellings of one
vocabulary and a test asserts they agree, which is what caught this rather
than the order silently disagreeing between the YAML front end and the crate.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-09-05 18:13:44 +02:00
co-authored by Claude Opus 5
parent 1ad35e2b87
commit 474dcf0bf6
3 changed files with 39 additions and 32 deletions
+1 -1
View File
@@ -140,11 +140,11 @@ impl Attr {
/// Every attribute, in the order `crate::descriptor::Attribute` declares /// Every attribute, in the order `crate::descriptor::Attribute` declares
/// them. /// them.
pub const ALL: [Attr; 6] = [ pub const ALL: [Attr; 6] = [
Attr::Compose,
Attr::Tone, Attr::Tone,
Attr::Colour, Attr::Colour,
Attr::Detail, Attr::Detail,
Attr::Optics, Attr::Optics,
Attr::Compose,
Attr::Effect, Attr::Effect,
]; ];
} }
+8 -1
View File
@@ -600,12 +600,19 @@ impl Attribute {
/// makes it a reasonable *default* for a frontend that wants one. It is /// makes it a reasonable *default* for a frontend that wants one. It is
/// not a screen order: nothing here obliges a frontend to show them all, /// not a screen order: nothing here obliges a frontend to show them all,
/// show them in this sequence, or show them at all. /// show them in this sequence, or show them at all.
///
/// `Compose` leads because framing is the first decision made about a
/// photograph and the one every later judgement is made inside — there is
/// no sense in balancing tones across a frame that is about to lose a
/// third of its width. It sat fifth while it was called `Geometry`, which
/// contradicted the claim above and was noticed only when this list
/// started driving a control read top to bottom.
pub const ALL: [Attribute; 6] = [ pub const ALL: [Attribute; 6] = [
Attribute::Compose,
Attribute::Tone, Attribute::Tone,
Attribute::Colour, Attribute::Colour,
Attribute::Detail, Attribute::Detail,
Attribute::Optics, Attribute::Optics,
Attribute::Compose,
Attribute::Effect, Attribute::Effect,
]; ];
+30 -30
View File
File diff suppressed because one or more lines are too long