diff --git a/campaign/DASHBOARD.md b/campaign/DASHBOARD.md index dfc4cb6..d9df38f 100644 --- a/campaign/DASHBOARD.md +++ b/campaign/DASHBOARD.md @@ -1,37 +1,37 @@ # SotS RE campaign — coverage dashboard -Generated 2026-09-08 15:00 UTC · `sots-re` @ a77b1c3,2026-09-08 · `sots-engine` @ b48d860,2026-09-08 (126 commits) · regenerate with `tools/dashboard.py` +Generated 2026-09-08 16:04 UTC · `sots-re` @ ef458bb,2026-09-08 · `sots-engine` @ 6f777c2,2026-09-08 (134 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) -183 targets · mapped-or-better **155/183** `[████████░░] 85%` · verified **127/183** `[███████░░░] 69%` +195 targets · mapped-or-better **166/195** `[█████████░] 85%` · verified **136/195** `[███████░░░] 70%` | Status | Count | % | |---|---:|---:| -| verified | 127 | 69% | -| mapped | 28 | 15% | +| verified | 136 | 70% | +| mapped | 30 | 15% | | in-progress | 2 | 1% | -| backlog | 24 | 13% | +| backlog | 25 | 13% | | blocked | 2 | 1% | | Type | verified | mapped | in-progress | backlog | blocked | total | |---|---:|---:|---:|---:|---:|---:| -| objects | 25 | 6 | 0 | 2 | 1 | 34 | -| control-flow | 7 | 2 | 0 | 1 | 0 | 10 | +| objects | 26 | 6 | 0 | 2 | 1 | 35 | +| control-flow | 10 | 2 | 0 | 1 | 0 | 13 | | subsystems | 3 | 7 | 1 | 3 | 1 | 15 | | engine | 19 | 0 | 0 | 0 | 0 | 19 | -| verify | 32 | 5 | 0 | 14 | 0 | 51 | +| verify | 35 | 6 | 0 | 15 | 0 | 56 | | phase2 | 10 | 3 | 1 | 2 | 0 | 16 | -| meta | 28 | 5 | 0 | 1 | 0 | 34 | +| meta | 30 | 6 | 0 | 1 | 0 | 37 | | other | 3 | 0 | 0 | 1 | 0 | 4 | ## 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): **805**, verified **781** `[██████████] 97%` +- Functions: **41,411** (parsed from `01-fingerprint.md`); named/annotated in the **address contract** (`ghidra/addresses.json`, not Ghidra's full rename count): **875**, verified **838** `[██████████] 96%` ## 3. Data layer @@ -45,7 +45,8 @@ Generated 2026-09-08 15:00 UTC · `sots-re` @ a77b1c3,2026-09-08 · `sots-engine | Module | LOC | Test files | Checks | Wired | Doc | |---|---:|---:|---:|---|---| -| `app` | 1,192 | 3 | 34 | yes | S-standalone.md | +| `app` | 1,614 | 5 | 69 | yes | S-standalone.md | +| `game/combat` | 582 | 2 | 34 | yes | mars-parse.md | | `game/config` | 558 | 4 | 131 | yes | M1.md | | `game/data` | 2,053 | 12 | 462 | yes | game-data.md | | `game/design` | 1,024 | 17 | 250 | yes | game-design.md | @@ -60,7 +61,7 @@ Generated 2026-09-08 15:00 UTC · `sots-re` @ a77b1c3,2026-09-08 · `sots-engine | `shim` | 11,564 | 0 | 0 | direct (WIN32) | M0.md | | `shim/hooks` | 8,548 | 0 | 0 | direct (WIN32) | M0.md | | `shim/trace` | 2,258 | 9 | 273 | direct (WIN32) | shim-trace.md | -| **total** | **40,026** | **97** | **3204** | | | +| **total** | **41,030** | **101** | **3273** | | | Board `engine:` rows: verified **19**, mapped 0, in flight 0 (of 19) — verified & merged `[██████████] 100%` @@ -76,12 +77,12 @@ Board `engine:` rows: verified **19**, mapped 0, in flight 0 (of 19) — verifie ## 6. Standalone (`src/app`) — distance to the byte-match -Turn-driver phases: **14/44** modelled (7 committed) `[███░░░░░░░] 32%` +Turn-driver phases: **14/44** modelled (8 committed) `[███░░░░░░░] 32%` | | verified | implemented | partial | blocked | stub | |---|---:|---:|---:|---:|---:| -| turn drivers (44) | 0 | 2 | 5 | 7 | 30 | -| post-combat tail (37) | 0 | 1 | 0 | 1 | 35 | +| turn drivers (44) | 0 | 2 | 6 | 6 | 30 | +| post-combat tail (37) | 0 | 1 | 0 | 2 | 34 | Reference pair `turn1-state.sav` → `turn2-state.sav`, leaves localised by `state_checksum.py` (coverage proved by re-serialisation): @@ -102,7 +103,7 @@ Where the remaining divergence lives: | `/Sim/ModCount` | 1 | | `/Sim/NMnx` | 1 | -Generator: 0 word(s) modelled per turn; unattributed per turn: 18-20 (lane Z, in flight). A byte-match is impossible until that closes — the generator state is saved state. +Generator: 16 word(s) modelled per turn; unattributed per turn: 18-20 (lane Z, in flight). A byte-match is impossible until that closes — the generator state is saved state. Detail: `verify/results/standalone/report.txt`. @@ -129,11 +130,11 @@ Most recent open: ## 9. Delta since previous dashboard -- verified targets: 122 → 127 (+5) · mapped-or-better: 150 → 155 (+5) -- engine LOC: 36,774 → 40,026 (+3,252) · test files: 97 → 97 (+0) · checks: 3,204 → 3,204 (+0) -- addresses verified: 777 → 781 (+4) · recovered layouts: 384 → 384 (+0) · open questions: 26 → 26 (+0) +- verified targets: 127 → 136 (+9) · mapped-or-better: 155 → 166 (+11) +- engine LOC: 40,026 → 41,030 (+1,004) · test files: 97 → 101 (+4) · checks: 3,204 → 3,273 (+69) +- addresses verified: 781 → 838 (+57) · recovered layouts: 384 → 384 (+0) · open questions: 26 → 26 (+0) - standalone leaves closed: 5 → 5 (+0) · leaves still diverging: 204 → 204 (+0) --- 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 - +