tools/standalone_report.py drives sots-engine's sots_turn over each consecutive-turn save pair and diffs the result against the game's own post-turn save with state_checksum.py, which localises to named leaves and proves its own coverage by re-serialisation. turn1-state -> turn2-state baseline 209 diverging, after 204, closed 5 turn2-state -> turn3-state baseline 108 diverging, after 103, closed 5 regressed 0 on both `regressed` is reported next to `closed` and never netted off. It earned its place immediately: committing the phase-31 player-status restore turned two agreeing leaves into disagreeing ones, because the phase writes 1 and the file carries 4. The stable-system stand-in feeding the colony pass is a labelled hypothesis and it survived a changed workload -- the same 3 ntdev leaves closed on both pairs, six agreements, zero disagreements. Two things deliberately NOT implemented: the TShn/ltis counters (18 leaves, a `+1` would close them, but "+1 across one observed turn" is a hypothesis, not a reading), and the RNG state write-back (an advanced-but-incomplete generator is wrong in a different way from an untouched one). dashboard.py gains section 6, reading verify/results/standalone/status.json: phases modelled/committed per driver, baseline vs after, closed vs regressed, the subsystem breakdown of what still differs, and the RNG gap. Sections 6-8 renumbered to 7-9; the delta footer tracks the two new counts. DASHBOARD_README.md documents every number. findings/control-flow/standalone-scaffold.md has the ranked blocker list.
88 lines
3.8 KiB
Text
88 lines
3.8 KiB
Text
# standalone vs the oracle
|
||
|
||
generated 2026-09-08T14:30:05Z binary /home/alex/sots-engine-wt-standalone/build-host/src/app/sots_turn
|
||
|
||
phases: 14/44 of the two turn drivers modelled, 7 committed (implemented 2, partial 5, blocked 7, stub 30)
|
||
2/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
|