FR-CULL-13 — Evidence never becomes a verdict, and a test proves it #55

Open
opened 2026-09-19 10:20:51 +00:00 by dtourolle · 2 comments
Owner

Every signal the app computes about a frame is evidence; no code path writes a rating, flag, label or trash membership without an input event between the signal and the write. Added to the spec 2026-09-19 (7db999c) with R7; nothing is tagged to it yet.

Why

FR-CULL-5's ground rule — automated selection is distrusted because its documented failure is rejecting the only frame of a moment — was stated once and enforced nowhere. FR-CULL-8a adds per-face eye state and head pose, which are exactly the signals a well-meaning shortcut would turn into an auto-reject. The clause says the classifier does not hold the pen; this issue is the mechanism.

Deliverable

  • A test that enumerates every write to the rating and flag axes (dr_catalog::rating, the sidecar judgement writers, burst representative acceptance) and shows each reachable only from an input event — a static assertion over the call graph or a tagged allow-list, whichever fails loudly when a new writer appears.
  • Evidence chips on the grid cell and in FR-CULL-4's mode: clipping, focus, burst membership, per-face counts — each naming what it measured, and shown as absent, never zero, when it could not be computed.
  • A filter on any one signal through the selector language (ARCH §9.2) returning exactly the set whose chips show it.
  • Burst representative proposals accepted by a press, never by timeout or default.

Acceptance

  • The write-path test exists and fails when a write is added without an input event on its path
  • Evidence visible on the grid cell and in culling mode without opening the frame
  • A signal that could not be computed reads as absent, not zero
  • TRACES: FR-CULL-13 on the test and the chip row; TRACES: R7 on the judgement dispatch
**Every signal the app computes about a frame is evidence; no code path writes a rating, flag, label or trash membership without an input event between the signal and the write.** Added to the spec 2026-09-19 (7db999c) with R7; nothing is tagged to it yet. ## Why FR-CULL-5's ground rule — automated selection is distrusted because its documented failure is rejecting the only frame of a moment — was stated once and enforced nowhere. FR-CULL-8a adds per-face eye state and head pose, which are exactly the signals a well-meaning shortcut would turn into an auto-reject. The clause says the classifier does not hold the pen; this issue is the mechanism. ## Deliverable - A test that enumerates every write to the rating and flag axes (`dr_catalog::rating`, the sidecar judgement writers, burst representative acceptance) and shows each reachable only from an input event — a static assertion over the call graph or a tagged allow-list, whichever fails loudly when a new writer appears. - Evidence chips on the grid cell and in FR-CULL-4's mode: clipping, focus, burst membership, per-face counts — each naming what it measured, and shown as *absent*, never zero, when it could not be computed. - A filter on any one signal through the selector language (ARCH §9.2) returning exactly the set whose chips show it. - Burst representative proposals accepted by a press, never by timeout or default. ## Acceptance - [ ] The write-path test exists and fails when a write is added without an input event on its path - [ ] Evidence visible on the grid cell and in culling mode without opening the frame - [ ] A signal that could not be computed reads as absent, not zero - [ ] `TRACES: FR-CULL-13` on the test and the chip row; `TRACES: R7` on the judgement dispatch
dtourolle added the uicatalogunmet-requirementsize:Mculling labels 2026-09-19 10:20:51 +00:00
dtourolle added a new dependency 2026-09-19 10:21:01 +00:00
Author
Owner

Progress check (2026-09-24). Eye state only:

  • eye evidence shown as a mark on People face cells, and as an "Eyes open" library filter chip (85cc2b1)
  • a face that was never read shows an empty mark, not "closed" (absent, not zero)
  • burst representative chosen by a press, not automatically
  • no test enumerates the rating/flag writers and proves they are reachable only from an input event
  • no clipping / focus / face-count evidence chips on grid cells or in culling mode
  • no TRACES: R7

cd0ca67 records that a pass selecting frames by blink was deliberately not built.

Progress check (2026-09-24). Eye state only: - [x] eye evidence shown as a mark on People face cells, and as an "Eyes open" library filter chip (85cc2b1) - [x] a face that was never read shows an empty mark, not "closed" (absent, not zero) - [x] burst representative chosen by a press, not automatically - [ ] no test enumerates the rating/flag writers and proves they are reachable only from an input event - [ ] no clipping / focus / face-count evidence chips on grid cells or in culling mode - [ ] no `TRACES: R7` cd0ca67 records that a pass selecting frames by blink was deliberately not built.
Author
Owner

First half shipped in v0.18.2 (2cde2874, adbb9ac9): tools/traceability/src/verdicts.rs parses every shipped Rust file and fails CI (no_verdict_is_written_but_by_a_person) if a rating, flag, label or trash entry is written anywhere but a reviewed list of 74 sites: user input callbacks, relays checked back to them, and verdicts carried from elsewhere (sync, sidecar/XMP reads, duplicate consolidation). Planting a write in burst grouping and in the eye-state reader made it fail. TRACES: FR-CULL-13 | R7. Still open: the evidence chips (clipping, focus, burst, face count) on grid cells and in culling mode, shown as absent rather than zero.

First half shipped in v0.18.2 (2cde2874, adbb9ac9): `tools/traceability/src/verdicts.rs` parses every shipped Rust file and fails CI (`no_verdict_is_written_but_by_a_person`) if a rating, flag, label or trash entry is written anywhere but a reviewed list of 74 sites: user input callbacks, relays checked back to them, and verdicts carried from elsewhere (sync, sidecar/XMP reads, duplicate consolidation). Planting a write in burst grouping and in the eye-state reader made it fail. TRACES: FR-CULL-13 | R7. Still open: the evidence chips (clipping, focus, burst, face count) on grid cells and in culling mode, shown as absent rather than zero.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Reference: dtourolle/DarkRoom#55