R-278: raising SCAN_RUNS found that SCAN_RUNS had never been read

Asked to raise the scan until the redcap's pack size stopped flipping. Measured
the threshold -- unstable at 3000 and 4000, stable across twenty seeds at 6000 --
raised it, and the re-record took fifteen seconds, which was impossible.

winRate takes three parameters and pickSize passed SCAN_RUNS as a fourth.
JavaScript discards it, so every scan has always run at RUNS and SCAN_RUNS has
never been read by anything. The fix I was asked to make was inert in the same
way as the thing it was fixing.

winRate takes runs now. The redcap is still n=3 with gain 6.3, arrived at stably
rather than luckily; the_arrears drops out of the measurable band at an honest
scan, 31 packs to 30; the_committee moves 2 to 6 and stays pinned. Claim check
still passes, bestiary regenerated.

The only signal was a number being too small. A fifteen-second re-record is good
news, and good news is what nobody investigates.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
slaguru666
2026-09-13 14:18:46 +01:00
co-authored by Claude Opus 5
parent 00e5a993cc
commit a7eca91a9c
5 changed files with 74 additions and 22 deletions
+45
View File
@@ -6403,3 +6403,48 @@ fights solo, read the wipe column when the agents-down column was the one that m
explained a power by a mechanism that does not hold. Each was found by somebody asking me to
act on it. The entry is worth keeping in that state rather than tidying: it is the clearest
example in this log of confident, internally consistent, repeatedly wrong.
## R-278 — raising SCAN_RUNS found that SCAN_RUNS had never been read
R-277 left the redcap's recorded pack size one seed in eight from being 2 instead of 3, so
the instruction was to raise the scan until it stopped flipping. Measured rather than
guessed: still unstable at 3000 and 4000, stable across twenty seeds at 6000. Raised it.
**Then the re-record took fifteen seconds, which was impossible.** Fifteen times the scan
work cannot cost what 400 runs cost, so I read the call:
```js
const winRate = (foes, targets, seed) => { for (let i = 0; i < RUNS; i++) ...
...
const w = winRate(Array(n).fill(spec), "random", seedFor(...), SCAN_RUNS);
```
**Three parameters, four arguments.** JavaScript discards the fourth in silence, so every
scan this guard has ever run used `RUNS`, and `SCAN_RUNS` — declared, commented, passed —
has never been read by anything. Changing it from 400 to 6000 also did nothing, which is
how it surfaced: the fix I was asked to make was inert in exactly the way the thing it was
fixing was.
That is the defect this project names as its own signature — a value computed and never
read — living inside a guard, undetected by seventeen other guards, for as long as the
scan has existed. **No guard can catch it.** The constant is used at its one call site and
the call site looks correct; only the clock disagreed.
**What the honest scan changed.** `winRate` takes `runs` now, and the re-record costs 49
seconds instead of 15:
- **the redcap is still n=3, gain still 6.3** — the answer R-277 gave was right, and is now
arrived at stably rather than luckily.
- **the_arrears drops out of the measurable band**, 31 packs to 30. Its best size was chosen
on 1000 runs and does not survive 6000, which means it has been carrying a recorded focus
gain that the scan would not now stand behind.
- **the_committee moves n 2 to 6** and stays pinned either way, so nothing is measured there
and nothing changes.
**The claim check still passes**: focus fire helps in all 30, all of them clear of their own
noise. Bestiary regenerated, and it prints 30 where it printed 31.
**The lesson is not about arity.** It is that the only signal was a number being too small,
and I nearly did not look — a fifteen-second re-record is good news, and good news is what
nobody investigates. The same instinct that made the README quieter as the build got worse
(R-268) made this cheaper as the scan got weaker.