diff --git a/campaign/DASHBOARD.md b/campaign/DASHBOARD.md index 6c700fa..cd5bcea 100644 --- a/campaign/DASHBOARD.md +++ b/campaign/DASHBOARD.md @@ -1,17 +1,17 @@ # SotS RE campaign — coverage dashboard -Generated 2026-09-08 06:13 UTC · `sots-re` @ 3b5eca2,2026-09-08 · `sots-engine` @ 7584bad,2026-09-08 (68 commits) · regenerate with `tools/dashboard.py` +Generated 2026-09-08 06:52 UTC · `sots-re` @ bd9b8f2,2026-09-08 · `sots-engine` @ 82ef52f,2026-09-08 (71 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) -65 targets · mapped-or-better **50/65** `[████████░░] 77%` · verified **33/65** `[█████░░░░░] 51%` +66 targets · mapped-or-better **51/66** `[████████░░] 77%` · verified **33/66** `[█████░░░░░] 50%` | Status | Count | % | |---|---:|---:| -| verified | 33 | 51% | -| mapped | 17 | 26% | +| verified | 33 | 50% | +| mapped | 18 | 27% | | in-progress | 3 | 5% | | backlog | 11 | 17% | | blocked | 1 | 2% | @@ -20,9 +20,9 @@ Generated 2026-09-08 06:13 UTC · `sots-re` @ 3b5eca2,2026-09-08 · `sots-engine |---|---:|---:|---:|---:|---:|---:| | objects | 5 | 2 | 0 | 0 | 0 | 7 | | control-flow | 0 | 2 | 0 | 0 | 0 | 2 | -| subsystems | 2 | 6 | 2 | 3 | 1 | 14 | +| subsystems | 2 | 7 | 1 | 3 | 1 | 14 | | engine | 10 | 0 | 0 | 0 | 0 | 10 | -| verify | 5 | 2 | 1 | 5 | 0 | 13 | +| verify | 5 | 2 | 2 | 5 | 0 | 14 | | phase2 | 6 | 1 | 0 | 2 | 0 | 9 | | meta | 5 | 4 | 0 | 1 | 0 | 10 | @@ -30,7 +30,7 @@ Generated 2026-09-08 06:13 UTC · `sots-re` @ 3b5eca2,2026-09-08 · `sots-engine - RTTI type descriptors: **1,924** (`Game::` 1,404, `Mars::` 194; serializable types 179) - Classes with recovered member layouts: **21** / 179 serializable types `[█░░░░░░░░░] 12%` — heuristic: distinct `Game::X`/`Mars::X` in `##`–`####` headings of `struct-recovery.md` + `schema-gaps-resolved.md` -- Functions: **41,411** (parsed from `01-fingerprint.md`); named/annotated in the **address contract** (`ghidra/addresses.json`, not Ghidra's full rename count): **324**, verified **317** `[██████████] 98%` +- Functions: **41,411** (parsed from `01-fingerprint.md`); named/annotated in the **address contract** (`ghidra/addresses.json`, not Ghidra's full rename count): **380**, verified **373** `[██████████] 98%` ## 3. Data layer @@ -48,6 +48,7 @@ Generated 2026-09-08 06:13 UTC · `sots-re` @ 3b5eca2,2026-09-08 · `sots-engine | `game/data` | 2,053 | 12 | 462 | yes | game-data.md | | `game/design` | 1,024 | 17 | 250 | yes | game-design.md | | `game/effects` | 973 | 3 | 231 | yes | game-effects.md | +| `game/events` | 451 | 3 | 112 | yes | E-events.md | | `game/sim` | 2,637 | 9 | 599 | yes | game-sim.md | | `mars/parse` | 875 | 12 | 277 | yes | mars-parse.md | | `mars/rng` | 206 | 0 | 0 | yes | mars-rng.md | @@ -57,7 +58,7 @@ Generated 2026-09-08 06:13 UTC · `sots-re` @ 3b5eca2,2026-09-08 · `sots-engine | `shim` | 7,620 | 0 | 0 | direct (WIN32) | M0.md | | `shim/hooks` | 5,050 | 0 | 0 | direct (WIN32) | M0.md | | `shim/trace` | 2,258 | 9 | 273 | direct (WIN32) | shim-trace.md | -| **total** | **28,644** | **89** | **2830** | | | +| **total** | **29,095** | **92** | **2942** | | | Board `engine:` rows: verified **10**, mapped 0, in flight 0 (of 10) — verified & merged `[██████████] 100%` @@ -94,10 +95,10 @@ Most recent open: ## 8. Delta since previous dashboard -- verified targets: 33 → 33 (+0) · mapped-or-better: 50 → 50 (+0) -- engine LOC: 28,644 → 28,644 (+0) · test files: 89 → 89 (+0) · checks: 2,830 → 2,830 (+0) -- addresses verified: 317 → 317 (+0) · recovered layouts: 21 → 21 (+0) · open questions: 27 → 27 (+0) +- verified targets: 33 → 33 (+0) · mapped-or-better: 50 → 51 (+1) +- engine LOC: 28,644 → 29,095 (+451) · test files: 89 → 92 (+3) · checks: 2,830 → 2,942 (+112) +- addresses verified: 317 → 373 (+56) · recovered layouts: 21 → 21 (+0) · open questions: 27 → 27 (+0) --- warnings: 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 011cacb..4bb8359 100644 --- a/campaign/board.md +++ b/campaign/board.md @@ -70,3 +70,4 @@ Status flow: `backlog → in-progress → mapped → verified` (or `blocked`). | B1 replace double-run | verify | backlog | — | 0% | 2026-09-08 | ComputeBudget replace mode runs the original a second time to harvest budget slots; ComputeOutput repairs ships in orbit as a side effect, so this is a real per-turn double effect on objects no region covers. Needs a design fix (harvest without re-running, or declare+revert) | | ReVa MCP link drop (workaround) | meta | verified | high | 100% | 2026-09-08 | The ReVa MCP client link dropped mid-session while the CT111 server stayed healthy (systemd active, :8080 listening, valid key -> 200). `tools/reva_call.py ''` calls the same server over plain HTTP (initialize -> notifications/initialized -> tools/call; replies are SSE with a leading `id:` line, initialize is plain JSON). Key is NEVER stored in the repo: $REVA_KEY, else ~/.claude.json, else ssh to the CT properties file. Use this whenever mcp__plugin_ReVa_ReVa__* is unavailable | | event posting API | subsystem | mapped | high | 90% | 2026-09-08 | RECOVERED (lane E, `findings/subsystems/events.md`). Container: `EventStorage` embedded at `ServerPlayer+0x29c` (0x1c), `EvNxID` at +0x14 = player+0x2b0 — exactly the guard's byte run. Nested `vector}>`, record 0x74 B, tags `EvEID EvDsc EvMsg EvImg EvLoc EvPos EvAct EvCID`; layout confirmed field-by-field against turn3-state.sav, which CONTAINS the overbudget record. Entry point `int __thiscall EventStorage::PostEvent(this, string BYVAL, string BYVAL, obj*, Vector3*, turn, const char* img, int act)` 0x008862b0 RET 0x4c — **161 call sites in 113 functions, the whole sim's event API**. B3 defect fully explained: 0x00587b97, in the completion-roll-FAILED branch under `!wasDone && nowDone && owner`. 3 note corrections (EvPos is FLT_MAX not inf; the save array is turn-bucketed not flat; TECHS_UNLOCKED has no parent clause). 56 entries in addresses.json; 11 prototypes + 13 labels + 12 comments + 2 structs written back to Ghidra. Engine: `sots-engine` branch `wip/events` a7348be, `src/game/events` + 112 checks, ctest 32/32. NOT YET WIRED INTO A HOOK — see `docs/E-events.md` for the proposed region/Coverage change | +| state-checksum replay harness | verify | in-progress | — | 0% | 2026-09-08 | Lane C: whole-state per-turn checksum as the COMPLEMENT to per-function compares (no region-declaration mistake can hide from it). Diagnostic tree that localises WHICH object moved, explicit float-parity policy (float32 + fpu_cw 0x127f + fistp ties-to-even; matters for the future x64/SSE port). Replay loop designed but unrun - lane R holds VM140 |