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.
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.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
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 from0%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 INTEGERcolumn 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
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.Build with #36 — an accessible shape from the outset rather than retrofitted.
Merged to master:
89859d3,d748527,46f5b95,f1db919,96f1d5c,04495af..drscstoreslabeland merges it like the rating. The XMP write already carried it.labels.slintmark carries the label's initial (R, Y, G, B, P) on its colour, so a label is never told apart by hue alone.ui/dr-ui/tests/status_is_not_colour_alone.rsfails 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.