Z: rewrite the opening for what the run actually found

This commit is contained in:
alex 2026-09-08 10:46:23 -04:00
parent 82f92b6ced
commit 9bf86325d9

View file

@ -19,17 +19,22 @@ neither.
## 0. Where to start if you are building the standalone ## 0. Where to start if you are building the standalone
Three sentences, then the evidence. 1. **A turn costs 18–22 generator words on the reference save, and §11 says which call site spends each
one**, summing to the measured total with nothing left over on three consecutive turns. Sixteen of them
1. A turn costs **18–22 generator words**, all of it inside are two `Chance` calls per player in `FUN_00893290` — a function that is **not** in the static
`StrategyServer::ProcessTurn`; the two autosave files bracket exactly that interval and nothing draws inventory of `ProcessTurn`'s draw sites and is still unidentified. Model that one first.
between them outside the two turn drivers. 2. **Two byte-identical oracle pairs with a known RNG cost** are in `verify/results/shim/tailrng/`:
2. `verify/results/shim/tailrng/z-t6-endturn.sav` → `z-t6-autosave.sav` is a **byte-identical oracle pair `z-t6-endturn` → `z-t6-autosave` (18 words) and `z2-endturn` → `z2-autosave` (20). Both were verified
with a known RNG cost of 18 words**, verified from the file bytes independently of the live hook. Test from the file bytes independently of any hook. Test against those before any other save, because no
against that pair before any other. corpus save carries a known cost.
3. Lane K's warning stands and is now quantified: the tail's cost is 0 **today** because no save is within 3. **Combat is free.** The first battle ever instrumented in this campaign moved the strategic generator
~40 turns of a node-line expiry (§9) and no encounter has ever produced a battle (§8). Both terms are by **0** words (§10). A reimplementation can model a turn's RNG and nothing about combat.
real; both are latent. 4. **Node-line decay is not free, and it is no longer hypothetical.** It fired on turn 64 of the Zuul save
and cost exactly the 1 word lane K predicted from the instruction stream (§9). Before that turn a
reimplementation modelling only `ProcessTurn` would have been correct; on that turn it would have been
one word out and every later turn would diverge.
5. **The generator does not move between turns** (§2.1), so the interval to reproduce is closed at both
ends.
## 1. The instrument, and why it is not an RNG hook ## 1. The instrument, and why it is not an RNG hook
@ -320,7 +325,11 @@ would have said so by construction rather than by anyone noticing.
* ~~The combat resolver has never run under an instrument.~~ **It has now, once — see §10. It cost 0 * ~~The combat resolver has never run under an instrument.~~ **It has now, once — see §10. It cost 0
words.** What remains unsettled is everything a single auto-resolved encounter cannot speak for; §10.2 words.** What remains unsettled is everything a single auto-resolved encounter cannot speak for; §10.2
lists it. lists it.
* **Node-line expiry did not fire.** See §9 for the quantified distance rather than an absence. * ~~Node-line expiry did not fire.~~ **It fired on turn 64 — §9.1.** What is still open about it is in
§9.3.
* **`FUN_00893290` is unidentified** and spends 16 of every turn's 18–20 words (§11.1). This is the single
biggest open item for anyone modelling a turn's RNG, and it is bigger than everything else on this list
put together.
* **A turn with a genuinely empty encounter vector was not observed** (§4). Both saves produce exactly one * **A turn with a genuinely empty encounter vector was not observed** (§4). Both saves produce exactly one
sighting encounter on every turn. The tail-runs-every-turn claim is settled; the no-encounters variant is sighting encounter on every turn. The tail-runs-every-turn claim is settled; the no-encounters variant is
still an inference, now a much narrower one. still an inference, now a much narrower one.