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 # 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 > **North star:** A functional reimplementation of the engine — behavior-equivalent, NOT byte-for-byte
## 1. Map coverage (campaign/board.md) ## 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 | % | | Status | Count | % |
|---|---:|---:| |---|---:|---:|
| verified | 223 | 76% | | verified | 244 | 77% |
| mapped | 40 | 14% | | mapped | 40 | 13% |
| in-progress | 2 | 1% | | in-progress | 3 | 1% |
| backlog | 25 | 9% | | backlog | 28 | 9% |
| blocked | 2 | 1% | | blocked | 2 | 1% |
| Type | verified | mapped | in-progress | backlog | blocked | total | | Type | verified | mapped | in-progress | backlog | blocked | total |
|---|---:|---:|---:|---:|---:|---:| |---|---:|---:|---:|---:|---:|---:|
| objects | 37 | 6 | 0 | 2 | 1 | 46 | | objects | 39 | 6 | 0 | 3 | 1 | 49 |
| control-flow | 21 | 2 | 0 | 0 | 0 | 23 | | control-flow | 23 | 2 | 0 | 0 | 0 | 25 |
| subsystems | 4 | 8 | 0 | 2 | 1 | 15 | | subsystems | 4 | 8 | 0 | 2 | 1 | 15 |
| engine | 24 | 0 | 0 | 0 | 0 | 24 | | engine | 25 | 0 | 0 | 0 | 0 | 25 |
| verify | 61 | 14 | 2 | 20 | 0 | 97 | | verify | 70 | 14 | 3 | 22 | 0 | 109 |
| phase2 | 13 | 3 | 0 | 0 | 0 | 16 | | phase2 | 13 | 3 | 0 | 0 | 0 | 16 |
| meta | 48 | 6 | 0 | 1 | 0 | 55 | | meta | 53 | 6 | 0 | 1 | 0 | 60 |
| other | 15 | 1 | 0 | 0 | 0 | 16 | | other | 17 | 1 | 0 | 0 | 0 | 18 |
## 2. Binary understanding ## 2. Binary understanding
- RTTI type descriptors: **1,924** (`Game::` 1,404, `Mars::` 194; serializable types 179) - 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 - 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 ## 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 | | Module | LOC | Test files | Checks | Wired | Doc |
|---|---:|---:|---:|---|---| |---|---:|---:|---:|---|---|
| `app` | 3,409 | 8 | 169 | yes | N-output-term.md | | `app` | 4,210 | 8 | 169 | yes | N-output-term.md |
| `game/ai` | 451 | 3 | 106 | yes | — | | `game/ai` | 1,197 | 5 | 206 | yes | — |
| `game/combat` | 582 | 2 | 34 | yes | mars-parse.md | | `game/combat` | 582 | 2 | 34 | yes | mars-parse.md |
| `game/config` | 558 | 4 | 131 | yes | M1.md | | `game/config` | 558 | 4 | 131 | yes | M1.md |
| `game/data` | 2,077 | 12 | 462 | yes | game-data.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/effects` | 973 | 3 | 231 | yes | game-effects.md |
| `game/events` | 558 | 3 | 152 | yes | E-events.md | | `game/events` | 558 | 3 | 152 | yes | E-events.md |
| `game/nav` | 581 | 2 | 113 | yes | — | | `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/parse` | 875 | 12 | 277 | yes | mars-parse.md |
| `mars/rng` | 244 | 0 | 0 | yes | mars-rng.md | | `mars/rng` | 244 | 0 | 0 | yes | mars-rng.md |
| `mars/stream` | 5,407 | 7 | 310 | yes | mars-stream.md | | `mars/stream` | 5,407 | 7 | 310 | yes | mars-stream.md |
| `mars/text` | 899 | 8 | 245 | yes | mars-text.md | | `mars/text` | 899 | 8 | 245 | yes | mars-text.md |
| `mars/vfs` | 788 | 9 | 140 | yes | mars-vfs.md | | `mars/vfs` | 788 | 9 | 140 | yes | mars-vfs.md |
| `shim` | 13,026 | 0 | 0 | direct (WIN32) | H-probes.md | | `shim` | 13,257 | 0 | 0 | direct (WIN32) | H-probes.md |
| `shim/hooks` | 9,973 | 0 | 0 | direct (WIN32) | M0.md | | `shim/hooks` | 10,204 | 0 | 0 | direct (WIN32) | M0.md |
| `shim/trace` | 2,258 | 9 | 273 | direct (WIN32) | shim-trace.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 ## 5. Phase 2 milestones
@ -84,22 +84,22 @@ Turn-driver phases: **16/44** modelled (12 committed) `[████░░░░
| | verified | implemented | partial | blocked | stub | | | verified | implemented | partial | blocked | stub |
|---|---:|---:|---:|---:|---:| |---|---:|---:|---:|---:|---:|
| turn drivers (44) | 0 | 4 | 8 | 4 | 28 | | 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): 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 - baseline (a standalone that does nothing): **209** leaves diverge
- after one standalone turn: **131** leaves diverge — closed 78, regressed 0 - after one standalone turn: **124** leaves diverge — closed 85, regressed 0
- byte match: ❌ not yet `[████░░░░░░] 37%` - byte match: ❌ not yet `[████░░░░░░] 41%`
Where the remaining divergence lives: Where the remaining divergence lives:
| Subsystem | Leaves | | Subsystem | Leaves |
|---|---:| |---|---:|
| `/Sim/players` | 55 | | `/Sim/players` | 52 |
| `/Sim/systems` | 34 | | `/Sim/systems` | 32 |
| `/Sim/turnstats` | 24 | | `/Sim/turnstats` | 24 |
| `/Sim/SvSctOb` | 8 | | `/Sim/SvSctOb` | 6 |
| `/Sim/DesignIDs[]` | 1 | | `/Sim/DesignIDs[]` | 1 |
| `/Sim/FleetIDs[]` | 1 | | `/Sim/FleetIDs[]` | 1 |
| `/Sim/ModCount` | 1 | | `/Sim/ModCount` | 1 |
@ -132,11 +132,11 @@ Most recent open:
## 9. Delta since previous dashboard ## 9. Delta since previous dashboard
- verified targets: 211 → 223 (+12) · mapped-or-better: 251 → 263 (+12) - verified targets: 223 → 244 (+21) · mapped-or-better: 263 → 284 (+21)
- engine LOC: 46,804 → 48,076 (+1,272) · test files: 111 → 113 (+2) · checks: 3,796 → 3,883 (+87) - engine LOC: 48,076 → 50,620 (+2,544) · test files: 113 → 117 (+4) · checks: 3,883 → 4,080 (+197)
- addresses verified: 1,020 → 1,057 (+37) · recovered layouts: 384 → 384 (+0) · open questions: 26 → 26 (+0) - addresses verified: 1,057 → 1,093 (+36) · recovered layouts: 384 → 384 (+0) · open questions: 26 → 26 (+0)
- standalone leaves closed: 78 → 78 (+0) · leaves still diverging: 131 → 131 (+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 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** | | 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 | | 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 | | 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 **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. 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 # 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) 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) ## turn1-state.sav -> turn2-state.sav (real End Turn)
baseline (do nothing) 209 leaves diverge baseline (do nothing) 209 leaves diverge
after one standalone turn 128 leaves diverge after one standalone turn 124 leaves diverge
closed 81, regressed 0, byte match: no closed 85, regressed 0, byte match: no
coverage proved on all three saves: {'input': True, 'oracle': True, 'ours': True} coverage proved on all three saves: {'input': True, 'oracle': True, 'ours': True}
closed: closed:
+ /Sim/Frame + /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[16 "re"]/Sav
+ /Sim/players/Player[32 "Fane Lao"]/BnkEl
+ /Sim/players/Player[496 "Singularity"]/dipstats/. + /Sim/players/Player[496 "Singularity"]/dipstats/.
+ /Sim/players/Player[496 "Singularity"]/dipstats/.[0] + /Sim/players/Player[496 "Singularity"]/dipstats/.[0]
+ /Sim/players/Player[496 "Singularity"]/dipstats/.[1] + /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) ## turn2-state.sav -> turn3-state.sav (real End Turn)
baseline (do nothing) 108 leaves diverge baseline (do nothing) 108 leaves diverge
after one standalone turn 69 leaves diverge after one standalone turn 63 leaves diverge
closed 39, regressed 0, byte match: no closed 45, regressed 0, byte match: no
coverage proved on all three saves: {'input': True, 'oracle': True, 'ours': True} coverage proved on all three saves: {'input': True, 'oracle': True, 'ours': True}
closed: closed:
+ /Sim/Frame + /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[16 "re"]/Sav
+ /Sim/players/Player[32 "Fane Lao"]/BnkEl
+ /Sim/players/Player[496 "Singularity"]/dipstats/.[1]/lastally + /Sim/players/Player[496 "Singularity"]/dipstats/.[1]/lastally
+ /Sim/players/Player[512 "Singularity"]/dipstats/.[1]/lastally + /Sim/players/Player[512 "Singularity"]/dipstats/.[1]/lastally
+ /Sim/players/Player[528 "Alien Menace"]/dipstats/.[1]/lastnap + /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/.[1]/lastnap
+ /Sim/players/Player[560 "Von Neumann"]/dipstats/.[2]/lastnap + /Sim/players/Player[560 "Von Neumann"]/dipstats/.[2]/lastnap
+ /Sim/players/Player[560 "Von Neumann"]/dipstats/.[3]/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"]/Sav
+ /Sim/players/Player[576 "Independent Colony"]/dipstats/.[1]/lastnap + /Sim/players/Player[576 "Independent Colony"]/dipstats/.[1]/lastnap
+ /Sim/players/Player[576 "Independent Colony"]/dipstats/.[2]/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 + /Summary/Turn
## what still differs on the reference pair, by subsystem ## what still differs on the reference pair, by subsystem
54 /Sim/players 52 /Sim/players
32 /Sim/systems 32 /Sim/systems
24 /Sim/turnstats 24 /Sim/turnstats
8 /Sim/SvSctOb 6 /Sim/SvSctOb
1 /Sim/DesignIDs[] 1 /Sim/DesignIDs[]
1 /Sim/FleetIDs[] 1 /Sim/FleetIDs[]
1 /Sim/ModCount 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/NumFlts: 6 -> 7
/Sim/RNG/.: '<raw 2503 B 9e6887688129a8f6>' -> '<raw 2503 B ef4d678696ed4c53>' /Sim/RNG/.: '<raw 2503 B 9e6887688129a8f6>' -> '<raw 2503 B ef4d678696ed4c53>'
/Sim/ShipIDs[]: removed [], added [1728] (15 -> 16 entries) /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/.: only-in-A
/Sim/SvSctOb/EncObj[5]/Hives/.[0]: only-in-B /Sim/SvSctOb/EncObj[5]/Hives/.[0]: only-in-B
/Sim/SvSctOb/EncObj[5]/Hives/.[1]: only-in-B /Sim/SvSctOb/EncObj[5]/Hives/.[1]: only-in-B
/Sim/SvSctOb/EncObj[5]/Hives/.[2]: only-in-B /Sim/SvSctOb/EncObj[5]/Hives/.[2]: only-in-B
/Sim/SvSctOb/EncObj[6]/did: only-in-B /Sim/SvSctOb/EncObj[6]/did: only-in-B
/Sim/SvSctOb/EncObj[6]/didc: 0 -> 1 /Sim/SvSctOb/EncObj[6]/didc: 0 -> 1
/Sim/SvSctOb/EncObj[6]/ini: False -> True
/Sim/cmbtid: 1 -> 2 /Sim/cmbtid: 1 -> 2
/Sim/fleets/Flt[1744 "Alpha Fleet"]: only-in-B /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"]/BnkPr: -787353 -> -789323
/Sim/players/Player[16 "re"]/Events/EvNxID: 0 -> 2 /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/.: only-in-A
/Sim/players/Player[16 "re"]/Events/Events/.[0]: only-in-B /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"]/Events/Events/.[EvTurn=2]: only-in-B
/Sim/players/Player[16 "re"]/Status: 0 -> 4 /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"]/BnkPr: -896580 -> -898837
/Sim/players/Player[32 "Fane Lao"]/Events/EvNxID: 0 -> 2 /Sim/players/Player[32 "Fane Lao"]/Events/EvNxID: 0 -> 2
/Sim/players/Player[32 "Fane Lao"]/Events/Events/.: only-in-A /Sim/players/Player[32 "Fane Lao"]/Events/Events/.: 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[0]: 0 -> 1
/Sim/players/Player[32 "Fane Lao"]/ShipRecs/srb[3]: only-in-B /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

View file

@ -1,21 +1,21 @@
{ {
"schema": "sots-standalone-status/1", "schema": "sots-standalone-status/1",
"generated": "2026-09-08T20:04:11Z", "generated": "2026-09-08T21:01:53Z",
"binary": "/home/alex/sots-engine-pl/build-host/src/app/sots_turn", "binary": "/srv/re-lab/build/eng-rep3/build-host/src/app/sots_turn",
"engineArgs": [], "engineArgs": [],
"reference": { "reference": {
"input": "turn1-state.sav", "input": "turn1-state.sav",
"oracle": "turn2-state.sav", "oracle": "turn2-state.sav",
"baselineDiverging": 209, "baselineDiverging": 209,
"divergingAfterTurn": 128, "divergingAfterTurn": 124,
"closed": 81, "closed": 85,
"regressed": 0, "regressed": 0,
"byteMatch": false, "byteMatch": false,
"subsystems": { "subsystems": {
"/Sim/players": 54, "/Sim/players": 52,
"/Sim/systems": 32, "/Sim/systems": 32,
"/Sim/turnstats": 24, "/Sim/turnstats": 24,
"/Sim/SvSctOb": 8, "/Sim/SvSctOb": 6,
"/Sim/DesignIDs[]": 1, "/Sim/DesignIDs[]": 1,
"/Sim/FleetIDs[]": 1, "/Sim/FleetIDs[]": 1,
"/Sim/ModCount": 1, "/Sim/ModCount": 1,
@ -42,11 +42,11 @@
"total": 37, "total": 37,
"verified": 0, "verified": 0,
"implemented": 1, "implemented": 1,
"partial": 2, "partial": 4,
"blocked": 2, "blocked": 1,
"stub": 32, "stub": 31,
"modelled": 5, "modelled": 6,
"committed": 3 "committed": 5
}, },
"rng": { "rng": {
"wordsModelled": 16, "wordsModelled": 16,
@ -60,7 +60,7 @@
"engineArgs": [], "engineArgs": [],
"exit": 0, "exit": 0,
"stdout": [ "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)", " 591376 inflated bytes, 0 error(s), 0 warning(s)",
" turn 1, frame 1, modCount 0, 8 player(s), 28 system(s), 6 fleet(s)", " turn 1, frame 1, modCount 0, 8 player(s), 28 system(s), 6 fleet(s)",
"roundtrip (untouched): byte-identical (591376 bytes)", "roundtrip (untouched): byte-identical (591376 bytes)",
@ -69,12 +69,12 @@
"phases", "phases",
" turn drivers (the milestone's denominator): 16 of 44 modelled, 12 committed", " turn drivers (the milestone's denominator): 16 of 44 modelled, 12 committed",
" verified 0 implemented 4 partial 8 blocked 4 stub 28", " verified 0 implemented 4 partial 8 blocked 4 stub 28",
" post-combat tail (written to the autosave, tracked separately): 5 of 37 modelled", " post-combat tail (written to the autosave, tracked separately): 6 of 37 modelled",
" verified 0 implemented 1 partial 2 blocked 2 stub 32", " verified 0 implemented 1 partial 4 blocked 1 stub 31",
"", "",
"this run", "this run",
" leaves written 89", " leaves written 93",
" leaves NOT written by a blocked phase 98", " leaves NOT written by a blocked phase 96",
" generator words consumed 16 (state loaded, left untouched)", " generator words consumed 16 (state loaded, left untouched)",
" generator words NOT accounted (never netted off the above):", " 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", " - 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 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", " ! 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)", "wrote /tmp/tmpz2xrayx3/post-turn1-state.sav (65980 bytes gzipped, 595192 inflated)",
"metric -> /tmp/tmpfmmdz_by/metric-turn1-state.sav.json" "metric -> /tmp/tmpz2xrayx3/metric-turn1-state.sav.json"
], ],
"coverage": { "coverage": {
"input": true, "input": true,
@ -94,15 +94,19 @@
"roots": { "roots": {
"input": "64b836b966299d9b72fc02244ed31e31", "input": "64b836b966299d9b72fc02244ed31e31",
"oracle": "4bed514f853332b9fa35b388c3aa5558", "oracle": "4bed514f853332b9fa35b388c3aa5558",
"ours": "0cf5b0cfe7dd11ab248eb4df2a1ea828" "ours": "9f767c16c83cfa6c653b51a3bd027659"
}, },
"baselineDiverging": 209, "baselineDiverging": 209,
"divergingAfterTurn": 128, "divergingAfterTurn": 124,
"closed": 81, "closed": 85,
"regressed": 0, "regressed": 0,
"closedPaths": [ "closedPaths": [
"/Sim/Frame", "/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[16 \"re\"]/Sav",
"/Sim/players/Player[32 \"Fane Lao\"]/BnkEl",
"/Sim/players/Player[496 \"Singularity\"]/dipstats/.", "/Sim/players/Player[496 \"Singularity\"]/dipstats/.",
"/Sim/players/Player[496 \"Singularity\"]/dipstats/.[0]", "/Sim/players/Player[496 \"Singularity\"]/dipstats/.[0]",
"/Sim/players/Player[496 \"Singularity\"]/dipstats/.[1]", "/Sim/players/Player[496 \"Singularity\"]/dipstats/.[1]",
@ -192,24 +196,20 @@
"/Sim/NumFlts: 6 -> 7", "/Sim/NumFlts: 6 -> 7",
"/Sim/RNG/.: '<raw 2503 B 9e6887688129a8f6>' -> '<raw 2503 B ef4d678696ed4c53>'", "/Sim/RNG/.: '<raw 2503 B 9e6887688129a8f6>' -> '<raw 2503 B ef4d678696ed4c53>'",
"/Sim/ShipIDs[]: removed [], added [1728] (15 -> 16 entries)", "/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/.: only-in-A",
"/Sim/SvSctOb/EncObj[5]/Hives/.[0]: only-in-B", "/Sim/SvSctOb/EncObj[5]/Hives/.[0]: only-in-B",
"/Sim/SvSctOb/EncObj[5]/Hives/.[1]: only-in-B", "/Sim/SvSctOb/EncObj[5]/Hives/.[1]: only-in-B",
"/Sim/SvSctOb/EncObj[5]/Hives/.[2]: only-in-B", "/Sim/SvSctOb/EncObj[5]/Hives/.[2]: only-in-B",
"/Sim/SvSctOb/EncObj[6]/did: only-in-B", "/Sim/SvSctOb/EncObj[6]/did: only-in-B",
"/Sim/SvSctOb/EncObj[6]/didc: 0 -> 1", "/Sim/SvSctOb/EncObj[6]/didc: 0 -> 1",
"/Sim/SvSctOb/EncObj[6]/ini: False -> True",
"/Sim/cmbtid: 1 -> 2", "/Sim/cmbtid: 1 -> 2",
"/Sim/fleets/Flt[1744 \"Alpha Fleet\"]: only-in-B", "/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\"]/BnkPr: -787353 -> -789323",
"/Sim/players/Player[16 \"re\"]/Events/EvNxID: 0 -> 2", "/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/.: only-in-A",
"/Sim/players/Player[16 \"re\"]/Events/Events/.[0]: only-in-B", "/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\"]/Events/Events/.[EvTurn=2]: only-in-B",
"/Sim/players/Player[16 \"re\"]/Status: 0 -> 4", "/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\"]/BnkPr: -896580 -> -898837",
"/Sim/players/Player[32 \"Fane Lao\"]/Events/EvNxID: 0 -> 2", "/Sim/players/Player[32 \"Fane Lao\"]/Events/EvNxID: 0 -> 2",
"/Sim/players/Player[32 \"Fane Lao\"]/Events/Events/.: only-in-A", "/Sim/players/Player[32 \"Fane Lao\"]/Events/Events/.: only-in-A",
@ -224,13 +224,17 @@
"/Sim/players/Player[32 \"Fane Lao\"]/Sav: 298113 -> 92651", "/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[0]: 0 -> 1",
"/Sim/players/Player[32 \"Fane Lao\"]/ShipRecs/srb[3]: only-in-B", "/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, "byteMatch": false,
"standalone": { "standalone": {
"schema": "sots-standalone-metric/1", "schema": "sots-standalone-metric/1",
"input": "/home/alex/sots-re/verify/results/saves/turn1-state.sav", "input": "/srv/re-lab/build/sre4/verify/results/saves/turn1-state.sav",
"output": "/tmp/tmpfmmdz_by/post-turn1-state.sav", "output": "/tmp/tmpz2xrayx3/post-turn1-state.sav",
"spine": { "spine": {
"total": 44, "total": 44,
"verified": 0, "verified": 0,
@ -245,15 +249,15 @@
"total": 37, "total": 37,
"verified": 0, "verified": 0,
"implemented": 1, "implemented": 1,
"partial": 2, "partial": 4,
"blocked": 2, "blocked": 1,
"stub": 32, "stub": 31,
"modelled": 5, "modelled": 6,
"committed": 3 "committed": 5
}, },
"run": { "run": {
"leafWrites": 89, "leafWrites": 93,
"blockedLeafWrites": 98, "blockedLeafWrites": 96,
"rngWords": 16, "rngWords": 16,
"rngLoaded": true, "rngLoaded": true,
"rngCommitted": false, "rngCommitted": false,
@ -274,6 +278,16 @@
"blockedWrites": 0, "blockedWrites": 0,
"rng": 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)", "driver": "host turn sequence (outside the two turn drivers)",
"id": "H02", "id": "H02",
@ -289,7 +303,7 @@
"id": "S00", "id": "S00",
"name": "SnapshotPreviousTurn", "name": "SnapshotPreviousTurn",
"status": "partial", "status": "partial",
"ran": 1, "ran": 9,
"writes": 1, "writes": 1,
"blockedWrites": 0, "blockedWrites": 0,
"rng": 0 "rng": 0
@ -928,9 +942,9 @@
"driver": "StrategyServer::OnAllCombatDone_Tail", "driver": "StrategyServer::OnAllCombatDone_Tail",
"id": "T20", "id": "T20",
"name": "ScriptHooksTurnEnd", "name": "ScriptHooksTurnEnd",
"status": "stub", "status": "partial",
"ran": 0, "ran": 1,
"writes": 0, "writes": 1,
"blockedWrites": 0, "blockedWrites": 0,
"rng": 0 "rng": 0
}, },
@ -1038,10 +1052,10 @@
"driver": "StrategyServer::OnAllCombatDone_Tail", "driver": "StrategyServer::OnAllCombatDone_Tail",
"id": "T31", "id": "T31",
"name": "UpdateBankruptcyLimits", "name": "UpdateBankruptcyLimits",
"status": "blocked", "status": "partial",
"ran": 8, "ran": 8,
"writes": 0, "writes": 2,
"blockedWrites": 2, "blockedWrites": 0,
"rng": 0 "rng": 0
}, },
{ {
@ -1114,7 +1128,7 @@
"engineArgs": [], "engineArgs": [],
"exit": 0, "exit": 0,
"stdout": [ "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)", " 603360 inflated bytes, 0 error(s), 0 warning(s)",
" turn 2, frame 2, modCount 12, 8 player(s), 28 system(s), 7 fleet(s)", " turn 2, frame 2, modCount 12, 8 player(s), 28 system(s), 7 fleet(s)",
"roundtrip (untouched): byte-identical (603360 bytes)", "roundtrip (untouched): byte-identical (603360 bytes)",
@ -1123,12 +1137,12 @@
"phases", "phases",
" turn drivers (the milestone's denominator): 16 of 44 modelled, 12 committed", " turn drivers (the milestone's denominator): 16 of 44 modelled, 12 committed",
" verified 0 implemented 4 partial 8 blocked 4 stub 28", " verified 0 implemented 4 partial 8 blocked 4 stub 28",
" post-combat tail (written to the autosave, tracked separately): 5 of 37 modelled", " post-combat tail (written to the autosave, tracked separately): 6 of 37 modelled",
" verified 0 implemented 1 partial 2 blocked 2 stub 32", " verified 0 implemented 1 partial 4 blocked 1 stub 31",
"", "",
"this run", "this run",
" leaves written 45", " leaves written 57",
" leaves NOT written by a blocked phase 74", " leaves NOT written by a blocked phase 72",
" generator words consumed 16 (state loaded, left untouched)", " generator words consumed 16 (state loaded, left untouched)",
" generator words NOT accounted (never netted off the above):", " 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", " - 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 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", " ! 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)", "wrote /tmp/tmpz2xrayx3/post-turn2-state.sav (66882 bytes gzipped, 603360 inflated)",
"metric -> /tmp/tmpfmmdz_by/metric-turn2-state.sav.json" "metric -> /tmp/tmpz2xrayx3/metric-turn2-state.sav.json"
], ],
"coverage": { "coverage": {
"input": true, "input": true,
@ -1148,15 +1162,20 @@
"roots": { "roots": {
"input": "4bed514f853332b9fa35b388c3aa5558", "input": "4bed514f853332b9fa35b388c3aa5558",
"oracle": "e9c161e311f8ef8fad6f1aa1903dcf3f", "oracle": "e9c161e311f8ef8fad6f1aa1903dcf3f",
"ours": "853380c5c55cd7208c60afc2486c7e74" "ours": "abe565b26e6b52ac8ee006e34fc1a984"
}, },
"baselineDiverging": 108, "baselineDiverging": 108,
"divergingAfterTurn": 69, "divergingAfterTurn": 63,
"closed": 39, "closed": 45,
"regressed": 0, "regressed": 0,
"closedPaths": [ "closedPaths": [
"/Sim/Frame", "/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[16 \"re\"]/Sav",
"/Sim/players/Player[32 \"Fane Lao\"]/BnkEl",
"/Sim/players/Player[496 \"Singularity\"]/dipstats/.[1]/lastally", "/Sim/players/Player[496 \"Singularity\"]/dipstats/.[1]/lastally",
"/Sim/players/Player[512 \"Singularity\"]/dipstats/.[1]/lastally", "/Sim/players/Player[512 \"Singularity\"]/dipstats/.[1]/lastally",
"/Sim/players/Player[528 \"Alien Menace\"]/dipstats/.[1]/lastnap", "/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/.[1]/lastnap",
"/Sim/players/Player[560 \"Von Neumann\"]/dipstats/.[2]/lastnap", "/Sim/players/Player[560 \"Von Neumann\"]/dipstats/.[2]/lastnap",
"/Sim/players/Player[560 \"Von Neumann\"]/dipstats/.[3]/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\"]/Sav",
"/Sim/players/Player[576 \"Independent Colony\"]/dipstats/.[1]/lastnap", "/Sim/players/Player[576 \"Independent Colony\"]/dipstats/.[1]/lastnap",
"/Sim/players/Player[576 \"Independent Colony\"]/dipstats/.[2]/lastnap", "/Sim/players/Player[576 \"Independent Colony\"]/dipstats/.[2]/lastnap",
@ -1203,26 +1223,21 @@
"/Sim/NumFlts: 7 -> 8", "/Sim/NumFlts: 7 -> 8",
"/Sim/RNG/.: '<raw 2503 B ef4d678696ed4c53>' -> '<raw 2503 B a80459bfd63a006b>'", "/Sim/RNG/.: '<raw 2503 B ef4d678696ed4c53>' -> '<raw 2503 B a80459bfd63a006b>'",
"/Sim/ShipIDs[]: removed [], added [1760] (16 -> 17 entries)", "/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/cmbtid: 2 -> 3",
"/Sim/fleets/Flt[1744 \"Alpha Fleet\"]: only-in-A", "/Sim/fleets/Flt[1744 \"Alpha Fleet\"]: only-in-A",
"/Sim/fleets/Flt[1776 \"Gamma Fleet\"]: only-in-B", "/Sim/fleets/Flt[1776 \"Gamma Fleet\"]: only-in-B",
"/Sim/fleets/Flt[34 \"Beta 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\"]/BnkPr: -789323 -> -791290",
"/Sim/players/Player[16 \"re\"]/Events/EvNxID: 2 -> 3", "/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/.[0]: 1 -> 2",
"/Sim/players/Player[16 \"re\"]/Events/Events/.[EvTurn=3]: only-in-B", "/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\"]/BnkPr: -898837 -> -901002",
"/Sim/players/Player[32 \"Fane Lao\"]/Events/EvNxID: 2 -> 4", "/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/.[0]: 1 -> 2",
"/Sim/players/Player[32 \"Fane Lao\"]/Events/Events/.[EvTurn=3]: only-in-B", "/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\"]/FNG/FNGNum: 1 -> 3",
"/Sim/players/Player[32 \"Fane Lao\"]/Maint: 500 -> 1000", "/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\"]/Sav: 142379 -> 135486",
"/Sim/players/Player[32 \"Fane Lao\"]/ShipRecs/srb[0]: 1 -> 2", "/Sim/players/Player[32 \"Fane Lao\"]/ShipRecs/srb[0]: 1 -> 2",
"/Sim/players/Player[32 \"Fane Lao\"]/ShipRecs/srb[3]: 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\"]/TechTree/Tbd[106]: 1 -> 2",
"/Sim/players/Player[32 \"Fane Lao\"]/lboid: 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[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\"]/PvPop2/PopG/PopC: 500000000 -> 520000000",
"/Sim/systems/Sys[112 \"Gamma Cephei\"]/RepCur: 336360.0 -> 336840.0 [15360 ulp]", "/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\"]/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, "byteMatch": false,
"standalone": { "standalone": {
"schema": "sots-standalone-metric/1", "schema": "sots-standalone-metric/1",
"input": "/home/alex/sots-re/verify/results/saves/turn2-state.sav", "input": "/srv/re-lab/build/sre4/verify/results/saves/turn2-state.sav",
"output": "/tmp/tmpfmmdz_by/post-turn2-state.sav", "output": "/tmp/tmpz2xrayx3/post-turn2-state.sav",
"spine": { "spine": {
"total": 44, "total": 44,
"verified": 0, "verified": 0,
@ -1257,15 +1277,15 @@
"total": 37, "total": 37,
"verified": 0, "verified": 0,
"implemented": 1, "implemented": 1,
"partial": 2, "partial": 4,
"blocked": 2, "blocked": 1,
"stub": 32, "stub": 31,
"modelled": 5, "modelled": 6,
"committed": 3 "committed": 5
}, },
"run": { "run": {
"leafWrites": 45, "leafWrites": 57,
"blockedLeafWrites": 74, "blockedLeafWrites": 72,
"rngWords": 16, "rngWords": 16,
"rngLoaded": true, "rngLoaded": true,
"rngCommitted": false, "rngCommitted": false,
@ -1286,6 +1306,16 @@
"blockedWrites": 0, "blockedWrites": 0,
"rng": 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)", "driver": "host turn sequence (outside the two turn drivers)",
"id": "H02", "id": "H02",
@ -1301,8 +1331,8 @@
"id": "S00", "id": "S00",
"name": "SnapshotPreviousTurn", "name": "SnapshotPreviousTurn",
"status": "partial", "status": "partial",
"ran": 1, "ran": 9,
"writes": 1, "writes": 4,
"blockedWrites": 0, "blockedWrites": 0,
"rng": 0 "rng": 0
}, },
@ -1940,8 +1970,8 @@
"driver": "StrategyServer::OnAllCombatDone_Tail", "driver": "StrategyServer::OnAllCombatDone_Tail",
"id": "T20", "id": "T20",
"name": "ScriptHooksTurnEnd", "name": "ScriptHooksTurnEnd",
"status": "stub", "status": "partial",
"ran": 0, "ran": 1,
"writes": 0, "writes": 0,
"blockedWrites": 0, "blockedWrites": 0,
"rng": 0 "rng": 0
@ -2050,10 +2080,10 @@
"driver": "StrategyServer::OnAllCombatDone_Tail", "driver": "StrategyServer::OnAllCombatDone_Tail",
"id": "T31", "id": "T31",
"name": "UpdateBankruptcyLimits", "name": "UpdateBankruptcyLimits",
"status": "blocked", "status": "partial",
"ran": 8, "ran": 8,
"writes": 0, "writes": 2,
"blockedWrites": 2, "blockedWrites": 0,
"rng": 0 "rng": 0
}, },
{ {