R-294: check-cited resolves derived figures against the rule, not a stored copy
c0 argued a baseline for the step-5 split would be a cache of the rule and a guard
over it would mostly assert that arithmetic has not changed. Right objection,
wrong conclusion: do not store it. ARTIFACTS now takes a { derive } entry as well
as a file path -- enumerated on this build, nothing stored, and no --update able
to silence a real disagreement between the document and the game.
tools/step5-split.mjs enumerates all 10,000 pairs through opposedContestFor with
its targets derived: 55 and 60 are the lowest POWx5 in the six and in the cut, 42
is applyDifficulty(85, "difficult"). Two different rules produce those three
numbers -- the accepted row is a named exception, not the lowest of anything -- and
a test fails if anyone unifies them. A tie in "the lowest POW in the room" is
fatal rather than silently resolved; it fired for real in testing.
Proved four ways, including raising Okonkwo's POW to 13: the lowest moves to
Braithwaite, refused.held goes 48.1 to 52.4, and the citation that was correct a
moment earlier fails. The figure follows the rule.
Landed unused -- the markers are c0's to place in their own file.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
90cb251358
commit
fb6e2cf321
@@ -6930,3 +6930,49 @@ hypothetical until a skill nobody on the roster reaches proved it. And the first
|
||||
new test ended in `assert.ok(… || true)` — a tautology that passes on anything, which is the
|
||||
decoration this suite exists to refuse. Mutation-checked after removing it: making
|
||||
`playableFiles` stop excluding records turns it red.
|
||||
|
||||
## R-294 — a citation that resolves against the rule, not against a stored copy of it
|
||||
|
||||
c0 asked whether the step-5 contest split should get a baseline, and argued against its own
|
||||
suggestion: an artifact that is a pure function of `rules.mjs` is a cache of the rule, and a
|
||||
guard over it mostly asserts that arithmetic has not changed. The objection is right. The
|
||||
conclusion is not "do not guard it" but **"do not store it"**.
|
||||
|
||||
`check-cited`'s `ARTIFACTS` map now takes a `{ derive }` entry as well as a file path. A
|
||||
string is a recorded baseline — sampled, seeded, noisy, expensive to re-run, and re-recorded
|
||||
with `--update`. A derived source is enumerated on this build. Nothing is stored, so nothing
|
||||
goes stale and **there is no `--update` able to silence a real disagreement between the
|
||||
document and the game.** The document writes `**48.1%**<!-- cite: step5 refused.held -->` and
|
||||
does not care which kind it is.
|
||||
|
||||
`tools/step5-split.mjs` is the first one: all 10,000 roll pairs against `opposedContestFor`,
|
||||
no seed and no runs. **Targets derived, never written.** 55 and 60 are the lowest POW×5 in
|
||||
the six and in the four-player cut; 42 is `applyDifficulty(85, "difficult")`.
|
||||
|
||||
**Two rules produce those three numbers and c0 caught me before I collapsed them.** The
|
||||
refused rows are "the lowest POW in the room" over a population. The accepted row is not the
|
||||
lowest of anything — it is a named exception that takes Ashcroft and drops him to Difficult.
|
||||
One derivation covering both would be right today for the wrong reason, and there is now a
|
||||
test that fails if someone unifies them.
|
||||
|
||||
**A tie is fatal**, also c0's: "the lowest POW in the room" stops being well-defined the
|
||||
moment two agents share it, and answering anyway would hold the prose against an arbitrary
|
||||
pick. This fired for real during testing — raising Okonkwo's POW by one ties him with
|
||||
Braithwaite at 60, and the build stopped with both names.
|
||||
|
||||
**Proved four ways** in worktrees: a correct citation resolves (29 figures, 5 sources); a
|
||||
wrong one fails with its own message, which says *nothing was re-recorded and nothing can
|
||||
be*; a tie refuses; and raising Okonkwo's POW to 13 moves the lowest to Braithwaite, changes
|
||||
`refused.held` from 48.1 to 52.4, and fails the citation that was correct a moment earlier.
|
||||
That last one is the whole point — the figure follows the rule.
|
||||
|
||||
**Two errors of mine, both caught by measurement rather than review.** The blend was computed
|
||||
from the rounded rows under a comment saying it used raw proportions, giving 43.7 where the
|
||||
document correctly prints 43.6; a comment describing what code ought to do is the defect this
|
||||
suite is named for, and this one lasted ninety seconds. And the first exhaustiveness test
|
||||
asserted the displayed percentages sum to 100 — they need not: 40.7 + 48.1 + 11.3 is 100.1,
|
||||
three independent round-ups, and the document's table carries the same harmless 0.1. The code
|
||||
was right and the test was wrong.
|
||||
|
||||
**Landed unused, deliberately.** No citation markers were placed, because `CLEAN_GROUND.md` is
|
||||
c0's and the markers are theirs to place. The mechanism is what this commit is.
|
||||
|
||||
Reference in New Issue
Block a user