docs(773): strip session narrative — the reader never saw the earlier drafts
PR Gates / CI image pin matches docker/ci (pull_request) Successful in 7s
PR Gates / Docs update reminder (pull_request) Successful in 12s
PR Gates / decisions lifecycle (pull_request) Successful in 16s
Review verdict / Set review-verdict status (pull_request_target) Successful in 29s
PR Gates / Script tests (pytest) (pull_request) Successful in 2m15s
review-verdict/h10 Review-verdict: MERGEABLE @ 1a2afd2 (base: main)
Build ErsatzTV Image / Build & test (.NET) (pull_request) Successful in 9m20s
Build ErsatzTV Image / EF migration integrity (SQLite + MySql) (pull_request) Successful in 6m44s
Build ErsatzTV Image / Build & push image (amd64) (pull_request) Skipped
Build ErsatzTV Image / Functional E2E (curl + UI contracts) (pull_request) Successful in 6m31s
Build ErsatzTV Image / API docs in sync (OpenAPI + endpoint index) (pull_request) Successful in 7s
Build ErsatzTV Image / Formatting (changed .cs conform to .editorconfig) (pull_request) Successful in 5s
PR Gates / CI image pin matches docker/ci (pull_request) Successful in 7s
PR Gates / Docs update reminder (pull_request) Successful in 12s
PR Gates / decisions lifecycle (pull_request) Successful in 16s
Review verdict / Set review-verdict status (pull_request_target) Successful in 29s
PR Gates / Script tests (pytest) (pull_request) Successful in 2m15s
review-verdict/h10 Review-verdict: MERGEABLE @ 1a2afd2 (base: main)
Build ErsatzTV Image / Build & test (.NET) (pull_request) Successful in 9m20s
Build ErsatzTV Image / EF migration integrity (SQLite + MySql) (pull_request) Successful in 6m44s
Build ErsatzTV Image / Build & push image (amd64) (pull_request) Skipped
Build ErsatzTV Image / Functional E2E (curl + UI contracts) (pull_request) Successful in 6m31s
Build ErsatzTV Image / API docs in sync (OpenAPI + endpoint index) (pull_request) Successful in 7s
Build ErsatzTV Image / Formatting (changed .cs conform to .editorconfig) (pull_request) Successful in 5s
Six places narrated this document's own revision history ("an earlier draft
counted...", "the first version of this table said 18", "the first attempt
returned 0 for Bash"). A reader coming to this cold never saw those drafts, so
the confessions carry no information they can act on — it is session narrative
leaking into a reference artifact.
Each was rewritten to keep what a reader needs and drop what only the author
knows:
- 3.6: was "an earlier draft double-counted" → now states why the families
overlap conceptually and that membership is a mechanically verified partition,
so an n is read as disjoint.
- 3.7: was "the first version said 18 and was wrong by half" → now two reusable
limits: 33 is a floor (it counts records that STATE a count), and re-deriving
it by pattern under-reports by roughly half, so read all 69.
- 5.3: was "my first attempt returned 0 for Bash too" → now the actionable form:
re-derive the zero WITH the positive control, because `rg -c` over multiple
files prints path:count and the obvious total sums the paths.
- 5.5 x2 and 5.5's evidence paragraph: dropped "an earlier draft skipped this"
and "because an earlier draft overclaimed"; the evidence-status distinction
itself is what matters and stays.
Deliberately KEPT, because these are findings rather than history: the struck-
through shellcheck row (a tool tested and rejected, so nobody re-proposes it),
the dated measurement stamps, and the 19:45 corpus-snapshot boundary.
The revision narrative is not lost — it lives in these commit messages and in
the closing record, which is where per-issue provenance belongs.
Refs #773
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
+21
-28
@@ -210,9 +210,10 @@ it was satisfied against a snapshot that stops being true."*
|
||||
|
||||
### 3.6 The partition, stated exactly
|
||||
|
||||
An earlier draft of this document counted several records in two families at once — twin-missed
|
||||
records claimed by both Family A and Family C. That is the very error §3 Family A is about, so the
|
||||
assignment is now given as an explicit partition and **verified to cover all 69 records exactly once**:
|
||||
The families overlap conceptually — a twin-missed record can be read as "another member of a
|
||||
population" or as "a second copy" — so membership is given as an explicit partition, **mechanically
|
||||
verified to cover all 69 records exactly once**. Read a family's n as a disjoint count, not a tally
|
||||
of everything the family's description could fit:
|
||||
|
||||
Family letters A–E are the ones §4 names detectors for, and those letters correspond. **This table
|
||||
assigns no letters below E.** §4's detectors F and G address fail-open and destructive-replace,
|
||||
@@ -285,17 +286,12 @@ the text under review.
|
||||
|
||||
**Two limits on this section, since it is the one making a claim about its own production.**
|
||||
|
||||
- **The first version of this table said 18, and was wrong by nearly half.** It was built by
|
||||
pattern-matching a regex I invented against the corpus — sampling the population instead of
|
||||
enumerating it, in the section arguing against exactly that. Worse, the hedge attached to it blamed
|
||||
"records that ran rounds without narrating them", which misdescribed the failure: the 15 missing
|
||||
records narrate their rounds in the same words as the counted ones, and one of them (#706) is named
|
||||
as a Family D member three paragraphs earlier in this document, so the table contradicted its own §3.
|
||||
A cold reviewer caught it. The correction was to read all 69 rather than write a better pattern —
|
||||
detector A, applied to the paragraph that proposes detector A.
|
||||
- Even now, 33 is a floor rather than a total: it counts records that *state* a round count, and a
|
||||
record that ran four rounds without saying so is invisible here. That limit is real; it is just not
|
||||
what was wrong the first time.
|
||||
- **33 is a floor, not a total.** It counts records that *state* a round count; a record that ran
|
||||
four rounds without narrating them is invisible here. Do not read the 36 remaining records as
|
||||
single-round work.
|
||||
- **Counting this by pattern rather than by enumeration under-reports it by roughly half.** A regex
|
||||
over the corpus finds 18 of these 33 — the misses narrate their rounds in the same words as the
|
||||
hits. If you re-derive this number, read all 69.
|
||||
- **#767 — the case #773 describes as taking eight review rounds — is excluded by snapshot timing,
|
||||
not by absence.** The corpus was drawn at 19:45 on 2026-08-13; #767 closed at 20:04, nineteen
|
||||
minutes later, and now carries a full `## Closing record`. So the worst instance of the phenomenon
|
||||
@@ -449,9 +445,8 @@ Measured over the session transcript corpus (811 files under
|
||||
|
||||
The zero for `LSP` is verified rather than assumed: the same query shape returns 23,661 `Bash` calls
|
||||
and 5,102 `Read` calls over the same corpus, so the search was demonstrably capable of finding hits.
|
||||
*(The first attempt at this count returned 0 for `Bash` as well — a `rg -c` output-format slip that
|
||||
summed the file path instead of the count. A zero without a positive control is exactly the vacuous
|
||||
verification this document is about.)*
|
||||
**Re-derive it with that positive control**, not on its own — `rg -c` over multiple files prints
|
||||
`path:count`, so the obvious way to total it sums the paths and returns zero for everything.
|
||||
|
||||
**Hooks are the good news.** All 13 scripts in `.claude/hooks/` are wired from either
|
||||
`.claude/settings.json` or `.husky/*`, and no settings entry points at a missing path — there are
|
||||
@@ -479,9 +474,8 @@ row in that table from inference to measurement, and it is cheap.
|
||||
|
||||
### 5.5 Tools we do *not* have that would address a named class
|
||||
|
||||
#773 asked for this explicitly and an earlier draft of this document skipped it. Each is justified
|
||||
against specific issues, not general merit; anything I could not tie to recorded instances is left
|
||||
out rather than padded in.
|
||||
Each is justified against specific issues, not general merit; anything that could not be tied to
|
||||
recorded instances is left out rather than padded in.
|
||||
|
||||
| Tool | Class it addresses | Justification |
|
||||
|---|---|---|
|
||||
@@ -496,14 +490,13 @@ be the symptom-keyed mistake. Nothing in the corpus suggests a tool we lack woul
|
||||
for Family A — the four in-repo reinventions show the convention works when applied; the failure is
|
||||
that it was never written down once.
|
||||
|
||||
**Evidence status of these rows, stated exactly, because an earlier draft of this paragraph
|
||||
overclaimed it.** Only the shellcheck row was *executed* — which is why it is struck through, and it
|
||||
was struck through *because* running it refuted the reason it had been proposed. The three surviving
|
||||
rows are **reasoned from precedent**: each names issues whose recorded mechanism the tool addresses,
|
||||
but none has been run against this repo to confirm it fires. That is a weaker warrant and should be
|
||||
discharged before any of them is adopted — a tool justified by "it plausibly catches this class" is
|
||||
the same species of claim as the guards this document criticises. Treat these three as candidates to
|
||||
test, not findings.
|
||||
**Evidence status of these rows, which differs and matters.** Only the shellcheck row was
|
||||
*executed* — and running it refuted the reason it had been proposed, which is why it is struck
|
||||
through. The three surviving rows are **reasoned from precedent**: each names issues whose recorded
|
||||
mechanism the tool addresses, but none has been run against this repo to confirm it fires. That is a
|
||||
weaker warrant and should be discharged before any of them is adopted — a tool justified by "it
|
||||
plausibly catches this class" is the same species of claim as the guards this document criticises.
|
||||
Treat these three as candidates to test, not findings.
|
||||
|
||||
**On MemPalace**, the 19-day gap deserves care rather than a verdict: `CLAUDE.md` makes it the
|
||||
documented discovery path for decisions, so either sessions are skipping the documented path, or
|
||||
|
||||
Reference in New Issue
Block a user