lane E3: ten addresses for the visibility record, and the standalone's new distance

The NVE writer 0x00756300 and its four siblings, `ltis`'s writer 0x00743ec0, the
encounter-placement routine whose unserialised field feeds Eid, the tail phase that
calls the writer, and the resolution of an indirect edge lane B5 left open --
ServerSystem primary vftable 0x00a2044c slot 7 is 0x007480b0, and it writes only a
runtime mask, so it never reaches the wire.

None of the ten collides with an address already in the DB (checked against all 714
addressed entries across addresses.json and every fragment); gen_addresses.py
validated to a scratch path at 1019 entries, no duplicate names.

Standalone report regenerated from the lane worktree:
  turn1 -> turn2   209 -> 158   closed 51, regressed 0
  turn2 -> turn3   108 ->  87   closed 21, regressed 0

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ARBgSooAfokKUy6wKUKEyZ
This commit is contained in:
alex 2026-09-08 13:38:57 -04:00
parent 19afa1f78a
commit 58c2cd14b4
3 changed files with 294 additions and 88 deletions

View file

@ -0,0 +1,84 @@
{
"entries": [
{
"name": "ServerSystem_RecordObservation",
"addr": "0x00756300",
"convention": "thiscall",
"prototype": "void (ServerSystem* this, ServerPlayer* p, int encounterId) // 75 B, ret 8. THE NVE WRITER. if (!p) return; s = (int16)this->owner(+0x10)->Frame(+0x8); rec = NVE_map_at(&this->NVE(+0x284), &p->PlyrIdx(+0x28)); rec[0] = (s<<16)|s; rec[1] = encounterId. The map value is 8 bytes at node+0x10: an UNSERIALISED int16 touch stamp at +0, the saved ETS int16 at +2, the saved Eid int32 at +4 -- so ETS and the touch stamp are both set to the frame here, and only the writer at 0x007536a0 makes them differ. Sole caller is the tail's PlayerView-rebuild phase 0x007cf560, under the gate (AFlags >> PlyrIdx) & 1",
"status": "mapped",
"source": "findings/subsystems/system-visibility-record.md (lane E3 2026-09-08); closes 32+8 leaves in sots-engine on the reference pairs"
},
{
"name": "ServerSystem_CopyObservationTo",
"addr": "0x007536a0",
"convention": "thiscall",
"prototype": "void (ServerSystem* this, ServerPlayer* p, NveValue* src) // 70 B, ret 8. Intel sharing. rec = NVE_map_at(&this->NVE, &p->PlyrIdx(+0x28)); rec[0] = (hi16(src[0]) << 16) | (int16)this->owner(+0x10)->Frame(+0x8); rec[1] = src[1]. i.e. the receiver gets the DONOR's sighting turn (ETS) and encounter id unchanged, and only the unserialised touch stamp becomes the current frame. Never executed by any save in the corpus: no save has two players in an alliance",
"status": "mapped",
"source": "findings/subsystems/system-visibility-record.md (lane E3 2026-09-08)"
},
{
"name": "ServerSystem_ShareObservation",
"addr": "0x00754d90",
"convention": "cdecl",
"prototype": "bool (ServerSystem* sys, ServerPlayer* from, ServerPlayer* to) // 96 B. Null-guards all three and from != to; a = FindObservation(from); b = FindObservation(to); if (a && (!b || b->ETS(+2) < a->ETS(+2))) { CopyObservationTo(to, a); return true; } return false. NEWER SIGHTING WINS, compared as a signed int16",
"status": "mapped",
"source": "findings/subsystems/system-visibility-record.md (lane E3 2026-09-08)"
},
{
"name": "ServerSystem_FindObservation",
"addr": "0x0074d360",
"convention": "thiscall",
"prototype": "NveValue* (ServerSystem* this, ServerPlayer* p) // 58 B, ret 4. Map find on p->PlyrIdx(+0x28); returns node+0x10 (the 8-byte value) or null when the search ended at this->NVE head (+0x284)",
"status": "mapped",
"source": "findings/subsystems/system-visibility-record.md (lane E3 2026-09-08)"
},
{
"name": "ServerSystem_LastSeenEncounterId",
"addr": "0x0074f830",
"convention": "thiscall",
"prototype": "int (ServerSystem* this, ServerPlayer* p) // 64 B, ret 4. Same map find; returns node+0x14 (Eid) or -1. The extra `!= -0x10` guard is the null-node case reached through node+0x10",
"status": "mapped",
"source": "findings/subsystems/system-visibility-record.md (lane E3 2026-09-08)"
},
{
"name": "ServerSystem_IsVisibleTo",
"addr": "0x00743fb0",
"convention": "thiscall",
"prototype": "bool (ServerSystem* this, ServerPlayer* p) // 34 B, ret 4. return ((1 << (p->PlyrIdx(+0x28) & 0x1f)) & this->AFlags(+0xd4)) != 0. THE gate on the observation record, on the explored sweep and on the PlayerView rebuild -- AFlags, the DERIVED non-sticky union, not VFlags. 19 callers",
"status": "verified",
"source": "instruction-verified body; combat-retreat-pipeline.md already had AFlags = FFlags|GFlags|isOwner"
},
{
"name": "ServerSystem_UpdateLastObservedTurn",
"addr": "0x00743ec0",
"convention": "fastcall",
"prototype": "void (ServerSystem* this) // 41 B, WHOLE BODY. if (this->AFlags(+0xd4) != 0) this->ltis(+0x2c8) = this->owner(+0x10)->Frame(+0x8). This is `ltis`'s writer, which board.md recorded as unnamed; it is driver phase 29 (0x007dcbd6, per system). TShn's writer is still unnamed and is demonstrably a DIFFERENT rule: Spica in turn1-state has AFlags == 0 and its TShn moves anyway",
"status": "mapped",
"source": "findings/subsystems/system-visibility-record.md (lane E3 2026-09-08); closes 8 leaves per pair in sots-engine"
},
{
"name": "ServerSystem_OnExploredChanged",
"addr": "0x007480b0",
"convention": "thiscall",
"prototype": "void (ServerSystem* this, ServerPlayer* p, bool wasSet, bool on) // 71 B, WHOLE BODY. Game::ServerSystem primary vftable 0x00a2044c SLOT 7 -- this RESOLVES the indirect edge lane B5 flagged in SetExploredBy's tail (vft[0x1c]). if (!wasSet && on && this->owner(+0x10)->Frame(+0x8) > 1) { FUN_00747a20(p->PlyrIdx(+0x28), 1); if (p->PlyrIdx < 0xf) this->+0x2a4 |= 1 << (PlyrIdx & 0x1f); } -- +0x2a4 sits past NVs and is NOT in the serialised table, so this edge writes no save state. Note the Frame > 1 guard: turn 1 is special-cased",
"status": "mapped",
"source": "tools/vtable_map.py vt 0xa2044c + decompile (lane E3 2026-09-08); resolves an open item in ghidra/addresses.d/lane-b5.json"
},
{
"name": "StarSystem_PlaceEncounter",
"addr": "0x007887c0",
"convention": "cdecl",
"prototype": "bool (StarSystem* sys, int encounterId) // 129 B. Refuses unless the system is unowned (FUN_007437e0 == 0), has no planets, sys->+0x184 == -1 and two further tests pass; then sys->+0x184 = encounterId and ORs a mask from the encounter def into sys->+0x19c. sys->+0x184 is the field ServerSystem_RecordObservation copies into Eid. It is constructed to -1 (StarSystem ctor 0x00752ea0, member index 0x61) and IS NOT ON THE WIRE, so a reimplementation has to recover it from the encounter fleet's FtEnc -- which agrees on all six encounter fleets in the corpus and which no save can separate from the real field",
"status": "mapped",
"source": "findings/subsystems/system-visibility-record.md (lane E3 2026-09-08)"
},
{
"name": "StrategyServer_RebuildPlayerViews",
"addr": "0x007cf560",
"convention": "fastcall",
"prototype": "void (StrategyServer* S) // 948 B, tail phase 17. Four passes: (1) walk the per-(system, player) view tree at S+0x228 and drop entries whose player can no longer see the system, then clear the tree and reset S+0x22c = 0; (2) per player x per system, if IsVisibleTo, FUN_0075f550; (3) per player x per system, if IsVisibleTo, ServerSystem_RecordObservation(sys, player, sys->+0x184) -- byte-decoded at 0x007cf7a7..0x007cf7ce, this is the ONLY caller of the NVE writer outside intel sharing; (4) per system x per player, if IsExploredBy and a colony exists, build a PlayerView via 0x00755ab0/0x007561d0 and apply it. Draw-free",
"status": "mapped",
"source": "findings/subsystems/system-visibility-record.md (lane E3 2026-09-08)"
}
]
}

View file

@ -1,37 +1,99 @@
# standalone vs the oracle
generated 2026-09-08T17:23:54Z binary /home/alex/sots-engine-wt-turnrecord/build-host/src/app/sots_turn
generated 2026-09-08T17:37:38Z binary /home/alex/sots-engine-e3/build-host/src/app/sots_turn
phases: 15/44 of the two turn drivers modelled, 9 committed (implemented 3, partial 6, blocked 6, stub 29)
3/37 of the post-combat tail modelled
phases: 16/44 of the two turn drivers modelled, 10 committed (implemented 4, partial 6, blocked 6, stub 28)
5/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
after one standalone turn 158 leaves diverge
closed 51, 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"]/EPid
+ /Sim/systems/Sys[112 "Gamma Cephei"]/ETS
+ /Sim/systems/Sys[112 "Gamma Cephei"]/Eid
+ /Sim/systems/Sys[112 "Gamma Cephei"]/NVE
+ /Sim/systems/Sys[112 "Gamma Cephei"]/ltis
+ /Sim/systems/Sys[112 "Gamma Cephei"]/ntdev
+ /Sim/systems/Sys[288 "Ke'Dolarra"]/EPid
+ /Sim/systems/Sys[288 "Ke'Dolarra"]/ETS
+ /Sim/systems/Sys[288 "Ke'Dolarra"]/Eid
+ /Sim/systems/Sys[288 "Ke'Dolarra"]/NVE
+ /Sim/systems/Sys[288 "Ke'Dolarra"]/ltis
+ /Sim/systems/Sys[288 "Ke'Dolarra"]/ntdev
+ /Sim/systems/Sys[304 "Koa’Vo"]/EFlags
+ /Sim/systems/Sys[304 "Koa’Vo"]/EPid
+ /Sim/systems/Sys[304 "Koa’Vo"]/ETS
+ /Sim/systems/Sys[304 "Koa’Vo"]/Eid
+ /Sim/systems/Sys[304 "Koa’Vo"]/NVE
+ /Sim/systems/Sys[304 "Koa’Vo"]/ltis
+ /Sim/systems/Sys[304 "Koa’Vo"]/ntdev
+ /Sim/systems/Sys[336 "Kaa’Vaalu"]/EFlags
+ /Sim/systems/Sys[336 "Kaa’Vaalu"]/EPid
+ /Sim/systems/Sys[336 "Kaa’Vaalu"]/ETS
+ /Sim/systems/Sys[336 "Kaa’Vaalu"]/Eid
+ /Sim/systems/Sys[336 "Kaa’Vaalu"]/NVE
+ /Sim/systems/Sys[336 "Kaa’Vaalu"]/ltis
+ /Sim/systems/Sys[400 "Markab"]/EFlags
+ /Sim/systems/Sys[400 "Markab"]/EPid
+ /Sim/systems/Sys[400 "Markab"]/ETS
+ /Sim/systems/Sys[400 "Markab"]/Eid
+ /Sim/systems/Sys[400 "Markab"]/NVE
+ /Sim/systems/Sys[400 "Markab"]/ltis
+ /Sim/systems/Sys[448 "Kea’Pono"]/EFlags
+ /Sim/systems/Sys[448 "Kea’Pono"]/EPid
+ /Sim/systems/Sys[448 "Kea’Pono"]/ETS
+ /Sim/systems/Sys[448 "Kea’Pono"]/Eid
+ /Sim/systems/Sys[448 "Kea’Pono"]/NVE
+ /Sim/systems/Sys[448 "Kea’Pono"]/ltis
+ /Sim/systems/Sys[480 "Ko'Rorkor"]/EFlags
+ /Sim/systems/Sys[480 "Ko'Rorkor"]/EPid
+ /Sim/systems/Sys[480 "Ko'Rorkor"]/ETS
+ /Sim/systems/Sys[480 "Ko'Rorkor"]/Eid
+ /Sim/systems/Sys[480 "Ko'Rorkor"]/NVE
+ /Sim/systems/Sys[480 "Ko'Rorkor"]/ltis
+ /Sim/systems/Sys[64 "Hyperion"]/EFlags
+ /Sim/systems/Sys[64 "Hyperion"]/EPid
+ /Sim/systems/Sys[64 "Hyperion"]/ETS
+ /Sim/systems/Sys[64 "Hyperion"]/Eid
+ /Sim/systems/Sys[64 "Hyperion"]/NVE
+ /Sim/systems/Sys[64 "Hyperion"]/ltis
+ /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
after one standalone turn 87 leaves diverge
closed 21, 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"]/ETS
+ /Sim/systems/Sys[112 "Gamma Cephei"]/ltis
+ /Sim/systems/Sys[112 "Gamma Cephei"]/ntdev
+ /Sim/systems/Sys[288 "Ke'Dolarra"]/ETS
+ /Sim/systems/Sys[288 "Ke'Dolarra"]/ltis
+ /Sim/systems/Sys[288 "Ke'Dolarra"]/ntdev
+ /Sim/systems/Sys[304 "Koa’Vo"]/ETS
+ /Sim/systems/Sys[304 "Koa’Vo"]/ltis
+ /Sim/systems/Sys[304 "Koa’Vo"]/ntdev
+ /Sim/systems/Sys[336 "Kaa’Vaalu"]/ETS
+ /Sim/systems/Sys[336 "Kaa’Vaalu"]/ltis
+ /Sim/systems/Sys[400 "Markab"]/ETS
+ /Sim/systems/Sys[400 "Markab"]/ltis
+ /Sim/systems/Sys[448 "Kea’Pono"]/ETS
+ /Sim/systems/Sys[448 "Kea’Pono"]/ltis
+ /Sim/systems/Sys[480 "Ko'Rorkor"]/ETS
+ /Sim/systems/Sys[480 "Ko'Rorkor"]/ltis
+ /Sim/systems/Sys[64 "Hyperion"]/ETS
+ /Sim/systems/Sys[64 "Hyperion"]/ltis
+ /Summary/Turn
## what still differs on the reference pair, by subsystem
82 /Sim/players
80 /Sim/systems
34 /Sim/systems
24 /Sim/turnstats
8 /Sim/SvSctOb
1 /Sim/DesignIDs[]

View file

@ -1,18 +1,18 @@
{
"schema": "sots-standalone-status/1",
"generated": "2026-09-08T17:23:54Z",
"binary": "/home/alex/sots-engine-wt-turnrecord/build-host/src/app/sots_turn",
"generated": "2026-09-08T17:37:38Z",
"binary": "/home/alex/sots-engine-e3/build-host/src/app/sots_turn",
"reference": {
"input": "turn1-state.sav",
"oracle": "turn2-state.sav",
"baselineDiverging": 209,
"divergingAfterTurn": 204,
"closed": 5,
"divergingAfterTurn": 158,
"closed": 51,
"regressed": 0,
"byteMatch": false,
"subsystems": {
"/Sim/players": 82,
"/Sim/systems": 80,
"/Sim/systems": 34,
"/Sim/turnstats": 24,
"/Sim/SvSctOb": 8,
"/Sim/DesignIDs[]": 1,
@ -30,22 +30,22 @@
"phases": {
"total": 44,
"verified": 0,
"implemented": 3,
"implemented": 4,
"partial": 6,
"blocked": 6,
"stub": 29,
"modelled": 15,
"committed": 9
"stub": 28,
"modelled": 16,
"committed": 10
},
"tailPhases": {
"total": 37,
"verified": 0,
"implemented": 1,
"partial": 0,
"partial": 2,
"blocked": 2,
"stub": 34,
"modelled": 3,
"committed": 1
"stub": 32,
"modelled": 5,
"committed": 3
},
"rng": {
"wordsModelled": 16,
@ -62,17 +62,16 @@
" 591376 inflated bytes, 0 error(s), 0 warning(s)",
" turn 1, frame 1, modCount 0, 8 player(s), 28 system(s), 6 fleet(s)",
"roundtrip (untouched): byte-identical (591376 bytes)",
"data: /tmp/claude-1000/-home-alex/ec8e34f8-af37-4ef2-a309-ed6a15293097/scratchpad/data -- 885 section(s) over 7 race(s), 46 load problem(s)",
"",
"phases",
" turn drivers (the milestone's denominator): 15 of 44 modelled, 9 committed",
" verified 0 implemented 3 partial 6 blocked 6 stub 29",
" post-combat tail (written to the autosave, tracked separately): 3 of 37 modelled",
" verified 0 implemented 1 partial 0 blocked 2 stub 34",
" turn drivers (the milestone's denominator): 16 of 44 modelled, 10 committed",
" verified 0 implemented 4 partial 6 blocked 6 stub 28",
" post-combat tail (written to the autosave, tracked separately): 5 of 37 modelled",
" verified 0 implemented 1 partial 2 blocked 2 stub 32",
"",
"this run",
" leaves written 7",
" leaves NOT written by a blocked phase 120",
" leaves written 53",
" leaves NOT written by a blocked phase 72",
" generator words consumed 16 (state loaded, left untouched)",
" generator words NOT accounted (never netted off the above):",
" - 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",
@ -81,8 +80,8 @@
" ! the generator advanced during this run but the save keeps its original state (--commit-rng to write it)",
" ! the modelled words are a LOWER BOUND on the turn's cost, so a committed generator is short by the unaccounted sites below and its drawn VALUES are not the game's",
"",
"wrote /tmp/tmpbodkynxg/post-turn1-state.sav (65145 bytes gzipped, 591376 inflated)",
"metric -> /tmp/tmpbodkynxg/metric-turn1-state.sav.json"
"wrote /tmp/tmpex18kut6/post-turn1-state.sav (65208 bytes gzipped, 591664 inflated)",
"metric -> /tmp/tmpex18kut6/metric-turn1-state.sav.json"
],
"coverage": {
"input": true,
@ -92,17 +91,63 @@
"roots": {
"input": "64b836b966299d9b72fc02244ed31e31",
"oracle": "4bed514f853332b9fa35b388c3aa5558",
"ours": "1acc372b1d410b966ab544dffbe43cb5"
"ours": "d77168aa0a5bd1b8890d8c0f994aed3f"
},
"baselineDiverging": 209,
"divergingAfterTurn": 204,
"closed": 5,
"divergingAfterTurn": 158,
"closed": 51,
"regressed": 0,
"closedPaths": [
"/Sim/Frame",
"/Sim/systems/Sys[112 \"Gamma Cephei\"]/EPid",
"/Sim/systems/Sys[112 \"Gamma Cephei\"]/ETS",
"/Sim/systems/Sys[112 \"Gamma Cephei\"]/Eid",
"/Sim/systems/Sys[112 \"Gamma Cephei\"]/NVE",
"/Sim/systems/Sys[112 \"Gamma Cephei\"]/ltis",
"/Sim/systems/Sys[112 \"Gamma Cephei\"]/ntdev",
"/Sim/systems/Sys[288 \"Ke'Dolarra\"]/EPid",
"/Sim/systems/Sys[288 \"Ke'Dolarra\"]/ETS",
"/Sim/systems/Sys[288 \"Ke'Dolarra\"]/Eid",
"/Sim/systems/Sys[288 \"Ke'Dolarra\"]/NVE",
"/Sim/systems/Sys[288 \"Ke'Dolarra\"]/ltis",
"/Sim/systems/Sys[288 \"Ke'Dolarra\"]/ntdev",
"/Sim/systems/Sys[304 \"Koa\u2019Vo\"]/EFlags",
"/Sim/systems/Sys[304 \"Koa\u2019Vo\"]/EPid",
"/Sim/systems/Sys[304 \"Koa\u2019Vo\"]/ETS",
"/Sim/systems/Sys[304 \"Koa\u2019Vo\"]/Eid",
"/Sim/systems/Sys[304 \"Koa\u2019Vo\"]/NVE",
"/Sim/systems/Sys[304 \"Koa\u2019Vo\"]/ltis",
"/Sim/systems/Sys[304 \"Koa\u2019Vo\"]/ntdev",
"/Sim/systems/Sys[336 \"Kaa\u2019Vaalu\"]/EFlags",
"/Sim/systems/Sys[336 \"Kaa\u2019Vaalu\"]/EPid",
"/Sim/systems/Sys[336 \"Kaa\u2019Vaalu\"]/ETS",
"/Sim/systems/Sys[336 \"Kaa\u2019Vaalu\"]/Eid",
"/Sim/systems/Sys[336 \"Kaa\u2019Vaalu\"]/NVE",
"/Sim/systems/Sys[336 \"Kaa\u2019Vaalu\"]/ltis",
"/Sim/systems/Sys[400 \"Markab\"]/EFlags",
"/Sim/systems/Sys[400 \"Markab\"]/EPid",
"/Sim/systems/Sys[400 \"Markab\"]/ETS",
"/Sim/systems/Sys[400 \"Markab\"]/Eid",
"/Sim/systems/Sys[400 \"Markab\"]/NVE",
"/Sim/systems/Sys[400 \"Markab\"]/ltis",
"/Sim/systems/Sys[448 \"Kea\u2019Pono\"]/EFlags",
"/Sim/systems/Sys[448 \"Kea\u2019Pono\"]/EPid",
"/Sim/systems/Sys[448 \"Kea\u2019Pono\"]/ETS",
"/Sim/systems/Sys[448 \"Kea\u2019Pono\"]/Eid",
"/Sim/systems/Sys[448 \"Kea\u2019Pono\"]/NVE",
"/Sim/systems/Sys[448 \"Kea\u2019Pono\"]/ltis",
"/Sim/systems/Sys[480 \"Ko'Rorkor\"]/EFlags",
"/Sim/systems/Sys[480 \"Ko'Rorkor\"]/EPid",
"/Sim/systems/Sys[480 \"Ko'Rorkor\"]/ETS",
"/Sim/systems/Sys[480 \"Ko'Rorkor\"]/Eid",
"/Sim/systems/Sys[480 \"Ko'Rorkor\"]/NVE",
"/Sim/systems/Sys[480 \"Ko'Rorkor\"]/ltis",
"/Sim/systems/Sys[64 \"Hyperion\"]/EFlags",
"/Sim/systems/Sys[64 \"Hyperion\"]/EPid",
"/Sim/systems/Sys[64 \"Hyperion\"]/ETS",
"/Sim/systems/Sys[64 \"Hyperion\"]/Eid",
"/Sim/systems/Sys[64 \"Hyperion\"]/NVE",
"/Sim/systems/Sys[64 \"Hyperion\"]/ltis",
"/Summary/Turn"
],
"regressedPaths": [],
@ -152,30 +197,30 @@
"standalone": {
"schema": "sots-standalone-metric/1",
"input": "/home/alex/sots-re/verify/results/saves/turn1-state.sav",
"output": "/tmp/tmpbodkynxg/post-turn1-state.sav",
"output": "/tmp/tmpex18kut6/post-turn1-state.sav",
"spine": {
"total": 44,
"verified": 0,
"implemented": 3,
"implemented": 4,
"partial": 6,
"blocked": 6,
"stub": 29,
"modelled": 15,
"committed": 9
"stub": 28,
"modelled": 16,
"committed": 10
},
"tail": {
"total": 37,
"verified": 0,
"implemented": 1,
"partial": 0,
"partial": 2,
"blocked": 2,
"stub": 34,
"modelled": 3,
"committed": 1
"stub": 32,
"modelled": 5,
"committed": 3
},
"run": {
"leafWrites": 7,
"blockedLeafWrites": 120,
"leafWrites": 53,
"blockedLeafWrites": 72,
"rngWords": 16,
"rngLoaded": true,
"rngCommitted": false,
@ -609,10 +654,10 @@
{
"driver": "StrategyServer::ProcessTurn",
"id": "S29",
"name": "SystemTailFixup",
"status": "stub",
"ran": 0,
"writes": 0,
"name": "SystemObservedStamp",
"status": "implemented",
"ran": 28,
"writes": 8,
"blockedWrites": 0,
"rng": 0
},
@ -810,9 +855,9 @@
"driver": "StrategyServer::OnAllCombatDone_Tail",
"id": "T17",
"name": "RebuildPlayerViewTree",
"status": "stub",
"ran": 0,
"writes": 0,
"status": "partial",
"ran": 28,
"writes": 32,
"blockedWrites": 0,
"rng": 0
},
@ -850,9 +895,9 @@
"driver": "StrategyServer::OnAllCombatDone_Tail",
"id": "T21",
"name": "UpdateSurveyAndSystemStats",
"status": "stub",
"ran": 0,
"writes": 0,
"status": "partial",
"ran": 28,
"writes": 6,
"blockedWrites": 0,
"rng": 0
},
@ -1003,7 +1048,7 @@
"status": "blocked",
"ran": 8,
"writes": 0,
"blockedWrites": 104,
"blockedWrites": 56,
"rng": 0
},
{
@ -1029,17 +1074,16 @@
" 603360 inflated bytes, 0 error(s), 0 warning(s)",
" turn 2, frame 2, modCount 12, 8 player(s), 28 system(s), 7 fleet(s)",
"roundtrip (untouched): byte-identical (603360 bytes)",
"data: /tmp/claude-1000/-home-alex/ec8e34f8-af37-4ef2-a309-ed6a15293097/scratchpad/data -- 885 section(s) over 7 race(s), 46 load problem(s)",
"",
"phases",
" turn drivers (the milestone's denominator): 15 of 44 modelled, 9 committed",
" verified 0 implemented 3 partial 6 blocked 6 stub 29",
" post-combat tail (written to the autosave, tracked separately): 3 of 37 modelled",
" verified 0 implemented 1 partial 0 blocked 2 stub 34",
" turn drivers (the milestone's denominator): 16 of 44 modelled, 10 committed",
" verified 0 implemented 4 partial 6 blocked 6 stub 28",
" post-combat tail (written to the autosave, tracked separately): 5 of 37 modelled",
" verified 0 implemented 1 partial 2 blocked 2 stub 32",
"",
"this run",
" leaves written 7",
" leaves NOT written by a blocked phase 114",
" leaves written 23",
" leaves NOT written by a blocked phase 66",
" generator words consumed 16 (state loaded, left untouched)",
" generator words NOT accounted (never netted off the above):",
" - 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",
@ -1048,8 +1092,8 @@
" ! the generator advanced during this run but the save keeps its original state (--commit-rng to write it)",
" ! the modelled words are a LOWER BOUND on the turn's cost, so a committed generator is short by the unaccounted sites below and its drawn VALUES are not the game's",
"",
"wrote /tmp/tmpbodkynxg/post-turn2-state.sav (66883 bytes gzipped, 603360 inflated)",
"metric -> /tmp/tmpbodkynxg/metric-turn2-state.sav.json"
"wrote /tmp/tmpex18kut6/post-turn2-state.sav (66882 bytes gzipped, 603360 inflated)",
"metric -> /tmp/tmpex18kut6/metric-turn2-state.sav.json"
],
"coverage": {
"input": true,
@ -1059,17 +1103,33 @@
"roots": {
"input": "4bed514f853332b9fa35b388c3aa5558",
"oracle": "e9c161e311f8ef8fad6f1aa1903dcf3f",
"ours": "22071ae1303f308a93b805e940b626b5"
"ours": "987447a85f9fcded1afd868fca112ef6"
},
"baselineDiverging": 108,
"divergingAfterTurn": 103,
"closed": 5,
"divergingAfterTurn": 87,
"closed": 21,
"regressed": 0,
"closedPaths": [
"/Sim/Frame",
"/Sim/systems/Sys[112 \"Gamma Cephei\"]/ETS",
"/Sim/systems/Sys[112 \"Gamma Cephei\"]/ltis",
"/Sim/systems/Sys[112 \"Gamma Cephei\"]/ntdev",
"/Sim/systems/Sys[288 \"Ke'Dolarra\"]/ETS",
"/Sim/systems/Sys[288 \"Ke'Dolarra\"]/ltis",
"/Sim/systems/Sys[288 \"Ke'Dolarra\"]/ntdev",
"/Sim/systems/Sys[304 \"Koa\u2019Vo\"]/ETS",
"/Sim/systems/Sys[304 \"Koa\u2019Vo\"]/ltis",
"/Sim/systems/Sys[304 \"Koa\u2019Vo\"]/ntdev",
"/Sim/systems/Sys[336 \"Kaa\u2019Vaalu\"]/ETS",
"/Sim/systems/Sys[336 \"Kaa\u2019Vaalu\"]/ltis",
"/Sim/systems/Sys[400 \"Markab\"]/ETS",
"/Sim/systems/Sys[400 \"Markab\"]/ltis",
"/Sim/systems/Sys[448 \"Kea\u2019Pono\"]/ETS",
"/Sim/systems/Sys[448 \"Kea\u2019Pono\"]/ltis",
"/Sim/systems/Sys[480 \"Ko'Rorkor\"]/ETS",
"/Sim/systems/Sys[480 \"Ko'Rorkor\"]/ltis",
"/Sim/systems/Sys[64 \"Hyperion\"]/ETS",
"/Sim/systems/Sys[64 \"Hyperion\"]/ltis",
"/Summary/Turn"
],
"regressedPaths": [],
@ -1119,30 +1179,30 @@
"standalone": {
"schema": "sots-standalone-metric/1",
"input": "/home/alex/sots-re/verify/results/saves/turn2-state.sav",
"output": "/tmp/tmpbodkynxg/post-turn2-state.sav",
"output": "/tmp/tmpex18kut6/post-turn2-state.sav",
"spine": {
"total": 44,
"verified": 0,
"implemented": 3,
"implemented": 4,
"partial": 6,
"blocked": 6,
"stub": 29,
"modelled": 15,
"committed": 9
"stub": 28,
"modelled": 16,
"committed": 10
},
"tail": {
"total": 37,
"verified": 0,
"implemented": 1,
"partial": 0,
"partial": 2,
"blocked": 2,
"stub": 34,
"modelled": 3,
"committed": 1
"stub": 32,
"modelled": 5,
"committed": 3
},
"run": {
"leafWrites": 7,
"blockedLeafWrites": 114,
"leafWrites": 23,
"blockedLeafWrites": 66,
"rngWords": 16,
"rngLoaded": true,
"rngCommitted": false,
@ -1576,10 +1636,10 @@
{
"driver": "StrategyServer::ProcessTurn",
"id": "S29",
"name": "SystemTailFixup",
"status": "stub",
"ran": 0,
"writes": 0,
"name": "SystemObservedStamp",
"status": "implemented",
"ran": 28,
"writes": 8,
"blockedWrites": 0,
"rng": 0
},
@ -1777,9 +1837,9 @@
"driver": "StrategyServer::OnAllCombatDone_Tail",
"id": "T17",
"name": "RebuildPlayerViewTree",
"status": "stub",
"ran": 0,
"writes": 0,
"status": "partial",
"ran": 28,
"writes": 8,
"blockedWrites": 0,
"rng": 0
},
@ -1817,8 +1877,8 @@
"driver": "StrategyServer::OnAllCombatDone_Tail",
"id": "T21",
"name": "UpdateSurveyAndSystemStats",
"status": "stub",
"ran": 0,
"status": "partial",
"ran": 28,
"writes": 0,
"blockedWrites": 0,
"rng": 0
@ -1970,7 +2030,7 @@
"status": "blocked",
"ran": 8,
"writes": 0,
"blockedWrites": 104,
"blockedWrites": 56,
"rng": 0
},
{