From 0906c3983fe8eac35d8a9ededabec066e957cdb0 Mon Sep 17 00:00:00 2001 From: Duncan Tourolle Date: Sun, 30 Aug 2026 10:17:53 +0200 Subject: [PATCH] Stop reading a coverage calculation as a diagnostics subsystem MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit NFR-OPS-1 asks for structured levelled logging to a rotating, size-capped on-disk log in the XDG state or Android app directory, automatic redaction of credentials and tokens, and a one-click diagnostics bundle with an explicit preview-and-consent step. Its two tags were on `compute_coverage` and on the traceability tool's gesture extractor. Neither is diagnostics under any reading. One computes a ratio and the other generates a markdown document; neither writes a log, and no rotating on-disk log exists anywhere in the tree — logging goes to stderr and to logcat. These were real tags, not the fixtures the extractor was just taught to ignore, which makes them the more instructive case: the tool was correct and the tags were wrong. NFR-OPS-1 is untagged again, and outstanding.md §9 now says what is actually missing rather than that the requirement is covered. `gestures.rs` keeps its FR-UI-4 tag, which is a separate claim and unaffected. Co-Authored-By: Claude Opus 5 (1M context) --- docs/outstanding.md | 10 +++++++--- tools/traceability/src/gestures.rs | 2 +- tools/traceability/src/lib.rs | 1 - 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/docs/outstanding.md b/docs/outstanding.md index b6addb2..ccdfeb1 100644 --- a/docs/outstanding.md +++ b/docs/outstanding.md @@ -326,9 +326,13 @@ because a fixture demonstrating tag extraction was indistinguishable from a tag. asks where the tag sits — a tag is the first word of a comment, not a string appearing anywhere on a line — and R1 is untagged again, which is the honest reading while it has no acceptance criterion to tag anything against. -NFR-OPS-1 is covered the same way, from a tag on `compute_coverage` — and no rotating, size-capped -on-disk log exists; logging goes to stderr and logcat. These are two of the cases -[CONTRIBUTING.md](../CONTRIBUTING.md) already warns about, now named. +NFR-OPS-1 was covered by tags that were real rather than fixtures, which is the worse case of the +two: one on `compute_coverage` and one on the gesture extractor, both on the traceability tool. A +coverage calculation and a documentation generator are not diagnostics under any reading, and the +requirement asks for a rotating, size-capped on-disk log in the XDG state directory, credential +redaction, and a consented diagnostics bundle. None of that exists — logging goes to stderr and +logcat — so both tags have been removed and NFR-OPS-1 is untagged. It is the case +[CONTRIBUTING.md](../CONTRIBUTING.md) warns about in its own words: a tag proves a tag exists. **R2 — Efficient display of huge RAW libraries.** Its acceptance criterion contains "*(figure TBD)*" — the scroll velocity below which no cell may render as a placeholder — and asks for a stated diff --git a/tools/traceability/src/gestures.rs b/tools/traceability/src/gestures.rs index 3d10f00..c0783bf 100644 --- a/tools/traceability/src/gestures.rs +++ b/tools/traceability/src/gestures.rs @@ -1,4 +1,4 @@ -//! TRACES: FR-UI-4 | NFR-OPS-1 +//! TRACES: FR-UI-4 //! Interaction documentation, extracted from the code that implements it. //! //! # Why this exists at all diff --git a/tools/traceability/src/lib.rs b/tools/traceability/src/lib.rs index b3ee4da..8846d27 100644 --- a/tools/traceability/src/lib.rs +++ b/tools/traceability/src/lib.rs @@ -306,7 +306,6 @@ fn trim_body(line: &str) -> String { /// /// This signature is the fix for the 158% bug: `defined` is required, so there /// is nowhere for a frozen denominator to hide. -/// TRACES: NFR-OPS-1 pub fn compute_coverage(traced: &BTreeSet, defined: &DefinedRequirements) -> Coverage { let traced_reqs: BTreeSet<&String> = traced.iter().filter(|id| is_requirement(id)).collect();