sots-re/verify/results/state-checksum/roots.txt
alex fdd0b72b7a state-checksum: whole-state diagnostic checksum harness (lane C)
The complement to the per-function compare harness. Instead of "did this
function's declared outputs match", it asks "is the entire simulation state
still identical" -- so no region-declaration mistake can hide from it.

Coverage is PROVED, not declared: the digest tree is re-serialised and compared
byte-for-byte against the inflated save on every run. When that reconstruction
reproduces the stream, the whole file is a function of the digest's inputs. A
run that cannot account for the file says so and exits non-zero. This is the
direct answer to B4's three hooks that printed "0 diverged" over an empty
region set.

It localises. The root is the fold of a per-subsystem / per-object tree with
named objects, so the known load->re-save delta reports as exactly five leaves
-- /Summary/Checksum and four /Sim/players/Player[...]/Status 4->0 -- naming the
two Singularity players by id where the raw byte diff could only say "1st of
two". One real End Turn reports as 108 fully attributed differences.

Float-parity policy is explicit and strict by default (STATE_CHECKSUM.md 3):
raw IEEE-754 bits; a `canonical` policy for signed zero and NaN payloads only;
and deliberately NO tolerant hashing mode, because quantisation moves the cliff
rather than removing it and destroys the roll-up. Tolerance lives in the differ
as --ulps, applied after localisation. Corpus census: 0 NaN, 0 -0.0, 0
subnormals across 4,474 float leaves, so the strict default costs nothing today
and a test fails the day that changes.

Validated on the real saves (verify/results/state-checksum/): 10 files, 4
distinct contents, all STABLE + COVERED; chain record/verify works on the real
turn1-3 saves. The VM-driven replay loop is designed (section 5) but UNRUN.

Section 3.5 names the one question the host side cannot settle -- whether the
turn pipeline depends on x87 intermediate precision -- and the experiment that
would: force fpu_cw to 0x027f / 0x127f / 0x137f across End Turn and checksum
the three autosaves.

Also recorded: Summary.Checksum is NOT a byte sum over the inflated stream nor
a sum over the int leaves (both ruled out), so nobody repeats those two.

38 tests; sots-engine untouched, clean_room_check.sh OK.
2026-09-08 03:46:34 -04:00

86 lines
4.9 KiB
Text

# state_checksum roots -- 2026-09-08T07:42:52Z
--- sha256:a3f9dc4b49fc669c turn1-state.sav
file: /home/alex/sots-re/verify/results/saves/turn1-state.sav
root: 9bbcbd4945cd8319b65d7d7958772ee0
policy: floats=bits mask=none digest=blake2b-128 reader=fe5a6f7cd4ae7910
coverage: PROVED (591376 bytes rebuilt == inflated); 34355 leaves, 187545 value bytes
reader: 0 error, 0 warn
subsystems:
c601faf8435ca9dd /Summary 60 leaves 216 B
68913c619976ba5f /CreateParams 228 leaves 907 B
0a82080734aaa2d4 /Sim/RNG 1 leaves 2503 B
cea50f5077af4e42 /Sim/Attrib 1 leaves 4 B
b3e7593a4742ebc4 /Sim/turnstats 281 leaves 1156 B
5c843fefbf911315 /Sim/players 28902 leaves 160989 B
8391940f1bb84af6 /Sim/systems 2754 leaves 10482 B
db0c730bfa7e21b0 /Sim/fleets 513 leaves 1880 B
7771763e19ec2652 /Sim/NdGr2 475 leaves 1900 B
a1139ab953664ab1 /Sim/trdmgr 166 leaves 664 B
99c457b5334248e7 /Sim/spymgr 2 leaves 8 B
f9e074a56abb0d1c /Sim/SvSctOb 123 leaves 530 B
a3f7780ee3690511 /CDT 5 leaves 104 B
--- sha256:ab4ac2d7e2977260 turn2-state.sav
file: /home/alex/sots-re/verify/results/saves/turn2-state.sav
root: aa85fe76d412cdb3a0e7e52c8f0ca9e2
policy: floats=bits mask=none digest=blake2b-128 reader=fe5a6f7cd4ae7910
coverage: PROVED (603360 bytes rebuilt == inflated); 35031 leaves, 190807 value bytes
reader: 0 error, 0 warn
subsystems:
42b2094efe6e285a /Summary 60 leaves 216 B
68913c619976ba5f /CreateParams 228 leaves 907 B
e9625f2b86f93f8c /Sim/RNG 1 leaves 2503 B
cea50f5077af4e42 /Sim/Attrib 1 leaves 4 B
c32bab57e99cdf79 /Sim/turnstats 545 leaves 2244 B
fa7f5ad40afed208 /Sim/players 29230 leaves 162841 B
1a36f0d18f0d8bab /Sim/systems 2779 leaves 10582 B
666872a3ce067218 /Sim/fleets 561 leaves 2058 B
7771763e19ec2652 /Sim/NdGr2 475 leaves 1900 B
a1139ab953664ab1 /Sim/trdmgr 166 leaves 664 B
99c457b5334248e7 /Sim/spymgr 2 leaves 8 B
6cd7196a38f53574 /Sim/SvSctOb 130 leaves 558 B
a3f7780ee3690511 /CDT 5 leaves 104 B
--- sha256:978041acd168b56e turn3-state.sav
file: /home/alex/sots-re/verify/results/saves/turn3-state.sav
root: 5ac4a24197e82de49f3077cd8dd25fad
policy: floats=bits mask=none digest=blake2b-128 reader=fe5a6f7cd4ae7910
coverage: PROVED (609080 bytes rebuilt == inflated); 35394 leaves, 192486 value bytes
reader: 0 error, 0 warn
subsystems:
b375baaf6aab9da5 /Summary 60 leaves 216 B
68913c619976ba5f /CreateParams 228 leaves 907 B
0978fdf34ff7962f /Sim/RNG 1 leaves 2503 B
cea50f5077af4e42 /Sim/Attrib 1 leaves 4 B
f067f6b95f21ed0e /Sim/turnstats 809 leaves 3332 B
8a0bf16b7166f7e3 /Sim/players 29264 leaves 163187 B
ef4caa2237b49b23 /Sim/systems 2779 leaves 10582 B
0f65b7f9ccb245f6 /Sim/fleets 624 leaves 2295 B
7771763e19ec2652 /Sim/NdGr2 475 leaves 1900 B
a1139ab953664ab1 /Sim/trdmgr 166 leaves 664 B
99c457b5334248e7 /Sim/spymgr 2 leaves 8 B
d30210dd84421501 /Sim/SvSctOb 130 leaves 558 B
a3f7780ee3690511 /CDT 5 leaves 104 B
--- sha256:bb4fd9ac89f41e3b Autosave EndTurn - turn3.sav
file: /tmp/saves/Autosave EndTurn - turn3.sav
root: a1448e6c1867fc53708810b3a2f9ec77
policy: floats=bits mask=none digest=blake2b-128 reader=fe5a6f7cd4ae7910
coverage: PROVED (603360 bytes rebuilt == inflated); 35031 leaves, 190807 value bytes
reader: 0 error, 0 warn
subsystems:
8c7e33a33dc76b3d /Summary 60 leaves 216 B
68913c619976ba5f /CreateParams 228 leaves 907 B
e9625f2b86f93f8c /Sim/RNG 1 leaves 2503 B
cea50f5077af4e42 /Sim/Attrib 1 leaves 4 B
c32bab57e99cdf79 /Sim/turnstats 545 leaves 2244 B
3416ca2128671b1e /Sim/players 29230 leaves 162841 B
1a36f0d18f0d8bab /Sim/systems 2779 leaves 10582 B
666872a3ce067218 /Sim/fleets 561 leaves 2058 B
7771763e19ec2652 /Sim/NdGr2 475 leaves 1900 B
a1139ab953664ab1 /Sim/trdmgr 166 leaves 664 B
99c457b5334248e7 /Sim/spymgr 2 leaves 8 B
6cd7196a38f53574 /Sim/SvSctOb 130 leaves 558 B
a3f7780ee3690511 /CDT 5 leaves 104 B