R-296: the review log entry for the pack tables
The work landed in a5c4378 under the subject "R-294", which was already
taken by the peer session's derived-source resolver. R-295 was taken too,
so renumbering to 295 as I first proposed would have collided with
something already in the log. Read the log before writing rather than
accepting the correction: it runs to R-295, both of those entries are
theirs, and mine is R-296.
The commit subject stays wrong; rewriting a pushed subject to fix a number
is worth less than the entry pointing at it.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
47f2df9446
commit
7afd5b86cc
@@ -6995,3 +6995,56 @@ Everything in the step-5 prose now resolves to a derived value: `refused.*`, `cu
|
||||
`accepted.*`, `hadHeRefused.*`, `blended.*`, the shares, the targets and the thing's own 75.
|
||||
The markers themselves are not placed yet — `CLEAN_GROUND.md` is c0's and they are in it,
|
||||
placing 91 `packs` citations of their own.
|
||||
|
||||
## R-296 — EXPOSURE's tables were censored by a ceiling nobody had looked at
|
||||
|
||||
Desk pass 9 found the scenario's most consequential table — the one that decides whether a
|
||||
GM lets a fight happen — held by nothing: about thirty sampled figures, no artifact, and
|
||||
`lethality-baseline.json` covering none of them, since that measures creatures **solo**
|
||||
against a frozen four-agent party that is not this cast.
|
||||
|
||||
Building the baseline found the figures were also wrong.
|
||||
|
||||
`simulate.mjs:490` calls `runFight(rng, partySpecs, enemySpecs)` with no options, so every
|
||||
figure EXPOSURE ever printed was measured at the default `maxRounds` of 40 — and `runFight`
|
||||
does not report truncation. Its loop is `for (; round < maxRounds; round++)` and it returns
|
||||
whoever is standing when that stops. Truncation was inferable from `rounds === maxRounds`
|
||||
and nothing was inferring it.
|
||||
|
||||
```
|
||||
line.column6 14.8% -> 15.2% 34/2000 truncated
|
||||
line.hollow6col2 7.8% -> 8.3% 129
|
||||
line.hollow6col3 28.7% -> 30.1% 264
|
||||
cut.hollow6 58.7% -> 74.9% 578 <- 29% of runs never finished
|
||||
```
|
||||
|
||||
**Fourteen points on the most alarming number in the case**, and the one v0.16 added
|
||||
specifically to warn four-player tables. R-270 taught this lesson in `fight-tail`, which has
|
||||
carried an `assertUncensored` ever since; EXPOSURE's own tables never got one. The longest
|
||||
fight at cap 400 is 120 rounds and 400 and 2000 give identical figures, so the new cap is
|
||||
comfortable rather than merely sufficient.
|
||||
|
||||
`tools/pack-tables.mjs` measures all seventeen configs against the cast **derived** through
|
||||
`castAndCut`, and refuses to report or record a truncated sweep rather than recording one
|
||||
with a warning — a warning on a number that is already wrong is a number that gets quoted.
|
||||
`tools/check-packs.mjs` holds the baseline against the game, so the pair is not a loop:
|
||||
`check-cited` holds the prose against the record, this holds the record against the harness.
|
||||
Its hard claims read `now` and never `base`.
|
||||
|
||||
**Two things worth keeping from building it.**
|
||||
|
||||
`measure()` threads ONE rng through every run rather than reseeding per run. The first probe
|
||||
reseeded, got different numbers, and nearly reported the published table as unreproducible
|
||||
when it was the probe's own stream that was wrong — the same trap as `seedFor` re-rolling a
|
||||
measurement when a config is renamed.
|
||||
|
||||
And the removed-config test **passed for a bad reason**: `MIN_CONFIGS` is a floor of 14, and
|
||||
seventeen minus one is sixteen, which clears it. The test was green and meaningless. That is
|
||||
worse than an `assert.ok(… || true)`, which passes on anything and is visible on sight; this
|
||||
one passed on the specific thing it was written to catch. A dropped-config check was added
|
||||
and re-tested on a row that sits in no monotonic chain, so the failure could not be borrowed
|
||||
from a neighbouring assertion.
|
||||
|
||||
*(Committed as a5c4378 under the subject "R-294", which was already taken by the derived
|
||||
source. The number here is the correct one; the commit subject is wrong and is left alone
|
||||
rather than rewritten.)*
|
||||
|
||||
Reference in New Issue
Block a user