NFR-A11Y-3 — Colour labels have no interface, and three clauses have no test #37

Closed
opened 2026-09-05 16:20:18 +00:00 by dtourolle · 2 comments
Owner

NFR-A11Y-3 — Colour-independent status. Tagged and largely built, but the tag now says more than the evidence does.

What is genuinely built

The clipping readout pairs a marker that appears or disappears with a figure in words; the rating strip is a solid star against an outline in an achromatic palette; the pick/reject mark is a tick against a cross; the focus-peaking chips say "Red" and "Cyan" rather than showing swatches.

Two caveats

Only the clipping clause has a test — a_clipping_figure_distinguishes_none_from_nearly_none, which pins <0.1% apart from 0% so the figure cannot contradict the lit marker beside it. The three Slint components are inspected-and-argued, not asserted: nothing would fail if a future edit made a star differ only in tint.

The requirement's first named example has no interface at all. Catalog colour labels are a nullable label INTEGER column on the versions table, set and shown nowhere. That clause is untestable rather than satisfied, and it closes when the label UI is built — not before.

Acceptance

  • A colour-label interface exists, and distinguishes labels by more than hue from the outset.
  • The rating strip, the pick/reject mark and the peaking chips each gain a test that fails if the distinction becomes tint-only.

Sequencing

Build the label UI with an accessible shape from the start, which is the argument for doing this alongside #36 rather than after it.

See docs/outstanding.md §6.

**NFR-A11Y-3 — Colour-independent status.** Tagged and largely built, but the tag now says more than the evidence does. ## What is genuinely built The clipping readout pairs a marker that appears or disappears with a figure in words; the rating strip is a solid star against an outline in an achromatic palette; the pick/reject mark is a tick against a cross; the focus-peaking chips say "Red" and "Cyan" rather than showing swatches. ## Two caveats **Only the clipping clause has a test** — `a_clipping_figure_distinguishes_none_from_nearly_none`, which pins `<0.1%` apart from `0%` so the figure cannot contradict the lit marker beside it. The three Slint components are **inspected-and-argued, not asserted**: nothing would fail if a future edit made a star differ only in tint. **The requirement's first named example has no interface at all.** Catalog colour labels are a nullable `label INTEGER` column on the versions table, set and shown nowhere. That clause is *untestable* rather than satisfied, and it closes when the label UI is built — not before. ## Acceptance - [ ] A colour-label interface exists, and distinguishes labels by more than hue from the outset. - [ ] The rating strip, the pick/reject mark and the peaking chips each gain a test that fails if the distinction becomes tint-only. ## Sequencing Build the label UI **with an accessible shape from the start**, which is the argument for doing this alongside #36 rather than after it. See `docs/outstanding.md` §6.
dtourolle added the uicatalogsize:Sa11y labels 2026-09-05 16:20:18 +00:00
Author
Owner

Build with #36 — an accessible shape from the outset rather than retrofitted.

**Build with** #36 — an accessible shape from the outset rather than retrofitted.
Author
Owner

Merged to master: 89859d3, d748527, 46f5b95, f1db919, 96f1d5c, 04495af.

  • Catalog: set a label on one image or many (one transaction per action), the Lightroom toggle rule, and a label count in one grouped query.
  • Sidecar: .drsc stores label and merges it like the rating. The XMP write already carried it.
  • A new labels.slint mark carries the label's initial (R, Y, G, B, P) on its colour, so a label is never told apart by hue alone.
  • Grid: the mark sits before the filename. Keys 6–9 set red, yellow, green and blue on the photo under the pointer or on the selection, and the same key again clears it. A "Label" button on the selection bar offers None plus all five; purple is there only, as in Lightroom.
  • Develop: the top bar shows "Label: Green" beside the mark, with the same picker, and keys 6–9 work there too.
  • Filter: a chip per label with its mark, name and count, saved with the place.
  • ui/dr-ui/tests/status_is_not_colour_alone.rs fails if the stars, the pick/reject flag, the peaking chips or the labels become distinguishable by colour alone. Each was broken by hand to confirm its test fails.

Checked visually on a release build. Loose end: the develop label is read from the grid's current-row model, so it is only as reliable as that row after a reload.

Merged to master: 89859d3, d748527, 46f5b95, f1db919, 96f1d5c, 04495af. - Catalog: set a label on one image or many (one transaction per action), the Lightroom toggle rule, and a label count in one grouped query. - Sidecar: `.drsc` stores `label` and merges it like the rating. The XMP write already carried it. - A new `labels.slint` mark carries the label's initial (R, Y, G, B, P) on its colour, so a label is never told apart by hue alone. - Grid: the mark sits before the filename. Keys 6–9 set red, yellow, green and blue on the photo under the pointer or on the selection, and the same key again clears it. A "Label" button on the selection bar offers None plus all five; purple is there only, as in Lightroom. - Develop: the top bar shows "Label: Green" beside the mark, with the same picker, and keys 6–9 work there too. - Filter: a chip per label with its mark, name and count, saved with the place. - `ui/dr-ui/tests/status_is_not_colour_alone.rs` fails if the stars, the pick/reject flag, the peaking chips or the labels become distinguishable by colour alone. Each was broken by hand to confirm its test fails. Checked visually on a release build. Loose end: the develop label is read from the grid's current-row model, so it is only as reliable as that row after a reload.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: dtourolle/DarkRoom#37