From 87a39b6731a9fea089480c1bf8b171bc630bb546 Mon Sep 17 00:00:00 2001 From: alex Date: Mon, 7 Sep 2026 22:24:44 -0400 Subject: [PATCH] plan the behavioral slice: B1 ComputeBudget, B2 OnTechResearched, B3 ProcessResearch (RNG); gate on RNG signatures --- campaign/DASHBOARD.md | 22 +++++++++++----------- campaign/backlog.md | 10 ++++++++++ campaign/board.md | 4 ++++ 3 files changed, 25 insertions(+), 11 deletions(-) diff --git a/campaign/DASHBOARD.md b/campaign/DASHBOARD.md index 37d9d48..1ff416c 100644 --- a/campaign/DASHBOARD.md +++ b/campaign/DASHBOARD.md @@ -1,19 +1,19 @@ # SotS RE campaign — coverage dashboard -Generated 2026-09-08 02:18 UTC · `sots-re` @ 9e74691,2026-09-07 · `sots-engine` @ 8b231c0,2026-09-07 (39 commits) · regenerate with `tools/dashboard.py` +Generated 2026-09-08 02:24 UTC · `sots-re` @ 8116f9e,2026-09-07 · `sots-engine` @ 8b231c0,2026-09-07 (39 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) -48 targets · mapped-or-better **40/48** `[████████░░] 83%` · verified **23/48** `[█████░░░░░] 48%` +52 targets · mapped-or-better **40/52** `[████████░░] 77%` · verified **23/52** `[████░░░░░░] 44%` | Status | Count | % | |---|---:|---:| -| verified | 23 | 48% | -| mapped | 17 | 35% | +| verified | 23 | 44% | +| mapped | 17 | 33% | | in-progress | 2 | 4% | -| backlog | 5 | 10% | +| backlog | 9 | 17% | | blocked | 1 | 2% | | Type | verified | mapped | in-progress | backlog | blocked | total | @@ -23,8 +23,8 @@ Generated 2026-09-08 02:18 UTC · `sots-re` @ 9e74691,2026-09-07 · `sots-engine | subsystems | 2 | 6 | 1 | 3 | 1 | 13 | | engine | 8 | 1 | 0 | 0 | 0 | 9 | | verify | 4 | 2 | 0 | 0 | 0 | 6 | -| phase2 | 2 | 0 | 1 | 2 | 0 | 5 | -| meta | 2 | 4 | 0 | 0 | 0 | 6 | +| phase2 | 2 | 0 | 1 | 5 | 0 | 8 | +| meta | 2 | 4 | 0 | 1 | 0 | 7 | ## 2. Binary understanding @@ -81,7 +81,7 @@ Board `engine:` rows: verified **8**, mapped 1, in flight 0 (of 9) — verified ## 7. Open questions -Open **24** · resolved/parked 9 · backlog items: Now 4, Next 3, Later 2, Breadth queue 7, Parked 1, From the RE how-to 4 +Open **24** · resolved/parked 9 · backlog items: Now 4, Next 3, Later 2, Breadth queue 7, Parked 1, From the RE how-to 4, Behavioral slice 4 Most recent open: @@ -93,10 +93,10 @@ Most recent open: ## 8. Delta since previous dashboard -- verified targets: 22 → 23 (+1) · mapped-or-better: 39 → 40 (+1) -- engine LOC: 14,726 → 15,809 (+1,083) · test files: 81 → 84 (+3) · checks: 2,173 → 2,262 (+89) +- verified targets: 23 → 23 (+0) · mapped-or-better: 40 → 40 (+0) +- engine LOC: 15,809 → 15,809 (+0) · test files: 84 → 84 (+0) · checks: 2,262 → 2,262 (+0) - addresses verified: 123 → 123 (+0) · recovered layouts: 21 → 21 (+0) · open questions: 24 → 24 (+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/backlog.md b/campaign/backlog.md index d67c580..120a2f2 100644 --- a/campaign/backlog.md +++ b/campaign/backlog.md @@ -39,3 +39,13 @@ most other work. Groomed by **re-quartermaster**. - **Automated class recovery**: run Ghidra `RecoverClassesFromRTTIScript` (with Decompiler Parameter ID) and/or CMU OOAnalyzer on the 1,924 RTTI classes to build class structs + method-to-class assignment; import VS2010 FID databases for CRT/STL triage. (Ghidra lane, after tech-effects) - **apitrace whole-run D3D9 capture** of the original as the golden trace for the eventual `Mars::DrawDevice` reimpl (RenderDoc can't capture D3D9); **WinDbg TTD** (x86 supported) for data-flow questions like 'who writes ServerPlayer+0x164'. (VM lane) - **Pin game/sim low-confidence formulas** from `findings/subsystems/formula-gaps.md` (bankruptcy limits/stamping, linear hazard curve, money tail, pbon, slider request, [6] net, no speed clamp, decay incl. current) and wire the code-defined tech effects (`findings/subsystems/tech-effects.md`) into game/sim + game/data. (engine lane, next slot) + +## Behavioral slice (the pivot from data to logic — user directive 2026-09-08) +Data loaders are done/underway; `game/sim` has never been compared against the original. Verify behavior +function-by-function on the End-Turn workload (`ref-turn2.sav`, deterministic, 8 players x 28 systems): +1. **B1 ComputeBudget** (pure, no RNG) — the cleanest first brick. +2. **B2 OnTechResearched** (tech effects) — needs sim-pin's effects layer. +3. **B3 ProcessResearch** (RNG) — snapshot MT19937 pre-call, run ours from a copy; validates RNG+odds+Zuul at once. +4. Then, once signatures are verified: ServerSystem::ProcessTurn (colony growth), MoveFleet, and finally + StrategyServer::ProcessTurn as a whole-turn compare. +Gate: RNG_* and StrategyServer::ProcessTurn signatures are `unverified` — Ghidra pass first. diff --git a/campaign/board.md b/campaign/board.md index de4839c..612e863 100644 --- a/campaign/board.md +++ b/campaign/board.md @@ -53,3 +53,7 @@ Status flow: `backlog → in-progress → mapped → verified` (or `blocked`). | tech effects (code-defined) | subsystem | mapped | high | 90% | 2026-09-07 | findings/subsystems/tech-effects.md: g_TechIdNames 196 @0x009ff9e4 (TechId=10000+i), effects in ServerPlayer::OnTechResearched 0x00891790; SpeciesDef table 0x00b10a00; 36 strategic / ~45 gates / ~115 none. Feeds game/sim + game/data | | strategic formula gaps | subsystem | verified | high | 100% | 2026-09-07 | findings/subsystems/formula-gaps.md: all 8 answered with code (bankruptcy 3.3 on BnkPr, linear hazard, money tail, pbon, slider, [6] net, no speed clamp, decay hits current) | | engine: game/design | engine | verified | high | 100% | 2026-09-07 | merged; see ShipDesignDef row | +| P2-B1 ComputeBudget (behavioral) | phase2 | backlog | — | 0% | 2026-09-08 | FIRST BEHAVIORAL BRICK: hook ServerPlayer::ComputeBudget 0x00863030 (verified thiscall, pure, 8 calls/turn) vs game/sim/economy.cpp; workload = ref-turn2.sav + End Turn | +| P2-B2 OnTechResearched (behavioral) | phase2 | backlog | — | 0% | 2026-09-08 | hook ServerPlayer::OnTechResearched 0x00891790 (verified) vs the tech-effects layer from sim-pin | +| P2-B3 ProcessResearch (behavioral, RNG) | phase2 | backlog | — | 0% | 2026-09-08 | hook TechTree::ProcessResearch 0x005876c0 (verified); snapshot MT19937 state pre-call and drive ours from a copy -> validates RNG + odds + Zuul double roll together | +| RNG signatures (Ghidra) | meta | backlog | — | 0% | 2026-09-08 | RNG_Seed/Twist/NextFloat/NextInt still 'unverified' in the contract; verify before hooking (M0 lesson). Also StrategyServer::ProcessTurn/BeginProcessTurn signatures for the later whole-turn compare |