Files
ersatztv/scripts/tests
timothyandClaude Opus 5 ae8f736a66
Build ErsatzTV Image / CI toolchain image resolves (pull_request) Successful in 11s
Build ErsatzTV Image / Delimiter ban (release path) (pull_request) Successful in 18s
PR Gates / CI image pin matches docker/ci (pull_request) Successful in 15s
PR Gates / Docs update reminder (pull_request) Successful in 12s
PR Gates / Fix proofs (Proves trailers) (pull_request) Successful in 9s
PR Gates / decisions lifecycle (pull_request) Successful in 27s
Review verdict / Set review-verdict status (pull_request_target) Successful in 15s
PR Gates / Script lint and tests (ruff + pytest) (pull_request) Successful in 7m45s
review-verdict/h10 Review-verdict: MERGEABLE @ ae8f736 (base: main)
Build ErsatzTV Image / Build & test (.NET) (pull_request) Successful in 13m36s
Build ErsatzTV Image / EF migration integrity (SQLite + MySql) (pull_request) Successful in 9m18s
Build ErsatzTV Image / Build & push image (amd64) (pull_request) Skipped
Build ErsatzTV Image / Functional E2E (curl + UI contracts) (pull_request) Successful in 8m58s
Build ErsatzTV Image / API docs in sync (OpenAPI + endpoint index) (pull_request) Successful in 11s
Build ErsatzTV Image / Formatting (changed .cs conform to .editorconfig) (pull_request) Successful in 8s
fix(812): classify the narrative sites by who-benefits; keep the detector's reach
#784 generalized `docs.no-session-narrative` and REPORTED the leak rather than
remediating it. This is the remediation: 64 dispositions, manifest in the PR body.

THE POPULATION WAS NOT 21. The issue's table is dated at 706674272 (2026-08-21). Since
then 1924 lines have been added to `docs/**/*.md` outside `docs/decisions/` plus
root-level `*.md`, measured against origin/main at 8aeacd534, and every line number in
the issue had drifted. Measured, not assumed:

  - one of the 21 no longer exists — #872 rewrote guard-inventory.md's scope-limit
    section and the autobiography went with it, the *why* surviving. No action.
  - FOUR sites postdate the sweep (ci-cd 1674/1682, remote-state 149 x2).
  - The rest were already in the corpus and missed by BOTH of the sweep's passes.
  - Some are invisible to the detector BY CONSTRUCTION: it is line-based, so
    "an earlier \n draft" wrapped across a newline never matches. A line-based grep
    inherits that blind spot, which is how several sites stayed hidden until the sweep
    was re-run over WHITESPACE-JOINED text.

Auditing exactly the named lines would have repeated the defect the issue is about —
`guard-inventory.md` already records it as "the issue's list of files to assess was a
starting point, not the population".

DISPOSITIONS — 64 sites, one row per site in the PR body. Three kinds, not the issue's
binary, because for most sites the corrected claim and the autobiography sat in ONE
sentence: cutting loses the finding (#542), leaving it keeps the narrative. The rule
already licenses the third — "only the corrected claim enters the doc". 50 sites EDITED
(53 clauses; three sites carried two each), 13 KEPT as carve-outs, 1 ALREADY REMEDIATED.
Phrase-level only — no paragraph was restructured.

NO CLOSURE IS CLAIMED OVER A PHRASING SPACE, and that is the finding rather than a
caveat. One class was swept — a bare attribution of who found a finding, where the
reasons follow in the next clause. SIX review rounds each surfaced another survivor,
every round's grep a locally-correct word-list that never converged; the last found
"(revised after Fable review)" in a file whose SIBLING this change had already edited,
which is the fix-one-path-check-its-twin shape. So the claim is bounded: the manifest's
sites were remediated. NOT that the class is closed — not globally, and not inside the
docs corpus either. #876 carries the same bounded wording for the corpus outside `docs/`.

THE EXEMPTION TEST NEEDED A CLOSED-FORM PROOF, and three finite ones failed first.
`hits(out) == set()` passes when the scan examined NOTHING, so a non-exempt control is
required and that part always held. But proving a sample's absence is due to the PREFIX
rather than its SHAPE defeated a depth-1 control (by a depth-1 rule), a depth-3 control
(by a `count("/") <= 3` cap) and minimal twins (by a directory-NAME rule keyed on the
rename). Each was locally correct; the sequence did not converge. I retracted the claim;
review then showed the RETRACTION was itself premature, because a closed-form proof
exists that is not a fixture: `is_scanned_path` compared against an INDEPENDENT
restatement of the rule — written over path segments, not string prefixes — across every
tracked `*.md` path, plus a cross product of four dimensions a population rule has been
OBSERVED to key on here, since widened with basename, case and dotted directories. That
list enumerates; it is not a universal over the space of rules.

THE RESIDUAL AFTER ALL OF THAT IS THE WIRING, and it is named rather than closed. Every
proof above is about `is_scanned_path`; none establishes that the SCAN consults it. A
`continue` added at either call site re-exempts a path with the function untouched —
measured to drop `--all` from 66 files to 31 while the oracle stays green. A fixture
under `docs/superpowers/` is asserted to reach the OUTPUT so the one re-exemption this
change argues against is witnessed; the general residual stands.

`docs/superpowers/**` IS REACHED BY THE RULE and the detector's population is UNCHANGED.
A wholesale exemption was built, then killed under review: `--diff`, the mode CI runs,
scans ADDED lines and a frozen file contributes none, so it buys nothing where the check
runs; what it WOULD suppress is a plan being written or revised now — 15 of the 35 have
more than one commit. Two dated review SECTIONS there ("## Post-review
revisions (Fable, 2026-07-20)" and "## Fable review fold (2026-07-21)") are kept as stated
snapshot boundaries; the bare parenthetical attributions around them are not.

`--all` goes 9 -> 1. The survivor is the carved-out one: a rejected design kept with the
concrete harm that killed it.

Corrected in review: the sweep had replaced a true attribution at ci-cd.md:1910 with a
FALSE location — the third nil-slice instance was introduced by #622 on 2026-07-25, 12
days before the #751 fix, which does not touch that gate. And two edits had converted
observed defects into hypotheticals (ci-cd.md:982) and one round's yield into a total
(ci-cd.md:951); both are restored.

fixes #812

Decisions-Edit: yes
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019T79beF1Ufid3dXju4yqkF
2026-08-29 21:15:43 +02:00
..