Tag the judgement dispatch R7 and record which half of FR-CULL-13 is met

apply_judgement and apply_label carry TRACES: R7, the burst
representative callback FR-CULL-13 with a note that choosing it writes
the grouping and no verdict. The register's status for FR-CULL-13 says
the write-path test is met and the evidence chips are outstanding.
Traceability matrix regenerated.
This commit is contained in:
2026-09-27 07:20:41 -04:00
parent 2cde287440
commit adbb9ac9e6
3 changed files with 46 additions and 21 deletions
+15
View File
@@ -1318,6 +1318,21 @@ only from an input event. The evidence for a frame is visible in FR-CULL-4's mod
cell without opening it, and a filter on any one signal returns exactly the set whose chips show cell without opening it, and a filter on any one signal returns exactly the set whose chips show
it. it.
*Status (2026-09-26).* The write-path half is met; the evidence half is not. `cargo test -p
traceability` enumerates every write of a rating, flag, colour label or trash membership in the
shipped code — the catalog setters, any SQL that assigns those columns, the sidecar's judgement
amendment and the fields that carry one — and holds each to a hand-written list
(`tools/traceability/src/verdicts.rs`). Each listed write is a key, click or tap (a Slint `on_*`
callback, checked structurally), a function writing for its caller, whose callers are then checked
in turn, or a verdict carried from elsewhere: a sidecar or `.xmp` pull, the sync merge of two
devices' sidecars, the catalog mirrored out to a file, and duplicates consolidation, which moves
the copies' own verdicts onto the survivor and invents none. A new writer, including one in an
evidence producer, fails the test until it is listed with a reason; `traces verdicts` prints the
list. Choosing a burst's representative writes the grouping, not a verdict, and takes a press.
Outstanding: evidence chips (clipping, focus, burst membership, face counts) on the grid cell and in
FR-CULL-4's mode, shown as absent rather than zero, and a filter per signal. Eye state alone is
shown today, on People's face cells and as a library filter.
### 3.9.1 People ### 3.9.1 People
Face recognition was deferred in §7 through the 2026-08-08 calibration. It is undeferred here in a Face recognition was deferred in §7 through the 2026-08-08 calibration. It is undeferred here in a
File diff suppressed because one or more lines are too long
+12 -2
View File
@@ -115,7 +115,7 @@ impl LabelGesture {
} }
} }
/// TRACES: FR-CAT-5 | FR-CAT-13 /// TRACES: FR-CAT-5 | FR-CAT-13 | R7
/// Label a set of images: catalog first, in one transaction, then the grid, /// Label a set of images: catalog first, in one transaction, then the grid,
/// the chips and both sidecars — the order and the reasons of /// the chips and both sidecars — the order and the reasons of
/// [`apply_judgement`]. /// [`apply_judgement`].
@@ -376,8 +376,15 @@ fn keyword_summary(word: &str, changed: usize, selected: usize, assigning: bool)
format!("{verb} “{word}” {preposition} {changed} of {selected}") format!("{verb} “{word}” {preposition} {changed} of {selected}")
} }
/// TRACES: R7 | FR-CULL-13
/// Apply a judgement to a set of images: catalog first, then sidecars. /// Apply a judgement to a set of images: catalog first, then sidecars.
/// ///
/// The judgement dispatch: every rating and flag a person gives passes
/// through here, from an `on_*` callback below, and nothing else calls it.
/// `tools/traceability/src/verdicts.rs` holds that to a list — a call from
/// anywhere else, and in particular from anything that computes evidence
/// about a frame, fails `cargo test -p traceability`.
///
/// # Order matters /// # Order matters
/// ///
/// The catalog is written **synchronously and first**, so the star appears /// The catalog is written **synchronously and first**, so the star appears
@@ -1075,10 +1082,13 @@ pub(super) fn wire_ratings_and_flags(
}); });
} }
// TRACES: FR-CULL-5 | FR-CULL-13
// Name the frame an open burst folds to (FR-CULL-5). The default is the // Name the frame an open burst folds to (FR-CULL-5). The default is the
// earliest of them, chosen because it is a fact about the clock and not a // earliest of them, chosen because it is a fact about the clock and not a
// judgement about the photograph; this is the photographer, who is the only // judgement about the photograph; this is the photographer, who is the only
// one who knows which of the twelve is the keeper, saying otherwise. // one who knows which of the twelve is the keeper, saying otherwise. The
// choice is a grouping, not a verdict: `bursts::choose` moves the badge
// and writes no rating, flag or label (FR-CULL-13).
// //
// A repaint of the badges rather than a reload, which is what separates it // A repaint of the badges rather than a reload, which is what separates it
// from folding a burst up: the grid's query returns the same rows either // from folding a burst up: the grid's query returns the same rows either