standalone 209 -> 124 (closed 85); rule 24: never reuse a build directory across trees

This commit is contained in:
alex 2026-09-08 17:01:57 -04:00
parent 9075f60f7b
commit 2d6184888f
5 changed files with 178 additions and 119 deletions

View file

@ -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
<!-- dashboard-metrics {"verified": 223, "mapped_plus": 263, "targets": 292, "loc": 48076, "tests": 113, "checks": 3883, "addr_verified": 1057, "addr_total": 1138, "layouts": 384, "open_q": 26, "sa_closed": 78, "sa_left": 131} -->
<!-- dashboard-metrics {"verified": 244, "mapped_plus": 284, "targets": 317, "loc": 50620, "tests": 117, "checks": 4080, "addr_verified": 1093, "addr_total": 1188, "layouts": 384, "open_q": 26, "sa_closed": 85, "sa_left": 124} -->

View file

@ -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 |

View file

@ -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.

View file

@ -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/.: '<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"]/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

View file

@ -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/.: '<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\"]/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/.: '<raw 2503 B ef4d678696ed4c53>' -> '<raw 2503 B a80459bfd63a006b>'",
"/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
},
{