From 2d6184888fbc9d5d134ffcea7c17f44ba6a645e7 Mon Sep 17 00:00:00 2001 From: alex Date: Tue, 8 Sep 2026 17:01:57 -0400 Subject: [PATCH] standalone 209 -> 124 (closed 85); rule 24: never reuse a build directory across trees --- campaign/DASHBOARD.md | 62 ++++----- campaign/board.md | 1 + guides/method-rules.md | 18 +++ verify/results/standalone/report.txt | 34 +++-- verify/results/standalone/status.json | 182 +++++++++++++++----------- 5 files changed, 178 insertions(+), 119 deletions(-) diff --git a/campaign/DASHBOARD.md b/campaign/DASHBOARD.md index e2f6308..448d7fa 100644 --- a/campaign/DASHBOARD.md +++ b/campaign/DASHBOARD.md @@ -1,37 +1,37 @@ # SotS RE campaign — coverage dashboard -Generated 2026-09-08 19:49 UTC · `sots-re` @ 1b5553b,2026-09-08 · `sots-engine` @ 5d01c7c,2026-09-08 (176 commits) · regenerate with `tools/dashboard.py` +Generated 2026-09-08 21:01 UTC · `sots-re` @ 9075f60,2026-09-08 · `sots-engine` @ 0117495,2026-09-08 (192 commits) · regenerate with `tools/dashboard.py` > **North star:** A functional reimplementation of the engine — behavior-equivalent, NOT byte-for-byte ## 1. Map coverage (campaign/board.md) -292 targets · mapped-or-better **263/292** `[█████████░] 90%` · verified **223/292** `[████████░░] 76%` +317 targets · mapped-or-better **284/317** `[█████████░] 90%` · verified **244/317** `[████████░░] 77%` | Status | Count | % | |---|---:|---:| -| verified | 223 | 76% | -| mapped | 40 | 14% | -| in-progress | 2 | 1% | -| backlog | 25 | 9% | +| verified | 244 | 77% | +| mapped | 40 | 13% | +| in-progress | 3 | 1% | +| backlog | 28 | 9% | | blocked | 2 | 1% | | Type | verified | mapped | in-progress | backlog | blocked | total | |---|---:|---:|---:|---:|---:|---:| -| objects | 37 | 6 | 0 | 2 | 1 | 46 | -| control-flow | 21 | 2 | 0 | 0 | 0 | 23 | +| objects | 39 | 6 | 0 | 3 | 1 | 49 | +| control-flow | 23 | 2 | 0 | 0 | 0 | 25 | | subsystems | 4 | 8 | 0 | 2 | 1 | 15 | -| engine | 24 | 0 | 0 | 0 | 0 | 24 | -| verify | 61 | 14 | 2 | 20 | 0 | 97 | +| engine | 25 | 0 | 0 | 0 | 0 | 25 | +| verify | 70 | 14 | 3 | 22 | 0 | 109 | | phase2 | 13 | 3 | 0 | 0 | 0 | 16 | -| meta | 48 | 6 | 0 | 1 | 0 | 55 | -| other | 15 | 1 | 0 | 0 | 0 | 16 | +| meta | 53 | 6 | 0 | 1 | 0 | 60 | +| other | 17 | 1 | 0 | 0 | 0 | 18 | ## 2. Binary understanding - RTTI type descriptors: **1,924** (`Game::` 1,404, `Mars::` 194; serializable types 179) - Classes with recovered member layouts: **384** / 1,598 named classes `[██░░░░░░░░] 24%` — `objects/layouts.json` (serializer recovery) plus classes recovered by hand in `struct-recovery.md` + `schema-gaps-resolved.md`. Note 179 types are *serializable*; the recovery also reaches non-serializable ones, so this is not a subset of that -- Functions: **41,411** (parsed from `01-fingerprint.md`); named/annotated in the **address contract** (`ghidra/addresses.json`, not Ghidra's full rename count): **1138**, verified **1057** `[█████████░] 93%` +- Functions: **41,411** (parsed from `01-fingerprint.md`); named/annotated in the **address contract** (`ghidra/addresses.json`, not Ghidra's full rename count): **1188**, verified **1093** `[█████████░] 92%` ## 3. Data layer @@ -45,8 +45,8 @@ Generated 2026-09-08 19:49 UTC · `sots-re` @ 1b5553b,2026-09-08 · `sots-engine | Module | LOC | Test files | Checks | Wired | Doc | |---|---:|---:|---:|---|---| -| `app` | 3,409 | 8 | 169 | yes | N-output-term.md | -| `game/ai` | 451 | 3 | 106 | yes | — | +| `app` | 4,210 | 8 | 169 | yes | N-output-term.md | +| `game/ai` | 1,197 | 5 | 206 | yes | — | | `game/combat` | 582 | 2 | 34 | yes | mars-parse.md | | `game/config` | 558 | 4 | 131 | yes | M1.md | | `game/data` | 2,077 | 12 | 462 | yes | game-data.md | @@ -54,18 +54,18 @@ Generated 2026-09-08 19:49 UTC · `sots-re` @ 1b5553b,2026-09-08 · `sots-engine | `game/effects` | 973 | 3 | 231 | yes | game-effects.md | | `game/events` | 558 | 3 | 152 | yes | E-events.md | | `game/nav` | 581 | 2 | 113 | yes | — | -| `game/sim` | 4,217 | 12 | 937 | yes | game-sim.md | +| `game/sim` | 4,752 | 14 | 1034 | yes | game-sim.md | | `mars/parse` | 875 | 12 | 277 | yes | mars-parse.md | | `mars/rng` | 244 | 0 | 0 | yes | mars-rng.md | | `mars/stream` | 5,407 | 7 | 310 | yes | mars-stream.md | | `mars/text` | 899 | 8 | 245 | yes | mars-text.md | | `mars/vfs` | 788 | 9 | 140 | yes | mars-vfs.md | -| `shim` | 13,026 | 0 | 0 | direct (WIN32) | H-probes.md | -| `shim/hooks` | 9,973 | 0 | 0 | direct (WIN32) | M0.md | +| `shim` | 13,257 | 0 | 0 | direct (WIN32) | H-probes.md | +| `shim/hooks` | 10,204 | 0 | 0 | direct (WIN32) | M0.md | | `shim/trace` | 2,258 | 9 | 273 | direct (WIN32) | shim-trace.md | -| **total** | **48,076** | **113** | **3883** | | | +| **total** | **50,620** | **117** | **4080** | | | -Board `engine:` rows: verified **24**, mapped 0, in flight 0 (of 24) — verified & merged `[██████████] 100%` +Board `engine:` rows: verified **25**, mapped 0, in flight 0 (of 25) — verified & merged `[██████████] 100%` ## 5. Phase 2 milestones @@ -84,22 +84,22 @@ Turn-driver phases: **16/44** modelled (12 committed) `[████░░░░ | | verified | implemented | partial | blocked | stub | |---|---:|---:|---:|---:|---:| | turn drivers (44) | 0 | 4 | 8 | 4 | 28 | -| post-combat tail (37) | 0 | 1 | 2 | 2 | 32 | +| post-combat tail (37) | 0 | 1 | 4 | 1 | 31 | Reference pair `turn1-state.sav` → `turn2-state.sav`, leaves localised by `state_checksum.py` (coverage proved by re-serialisation): - baseline (a standalone that does nothing): **209** leaves diverge -- after one standalone turn: **131** leaves diverge — closed 78, regressed 0 -- byte match: ❌ not yet `[████░░░░░░] 37%` +- after one standalone turn: **124** leaves diverge — closed 85, regressed 0 +- byte match: ❌ not yet `[████░░░░░░] 41%` Where the remaining divergence lives: | Subsystem | Leaves | |---|---:| -| `/Sim/players` | 55 | -| `/Sim/systems` | 34 | +| `/Sim/players` | 52 | +| `/Sim/systems` | 32 | | `/Sim/turnstats` | 24 | -| `/Sim/SvSctOb` | 8 | +| `/Sim/SvSctOb` | 6 | | `/Sim/DesignIDs[]` | 1 | | `/Sim/FleetIDs[]` | 1 | | `/Sim/ModCount` | 1 | @@ -132,11 +132,11 @@ Most recent open: ## 9. Delta since previous dashboard -- verified targets: 211 → 223 (+12) · mapped-or-better: 251 → 263 (+12) -- engine LOC: 46,804 → 48,076 (+1,272) · test files: 111 → 113 (+2) · checks: 3,796 → 3,883 (+87) -- addresses verified: 1,020 → 1,057 (+37) · recovered layouts: 384 → 384 (+0) · open questions: 26 → 26 (+0) -- standalone leaves closed: 78 → 78 (+0) · leaves still diverging: 131 → 131 (+0) +- verified targets: 223 → 244 (+21) · mapped-or-better: 263 → 284 (+21) +- engine LOC: 48,076 → 50,620 (+2,544) · test files: 113 → 117 (+4) · checks: 3,883 → 4,080 (+197) +- addresses verified: 1,057 → 1,093 (+36) · recovered layouts: 384 → 384 (+0) · open questions: 26 → 26 (+0) +- standalone leaves closed: 78 → 85 (+7) · leaves still diverging: 131 → 124 (-7) --- warnings: board.md: unknown types subsystems; mars-rng.md: no oracle total row parsed; mars-stream.md: no oracle total row parsed; mars-vfs.md: no oracle total row parsed - + diff --git a/campaign/board.md b/campaign/board.md index 5338d12..c36d773 100644 --- a/campaign/board.md +++ b/campaign/board.md @@ -322,3 +322,4 @@ Status flow: `backlog → in-progress → mapped → verified` (or `blocked`). | trade/spy workload: ABSENCE MEASURED, not assumed | verify | verified | high | 100% | 2026-09-08 | Both containers read live: `trade routes count=0`, `spy programs count=0`, both managers non-null, **all three vector pointers ZERO - default-constructed, not emptied** - and zero traps on either _Mylast. Three lanes had failed to build this workload; now the absence is a measurement. The spy-UI question stays open because the vector never grew, **but the instrument that would name the UI now exists and is proven to arm** | | CORRECTION: layouts.md ServerSystem NVO rows are wrong | objects | backlog | — | 0% | 2026-09-08 | Lane W3: `Game::ServerSystem` rows `PID@0x274` and `NVO@0x278` are wrong - **+0x274 is _Myhead, +0x278 is _Mysize, and the "PID" tag belongs to the NODE KEY**. Same shape for the NVE/NVs rows. Documented but not fixed because it is a GENERATED file - the fix belongs in the recovery, not the output | | gen_addresses now detects SAME-ADDRESS duplicates | meta | verified | high | 100% | 2026-09-08 | Lane SV caught by hand what the tooling could not see: it reached 0x004271c0 independently and would have filed `RNG_NextIntInclusive`, but addresses.json already carries it as **RNG_NextInt** - and **the merger only checked duplicate NAMES**, so it would have merged silently and **forked the vocabulary for the campaign's most-used RNG primitive**. Fixed: gen_addresses.py now errors on same-address-different-name too (offsets excluded - they are only meaningful per owning struct). IT IMMEDIATELY FOUND **13 MORE across 8 lane fragments**, including two AI lanes naming one function differently, a boundary marker colliding with the function it bounds, and several lane-suffixed aliases of existing entries. All resolved with the agreement recorded in each fragment's _note. **AND THE SWEEP BROKE THE SHIM BUILD** - the engine referenced a dropped alias - which the CT111 cross-build caught and the host build could not. Rule 13 earning its keep again | +| standalone: 209 -> 124, closed 85, regressed 0 | engine | verified | high | 100% | 2026-09-08 | Corrected figure after finding a stale-build error of mine (rule 24). Lanes PL and SV had each independently reported 126 from a 128 baseline while main also read 128 - arithmetically impossible, which is what exposed it. Both lanes' work was in the tree all along; the binary I measured predated both merges because the gate rsync excludes `build*` and rsync preserves mtimes, so cmake relinked nothing. **NO ERROR, NO WARNING, AND A PLAUSIBLE NUMBER** - the same shape as the build-dir race earlier today that looked exactly like engine nondeterminism. Fresh build dir per measurement from now on | diff --git a/guides/method-rules.md b/guides/method-rules.md index b2b4b93..e3106d9 100644 --- a/guides/method-rules.md +++ b/guides/method-rules.md @@ -289,3 +289,21 @@ exactly, an empty container. **A float literal in this image is a widened `float`, not a `double`.** It has now bitten the money chain, the bankruptcy divisor and the gate constant. Read the four bytes; do not assume the decimal. + +## 24. Never reuse a build directory across trees — a stale binary measures cleanly + +The integrator's gate rsync excludes `build*` to save transfer time, so the remote build directory +survived from an *earlier* tree. rsync preserves mtimes, so `cmake --build` saw objects newer than +sources, relinked nothing, and produced a **stale binary that measured perfectly**. + +The reported figure was 128 diverging leaves. The real figure for that tree was **124**. Two lanes' +merged work was invisible, and both had independently reported the better number from their own +branches — which is the only reason it was caught: two lanes reporting 126 from a 128 baseline while +`main` also read 128 is arithmetically impossible. + +The failure mode is the dangerous kind: **no error, no warning, and a plausible number.** It is the +same shape as querying a build directory while a background job owns it (which also looked exactly +like nondeterminism in the engine). + +So: **a fresh build directory per measurement**, or `rm -rf` the build tree before building. And when +a merged result does not reproduce a lane's own number, suspect the build before suspecting the lane. diff --git a/verify/results/standalone/report.txt b/verify/results/standalone/report.txt index 160fb05..1415783 100644 --- a/verify/results/standalone/report.txt +++ b/verify/results/standalone/report.txt @@ -1,18 +1,22 @@ # standalone vs the oracle -generated 2026-09-08T20:04:11Z binary /home/alex/sots-engine-pl/build-host/src/app/sots_turn +generated 2026-09-08T21:01:53Z binary /srv/re-lab/build/eng-rep3/build-host/src/app/sots_turn phases: 16/44 of the two turn drivers modelled, 12 committed (implemented 4, partial 8, blocked 4, stub 28) - 5/37 of the post-combat tail modelled + 6/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 128 leaves diverge - closed 81, regressed 0, byte match: no + after one standalone turn 124 leaves diverge + closed 85, regressed 0, byte match: no coverage proved on all three saves: {'input': True, 'oracle': True, 'ours': True} closed: + /Sim/Frame + + /Sim/SvSctOb/EncObj[3]/CDiff + + /Sim/SvSctOb/EncObj[6]/ini + + /Sim/players/Player[16 "re"]/BnkEl + /Sim/players/Player[16 "re"]/Sav + + /Sim/players/Player[32 "Fane Lao"]/BnkEl + /Sim/players/Player[496 "Singularity"]/dipstats/. + /Sim/players/Player[496 "Singularity"]/dipstats/.[0] + /Sim/players/Player[496 "Singularity"]/dipstats/.[1] @@ -95,12 +99,17 @@ phases: 16/44 of the two turn drivers modelled, 12 committed (implemented 4, par ## turn2-state.sav -> turn3-state.sav (real End Turn) baseline (do nothing) 108 leaves diverge - after one standalone turn 69 leaves diverge - closed 39, regressed 0, byte match: no + after one standalone turn 63 leaves diverge + closed 45, regressed 0, byte match: no coverage proved on all three saves: {'input': True, 'oracle': True, 'ours': True} closed: + /Sim/Frame + + /Sim/SvSctOb/EncObj[5]/Hives/.[1]/NextQ + + /Sim/SvSctOb/EncObj[5]/Hives/.[2]/NextQ + + /Sim/players/Player[16 "re"]/BnkEl + + /Sim/players/Player[16 "re"]/PvSav + /Sim/players/Player[16 "re"]/Sav + + /Sim/players/Player[32 "Fane Lao"]/BnkEl + /Sim/players/Player[496 "Singularity"]/dipstats/.[1]/lastally + /Sim/players/Player[512 "Singularity"]/dipstats/.[1]/lastally + /Sim/players/Player[528 "Alien Menace"]/dipstats/.[1]/lastnap @@ -112,6 +121,7 @@ phases: 16/44 of the two turn drivers modelled, 12 committed (implemented 4, par + /Sim/players/Player[560 "Von Neumann"]/dipstats/.[1]/lastnap + /Sim/players/Player[560 "Von Neumann"]/dipstats/.[2]/lastnap + /Sim/players/Player[560 "Von Neumann"]/dipstats/.[3]/lastnap + + /Sim/players/Player[576 "Independent Colony"]/PvSav + /Sim/players/Player[576 "Independent Colony"]/Sav + /Sim/players/Player[576 "Independent Colony"]/dipstats/.[1]/lastnap + /Sim/players/Player[576 "Independent Colony"]/dipstats/.[2]/lastnap @@ -140,10 +150,10 @@ phases: 16/44 of the two turn drivers modelled, 12 committed (implemented 4, par + /Summary/Turn ## what still differs on the reference pair, by subsystem - 54 /Sim/players + 52 /Sim/players 32 /Sim/systems 24 /Sim/turnstats - 8 /Sim/SvSctOb + 6 /Sim/SvSctOb 1 /Sim/DesignIDs[] 1 /Sim/FleetIDs[] 1 /Sim/ModCount @@ -163,24 +173,20 @@ phases: 16/44 of the two turn drivers modelled, 12 committed (implemented 4, par /Sim/NumFlts: 6 -> 7 /Sim/RNG/.: '' -> '' /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"]/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 @@ -196,3 +202,7 @@ phases: 16/44 of the two turn drivers modelled, 12 committed (implemented 4, par /Sim/players/Player[32 "Fane Lao"]/ShipRecs/srb[0]: 0 -> 1 /Sim/players/Player[32 "Fane Lao"]/ShipRecs/srb[3]: only-in-B /Sim/players/Player[32 "Fane Lao"]/ShipRecs/srbd: 0 -> 1 + /Sim/players/Player[32 "Fane Lao"]/ShipRecs/src: only-in-B + /Sim/players/Player[32 "Fane Lao"]/ShipRecs/srd: only-in-B + /Sim/players/Player[32 "Fane Lao"]/ShipRecs/sri[0]: 0 -> 1 + /Sim/players/Player[32 "Fane Lao"]/ShipRecs/sri[3]: only-in-B diff --git a/verify/results/standalone/status.json b/verify/results/standalone/status.json index 7596781..753cb77 100644 --- a/verify/results/standalone/status.json +++ b/verify/results/standalone/status.json @@ -1,21 +1,21 @@ { "schema": "sots-standalone-status/1", - "generated": "2026-09-08T20:04:11Z", - "binary": "/home/alex/sots-engine-pl/build-host/src/app/sots_turn", + "generated": "2026-09-08T21:01:53Z", + "binary": "/srv/re-lab/build/eng-rep3/build-host/src/app/sots_turn", "engineArgs": [], "reference": { "input": "turn1-state.sav", "oracle": "turn2-state.sav", "baselineDiverging": 209, - "divergingAfterTurn": 128, - "closed": 81, + "divergingAfterTurn": 124, + "closed": 85, "regressed": 0, "byteMatch": false, "subsystems": { - "/Sim/players": 54, + "/Sim/players": 52, "/Sim/systems": 32, "/Sim/turnstats": 24, - "/Sim/SvSctOb": 8, + "/Sim/SvSctOb": 6, "/Sim/DesignIDs[]": 1, "/Sim/FleetIDs[]": 1, "/Sim/ModCount": 1, @@ -42,11 +42,11 @@ "total": 37, "verified": 0, "implemented": 1, - "partial": 2, - "blocked": 2, - "stub": 32, - "modelled": 5, - "committed": 3 + "partial": 4, + "blocked": 1, + "stub": 31, + "modelled": 6, + "committed": 5 }, "rng": { "wordsModelled": 16, @@ -60,7 +60,7 @@ "engineArgs": [], "exit": 0, "stdout": [ - "load: /home/alex/sots-re/verify/results/saves/turn1-state.sav", + "load: /srv/re-lab/build/sre4/verify/results/saves/turn1-state.sav", " 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)", @@ -69,12 +69,12 @@ "phases", " turn drivers (the milestone's denominator): 16 of 44 modelled, 12 committed", " verified 0 implemented 4 partial 8 blocked 4 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", + " post-combat tail (written to the autosave, tracked separately): 6 of 37 modelled", + " verified 0 implemented 1 partial 4 blocked 1 stub 31", "", "this run", - " leaves written 89", - " leaves NOT written by a blocked phase 98", + " leaves written 93", + " leaves NOT written by a blocked phase 96", " 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", @@ -83,8 +83,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/tmpfmmdz_by/post-turn1-state.sav (65980 bytes gzipped, 595192 inflated)", - "metric -> /tmp/tmpfmmdz_by/metric-turn1-state.sav.json" + "wrote /tmp/tmpz2xrayx3/post-turn1-state.sav (65980 bytes gzipped, 595192 inflated)", + "metric -> /tmp/tmpz2xrayx3/metric-turn1-state.sav.json" ], "coverage": { "input": true, @@ -94,15 +94,19 @@ "roots": { "input": "64b836b966299d9b72fc02244ed31e31", "oracle": "4bed514f853332b9fa35b388c3aa5558", - "ours": "0cf5b0cfe7dd11ab248eb4df2a1ea828" + "ours": "9f767c16c83cfa6c653b51a3bd027659" }, "baselineDiverging": 209, - "divergingAfterTurn": 128, - "closed": 81, + "divergingAfterTurn": 124, + "closed": 85, "regressed": 0, "closedPaths": [ "/Sim/Frame", + "/Sim/SvSctOb/EncObj[3]/CDiff", + "/Sim/SvSctOb/EncObj[6]/ini", + "/Sim/players/Player[16 \"re\"]/BnkEl", "/Sim/players/Player[16 \"re\"]/Sav", + "/Sim/players/Player[32 \"Fane Lao\"]/BnkEl", "/Sim/players/Player[496 \"Singularity\"]/dipstats/.", "/Sim/players/Player[496 \"Singularity\"]/dipstats/.[0]", "/Sim/players/Player[496 \"Singularity\"]/dipstats/.[1]", @@ -192,24 +196,20 @@ "/Sim/NumFlts: 6 -> 7", "/Sim/RNG/.: '' -> ''", "/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\"]/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", @@ -224,13 +224,17 @@ "/Sim/players/Player[32 \"Fane Lao\"]/Sav: 298113 -> 92651", "/Sim/players/Player[32 \"Fane Lao\"]/ShipRecs/srb[0]: 0 -> 1", "/Sim/players/Player[32 \"Fane Lao\"]/ShipRecs/srb[3]: only-in-B", - "/Sim/players/Player[32 \"Fane Lao\"]/ShipRecs/srbd: 0 -> 1" + "/Sim/players/Player[32 \"Fane Lao\"]/ShipRecs/srbd: 0 -> 1", + "/Sim/players/Player[32 \"Fane Lao\"]/ShipRecs/src: only-in-B", + "/Sim/players/Player[32 \"Fane Lao\"]/ShipRecs/srd: only-in-B", + "/Sim/players/Player[32 \"Fane Lao\"]/ShipRecs/sri[0]: 0 -> 1", + "/Sim/players/Player[32 \"Fane Lao\"]/ShipRecs/sri[3]: only-in-B" ], "byteMatch": false, "standalone": { "schema": "sots-standalone-metric/1", - "input": "/home/alex/sots-re/verify/results/saves/turn1-state.sav", - "output": "/tmp/tmpfmmdz_by/post-turn1-state.sav", + "input": "/srv/re-lab/build/sre4/verify/results/saves/turn1-state.sav", + "output": "/tmp/tmpz2xrayx3/post-turn1-state.sav", "spine": { "total": 44, "verified": 0, @@ -245,15 +249,15 @@ "total": 37, "verified": 0, "implemented": 1, - "partial": 2, - "blocked": 2, - "stub": 32, - "modelled": 5, - "committed": 3 + "partial": 4, + "blocked": 1, + "stub": 31, + "modelled": 6, + "committed": 5 }, "run": { - "leafWrites": 89, - "blockedLeafWrites": 98, + "leafWrites": 93, + "blockedLeafWrites": 96, "rngWords": 16, "rngLoaded": true, "rngCommitted": false, @@ -274,6 +278,16 @@ "blockedWrites": 0, "rng": 0 }, + { + "driver": "host turn sequence (outside the two turn drivers)", + "id": "H03", + "name": "ScriptHookTurnBegin", + "status": "partial", + "ran": 2, + "writes": 1, + "blockedWrites": 0, + "rng": 0 + }, { "driver": "host turn sequence (outside the two turn drivers)", "id": "H02", @@ -289,7 +303,7 @@ "id": "S00", "name": "SnapshotPreviousTurn", "status": "partial", - "ran": 1, + "ran": 9, "writes": 1, "blockedWrites": 0, "rng": 0 @@ -928,9 +942,9 @@ "driver": "StrategyServer::OnAllCombatDone_Tail", "id": "T20", "name": "ScriptHooksTurnEnd", - "status": "stub", - "ran": 0, - "writes": 0, + "status": "partial", + "ran": 1, + "writes": 1, "blockedWrites": 0, "rng": 0 }, @@ -1038,10 +1052,10 @@ "driver": "StrategyServer::OnAllCombatDone_Tail", "id": "T31", "name": "UpdateBankruptcyLimits", - "status": "blocked", + "status": "partial", "ran": 8, - "writes": 0, - "blockedWrites": 2, + "writes": 2, + "blockedWrites": 0, "rng": 0 }, { @@ -1114,7 +1128,7 @@ "engineArgs": [], "exit": 0, "stdout": [ - "load: /home/alex/sots-re/verify/results/saves/turn2-state.sav", + "load: /srv/re-lab/build/sre4/verify/results/saves/turn2-state.sav", " 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)", @@ -1123,12 +1137,12 @@ "phases", " turn drivers (the milestone's denominator): 16 of 44 modelled, 12 committed", " verified 0 implemented 4 partial 8 blocked 4 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", + " post-combat tail (written to the autosave, tracked separately): 6 of 37 modelled", + " verified 0 implemented 1 partial 4 blocked 1 stub 31", "", "this run", - " leaves written 45", - " leaves NOT written by a blocked phase 74", + " leaves written 57", + " 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", @@ -1137,8 +1151,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/tmpfmmdz_by/post-turn2-state.sav (66880 bytes gzipped, 603360 inflated)", - "metric -> /tmp/tmpfmmdz_by/metric-turn2-state.sav.json" + "wrote /tmp/tmpz2xrayx3/post-turn2-state.sav (66882 bytes gzipped, 603360 inflated)", + "metric -> /tmp/tmpz2xrayx3/metric-turn2-state.sav.json" ], "coverage": { "input": true, @@ -1148,15 +1162,20 @@ "roots": { "input": "4bed514f853332b9fa35b388c3aa5558", "oracle": "e9c161e311f8ef8fad6f1aa1903dcf3f", - "ours": "853380c5c55cd7208c60afc2486c7e74" + "ours": "abe565b26e6b52ac8ee006e34fc1a984" }, "baselineDiverging": 108, - "divergingAfterTurn": 69, - "closed": 39, + "divergingAfterTurn": 63, + "closed": 45, "regressed": 0, "closedPaths": [ "/Sim/Frame", + "/Sim/SvSctOb/EncObj[5]/Hives/.[1]/NextQ", + "/Sim/SvSctOb/EncObj[5]/Hives/.[2]/NextQ", + "/Sim/players/Player[16 \"re\"]/BnkEl", + "/Sim/players/Player[16 \"re\"]/PvSav", "/Sim/players/Player[16 \"re\"]/Sav", + "/Sim/players/Player[32 \"Fane Lao\"]/BnkEl", "/Sim/players/Player[496 \"Singularity\"]/dipstats/.[1]/lastally", "/Sim/players/Player[512 \"Singularity\"]/dipstats/.[1]/lastally", "/Sim/players/Player[528 \"Alien Menace\"]/dipstats/.[1]/lastnap", @@ -1168,6 +1187,7 @@ "/Sim/players/Player[560 \"Von Neumann\"]/dipstats/.[1]/lastnap", "/Sim/players/Player[560 \"Von Neumann\"]/dipstats/.[2]/lastnap", "/Sim/players/Player[560 \"Von Neumann\"]/dipstats/.[3]/lastnap", + "/Sim/players/Player[576 \"Independent Colony\"]/PvSav", "/Sim/players/Player[576 \"Independent Colony\"]/Sav", "/Sim/players/Player[576 \"Independent Colony\"]/dipstats/.[1]/lastnap", "/Sim/players/Player[576 \"Independent Colony\"]/dipstats/.[2]/lastnap", @@ -1203,26 +1223,21 @@ "/Sim/NumFlts: 7 -> 8", "/Sim/RNG/.: '' -> ''", "/Sim/ShipIDs[]: removed [], added [1760] (16 -> 17 entries)", - "/Sim/SvSctOb/EncObj[5]/Hives/.[1]/NextQ: 31 -> 32", - "/Sim/SvSctOb/EncObj[5]/Hives/.[2]/NextQ: 29 -> 30", "/Sim/cmbtid: 2 -> 3", "/Sim/fleets/Flt[1744 \"Alpha Fleet\"]: only-in-A", "/Sim/fleets/Flt[1776 \"Gamma Fleet\"]: only-in-B", "/Sim/fleets/Flt[34 \"Beta Fleet\"]: only-in-B", - "/Sim/players/Player[16 \"re\"]/BnkEl: -1594593 -> -1598566", "/Sim/players/Player[16 \"re\"]/BnkPr: -789323 -> -791290", "/Sim/players/Player[16 \"re\"]/Events/EvNxID: 2 -> 3", "/Sim/players/Player[16 \"re\"]/Events/Events/.[0]: 1 -> 2", "/Sim/players/Player[16 \"re\"]/Events/Events/.[EvTurn=3]: only-in-B", - "/Sim/players/Player[16 \"re\"]/PvSav: 50000 -> 289688", - "/Sim/players/Player[32 \"Fane Lao\"]/BnkEl: -1815833 -> -1820206", "/Sim/players/Player[32 \"Fane Lao\"]/BnkPr: -898837 -> -901002", "/Sim/players/Player[32 \"Fane Lao\"]/Events/EvNxID: 2 -> 4", "/Sim/players/Player[32 \"Fane Lao\"]/Events/Events/.[0]: 1 -> 2", "/Sim/players/Player[32 \"Fane Lao\"]/Events/Events/.[EvTurn=3]: only-in-B", "/Sim/players/Player[32 \"Fane Lao\"]/FNG/FNGNum: 1 -> 3", "/Sim/players/Player[32 \"Fane Lao\"]/Maint: 500 -> 1000", - "/Sim/players/Player[32 \"Fane Lao\"]/PvSav: 38100 -> 80751", + "/Sim/players/Player[32 \"Fane Lao\"]/PvSav: 92651 -> 80751", "/Sim/players/Player[32 \"Fane Lao\"]/Sav: 142379 -> 135486", "/Sim/players/Player[32 \"Fane Lao\"]/ShipRecs/srb[0]: 1 -> 2", "/Sim/players/Player[32 \"Fane Lao\"]/ShipRecs/srb[3]: 1 -> 2", @@ -1232,17 +1247,22 @@ "/Sim/players/Player[32 \"Fane Lao\"]/TechTree/Tbd[106]: 1 -> 2", "/Sim/players/Player[32 \"Fane Lao\"]/lboid: 1 -> 2", "/Sim/players/Player[32 \"Fane Lao\"]/odes/.[1]/otnL: 2 -> 3", - "/Sim/players/Player[576 \"Independent Colony\"]/PvSav: 0 -> 98871", "/Sim/systems/Sys[112 \"Gamma Cephei\"]/PvPop2/PopG/PopC: 500000000 -> 520000000", "/Sim/systems/Sys[112 \"Gamma Cephei\"]/RepCur: 336360.0 -> 336840.0 [15360 ulp]", "/Sim/systems/Sys[112 \"Gamma Cephei\"]/RepMax: 336360.0 -> 336840.0 [15360 ulp]", - "/Sim/systems/Sys[112 \"Gamma Cephei\"]/TShn: 2 -> 3" + "/Sim/systems/Sys[112 \"Gamma Cephei\"]/TShn: 2 -> 3", + "/Sim/systems/Sys[224 \"Spica\"]/TShn: 2 -> 3", + "/Sim/systems/Sys[288 \"Ke'Dolarra\"]/DefF: 1744 -> 1776", + "/Sim/systems/Sys[288 \"Ke'Dolarra\"]/Flt: 1744 -> 1776", + "/Sim/systems/Sys[288 \"Ke'Dolarra\"]/PvPop2/PopG/PopC: 500000000 -> 520000000", + "/Sim/systems/Sys[288 \"Ke'Dolarra\"]/RepCur: 370000.0 -> 370520.0 [16640 ulp]", + "/Sim/systems/Sys[288 \"Ke'Dolarra\"]/RepMax: 370000.0 -> 370520.0 [16640 ulp]" ], "byteMatch": false, "standalone": { "schema": "sots-standalone-metric/1", - "input": "/home/alex/sots-re/verify/results/saves/turn2-state.sav", - "output": "/tmp/tmpfmmdz_by/post-turn2-state.sav", + "input": "/srv/re-lab/build/sre4/verify/results/saves/turn2-state.sav", + "output": "/tmp/tmpz2xrayx3/post-turn2-state.sav", "spine": { "total": 44, "verified": 0, @@ -1257,15 +1277,15 @@ "total": 37, "verified": 0, "implemented": 1, - "partial": 2, - "blocked": 2, - "stub": 32, - "modelled": 5, - "committed": 3 + "partial": 4, + "blocked": 1, + "stub": 31, + "modelled": 6, + "committed": 5 }, "run": { - "leafWrites": 45, - "blockedLeafWrites": 74, + "leafWrites": 57, + "blockedLeafWrites": 72, "rngWords": 16, "rngLoaded": true, "rngCommitted": false, @@ -1286,6 +1306,16 @@ "blockedWrites": 0, "rng": 0 }, + { + "driver": "host turn sequence (outside the two turn drivers)", + "id": "H03", + "name": "ScriptHookTurnBegin", + "status": "partial", + "ran": 2, + "writes": 7, + "blockedWrites": 0, + "rng": 0 + }, { "driver": "host turn sequence (outside the two turn drivers)", "id": "H02", @@ -1301,8 +1331,8 @@ "id": "S00", "name": "SnapshotPreviousTurn", "status": "partial", - "ran": 1, - "writes": 1, + "ran": 9, + "writes": 4, "blockedWrites": 0, "rng": 0 }, @@ -1940,8 +1970,8 @@ "driver": "StrategyServer::OnAllCombatDone_Tail", "id": "T20", "name": "ScriptHooksTurnEnd", - "status": "stub", - "ran": 0, + "status": "partial", + "ran": 1, "writes": 0, "blockedWrites": 0, "rng": 0 @@ -2050,10 +2080,10 @@ "driver": "StrategyServer::OnAllCombatDone_Tail", "id": "T31", "name": "UpdateBankruptcyLimits", - "status": "blocked", + "status": "partial", "ran": 8, - "writes": 0, - "blockedWrites": 2, + "writes": 2, + "blockedWrites": 0, "rng": 0 }, {