sots-re/verify/results/standalone/rng-oracle.txt
lane Y c471a5515f lane Y: the standalone's generator against lane Z's calibrated oracle pairs, and the tail's turn record
The standalone now models the turn's dominant generator cost -- 16 of a measured 18-22
words -- and lands 4 and 2 short of the two calibrated pairs, which is exactly the
per-call-site ledger's split for those turns. The state block is byte-identical; only
left differs. The answer to 'does it match the oracle' is no, by a stated amount, and
tools/rng_oracle_check.py is the instrument that says so.

The tail's last phase is modelled for the six turn-record fields recoverable from the
wire and checked against the record the game itself archived: 480 fields over 80
player-records, 0 mismatches. It stays blocked; --commit-blocked shows exactly which
five fields are missing and what they cost.

By-product, and probably worth more than the phase: the stored bankruptcy elimination
limit is injective in the maximum-income sum it is built from, so every save states the
per-system output term that blocks ComputeBudget. tools/max_income_oracle.py inverts it
-- 25 player-records over the corpus -- and recovers the protection factor as 3.3 from
the saves rather than from the data files. It also shows the engine's -0.15 divisor
disagrees with the game on 6 of those 25.

divergence unchanged: 209->204 and 108->103, 5 closed / 0 regressed on both pairs.
2026-09-08 11:40:19 -04:00

23 lines
1.9 KiB
Text

# does the standalone's generator land on the oracle's?
## z2-endturn.sav -> z2-autosave.sav (ref-turn2, turn 4 -> 5)
oracle spent 20 word(s) (0 twist(s), from the files)
standalone 16 word(s) (metric says 16)
residual 4 word(s) NOT modelled
state block identical: yes left: ours 379, oracle 375
GENERATOR STATE MATCHES ORACLE: no
- unaccounted: encounter detection draws one unit value and one bounded integer per turn on every turn measured (2 words), with no derived rule behind the count -- its bound is the product of the contact and detector counts, so it is left unmodelled
- unaccounted: the research-allocation draw is downstream of the budget, which is blocked on the per-system money output (0 or 1 word)
- unaccounted: a successful raid roll may draw one further word to pick its target; no roll succeeded on any measured turn, so the cost of a success is 0 or 1 and undetermined
## z-t6-endturn.sav -> z-t6-autosave.sav (ref-turn2, turn 5 -> 6)
oracle spent 18 word(s) (0 twist(s), from the files)
standalone 16 word(s) (metric says 16)
residual 2 word(s) NOT modelled
state block identical: yes left: ours 359, oracle 357
GENERATOR STATE MATCHES ORACLE: no
- unaccounted: encounter detection draws one unit value and one bounded integer per turn on every turn measured (2 words), with no derived rule behind the count -- its bound is the product of the contact and detector counts, so it is left unmodelled
- unaccounted: the research-allocation draw is downstream of the budget, which is blocked on the per-system money output (0 or 1 word)
- unaccounted: a successful raid roll may draw one further word to pick its target; no roll succeeded on any measured turn, so the cost of a success is 0 or 1 and undetermined
verdict: 0 of 2 calibrated pair(s) match the oracle's generator state exactly