check-unmarked: the figures a vocabulary cannot name, and a repair to HEAD
eead663 committed a document citing `step5 unsettledFactor` while the module
that would export it was still uncommitted in another session's working tree,
so `check-cited` fails on a fresh checkout of HEAD. step5-split.mjs is included
here to repair that; the key derives Act Four's 1.29 from the raw proportions,
which is the figure R-294 exists about.
check-figures (R-299) reports OK on the "24" it was written to catch. Its own
entry names why: the eight shapes were read off figures that are already cited,
so the vocabulary is learned from the marked figures and cannot contain the
phrasing of the one nobody marked. Line 1272 is a table cell whose measurement
status lives in the header two rows above it, and figuresIn reads one line.
check-unmarked reads structure instead of vocabulary: a bold percentage or
decimal in an opted-in document, and a bold number in a table whose header row
names a measurement. Twelve unmarked figures in CLEAN GROUND; eleven correct
and unheld, one the stale 24 that line 1142 had been citing correctly as 25 for
130 lines. Waivers carry a reason, an empty one is fatal, and every waiver
prints on a green build.
Two guards now cover one question, which is one too many. The right end state
is the structural classes folded in beside check-figures' SHAPES, keeping its
opt-in rule and ratchet. That fold is offered to its author rather than taken.
Twelve string tests on unmarkedIn (88 -> 100), both halves mutation-checked.
Twenty-two guards green.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
eead6633c8
commit
960fb6be27
@@ -7216,3 +7216,90 @@ by its third run, and the fix is in the file next to the rule it fixes.
|
||||
|
||||
**State:** CLEAN GROUND v0.23, **21 guards**, 162 cited figures. Still the only untested thing
|
||||
is a run with human beings.
|
||||
|
||||
---
|
||||
|
||||
## R-300 — the vocabulary cannot contain the word nobody wrote
|
||||
|
||||
**R-299 built `check-figures` to catch the figure no marker holds, and it reports OK on the
|
||||
figure it was built for.** Not an argument — a run, against the document as it stood at
|
||||
`9897d55`, after its own commit had added markers to that very file:
|
||||
|
||||
```
|
||||
$ sed -n 1272p docs/scenarios/CLEAN_GROUND.md
|
||||
| Six hollow men + three of the column | **24** |
|
||||
$ node tools/check-figures.mjs
|
||||
check-figures: OK — 25 measurement-shaped figures across 5 scenarios, 7 marked …
|
||||
exit=0
|
||||
```
|
||||
|
||||
**R-299 states the mechanism itself, one sentence before the blind spot it causes.** The
|
||||
eight shapes are *"the phrasings the documents actually use when quoting the simulator, each
|
||||
one read off a figure that is already cited somewhere — so the guard learns its vocabulary
|
||||
from the marked figures and applies it to the unmarked."* **A vocabulary learned from the
|
||||
marked figures cannot contain the phrasing of the figure nobody marked.** The defect sits
|
||||
outside the training set by construction, and the narrowing that took the first draft from
|
||||
282 false positives down to 25 is the same narrowing that drops it. This is not a bug in the
|
||||
shapes. It is a property of deriving them that way, and it is the sharpest form yet of the
|
||||
thing this log keeps recording: **a check that passes for a reason unrelated to what it
|
||||
claims.** R-299's reasoning is sound, its ratchet and opt-in rule are both right, and it is
|
||||
still green on the one number it was written to find.
|
||||
|
||||
**Why that phrasing escaped.** Line 1272 is a table cell. Its measurement status lives in the
|
||||
header row two lines above — `| | Median rounds |` — and `figuresIn` reads one line at a
|
||||
time, so `median\s+N` and `N\s*rounds` both miss it. Nothing is adjacent to the number except
|
||||
a pipe.
|
||||
|
||||
**And the document was already contradicting itself.** Line 1142's measured table prints
|
||||
**25** and cites `packs line.hollow6col3.median`. Line 1272 printed **24** for the same
|
||||
configuration with no marker at all. One hundred and thirty lines apart, the correct side
|
||||
checked on every build and the wrong side invisible to every guard in the repo, through
|
||||
eleven desk passes. The self-contradiction is the part worth keeping: **the document already
|
||||
held the right answer, in the regime, and that bought nothing**, because a guard cannot
|
||||
compare a figure it cannot see against one it can.
|
||||
|
||||
**`tools/check-unmarked.mjs` reads structure instead of vocabulary**, which is why it does
|
||||
not inherit the gap:
|
||||
|
||||
- a **bold percentage or decimal** anywhere in an opted-in document. The corpus bolds what it
|
||||
publishes and leaves ratings plain — `Brawl 55%` is a fact about a sheet, `**8.3%**` is a
|
||||
claim about a run — so the document's own typography is the declaration, and it needs no
|
||||
vocabulary at all.
|
||||
- a **bold number in a table whose header row names a measurement**, scoped by walking the
|
||||
`|---|` separator to find which header owns which rows.
|
||||
|
||||
Twelve unmarked figures in CLEAN GROUND. **Eleven were correct and unheld; one was the 24.**
|
||||
|
||||
**What was done with the twelve.** Nine now carry citations — the four median-rounds rows
|
||||
against `packs`, the accepting 48.7% against `step5 accepted.taken`, the main table's 0%
|
||||
against `packs line.hollow6.wiped`. Six carry `uncited:` waivers naming why no artifact
|
||||
exists: three special/fumble bands out of `resolveBands`, the Spot 40 fumble, the 100-against-60
|
||||
tie-break (a pair no countdown row uses), and the column's Dodge 68, which is a creature
|
||||
rating rather than a measurement. **A waiver must carry a reason and an empty one is fatal**
|
||||
— the call made for the empty cast marker in R-288 — and every waiver prints on every green
|
||||
build, so a decision to stop checking something stays visible instead of becoming the
|
||||
default.
|
||||
|
||||
**One figure was promoted rather than waived.** Act Four's **1.29** was loose arithmetic over
|
||||
two step5 rows, and `step5Split` now derives `unsettledFactor` so check-cited holds it. Worth
|
||||
recording why it survives inspection: **1.29 is right, and right for the reason R-294 was
|
||||
written about** — the raw proportions give 1.2889, the rounded rows give 1.2832, and the
|
||||
document has the raw answer.
|
||||
|
||||
**Two guards now cover one question and that is one too many.** `check-figures` catches
|
||||
phrase-shaped figures anywhere, including in documents that cite nothing, which
|
||||
`check-unmarked` does not attempt; `check-unmarked` catches published and tabulated figures,
|
||||
which no vocabulary reaches. Both are green, both are in `npm run check`, and the right end
|
||||
state is one guard holding both readers — the structural classes folded in beside `SHAPES`,
|
||||
keeping R-299's opt-in rule and ratchet, which are the better half of the design. **That fold
|
||||
is not done here**, because `check-figures` belongs to another session and was committed
|
||||
minutes before this work; it was offered to its author rather than taken. Until then the
|
||||
build runs both, which is worse to maintain and strictly better to trust.
|
||||
|
||||
**Verification.** Twelve string tests on `unmarkedIn` in `check-behaviour` (88 → 100), each
|
||||
naming the shape it classifies rather than editing the corpus — R-292's rule, because a
|
||||
reader tested by editing the document goes quiet the day somebody rewords the sentence.
|
||||
Both halves mutation-checked: disabling the table-header class fails *"a bold figure under a
|
||||
measurement header is fatal"* and nothing else; accepting an empty waiver fails *"an EMPTY
|
||||
waiver is fatal"* and nothing else. End to end, restoring the **24** stops the build with
|
||||
both values named. Twenty-two guards green.
|
||||
|
||||
Reference in New Issue
Block a user