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.
88 lines
3.8 KiB
Text
88 lines
3.8 KiB
Text
# standalone vs the oracle
|
||
|
||
generated 2026-09-08T15:35:00Z binary /home/alex/sots-engine-wt-yield/build-host/src/app/sots_turn
|
||
|
||
phases: 14/44 of the two turn drivers modelled, 8 committed (implemented 2, partial 6, blocked 6, stub 30)
|
||
3/37 of the post-combat tail modelled
|
||
|
||
## turn1-state.sav -> turn2-state.sav (real End Turn)
|
||
baseline (do nothing) 209 leaves diverge
|
||
after one standalone turn 204 leaves diverge
|
||
closed 5, regressed 0, byte match: no
|
||
coverage proved on all three saves: {'input': True, 'oracle': True, 'ours': True}
|
||
closed:
|
||
+ /Sim/Frame
|
||
+ /Sim/systems/Sys[112 "Gamma Cephei"]/ntdev
|
||
+ /Sim/systems/Sys[288 "Ke'Dolarra"]/ntdev
|
||
+ /Sim/systems/Sys[304 "Koa’Vo"]/ntdev
|
||
+ /Summary/Turn
|
||
|
||
## turn2-state.sav -> turn3-state.sav (real End Turn)
|
||
baseline (do nothing) 108 leaves diverge
|
||
after one standalone turn 103 leaves diverge
|
||
closed 5, regressed 0, byte match: no
|
||
coverage proved on all three saves: {'input': True, 'oracle': True, 'ours': True}
|
||
closed:
|
||
+ /Sim/Frame
|
||
+ /Sim/systems/Sys[112 "Gamma Cephei"]/ntdev
|
||
+ /Sim/systems/Sys[288 "Ke'Dolarra"]/ntdev
|
||
+ /Sim/systems/Sys[304 "Koa’Vo"]/ntdev
|
||
+ /Summary/Turn
|
||
|
||
## what still differs on the reference pair, by subsystem
|
||
82 /Sim/players
|
||
80 /Sim/systems
|
||
24 /Sim/turnstats
|
||
8 /Sim/SvSctOb
|
||
1 /Sim/DesignIDs[]
|
||
1 /Sim/FleetIDs[]
|
||
1 /Sim/ModCount
|
||
1 /Sim/NMnx
|
||
1 /Sim/NumFlts
|
||
1 /Sim/RNG
|
||
1 /Sim/ShipIDs[]
|
||
1 /Sim/cmbtid
|
||
1 /Sim/fleets
|
||
1 /Summary/Checksum
|
||
|
||
## first 40 remaining, named
|
||
/Sim/DesignIDs[]: removed [], added [18, 1712] (41 -> 43 entries)
|
||
/Sim/FleetIDs[]: removed [], added [1744] (6 -> 7 entries)
|
||
/Sim/ModCount: 2 -> 12
|
||
/Sim/NMnx: 106 -> 109
|
||
/Sim/NumFlts: 6 -> 7
|
||
/Sim/RNG/.: '<raw 2503 B 9e6887688129a8f6>' -> '<raw 2503 B ef4d678696ed4c53>'
|
||
/Sim/ShipIDs[]: removed [], added [1728] (15 -> 16 entries)
|
||
/Sim/SvSctOb/EncObj[3]/CDiff: -1 -> 0
|
||
/Sim/SvSctOb/EncObj[5]/Hives/.: only-in-A
|
||
/Sim/SvSctOb/EncObj[5]/Hives/.[0]: only-in-B
|
||
/Sim/SvSctOb/EncObj[5]/Hives/.[1]: only-in-B
|
||
/Sim/SvSctOb/EncObj[5]/Hives/.[2]: only-in-B
|
||
/Sim/SvSctOb/EncObj[6]/did: only-in-B
|
||
/Sim/SvSctOb/EncObj[6]/didc: 0 -> 1
|
||
/Sim/SvSctOb/EncObj[6]/ini: False -> True
|
||
/Sim/cmbtid: 1 -> 2
|
||
/Sim/fleets/Flt[1744 "Alpha Fleet"]: only-in-B
|
||
/Sim/players/Player[16 "re"]/BnkEl: -1590613 -> -1594593
|
||
/Sim/players/Player[16 "re"]/BnkPr: -787353 -> -789323
|
||
/Sim/players/Player[16 "re"]/Events/EvNxID: 0 -> 2
|
||
/Sim/players/Player[16 "re"]/Events/Events/.: only-in-A
|
||
/Sim/players/Player[16 "re"]/Events/Events/.[0]: only-in-B
|
||
/Sim/players/Player[16 "re"]/Events/Events/.[EvTurn=2]: only-in-B
|
||
/Sim/players/Player[16 "re"]/Sav: 50000 -> 289688
|
||
/Sim/players/Player[16 "re"]/Status: 0 -> 4
|
||
/Sim/players/Player[32 "Fane Lao"]/BnkEl: -1811273 -> -1815833
|
||
/Sim/players/Player[32 "Fane Lao"]/BnkPr: -896580 -> -898837
|
||
/Sim/players/Player[32 "Fane Lao"]/Events/EvNxID: 0 -> 2
|
||
/Sim/players/Player[32 "Fane Lao"]/Events/Events/.: only-in-A
|
||
/Sim/players/Player[32 "Fane Lao"]/Events/Events/.[0]: only-in-B
|
||
/Sim/players/Player[32 "Fane Lao"]/Events/Events/.[EvTurn=2]: only-in-B
|
||
/Sim/players/Player[32 "Fane Lao"]/FNG/FNGNum: 0 -> 1
|
||
/Sim/players/Player[32 "Fane Lao"]/Maint: 0 -> 500
|
||
/Sim/players/Player[32 "Fane Lao"]/NumDes: 5 -> 6
|
||
/Sim/players/Player[32 "Fane Lao"]/PvSav: 50000 -> 38100
|
||
/Sim/players/Player[32 "Fane Lao"]/ResRate: 0.25 -> 0.800000011920929 [1.34218e+07 ulp]
|
||
/Sim/players/Player[32 "Fane Lao"]/ResTNm: '' -> 'IND_Waldo'
|
||
/Sim/players/Player[32 "Fane Lao"]/Sav: 50000 -> 92651
|
||
/Sim/players/Player[32 "Fane Lao"]/ShipRecs/srb[0]: 0 -> 1
|
||
/Sim/players/Player[32 "Fane Lao"]/ShipRecs/srb[3]: only-in-B
|