From 7dcc66bc66ffdf71dfa490983595d2f76d8b01c3 Mon Sep 17 00:00:00 2001 From: alex Date: Wed, 9 Sep 2026 10:05:48 -0400 Subject: [PATCH] lane CR: our code ran instead of ProcessResearch on a real completion; the oracle missed by 16 leaves, all of them OnTechResearched's Replace mode was tried live on a turn that actually completes a tech, with a two-process hooks=off oracle established first on that exact (save, procedure, route). Verdict: game/sim/research stays compared. What displaced: all 13 tech-tree leaves the turn moves -- 2 from the pass itself and 11 from the SetResearched cascade -- produced by our code in live game memory, with the original's ProcessResearch never executing. What did not: 16 leaves, every one written by ServerPlayer::OnTechResearched. Five player tech-effect fields (OutMod, ConMod[0..2], ResTNm), one ObservedTech element, two event records plus EvNxID, and five derived leaves behind them. Also: ref-turn2 + one End Turn does NOT complete a tech, so every research oracle before this one was taken on a quiet turn; and a config that names all 27 registered hooks off and passes check_shim_configs.py still installs six detours, because the M0 stub and the FPU module's four sampling detours have no hook. key. --- findings/subsystems/research-replace.md | 302 ++++ verify/results/compare/cr-compare.json | 1336 +++++++++++++++++ verify/results/compare/cr-compare.md | 28 + verify/results/compare/cr-replace0.json | 1329 ++++++++++++++++ verify/results/compare/cr-replace0.md | 27 + verify/results/compare/cr-replace1.json | 1331 ++++++++++++++++ verify/results/compare/cr-replace1.md | 28 + verify/results/saves/certified-pairs.md | 17 + .../results/saves/cr/cr-oracle-autosave.sav | Bin 0 -> 67811 bytes verify/results/saves/cr/cr-oracle-endturn.sav | Bin 0 -> 67212 bytes .../results/saves/cr/cr-replace0-autosave.sav | Bin 0 -> 67511 bytes .../results/saves/cr/cr-replace1-autosave.sav | Bin 0 -> 67537 bytes verify/results/saves/determinism-hashes.txt | 8 + verify/results/shim/cr/cr-N.log | 118 ++ verify/results/shim/cr/cr-R0.log | 118 ++ verify/results/shim/cr/cr-R1.log | 118 ++ verify/traces/cr-N.jsonl.gz | Bin 0 -> 55936 bytes verify/traces/cr-R0.jsonl.gz | Bin 0 -> 38287 bytes verify/traces/cr-R1.jsonl.gz | Bin 0 -> 38300 bytes 19 files changed, 4760 insertions(+) create mode 100644 verify/results/compare/cr-compare.json create mode 100644 verify/results/compare/cr-compare.md create mode 100644 verify/results/compare/cr-replace0.json create mode 100644 verify/results/compare/cr-replace0.md create mode 100644 verify/results/compare/cr-replace1.json create mode 100644 verify/results/compare/cr-replace1.md create mode 100644 verify/results/saves/cr/cr-oracle-autosave.sav create mode 100644 verify/results/saves/cr/cr-oracle-endturn.sav create mode 100644 verify/results/saves/cr/cr-replace0-autosave.sav create mode 100644 verify/results/saves/cr/cr-replace1-autosave.sav create mode 100644 verify/results/shim/cr/cr-N.log create mode 100644 verify/results/shim/cr/cr-R0.log create mode 100644 verify/results/shim/cr/cr-R1.log create mode 100644 verify/traces/cr-N.jsonl.gz create mode 100644 verify/traces/cr-R0.jsonl.gz create mode 100644 verify/traces/cr-R1.jsonl.gz diff --git a/findings/subsystems/research-replace.md b/findings/subsystems/research-replace.md index 8c06c5b..0aab482 100644 --- a/findings/subsystems/research-replace.md +++ b/findings/subsystems/research-replace.md @@ -249,3 +249,305 @@ OK; `tools/check_shim_configs.py` OK with 27 registered hooks and all four CR co ## 4. Results *(added after the runs; nothing above this line is edited)* + +### 4.0 The five runs, in order + +All five on **VM145**, held by this lane, each a **fresh process**, `SavedGames` reset to exactly +`turn3-state.sav` before every launch, `C:\SOTS\shimdist-cr\binkw32.dll` +(25,274,723 B, sha256 `d2ad56b32c1b5f6b…`, `BUILD_ID cr-618ccb1-20260909T131556Z`, exports 66/66 +identical to the real `binkw32.dll`), one config per run and nothing else changed. Every screen — +main menu, Load-Game chooser, the one-row file list, the **lobby**, the loaded map at "Turn 3", the +post-turn map at "Turn 4" — was verified from a live `qm monitor` screendump before the next click. +No run was driven by sleeping. + +| run | config | mode | `research.replace_cascade` | `(Autosave EndTurn).sav` | `(Autosave).sav` | +|---|---|---|---|---|---| +| **C1** | `croff` | `hooks=off` | – | 67,212 `e00eed0c…` | 67,811 `79df5047…` | +| **C2** | `croff` | `hooks=off` | – | 67,212 **`e00eed0c…`** | 67,811 **`79df5047…`** | +| **N** | `crcompare` | compare | off | 67,212 **`e00eed0c…`** | 67,811 **`79df5047…`** | +| **R0** | `crreplace0` | **replace** | off | 67,212 `e00eed0c…` | 67,511 **`6b51db99…`** | +| **R1** | `crreplace1` | **replace** | **on** | 67,212 `e00eed0c…` | 67,537 **`8a4309ee…`** | + +`(Autosave EndTurn).sav` is the *pre*-turn resave and is identical in all five runs, as it must be — +nothing has run yet when it is written. The verdict is carried entirely by `(Autosave).sav`. + +### 4.1 P0 held: the oracle + +**C1 and C2 agree byte-for-byte in two fresh processes.** The pair, in the standing +`certified-pairs.md` format: + +| input | procedure | route | `(Autosave EndTurn)` | `(Autosave)` | processes | evidence | +|---|---|---|---|---|---:|---| +| `turn3-state.sav` `978041ac…` | one End Turn | **load** | `e00eed0c…` | `79df5047…` | **3** | lane CR ×2 `hooks=off`, ×1 compare-instrumented | + +**Masks that must be on the line.** Measured, not assumed — +`state_checksum.py turn3-state.sav <(Autosave EndTurn)>` gives **exactly 5 leaves**: +`/Summary/Checksum` and `Player.Status 4 → 0` on each of the four live players (16 `re`, +32 `Fane Lao`, 496 and 512 `Singularity`). **There is no `/CD[1]/NPrvVa` term on this state** — +`CD[1]`'s diplomacy block is early-game and the leaf does not move — so the `--mask resave` rule +holds here in the form the docs originally stated, and the lane BQ exception does not apply. + +**Exposure facts next to the hashes** (certified-pairs standing rule 4): §1.3's table — no player +with an AI client enters the turn with `ResTNm == ''`; `NumDes` does not move; the two ships that +complete join existing fleets; the four factions at 528–576 carry the empty-`ResTNm` signature +inertly (`Status 0`, no client). The turn does create fleets (`Flt[50]`, `Flt[1808]`) and retire one +(`Flt[1776]`) — that is a fleet-assignment shape, and it agreed anyway. **Which is the point of +rule 26(c)'s retraction: the screen said "likely fine" and only the two-process control decided it.** + +### 4.2 P3 held: the instrument is neutral, and it counts the completion itself + +Run **N** reproduced the control's two hashes exactly, so rule 19 is satisfied on *this* save and +*this* route and everything below is read from runs that passed their own check. +`tracecmp verify/traces/cr-N.jsonl.gz`: **3 calls, 3 compared, 0 diverged, exit 0**, coverage verdict +`partial`, 8 unmodelled notes — and the undeclared-write set is **exactly the six spans predicted**: + +``` +player+0x10c:3 player+0x110:3 player+0x114:3 player+0x124:3 player+0x294:4 tree_header+0x20:1 +``` + +The hook's own per-call line, which is the instrument saying a completion fired rather than the save +being asked to imply it: + +``` +research: mode=compare steps=1 completions=1 overbudget=1166 cascade_possible=1 ok=1 + cascade_completions=1 unlocked=3 otch_appends=1 roll_draws=0 failures=0 depth=0 +research: mode=compare steps=1 completions=0 … (×2, all zero) +``` + +**A correction to the campaign's read of the detour count, and it goes the other way from the +brief's warning.** My config names all **27** registered template hooks and +`check_shim_configs.py` passes it as `# exhaustive` — and the shim still installed **six** detours, +not one: + +| detour | source | named by a `hook.` key? | +|---|---|---| +| `Mars::Application::Initialize` | the M0 asm stub, installed unconditionally whenever `hooks != off` | **no** | +| `Game::TechTree::ProcessResearch` | the one template hook | yes | +| `StrategyClient::EndTurn`, `StrategyServer::BeginProcessTurn`, `StrategyServer::ProcessTurn`, `DemoApp::OnTick` | the **FPU-force module**, which installs four *sampling* detours by default (`fpu: module init … force=off value=0x0000 sample_ticks=on`, `sample_turn=on`) | **no** | + +`Shim::SelfTest::Fill` additionally emits one `trace` record at startup; it is an in-shim self-test, +not a detour on the game. So **`# exhaustive` is exhaustive over the template-hook set only**, and +`tools/check_shim_configs.py` cannot see the other five. It was the *neutrality check* (N identical +to C1/C2), not the config check, that made this run safe — which is worth saying plainly, because a +lane reading "exhaustive, therefore one detour" would be wrong by five. + +For the record, `fpu_cw = 0x027f` (53-bit, round-to-nearest) in every CR run. + +### 4.3 P1 and P2 held exactly, on the LOAD route + +The load route reproduced the continuation's turn-4 call in every particular — allocations, the +completion, the unlock set, the arithmetic. From `cr-N.jsonl.gz` (compare) and confirmed identically +in `cr-R1.jsonl.gz` (replace): + +| call | owner | species | alloc | what moved | +|---|---|---|---|---| +| 1 | `Player[32 "Fane Lao"]` | 2 | `{144, 2898}` | the completion (below) | +| 2 | `Player[496 "Singularity"]` | 0 | `{90, 0}` | **nothing at all** | +| 3 | `Player[512 "Singularity"]` | 2 | `{9, 0}` | **nothing at all** | + +Call 1, node **144 `IND_Waldo`**: `state 3 → 4`, `progress 5768 → 7500`, `turn_researched −1 → 4`, +`order −1 → 22`; `overbudget 0 → 1166`; three nodes unlocked — +**132 `IND_OrbFound` @ 10000**, **136 `IND_RefCoat` @ 16000**, **142 `IND_TrkStl` @ 8000**, each +`state 0 → 2`, `cost_rp INT_MAX → …`, `turn_available −1 → 4`; `events.next_id 5 → 7`; +`observed_techs 440 → 484 bytes`. + +P2's hand arithmetic is confirmed to the unit: `cost 5000`, `lo 2500`, `hi 7500`, +`spent = min(2898, 1732) = 1732`, `progress = 7500` **exactly on the ceiling**, +`overbudget = 2898 − 1732 = 1166`; `progress < hi` false so **no draw**; `ratio = 1.5`, not below +`0.800000011920929`, so **`flag` unchanged**. The `rng` region **did not move on any of the three +calls** in any run. + +That last fact is a coverage hole, not a success — see §4.6. + +### 4.4 P4 and P5 held: replace diverges, and the cascade closes exactly eleven leaves + +`state_checksum.py cr-oracle-autosave.sav `: + +| run | diverging leaves | file size | +|---|---:|---| +| **R0** — replace, cascade **off** (the shipped behaviour) | **27** | 67,511 B | +| **R1** — replace, cascade **on** | **16** | 67,537 B | +| (the turn itself, `turn3-state` → oracle, for scale) | 128 | – | + +**The eleven leaves the cascade closes — R0 has them, R1 does not.** All eleven are `TechTree`: + +``` +Player[32]/TechTree/St[94] TResCost[94] TUnlck[94] (node 132 IND_OrbFound, 10000) +Player[32]/TechTree/St[98] TResCost[98] TUnlck[98] (node 136 IND_RefCoat, 16000) +Player[32]/TechTree/St[104] TResCost[104] TUnlck[104] (node 142 IND_TrkStl, 8000) +Player[32]/TechTree/TAcq[106] TiAcq[106] (node 144, turn 4 / order 22) +``` + +The tree is serialised as parallel arrays indexed by **tree slot**, not tech id — slots 94/98/104/106 +are tech ids 132/136/142/144 — and the pass's own two words, `St[106] 3 → 4` and +`TResDone[106] 5768 → 7500`, are correct in **both** replace runs because +`ProcessResearchTurn` writes them without the cascade. So of the **13 tech-tree leaves this turn +moves, our code produced all 13 in live memory with the original's `ProcessResearch` never +executing** — 2 from the pass, 11 from `SetResearched`. + +**One prediction I cannot test and must retract as written.** P4 item 2 said the completion-order +counter would be "left at 22" in R0. `TechTree+0x20` **is not a save leaf** — the counter's value +surfaces only through the per-node `TiAcq` stamp — so the oracle cannot see it either way. What is +observable is the trace: R1's only guard hit is `tree_header+0x20:1` (ours writing 22 → 23, the same +byte the original moves in compare mode) and R0 has **0 undeclared writes in 0 calls**. The counter +matters for the *next* completion, not for this save. + +### 4.5 P6 held: the residual is `ServerPlayer::OnTechResearched`, entirely + +R1's **16** leaves, every one of them named, with nothing left over: + +| leaf | what it is | modelled by `ours`? | +|---|---|---| +| `Player[32]/OutMod` `1.25 → 1.1` | a tech effect | no — B2's milestone | +| `Player[32]/ConMod[0..2]` `0.9 → 1.0` (×3) | tech effects | no — B2's milestone | +| `Player[32]/Events/EvNxID` `7 → 5` | the two events not posted | decision modelled, **write is compare-only** | +| `…/Events/.[EvTurn=4]/Events/.[EvEID=5]`, `.[EvEID=6]` `only-in-A` | the two event records | text comes from the game's string table | +| `…/Events/.[EvTurn=4]/Events/.[0]` `3 → 1` | that turn's event count | ditto | +| `Player[32]/otch/.[11]` `only-in-A`, `otch/.[0]` `11 → 10` | the `ObservedTech` element | append **decided** (`otch_appends=1`), element not constructed | +| `Player[32]/ResTNm` `'' → 'IND_Waldo'` | `ResT` never cleared | inside the callback | +| `Player[32]/BnkPr`, `BnkEl` | bankruptcy projection | **downstream of `OutMod`** | +| `Sys[288 "Ke'Dolarra"]/RepCur`, `RepMax` `421640 → 371040` | repair capacity | **downstream of `ConMod`** | +| `/Summary/Checksum` | derived | derived | + +So the residual decomposes into **5 primary player fields** (`OutMod`, `ConMod[0..2]`, `ResTNm`), +**1 `ObservedTech` element**, **2 event records + their id counter**, and **5 derived leaves** that +follow from those. Every single one is written by `ServerPlayer::OnTechResearched`, none of them by +`TechTree::ProcessResearch` or by `SetResearched`. + +That also closes the loop with §4.2's guard: the four `player` spans the compare reported as +undeclared (`+0x10c`, `+0x110`, `+0x114`, `+0x124`, all three bytes wide — float writes whose top +byte did not change) plus `+0x294` (`ResT`, four bytes) are **five** writes, and the save shows +**five** primary player fields. The guard was reporting exactly what the oracle later billed us for. + +**The input class that breaks it is a completion, and only a completion.** Both replace runs are +byte-perfect on the two null calls and on every other leaf of the 128 the turn moves. A replace run +over a turn where research does not complete would be byte-identical — and would prove nothing +(rule 1), which is why this lane refused to run it on `ref-turn2`. + +### 4.6 Coverage, reported as loudly as the result (rules 15 and 23) + +* **1 completion. 1 distinct tech (144 `IND_Waldo`). 3 unlocked nodes. 3 calls.** +* **2 of the 3 calls allocate zero points and write nothing at all**, in any mode. Their entire + contribution to "3 calls, 0 diverged" is that two null calls stayed null. +* **1 of 4 tech trees is exercised.** Player 16's tree is never processed (`ResTNm == ''`); players + 496 and 512 are the null calls. +* **The RNG region did not move on any call in any run.** The spend cap bound exactly, so the + odds/roll branch was skipped, and `roll_pending_in` was false on the completing call, so + `RollResearchEvent` drew nothing (`roll_draws=0`). **`region:rng` — the single strongest check in + this hook's compare — compared "unchanged against unchanged" on this workload and established + nothing.** The generator parity evidence for this module is entirely lane U's and lane V's, + on other turns. +* **Branches that did not execute here:** the Zuul double roll (species 2, not 5); the + completed-early flag (`ratio 1.5`); the over-budget notification (`flag` already 2 from turn 3); + `RollResearchEvent`'s draw and, behind it, the plague / AI-rebellion paths; `SetResearched`'s + zero-cost recursion; the `def+0xb0` `NoAutoAvailable` skip; an empty prerequisite group; a + re-observed tech (the dedup's negative case); and the decay sweep, which ran over every node and + **changed nothing** because no other `Available` node had non-zero progress. +* **The event model is count-only by construction** and stayed compare-only in replace mode by + design; the two missing records are two of the sixteen residual leaves. +* **`TechTree::Cost` is the original's.** `ours` calls the game's read-only `Cost` for every cost it + needs, in both modes. The effective-cost formula is **not** displaced, and any claim about this + module inherits that dependency. + +### 4.7 Verdict + +**No. `game/sim/research` does not move from `compared` to `replaced`.** + +The bar is "our code ran instead of the original's **and a byte-level oracle held afterwards**". Our +code did run instead — `mode=replace`, `completions=1`, `unlocked=3`, the original's +`ProcessResearch` never executed, and the game finished the turn and wrote a save. The oracle did +**not** hold: 16 leaves in the best configuration. There is no qualified reading that rescues it, +because the failure is not a rounding residual — it is a set of writes nobody has implemented. + +What the lane did establish, and it is worth more than the rung would have been: + +1. **The research pass and the entire `SetResearched` cascade are displaceable and were displaced.** + All 13 tech-tree leaves the turn moves were produced by our code in live game memory, on a turn + with a real completion and a real three-node unlock cascade — which is a strictly stronger + statement than the 35 compared calls the board already carried, because in a compare the + original's code still did the work. +2. **The blocking boundary is named and measured, not guessed:** `ServerPlayer::OnTechResearched`, + 5 player fields + 1 `ObservedTech` element + 2 events, and 5 derived leaves behind them. + `ProcessResearch` **cannot** reach `replaced` on any workload containing a completion until + `OnTechResearched` is displaced — and that is B2's milestone and its own `compared` board row, + not a defect in the research model. +3. **A new certified pair** on a turn that exercises the completion path, which the campaign did not + have: `ref-turn2` + one End Turn is a *quiet* turn for research, and every oracle the module had + been checked against was that one. + +The cheapest route to the rung, now that the boundary is priced: implement the ~90-field +`ApplyTechEffect` write-back live (B2 already has `game/effects/tech_effects` host-tested), construct +the `ObservedTech` element, and decide what to do about the two event records — whose *text* comes +from the game's string table and therefore cannot be produced clean-room at all. **The event text is +a hard stop for a byte-identical oracle on any completion turn**, and that should be settled as a +policy question (call the game's `PostEvent`, and accept the `ComputeBudget`-shaped QUALIFIED +caveat) before anyone spends another lane on it. + +--- + +## 5. Proposed board rows + +**I have not edited `campaign/board.md`.** I *have* added the certified pair to +`verify/results/saves/certified-pairs.md`, which the brief pointed at as the standing format and +whose four standing rules for adding a row are all satisfied (two fresh `hooks=off` processes; the +control run before anything was read from an instrumented run; not an extension of an existing pair +but its own agreement; exposure facts recorded beside the hashes). + +### 5.1 `tools/displacement.py` — the rung does NOT move + +The verdict is **no**, so `"compared"` stays. What I do propose is replacing the evidence and caveat +strings, which currently understate what is known and do not name the gate: + +```python + ("TechTree::ProcessResearch + unlock cascade", "compared", + "35 calls across 3 workloads, 0 divergences, tracecmp exit 0; advance prediction held on a " + "changed workload (unlock costs no earlier report contained); REPLACE ATTEMPTED live (lane " + "CR): ours ran instead of the original on a real completion and produced all 13 tech-tree " + "leaves the turn moves, but the save oracle missed by 16 leaves", + "compare only. The replace attempt failed on ServerPlayer::OnTechResearched, not on the " + "research model: 5 player tech-effect fields, 1 ObservedTech element and 2 event records, " + "plus 5 derived leaves. Gated on B2. Thin: 1 completion, 1 tech, 2 of 3 calls allocate zero " + "points, and the RNG region did not move at all on the replace workload"), +``` + +### 5.2 Board rows to add + +| row | class | status | conf | cov | date | evidence | +|---|---|---|---|---|---|---| +| **`ProcessResearch` replace: our code ran instead of the original's, and the oracle missed by 16 leaves — all of them `OnTechResearched`'s** | phase2 | verified | high | 95% | 2026-09-09 | **Lane CR, VM145**, `findings/subsystems/research-replace.md`. Predictions committed before the build (`sots-re` 4b3cc82); engine `wip/cr` 618ccb1 adds `research.replace_cascade=on\|off` (default off) so the shipped and extended behaviours differ by **a config line, not a binary**. New certified pair `turn3-state.sav` → one End Turn, **load** route, `e00eed0c…`/`79df5047…`, 2 `hooks=off` processes + 1 compare. Compare run **3/3/0 exit 0** and byte-identical to the control (rule 19 satisfied), undeclared writes exactly the 6 predicted spans. **Replace, cascade on: 16 diverging leaves; cascade off: 27.** The 11-leaf delta is the whole `SetResearched` cascade and it is **ours**; with the pass's own 2 words that is **13 of 13 tech-tree leaves the turn moves, produced live by our code**. The 16 residual leaves are `OutMod`, `ConMod[0..2]`, `ResTNm`, one `ObservedTech` element, two event records + `EvNxID`, and 5 derived. **Verdict: stays `compared`.** | +| **`ref-turn2` + one End Turn does NOT exercise a research completion** | verify | verified | high | 100% | 2026-09-09 | Lane CR. The campaign's most-reproduced oracle is a **quiet turn for the completion path**: `unlock-b3-t1.md` reports `0 undeclared write(s) in 0 call(s)` and `unlock-shim.log`'s first three lines read `completions=0`. It *is* a real workload for the pass (one RNG word, `flag 1 → 2`, one over-budget event) — but a replace-mode oracle taken there would be rule 1's green verdict on a hook comparing nothing. The completing turn is the **next** one, from `turn3-state.sav`. | +| **`# exhaustive` is exhaustive over the 27 template hooks only — six detours are installed, not one** | phase2 | verified | high | 100% | 2026-09-09 | Lane CR. A config naming all 27 registered hooks `off` except one, passing `tools/check_shim_configs.py`, still installs **6** detours: the M0 `Application::Initialize` asm stub (unconditional whenever `hooks != off`) and the **FPU-force module's four sampling detours** (`force=off value=0x0000 sample_ticks=on sample_turn=on`, on by default). `check_shim_configs.py` cannot see either group — no `hook.` key names them. What made lane CR's runs safe was the **neutrality check** (compare run byte-identical to two `hooks=off` controls), not the config check. A lane reading "exhaustive, therefore one detour" is wrong by five. | +| **A replace of `ProcessResearch` is gated on `ServerPlayer::OnTechResearched`, and partly on a policy question** | phase2 | open | high | – | 2026-09-09 | Lane CR. To reach `replaced`, three things are needed: the ~90-field tech-effect write-back applied live (B2 has `game/effects/tech_effects` host-tested), the `ObservedTech` element constructed (`ours` already decides the append), and the two research event **records** written. The third is not an implementation gap: their `EvDsc`/`EvMsg` text comes from the game's string table, which the engine must not carry, so a byte-identical oracle on any completion turn requires calling the game's own `PostEvent` and accepting a `ComputeBudget`-shaped **QUALIFIED** `replaced`. Settle that before spending a lane. | + +### 5.3 Artefacts + +| what | where | +|---|---| +| predictions commit (before the build) | `sots-re` `4b3cc82` | +| engine change | `sots-engine` worktree `wip/cr`, `618ccb1` — `research.replace_cascade`, a mode-independent completion counter, four `shim.cfg.cr*` configs | +| oracle + replace saves | `verify/results/saves/cr/cr-{oracle-endturn,oracle-autosave,replace0-autosave,replace1-autosave}.sav` | +| traces | `verify/traces/cr-{N,R0,R1}.jsonl.gz` | +| `tracecmp` reports | `verify/results/compare/cr-{compare,replace0,replace1}.{md,json}` | +| shim logs (the per-call counters) | `verify/results/shim/cr/cr-{N,R0,R1}.log` | +| certified pair | `verify/results/saves/certified-pairs.md`, row 4 | + +No `ghidra/addresses.d/cr.json`: this lane read no new address. No game data, save, disassembly or +`FUN_xxxxxxxx` name reached `sots-engine`; `tools/clean_room_check.sh` OK. + +### 5.4 VM145 released + +Held for this lane only; **VM140 untouched**. Restored and verified byte-for-byte to as-found: + +``` +binkw32.dll 15,527,327 B 903527F4A698EEA9FBE25F3A6236657C7D8348F994EEF394696F187E5E554B97 (= shimdist-recap) +shim.cfg 0AE410CC72FE155837D711C78543E14B1F5743310CD023298EB1E5BBD5457E71 (= shimdist-recap\shim.cfg.recaptrace) +SavedGames the same 9 files, every size and sha256 identical to the as-found survey +game not running (as found) +``` + +Left behind: `C:\SOTS\shimdist-cr\`, `C:\SOTS\ui\cr\` (the input save, the four run outputs and the +restore set) and `C:\SOTS\ui\cr{deploy,click,grab,snap,restore,find}.ps1`. `click_helper.ps1` is +unmodified. **One thing not restored:** my deploy helper *deletes* `C:\SOTS\shim.log` rather than +rotating it to `.prev` the way lane BQ's does, so whatever log was there when I took the guest is +gone. Logs are not simulation state and no measurement depends on it, but the next lane should +rotate rather than delete. diff --git a/verify/results/compare/cr-compare.json b/verify/results/compare/cr-compare.json new file mode 100644 index 0000000..9bc1e94 --- /dev/null +++ b/verify/results/compare/cr-compare.json @@ -0,0 +1,1336 @@ +{ + "coverage_contradicted": [], + "coverage_unstated": [], + "format": 1, + "hooks": { + "Game::TechTree::ProcessResearch": { + "calls": 3, + "compared": 3, + "coverage": { + "checked_regions": [ + "events", + "node[0]", + "node[105]", + "node[106]", + "node[107]", + "node[108]", + "node[109]", + "node[10]", + "node[110]", + "node[111]", + "node[112]", + "node[113]", + "node[114]", + "node[115]", + "node[116]", + "node[117]", + "node[118]", + "node[119]", + "node[11]", + "node[120]", + "node[121]", + "node[122]", + "node[123]", + "node[124]", + "node[125]", + "node[126]", + "node[127]", + "node[128]", + "node[129]", + "node[12]", + "node[130]", + "node[131]", + "node[132]", + "node[133]", + "node[134]", + "node[135]", + "node[136]", + "node[137]", + "node[138]", + "node[139]", + "node[13]", + "node[140]", + "node[141]", + "node[142]", + "node[143]", + "node[144]", + "node[145]", + "node[146]", + "node[147]", + "node[148]", + "node[149]", + "node[14]", + "node[151]", + "node[152]", + "node[153]", + "node[154]", + "node[155]", + "node[156]", + "node[157]", + "node[158]", + "node[159]", + "node[15]", + "node[160]", + "node[161]", + "node[162]", + "node[163]", + "node[164]", + "node[165]", + "node[166]", + "node[167]", + "node[168]", + "node[169]", + "node[16]", + "node[170]", + "node[171]", + "node[172]", + "node[173]", + "node[174]", + "node[175]", + "node[177]", + "node[178]", + "node[179]", + "node[17]", + "node[180]", + "node[181]", + "node[182]", + "node[183]", + "node[184]", + "node[185]", + "node[186]", + "node[187]", + "node[188]", + "node[189]", + "node[18]", + "node[190]", + "node[191]", + "node[192]", + "node[193]", + "node[194]", + "node[195]", + "node[196]", + "node[197]", + "node[198]", + "node[199]", + "node[19]", + "node[1]", + "node[200]", + "node[201]", + "node[202]", + "node[203]", + "node[204]", + "node[205]", + "node[206]", + "node[207]", + "node[208]", + "node[209]", + "node[20]", + "node[210]", + "node[211]", + "node[212]", + "node[213]", + "node[214]", + "node[215]", + "node[216]", + "node[217]", + "node[218]", + "node[219]", + "node[21]", + "node[220]", + "node[221]", + "node[222]", + "node[223]", + "node[224]", + "node[225]", + "node[226]", + "node[227]", + "node[228]", + "node[229]", + "node[22]", + "node[230]", + "node[231]", + "node[232]", + "node[233]", + "node[234]", + "node[235]", + "node[236]", + "node[237]", + "node[238]", + "node[239]", + "node[23]", + "node[240]", + "node[241]", + "node[242]", + "node[243]", + "node[244]", + "node[245]", + "node[246]", + "node[247]", + "node[248]", + "node[249]", + "node[24]", + "node[250]", + "node[251]", + "node[252]", + "node[253]", + "node[254]", + "node[255]", + "node[256]", + "node[257]", + "node[258]", + "node[259]", + "node[25]", + "node[260]", + "node[261]", + "node[262]", + "node[263]", + "node[264]", + "node[265]", + "node[266]", + "node[267]", + "node[268]", + "node[269]", + "node[26]", + "node[270]", + "node[271]", + "node[272]", + "node[273]", + "node[274]", + "node[275]", + "node[276]", + "node[277]", + "node[278]", + "node[279]", + "node[27]", + "node[280]", + "node[281]", + "node[282]", + "node[283]", + "node[284]", + "node[285]", + "node[286]", + "node[287]", + "node[288]", + "node[289]", + "node[28]", + "node[290]", + "node[291]", + "node[292]", + "node[29]", + "node[2]", + "node[30]", + "node[31]", + "node[32]", + "node[33]", + "node[34]", + "node[35]", + "node[36]", + "node[37]", + "node[38]", + "node[39]", + "node[3]", + "node[40]", + "node[41]", + "node[42]", + "node[43]", + "node[44]", + "node[45]", + "node[46]", + "node[47]", + "node[48]", + "node[49]", + "node[4]", + "node[50]", + "node[51]", + "node[52]", + "node[53]", + "node[54]", + "node[55]", + "node[56]", + "node[57]", + "node[58]", + "node[5]", + "node[60]", + "node[61]", + "node[62]", + "node[63]", + "node[64]", + "node[65]", + "node[66]", + "node[67]", + "node[68]", + "node[69]", + "node[6]", + "node[70]", + "node[72]", + "node[74]", + "node[77]", + "node[78]", + "node[7]", + "node[80]", + "node[81]", + "node[85]", + "node[86]", + "node[87]", + "node[88]", + "node[89]", + "node[8]", + "node[90]", + "node[91]", + "node[92]", + "node[94]", + "node[98]", + "node[99]", + "node[9]", + "observed_techs", + "overbudget", + "rng" + ], + "guarded_calls": 3, + "guards": [ + "player", + "tree_header" + ], + "spans": { + "compare": [ + "player+0x10c:3", + "player+0x110:3", + "player+0x114:3", + "player+0x124:3", + "player+0x294:4", + "tree_header+0x20:1" + ] + }, + "state": "partial", + "undeclared_calls": 1, + "undeclared_writes": 6, + "unmodelled": [ + { + "mitigation": "region:events", + "risk": "medium", + "what": "posts EVENT_RESEARCH_OVERBUDGET on the owner's EventStorage: ours reproduces the decision and the id sequence, so region:events compares next_id, but the composed EvDsc/EvMsg text is not reproduced and no region can see it", + "why": "text comes from the game's string table, which the engine must not carry; ours posts into its own EventStorage and writes only the counts into the scratch copy, so no live byte moves and replace mode posts nothing at all" + }, + { + "mitigation": "region:events", + "risk": "low", + "what": "composes EVENT_TECHS_UNLOCKED's message from the unlocked techs' names", + "why": "the trigger and the list are modelled (SetResearched's availability sweep plus the tail collector, both read off the instruction stream), so region:events compares next_id; the names come from the game's string table, so the message is composed from node indices instead and is not the game's text" + }, + { + "mitigation": "guard:player, guard:tree_header", + "risk": "high", + "what": "TechTree::SetResearched in REPLACE mode: only its TechTree half runs, and only when research.replace_cascade=on", + "why": "with the flag OFF (the default) nothing of the cascade runs, so a replace run leaves the completed node unstamped and no tech unlocked. With it ON, the four TechNode words (costRP, turnAvailable, turnResearched, order) and the tree's completion-order counter are written live, and the ServerPlayer half is still not: no event is posted, no ObservedTech element is appended and no tech effect is applied. Neither setting is a full displacement of the completion path; the pair measures where the boundary is" + }, + { + "mitigation": "guard:player", + "risk": "high", + "what": "ServerPlayer::OnTechResearched's tech effects: the ~90 hard-coded ServerPlayer field writes, the plague-cure masks, the design-option bitmasks and the species tech flags", + "why": "B2's milestone. `ours` models only the two parts of the callback this hook's regions can see -- the observed-tech append and the RNG word RollResearchEvent draws before its branch (one word on a missed roll, two on a fired plague roll) -- and the rest is what the player guard reports" + }, + { + "mitigation": "region:rng", + "risk": "high", + "what": "the research-event branch RollResearchEvent takes when its roll beats the odds (ServerPlayer::OnResearchRollSucceeded: the plague and AI-rebellion event paths)", + "why": "RollResearchEvent draws one NextFloat unconditionally and that draw IS modelled -- but that is only the cost of REACHING the branch. A FIRED roll costs one or two words: the plague path draws a SECOND word (NextInt) to pick an owned system and posts EVENT_PLAGUE_OUTBREAK, while the rebellion path allocates an AIRebellion at ServerPlayer+0x3b8 and CANCELS the current research (no further draw). The branch is entered only for the plague and AI-rebellion tech families, whose odds are 0 everywhere else, and it has never been observed firing in three sessions -- which is why every earlier note in this repo said 'exactly one NextFloat' and nothing caught it. If it is ever entered, region:rng is the check" + }, + { + "mitigation": "region:observed_techs", + "risk": "medium", + "what": "constructs the ObservedTech element it appends to ServerPlayer+0x274", + "why": "`ours` models the append DECISION -- RecordObservedTech de-duplicates by tech name, so it decides whether the vector grows -- and moves the scratch header's byte span by one 0x2c element per append. The element's own fields (turn_first, turn_last, detected, the name string, `with`) are not built, and no region can see them" + }, + { + "mitigation": "guard:tree_header", + "risk": "low", + "what": "the tree's completion-order counter (TechTree+0x20) is read pre-call, not modelled as a region", + "why": "the per-node `order` word IS compared, and it is stamped from a counter `ours` seeds from the pre-call read and advances itself; the counter's own final value is only seen by the tree_header guard" + }, + { + "mitigation": "", + "risk": "low", + "what": "writes a completion line to the game log", + "why": "log text is not simulation state" + } + ], + "verdict": "partial", + "why": "" + }, + "diffs": [], + "diverged": 0, + "diverged_call_ids": [], + "errors": 0, + "modes": { + "compare": 3 + } + }, + "Shim::SelfTest::Fill": { + "calls": 1, + "compared": 0, + "coverage": { + "checked_regions": [ + "buf" + ], + "guarded_calls": 0, + "guards": [], + "spans": {}, + "state": "complete", + "undeclared_calls": 0, + "undeclared_writes": 0, + "unmodelled": [], + "verdict": "complete", + "why": "Fill writes buf[0..n) and nothing else; the whole range is a declared region" + }, + "diffs": [], + "diverged": 0, + "diverged_call_ids": [], + "errors": 0, + "modes": { + "trace": 1 + } + } + }, + "inputs": [ + "/tmp/claude-1000/-home-alex/ec8e34f8-af37-4ef2-a309-ed6a15293097/scratchpad/out/N.trace.jsonl" + ], + "invalid": [], + "kind": "report", + "meta": [ + { + "build": "cr-618ccb1-20260909T131556Z", + "exe_sha256": "970b7de729956a53094c7eb98aba4270aee98e2fed5daf0d39e290013c90c841", + "format": 1, + "hooks": { + "Game::EncounterDetect::AssignContacts": { + "coverage": { + "state": "partial", + "unmodelled": [ + { + "mitigation": "region:rng is the only check; the turn's own correctness is B1/B3/B4's job", + "risk": "high", + "what": "everything the original writes except the strategic generator", + "why": "this hook family measures ONE thing -- how many words the generator advances and where. It declares no region over game state and makes no claim about it. A clean run here says the RNG accounting is right and says nothing whatever about whether the turn was computed correctly" + }, + { + "mitigation": "region:rng carries left/block/words, never a call count", + "risk": "low", + "what": "the ledger reports WORDS, not draws", + "why": "a NextInt that rejects three times is four words and one call. Words are the unit that decides whether a save reproduces; they are the wrong unit for counting decisions, and nothing here should be read as a draw count" + }, + { + "mitigation": "region:rng reads the state, so an inlined draw is as visible as a called one", + "risk": "low", + "what": "the ledger is deliberately blind to WHICH primitive spent a word", + "why": "that is the design, and it is why this instrument was preferred to hooking the primitives: the image has FOUR draw entry points (NextFloat 0x0047d830, NextInt 0x004271c0, Chance 0x008e6dd0 and NextUInt 0x004f7670, the last of which appears in no previous lane's primitive set) plus inlined draws in at least twelve functions, two of them reachable from the turn roots. A primitive-counting hook would have silently undercounted every one of those" + }, + { + "mitigation": "region:rng emits null explicitly; tracecmp shows it as a value, not a gap", + "risk": "medium", + "what": "a generator position the ledger cannot place reads `words: null`", + "why": "a block more than 4096 twists ahead of the frontier, or any state behind the anchor, is reported unknown rather than guessed. A null in a ledger field is a measurement failure and must not be read as zero" + }, + { + "mitigation": "region:rng; arg:detectors/contacts/max_trials bound the expected count", + "risk": "medium", + "what": "the contact-to-detector assignment itself, and the two-pass outer loop", + "why": "this hook exists because the draw here is INLINED and therefore invisible to every call-graph sweep and to the entry-point detours -- it is the one site in ProcessTurn's closure that neither instrument can see. It measures the word cost of the whole call and models nothing" + }, + { + "mitigation": "arg:max_trials is the upper bound only", + "risk": "low", + "what": "the per-trial threshold is 0.25f or 0.0f depending on two tech lookups, and the accept test short-circuits the inner loop", + "why": "so the measured cost is between |contacts| and |contacts| x |detectors| and the exact number depends on tech state this hook does not read" + } + ], + "why": "" + }, + "ftol": 0, + "ftol_kind": "abs", + "ptr": "ignore" + }, + "Game::EncounterDetect::ProcessTeamRecord": { + "coverage": { + "state": "partial", + "unmodelled": [ + { + "mitigation": "region:rng is the only check; the turn's own correctness is B1/B3/B4's job", + "risk": "high", + "what": "everything the original writes except the strategic generator", + "why": "this hook family measures ONE thing -- how many words the generator advances and where. It declares no region over game state and makes no claim about it. A clean run here says the RNG accounting is right and says nothing whatever about whether the turn was computed correctly" + }, + { + "mitigation": "region:rng carries left/block/words, never a call count", + "risk": "low", + "what": "the ledger reports WORDS, not draws", + "why": "a NextInt that rejects three times is four words and one call. Words are the unit that decides whether a save reproduces; they are the wrong unit for counting decisions, and nothing here should be read as a draw count" + }, + { + "mitigation": "region:rng reads the state, so an inlined draw is as visible as a called one", + "risk": "low", + "what": "the ledger is deliberately blind to WHICH primitive spent a word", + "why": "that is the design, and it is why this instrument was preferred to hooking the primitives: the image has FOUR draw entry points (NextFloat 0x0047d830, NextInt 0x004271c0, Chance 0x008e6dd0 and NextUInt 0x004f7670, the last of which appears in no previous lane's primitive set) plus inlined draws in at least twelve functions, two of them reachable from the turn roots. A primitive-counting hook would have silently undercounted every one of those" + }, + { + "mitigation": "region:rng emits null explicitly; tracecmp shows it as a value, not a gap", + "risk": "medium", + "what": "a generator position the ledger cannot place reads `words: null`", + "why": "a block more than 4096 twists ahead of the frontier, or any state behind the anchor, is reported unknown rather than guessed. A null in a ledger field is a measurement failure and must not be read as zero" + }, + { + "mitigation": "region:rng; arg:gate/pred_contacts/pred_detectors are a prediction, not a check", + "risk": "medium", + "what": "the whole body of ProcessTeamRecord: the gate call, the two vector builds and the bucket construction", + "why": "this hook measures the word cost of the call and recomputes three integers the original derives from the same record. It models none of the work and asserts nothing about the contact assignment" + }, + { + "mitigation": "arg:fc_byte_vs_dword_disagreements; arg:entry_flags carries the raw values", + "risk": "medium", + "what": "`+0xfc` and `+0xfb` are read as BYTES, following lane I's reading of the classifier functions", + "why": "if either is really a wider field, every count here is wrong in the same direction and no cross-check inside this hook would notice. So the dword at +0xfc is read as well and any row where the two disagree is COUNTED, not silently resolved -- a non-zero disagreement count means the byte reading is unsafe on this workload" + }, + { + "mitigation": "arg:entries against the three class counts", + "risk": "low", + "what": "an entry whose object pointer is unreadable is skipped", + "why": "it is not counted into any of the three classes, so entries != contacts + detectors + neither is the signal that this happened" + } + ], + "why": "" + }, + "ftol": 0, + "ftol_kind": "abs", + "ptr": "ignore" + }, + "Game::SectionDictionary::SectionDictionary": { + "coverage": { + "state": "partial", + "unmodelled": [ + { + "mitigation": "see docs/M2.md; compare mode for this hook is not safe to run", + "risk": "high", + "what": "LoadSection registers each section with the string table and the live TechTree, and may append to the dictionary's own vector", + "why": "M3 scope; ours delegates to the game's LoadSection after the original has already built all 885 definitions, so the second pass registers duplicates -- the leading hypothesis for this hook's compare-mode crash" + }, + { + "mitigation": "", + "risk": "medium", + "what": "post-load validation pass over every definition's @-token against the string table", + "why": "runs after the loop and touches no declared region" + }, + { + "mitigation": "", + "risk": "low", + "what": "allocates 885 SectionDef objects (0x3d8 bytes each) on the game heap", + "why": "they do not exist at hook entry; compared by index/species/id/token" + }, + { + "mitigation": "guard:dict", + "risk": "low", + "what": "the word at dictionary+0x14", + "why": "not modelled; emitted as an ignored pointer" + }, + { + "mitigation": "", + "risk": "medium", + "what": "the before-snapshot of the object is uninitialised heap", + "why": "the hook is on the constructor, so `before` is meaningless and only `after` carries information" + } + ], + "why": "" + }, + "ftol": 0, + "ftol_kind": "abs", + "ptr": "ignore" + }, + "Game::ServerPlayer::ComputeBudget": { + "coverage": { + "state": "partial", + "unmodelled": [ + { + "mitigation": "declared input boundary; see budget_inputs.h", + "risk": "high", + "what": "slots 1, 2, 3, 4, 7 and 11 are produced by callees this milestone does not model (per-system output, trade, ship-carried population, a second manager, the build-queue spend)", + "why": "they are copied out of the original's own output and back into the same slots, so they match BY CONSTRUCTION and prove nothing" + }, + { + "mitigation": "guard:budget_object does not reach the ships; unverified", + "risk": "high", + "what": "ServerSystem::ComputeOutput repairs damaged ships in orbit", + "why": "replace mode runs the original a second time on a scratch Budget to harvest the six unmodelled slots, so that repair happens TWICE per turn in replace mode and nothing in the trace would show it" + }, + { + "mitigation": "logged as `inputs.live_difficulty` on every record", + "risk": "low", + "what": "the difficulty-mods row still DRIVES `ours` as two fitted constants", + "why": "the old note here said the row was 'not reachable from a ServerPlayer'. That was wrong: the record is at ServerPlayer+0x36c and every consumer calls DifficultyMods_Select(p->+0x36c, p). Lane L5 now snapshots it and emits it as `inputs.live_difficulty` alongside the fitted pair, so a run SHOWS whether the fit is right instead of assuming it. `ours` was deliberately left on the fitted constants so that this run is evidence about them; switching it over is the next lane's one-line change" + }, + { + "mitigation": "the record carries `inputs.live_consts` so the widths are readable, and tests/game_sim/test_economy.cpp pins all three at their boundaries", + "risk": "medium", + "what": "three of the four float widths this routine turns on are unexercised by any reference turn", + "why": "the savings-interest rate is a widened 0.01f and its boundary IS in the corpus (a treasury of 50,000 earns 499, not 500). The research yield factor is a widened 0.85f whose boundary needs a research money that is a multiple of 40,000, and the three research modifiers are summed in SINGLE precision, which needs two of them non-zero -- the corpus has shrm = TRM = 0. So a green compare here verifies one of the three and says nothing about the other two" + }, + { + "mitigation": "", + "risk": "low", + "what": "the research-allocation vector's heap block", + "why": "only the element count is compared; the three words are heap pointers the default policy ignores" + } + ], + "why": "" + }, + "ftol": 0, + "ftol_kind": "abs", + "ptr": "ignore" + }, + "Game::ServerPlayer::OnTechResearched": { + "coverage": { + "state": "partial", + "unmodelled": [ + { + "mitigation": "guard:player (EventStorage is inline at ServerPlayer+0x29c)", + "risk": "high", + "what": "posts EVENT_RESEARCH_COMPLETE / _UNDERBUDGET / _TEMPERANCE on the owner's EventStorage when !silent", + "why": "the same class of write as B3's defect, and this hook has no replace-mode oracle that could catch it: gotcha 4 in docs/B2.md says a changed save hash on a completion turn is expected and therefore not a finding" + }, + { + "mitigation": "", + "risk": "high", + "what": "writes every owned system's AI flag (CCC_AIVrus / CCC_AISlv), re-evaluates the arcology civilian cap, cures addiction and clears plague across systems AND ships", + "why": "writes through pointers to other objects; compare mode must not touch live state, and no region reaches them" + }, + { + "mitigation": "this is the extra draw B3 observed on a completion", + "risk": "high", + "what": "the pending plague-cure roll (ServerPlayer::RollResearchEvent)", + "why": "it draws one word from the strategic generator unconditionally, and a SECOND word (NextInt) when the roll beats the odds and takes the plague path -- which also posts EVENT_PLAGUE_OUTBREAK, while the rebellion path cancels the research. So a fired roll costs one or two words, not one; running it in compare mode would consume real randomness. The two words it guards are still cleared and the record says whether it would have fired" + }, + { + "mitigation": "", + "risk": "medium", + "what": "TechTree::SetResearched for the Zuul boarding-pod grant", + "why": "it would mutate the live tree, and it recurses" + }, + { + "mitigation": "region:node_bore, declared only when the block already exists", + "risk": "medium", + "what": "allocates or frees the node-bore block at ServerPlayer+0x308", + "why": "ours has no allocator the game's runtime could free, so replace mode calls the game's own updater -- which means replace mode never exercises our node-bore selection at all" + } + ], + "why": "" + }, + "ftol": 0, + "ftol_kind": "abs", + "ptr": "ignore" + }, + "Game::ServerPlayer::ProcessTurn": { + "coverage": { + "state": "partial", + "unmodelled": [ + { + "mitigation": "guard:player reports Sav, +0xc8 and +0xcc moving", + "risk": "high", + "what": "phases 2, 3 and 6 -- the savings apply Sav = SatAdd(budget[0], net), the three aid/trade records copied out of the budget, and the research refund -- are NOT declared and NOT compared", + "why": "all three are pure functions of ComputeBudget's 22-slot output and of ProcessResearch's overBudget out-parameter, and both live in the original's own stack frame ([ebp-0x90] and [ebp-0x14]). The three ways to reach them are each worse than not having them: call ComputeBudget ourselves (it repairs damaged ships in orbit -- harness-audit #6), read them out of the nested B1/B3 hooks (harness-audit #5, the self-fulfilling compare), or infer them from the observed Sav delta (the same trap). The formulas ARE written and unit-tested in player_turn_inputs.cpp; they are simply not wired into the verdict" + }, + { + "mitigation": "run hook.Game::ServerPlayer::ComputeBudget=compare alongside", + "risk": "high", + "what": "ComputeBudget (0x00863030) itself, including ServerSystem::ComputeOutput, which REPAIRS DAMAGED SHIPS IN ORBIT", + "why": "B1 is the hook that checks the budget; its ship-repair side effect happens inside this call too, once per system per player per turn" + }, + { + "mitigation": "guard:player, and hook.Game::TechTree::ProcessResearch=compare", + "risk": "high", + "what": "TechTree::ProcessResearch and the whole SetResearched / OnTechResearched cascade it can trigger: progress, the completion roll, the 5% decay sweep, the child-unlock cascade, ~90 tech-effect field writes, EVENT_RESEARCH_* and EVENT_TECHS_UNLOCKED", + "why": "declared input boundary. B3/U own it; this hook reports the pre-call research state and lets the player guard say how much moved" + }, + { + "mitigation": "region:rng shows the draws; nothing shows the systems it wrote", + "risk": "high", + "what": "RollResearchAccident (0x00889dc0) draws Mars::RNG::NextInt(100) whenever the research boost is non-zero, can apply progress loss across EVERY system, and posts EVENT_LABACCIDENT_{SMALL,MEDIUM,LARGE}", + "why": "it runs before ProcessResearch and gates it entirely. Its draws move the declared `rng` region, so they are visible -- but as an unexplained RNG divergence, not as their cause" + }, + { + "mitigation": "region:rng + region:roll_flags + guard:player; ours never rolls", + "risk": "high", + "what": "the ResearchRollPending roll: RollResearchEvent draws one NextFloat, and when it BEATS the odds the plague branch draws a SECOND word (NextInt) and posts EVENT_PLAGUE_OUTBREAK, while the rebellion branch allocates an AIRebellion at ServerPlayer+0x3b8 and cancels the current research", + "why": "every previous coverage note in this repo says 'exactly one NextFloat'. That is the cost of REACHING the branch; a fired roll costs one or two words. The branch has never been observed firing. `predict_roll` says whether we expected the roll, `region:rng` says what it actually cost, and `roll_flags` says whether ResErrRoll was consumed" + }, + { + "mitigation": "guard:player", + "risk": "medium", + "what": "ServerPlayer::ProcessSpecialProjects (0x00840fe0) and, for an AI player, ConstructionSpend (0x00817f90)", + "why": "1015 bytes of special-project state, plus the log line \"SpecialProject: %s completed investigation phase\"" + }, + { + "mitigation": "guard:player reports the EvNxID bump", + "risk": "medium", + "what": "the EVENT_NO_RESEARCH post at 0x0089168c, which appends to the player's EventStorage (+0x29c) and bumps EvNxID (+0x2b0)", + "why": "B3's exact failure mode: a list append outside every Result region. Its condition is fully known (ResT == 0, nothing completed this turn, and at least one state-2 tech exists) but ours posts nothing" + }, + { + "mitigation": "guard:player sees the header move only", + "risk": "low", + "what": "PruneRaidTargets (0x00863cf0) erases from the heap vector at +0x338", + "why": "the vector header is inside the player guard, but its elements are heap memory no region reaches, and the erase runs each removed element's scalar destructor" + }, + { + "mitigation": "region:bonus_header", + "risk": "low", + "what": "the timed-bonus element regions are captured from the PRE-CALL element addresses, and the sweep may shrink the vector under them", + "why": "erase moves data down inside the same buffer and only lowers _Mylast, so the addresses stay valid and readable. Elements past the new _Mylast are compared as stale bytes; `bonus_header` is the region that carries the count, and ours writes the same stale tail the original leaves" + }, + { + "mitigation": "", + "risk": "medium", + "what": "replace mode is refused for this hook", + "why": "ours models the driver's own writes and none of ComputeBudget, ProcessResearch, ProcessSpecialProjects or the raid-target prune. A replace run would leave a player in a state no code path produces, and there is therefore no oracle layer behind this compare" + } + ], + "why": "" + }, + "ftol": 0, + "ftol_kind": "abs", + "ptr": "ignore" + }, + "Game::ServerSystem::ComputeTotalOutput": { + "coverage": { + "state": "partial", + "unmodelled": [ + { + "mitigation": "declared input boundary", + "risk": "high", + "what": "the station count, as for GroupOutput", + "why": "`ours` assumes zero stations, so a system with an imperial population and a station diverges by the station factor" + }, + { + "mitigation": "declared input boundary", + "risk": "high", + "what": "the slave population and its xenotech adjustment", + "why": "the original's slave count is not a plain field: it runs the count through a per-species xenotech factor. `ours` takes the slave term as ZERO, so any system holding slaves diverges. The record logs the raw group-2 population sums so a divergence can be attributed" + }, + { + "mitigation": "declared input boundary", + "risk": "medium", + "what": "the capacity surplus the civilian term adds for the owner's own species", + "why": "the original calls the carrying-capacity helper twice with different out-parameter slots and adds max(0, B - A) to the civilian count; `ours` uses the raw civilian population. The surplus is zero except when the colony is at its cap" + }, + { + "mitigation": "", + "risk": "low", + "what": "the addiction phase", + "why": "`ours` assumes it is below 3, so ADDICTION_OUTPUT_MOD never applies; the record logs the system's addiction table length so the case is visible" + } + ], + "why": "" + }, + "ftol": 0, + "ftol_kind": "abs", + "ptr": "ignore" + }, + "Game::ServerSystem::GroupOutput": { + "coverage": { + "state": "partial", + "unmodelled": [ + { + "mitigation": "declared input boundary; the trace makes it recoverable", + "risk": "high", + "what": "the station count that scales the imperial term", + "why": "the original gets it from a helper that walks the system's fleets and their ships through virtual calls and takes the system in EBX, which a hook cannot call portably. `ours` therefore assumes ZERO stations. A divergence on an imperial row is expected to be exactly the station factor, and the record carries `count` and the return, so the factor is MEASURED from the trace rather than fitted" + }, + { + "mitigation": "logged as `tuning` on every record", + "risk": "medium", + "what": "the slave row's output modifier, and every value the data files supply", + "why": "SLAVES_OUTPUT_MOD, the two morale thresholds and their two modifiers, and STATION_BONUS_IMPERIAL_OUTPUT are read out of the live process's globals and logged with every record, so the record says which value drove it" + } + ], + "why": "the imperial and civilian output modifiers, the 1.8 factor and the 500000 divisor are literals inside the executable, so nothing about them is assumed from the data files" + }, + "ftol": 0, + "ftol_kind": "abs", + "ptr": "ignore" + }, + "Game::ServerSystem::ProcessTurn": { + "coverage": { + "state": "partial", + "unmodelled": [ + { + "mitigation": "guard:system", + "risk": "high", + "what": "the addiction sweep raises MoraleEvents, which are constructed and appended to the system's capped morale history", + "why": "the same class of write as B3's defect. sim::ProcessColonyTurn does compute the morale events (ColonyTurnResult), but the hook never emits them: DescribeMoraleEvents is dead code, so they are neither compared nor logged" + }, + { + "mitigation": "guard:system covers the system object only, not the other objects", + "risk": "high", + "what": "every callee: the plague pass, imperial and civilian growth, the resource debit, in-orbit refuel, slaves, rebellion and the build queue", + "why": "declared input boundary -- ProcessTurn is a dispatcher and only the words it writes itself are modelled. The callees raise EVENT_SLAVES_DEAD, EVENT_SYSTEM_REBELLION_CONTINUES, the plague events and SEBuildCompleted, create ships and bump per-player ShipRecords counters" + }, + { + "mitigation": "", + "risk": "medium", + "what": "ApplyInfraBonus / ApplyPopBonus read the owner's home-system id, and the build queue writes the owning ServerPlayer", + "why": "writes through a pointer to another object; no region reaches the player" + }, + { + "mitigation": "", + "risk": "low", + "what": "ProcessRebellion is the pass's only RNG consumer and its draw count is data-dependent", + "why": "the generator IS a declared region, so a moved post-state is visible and names the system whose rebellion fired -- it is reported, not modelled" + }, + { + "mitigation": "", + "risk": "medium", + "what": "replace mode is refused for this hook", + "why": "our side models the dispatcher's own writes and none of the callees, so a replace run would silently skip a colony's whole turn. There is therefore no oracle layer behind the compare for this hook" + } + ], + "why": "" + }, + "ftol": 0, + "ftol_kind": "abs", + "ptr": "ignore" + }, + "Game::StrategyHost::Autosave": { + "coverage": { + "state": "partial", + "unmodelled": [ + { + "mitigation": "region:rng is the only check; the turn's own correctness is B1/B3/B4's job", + "risk": "high", + "what": "everything the original writes except the strategic generator", + "why": "this hook family measures ONE thing -- how many words the generator advances and where. It declares no region over game state and makes no claim about it. A clean run here says the RNG accounting is right and says nothing whatever about whether the turn was computed correctly" + }, + { + "mitigation": "region:rng carries left/block/words, never a call count", + "risk": "low", + "what": "the ledger reports WORDS, not draws", + "why": "a NextInt that rejects three times is four words and one call. Words are the unit that decides whether a save reproduces; they are the wrong unit for counting decisions, and nothing here should be read as a draw count" + }, + { + "mitigation": "region:rng reads the state, so an inlined draw is as visible as a called one", + "risk": "low", + "what": "the ledger is deliberately blind to WHICH primitive spent a word", + "why": "that is the design, and it is why this instrument was preferred to hooking the primitives: the image has FOUR draw entry points (NextFloat 0x0047d830, NextInt 0x004271c0, Chance 0x008e6dd0 and NextUInt 0x004f7670, the last of which appears in no previous lane's primitive set) plus inlined draws in at least twelve functions, two of them reachable from the turn roots. A primitive-counting hook would have silently undercounted every one of those" + }, + { + "mitigation": "region:rng emits null explicitly; tracecmp shows it as a value, not a gap", + "risk": "medium", + "what": "a generator position the ledger cannot place reads `words: null`", + "why": "a block more than 4096 twists ahead of the frontier, or any state behind the anchor, is reported unknown rather than guessed. A null in a ledger field is a measurement failure and must not be read as zero" + }, + { + "mitigation": "region:rng only", + "risk": "low", + "what": "the whole save write: four path buffers, the ENDTURN pair removal, the backup rotation, the per-player connection detach/reattach, and SaveGame_WriteFile 0x00877070 itself", + "why": "this hook exists to timestamp the generator at the two moments the two save files are written. It is a marker and models nothing" + }, + { + "mitigation": "arg:server_cached / host_plus_0x54 / server_agrees say which pointer was used and whether the +0x54 candidate is the same object", + "risk": "medium", + "what": "the generator is reached through a CACHED StrategyServer pointer, not from this call's own arguments", + "why": "`this` is the global at 0x00b29f98, hardcoded by both call sites, and no argument here names the server. On the first pre-turn autosave after a load no turn driver has run yet, so the cache is empty and that record carries no ledger position -- the FIRST BRACKET OF A SESSION IS INCOMPLETE BY CONSTRUCTION and must not be read as a zero-cost turn" + } + ], + "why": "" + }, + "ftol": 0, + "ftol_kind": "abs", + "ptr": "ignore" + }, + "Game::StrategyServer::ApplyEncounterResult": { + "coverage": { + "state": "partial", + "unmodelled": [ + { + "mitigation": "region:rng is the only check; the turn's own correctness is B1/B3/B4's job", + "risk": "high", + "what": "everything the original writes except the strategic generator", + "why": "this hook family measures ONE thing -- how many words the generator advances and where. It declares no region over game state and makes no claim about it. A clean run here says the RNG accounting is right and says nothing whatever about whether the turn was computed correctly" + }, + { + "mitigation": "region:rng carries left/block/words, never a call count", + "risk": "low", + "what": "the ledger reports WORDS, not draws", + "why": "a NextInt that rejects three times is four words and one call. Words are the unit that decides whether a save reproduces; they are the wrong unit for counting decisions, and nothing here should be read as a draw count" + }, + { + "mitigation": "region:rng reads the state, so an inlined draw is as visible as a called one", + "risk": "low", + "what": "the ledger is deliberately blind to WHICH primitive spent a word", + "why": "that is the design, and it is why this instrument was preferred to hooking the primitives: the image has FOUR draw entry points (NextFloat 0x0047d830, NextInt 0x004271c0, Chance 0x008e6dd0 and NextUInt 0x004f7670, the last of which appears in no previous lane's primitive set) plus inlined draws in at least twelve functions, two of them reachable from the turn roots. A primitive-counting hook would have silently undercounted every one of those" + }, + { + "mitigation": "region:rng emits null explicitly; tracecmp shows it as a value, not a gap", + "risk": "medium", + "what": "a generator position the ledger cannot place reads `words: null`", + "why": "a block more than 4096 twists ahead of the frontier, or any state behind the anchor, is reported unknown rather than guessed. A null in a ledger field is a measurement failure and must not be read as zero" + }, + { + "mitigation": "region:rng measures the subtotal", + "risk": "high", + "what": "the combat resolver 0x007d5af0 (7499 B) is completely unread", + "why": "this hook measures what its subtree spends and models none of it. Nothing about combat determinism can be settled until that function is read; this only puts a number on the hole" + }, + { + "mitigation": "", + "risk": "medium", + "what": "the ~0xea0-byte combat report, the CombatReport list append at S+0x1fc, the ClientEncounterResults push into S+0x2f4, the per-ship turn stamps and the pairwise engagement bits", + "why": "all of it is game state this hook does not declare and does not check" + } + ], + "why": "" + }, + "ftol": 0, + "ftol_kind": "abs", + "ptr": "ignore" + }, + "Game::StrategyServer::MoveFleet": { + "coverage": { + "state": "partial", + "unmodelled": [ + { + "mitigation": "guard:fleet sees the fleet's own words; the event and the system do not", + "risk": "high", + "what": "on arrival: dispatches SEFleetArrived and runs one of three arrival handlers by destination kind (enter system / join fleet / stop at point)", + "why": "declared input boundary -- an arriving call is expected to differ in all of it, and none of it is declared, so the compare says nothing about arrivals" + }, + { + "mitigation": "", + "risk": "high", + "what": "on departure: cancels every still-acting ship (with a log line each) and calls ServerSystem::FleetDeparts, which rewrites the system's ownership bits", + "why": "writes through pointers to ships and to the system" + }, + { + "mitigation": "", + "risk": "medium", + "what": "the tanker top-up refuels other ships in the fleet", + "why": "the per-ship range regions would show it, but ours does not model it, so a fleet with a tanker diverges for a known reason" + }, + { + "mitigation": "declared gap: docs/B4.md", + "risk": "medium", + "what": "a node-line waypoint's step comes from the stutter profile", + "why": "NodeLineStep / BuildStutterSegments are written and unit-tested but not wired in; the hook steps every waypoint type as speed x dt, so a node-line leg is knowingly mis-stepped and only its type is recorded" + }, + { + "mitigation": "", + "risk": "medium", + "what": "a missed probabilistic jump scatters the fleet in a random direction", + "why": "the direction is a second draw whose mapping is not modelled; ours leaves the position alone and reports the scatter distance, so the generator region diverges by one word on a miss" + }, + { + "mitigation": "", + "risk": "medium", + "what": "the route revalidation and the waypoint list itself", + "why": "declared input boundary; the waypoint vector is not a region" + } + ], + "why": "" + }, + "ftol": 0, + "ftol_kind": "abs", + "ptr": "ignore" + }, + "Game::StrategyServer::NodeLineDecay": { + "coverage": { + "state": "partial", + "unmodelled": [ + { + "mitigation": "region:rng is the only check; the turn's own correctness is B1/B3/B4's job", + "risk": "high", + "what": "everything the original writes except the strategic generator", + "why": "this hook family measures ONE thing -- how many words the generator advances and where. It declares no region over game state and makes no claim about it. A clean run here says the RNG accounting is right and says nothing whatever about whether the turn was computed correctly" + }, + { + "mitigation": "region:rng carries left/block/words, never a call count", + "risk": "low", + "what": "the ledger reports WORDS, not draws", + "why": "a NextInt that rejects three times is four words and one call. Words are the unit that decides whether a save reproduces; they are the wrong unit for counting decisions, and nothing here should be read as a draw count" + }, + { + "mitigation": "region:rng reads the state, so an inlined draw is as visible as a called one", + "risk": "low", + "what": "the ledger is deliberately blind to WHICH primitive spent a word", + "why": "that is the design, and it is why this instrument was preferred to hooking the primitives: the image has FOUR draw entry points (NextFloat 0x0047d830, NextInt 0x004271c0, Chance 0x008e6dd0 and NextUInt 0x004f7670, the last of which appears in no previous lane's primitive set) plus inlined draws in at least twelve functions, two of them reachable from the turn roots. A primitive-counting hook would have silently undercounted every one of those" + }, + { + "mitigation": "region:rng emits null explicitly; tracecmp shows it as a value, not a gap", + "risk": "medium", + "what": "a generator position the ledger cannot place reads `words: null`", + "why": "a block more than 4096 twists ahead of the frontier, or any state behind the anchor, is reported unknown rather than guessed. A null in a ledger field is a measurement failure and must not be read as zero" + }, + { + "mitigation": "region:rng only", + "risk": "high", + "what": "the collapse itself: 0x007a92e0 (690 B) and 0x007a4700 (2244 B) destroy or halt fleets and post EVENT_NODEDECAY_FLEET_DESTROYED_VIANODE / _HALTED / _HALTED_VIANODE, and loop 3 posts two more decay-stage events", + "why": "ours advances the generator and writes nothing else. In compare mode that is the intent -- the check is the word count -- but it means a clean verdict here says nothing about which lines actually collapsed" + }, + { + "mitigation": "arg:predict_words vs region:rng is exactly that check", + "risk": "medium", + "what": "the draw-count model is verified by a DIRECT-call sweep of the downstream pair; their subtrees contain unresolved indirect call sites", + "why": "if one of those vtable slots reaches a generator, the measured delta will exceed `predict_words` and this hook will diverge -- which is the correct outcome, and the reason the prediction is recorded as an argument" + }, + { + "mitigation": "", + "risk": "low", + "what": "the expiry formula reproduces a signed idiv on nptf/npdtf without knowing whether nptf can be negative", + "why": "the original never sign-checks the traffic accumulator. The model truncates toward zero the same way; if the field is always non-negative the question never arises, and no save has been observed with a negative one" + } + ], + "why": "" + }, + "ftol": 0, + "ftol_kind": "abs", + "ptr": "ignore" + }, + "Game::StrategyServer::OnAllCombatDone_Tail": { + "coverage": { + "state": "partial", + "unmodelled": [ + { + "mitigation": "region:rng is the only check; the turn's own correctness is B1/B3/B4's job", + "risk": "high", + "what": "everything the original writes except the strategic generator", + "why": "this hook family measures ONE thing -- how many words the generator advances and where. It declares no region over game state and makes no claim about it. A clean run here says the RNG accounting is right and says nothing whatever about whether the turn was computed correctly" + }, + { + "mitigation": "region:rng carries left/block/words, never a call count", + "risk": "low", + "what": "the ledger reports WORDS, not draws", + "why": "a NextInt that rejects three times is four words and one call. Words are the unit that decides whether a save reproduces; they are the wrong unit for counting decisions, and nothing here should be read as a draw count" + }, + { + "mitigation": "region:rng reads the state, so an inlined draw is as visible as a called one", + "risk": "low", + "what": "the ledger is deliberately blind to WHICH primitive spent a word", + "why": "that is the design, and it is why this instrument was preferred to hooking the primitives: the image has FOUR draw entry points (NextFloat 0x0047d830, NextInt 0x004271c0, Chance 0x008e6dd0 and NextUInt 0x004f7670, the last of which appears in no previous lane's primitive set) plus inlined draws in at least twelve functions, two of them reachable from the turn roots. A primitive-counting hook would have silently undercounted every one of those" + }, + { + "mitigation": "region:rng emits null explicitly; tracecmp shows it as a value, not a gap", + "risk": "medium", + "what": "a generator position the ledger cannot place reads `words: null`", + "why": "a block more than 4096 twists ahead of the frontier, or any state behind the anchor, is reported unknown rather than guessed. A null in a ledger field is a measurement failure and must not be read as zero" + }, + { + "mitigation": "region:rng plus the two nested hooks", + "risk": "high", + "what": "36 phases, of which two can draw and neither is modelled here", + "why": "phase 6 reaches the unread 7499-byte combat resolver 0x007d5af0 (NextInt on the node-cannon path, Twist plus NextInt on the salvage path) and phase 11 draws one word per expired node line. `predict_nodeline_words` covers only the second, and the nested ApplyEncounterResult / NodeLineDecay hooks are what attribute the split" + }, + { + "mitigation": "arg:encounters says how many encounters this call saw; a call with 0 settles it", + "risk": "medium", + "what": "whether this handler runs on a turn with NO combat is what this hook is here to settle, and until it has run it is a hypothesis", + "why": "combat-done-tail.md \u00c2\u00a76 infers it from the determinism note -- the post-turn autosave appears on every End Turn and this handler is its only reachable caller -- not from the instruction stream" + } + ], + "why": "" + }, + "ftol": 0, + "ftol_kind": "abs", + "ptr": "ignore" + }, + "Game::StrategyServer::ProcessFleetMovement": { + "coverage": { + "state": "partial", + "unmodelled": [ + { + "mitigation": "", + "risk": "high", + "what": "`ours` re-reads the LIVE fleet list after the original has run", + "why": "the gate-traffic total is computed by the original at the very end of the pass, so a pre-call snapshot would diverge for the wrong reason. It breaks the compare invariant that ours never touches live memory, and it makes this hook's verdict partly self-fulfilling: the input to our arithmetic is the original's own post-move state" + }, + { + "mitigation": "", + "risk": "high", + "what": "drives MoveFleet up to five times per fleet", + "why": "every undeclared effect of MoveFleet happens inside this call too; the pass schedule is recorded in the arguments but never compared" + }, + { + "mitigation": "", + "risk": "high", + "what": "writes FPdpos into every fleet and clears flags 0x2 and 0x100 on every fleet", + "why": "no region covers the fleets, only the players' gate-traffic words" + }, + { + "mitigation": "", + "risk": "high", + "what": "OnFleetArrived posts EVENT_FLEET_ARRIVED", + "why": "the same class of write as B3's defect, and there is no replace mode for this hook, so nothing behind the compare could catch it either" + }, + { + "mitigation": "", + "risk": "medium", + "what": "the original accumulates by player->index but writes back by the player's position in the server vector, into a fixed 32-int array with no bounds check", + "why": "a real latent bug in the original that our side reproduces only while index == position; the reference save never separates them" + }, + { + "mitigation": "", + "risk": "medium", + "what": "PassSchedule() is never called by the hook, and FleetSummary::targetFleetId / relation are never filled", + "why": "the header claims ours predicts the call order for a trace to check; that prediction is not actually emitted" + } + ], + "why": "" + }, + "ftol": 0, + "ftol_kind": "abs", + "ptr": "ignore" + }, + "Game::StrategyServer::ProcessNodeSpaceTravel": { + "coverage": { + "state": "partial", + "unmodelled": [ + { + "mitigation": "region:rng is the only check; the turn's own correctness is B1/B3/B4's job", + "risk": "high", + "what": "everything the original writes except the strategic generator", + "why": "this hook family measures ONE thing -- how many words the generator advances and where. It declares no region over game state and makes no claim about it. A clean run here says the RNG accounting is right and says nothing whatever about whether the turn was computed correctly" + }, + { + "mitigation": "region:rng carries left/block/words, never a call count", + "risk": "low", + "what": "the ledger reports WORDS, not draws", + "why": "a NextInt that rejects three times is four words and one call. Words are the unit that decides whether a save reproduces; they are the wrong unit for counting decisions, and nothing here should be read as a draw count" + }, + { + "mitigation": "region:rng reads the state, so an inlined draw is as visible as a called one", + "risk": "low", + "what": "the ledger is deliberately blind to WHICH primitive spent a word", + "why": "that is the design, and it is why this instrument was preferred to hooking the primitives: the image has FOUR draw entry points (NextFloat 0x0047d830, NextInt 0x004271c0, Chance 0x008e6dd0 and NextUInt 0x004f7670, the last of which appears in no previous lane's primitive set) plus inlined draws in at least twelve functions, two of them reachable from the turn roots. A primitive-counting hook would have silently undercounted every one of those" + }, + { + "mitigation": "region:rng emits null explicitly; tracecmp shows it as a value, not a gap", + "risk": "medium", + "what": "a generator position the ledger cannot place reads `words: null`", + "why": "a block more than 4096 twists ahead of the frontier, or any state behind the anchor, is reported unknown rather than guessed. A null in a ledger field is a measurement failure and must not be read as zero" + }, + { + "mitigation": "region:rng", + "risk": "medium", + "what": "2945 bytes of node-space movement, entirely unmodelled and never swept for RNG by any lane", + "why": "it is hooked here only because it runs TWICE a turn -- ProcessTurn phase 7 and tail phase 10 -- so a draw inside it would be double-counted by anyone modelling it once. The record says whether it draws at all" + } + ], + "why": "" + }, + "ftol": 0, + "ftol_kind": "abs", + "ptr": "ignore" + }, + "Game::StrategyServer::ProcessTurn": { + "coverage": { + "state": "partial", + "unmodelled": [ + { + "mitigation": "region:rng is the only check; the turn's own correctness is B1/B3/B4's job", + "risk": "high", + "what": "everything the original writes except the strategic generator", + "why": "this hook family measures ONE thing -- how many words the generator advances and where. It declares no region over game state and makes no claim about it. A clean run here says the RNG accounting is right and says nothing whatever about whether the turn was computed correctly" + }, + { + "mitigation": "region:rng carries left/block/words, never a call count", + "risk": "low", + "what": "the ledger reports WORDS, not draws", + "why": "a NextInt that rejects three times is four words and one call. Words are the unit that decides whether a save reproduces; they are the wrong unit for counting decisions, and nothing here should be read as a draw count" + }, + { + "mitigation": "region:rng reads the state, so an inlined draw is as visible as a called one", + "risk": "low", + "what": "the ledger is deliberately blind to WHICH primitive spent a word", + "why": "that is the design, and it is why this instrument was preferred to hooking the primitives: the image has FOUR draw entry points (NextFloat 0x0047d830, NextInt 0x004271c0, Chance 0x008e6dd0 and NextUInt 0x004f7670, the last of which appears in no previous lane's primitive set) plus inlined draws in at least twelve functions, two of them reachable from the turn roots. A primitive-counting hook would have silently undercounted every one of those" + }, + { + "mitigation": "region:rng emits null explicitly; tracecmp shows it as a value, not a gap", + "risk": "medium", + "what": "a generator position the ledger cannot place reads `words: null`", + "why": "a block more than 4096 twists ahead of the frontier, or any state behind the anchor, is reported unknown rather than guessed. A null in a ledger field is a measurement failure and must not be read as zero" + }, + { + "mitigation": "region:rng measures the total; the per-phase split is not resolved here", + "risk": "high", + "what": "no model of the turn's RNG cost: 32 phases, each of which may draw", + "why": "ProcessResearch's completion roll, RollResearchAccident's NextInt(100), the ResearchRollPending roll (one word, or two on the plague path), and whatever ProcessStations / ProcessSurrenders / ProcessMissions / ProcessSpecialProjects spend -- none of which has ever been measured. `ours` predicts nothing and the record reports the measurement" + }, + { + "mitigation": "shim.log records the MH_CreateHook status for both", + "risk": "low", + "what": "this hook takes the address the fpu module also wants to sample", + "why": "MinHook allows one hook per target. `fpu.sample_turn=off` releases StrategyServer::ProcessTurn so this hook can install; with it on, this hook fails to install and the trace is missing half the ledger" + } + ], + "why": "" + }, + "ftol": 0, + "ftol_kind": "abs", + "ptr": "ignore" + }, + "Game::TechTree::ProcessResearch": { + "coverage": { + "state": "partial", + "unmodelled": [ + { + "mitigation": "region:events", + "risk": "medium", + "what": "posts EVENT_RESEARCH_OVERBUDGET on the owner's EventStorage: ours reproduces the decision and the id sequence, so region:events compares next_id, but the composed EvDsc/EvMsg text is not reproduced and no region can see it", + "why": "text comes from the game's string table, which the engine must not carry; ours posts into its own EventStorage and writes only the counts into the scratch copy, so no live byte moves and replace mode posts nothing at all" + }, + { + "mitigation": "region:events", + "risk": "low", + "what": "composes EVENT_TECHS_UNLOCKED's message from the unlocked techs' names", + "why": "the trigger and the list are modelled (SetResearched's availability sweep plus the tail collector, both read off the instruction stream), so region:events compares next_id; the names come from the game's string table, so the message is composed from node indices instead and is not the game's text" + }, + { + "mitigation": "guard:player, guard:tree_header", + "risk": "high", + "what": "TechTree::SetResearched in REPLACE mode: only its TechTree half runs, and only when research.replace_cascade=on", + "why": "with the flag OFF (the default) nothing of the cascade runs, so a replace run leaves the completed node unstamped and no tech unlocked. With it ON, the four TechNode words (costRP, turnAvailable, turnResearched, order) and the tree's completion-order counter are written live, and the ServerPlayer half is still not: no event is posted, no ObservedTech element is appended and no tech effect is applied. Neither setting is a full displacement of the completion path; the pair measures where the boundary is" + }, + { + "mitigation": "guard:player", + "risk": "high", + "what": "ServerPlayer::OnTechResearched's tech effects: the ~90 hard-coded ServerPlayer field writes, the plague-cure masks, the design-option bitmasks and the species tech flags", + "why": "B2's milestone. `ours` models only the two parts of the callback this hook's regions can see -- the observed-tech append and the RNG word RollResearchEvent draws before its branch (one word on a missed roll, two on a fired plague roll) -- and the rest is what the player guard reports" + }, + { + "mitigation": "region:rng", + "risk": "high", + "what": "the research-event branch RollResearchEvent takes when its roll beats the odds (ServerPlayer::OnResearchRollSucceeded: the plague and AI-rebellion event paths)", + "why": "RollResearchEvent draws one NextFloat unconditionally and that draw IS modelled -- but that is only the cost of REACHING the branch. A FIRED roll costs one or two words: the plague path draws a SECOND word (NextInt) to pick an owned system and posts EVENT_PLAGUE_OUTBREAK, while the rebellion path allocates an AIRebellion at ServerPlayer+0x3b8 and CANCELS the current research (no further draw). The branch is entered only for the plague and AI-rebellion tech families, whose odds are 0 everywhere else, and it has never been observed firing in three sessions -- which is why every earlier note in this repo said 'exactly one NextFloat' and nothing caught it. If it is ever entered, region:rng is the check" + }, + { + "mitigation": "region:observed_techs", + "risk": "medium", + "what": "constructs the ObservedTech element it appends to ServerPlayer+0x274", + "why": "`ours` models the append DECISION -- RecordObservedTech de-duplicates by tech name, so it decides whether the vector grows -- and moves the scratch header's byte span by one 0x2c element per append. The element's own fields (turn_first, turn_last, detected, the name string, `with`) are not built, and no region can see them" + }, + { + "mitigation": "guard:tree_header", + "risk": "low", + "what": "the tree's completion-order counter (TechTree+0x20) is read pre-call, not modelled as a region", + "why": "the per-node `order` word IS compared, and it is stamped from a counter `ours` seeds from the pre-call read and advances itself; the counter's own final value is only seen by the tree_header guard" + }, + { + "mitigation": "", + "risk": "low", + "what": "writes a completion line to the game log", + "why": "log text is not simulation state" + } + ], + "why": "" + }, + "ftol": 0, + "ftol_kind": "abs", + "ptr": "ignore" + }, + "Game::WeaponDictionary::Init": { + "coverage": { + "state": "partial", + "unmodelled": [ + { + "mitigation": "suspected cause of the sibling section hook's compare crash (docs/M2.md)", + "risk": "high", + "what": "LoadWeapon -> WeaponDef::ParseScript registers each weapon's name with the string table and resolves `requires` against the live TechTree", + "why": "per-file parsing is M3 scope; ours delegates to the game's own LoadWeapon, so a compare run performs the registration a SECOND time and neither the string table nor the tech tree is a declared region" + }, + { + "mitigation": "", + "risk": "low", + "what": "allocates 123 WeaponDef objects (0x278 bytes each) on the game heap", + "why": "the definitions do not exist when the hook is entered, so they cannot be a before-snapshot; the dictionary region compares them by id/name/path" + }, + { + "mitigation": "guard:dict", + "risk": "low", + "what": "the word at dictionary+0x14", + "why": "not modelled; emitted as an opaque pointer, which the default policy ignores -- a change is visible in a trace but never a divergence" + }, + { + "mitigation": "", + "risk": "low", + "what": "writes lines to the game log for a missing manifest", + "why": "log text is not simulation state" + }, + { + "mitigation": "", + "risk": "low", + "what": "std::sort tie order for equal weapon names", + "why": "msvc_sort.h replays MSVC 2010's introsort, but the shipped data has no tied names, so the tie rule is unexercised rather than verified" + } + ], + "why": "" + }, + "ftol": 0, + "ftol_kind": "abs", + "ptr": "ignore" + }, + "Mars::GlobalConsts::LoadFile": { + "coverage": { + "state": "partial", + "unmodelled": [ + { + "mitigation": "LoadAll's post-state would have to be hooked to see it", + "risk": "medium", + "what": "erases each consumed key from the caller's std::map", + "why": "the map is a LoadAll temporary; declaring a red-black tree as a region is not possible before the call. First-occurrence-wins is reproduced in game::config::apply instead, so the *effect* is modelled, the container is not" + }, + { + "mitigation": "", + "risk": "low", + "what": "writes three kinds of line to the game log (unrecognised key, applied key, expected-but-not-found)", + "why": "log text is not part of the simulation state" + }, + { + "mitigation": "", + "risk": "low", + "what": "opens the file through the VFS and allocates/releases a refcounted buffer", + "why": "ours performs the same two calls, so allocation behaviour matches by construction rather than by comparison" + }, + { + "mitigation": "", + "risk": "low", + "what": "String slots assign through the engine's own std::string, leaking one heap block per long string in compare mode", + "why": "start-up only; documented in docs/M1.md" + } + ], + "why": "" + }, + "ftol": 0, + "ftol_kind": "abs", + "ptr": "ignore" + }, + "Shim::SelfTest::Fill": { + "coverage": { + "state": "complete", + "unmodelled": [], + "why": "Fill writes buf[0..n) and nothing else; the whole range is a declared region" + }, + "ftol": 0, + "ftol_kind": "abs", + "ptr": "ignore" + } + }, + "inline_max": 256, + "started": "2026-09-09T13:33:54Z" + } + ], + "totals": { + "calls": 4, + "compared": 3, + "coverage_contradicted": 0, + "coverage_unstated": 0, + "diverged": 0, + "guarded_calls": 3, + "invalid_records": 0, + "undeclared_calls": 1, + "undeclared_writes": 6 + }, + "warnings": [] +} diff --git a/verify/results/compare/cr-compare.md b/verify/results/compare/cr-compare.md new file mode 100644 index 0000000..5ad972c --- /dev/null +++ b/verify/results/compare/cr-compare.md @@ -0,0 +1,28 @@ +## tracecmp report: N.trace.jsonl + +- build: cr-618ccb1-20260909T131556Z started: 2026-09-09T13:33:54Z inline_max: 256 +- calls: 4 compared: 3 diverged: 0 invalid records: 0 warnings: 0 +- coverage: 3 guarded call(s), 6 undeclared write(s) in 1 call(s); 0 hook(s) unstated, 0 contradicted + +| hook | calls | modes | compared | diverged | errors | +|---|---|---|---|---|---| +| Game::TechTree::ProcessResearch | 3 | compare:3 | 3 | 0 | 0 | +| Shim::SelfTest::Fill | 1 | trace:1 | 0 | 0 | 0 | + +### coverage + +| hook | verdict | compared regions | guards | undeclared writes | unmodelled | +|---|---|---|---|---|---| +| Game::TechTree::ProcessResearch | partial | events, node[0], node[105], node[106], node[107], node[108], +271 | player, tree_header | 6 in 1 call(s) | 8 | +| Shim::SelfTest::Fill | complete | buf | - | not watched | 0 | + +#### Game::TechTree::ProcessResearch — not checked by this run +- (medium) posts EVENT_RESEARCH_OVERBUDGET on the owner's EventStorage: ours reproduces the decision and the id sequence, so region:events compares next_id, but the composed EvDsc/EvMsg text is not reproduced and no region can see it — text comes from the game's string table, which the engine must not carry; ours posts into its own EventStorage and writes only the counts into the scratch copy, so no live byte moves and replace mode posts nothing at all [region:events] +- (low) composes EVENT_TECHS_UNLOCKED's message from the unlocked techs' names — the trigger and the list are modelled (SetResearched's availability sweep plus the tail collector, both read off the instruction stream), so region:events compares next_id; the names come from the game's string table, so the message is composed from node indices instead and is not the game's text [region:events] +- (high) TechTree::SetResearched in REPLACE mode: only its TechTree half runs, and only when research.replace_cascade=on — with the flag OFF (the default) nothing of the cascade runs, so a replace run leaves the completed node unstamped and no tech unlocked. With it ON, the four TechNode words (costRP, turnAvailable, turnResearched, order) and the tree's completion-order counter are written live, and the ServerPlayer half is still not: no event is posted, no ObservedTech element is appended and no tech effect is applied. Neither setting is a full displacement of the completion path; the pair measures where the boundary is [guard:player, guard:tree_header] +- (high) ServerPlayer::OnTechResearched's tech effects: the ~90 hard-coded ServerPlayer field writes, the plague-cure masks, the design-option bitmasks and the species tech flags — B2's milestone. `ours` models only the two parts of the callback this hook's regions can see -- the observed-tech append and the RNG word RollResearchEvent draws before its branch (one word on a missed roll, two on a fired plague roll) -- and the rest is what the player guard reports [guard:player] +- (high) the research-event branch RollResearchEvent takes when its roll beats the odds (ServerPlayer::OnResearchRollSucceeded: the plague and AI-rebellion event paths) — RollResearchEvent draws one NextFloat unconditionally and that draw IS modelled -- but that is only the cost of REACHING the branch. A FIRED roll costs one or two words: the plague path draws a SECOND word (NextInt) to pick an owned system and posts EVENT_PLAGUE_OUTBREAK, while the rebellion path allocates an AIRebellion at ServerPlayer+0x3b8 and CANCELS the current research (no further draw). The branch is entered only for the plague and AI-rebellion tech families, whose odds are 0 everywhere else, and it has never been observed firing in three sessions -- which is why every earlier note in this repo said 'exactly one NextFloat' and nothing caught it. If it is ever entered, region:rng is the check [region:rng] +- (medium) constructs the ObservedTech element it appends to ServerPlayer+0x274 — `ours` models the append DECISION -- RecordObservedTech de-duplicates by tech name, so it decides whether the vector grows -- and moves the scratch header's byte span by one 0x2c element per append. The element's own fields (turn_first, turn_last, detected, the name string, `with`) are not built, and no region can see them [region:observed_techs] +- (low) the tree's completion-order counter (TechTree+0x20) is read pre-call, not modelled as a region — the per-node `order` word IS compared, and it is stamped from a counter `ours` seeds from the pre-call read and advances itself; the counter's own final value is only seen by the tree_header guard [guard:tree_header] +- (low) writes a completion line to the game log — log text is not simulation state +- guard hits in compare mode: player+0x10c:3, player+0x110:3, player+0x114:3, player+0x124:3, player+0x294:4, tree_header+0x20:1 diff --git a/verify/results/compare/cr-replace0.json b/verify/results/compare/cr-replace0.json new file mode 100644 index 0000000..0f50787 --- /dev/null +++ b/verify/results/compare/cr-replace0.json @@ -0,0 +1,1329 @@ +{ + "coverage_contradicted": [], + "coverage_unstated": [], + "format": 1, + "hooks": { + "Game::TechTree::ProcessResearch": { + "calls": 3, + "compared": 0, + "coverage": { + "checked_regions": [ + "events", + "node[0]", + "node[105]", + "node[106]", + "node[107]", + "node[108]", + "node[109]", + "node[10]", + "node[110]", + "node[111]", + "node[112]", + "node[113]", + "node[114]", + "node[115]", + "node[116]", + "node[117]", + "node[118]", + "node[119]", + "node[11]", + "node[120]", + "node[121]", + "node[122]", + "node[123]", + "node[124]", + "node[125]", + "node[126]", + "node[127]", + "node[128]", + "node[129]", + "node[12]", + "node[130]", + "node[131]", + "node[132]", + "node[133]", + "node[134]", + "node[135]", + "node[136]", + "node[137]", + "node[138]", + "node[139]", + "node[13]", + "node[140]", + "node[141]", + "node[142]", + "node[143]", + "node[144]", + "node[145]", + "node[146]", + "node[147]", + "node[148]", + "node[149]", + "node[14]", + "node[151]", + "node[152]", + "node[153]", + "node[154]", + "node[155]", + "node[156]", + "node[157]", + "node[158]", + "node[159]", + "node[15]", + "node[160]", + "node[161]", + "node[162]", + "node[163]", + "node[164]", + "node[165]", + "node[166]", + "node[167]", + "node[168]", + "node[169]", + "node[16]", + "node[170]", + "node[171]", + "node[172]", + "node[173]", + "node[174]", + "node[175]", + "node[177]", + "node[178]", + "node[179]", + "node[17]", + "node[180]", + "node[181]", + "node[182]", + "node[183]", + "node[184]", + "node[185]", + "node[186]", + "node[187]", + "node[188]", + "node[189]", + "node[18]", + "node[190]", + "node[191]", + "node[192]", + "node[193]", + "node[194]", + "node[195]", + "node[196]", + "node[197]", + "node[198]", + "node[199]", + "node[19]", + "node[1]", + "node[200]", + "node[201]", + "node[202]", + "node[203]", + "node[204]", + "node[205]", + "node[206]", + "node[207]", + "node[208]", + "node[209]", + "node[20]", + "node[210]", + "node[211]", + "node[212]", + "node[213]", + "node[214]", + "node[215]", + "node[216]", + "node[217]", + "node[218]", + "node[219]", + "node[21]", + "node[220]", + "node[221]", + "node[222]", + "node[223]", + "node[224]", + "node[225]", + "node[226]", + "node[227]", + "node[228]", + "node[229]", + "node[22]", + "node[230]", + "node[231]", + "node[232]", + "node[233]", + "node[234]", + "node[235]", + "node[236]", + "node[237]", + "node[238]", + "node[239]", + "node[23]", + "node[240]", + "node[241]", + "node[242]", + "node[243]", + "node[244]", + "node[245]", + "node[246]", + "node[247]", + "node[248]", + "node[249]", + "node[24]", + "node[250]", + "node[251]", + "node[252]", + "node[253]", + "node[254]", + "node[255]", + "node[256]", + "node[257]", + "node[258]", + "node[259]", + "node[25]", + "node[260]", + "node[261]", + "node[262]", + "node[263]", + "node[264]", + "node[265]", + "node[266]", + "node[267]", + "node[268]", + "node[269]", + "node[26]", + "node[270]", + "node[271]", + "node[272]", + "node[273]", + "node[274]", + "node[275]", + "node[276]", + "node[277]", + "node[278]", + "node[279]", + "node[27]", + "node[280]", + "node[281]", + "node[282]", + "node[283]", + "node[284]", + "node[285]", + "node[286]", + "node[287]", + "node[288]", + "node[289]", + "node[28]", + "node[290]", + "node[291]", + "node[292]", + "node[29]", + "node[2]", + "node[30]", + "node[31]", + "node[32]", + "node[33]", + "node[34]", + "node[35]", + "node[36]", + "node[37]", + "node[38]", + "node[39]", + "node[3]", + "node[40]", + "node[41]", + "node[42]", + "node[43]", + "node[44]", + "node[45]", + "node[46]", + "node[47]", + "node[48]", + "node[49]", + "node[4]", + "node[50]", + "node[51]", + "node[52]", + "node[53]", + "node[54]", + "node[55]", + "node[56]", + "node[57]", + "node[58]", + "node[5]", + "node[60]", + "node[61]", + "node[62]", + "node[63]", + "node[64]", + "node[65]", + "node[66]", + "node[67]", + "node[68]", + "node[69]", + "node[6]", + "node[70]", + "node[72]", + "node[74]", + "node[77]", + "node[78]", + "node[7]", + "node[80]", + "node[81]", + "node[85]", + "node[86]", + "node[87]", + "node[88]", + "node[89]", + "node[8]", + "node[90]", + "node[91]", + "node[92]", + "node[94]", + "node[98]", + "node[99]", + "node[9]", + "observed_techs", + "overbudget", + "rng" + ], + "guarded_calls": 3, + "guards": [ + "player", + "tree_header" + ], + "spans": { + "replace": [] + }, + "state": "partial", + "undeclared_calls": 0, + "undeclared_writes": 0, + "unmodelled": [ + { + "mitigation": "region:events", + "risk": "medium", + "what": "posts EVENT_RESEARCH_OVERBUDGET on the owner's EventStorage: ours reproduces the decision and the id sequence, so region:events compares next_id, but the composed EvDsc/EvMsg text is not reproduced and no region can see it", + "why": "text comes from the game's string table, which the engine must not carry; ours posts into its own EventStorage and writes only the counts into the scratch copy, so no live byte moves and replace mode posts nothing at all" + }, + { + "mitigation": "region:events", + "risk": "low", + "what": "composes EVENT_TECHS_UNLOCKED's message from the unlocked techs' names", + "why": "the trigger and the list are modelled (SetResearched's availability sweep plus the tail collector, both read off the instruction stream), so region:events compares next_id; the names come from the game's string table, so the message is composed from node indices instead and is not the game's text" + }, + { + "mitigation": "guard:player, guard:tree_header", + "risk": "high", + "what": "TechTree::SetResearched in REPLACE mode: only its TechTree half runs, and only when research.replace_cascade=on", + "why": "with the flag OFF (the default) nothing of the cascade runs, so a replace run leaves the completed node unstamped and no tech unlocked. With it ON, the four TechNode words (costRP, turnAvailable, turnResearched, order) and the tree's completion-order counter are written live, and the ServerPlayer half is still not: no event is posted, no ObservedTech element is appended and no tech effect is applied. Neither setting is a full displacement of the completion path; the pair measures where the boundary is" + }, + { + "mitigation": "guard:player", + "risk": "high", + "what": "ServerPlayer::OnTechResearched's tech effects: the ~90 hard-coded ServerPlayer field writes, the plague-cure masks, the design-option bitmasks and the species tech flags", + "why": "B2's milestone. `ours` models only the two parts of the callback this hook's regions can see -- the observed-tech append and the RNG word RollResearchEvent draws before its branch (one word on a missed roll, two on a fired plague roll) -- and the rest is what the player guard reports" + }, + { + "mitigation": "region:rng", + "risk": "high", + "what": "the research-event branch RollResearchEvent takes when its roll beats the odds (ServerPlayer::OnResearchRollSucceeded: the plague and AI-rebellion event paths)", + "why": "RollResearchEvent draws one NextFloat unconditionally and that draw IS modelled -- but that is only the cost of REACHING the branch. A FIRED roll costs one or two words: the plague path draws a SECOND word (NextInt) to pick an owned system and posts EVENT_PLAGUE_OUTBREAK, while the rebellion path allocates an AIRebellion at ServerPlayer+0x3b8 and CANCELS the current research (no further draw). The branch is entered only for the plague and AI-rebellion tech families, whose odds are 0 everywhere else, and it has never been observed firing in three sessions -- which is why every earlier note in this repo said 'exactly one NextFloat' and nothing caught it. If it is ever entered, region:rng is the check" + }, + { + "mitigation": "region:observed_techs", + "risk": "medium", + "what": "constructs the ObservedTech element it appends to ServerPlayer+0x274", + "why": "`ours` models the append DECISION -- RecordObservedTech de-duplicates by tech name, so it decides whether the vector grows -- and moves the scratch header's byte span by one 0x2c element per append. The element's own fields (turn_first, turn_last, detected, the name string, `with`) are not built, and no region can see them" + }, + { + "mitigation": "guard:tree_header", + "risk": "low", + "what": "the tree's completion-order counter (TechTree+0x20) is read pre-call, not modelled as a region", + "why": "the per-node `order` word IS compared, and it is stamped from a counter `ours` seeds from the pre-call read and advances itself; the counter's own final value is only seen by the tree_header guard" + }, + { + "mitigation": "", + "risk": "low", + "what": "writes a completion line to the game log", + "why": "log text is not simulation state" + } + ], + "verdict": "partial", + "why": "" + }, + "diffs": [], + "diverged": 0, + "diverged_call_ids": [], + "errors": 0, + "modes": { + "replace": 3 + } + }, + "Shim::SelfTest::Fill": { + "calls": 1, + "compared": 0, + "coverage": { + "checked_regions": [ + "buf" + ], + "guarded_calls": 0, + "guards": [], + "spans": {}, + "state": "complete", + "undeclared_calls": 0, + "undeclared_writes": 0, + "unmodelled": [], + "verdict": "complete", + "why": "Fill writes buf[0..n) and nothing else; the whole range is a declared region" + }, + "diffs": [], + "diverged": 0, + "diverged_call_ids": [], + "errors": 0, + "modes": { + "trace": 1 + } + } + }, + "inputs": [ + "/tmp/claude-1000/-home-alex/ec8e34f8-af37-4ef2-a309-ed6a15293097/scratchpad/out/R0.trace.jsonl" + ], + "invalid": [], + "kind": "report", + "meta": [ + { + "build": "cr-618ccb1-20260909T131556Z", + "exe_sha256": "970b7de729956a53094c7eb98aba4270aee98e2fed5daf0d39e290013c90c841", + "format": 1, + "hooks": { + "Game::EncounterDetect::AssignContacts": { + "coverage": { + "state": "partial", + "unmodelled": [ + { + "mitigation": "region:rng is the only check; the turn's own correctness is B1/B3/B4's job", + "risk": "high", + "what": "everything the original writes except the strategic generator", + "why": "this hook family measures ONE thing -- how many words the generator advances and where. It declares no region over game state and makes no claim about it. A clean run here says the RNG accounting is right and says nothing whatever about whether the turn was computed correctly" + }, + { + "mitigation": "region:rng carries left/block/words, never a call count", + "risk": "low", + "what": "the ledger reports WORDS, not draws", + "why": "a NextInt that rejects three times is four words and one call. Words are the unit that decides whether a save reproduces; they are the wrong unit for counting decisions, and nothing here should be read as a draw count" + }, + { + "mitigation": "region:rng reads the state, so an inlined draw is as visible as a called one", + "risk": "low", + "what": "the ledger is deliberately blind to WHICH primitive spent a word", + "why": "that is the design, and it is why this instrument was preferred to hooking the primitives: the image has FOUR draw entry points (NextFloat 0x0047d830, NextInt 0x004271c0, Chance 0x008e6dd0 and NextUInt 0x004f7670, the last of which appears in no previous lane's primitive set) plus inlined draws in at least twelve functions, two of them reachable from the turn roots. A primitive-counting hook would have silently undercounted every one of those" + }, + { + "mitigation": "region:rng emits null explicitly; tracecmp shows it as a value, not a gap", + "risk": "medium", + "what": "a generator position the ledger cannot place reads `words: null`", + "why": "a block more than 4096 twists ahead of the frontier, or any state behind the anchor, is reported unknown rather than guessed. A null in a ledger field is a measurement failure and must not be read as zero" + }, + { + "mitigation": "region:rng; arg:detectors/contacts/max_trials bound the expected count", + "risk": "medium", + "what": "the contact-to-detector assignment itself, and the two-pass outer loop", + "why": "this hook exists because the draw here is INLINED and therefore invisible to every call-graph sweep and to the entry-point detours -- it is the one site in ProcessTurn's closure that neither instrument can see. It measures the word cost of the whole call and models nothing" + }, + { + "mitigation": "arg:max_trials is the upper bound only", + "risk": "low", + "what": "the per-trial threshold is 0.25f or 0.0f depending on two tech lookups, and the accept test short-circuits the inner loop", + "why": "so the measured cost is between |contacts| and |contacts| x |detectors| and the exact number depends on tech state this hook does not read" + } + ], + "why": "" + }, + "ftol": 0, + "ftol_kind": "abs", + "ptr": "ignore" + }, + "Game::EncounterDetect::ProcessTeamRecord": { + "coverage": { + "state": "partial", + "unmodelled": [ + { + "mitigation": "region:rng is the only check; the turn's own correctness is B1/B3/B4's job", + "risk": "high", + "what": "everything the original writes except the strategic generator", + "why": "this hook family measures ONE thing -- how many words the generator advances and where. It declares no region over game state and makes no claim about it. A clean run here says the RNG accounting is right and says nothing whatever about whether the turn was computed correctly" + }, + { + "mitigation": "region:rng carries left/block/words, never a call count", + "risk": "low", + "what": "the ledger reports WORDS, not draws", + "why": "a NextInt that rejects three times is four words and one call. Words are the unit that decides whether a save reproduces; they are the wrong unit for counting decisions, and nothing here should be read as a draw count" + }, + { + "mitigation": "region:rng reads the state, so an inlined draw is as visible as a called one", + "risk": "low", + "what": "the ledger is deliberately blind to WHICH primitive spent a word", + "why": "that is the design, and it is why this instrument was preferred to hooking the primitives: the image has FOUR draw entry points (NextFloat 0x0047d830, NextInt 0x004271c0, Chance 0x008e6dd0 and NextUInt 0x004f7670, the last of which appears in no previous lane's primitive set) plus inlined draws in at least twelve functions, two of them reachable from the turn roots. A primitive-counting hook would have silently undercounted every one of those" + }, + { + "mitigation": "region:rng emits null explicitly; tracecmp shows it as a value, not a gap", + "risk": "medium", + "what": "a generator position the ledger cannot place reads `words: null`", + "why": "a block more than 4096 twists ahead of the frontier, or any state behind the anchor, is reported unknown rather than guessed. A null in a ledger field is a measurement failure and must not be read as zero" + }, + { + "mitigation": "region:rng; arg:gate/pred_contacts/pred_detectors are a prediction, not a check", + "risk": "medium", + "what": "the whole body of ProcessTeamRecord: the gate call, the two vector builds and the bucket construction", + "why": "this hook measures the word cost of the call and recomputes three integers the original derives from the same record. It models none of the work and asserts nothing about the contact assignment" + }, + { + "mitigation": "arg:fc_byte_vs_dword_disagreements; arg:entry_flags carries the raw values", + "risk": "medium", + "what": "`+0xfc` and `+0xfb` are read as BYTES, following lane I's reading of the classifier functions", + "why": "if either is really a wider field, every count here is wrong in the same direction and no cross-check inside this hook would notice. So the dword at +0xfc is read as well and any row where the two disagree is COUNTED, not silently resolved -- a non-zero disagreement count means the byte reading is unsafe on this workload" + }, + { + "mitigation": "arg:entries against the three class counts", + "risk": "low", + "what": "an entry whose object pointer is unreadable is skipped", + "why": "it is not counted into any of the three classes, so entries != contacts + detectors + neither is the signal that this happened" + } + ], + "why": "" + }, + "ftol": 0, + "ftol_kind": "abs", + "ptr": "ignore" + }, + "Game::SectionDictionary::SectionDictionary": { + "coverage": { + "state": "partial", + "unmodelled": [ + { + "mitigation": "see docs/M2.md; compare mode for this hook is not safe to run", + "risk": "high", + "what": "LoadSection registers each section with the string table and the live TechTree, and may append to the dictionary's own vector", + "why": "M3 scope; ours delegates to the game's LoadSection after the original has already built all 885 definitions, so the second pass registers duplicates -- the leading hypothesis for this hook's compare-mode crash" + }, + { + "mitigation": "", + "risk": "medium", + "what": "post-load validation pass over every definition's @-token against the string table", + "why": "runs after the loop and touches no declared region" + }, + { + "mitigation": "", + "risk": "low", + "what": "allocates 885 SectionDef objects (0x3d8 bytes each) on the game heap", + "why": "they do not exist at hook entry; compared by index/species/id/token" + }, + { + "mitigation": "guard:dict", + "risk": "low", + "what": "the word at dictionary+0x14", + "why": "not modelled; emitted as an ignored pointer" + }, + { + "mitigation": "", + "risk": "medium", + "what": "the before-snapshot of the object is uninitialised heap", + "why": "the hook is on the constructor, so `before` is meaningless and only `after` carries information" + } + ], + "why": "" + }, + "ftol": 0, + "ftol_kind": "abs", + "ptr": "ignore" + }, + "Game::ServerPlayer::ComputeBudget": { + "coverage": { + "state": "partial", + "unmodelled": [ + { + "mitigation": "declared input boundary; see budget_inputs.h", + "risk": "high", + "what": "slots 1, 2, 3, 4, 7 and 11 are produced by callees this milestone does not model (per-system output, trade, ship-carried population, a second manager, the build-queue spend)", + "why": "they are copied out of the original's own output and back into the same slots, so they match BY CONSTRUCTION and prove nothing" + }, + { + "mitigation": "guard:budget_object does not reach the ships; unverified", + "risk": "high", + "what": "ServerSystem::ComputeOutput repairs damaged ships in orbit", + "why": "replace mode runs the original a second time on a scratch Budget to harvest the six unmodelled slots, so that repair happens TWICE per turn in replace mode and nothing in the trace would show it" + }, + { + "mitigation": "logged as `inputs.live_difficulty` on every record", + "risk": "low", + "what": "the difficulty-mods row still DRIVES `ours` as two fitted constants", + "why": "the old note here said the row was 'not reachable from a ServerPlayer'. That was wrong: the record is at ServerPlayer+0x36c and every consumer calls DifficultyMods_Select(p->+0x36c, p). Lane L5 now snapshots it and emits it as `inputs.live_difficulty` alongside the fitted pair, so a run SHOWS whether the fit is right instead of assuming it. `ours` was deliberately left on the fitted constants so that this run is evidence about them; switching it over is the next lane's one-line change" + }, + { + "mitigation": "the record carries `inputs.live_consts` so the widths are readable, and tests/game_sim/test_economy.cpp pins all three at their boundaries", + "risk": "medium", + "what": "three of the four float widths this routine turns on are unexercised by any reference turn", + "why": "the savings-interest rate is a widened 0.01f and its boundary IS in the corpus (a treasury of 50,000 earns 499, not 500). The research yield factor is a widened 0.85f whose boundary needs a research money that is a multiple of 40,000, and the three research modifiers are summed in SINGLE precision, which needs two of them non-zero -- the corpus has shrm = TRM = 0. So a green compare here verifies one of the three and says nothing about the other two" + }, + { + "mitigation": "", + "risk": "low", + "what": "the research-allocation vector's heap block", + "why": "only the element count is compared; the three words are heap pointers the default policy ignores" + } + ], + "why": "" + }, + "ftol": 0, + "ftol_kind": "abs", + "ptr": "ignore" + }, + "Game::ServerPlayer::OnTechResearched": { + "coverage": { + "state": "partial", + "unmodelled": [ + { + "mitigation": "guard:player (EventStorage is inline at ServerPlayer+0x29c)", + "risk": "high", + "what": "posts EVENT_RESEARCH_COMPLETE / _UNDERBUDGET / _TEMPERANCE on the owner's EventStorage when !silent", + "why": "the same class of write as B3's defect, and this hook has no replace-mode oracle that could catch it: gotcha 4 in docs/B2.md says a changed save hash on a completion turn is expected and therefore not a finding" + }, + { + "mitigation": "", + "risk": "high", + "what": "writes every owned system's AI flag (CCC_AIVrus / CCC_AISlv), re-evaluates the arcology civilian cap, cures addiction and clears plague across systems AND ships", + "why": "writes through pointers to other objects; compare mode must not touch live state, and no region reaches them" + }, + { + "mitigation": "this is the extra draw B3 observed on a completion", + "risk": "high", + "what": "the pending plague-cure roll (ServerPlayer::RollResearchEvent)", + "why": "it draws one word from the strategic generator unconditionally, and a SECOND word (NextInt) when the roll beats the odds and takes the plague path -- which also posts EVENT_PLAGUE_OUTBREAK, while the rebellion path cancels the research. So a fired roll costs one or two words, not one; running it in compare mode would consume real randomness. The two words it guards are still cleared and the record says whether it would have fired" + }, + { + "mitigation": "", + "risk": "medium", + "what": "TechTree::SetResearched for the Zuul boarding-pod grant", + "why": "it would mutate the live tree, and it recurses" + }, + { + "mitigation": "region:node_bore, declared only when the block already exists", + "risk": "medium", + "what": "allocates or frees the node-bore block at ServerPlayer+0x308", + "why": "ours has no allocator the game's runtime could free, so replace mode calls the game's own updater -- which means replace mode never exercises our node-bore selection at all" + } + ], + "why": "" + }, + "ftol": 0, + "ftol_kind": "abs", + "ptr": "ignore" + }, + "Game::ServerPlayer::ProcessTurn": { + "coverage": { + "state": "partial", + "unmodelled": [ + { + "mitigation": "guard:player reports Sav, +0xc8 and +0xcc moving", + "risk": "high", + "what": "phases 2, 3 and 6 -- the savings apply Sav = SatAdd(budget[0], net), the three aid/trade records copied out of the budget, and the research refund -- are NOT declared and NOT compared", + "why": "all three are pure functions of ComputeBudget's 22-slot output and of ProcessResearch's overBudget out-parameter, and both live in the original's own stack frame ([ebp-0x90] and [ebp-0x14]). The three ways to reach them are each worse than not having them: call ComputeBudget ourselves (it repairs damaged ships in orbit -- harness-audit #6), read them out of the nested B1/B3 hooks (harness-audit #5, the self-fulfilling compare), or infer them from the observed Sav delta (the same trap). The formulas ARE written and unit-tested in player_turn_inputs.cpp; they are simply not wired into the verdict" + }, + { + "mitigation": "run hook.Game::ServerPlayer::ComputeBudget=compare alongside", + "risk": "high", + "what": "ComputeBudget (0x00863030) itself, including ServerSystem::ComputeOutput, which REPAIRS DAMAGED SHIPS IN ORBIT", + "why": "B1 is the hook that checks the budget; its ship-repair side effect happens inside this call too, once per system per player per turn" + }, + { + "mitigation": "guard:player, and hook.Game::TechTree::ProcessResearch=compare", + "risk": "high", + "what": "TechTree::ProcessResearch and the whole SetResearched / OnTechResearched cascade it can trigger: progress, the completion roll, the 5% decay sweep, the child-unlock cascade, ~90 tech-effect field writes, EVENT_RESEARCH_* and EVENT_TECHS_UNLOCKED", + "why": "declared input boundary. B3/U own it; this hook reports the pre-call research state and lets the player guard say how much moved" + }, + { + "mitigation": "region:rng shows the draws; nothing shows the systems it wrote", + "risk": "high", + "what": "RollResearchAccident (0x00889dc0) draws Mars::RNG::NextInt(100) whenever the research boost is non-zero, can apply progress loss across EVERY system, and posts EVENT_LABACCIDENT_{SMALL,MEDIUM,LARGE}", + "why": "it runs before ProcessResearch and gates it entirely. Its draws move the declared `rng` region, so they are visible -- but as an unexplained RNG divergence, not as their cause" + }, + { + "mitigation": "region:rng + region:roll_flags + guard:player; ours never rolls", + "risk": "high", + "what": "the ResearchRollPending roll: RollResearchEvent draws one NextFloat, and when it BEATS the odds the plague branch draws a SECOND word (NextInt) and posts EVENT_PLAGUE_OUTBREAK, while the rebellion branch allocates an AIRebellion at ServerPlayer+0x3b8 and cancels the current research", + "why": "every previous coverage note in this repo says 'exactly one NextFloat'. That is the cost of REACHING the branch; a fired roll costs one or two words. The branch has never been observed firing. `predict_roll` says whether we expected the roll, `region:rng` says what it actually cost, and `roll_flags` says whether ResErrRoll was consumed" + }, + { + "mitigation": "guard:player", + "risk": "medium", + "what": "ServerPlayer::ProcessSpecialProjects (0x00840fe0) and, for an AI player, ConstructionSpend (0x00817f90)", + "why": "1015 bytes of special-project state, plus the log line \"SpecialProject: %s completed investigation phase\"" + }, + { + "mitigation": "guard:player reports the EvNxID bump", + "risk": "medium", + "what": "the EVENT_NO_RESEARCH post at 0x0089168c, which appends to the player's EventStorage (+0x29c) and bumps EvNxID (+0x2b0)", + "why": "B3's exact failure mode: a list append outside every Result region. Its condition is fully known (ResT == 0, nothing completed this turn, and at least one state-2 tech exists) but ours posts nothing" + }, + { + "mitigation": "guard:player sees the header move only", + "risk": "low", + "what": "PruneRaidTargets (0x00863cf0) erases from the heap vector at +0x338", + "why": "the vector header is inside the player guard, but its elements are heap memory no region reaches, and the erase runs each removed element's scalar destructor" + }, + { + "mitigation": "region:bonus_header", + "risk": "low", + "what": "the timed-bonus element regions are captured from the PRE-CALL element addresses, and the sweep may shrink the vector under them", + "why": "erase moves data down inside the same buffer and only lowers _Mylast, so the addresses stay valid and readable. Elements past the new _Mylast are compared as stale bytes; `bonus_header` is the region that carries the count, and ours writes the same stale tail the original leaves" + }, + { + "mitigation": "", + "risk": "medium", + "what": "replace mode is refused for this hook", + "why": "ours models the driver's own writes and none of ComputeBudget, ProcessResearch, ProcessSpecialProjects or the raid-target prune. A replace run would leave a player in a state no code path produces, and there is therefore no oracle layer behind this compare" + } + ], + "why": "" + }, + "ftol": 0, + "ftol_kind": "abs", + "ptr": "ignore" + }, + "Game::ServerSystem::ComputeTotalOutput": { + "coverage": { + "state": "partial", + "unmodelled": [ + { + "mitigation": "declared input boundary", + "risk": "high", + "what": "the station count, as for GroupOutput", + "why": "`ours` assumes zero stations, so a system with an imperial population and a station diverges by the station factor" + }, + { + "mitigation": "declared input boundary", + "risk": "high", + "what": "the slave population and its xenotech adjustment", + "why": "the original's slave count is not a plain field: it runs the count through a per-species xenotech factor. `ours` takes the slave term as ZERO, so any system holding slaves diverges. The record logs the raw group-2 population sums so a divergence can be attributed" + }, + { + "mitigation": "declared input boundary", + "risk": "medium", + "what": "the capacity surplus the civilian term adds for the owner's own species", + "why": "the original calls the carrying-capacity helper twice with different out-parameter slots and adds max(0, B - A) to the civilian count; `ours` uses the raw civilian population. The surplus is zero except when the colony is at its cap" + }, + { + "mitigation": "", + "risk": "low", + "what": "the addiction phase", + "why": "`ours` assumes it is below 3, so ADDICTION_OUTPUT_MOD never applies; the record logs the system's addiction table length so the case is visible" + } + ], + "why": "" + }, + "ftol": 0, + "ftol_kind": "abs", + "ptr": "ignore" + }, + "Game::ServerSystem::GroupOutput": { + "coverage": { + "state": "partial", + "unmodelled": [ + { + "mitigation": "declared input boundary; the trace makes it recoverable", + "risk": "high", + "what": "the station count that scales the imperial term", + "why": "the original gets it from a helper that walks the system's fleets and their ships through virtual calls and takes the system in EBX, which a hook cannot call portably. `ours` therefore assumes ZERO stations. A divergence on an imperial row is expected to be exactly the station factor, and the record carries `count` and the return, so the factor is MEASURED from the trace rather than fitted" + }, + { + "mitigation": "logged as `tuning` on every record", + "risk": "medium", + "what": "the slave row's output modifier, and every value the data files supply", + "why": "SLAVES_OUTPUT_MOD, the two morale thresholds and their two modifiers, and STATION_BONUS_IMPERIAL_OUTPUT are read out of the live process's globals and logged with every record, so the record says which value drove it" + } + ], + "why": "the imperial and civilian output modifiers, the 1.8 factor and the 500000 divisor are literals inside the executable, so nothing about them is assumed from the data files" + }, + "ftol": 0, + "ftol_kind": "abs", + "ptr": "ignore" + }, + "Game::ServerSystem::ProcessTurn": { + "coverage": { + "state": "partial", + "unmodelled": [ + { + "mitigation": "guard:system", + "risk": "high", + "what": "the addiction sweep raises MoraleEvents, which are constructed and appended to the system's capped morale history", + "why": "the same class of write as B3's defect. sim::ProcessColonyTurn does compute the morale events (ColonyTurnResult), but the hook never emits them: DescribeMoraleEvents is dead code, so they are neither compared nor logged" + }, + { + "mitigation": "guard:system covers the system object only, not the other objects", + "risk": "high", + "what": "every callee: the plague pass, imperial and civilian growth, the resource debit, in-orbit refuel, slaves, rebellion and the build queue", + "why": "declared input boundary -- ProcessTurn is a dispatcher and only the words it writes itself are modelled. The callees raise EVENT_SLAVES_DEAD, EVENT_SYSTEM_REBELLION_CONTINUES, the plague events and SEBuildCompleted, create ships and bump per-player ShipRecords counters" + }, + { + "mitigation": "", + "risk": "medium", + "what": "ApplyInfraBonus / ApplyPopBonus read the owner's home-system id, and the build queue writes the owning ServerPlayer", + "why": "writes through a pointer to another object; no region reaches the player" + }, + { + "mitigation": "", + "risk": "low", + "what": "ProcessRebellion is the pass's only RNG consumer and its draw count is data-dependent", + "why": "the generator IS a declared region, so a moved post-state is visible and names the system whose rebellion fired -- it is reported, not modelled" + }, + { + "mitigation": "", + "risk": "medium", + "what": "replace mode is refused for this hook", + "why": "our side models the dispatcher's own writes and none of the callees, so a replace run would silently skip a colony's whole turn. There is therefore no oracle layer behind the compare for this hook" + } + ], + "why": "" + }, + "ftol": 0, + "ftol_kind": "abs", + "ptr": "ignore" + }, + "Game::StrategyHost::Autosave": { + "coverage": { + "state": "partial", + "unmodelled": [ + { + "mitigation": "region:rng is the only check; the turn's own correctness is B1/B3/B4's job", + "risk": "high", + "what": "everything the original writes except the strategic generator", + "why": "this hook family measures ONE thing -- how many words the generator advances and where. It declares no region over game state and makes no claim about it. A clean run here says the RNG accounting is right and says nothing whatever about whether the turn was computed correctly" + }, + { + "mitigation": "region:rng carries left/block/words, never a call count", + "risk": "low", + "what": "the ledger reports WORDS, not draws", + "why": "a NextInt that rejects three times is four words and one call. Words are the unit that decides whether a save reproduces; they are the wrong unit for counting decisions, and nothing here should be read as a draw count" + }, + { + "mitigation": "region:rng reads the state, so an inlined draw is as visible as a called one", + "risk": "low", + "what": "the ledger is deliberately blind to WHICH primitive spent a word", + "why": "that is the design, and it is why this instrument was preferred to hooking the primitives: the image has FOUR draw entry points (NextFloat 0x0047d830, NextInt 0x004271c0, Chance 0x008e6dd0 and NextUInt 0x004f7670, the last of which appears in no previous lane's primitive set) plus inlined draws in at least twelve functions, two of them reachable from the turn roots. A primitive-counting hook would have silently undercounted every one of those" + }, + { + "mitigation": "region:rng emits null explicitly; tracecmp shows it as a value, not a gap", + "risk": "medium", + "what": "a generator position the ledger cannot place reads `words: null`", + "why": "a block more than 4096 twists ahead of the frontier, or any state behind the anchor, is reported unknown rather than guessed. A null in a ledger field is a measurement failure and must not be read as zero" + }, + { + "mitigation": "region:rng only", + "risk": "low", + "what": "the whole save write: four path buffers, the ENDTURN pair removal, the backup rotation, the per-player connection detach/reattach, and SaveGame_WriteFile 0x00877070 itself", + "why": "this hook exists to timestamp the generator at the two moments the two save files are written. It is a marker and models nothing" + }, + { + "mitigation": "arg:server_cached / host_plus_0x54 / server_agrees say which pointer was used and whether the +0x54 candidate is the same object", + "risk": "medium", + "what": "the generator is reached through a CACHED StrategyServer pointer, not from this call's own arguments", + "why": "`this` is the global at 0x00b29f98, hardcoded by both call sites, and no argument here names the server. On the first pre-turn autosave after a load no turn driver has run yet, so the cache is empty and that record carries no ledger position -- the FIRST BRACKET OF A SESSION IS INCOMPLETE BY CONSTRUCTION and must not be read as a zero-cost turn" + } + ], + "why": "" + }, + "ftol": 0, + "ftol_kind": "abs", + "ptr": "ignore" + }, + "Game::StrategyServer::ApplyEncounterResult": { + "coverage": { + "state": "partial", + "unmodelled": [ + { + "mitigation": "region:rng is the only check; the turn's own correctness is B1/B3/B4's job", + "risk": "high", + "what": "everything the original writes except the strategic generator", + "why": "this hook family measures ONE thing -- how many words the generator advances and where. It declares no region over game state and makes no claim about it. A clean run here says the RNG accounting is right and says nothing whatever about whether the turn was computed correctly" + }, + { + "mitigation": "region:rng carries left/block/words, never a call count", + "risk": "low", + "what": "the ledger reports WORDS, not draws", + "why": "a NextInt that rejects three times is four words and one call. Words are the unit that decides whether a save reproduces; they are the wrong unit for counting decisions, and nothing here should be read as a draw count" + }, + { + "mitigation": "region:rng reads the state, so an inlined draw is as visible as a called one", + "risk": "low", + "what": "the ledger is deliberately blind to WHICH primitive spent a word", + "why": "that is the design, and it is why this instrument was preferred to hooking the primitives: the image has FOUR draw entry points (NextFloat 0x0047d830, NextInt 0x004271c0, Chance 0x008e6dd0 and NextUInt 0x004f7670, the last of which appears in no previous lane's primitive set) plus inlined draws in at least twelve functions, two of them reachable from the turn roots. A primitive-counting hook would have silently undercounted every one of those" + }, + { + "mitigation": "region:rng emits null explicitly; tracecmp shows it as a value, not a gap", + "risk": "medium", + "what": "a generator position the ledger cannot place reads `words: null`", + "why": "a block more than 4096 twists ahead of the frontier, or any state behind the anchor, is reported unknown rather than guessed. A null in a ledger field is a measurement failure and must not be read as zero" + }, + { + "mitigation": "region:rng measures the subtotal", + "risk": "high", + "what": "the combat resolver 0x007d5af0 (7499 B) is completely unread", + "why": "this hook measures what its subtree spends and models none of it. Nothing about combat determinism can be settled until that function is read; this only puts a number on the hole" + }, + { + "mitigation": "", + "risk": "medium", + "what": "the ~0xea0-byte combat report, the CombatReport list append at S+0x1fc, the ClientEncounterResults push into S+0x2f4, the per-ship turn stamps and the pairwise engagement bits", + "why": "all of it is game state this hook does not declare and does not check" + } + ], + "why": "" + }, + "ftol": 0, + "ftol_kind": "abs", + "ptr": "ignore" + }, + "Game::StrategyServer::MoveFleet": { + "coverage": { + "state": "partial", + "unmodelled": [ + { + "mitigation": "guard:fleet sees the fleet's own words; the event and the system do not", + "risk": "high", + "what": "on arrival: dispatches SEFleetArrived and runs one of three arrival handlers by destination kind (enter system / join fleet / stop at point)", + "why": "declared input boundary -- an arriving call is expected to differ in all of it, and none of it is declared, so the compare says nothing about arrivals" + }, + { + "mitigation": "", + "risk": "high", + "what": "on departure: cancels every still-acting ship (with a log line each) and calls ServerSystem::FleetDeparts, which rewrites the system's ownership bits", + "why": "writes through pointers to ships and to the system" + }, + { + "mitigation": "", + "risk": "medium", + "what": "the tanker top-up refuels other ships in the fleet", + "why": "the per-ship range regions would show it, but ours does not model it, so a fleet with a tanker diverges for a known reason" + }, + { + "mitigation": "declared gap: docs/B4.md", + "risk": "medium", + "what": "a node-line waypoint's step comes from the stutter profile", + "why": "NodeLineStep / BuildStutterSegments are written and unit-tested but not wired in; the hook steps every waypoint type as speed x dt, so a node-line leg is knowingly mis-stepped and only its type is recorded" + }, + { + "mitigation": "", + "risk": "medium", + "what": "a missed probabilistic jump scatters the fleet in a random direction", + "why": "the direction is a second draw whose mapping is not modelled; ours leaves the position alone and reports the scatter distance, so the generator region diverges by one word on a miss" + }, + { + "mitigation": "", + "risk": "medium", + "what": "the route revalidation and the waypoint list itself", + "why": "declared input boundary; the waypoint vector is not a region" + } + ], + "why": "" + }, + "ftol": 0, + "ftol_kind": "abs", + "ptr": "ignore" + }, + "Game::StrategyServer::NodeLineDecay": { + "coverage": { + "state": "partial", + "unmodelled": [ + { + "mitigation": "region:rng is the only check; the turn's own correctness is B1/B3/B4's job", + "risk": "high", + "what": "everything the original writes except the strategic generator", + "why": "this hook family measures ONE thing -- how many words the generator advances and where. It declares no region over game state and makes no claim about it. A clean run here says the RNG accounting is right and says nothing whatever about whether the turn was computed correctly" + }, + { + "mitigation": "region:rng carries left/block/words, never a call count", + "risk": "low", + "what": "the ledger reports WORDS, not draws", + "why": "a NextInt that rejects three times is four words and one call. Words are the unit that decides whether a save reproduces; they are the wrong unit for counting decisions, and nothing here should be read as a draw count" + }, + { + "mitigation": "region:rng reads the state, so an inlined draw is as visible as a called one", + "risk": "low", + "what": "the ledger is deliberately blind to WHICH primitive spent a word", + "why": "that is the design, and it is why this instrument was preferred to hooking the primitives: the image has FOUR draw entry points (NextFloat 0x0047d830, NextInt 0x004271c0, Chance 0x008e6dd0 and NextUInt 0x004f7670, the last of which appears in no previous lane's primitive set) plus inlined draws in at least twelve functions, two of them reachable from the turn roots. A primitive-counting hook would have silently undercounted every one of those" + }, + { + "mitigation": "region:rng emits null explicitly; tracecmp shows it as a value, not a gap", + "risk": "medium", + "what": "a generator position the ledger cannot place reads `words: null`", + "why": "a block more than 4096 twists ahead of the frontier, or any state behind the anchor, is reported unknown rather than guessed. A null in a ledger field is a measurement failure and must not be read as zero" + }, + { + "mitigation": "region:rng only", + "risk": "high", + "what": "the collapse itself: 0x007a92e0 (690 B) and 0x007a4700 (2244 B) destroy or halt fleets and post EVENT_NODEDECAY_FLEET_DESTROYED_VIANODE / _HALTED / _HALTED_VIANODE, and loop 3 posts two more decay-stage events", + "why": "ours advances the generator and writes nothing else. In compare mode that is the intent -- the check is the word count -- but it means a clean verdict here says nothing about which lines actually collapsed" + }, + { + "mitigation": "arg:predict_words vs region:rng is exactly that check", + "risk": "medium", + "what": "the draw-count model is verified by a DIRECT-call sweep of the downstream pair; their subtrees contain unresolved indirect call sites", + "why": "if one of those vtable slots reaches a generator, the measured delta will exceed `predict_words` and this hook will diverge -- which is the correct outcome, and the reason the prediction is recorded as an argument" + }, + { + "mitigation": "", + "risk": "low", + "what": "the expiry formula reproduces a signed idiv on nptf/npdtf without knowing whether nptf can be negative", + "why": "the original never sign-checks the traffic accumulator. The model truncates toward zero the same way; if the field is always non-negative the question never arises, and no save has been observed with a negative one" + } + ], + "why": "" + }, + "ftol": 0, + "ftol_kind": "abs", + "ptr": "ignore" + }, + "Game::StrategyServer::OnAllCombatDone_Tail": { + "coverage": { + "state": "partial", + "unmodelled": [ + { + "mitigation": "region:rng is the only check; the turn's own correctness is B1/B3/B4's job", + "risk": "high", + "what": "everything the original writes except the strategic generator", + "why": "this hook family measures ONE thing -- how many words the generator advances and where. It declares no region over game state and makes no claim about it. A clean run here says the RNG accounting is right and says nothing whatever about whether the turn was computed correctly" + }, + { + "mitigation": "region:rng carries left/block/words, never a call count", + "risk": "low", + "what": "the ledger reports WORDS, not draws", + "why": "a NextInt that rejects three times is four words and one call. Words are the unit that decides whether a save reproduces; they are the wrong unit for counting decisions, and nothing here should be read as a draw count" + }, + { + "mitigation": "region:rng reads the state, so an inlined draw is as visible as a called one", + "risk": "low", + "what": "the ledger is deliberately blind to WHICH primitive spent a word", + "why": "that is the design, and it is why this instrument was preferred to hooking the primitives: the image has FOUR draw entry points (NextFloat 0x0047d830, NextInt 0x004271c0, Chance 0x008e6dd0 and NextUInt 0x004f7670, the last of which appears in no previous lane's primitive set) plus inlined draws in at least twelve functions, two of them reachable from the turn roots. A primitive-counting hook would have silently undercounted every one of those" + }, + { + "mitigation": "region:rng emits null explicitly; tracecmp shows it as a value, not a gap", + "risk": "medium", + "what": "a generator position the ledger cannot place reads `words: null`", + "why": "a block more than 4096 twists ahead of the frontier, or any state behind the anchor, is reported unknown rather than guessed. A null in a ledger field is a measurement failure and must not be read as zero" + }, + { + "mitigation": "region:rng plus the two nested hooks", + "risk": "high", + "what": "36 phases, of which two can draw and neither is modelled here", + "why": "phase 6 reaches the unread 7499-byte combat resolver 0x007d5af0 (NextInt on the node-cannon path, Twist plus NextInt on the salvage path) and phase 11 draws one word per expired node line. `predict_nodeline_words` covers only the second, and the nested ApplyEncounterResult / NodeLineDecay hooks are what attribute the split" + }, + { + "mitigation": "arg:encounters says how many encounters this call saw; a call with 0 settles it", + "risk": "medium", + "what": "whether this handler runs on a turn with NO combat is what this hook is here to settle, and until it has run it is a hypothesis", + "why": "combat-done-tail.md \u00c2\u00a76 infers it from the determinism note -- the post-turn autosave appears on every End Turn and this handler is its only reachable caller -- not from the instruction stream" + } + ], + "why": "" + }, + "ftol": 0, + "ftol_kind": "abs", + "ptr": "ignore" + }, + "Game::StrategyServer::ProcessFleetMovement": { + "coverage": { + "state": "partial", + "unmodelled": [ + { + "mitigation": "", + "risk": "high", + "what": "`ours` re-reads the LIVE fleet list after the original has run", + "why": "the gate-traffic total is computed by the original at the very end of the pass, so a pre-call snapshot would diverge for the wrong reason. It breaks the compare invariant that ours never touches live memory, and it makes this hook's verdict partly self-fulfilling: the input to our arithmetic is the original's own post-move state" + }, + { + "mitigation": "", + "risk": "high", + "what": "drives MoveFleet up to five times per fleet", + "why": "every undeclared effect of MoveFleet happens inside this call too; the pass schedule is recorded in the arguments but never compared" + }, + { + "mitigation": "", + "risk": "high", + "what": "writes FPdpos into every fleet and clears flags 0x2 and 0x100 on every fleet", + "why": "no region covers the fleets, only the players' gate-traffic words" + }, + { + "mitigation": "", + "risk": "high", + "what": "OnFleetArrived posts EVENT_FLEET_ARRIVED", + "why": "the same class of write as B3's defect, and there is no replace mode for this hook, so nothing behind the compare could catch it either" + }, + { + "mitigation": "", + "risk": "medium", + "what": "the original accumulates by player->index but writes back by the player's position in the server vector, into a fixed 32-int array with no bounds check", + "why": "a real latent bug in the original that our side reproduces only while index == position; the reference save never separates them" + }, + { + "mitigation": "", + "risk": "medium", + "what": "PassSchedule() is never called by the hook, and FleetSummary::targetFleetId / relation are never filled", + "why": "the header claims ours predicts the call order for a trace to check; that prediction is not actually emitted" + } + ], + "why": "" + }, + "ftol": 0, + "ftol_kind": "abs", + "ptr": "ignore" + }, + "Game::StrategyServer::ProcessNodeSpaceTravel": { + "coverage": { + "state": "partial", + "unmodelled": [ + { + "mitigation": "region:rng is the only check; the turn's own correctness is B1/B3/B4's job", + "risk": "high", + "what": "everything the original writes except the strategic generator", + "why": "this hook family measures ONE thing -- how many words the generator advances and where. It declares no region over game state and makes no claim about it. A clean run here says the RNG accounting is right and says nothing whatever about whether the turn was computed correctly" + }, + { + "mitigation": "region:rng carries left/block/words, never a call count", + "risk": "low", + "what": "the ledger reports WORDS, not draws", + "why": "a NextInt that rejects three times is four words and one call. Words are the unit that decides whether a save reproduces; they are the wrong unit for counting decisions, and nothing here should be read as a draw count" + }, + { + "mitigation": "region:rng reads the state, so an inlined draw is as visible as a called one", + "risk": "low", + "what": "the ledger is deliberately blind to WHICH primitive spent a word", + "why": "that is the design, and it is why this instrument was preferred to hooking the primitives: the image has FOUR draw entry points (NextFloat 0x0047d830, NextInt 0x004271c0, Chance 0x008e6dd0 and NextUInt 0x004f7670, the last of which appears in no previous lane's primitive set) plus inlined draws in at least twelve functions, two of them reachable from the turn roots. A primitive-counting hook would have silently undercounted every one of those" + }, + { + "mitigation": "region:rng emits null explicitly; tracecmp shows it as a value, not a gap", + "risk": "medium", + "what": "a generator position the ledger cannot place reads `words: null`", + "why": "a block more than 4096 twists ahead of the frontier, or any state behind the anchor, is reported unknown rather than guessed. A null in a ledger field is a measurement failure and must not be read as zero" + }, + { + "mitigation": "region:rng", + "risk": "medium", + "what": "2945 bytes of node-space movement, entirely unmodelled and never swept for RNG by any lane", + "why": "it is hooked here only because it runs TWICE a turn -- ProcessTurn phase 7 and tail phase 10 -- so a draw inside it would be double-counted by anyone modelling it once. The record says whether it draws at all" + } + ], + "why": "" + }, + "ftol": 0, + "ftol_kind": "abs", + "ptr": "ignore" + }, + "Game::StrategyServer::ProcessTurn": { + "coverage": { + "state": "partial", + "unmodelled": [ + { + "mitigation": "region:rng is the only check; the turn's own correctness is B1/B3/B4's job", + "risk": "high", + "what": "everything the original writes except the strategic generator", + "why": "this hook family measures ONE thing -- how many words the generator advances and where. It declares no region over game state and makes no claim about it. A clean run here says the RNG accounting is right and says nothing whatever about whether the turn was computed correctly" + }, + { + "mitigation": "region:rng carries left/block/words, never a call count", + "risk": "low", + "what": "the ledger reports WORDS, not draws", + "why": "a NextInt that rejects three times is four words and one call. Words are the unit that decides whether a save reproduces; they are the wrong unit for counting decisions, and nothing here should be read as a draw count" + }, + { + "mitigation": "region:rng reads the state, so an inlined draw is as visible as a called one", + "risk": "low", + "what": "the ledger is deliberately blind to WHICH primitive spent a word", + "why": "that is the design, and it is why this instrument was preferred to hooking the primitives: the image has FOUR draw entry points (NextFloat 0x0047d830, NextInt 0x004271c0, Chance 0x008e6dd0 and NextUInt 0x004f7670, the last of which appears in no previous lane's primitive set) plus inlined draws in at least twelve functions, two of them reachable from the turn roots. A primitive-counting hook would have silently undercounted every one of those" + }, + { + "mitigation": "region:rng emits null explicitly; tracecmp shows it as a value, not a gap", + "risk": "medium", + "what": "a generator position the ledger cannot place reads `words: null`", + "why": "a block more than 4096 twists ahead of the frontier, or any state behind the anchor, is reported unknown rather than guessed. A null in a ledger field is a measurement failure and must not be read as zero" + }, + { + "mitigation": "region:rng measures the total; the per-phase split is not resolved here", + "risk": "high", + "what": "no model of the turn's RNG cost: 32 phases, each of which may draw", + "why": "ProcessResearch's completion roll, RollResearchAccident's NextInt(100), the ResearchRollPending roll (one word, or two on the plague path), and whatever ProcessStations / ProcessSurrenders / ProcessMissions / ProcessSpecialProjects spend -- none of which has ever been measured. `ours` predicts nothing and the record reports the measurement" + }, + { + "mitigation": "shim.log records the MH_CreateHook status for both", + "risk": "low", + "what": "this hook takes the address the fpu module also wants to sample", + "why": "MinHook allows one hook per target. `fpu.sample_turn=off` releases StrategyServer::ProcessTurn so this hook can install; with it on, this hook fails to install and the trace is missing half the ledger" + } + ], + "why": "" + }, + "ftol": 0, + "ftol_kind": "abs", + "ptr": "ignore" + }, + "Game::TechTree::ProcessResearch": { + "coverage": { + "state": "partial", + "unmodelled": [ + { + "mitigation": "region:events", + "risk": "medium", + "what": "posts EVENT_RESEARCH_OVERBUDGET on the owner's EventStorage: ours reproduces the decision and the id sequence, so region:events compares next_id, but the composed EvDsc/EvMsg text is not reproduced and no region can see it", + "why": "text comes from the game's string table, which the engine must not carry; ours posts into its own EventStorage and writes only the counts into the scratch copy, so no live byte moves and replace mode posts nothing at all" + }, + { + "mitigation": "region:events", + "risk": "low", + "what": "composes EVENT_TECHS_UNLOCKED's message from the unlocked techs' names", + "why": "the trigger and the list are modelled (SetResearched's availability sweep plus the tail collector, both read off the instruction stream), so region:events compares next_id; the names come from the game's string table, so the message is composed from node indices instead and is not the game's text" + }, + { + "mitigation": "guard:player, guard:tree_header", + "risk": "high", + "what": "TechTree::SetResearched in REPLACE mode: only its TechTree half runs, and only when research.replace_cascade=on", + "why": "with the flag OFF (the default) nothing of the cascade runs, so a replace run leaves the completed node unstamped and no tech unlocked. With it ON, the four TechNode words (costRP, turnAvailable, turnResearched, order) and the tree's completion-order counter are written live, and the ServerPlayer half is still not: no event is posted, no ObservedTech element is appended and no tech effect is applied. Neither setting is a full displacement of the completion path; the pair measures where the boundary is" + }, + { + "mitigation": "guard:player", + "risk": "high", + "what": "ServerPlayer::OnTechResearched's tech effects: the ~90 hard-coded ServerPlayer field writes, the plague-cure masks, the design-option bitmasks and the species tech flags", + "why": "B2's milestone. `ours` models only the two parts of the callback this hook's regions can see -- the observed-tech append and the RNG word RollResearchEvent draws before its branch (one word on a missed roll, two on a fired plague roll) -- and the rest is what the player guard reports" + }, + { + "mitigation": "region:rng", + "risk": "high", + "what": "the research-event branch RollResearchEvent takes when its roll beats the odds (ServerPlayer::OnResearchRollSucceeded: the plague and AI-rebellion event paths)", + "why": "RollResearchEvent draws one NextFloat unconditionally and that draw IS modelled -- but that is only the cost of REACHING the branch. A FIRED roll costs one or two words: the plague path draws a SECOND word (NextInt) to pick an owned system and posts EVENT_PLAGUE_OUTBREAK, while the rebellion path allocates an AIRebellion at ServerPlayer+0x3b8 and CANCELS the current research (no further draw). The branch is entered only for the plague and AI-rebellion tech families, whose odds are 0 everywhere else, and it has never been observed firing in three sessions -- which is why every earlier note in this repo said 'exactly one NextFloat' and nothing caught it. If it is ever entered, region:rng is the check" + }, + { + "mitigation": "region:observed_techs", + "risk": "medium", + "what": "constructs the ObservedTech element it appends to ServerPlayer+0x274", + "why": "`ours` models the append DECISION -- RecordObservedTech de-duplicates by tech name, so it decides whether the vector grows -- and moves the scratch header's byte span by one 0x2c element per append. The element's own fields (turn_first, turn_last, detected, the name string, `with`) are not built, and no region can see them" + }, + { + "mitigation": "guard:tree_header", + "risk": "low", + "what": "the tree's completion-order counter (TechTree+0x20) is read pre-call, not modelled as a region", + "why": "the per-node `order` word IS compared, and it is stamped from a counter `ours` seeds from the pre-call read and advances itself; the counter's own final value is only seen by the tree_header guard" + }, + { + "mitigation": "", + "risk": "low", + "what": "writes a completion line to the game log", + "why": "log text is not simulation state" + } + ], + "why": "" + }, + "ftol": 0, + "ftol_kind": "abs", + "ptr": "ignore" + }, + "Game::WeaponDictionary::Init": { + "coverage": { + "state": "partial", + "unmodelled": [ + { + "mitigation": "suspected cause of the sibling section hook's compare crash (docs/M2.md)", + "risk": "high", + "what": "LoadWeapon -> WeaponDef::ParseScript registers each weapon's name with the string table and resolves `requires` against the live TechTree", + "why": "per-file parsing is M3 scope; ours delegates to the game's own LoadWeapon, so a compare run performs the registration a SECOND time and neither the string table nor the tech tree is a declared region" + }, + { + "mitigation": "", + "risk": "low", + "what": "allocates 123 WeaponDef objects (0x278 bytes each) on the game heap", + "why": "the definitions do not exist when the hook is entered, so they cannot be a before-snapshot; the dictionary region compares them by id/name/path" + }, + { + "mitigation": "guard:dict", + "risk": "low", + "what": "the word at dictionary+0x14", + "why": "not modelled; emitted as an opaque pointer, which the default policy ignores -- a change is visible in a trace but never a divergence" + }, + { + "mitigation": "", + "risk": "low", + "what": "writes lines to the game log for a missing manifest", + "why": "log text is not simulation state" + }, + { + "mitigation": "", + "risk": "low", + "what": "std::sort tie order for equal weapon names", + "why": "msvc_sort.h replays MSVC 2010's introsort, but the shipped data has no tied names, so the tie rule is unexercised rather than verified" + } + ], + "why": "" + }, + "ftol": 0, + "ftol_kind": "abs", + "ptr": "ignore" + }, + "Mars::GlobalConsts::LoadFile": { + "coverage": { + "state": "partial", + "unmodelled": [ + { + "mitigation": "LoadAll's post-state would have to be hooked to see it", + "risk": "medium", + "what": "erases each consumed key from the caller's std::map", + "why": "the map is a LoadAll temporary; declaring a red-black tree as a region is not possible before the call. First-occurrence-wins is reproduced in game::config::apply instead, so the *effect* is modelled, the container is not" + }, + { + "mitigation": "", + "risk": "low", + "what": "writes three kinds of line to the game log (unrecognised key, applied key, expected-but-not-found)", + "why": "log text is not part of the simulation state" + }, + { + "mitigation": "", + "risk": "low", + "what": "opens the file through the VFS and allocates/releases a refcounted buffer", + "why": "ours performs the same two calls, so allocation behaviour matches by construction rather than by comparison" + }, + { + "mitigation": "", + "risk": "low", + "what": "String slots assign through the engine's own std::string, leaking one heap block per long string in compare mode", + "why": "start-up only; documented in docs/M1.md" + } + ], + "why": "" + }, + "ftol": 0, + "ftol_kind": "abs", + "ptr": "ignore" + }, + "Shim::SelfTest::Fill": { + "coverage": { + "state": "complete", + "unmodelled": [], + "why": "Fill writes buf[0..n) and nothing else; the whole range is a declared region" + }, + "ftol": 0, + "ftol_kind": "abs", + "ptr": "ignore" + } + }, + "inline_max": 256, + "started": "2026-09-09T13:51:31Z" + } + ], + "totals": { + "calls": 4, + "compared": 0, + "coverage_contradicted": 0, + "coverage_unstated": 0, + "diverged": 0, + "guarded_calls": 3, + "invalid_records": 0, + "undeclared_calls": 0, + "undeclared_writes": 0 + }, + "warnings": [] +} diff --git a/verify/results/compare/cr-replace0.md b/verify/results/compare/cr-replace0.md new file mode 100644 index 0000000..c3f4f31 --- /dev/null +++ b/verify/results/compare/cr-replace0.md @@ -0,0 +1,27 @@ +## tracecmp report: R0.trace.jsonl + +- build: cr-618ccb1-20260909T131556Z started: 2026-09-09T13:51:31Z inline_max: 256 +- calls: 4 compared: 0 diverged: 0 invalid records: 0 warnings: 0 +- coverage: 3 guarded call(s), 0 undeclared write(s) in 0 call(s); 0 hook(s) unstated, 0 contradicted + +| hook | calls | modes | compared | diverged | errors | +|---|---|---|---|---|---| +| Game::TechTree::ProcessResearch | 3 | replace:3 | 0 | 0 | 0 | +| Shim::SelfTest::Fill | 1 | trace:1 | 0 | 0 | 0 | + +### coverage + +| hook | verdict | compared regions | guards | undeclared writes | unmodelled | +|---|---|---|---|---|---| +| Game::TechTree::ProcessResearch | partial | events, node[0], node[105], node[106], node[107], node[108], +271 | player, tree_header | 0 | 8 | +| Shim::SelfTest::Fill | complete | buf | - | not watched | 0 | + +#### Game::TechTree::ProcessResearch — not checked by this run +- (medium) posts EVENT_RESEARCH_OVERBUDGET on the owner's EventStorage: ours reproduces the decision and the id sequence, so region:events compares next_id, but the composed EvDsc/EvMsg text is not reproduced and no region can see it — text comes from the game's string table, which the engine must not carry; ours posts into its own EventStorage and writes only the counts into the scratch copy, so no live byte moves and replace mode posts nothing at all [region:events] +- (low) composes EVENT_TECHS_UNLOCKED's message from the unlocked techs' names — the trigger and the list are modelled (SetResearched's availability sweep plus the tail collector, both read off the instruction stream), so region:events compares next_id; the names come from the game's string table, so the message is composed from node indices instead and is not the game's text [region:events] +- (high) TechTree::SetResearched in REPLACE mode: only its TechTree half runs, and only when research.replace_cascade=on — with the flag OFF (the default) nothing of the cascade runs, so a replace run leaves the completed node unstamped and no tech unlocked. With it ON, the four TechNode words (costRP, turnAvailable, turnResearched, order) and the tree's completion-order counter are written live, and the ServerPlayer half is still not: no event is posted, no ObservedTech element is appended and no tech effect is applied. Neither setting is a full displacement of the completion path; the pair measures where the boundary is [guard:player, guard:tree_header] +- (high) ServerPlayer::OnTechResearched's tech effects: the ~90 hard-coded ServerPlayer field writes, the plague-cure masks, the design-option bitmasks and the species tech flags — B2's milestone. `ours` models only the two parts of the callback this hook's regions can see -- the observed-tech append and the RNG word RollResearchEvent draws before its branch (one word on a missed roll, two on a fired plague roll) -- and the rest is what the player guard reports [guard:player] +- (high) the research-event branch RollResearchEvent takes when its roll beats the odds (ServerPlayer::OnResearchRollSucceeded: the plague and AI-rebellion event paths) — RollResearchEvent draws one NextFloat unconditionally and that draw IS modelled -- but that is only the cost of REACHING the branch. A FIRED roll costs one or two words: the plague path draws a SECOND word (NextInt) to pick an owned system and posts EVENT_PLAGUE_OUTBREAK, while the rebellion path allocates an AIRebellion at ServerPlayer+0x3b8 and CANCELS the current research (no further draw). The branch is entered only for the plague and AI-rebellion tech families, whose odds are 0 everywhere else, and it has never been observed firing in three sessions -- which is why every earlier note in this repo said 'exactly one NextFloat' and nothing caught it. If it is ever entered, region:rng is the check [region:rng] +- (medium) constructs the ObservedTech element it appends to ServerPlayer+0x274 — `ours` models the append DECISION -- RecordObservedTech de-duplicates by tech name, so it decides whether the vector grows -- and moves the scratch header's byte span by one 0x2c element per append. The element's own fields (turn_first, turn_last, detected, the name string, `with`) are not built, and no region can see them [region:observed_techs] +- (low) the tree's completion-order counter (TechTree+0x20) is read pre-call, not modelled as a region — the per-node `order` word IS compared, and it is stamped from a counter `ours` seeds from the pre-call read and advances itself; the counter's own final value is only seen by the tree_header guard [guard:tree_header] +- (low) writes a completion line to the game log — log text is not simulation state diff --git a/verify/results/compare/cr-replace1.json b/verify/results/compare/cr-replace1.json new file mode 100644 index 0000000..fe04872 --- /dev/null +++ b/verify/results/compare/cr-replace1.json @@ -0,0 +1,1331 @@ +{ + "coverage_contradicted": [], + "coverage_unstated": [], + "format": 1, + "hooks": { + "Game::TechTree::ProcessResearch": { + "calls": 3, + "compared": 0, + "coverage": { + "checked_regions": [ + "events", + "node[0]", + "node[105]", + "node[106]", + "node[107]", + "node[108]", + "node[109]", + "node[10]", + "node[110]", + "node[111]", + "node[112]", + "node[113]", + "node[114]", + "node[115]", + "node[116]", + "node[117]", + "node[118]", + "node[119]", + "node[11]", + "node[120]", + "node[121]", + "node[122]", + "node[123]", + "node[124]", + "node[125]", + "node[126]", + "node[127]", + "node[128]", + "node[129]", + "node[12]", + "node[130]", + "node[131]", + "node[132]", + "node[133]", + "node[134]", + "node[135]", + "node[136]", + "node[137]", + "node[138]", + "node[139]", + "node[13]", + "node[140]", + "node[141]", + "node[142]", + "node[143]", + "node[144]", + "node[145]", + "node[146]", + "node[147]", + "node[148]", + "node[149]", + "node[14]", + "node[151]", + "node[152]", + "node[153]", + "node[154]", + "node[155]", + "node[156]", + "node[157]", + "node[158]", + "node[159]", + "node[15]", + "node[160]", + "node[161]", + "node[162]", + "node[163]", + "node[164]", + "node[165]", + "node[166]", + "node[167]", + "node[168]", + "node[169]", + "node[16]", + "node[170]", + "node[171]", + "node[172]", + "node[173]", + "node[174]", + "node[175]", + "node[177]", + "node[178]", + "node[179]", + "node[17]", + "node[180]", + "node[181]", + "node[182]", + "node[183]", + "node[184]", + "node[185]", + "node[186]", + "node[187]", + "node[188]", + "node[189]", + "node[18]", + "node[190]", + "node[191]", + "node[192]", + "node[193]", + "node[194]", + "node[195]", + "node[196]", + "node[197]", + "node[198]", + "node[199]", + "node[19]", + "node[1]", + "node[200]", + "node[201]", + "node[202]", + "node[203]", + "node[204]", + "node[205]", + "node[206]", + "node[207]", + "node[208]", + "node[209]", + "node[20]", + "node[210]", + "node[211]", + "node[212]", + "node[213]", + "node[214]", + "node[215]", + "node[216]", + "node[217]", + "node[218]", + "node[219]", + "node[21]", + "node[220]", + "node[221]", + "node[222]", + "node[223]", + "node[224]", + "node[225]", + "node[226]", + "node[227]", + "node[228]", + "node[229]", + "node[22]", + "node[230]", + "node[231]", + "node[232]", + "node[233]", + "node[234]", + "node[235]", + "node[236]", + "node[237]", + "node[238]", + "node[239]", + "node[23]", + "node[240]", + "node[241]", + "node[242]", + "node[243]", + "node[244]", + "node[245]", + "node[246]", + "node[247]", + "node[248]", + "node[249]", + "node[24]", + "node[250]", + "node[251]", + "node[252]", + "node[253]", + "node[254]", + "node[255]", + "node[256]", + "node[257]", + "node[258]", + "node[259]", + "node[25]", + "node[260]", + "node[261]", + "node[262]", + "node[263]", + "node[264]", + "node[265]", + "node[266]", + "node[267]", + "node[268]", + "node[269]", + "node[26]", + "node[270]", + "node[271]", + "node[272]", + "node[273]", + "node[274]", + "node[275]", + "node[276]", + "node[277]", + "node[278]", + "node[279]", + "node[27]", + "node[280]", + "node[281]", + "node[282]", + "node[283]", + "node[284]", + "node[285]", + "node[286]", + "node[287]", + "node[288]", + "node[289]", + "node[28]", + "node[290]", + "node[291]", + "node[292]", + "node[29]", + "node[2]", + "node[30]", + "node[31]", + "node[32]", + "node[33]", + "node[34]", + "node[35]", + "node[36]", + "node[37]", + "node[38]", + "node[39]", + "node[3]", + "node[40]", + "node[41]", + "node[42]", + "node[43]", + "node[44]", + "node[45]", + "node[46]", + "node[47]", + "node[48]", + "node[49]", + "node[4]", + "node[50]", + "node[51]", + "node[52]", + "node[53]", + "node[54]", + "node[55]", + "node[56]", + "node[57]", + "node[58]", + "node[5]", + "node[60]", + "node[61]", + "node[62]", + "node[63]", + "node[64]", + "node[65]", + "node[66]", + "node[67]", + "node[68]", + "node[69]", + "node[6]", + "node[70]", + "node[72]", + "node[74]", + "node[77]", + "node[78]", + "node[7]", + "node[80]", + "node[81]", + "node[85]", + "node[86]", + "node[87]", + "node[88]", + "node[89]", + "node[8]", + "node[90]", + "node[91]", + "node[92]", + "node[94]", + "node[98]", + "node[99]", + "node[9]", + "observed_techs", + "overbudget", + "rng" + ], + "guarded_calls": 3, + "guards": [ + "player", + "tree_header" + ], + "spans": { + "replace": [ + "tree_header+0x20:1" + ] + }, + "state": "partial", + "undeclared_calls": 1, + "undeclared_writes": 1, + "unmodelled": [ + { + "mitigation": "region:events", + "risk": "medium", + "what": "posts EVENT_RESEARCH_OVERBUDGET on the owner's EventStorage: ours reproduces the decision and the id sequence, so region:events compares next_id, but the composed EvDsc/EvMsg text is not reproduced and no region can see it", + "why": "text comes from the game's string table, which the engine must not carry; ours posts into its own EventStorage and writes only the counts into the scratch copy, so no live byte moves and replace mode posts nothing at all" + }, + { + "mitigation": "region:events", + "risk": "low", + "what": "composes EVENT_TECHS_UNLOCKED's message from the unlocked techs' names", + "why": "the trigger and the list are modelled (SetResearched's availability sweep plus the tail collector, both read off the instruction stream), so region:events compares next_id; the names come from the game's string table, so the message is composed from node indices instead and is not the game's text" + }, + { + "mitigation": "guard:player, guard:tree_header", + "risk": "high", + "what": "TechTree::SetResearched in REPLACE mode: only its TechTree half runs, and only when research.replace_cascade=on", + "why": "with the flag OFF (the default) nothing of the cascade runs, so a replace run leaves the completed node unstamped and no tech unlocked. With it ON, the four TechNode words (costRP, turnAvailable, turnResearched, order) and the tree's completion-order counter are written live, and the ServerPlayer half is still not: no event is posted, no ObservedTech element is appended and no tech effect is applied. Neither setting is a full displacement of the completion path; the pair measures where the boundary is" + }, + { + "mitigation": "guard:player", + "risk": "high", + "what": "ServerPlayer::OnTechResearched's tech effects: the ~90 hard-coded ServerPlayer field writes, the plague-cure masks, the design-option bitmasks and the species tech flags", + "why": "B2's milestone. `ours` models only the two parts of the callback this hook's regions can see -- the observed-tech append and the RNG word RollResearchEvent draws before its branch (one word on a missed roll, two on a fired plague roll) -- and the rest is what the player guard reports" + }, + { + "mitigation": "region:rng", + "risk": "high", + "what": "the research-event branch RollResearchEvent takes when its roll beats the odds (ServerPlayer::OnResearchRollSucceeded: the plague and AI-rebellion event paths)", + "why": "RollResearchEvent draws one NextFloat unconditionally and that draw IS modelled -- but that is only the cost of REACHING the branch. A FIRED roll costs one or two words: the plague path draws a SECOND word (NextInt) to pick an owned system and posts EVENT_PLAGUE_OUTBREAK, while the rebellion path allocates an AIRebellion at ServerPlayer+0x3b8 and CANCELS the current research (no further draw). The branch is entered only for the plague and AI-rebellion tech families, whose odds are 0 everywhere else, and it has never been observed firing in three sessions -- which is why every earlier note in this repo said 'exactly one NextFloat' and nothing caught it. If it is ever entered, region:rng is the check" + }, + { + "mitigation": "region:observed_techs", + "risk": "medium", + "what": "constructs the ObservedTech element it appends to ServerPlayer+0x274", + "why": "`ours` models the append DECISION -- RecordObservedTech de-duplicates by tech name, so it decides whether the vector grows -- and moves the scratch header's byte span by one 0x2c element per append. The element's own fields (turn_first, turn_last, detected, the name string, `with`) are not built, and no region can see them" + }, + { + "mitigation": "guard:tree_header", + "risk": "low", + "what": "the tree's completion-order counter (TechTree+0x20) is read pre-call, not modelled as a region", + "why": "the per-node `order` word IS compared, and it is stamped from a counter `ours` seeds from the pre-call read and advances itself; the counter's own final value is only seen by the tree_header guard" + }, + { + "mitigation": "", + "risk": "low", + "what": "writes a completion line to the game log", + "why": "log text is not simulation state" + } + ], + "verdict": "partial", + "why": "" + }, + "diffs": [], + "diverged": 0, + "diverged_call_ids": [], + "errors": 0, + "modes": { + "replace": 3 + } + }, + "Shim::SelfTest::Fill": { + "calls": 1, + "compared": 0, + "coverage": { + "checked_regions": [ + "buf" + ], + "guarded_calls": 0, + "guards": [], + "spans": {}, + "state": "complete", + "undeclared_calls": 0, + "undeclared_writes": 0, + "unmodelled": [], + "verdict": "complete", + "why": "Fill writes buf[0..n) and nothing else; the whole range is a declared region" + }, + "diffs": [], + "diverged": 0, + "diverged_call_ids": [], + "errors": 0, + "modes": { + "trace": 1 + } + } + }, + "inputs": [ + "/tmp/claude-1000/-home-alex/ec8e34f8-af37-4ef2-a309-ed6a15293097/scratchpad/out/R1.trace.jsonl" + ], + "invalid": [], + "kind": "report", + "meta": [ + { + "build": "cr-618ccb1-20260909T131556Z", + "exe_sha256": "970b7de729956a53094c7eb98aba4270aee98e2fed5daf0d39e290013c90c841", + "format": 1, + "hooks": { + "Game::EncounterDetect::AssignContacts": { + "coverage": { + "state": "partial", + "unmodelled": [ + { + "mitigation": "region:rng is the only check; the turn's own correctness is B1/B3/B4's job", + "risk": "high", + "what": "everything the original writes except the strategic generator", + "why": "this hook family measures ONE thing -- how many words the generator advances and where. It declares no region over game state and makes no claim about it. A clean run here says the RNG accounting is right and says nothing whatever about whether the turn was computed correctly" + }, + { + "mitigation": "region:rng carries left/block/words, never a call count", + "risk": "low", + "what": "the ledger reports WORDS, not draws", + "why": "a NextInt that rejects three times is four words and one call. Words are the unit that decides whether a save reproduces; they are the wrong unit for counting decisions, and nothing here should be read as a draw count" + }, + { + "mitigation": "region:rng reads the state, so an inlined draw is as visible as a called one", + "risk": "low", + "what": "the ledger is deliberately blind to WHICH primitive spent a word", + "why": "that is the design, and it is why this instrument was preferred to hooking the primitives: the image has FOUR draw entry points (NextFloat 0x0047d830, NextInt 0x004271c0, Chance 0x008e6dd0 and NextUInt 0x004f7670, the last of which appears in no previous lane's primitive set) plus inlined draws in at least twelve functions, two of them reachable from the turn roots. A primitive-counting hook would have silently undercounted every one of those" + }, + { + "mitigation": "region:rng emits null explicitly; tracecmp shows it as a value, not a gap", + "risk": "medium", + "what": "a generator position the ledger cannot place reads `words: null`", + "why": "a block more than 4096 twists ahead of the frontier, or any state behind the anchor, is reported unknown rather than guessed. A null in a ledger field is a measurement failure and must not be read as zero" + }, + { + "mitigation": "region:rng; arg:detectors/contacts/max_trials bound the expected count", + "risk": "medium", + "what": "the contact-to-detector assignment itself, and the two-pass outer loop", + "why": "this hook exists because the draw here is INLINED and therefore invisible to every call-graph sweep and to the entry-point detours -- it is the one site in ProcessTurn's closure that neither instrument can see. It measures the word cost of the whole call and models nothing" + }, + { + "mitigation": "arg:max_trials is the upper bound only", + "risk": "low", + "what": "the per-trial threshold is 0.25f or 0.0f depending on two tech lookups, and the accept test short-circuits the inner loop", + "why": "so the measured cost is between |contacts| and |contacts| x |detectors| and the exact number depends on tech state this hook does not read" + } + ], + "why": "" + }, + "ftol": 0, + "ftol_kind": "abs", + "ptr": "ignore" + }, + "Game::EncounterDetect::ProcessTeamRecord": { + "coverage": { + "state": "partial", + "unmodelled": [ + { + "mitigation": "region:rng is the only check; the turn's own correctness is B1/B3/B4's job", + "risk": "high", + "what": "everything the original writes except the strategic generator", + "why": "this hook family measures ONE thing -- how many words the generator advances and where. It declares no region over game state and makes no claim about it. A clean run here says the RNG accounting is right and says nothing whatever about whether the turn was computed correctly" + }, + { + "mitigation": "region:rng carries left/block/words, never a call count", + "risk": "low", + "what": "the ledger reports WORDS, not draws", + "why": "a NextInt that rejects three times is four words and one call. Words are the unit that decides whether a save reproduces; they are the wrong unit for counting decisions, and nothing here should be read as a draw count" + }, + { + "mitigation": "region:rng reads the state, so an inlined draw is as visible as a called one", + "risk": "low", + "what": "the ledger is deliberately blind to WHICH primitive spent a word", + "why": "that is the design, and it is why this instrument was preferred to hooking the primitives: the image has FOUR draw entry points (NextFloat 0x0047d830, NextInt 0x004271c0, Chance 0x008e6dd0 and NextUInt 0x004f7670, the last of which appears in no previous lane's primitive set) plus inlined draws in at least twelve functions, two of them reachable from the turn roots. A primitive-counting hook would have silently undercounted every one of those" + }, + { + "mitigation": "region:rng emits null explicitly; tracecmp shows it as a value, not a gap", + "risk": "medium", + "what": "a generator position the ledger cannot place reads `words: null`", + "why": "a block more than 4096 twists ahead of the frontier, or any state behind the anchor, is reported unknown rather than guessed. A null in a ledger field is a measurement failure and must not be read as zero" + }, + { + "mitigation": "region:rng; arg:gate/pred_contacts/pred_detectors are a prediction, not a check", + "risk": "medium", + "what": "the whole body of ProcessTeamRecord: the gate call, the two vector builds and the bucket construction", + "why": "this hook measures the word cost of the call and recomputes three integers the original derives from the same record. It models none of the work and asserts nothing about the contact assignment" + }, + { + "mitigation": "arg:fc_byte_vs_dword_disagreements; arg:entry_flags carries the raw values", + "risk": "medium", + "what": "`+0xfc` and `+0xfb` are read as BYTES, following lane I's reading of the classifier functions", + "why": "if either is really a wider field, every count here is wrong in the same direction and no cross-check inside this hook would notice. So the dword at +0xfc is read as well and any row where the two disagree is COUNTED, not silently resolved -- a non-zero disagreement count means the byte reading is unsafe on this workload" + }, + { + "mitigation": "arg:entries against the three class counts", + "risk": "low", + "what": "an entry whose object pointer is unreadable is skipped", + "why": "it is not counted into any of the three classes, so entries != contacts + detectors + neither is the signal that this happened" + } + ], + "why": "" + }, + "ftol": 0, + "ftol_kind": "abs", + "ptr": "ignore" + }, + "Game::SectionDictionary::SectionDictionary": { + "coverage": { + "state": "partial", + "unmodelled": [ + { + "mitigation": "see docs/M2.md; compare mode for this hook is not safe to run", + "risk": "high", + "what": "LoadSection registers each section with the string table and the live TechTree, and may append to the dictionary's own vector", + "why": "M3 scope; ours delegates to the game's LoadSection after the original has already built all 885 definitions, so the second pass registers duplicates -- the leading hypothesis for this hook's compare-mode crash" + }, + { + "mitigation": "", + "risk": "medium", + "what": "post-load validation pass over every definition's @-token against the string table", + "why": "runs after the loop and touches no declared region" + }, + { + "mitigation": "", + "risk": "low", + "what": "allocates 885 SectionDef objects (0x3d8 bytes each) on the game heap", + "why": "they do not exist at hook entry; compared by index/species/id/token" + }, + { + "mitigation": "guard:dict", + "risk": "low", + "what": "the word at dictionary+0x14", + "why": "not modelled; emitted as an ignored pointer" + }, + { + "mitigation": "", + "risk": "medium", + "what": "the before-snapshot of the object is uninitialised heap", + "why": "the hook is on the constructor, so `before` is meaningless and only `after` carries information" + } + ], + "why": "" + }, + "ftol": 0, + "ftol_kind": "abs", + "ptr": "ignore" + }, + "Game::ServerPlayer::ComputeBudget": { + "coverage": { + "state": "partial", + "unmodelled": [ + { + "mitigation": "declared input boundary; see budget_inputs.h", + "risk": "high", + "what": "slots 1, 2, 3, 4, 7 and 11 are produced by callees this milestone does not model (per-system output, trade, ship-carried population, a second manager, the build-queue spend)", + "why": "they are copied out of the original's own output and back into the same slots, so they match BY CONSTRUCTION and prove nothing" + }, + { + "mitigation": "guard:budget_object does not reach the ships; unverified", + "risk": "high", + "what": "ServerSystem::ComputeOutput repairs damaged ships in orbit", + "why": "replace mode runs the original a second time on a scratch Budget to harvest the six unmodelled slots, so that repair happens TWICE per turn in replace mode and nothing in the trace would show it" + }, + { + "mitigation": "logged as `inputs.live_difficulty` on every record", + "risk": "low", + "what": "the difficulty-mods row still DRIVES `ours` as two fitted constants", + "why": "the old note here said the row was 'not reachable from a ServerPlayer'. That was wrong: the record is at ServerPlayer+0x36c and every consumer calls DifficultyMods_Select(p->+0x36c, p). Lane L5 now snapshots it and emits it as `inputs.live_difficulty` alongside the fitted pair, so a run SHOWS whether the fit is right instead of assuming it. `ours` was deliberately left on the fitted constants so that this run is evidence about them; switching it over is the next lane's one-line change" + }, + { + "mitigation": "the record carries `inputs.live_consts` so the widths are readable, and tests/game_sim/test_economy.cpp pins all three at their boundaries", + "risk": "medium", + "what": "three of the four float widths this routine turns on are unexercised by any reference turn", + "why": "the savings-interest rate is a widened 0.01f and its boundary IS in the corpus (a treasury of 50,000 earns 499, not 500). The research yield factor is a widened 0.85f whose boundary needs a research money that is a multiple of 40,000, and the three research modifiers are summed in SINGLE precision, which needs two of them non-zero -- the corpus has shrm = TRM = 0. So a green compare here verifies one of the three and says nothing about the other two" + }, + { + "mitigation": "", + "risk": "low", + "what": "the research-allocation vector's heap block", + "why": "only the element count is compared; the three words are heap pointers the default policy ignores" + } + ], + "why": "" + }, + "ftol": 0, + "ftol_kind": "abs", + "ptr": "ignore" + }, + "Game::ServerPlayer::OnTechResearched": { + "coverage": { + "state": "partial", + "unmodelled": [ + { + "mitigation": "guard:player (EventStorage is inline at ServerPlayer+0x29c)", + "risk": "high", + "what": "posts EVENT_RESEARCH_COMPLETE / _UNDERBUDGET / _TEMPERANCE on the owner's EventStorage when !silent", + "why": "the same class of write as B3's defect, and this hook has no replace-mode oracle that could catch it: gotcha 4 in docs/B2.md says a changed save hash on a completion turn is expected and therefore not a finding" + }, + { + "mitigation": "", + "risk": "high", + "what": "writes every owned system's AI flag (CCC_AIVrus / CCC_AISlv), re-evaluates the arcology civilian cap, cures addiction and clears plague across systems AND ships", + "why": "writes through pointers to other objects; compare mode must not touch live state, and no region reaches them" + }, + { + "mitigation": "this is the extra draw B3 observed on a completion", + "risk": "high", + "what": "the pending plague-cure roll (ServerPlayer::RollResearchEvent)", + "why": "it draws one word from the strategic generator unconditionally, and a SECOND word (NextInt) when the roll beats the odds and takes the plague path -- which also posts EVENT_PLAGUE_OUTBREAK, while the rebellion path cancels the research. So a fired roll costs one or two words, not one; running it in compare mode would consume real randomness. The two words it guards are still cleared and the record says whether it would have fired" + }, + { + "mitigation": "", + "risk": "medium", + "what": "TechTree::SetResearched for the Zuul boarding-pod grant", + "why": "it would mutate the live tree, and it recurses" + }, + { + "mitigation": "region:node_bore, declared only when the block already exists", + "risk": "medium", + "what": "allocates or frees the node-bore block at ServerPlayer+0x308", + "why": "ours has no allocator the game's runtime could free, so replace mode calls the game's own updater -- which means replace mode never exercises our node-bore selection at all" + } + ], + "why": "" + }, + "ftol": 0, + "ftol_kind": "abs", + "ptr": "ignore" + }, + "Game::ServerPlayer::ProcessTurn": { + "coverage": { + "state": "partial", + "unmodelled": [ + { + "mitigation": "guard:player reports Sav, +0xc8 and +0xcc moving", + "risk": "high", + "what": "phases 2, 3 and 6 -- the savings apply Sav = SatAdd(budget[0], net), the three aid/trade records copied out of the budget, and the research refund -- are NOT declared and NOT compared", + "why": "all three are pure functions of ComputeBudget's 22-slot output and of ProcessResearch's overBudget out-parameter, and both live in the original's own stack frame ([ebp-0x90] and [ebp-0x14]). The three ways to reach them are each worse than not having them: call ComputeBudget ourselves (it repairs damaged ships in orbit -- harness-audit #6), read them out of the nested B1/B3 hooks (harness-audit #5, the self-fulfilling compare), or infer them from the observed Sav delta (the same trap). The formulas ARE written and unit-tested in player_turn_inputs.cpp; they are simply not wired into the verdict" + }, + { + "mitigation": "run hook.Game::ServerPlayer::ComputeBudget=compare alongside", + "risk": "high", + "what": "ComputeBudget (0x00863030) itself, including ServerSystem::ComputeOutput, which REPAIRS DAMAGED SHIPS IN ORBIT", + "why": "B1 is the hook that checks the budget; its ship-repair side effect happens inside this call too, once per system per player per turn" + }, + { + "mitigation": "guard:player, and hook.Game::TechTree::ProcessResearch=compare", + "risk": "high", + "what": "TechTree::ProcessResearch and the whole SetResearched / OnTechResearched cascade it can trigger: progress, the completion roll, the 5% decay sweep, the child-unlock cascade, ~90 tech-effect field writes, EVENT_RESEARCH_* and EVENT_TECHS_UNLOCKED", + "why": "declared input boundary. B3/U own it; this hook reports the pre-call research state and lets the player guard say how much moved" + }, + { + "mitigation": "region:rng shows the draws; nothing shows the systems it wrote", + "risk": "high", + "what": "RollResearchAccident (0x00889dc0) draws Mars::RNG::NextInt(100) whenever the research boost is non-zero, can apply progress loss across EVERY system, and posts EVENT_LABACCIDENT_{SMALL,MEDIUM,LARGE}", + "why": "it runs before ProcessResearch and gates it entirely. Its draws move the declared `rng` region, so they are visible -- but as an unexplained RNG divergence, not as their cause" + }, + { + "mitigation": "region:rng + region:roll_flags + guard:player; ours never rolls", + "risk": "high", + "what": "the ResearchRollPending roll: RollResearchEvent draws one NextFloat, and when it BEATS the odds the plague branch draws a SECOND word (NextInt) and posts EVENT_PLAGUE_OUTBREAK, while the rebellion branch allocates an AIRebellion at ServerPlayer+0x3b8 and cancels the current research", + "why": "every previous coverage note in this repo says 'exactly one NextFloat'. That is the cost of REACHING the branch; a fired roll costs one or two words. The branch has never been observed firing. `predict_roll` says whether we expected the roll, `region:rng` says what it actually cost, and `roll_flags` says whether ResErrRoll was consumed" + }, + { + "mitigation": "guard:player", + "risk": "medium", + "what": "ServerPlayer::ProcessSpecialProjects (0x00840fe0) and, for an AI player, ConstructionSpend (0x00817f90)", + "why": "1015 bytes of special-project state, plus the log line \"SpecialProject: %s completed investigation phase\"" + }, + { + "mitigation": "guard:player reports the EvNxID bump", + "risk": "medium", + "what": "the EVENT_NO_RESEARCH post at 0x0089168c, which appends to the player's EventStorage (+0x29c) and bumps EvNxID (+0x2b0)", + "why": "B3's exact failure mode: a list append outside every Result region. Its condition is fully known (ResT == 0, nothing completed this turn, and at least one state-2 tech exists) but ours posts nothing" + }, + { + "mitigation": "guard:player sees the header move only", + "risk": "low", + "what": "PruneRaidTargets (0x00863cf0) erases from the heap vector at +0x338", + "why": "the vector header is inside the player guard, but its elements are heap memory no region reaches, and the erase runs each removed element's scalar destructor" + }, + { + "mitigation": "region:bonus_header", + "risk": "low", + "what": "the timed-bonus element regions are captured from the PRE-CALL element addresses, and the sweep may shrink the vector under them", + "why": "erase moves data down inside the same buffer and only lowers _Mylast, so the addresses stay valid and readable. Elements past the new _Mylast are compared as stale bytes; `bonus_header` is the region that carries the count, and ours writes the same stale tail the original leaves" + }, + { + "mitigation": "", + "risk": "medium", + "what": "replace mode is refused for this hook", + "why": "ours models the driver's own writes and none of ComputeBudget, ProcessResearch, ProcessSpecialProjects or the raid-target prune. A replace run would leave a player in a state no code path produces, and there is therefore no oracle layer behind this compare" + } + ], + "why": "" + }, + "ftol": 0, + "ftol_kind": "abs", + "ptr": "ignore" + }, + "Game::ServerSystem::ComputeTotalOutput": { + "coverage": { + "state": "partial", + "unmodelled": [ + { + "mitigation": "declared input boundary", + "risk": "high", + "what": "the station count, as for GroupOutput", + "why": "`ours` assumes zero stations, so a system with an imperial population and a station diverges by the station factor" + }, + { + "mitigation": "declared input boundary", + "risk": "high", + "what": "the slave population and its xenotech adjustment", + "why": "the original's slave count is not a plain field: it runs the count through a per-species xenotech factor. `ours` takes the slave term as ZERO, so any system holding slaves diverges. The record logs the raw group-2 population sums so a divergence can be attributed" + }, + { + "mitigation": "declared input boundary", + "risk": "medium", + "what": "the capacity surplus the civilian term adds for the owner's own species", + "why": "the original calls the carrying-capacity helper twice with different out-parameter slots and adds max(0, B - A) to the civilian count; `ours` uses the raw civilian population. The surplus is zero except when the colony is at its cap" + }, + { + "mitigation": "", + "risk": "low", + "what": "the addiction phase", + "why": "`ours` assumes it is below 3, so ADDICTION_OUTPUT_MOD never applies; the record logs the system's addiction table length so the case is visible" + } + ], + "why": "" + }, + "ftol": 0, + "ftol_kind": "abs", + "ptr": "ignore" + }, + "Game::ServerSystem::GroupOutput": { + "coverage": { + "state": "partial", + "unmodelled": [ + { + "mitigation": "declared input boundary; the trace makes it recoverable", + "risk": "high", + "what": "the station count that scales the imperial term", + "why": "the original gets it from a helper that walks the system's fleets and their ships through virtual calls and takes the system in EBX, which a hook cannot call portably. `ours` therefore assumes ZERO stations. A divergence on an imperial row is expected to be exactly the station factor, and the record carries `count` and the return, so the factor is MEASURED from the trace rather than fitted" + }, + { + "mitigation": "logged as `tuning` on every record", + "risk": "medium", + "what": "the slave row's output modifier, and every value the data files supply", + "why": "SLAVES_OUTPUT_MOD, the two morale thresholds and their two modifiers, and STATION_BONUS_IMPERIAL_OUTPUT are read out of the live process's globals and logged with every record, so the record says which value drove it" + } + ], + "why": "the imperial and civilian output modifiers, the 1.8 factor and the 500000 divisor are literals inside the executable, so nothing about them is assumed from the data files" + }, + "ftol": 0, + "ftol_kind": "abs", + "ptr": "ignore" + }, + "Game::ServerSystem::ProcessTurn": { + "coverage": { + "state": "partial", + "unmodelled": [ + { + "mitigation": "guard:system", + "risk": "high", + "what": "the addiction sweep raises MoraleEvents, which are constructed and appended to the system's capped morale history", + "why": "the same class of write as B3's defect. sim::ProcessColonyTurn does compute the morale events (ColonyTurnResult), but the hook never emits them: DescribeMoraleEvents is dead code, so they are neither compared nor logged" + }, + { + "mitigation": "guard:system covers the system object only, not the other objects", + "risk": "high", + "what": "every callee: the plague pass, imperial and civilian growth, the resource debit, in-orbit refuel, slaves, rebellion and the build queue", + "why": "declared input boundary -- ProcessTurn is a dispatcher and only the words it writes itself are modelled. The callees raise EVENT_SLAVES_DEAD, EVENT_SYSTEM_REBELLION_CONTINUES, the plague events and SEBuildCompleted, create ships and bump per-player ShipRecords counters" + }, + { + "mitigation": "", + "risk": "medium", + "what": "ApplyInfraBonus / ApplyPopBonus read the owner's home-system id, and the build queue writes the owning ServerPlayer", + "why": "writes through a pointer to another object; no region reaches the player" + }, + { + "mitigation": "", + "risk": "low", + "what": "ProcessRebellion is the pass's only RNG consumer and its draw count is data-dependent", + "why": "the generator IS a declared region, so a moved post-state is visible and names the system whose rebellion fired -- it is reported, not modelled" + }, + { + "mitigation": "", + "risk": "medium", + "what": "replace mode is refused for this hook", + "why": "our side models the dispatcher's own writes and none of the callees, so a replace run would silently skip a colony's whole turn. There is therefore no oracle layer behind the compare for this hook" + } + ], + "why": "" + }, + "ftol": 0, + "ftol_kind": "abs", + "ptr": "ignore" + }, + "Game::StrategyHost::Autosave": { + "coverage": { + "state": "partial", + "unmodelled": [ + { + "mitigation": "region:rng is the only check; the turn's own correctness is B1/B3/B4's job", + "risk": "high", + "what": "everything the original writes except the strategic generator", + "why": "this hook family measures ONE thing -- how many words the generator advances and where. It declares no region over game state and makes no claim about it. A clean run here says the RNG accounting is right and says nothing whatever about whether the turn was computed correctly" + }, + { + "mitigation": "region:rng carries left/block/words, never a call count", + "risk": "low", + "what": "the ledger reports WORDS, not draws", + "why": "a NextInt that rejects three times is four words and one call. Words are the unit that decides whether a save reproduces; they are the wrong unit for counting decisions, and nothing here should be read as a draw count" + }, + { + "mitigation": "region:rng reads the state, so an inlined draw is as visible as a called one", + "risk": "low", + "what": "the ledger is deliberately blind to WHICH primitive spent a word", + "why": "that is the design, and it is why this instrument was preferred to hooking the primitives: the image has FOUR draw entry points (NextFloat 0x0047d830, NextInt 0x004271c0, Chance 0x008e6dd0 and NextUInt 0x004f7670, the last of which appears in no previous lane's primitive set) plus inlined draws in at least twelve functions, two of them reachable from the turn roots. A primitive-counting hook would have silently undercounted every one of those" + }, + { + "mitigation": "region:rng emits null explicitly; tracecmp shows it as a value, not a gap", + "risk": "medium", + "what": "a generator position the ledger cannot place reads `words: null`", + "why": "a block more than 4096 twists ahead of the frontier, or any state behind the anchor, is reported unknown rather than guessed. A null in a ledger field is a measurement failure and must not be read as zero" + }, + { + "mitigation": "region:rng only", + "risk": "low", + "what": "the whole save write: four path buffers, the ENDTURN pair removal, the backup rotation, the per-player connection detach/reattach, and SaveGame_WriteFile 0x00877070 itself", + "why": "this hook exists to timestamp the generator at the two moments the two save files are written. It is a marker and models nothing" + }, + { + "mitigation": "arg:server_cached / host_plus_0x54 / server_agrees say which pointer was used and whether the +0x54 candidate is the same object", + "risk": "medium", + "what": "the generator is reached through a CACHED StrategyServer pointer, not from this call's own arguments", + "why": "`this` is the global at 0x00b29f98, hardcoded by both call sites, and no argument here names the server. On the first pre-turn autosave after a load no turn driver has run yet, so the cache is empty and that record carries no ledger position -- the FIRST BRACKET OF A SESSION IS INCOMPLETE BY CONSTRUCTION and must not be read as a zero-cost turn" + } + ], + "why": "" + }, + "ftol": 0, + "ftol_kind": "abs", + "ptr": "ignore" + }, + "Game::StrategyServer::ApplyEncounterResult": { + "coverage": { + "state": "partial", + "unmodelled": [ + { + "mitigation": "region:rng is the only check; the turn's own correctness is B1/B3/B4's job", + "risk": "high", + "what": "everything the original writes except the strategic generator", + "why": "this hook family measures ONE thing -- how many words the generator advances and where. It declares no region over game state and makes no claim about it. A clean run here says the RNG accounting is right and says nothing whatever about whether the turn was computed correctly" + }, + { + "mitigation": "region:rng carries left/block/words, never a call count", + "risk": "low", + "what": "the ledger reports WORDS, not draws", + "why": "a NextInt that rejects three times is four words and one call. Words are the unit that decides whether a save reproduces; they are the wrong unit for counting decisions, and nothing here should be read as a draw count" + }, + { + "mitigation": "region:rng reads the state, so an inlined draw is as visible as a called one", + "risk": "low", + "what": "the ledger is deliberately blind to WHICH primitive spent a word", + "why": "that is the design, and it is why this instrument was preferred to hooking the primitives: the image has FOUR draw entry points (NextFloat 0x0047d830, NextInt 0x004271c0, Chance 0x008e6dd0 and NextUInt 0x004f7670, the last of which appears in no previous lane's primitive set) plus inlined draws in at least twelve functions, two of them reachable from the turn roots. A primitive-counting hook would have silently undercounted every one of those" + }, + { + "mitigation": "region:rng emits null explicitly; tracecmp shows it as a value, not a gap", + "risk": "medium", + "what": "a generator position the ledger cannot place reads `words: null`", + "why": "a block more than 4096 twists ahead of the frontier, or any state behind the anchor, is reported unknown rather than guessed. A null in a ledger field is a measurement failure and must not be read as zero" + }, + { + "mitigation": "region:rng measures the subtotal", + "risk": "high", + "what": "the combat resolver 0x007d5af0 (7499 B) is completely unread", + "why": "this hook measures what its subtree spends and models none of it. Nothing about combat determinism can be settled until that function is read; this only puts a number on the hole" + }, + { + "mitigation": "", + "risk": "medium", + "what": "the ~0xea0-byte combat report, the CombatReport list append at S+0x1fc, the ClientEncounterResults push into S+0x2f4, the per-ship turn stamps and the pairwise engagement bits", + "why": "all of it is game state this hook does not declare and does not check" + } + ], + "why": "" + }, + "ftol": 0, + "ftol_kind": "abs", + "ptr": "ignore" + }, + "Game::StrategyServer::MoveFleet": { + "coverage": { + "state": "partial", + "unmodelled": [ + { + "mitigation": "guard:fleet sees the fleet's own words; the event and the system do not", + "risk": "high", + "what": "on arrival: dispatches SEFleetArrived and runs one of three arrival handlers by destination kind (enter system / join fleet / stop at point)", + "why": "declared input boundary -- an arriving call is expected to differ in all of it, and none of it is declared, so the compare says nothing about arrivals" + }, + { + "mitigation": "", + "risk": "high", + "what": "on departure: cancels every still-acting ship (with a log line each) and calls ServerSystem::FleetDeparts, which rewrites the system's ownership bits", + "why": "writes through pointers to ships and to the system" + }, + { + "mitigation": "", + "risk": "medium", + "what": "the tanker top-up refuels other ships in the fleet", + "why": "the per-ship range regions would show it, but ours does not model it, so a fleet with a tanker diverges for a known reason" + }, + { + "mitigation": "declared gap: docs/B4.md", + "risk": "medium", + "what": "a node-line waypoint's step comes from the stutter profile", + "why": "NodeLineStep / BuildStutterSegments are written and unit-tested but not wired in; the hook steps every waypoint type as speed x dt, so a node-line leg is knowingly mis-stepped and only its type is recorded" + }, + { + "mitigation": "", + "risk": "medium", + "what": "a missed probabilistic jump scatters the fleet in a random direction", + "why": "the direction is a second draw whose mapping is not modelled; ours leaves the position alone and reports the scatter distance, so the generator region diverges by one word on a miss" + }, + { + "mitigation": "", + "risk": "medium", + "what": "the route revalidation and the waypoint list itself", + "why": "declared input boundary; the waypoint vector is not a region" + } + ], + "why": "" + }, + "ftol": 0, + "ftol_kind": "abs", + "ptr": "ignore" + }, + "Game::StrategyServer::NodeLineDecay": { + "coverage": { + "state": "partial", + "unmodelled": [ + { + "mitigation": "region:rng is the only check; the turn's own correctness is B1/B3/B4's job", + "risk": "high", + "what": "everything the original writes except the strategic generator", + "why": "this hook family measures ONE thing -- how many words the generator advances and where. It declares no region over game state and makes no claim about it. A clean run here says the RNG accounting is right and says nothing whatever about whether the turn was computed correctly" + }, + { + "mitigation": "region:rng carries left/block/words, never a call count", + "risk": "low", + "what": "the ledger reports WORDS, not draws", + "why": "a NextInt that rejects three times is four words and one call. Words are the unit that decides whether a save reproduces; they are the wrong unit for counting decisions, and nothing here should be read as a draw count" + }, + { + "mitigation": "region:rng reads the state, so an inlined draw is as visible as a called one", + "risk": "low", + "what": "the ledger is deliberately blind to WHICH primitive spent a word", + "why": "that is the design, and it is why this instrument was preferred to hooking the primitives: the image has FOUR draw entry points (NextFloat 0x0047d830, NextInt 0x004271c0, Chance 0x008e6dd0 and NextUInt 0x004f7670, the last of which appears in no previous lane's primitive set) plus inlined draws in at least twelve functions, two of them reachable from the turn roots. A primitive-counting hook would have silently undercounted every one of those" + }, + { + "mitigation": "region:rng emits null explicitly; tracecmp shows it as a value, not a gap", + "risk": "medium", + "what": "a generator position the ledger cannot place reads `words: null`", + "why": "a block more than 4096 twists ahead of the frontier, or any state behind the anchor, is reported unknown rather than guessed. A null in a ledger field is a measurement failure and must not be read as zero" + }, + { + "mitigation": "region:rng only", + "risk": "high", + "what": "the collapse itself: 0x007a92e0 (690 B) and 0x007a4700 (2244 B) destroy or halt fleets and post EVENT_NODEDECAY_FLEET_DESTROYED_VIANODE / _HALTED / _HALTED_VIANODE, and loop 3 posts two more decay-stage events", + "why": "ours advances the generator and writes nothing else. In compare mode that is the intent -- the check is the word count -- but it means a clean verdict here says nothing about which lines actually collapsed" + }, + { + "mitigation": "arg:predict_words vs region:rng is exactly that check", + "risk": "medium", + "what": "the draw-count model is verified by a DIRECT-call sweep of the downstream pair; their subtrees contain unresolved indirect call sites", + "why": "if one of those vtable slots reaches a generator, the measured delta will exceed `predict_words` and this hook will diverge -- which is the correct outcome, and the reason the prediction is recorded as an argument" + }, + { + "mitigation": "", + "risk": "low", + "what": "the expiry formula reproduces a signed idiv on nptf/npdtf without knowing whether nptf can be negative", + "why": "the original never sign-checks the traffic accumulator. The model truncates toward zero the same way; if the field is always non-negative the question never arises, and no save has been observed with a negative one" + } + ], + "why": "" + }, + "ftol": 0, + "ftol_kind": "abs", + "ptr": "ignore" + }, + "Game::StrategyServer::OnAllCombatDone_Tail": { + "coverage": { + "state": "partial", + "unmodelled": [ + { + "mitigation": "region:rng is the only check; the turn's own correctness is B1/B3/B4's job", + "risk": "high", + "what": "everything the original writes except the strategic generator", + "why": "this hook family measures ONE thing -- how many words the generator advances and where. It declares no region over game state and makes no claim about it. A clean run here says the RNG accounting is right and says nothing whatever about whether the turn was computed correctly" + }, + { + "mitigation": "region:rng carries left/block/words, never a call count", + "risk": "low", + "what": "the ledger reports WORDS, not draws", + "why": "a NextInt that rejects three times is four words and one call. Words are the unit that decides whether a save reproduces; they are the wrong unit for counting decisions, and nothing here should be read as a draw count" + }, + { + "mitigation": "region:rng reads the state, so an inlined draw is as visible as a called one", + "risk": "low", + "what": "the ledger is deliberately blind to WHICH primitive spent a word", + "why": "that is the design, and it is why this instrument was preferred to hooking the primitives: the image has FOUR draw entry points (NextFloat 0x0047d830, NextInt 0x004271c0, Chance 0x008e6dd0 and NextUInt 0x004f7670, the last of which appears in no previous lane's primitive set) plus inlined draws in at least twelve functions, two of them reachable from the turn roots. A primitive-counting hook would have silently undercounted every one of those" + }, + { + "mitigation": "region:rng emits null explicitly; tracecmp shows it as a value, not a gap", + "risk": "medium", + "what": "a generator position the ledger cannot place reads `words: null`", + "why": "a block more than 4096 twists ahead of the frontier, or any state behind the anchor, is reported unknown rather than guessed. A null in a ledger field is a measurement failure and must not be read as zero" + }, + { + "mitigation": "region:rng plus the two nested hooks", + "risk": "high", + "what": "36 phases, of which two can draw and neither is modelled here", + "why": "phase 6 reaches the unread 7499-byte combat resolver 0x007d5af0 (NextInt on the node-cannon path, Twist plus NextInt on the salvage path) and phase 11 draws one word per expired node line. `predict_nodeline_words` covers only the second, and the nested ApplyEncounterResult / NodeLineDecay hooks are what attribute the split" + }, + { + "mitigation": "arg:encounters says how many encounters this call saw; a call with 0 settles it", + "risk": "medium", + "what": "whether this handler runs on a turn with NO combat is what this hook is here to settle, and until it has run it is a hypothesis", + "why": "combat-done-tail.md \u00c2\u00a76 infers it from the determinism note -- the post-turn autosave appears on every End Turn and this handler is its only reachable caller -- not from the instruction stream" + } + ], + "why": "" + }, + "ftol": 0, + "ftol_kind": "abs", + "ptr": "ignore" + }, + "Game::StrategyServer::ProcessFleetMovement": { + "coverage": { + "state": "partial", + "unmodelled": [ + { + "mitigation": "", + "risk": "high", + "what": "`ours` re-reads the LIVE fleet list after the original has run", + "why": "the gate-traffic total is computed by the original at the very end of the pass, so a pre-call snapshot would diverge for the wrong reason. It breaks the compare invariant that ours never touches live memory, and it makes this hook's verdict partly self-fulfilling: the input to our arithmetic is the original's own post-move state" + }, + { + "mitigation": "", + "risk": "high", + "what": "drives MoveFleet up to five times per fleet", + "why": "every undeclared effect of MoveFleet happens inside this call too; the pass schedule is recorded in the arguments but never compared" + }, + { + "mitigation": "", + "risk": "high", + "what": "writes FPdpos into every fleet and clears flags 0x2 and 0x100 on every fleet", + "why": "no region covers the fleets, only the players' gate-traffic words" + }, + { + "mitigation": "", + "risk": "high", + "what": "OnFleetArrived posts EVENT_FLEET_ARRIVED", + "why": "the same class of write as B3's defect, and there is no replace mode for this hook, so nothing behind the compare could catch it either" + }, + { + "mitigation": "", + "risk": "medium", + "what": "the original accumulates by player->index but writes back by the player's position in the server vector, into a fixed 32-int array with no bounds check", + "why": "a real latent bug in the original that our side reproduces only while index == position; the reference save never separates them" + }, + { + "mitigation": "", + "risk": "medium", + "what": "PassSchedule() is never called by the hook, and FleetSummary::targetFleetId / relation are never filled", + "why": "the header claims ours predicts the call order for a trace to check; that prediction is not actually emitted" + } + ], + "why": "" + }, + "ftol": 0, + "ftol_kind": "abs", + "ptr": "ignore" + }, + "Game::StrategyServer::ProcessNodeSpaceTravel": { + "coverage": { + "state": "partial", + "unmodelled": [ + { + "mitigation": "region:rng is the only check; the turn's own correctness is B1/B3/B4's job", + "risk": "high", + "what": "everything the original writes except the strategic generator", + "why": "this hook family measures ONE thing -- how many words the generator advances and where. It declares no region over game state and makes no claim about it. A clean run here says the RNG accounting is right and says nothing whatever about whether the turn was computed correctly" + }, + { + "mitigation": "region:rng carries left/block/words, never a call count", + "risk": "low", + "what": "the ledger reports WORDS, not draws", + "why": "a NextInt that rejects three times is four words and one call. Words are the unit that decides whether a save reproduces; they are the wrong unit for counting decisions, and nothing here should be read as a draw count" + }, + { + "mitigation": "region:rng reads the state, so an inlined draw is as visible as a called one", + "risk": "low", + "what": "the ledger is deliberately blind to WHICH primitive spent a word", + "why": "that is the design, and it is why this instrument was preferred to hooking the primitives: the image has FOUR draw entry points (NextFloat 0x0047d830, NextInt 0x004271c0, Chance 0x008e6dd0 and NextUInt 0x004f7670, the last of which appears in no previous lane's primitive set) plus inlined draws in at least twelve functions, two of them reachable from the turn roots. A primitive-counting hook would have silently undercounted every one of those" + }, + { + "mitigation": "region:rng emits null explicitly; tracecmp shows it as a value, not a gap", + "risk": "medium", + "what": "a generator position the ledger cannot place reads `words: null`", + "why": "a block more than 4096 twists ahead of the frontier, or any state behind the anchor, is reported unknown rather than guessed. A null in a ledger field is a measurement failure and must not be read as zero" + }, + { + "mitigation": "region:rng", + "risk": "medium", + "what": "2945 bytes of node-space movement, entirely unmodelled and never swept for RNG by any lane", + "why": "it is hooked here only because it runs TWICE a turn -- ProcessTurn phase 7 and tail phase 10 -- so a draw inside it would be double-counted by anyone modelling it once. The record says whether it draws at all" + } + ], + "why": "" + }, + "ftol": 0, + "ftol_kind": "abs", + "ptr": "ignore" + }, + "Game::StrategyServer::ProcessTurn": { + "coverage": { + "state": "partial", + "unmodelled": [ + { + "mitigation": "region:rng is the only check; the turn's own correctness is B1/B3/B4's job", + "risk": "high", + "what": "everything the original writes except the strategic generator", + "why": "this hook family measures ONE thing -- how many words the generator advances and where. It declares no region over game state and makes no claim about it. A clean run here says the RNG accounting is right and says nothing whatever about whether the turn was computed correctly" + }, + { + "mitigation": "region:rng carries left/block/words, never a call count", + "risk": "low", + "what": "the ledger reports WORDS, not draws", + "why": "a NextInt that rejects three times is four words and one call. Words are the unit that decides whether a save reproduces; they are the wrong unit for counting decisions, and nothing here should be read as a draw count" + }, + { + "mitigation": "region:rng reads the state, so an inlined draw is as visible as a called one", + "risk": "low", + "what": "the ledger is deliberately blind to WHICH primitive spent a word", + "why": "that is the design, and it is why this instrument was preferred to hooking the primitives: the image has FOUR draw entry points (NextFloat 0x0047d830, NextInt 0x004271c0, Chance 0x008e6dd0 and NextUInt 0x004f7670, the last of which appears in no previous lane's primitive set) plus inlined draws in at least twelve functions, two of them reachable from the turn roots. A primitive-counting hook would have silently undercounted every one of those" + }, + { + "mitigation": "region:rng emits null explicitly; tracecmp shows it as a value, not a gap", + "risk": "medium", + "what": "a generator position the ledger cannot place reads `words: null`", + "why": "a block more than 4096 twists ahead of the frontier, or any state behind the anchor, is reported unknown rather than guessed. A null in a ledger field is a measurement failure and must not be read as zero" + }, + { + "mitigation": "region:rng measures the total; the per-phase split is not resolved here", + "risk": "high", + "what": "no model of the turn's RNG cost: 32 phases, each of which may draw", + "why": "ProcessResearch's completion roll, RollResearchAccident's NextInt(100), the ResearchRollPending roll (one word, or two on the plague path), and whatever ProcessStations / ProcessSurrenders / ProcessMissions / ProcessSpecialProjects spend -- none of which has ever been measured. `ours` predicts nothing and the record reports the measurement" + }, + { + "mitigation": "shim.log records the MH_CreateHook status for both", + "risk": "low", + "what": "this hook takes the address the fpu module also wants to sample", + "why": "MinHook allows one hook per target. `fpu.sample_turn=off` releases StrategyServer::ProcessTurn so this hook can install; with it on, this hook fails to install and the trace is missing half the ledger" + } + ], + "why": "" + }, + "ftol": 0, + "ftol_kind": "abs", + "ptr": "ignore" + }, + "Game::TechTree::ProcessResearch": { + "coverage": { + "state": "partial", + "unmodelled": [ + { + "mitigation": "region:events", + "risk": "medium", + "what": "posts EVENT_RESEARCH_OVERBUDGET on the owner's EventStorage: ours reproduces the decision and the id sequence, so region:events compares next_id, but the composed EvDsc/EvMsg text is not reproduced and no region can see it", + "why": "text comes from the game's string table, which the engine must not carry; ours posts into its own EventStorage and writes only the counts into the scratch copy, so no live byte moves and replace mode posts nothing at all" + }, + { + "mitigation": "region:events", + "risk": "low", + "what": "composes EVENT_TECHS_UNLOCKED's message from the unlocked techs' names", + "why": "the trigger and the list are modelled (SetResearched's availability sweep plus the tail collector, both read off the instruction stream), so region:events compares next_id; the names come from the game's string table, so the message is composed from node indices instead and is not the game's text" + }, + { + "mitigation": "guard:player, guard:tree_header", + "risk": "high", + "what": "TechTree::SetResearched in REPLACE mode: only its TechTree half runs, and only when research.replace_cascade=on", + "why": "with the flag OFF (the default) nothing of the cascade runs, so a replace run leaves the completed node unstamped and no tech unlocked. With it ON, the four TechNode words (costRP, turnAvailable, turnResearched, order) and the tree's completion-order counter are written live, and the ServerPlayer half is still not: no event is posted, no ObservedTech element is appended and no tech effect is applied. Neither setting is a full displacement of the completion path; the pair measures where the boundary is" + }, + { + "mitigation": "guard:player", + "risk": "high", + "what": "ServerPlayer::OnTechResearched's tech effects: the ~90 hard-coded ServerPlayer field writes, the plague-cure masks, the design-option bitmasks and the species tech flags", + "why": "B2's milestone. `ours` models only the two parts of the callback this hook's regions can see -- the observed-tech append and the RNG word RollResearchEvent draws before its branch (one word on a missed roll, two on a fired plague roll) -- and the rest is what the player guard reports" + }, + { + "mitigation": "region:rng", + "risk": "high", + "what": "the research-event branch RollResearchEvent takes when its roll beats the odds (ServerPlayer::OnResearchRollSucceeded: the plague and AI-rebellion event paths)", + "why": "RollResearchEvent draws one NextFloat unconditionally and that draw IS modelled -- but that is only the cost of REACHING the branch. A FIRED roll costs one or two words: the plague path draws a SECOND word (NextInt) to pick an owned system and posts EVENT_PLAGUE_OUTBREAK, while the rebellion path allocates an AIRebellion at ServerPlayer+0x3b8 and CANCELS the current research (no further draw). The branch is entered only for the plague and AI-rebellion tech families, whose odds are 0 everywhere else, and it has never been observed firing in three sessions -- which is why every earlier note in this repo said 'exactly one NextFloat' and nothing caught it. If it is ever entered, region:rng is the check" + }, + { + "mitigation": "region:observed_techs", + "risk": "medium", + "what": "constructs the ObservedTech element it appends to ServerPlayer+0x274", + "why": "`ours` models the append DECISION -- RecordObservedTech de-duplicates by tech name, so it decides whether the vector grows -- and moves the scratch header's byte span by one 0x2c element per append. The element's own fields (turn_first, turn_last, detected, the name string, `with`) are not built, and no region can see them" + }, + { + "mitigation": "guard:tree_header", + "risk": "low", + "what": "the tree's completion-order counter (TechTree+0x20) is read pre-call, not modelled as a region", + "why": "the per-node `order` word IS compared, and it is stamped from a counter `ours` seeds from the pre-call read and advances itself; the counter's own final value is only seen by the tree_header guard" + }, + { + "mitigation": "", + "risk": "low", + "what": "writes a completion line to the game log", + "why": "log text is not simulation state" + } + ], + "why": "" + }, + "ftol": 0, + "ftol_kind": "abs", + "ptr": "ignore" + }, + "Game::WeaponDictionary::Init": { + "coverage": { + "state": "partial", + "unmodelled": [ + { + "mitigation": "suspected cause of the sibling section hook's compare crash (docs/M2.md)", + "risk": "high", + "what": "LoadWeapon -> WeaponDef::ParseScript registers each weapon's name with the string table and resolves `requires` against the live TechTree", + "why": "per-file parsing is M3 scope; ours delegates to the game's own LoadWeapon, so a compare run performs the registration a SECOND time and neither the string table nor the tech tree is a declared region" + }, + { + "mitigation": "", + "risk": "low", + "what": "allocates 123 WeaponDef objects (0x278 bytes each) on the game heap", + "why": "the definitions do not exist when the hook is entered, so they cannot be a before-snapshot; the dictionary region compares them by id/name/path" + }, + { + "mitigation": "guard:dict", + "risk": "low", + "what": "the word at dictionary+0x14", + "why": "not modelled; emitted as an opaque pointer, which the default policy ignores -- a change is visible in a trace but never a divergence" + }, + { + "mitigation": "", + "risk": "low", + "what": "writes lines to the game log for a missing manifest", + "why": "log text is not simulation state" + }, + { + "mitigation": "", + "risk": "low", + "what": "std::sort tie order for equal weapon names", + "why": "msvc_sort.h replays MSVC 2010's introsort, but the shipped data has no tied names, so the tie rule is unexercised rather than verified" + } + ], + "why": "" + }, + "ftol": 0, + "ftol_kind": "abs", + "ptr": "ignore" + }, + "Mars::GlobalConsts::LoadFile": { + "coverage": { + "state": "partial", + "unmodelled": [ + { + "mitigation": "LoadAll's post-state would have to be hooked to see it", + "risk": "medium", + "what": "erases each consumed key from the caller's std::map", + "why": "the map is a LoadAll temporary; declaring a red-black tree as a region is not possible before the call. First-occurrence-wins is reproduced in game::config::apply instead, so the *effect* is modelled, the container is not" + }, + { + "mitigation": "", + "risk": "low", + "what": "writes three kinds of line to the game log (unrecognised key, applied key, expected-but-not-found)", + "why": "log text is not part of the simulation state" + }, + { + "mitigation": "", + "risk": "low", + "what": "opens the file through the VFS and allocates/releases a refcounted buffer", + "why": "ours performs the same two calls, so allocation behaviour matches by construction rather than by comparison" + }, + { + "mitigation": "", + "risk": "low", + "what": "String slots assign through the engine's own std::string, leaking one heap block per long string in compare mode", + "why": "start-up only; documented in docs/M1.md" + } + ], + "why": "" + }, + "ftol": 0, + "ftol_kind": "abs", + "ptr": "ignore" + }, + "Shim::SelfTest::Fill": { + "coverage": { + "state": "complete", + "unmodelled": [], + "why": "Fill writes buf[0..n) and nothing else; the whole range is a declared region" + }, + "ftol": 0, + "ftol_kind": "abs", + "ptr": "ignore" + } + }, + "inline_max": 256, + "started": "2026-09-09T13:42:14Z" + } + ], + "totals": { + "calls": 4, + "compared": 0, + "coverage_contradicted": 0, + "coverage_unstated": 0, + "diverged": 0, + "guarded_calls": 3, + "invalid_records": 0, + "undeclared_calls": 1, + "undeclared_writes": 1 + }, + "warnings": [] +} diff --git a/verify/results/compare/cr-replace1.md b/verify/results/compare/cr-replace1.md new file mode 100644 index 0000000..106ba9a --- /dev/null +++ b/verify/results/compare/cr-replace1.md @@ -0,0 +1,28 @@ +## tracecmp report: R1.trace.jsonl + +- build: cr-618ccb1-20260909T131556Z started: 2026-09-09T13:42:14Z inline_max: 256 +- calls: 4 compared: 0 diverged: 0 invalid records: 0 warnings: 0 +- coverage: 3 guarded call(s), 1 undeclared write(s) in 1 call(s); 0 hook(s) unstated, 0 contradicted + +| hook | calls | modes | compared | diverged | errors | +|---|---|---|---|---|---| +| Game::TechTree::ProcessResearch | 3 | replace:3 | 0 | 0 | 0 | +| Shim::SelfTest::Fill | 1 | trace:1 | 0 | 0 | 0 | + +### coverage + +| hook | verdict | compared regions | guards | undeclared writes | unmodelled | +|---|---|---|---|---|---| +| Game::TechTree::ProcessResearch | partial | events, node[0], node[105], node[106], node[107], node[108], +271 | player, tree_header | 1 in 1 call(s) | 8 | +| Shim::SelfTest::Fill | complete | buf | - | not watched | 0 | + +#### Game::TechTree::ProcessResearch — not checked by this run +- (medium) posts EVENT_RESEARCH_OVERBUDGET on the owner's EventStorage: ours reproduces the decision and the id sequence, so region:events compares next_id, but the composed EvDsc/EvMsg text is not reproduced and no region can see it — text comes from the game's string table, which the engine must not carry; ours posts into its own EventStorage and writes only the counts into the scratch copy, so no live byte moves and replace mode posts nothing at all [region:events] +- (low) composes EVENT_TECHS_UNLOCKED's message from the unlocked techs' names — the trigger and the list are modelled (SetResearched's availability sweep plus the tail collector, both read off the instruction stream), so region:events compares next_id; the names come from the game's string table, so the message is composed from node indices instead and is not the game's text [region:events] +- (high) TechTree::SetResearched in REPLACE mode: only its TechTree half runs, and only when research.replace_cascade=on — with the flag OFF (the default) nothing of the cascade runs, so a replace run leaves the completed node unstamped and no tech unlocked. With it ON, the four TechNode words (costRP, turnAvailable, turnResearched, order) and the tree's completion-order counter are written live, and the ServerPlayer half is still not: no event is posted, no ObservedTech element is appended and no tech effect is applied. Neither setting is a full displacement of the completion path; the pair measures where the boundary is [guard:player, guard:tree_header] +- (high) ServerPlayer::OnTechResearched's tech effects: the ~90 hard-coded ServerPlayer field writes, the plague-cure masks, the design-option bitmasks and the species tech flags — B2's milestone. `ours` models only the two parts of the callback this hook's regions can see -- the observed-tech append and the RNG word RollResearchEvent draws before its branch (one word on a missed roll, two on a fired plague roll) -- and the rest is what the player guard reports [guard:player] +- (high) the research-event branch RollResearchEvent takes when its roll beats the odds (ServerPlayer::OnResearchRollSucceeded: the plague and AI-rebellion event paths) — RollResearchEvent draws one NextFloat unconditionally and that draw IS modelled -- but that is only the cost of REACHING the branch. A FIRED roll costs one or two words: the plague path draws a SECOND word (NextInt) to pick an owned system and posts EVENT_PLAGUE_OUTBREAK, while the rebellion path allocates an AIRebellion at ServerPlayer+0x3b8 and CANCELS the current research (no further draw). The branch is entered only for the plague and AI-rebellion tech families, whose odds are 0 everywhere else, and it has never been observed firing in three sessions -- which is why every earlier note in this repo said 'exactly one NextFloat' and nothing caught it. If it is ever entered, region:rng is the check [region:rng] +- (medium) constructs the ObservedTech element it appends to ServerPlayer+0x274 — `ours` models the append DECISION -- RecordObservedTech de-duplicates by tech name, so it decides whether the vector grows -- and moves the scratch header's byte span by one 0x2c element per append. The element's own fields (turn_first, turn_last, detected, the name string, `with`) are not built, and no region can see them [region:observed_techs] +- (low) the tree's completion-order counter (TechTree+0x20) is read pre-call, not modelled as a region — the per-node `order` word IS compared, and it is stamped from a counter `ours` seeds from the pre-call read and advances itself; the counter's own final value is only seen by the tree_header guard [guard:tree_header] +- (low) writes a completion line to the game log — log text is not simulation state +- guard hits in replace mode: tree_header+0x20:1 diff --git a/verify/results/saves/certified-pairs.md b/verify/results/saves/certified-pairs.md index f6d452e..8e33ff0 100644 --- a/verify/results/saves/certified-pairs.md +++ b/verify/results/saves/certified-pairs.md @@ -20,6 +20,7 @@ those columns is an observation, not a certification. | `ref-turn2.sav` `ab4ac2d7…` | one End Turn | load | `bb4fd9ac…` | `978041ac…` | 5 + 1 | runs A–E; reproduced by lane H after everything changed | | `ar-turn37-816raiders.sav` `b6f4e05f…` | End Turn, **auto-resolve peacefully**, End Turn | load | `15b99255…` | `7a8b3d5e…` | **4** | lane AR ×3 `hooks=off`, lane BS ×1 instrumented | | `ar-oracle-A-pre.sav` `15b99255…` | one End Turn | **load** | `33e30092…` | `4c356f59…` | **3** | lane BQ ×2 `hooks=off`, lane BS ×1 instrumented | +| `turn3-state.sav` `978041ac…` | one End Turn | **load** | `e00eed0c…` | `79df5047…` | **3** | lane CR ×2 `hooks=off`, ×1 compare-instrumented | **The second and third rows are the same lineage and they do not agree with each other.** Row 2's second turn reached by continuation gives `7a8b3d5e…`; the identical turn reached by *loading* row 2's @@ -29,6 +30,22 @@ boundary, and it is why the route column exists. **Row 3 is the standalone's first trade-raid pair** — one End Turn, no encounter, four raid rolls at one word each. +**Row 4 is the first pair on a turn that completes a research tech** (lane CR, 2026-09-09). +`turn3-state.sav` is the *output* of row 1 — the `(Autosave).sav` that `ref-turn2` + one End Turn +produces — and the turn it starts is the one where `Player[32 "Fane Lao"]` completes tech 144 +`IND_Waldo` and the cascade unlocks three nodes. Row 1's own turn does **not** complete anything +(`unlock-b3-t1.md`: `0 undeclared write(s) in 0 call(s)`), so every research oracle before this row +was taken on a turn where the completion path did not run. Exposure at entry: none of the three +players with an AI client (32, 496, 512) has `ResTNm == ''`; `NumDes` does not move; two ships +complete and join existing fleets; the four factions at 528–576 carry the empty-`ResTNm` signature +inertly (`Status 0`, no client). Two ships completing *and* three fleets changing did **not** expose +this turn — a reminder that 26(c) is a screen and the control is the decision. + +Masks for row 4, measured against the input: **exactly `/Summary/Checksum` and `Player.Status 4 → 0` +on the four live players. No `/CD[1]/NPrvVa` term** — this state's `CD[1]` diplomacy block is +early-game and the leaf does not move, so the documented `--mask resave` rule holds here in its +original form. + ### Masks that must be on the line - `Player.Status` (4 → 0 on load) and the derived `Summary.Checksum`. diff --git a/verify/results/saves/cr/cr-oracle-autosave.sav b/verify/results/saves/cr/cr-oracle-autosave.sav new file mode 100644 index 0000000000000000000000000000000000000000..e05874394b342c301277815b3e786f2e34d77967 GIT binary patch literal 67811 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 literal 0 HcmV?d00001 diff --git a/verify/results/saves/cr/cr-replace0-autosave.sav b/verify/results/saves/cr/cr-replace0-autosave.sav new file mode 100644 index 0000000000000000000000000000000000000000..488c7beedb55fe1276bfea7b939c433c437efe23 GIT binary patch literal 67511 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.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 literal 0 HcmV?d00001 diff --git a/verify/results/saves/cr/cr-replace1-autosave.sav b/verify/results/saves/cr/cr-replace1-autosave.sav new file mode 100644 index 0000000000000000000000000000000000000000..fbefd9d75cc8a9ba2ed4577c8c4534aee08b4dbe GIT binary patch literal 67537 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

UG6?sdTjH4HeG0jqB3H%I z7wj@@{4zx@8P2^=_x3k_dK!rpe z4}o*0XKI2T@=T&GB$l;~AS6FZUKP)O`o^ zEcjR@SnO^2%?a1+$t}75)NgG2hAFOkNiAPQ&mPXJvfksm?*8NT6AdbF?v29;(BX7VQp-rIapTK3fpJTcHnPdwqBG8#2M#{qU>Bob>7#!s!Hdm5MH# zH{<=1vgk9mwvQH_u}q4D-i~d>+iE>*?Xx&&9qBQHNXZ+v9`yR1_HxO3MW}}CKxVkt zTGj7m%3{L&Vt)%GpTP``662Rjohdq_fZ2%0v3ovD>CPM324L0ea2pP^18fXkaMGxt zBz5aGC?tJRYQ{+g8{Xn+w9ELe-_$VTs}PN8p1Wjn)Bf|~DjTqcv=ST7LLPmS3#nyN zhl)62dWUK6rPa3|W!PNjv6(02y{s?}e%HB;viQb)t@}AyFNWwPh<%j-Q$e zNueNfE+=nMR-t-*Ldx{YqS)>4*<`zS;UDj^z;(up_4=+%=Z!$!t%p2SmgfB(0sVGM z55ju>ciV>62WM-YSyY#M&}=$nkHlx~bhYf7H$g|s>no?n_mxV(ksfG7 zUORP(or)CR&*Ob`CB$|G2Oo!)zyN(xn3eMT7jVah>b@pLmSgy|8DJ4k3BN=-BQ9p zlzFG-aG!IIEk8M+S6n3HDGv1|45&SHYlfe_*KBD8TI=cbmUSj5ZdhyU%knjrju0;@ zAM3-IDBh^s^{;f#X#49%o5k(6jUwQeH1Cn`vJJICRV22W-dQ32WR*+zamVo;Q?{BQ zKfD*4b>ubQ?XK@c+yTRJ_5y9D5A$zWlLtu;Illv`|U z4|E@nN_{RnPx?x*cWa#tr`M-vgE27~{5v5TJT0|>lX%pVL3s72b32pR-Q3Jq3WeE4 zmL|XwEmfYRuhrK(o~f4Pc54pb@NU|t5dA(SD8`m&h4OrBIeNddS8H4V+sK4L_)z^f zH!Xn8N2DJ$ZQ%G1u$>B8WaZIrZkBVC$Lmzjs1XRCEO-Xk^N$J2GDv1jZfz9bCJe|Q zG{)jT;3jr72bZksJG;*%!L%0A9@ToeEe~iz-;HSm-6*`Fp~rp z!m_R11R18O4^FjC+18@f^y*oBD$>`eI<>-C&t|;7;j;M5)z64aD(Z`KonS~bg}7|`_H*KO-k6n zw?D1C4@uK|O+n=o)qQU5Wv=8+iyxW7yWSrA7g4E*K@8XK+M$gW6LA^T75h<6nmN^* z>U5ITe8J;H{7>#F2dd|T!3CR^=sRqdf^j>87`7*QZ1v>OZltyj&Np&|KeHzJ)bsc@`1MmEa2Bsm*izkf3##t? zh6Tvut=O2vrh7Qb%ViSbqK;;~_StPv4{uMcP;l5ihU$WNdcD`=*sSSwMSRr#@vqVH zDcai6(gq5ixx&S9@ykiCwb0W+ameEhjdAh#k5J*>dDE23>d}nr3oWKO(>Fv{EmOXX zHtAdWGU)#rb)oC~RnlAP6QDfF0VOO)RGo)d}I8?IOK6ja{``dL-q&ghWiL+n_Q z;$5H~T2E$fy&&>ziwHy` zxtzY2>TBb`l>z~9rI7yTN`W+8{CWn&Ff=vG|KV(zS{{&k+5QK|FO zUo;@-iOJA54qnJqJyE0;CTmd1YTYf4lf#)wst59H!hp)QHqwuQ@}E>u-D_Sxgu@%R zpjJ)v;7jE9M=0bty2*4Gd0$#Cby-e3so;~|MXeT5Br&Y$a{J{ z#s2K-(M^r1`-v(evgMY^FE4~cYi+#6!&>W65>&7K5v>NEJr&=yVlJ1Xn4pe~))gZ9PfzT^K-uQ<#B5i6-?=YR)lc_6K z(m&Vx7B51;ln|okFViBuWlD=6^~nfDrxAOP?GtqjuI3lJJC9E&-4klMCG8@H9lp{f z#-K%9zS87vlXLw%Ig_YRnERZ7OKVKfbgnp>SgTN(ohe0I6xcBm{>^_S1Ko{@u3bW1>oyY}OXv<~3etf{_HCG(D@ ztc9|Q*wZ~_;M;%f)n`;#i{bCNQL4fojdr+$f?|j2v%XyzWpJ2?*@0}4gJMhYv&^ux z4}C9w++ZemCassBdbhtRHDCh@EunAp7rXT~rYnkQf-iW5%Ed<|&X@U$nDOypy1k^=6rYF-D+d6Do7K4@r$o`5S?I%`;v*j_*RJNyDHmh zYXkWib0wstpELJM6LIA7s!gtTvCMWIMfrn-c`Sz(W4~LyuCfz~T=Qre*9}K9ztnG? z454Z7EjQ;YDB8}tU8A*XxtYxNM~-Bv8KWfewh58Dv`QWRD}GT{TdSZATeG`(q@ys4 zg|JjU`O8%)%0G9}Np4N`zqMGj<7LiT`O1H(M18EX&g4RMqY;~s&rHC!9>+I4d z3h9t39meFx1k>`S5FtY_?KrDiBccH3@orw=#)r&w0rI<*=si7^mYzxZ`git6n6EDh zmOb=&qef|#XCB0&y-#k)oOvTX1TjjeqM|+M*?M}k>_I#I7S?yR8&r4`czwp*4|Xf$ z9f#h!Ydw%#UPk&Scdh5s{VBG6!l+++Yj`s>-AIlr?N;0Ejn=Z|N<-oZQ0w2`Rlk** zb`{vG2PmXDUODb|}Tp?b+sER-YZ!z9f;F|Y#ZNVRMa z_R^|xugt@XMvkT=KhN@F`)z`>5;4HjBwXkN1d@+bas6^%kMkraeVCHu181DB>5Y&N zchC~cY#CCpz(zbSZk|7vdXw1tHW2=?>ZdTxwUij=)Cj!Il819zZa2{FwA5TYa4YZ^ zXNsmyn`de9{8;z(XQ@=`gZHO#IhFi7k&E-3A-%YuX&og5ZCETPW4xwY*rr}O4pX6w z_dA0OAz$Tk_S9PLT#6cr4rt=^tERY#1K#ih`1W^XC{D(a^WOO+M4$x@j~G3bLFu9P zw~vt-JeLgW8K7%II!YvmzE~7ATWOH!4kWkgIt7ysK-4xM%yAEu{g9V`{yvX90rQd5eFY9&B0x8EbpJ|0J9sbd}NYIxVL z@kNV|tYl#1C;L@#a~ky}b)SeYu5274Pcm7i=@?jpBvr%*nQlx7#^TP;C9V-@CO z$U^6I`5=cUpbBO#qRfZ^zZmsHGGXSP@FQT-#Cz0Bn?OlT9CopiAdR1I+AXBU=B?>|AY&eBX-^5caW&&&5%gD*DL5uc<^xK-p5g-f--S zq1Bp&@ymqd9Z#F%%Z(DOX3PCEuc;rbZIYW2qQu63xH>O4pU%0$;ZAL2Kt9-)TU`~VPdTVWuXrC?N|xU6wO>zR-lKs0 zP_T}pD=fQB^RvVD08Y0HQExNvQbSZJE#>0r1WL*+S55HJRn|tr>nC>UsLcGTaYjql zbZ_K%RUWrW)&It3wi&%7!-x|oof$jPcs_7s;})r3&xK$o5p1i|&kUK+>LDcKOIb+B z)r>N9OJ>>}YjvQwNb?rB-&A&JsSQH3y|qJ~#*^+Nw1Nx!*0+NOVew3*UMtV$mM@pm zbMCx`uspu3RNJAtbDmB(hzWKz8ERG_YUOSge9w+NBY!$TZ;08T-I^6I!ZO~z#9B$v zs7BLy-1^M6nIwhHxv~jeXRycfGtaz;WXrai*ucel2-4kRBwMuio-CgvI+rMeijoFF zoM(6{Hb+nG*+4dW{!ZI@>meJJFdylj$m~86@XT9f>Z{oZd_C_J)nS>hD~c`uIX$yV ziITCv{(0!nNs9z|=b9E@uJs|Yq$(|em`{dp@ zB+&Wd0rR%|(h95%`fa?XX7Q~Rbrjv@t7PocG~T0#!*;j5x5+A@Kf^HXH~ZfeShia+ z{HO&_zkXII!p@13DqGrzkezouvaQ&euB$BU6g(9Z63+WTTz zlnsyzYQLU-|ETa z_sPL;Z_r>zuQxP|idXw*YAlFYP13NR?dmdEu??`=o)C9J}DFkIummWHL6VP zNQEDn!9C_~v>c{?0i)I@essH|w)5&QDSL)HZmeEEq^Z`%u-FgsU1ZnX_0BFe0#y@z z)}k&>B6BQp(=1!*wcuXsU61qg5Ehli_FFa)y_}o(SSMB1ExIrm0{mbP7php@24#CM zeOL}k>VdkoF9Bve+`mC~>Wtc`Z1U zkIW8%U$j9#L(CB_!`Kz$*cUTeY#(;0#{8MXd z&C8YA==#vbd;Vt@b`rr*YB}Ci=Sv)N1!Y)b?oxu^RK}jIP@9s-nuoxsup25|c-8y| zYycIV*8!Fya>)NidM-opq#m3|&bvBvIB!#JCbjelL)*9q?P(sgSWHfKRJFW@r9@)Uk%&YO7z* zPW@m4G4h;f2|TU&_@FHq;n~ga^#rtRlvgFT|Mb;0$}^fu2}_U zJCCI3To3)wI|`o-lq*3=wF>AfxC-;7C(YjtdPm!_zehPR8 z?JNjGH~5Ya`Id0RW@W2vCS|pZo=p4l)a2Og6r{Ni3%(<%0Mo!tI`2bg((MGcXz*K~ zA~^LS;`^}to_{NuvO|EqpGn6@a4P=*qqIO)w_vtS>7&E_fwPZQlU%s(!HUwZqyD;> GNdF5750b(F literal 0 HcmV?d00001 diff --git a/verify/results/saves/determinism-hashes.txt b/verify/results/saves/determinism-hashes.txt index ec2e9a5..a0536b6 100644 --- a/verify/results/saves/determinism-hashes.txt +++ b/verify/results/saves/determinism-hashes.txt @@ -37,3 +37,11 @@ b6f4e05ff226eabd1695003b36293553642553cea96ef417364393e2332a7094 verify/results 1c8baa27680809d585ab1728391e82729642d32aaedffd5bf95b616f0a11a436 verify/results/saves/ad-turn27-two-raiders.sav e913ff41188211c02d536da616337544e64133996cd7cc7a6521a8df1960226f verify/results/saves/bp-pinA-turn28.sav 724528ffde9a7514b69ab9e82ed3b8c8ade63d622c0720de30503a73a92df11e verify/results/saves/bp-pinB-turn28.sav + +# Lane CR, 2026-09-09 -- VM145. Input turn3-state.sav (= the (Autosave).sav of certified-pairs +# row 1), one End Turn, LOAD route. Build cr-618ccb1-20260909T131556Z, shimdist-cr. +# C1/C2 hooks=off (two fresh processes), N compare, R0/R1 replace. +e00eed0c03a31d27a81b7470a9dcc9ba08a2ac48c20baeee4f34749164743e3f 67212 (Autosave EndTurn).sav C1 == C2 == N == R0 == R1 +79df50475a7b83afa927d992b9f030dcf45710f4bda0133b8b1fa4800a72e420 67811 (Autosave).sav C1 == C2 == N [THE ORACLE] +6b51db992b158caa5424d71b2dccf72924af7198b4165bfcfc870e0d438fb6d5 67511 (Autosave).sav R0 replace, research.replace_cascade=off -> 27 leaves +8a4309ee4fe0b3177a2820600b5016c7c256d0f51b065df469ecd0b4f2342235 67537 (Autosave).sav R1 replace, research.replace_cascade=on -> 16 leaves diff --git a/verify/results/shim/cr/cr-N.log b/verify/results/shim/cr/cr-N.log new file mode 100644 index 0000000..b040b63 --- /dev/null +++ b/verify/results/shim/cr/cr-N.log @@ -0,0 +1,118 @@ +09:33:54.650 [tid 880] ==== sots-engine shim (binkw32 proxy) build cr-618ccb1-20260909T131556Z ==== +09:33:54.650 [tid 880] exe: C:\SOTS\Sword of the Stars.exe +09:33:54.650 [tid 880] exe base=0x00f40000 (link-time image base 0x00400000, ASLR delta +11796480) pid=20996 shim=71d70000 +09:33:54.650 [tid 880] addresses: Source: sots-re ghidra/addresses.json @ aa8d3fb, generated 2026-09-09 by tools/gen_addresses.py +09:33:54.650 [tid 880] config: hooks=trace +09:33:54.650 [tid 880] config: hook.Game::EncounterDetect::AssignContacts=off +09:33:54.650 [tid 880] config: hook.Game::EncounterDetect::ProcessTeamRecord=off +09:33:54.650 [tid 880] config: hook.Game::SVSOSlaversRefuel::UpdateDifficultyTier=off +09:33:54.650 [tid 880] config: hook.Game::SVSOSwarmQueen::OnTurnBegin=off +09:33:54.650 [tid 880] config: hook.Game::SVSOSwarmQueen::RegisterHives=off +09:33:54.650 [tid 880] config: hook.Game::SVSOSwarmQueen::TickHives=off +09:33:54.650 [tid 880] config: hook.Game::SectionDictionary::SectionDictionary=off +09:33:54.650 [tid 880] config: hook.Game::ServerPlayer::ComputeBudget=off +09:33:54.650 [tid 880] config: hook.Game::ServerPlayer::OnTechResearched=off +09:33:54.650 [tid 880] config: hook.Game::ServerPlayer::ProcessTurn=off +09:33:54.650 [tid 880] config: hook.Game::ServerSystem::ComputeTotalOutput=off +09:33:54.650 [tid 880] config: hook.Game::ServerSystem::GroupOutput=off +09:33:54.650 [tid 880] config: hook.Game::ServerSystem::ProcessTurn=off +09:33:54.650 [tid 880] config: hook.Game::StrategyApp::RunAI=off +09:33:54.650 [tid 880] config: hook.Game::StrategyHost::Autosave=off +09:33:54.650 [tid 880] config: hook.Game::StrategyServer::ApplyEncounterResult=off +09:33:54.650 [tid 880] config: hook.Game::StrategyServer::BeginProcessTurn=off +09:33:54.650 [tid 880] config: hook.Game::StrategyServer::MoveFleet=off +09:33:54.650 [tid 880] config: hook.Game::StrategyServer::NodeLineDecay=off +09:33:54.650 [tid 880] config: hook.Game::StrategyServer::OnAllCombatDone_Tail=off +09:33:54.650 [tid 880] config: hook.Game::StrategyServer::ProcessFleetMovement=off +09:33:54.650 [tid 880] config: hook.Game::StrategyServer::ProcessNodeSpaceTravel=off +09:33:54.650 [tid 880] config: hook.Game::StrategyServer::ProcessTurn=off +09:33:54.650 [tid 880] config: hook.Game::WeaponDictionary::Init=off +09:33:54.650 [tid 880] config: hook.Mars::GlobalConsts::LoadFile=off +09:33:54.650 [tid 880] config: hook.Mars::RNG::Seed=off +09:33:54.650 [tid 880] config: hook.Game::TechTree::ProcessResearch=compare +09:33:54.650 [tid 880] config: research.replace_cascade=off +09:33:54.650 [tid 880] config: trace.path=C:\SOTS\shim.trace.jsonl +09:33:54.650 [tid 880] config: trace.inline_max=256 +09:33:54.650 [tid 880] config: trace.flush=always +09:33:54.728 [tid 880] trace: C:\SOTS\shim.trace.jsonl (default mode trace, inline_max 256, flush always) +09:33:54.728 [tid 880] hook: Mars_Application_Initialize rva=0x004a0e50 -> va=013e0e50 +09:33:54.728 [tid 880] hook: MH_Initialize -> MH_OK +09:33:54.728 [tid 880] hook: MH_CreateHook -> MH_OK (trampoline=00a30fe0) +09:33:54.759 [tid 880] hook: MH_EnableHook -> MH_OK +09:33:54.759 [tid 880] cfg: GlobalConsts hook ready (scale constant 0.017453292519943295) +09:33:54.759 [tid 880] hook: Mars::GlobalConsts::LoadFile rva=0x004b73c0 mode=off (not installed) +09:33:54.759 [tid 880] dict: dictionaries hook ready (crt new=73e7232b delete=73e70174) +09:33:54.759 [tid 880] hook: Game::WeaponDictionary::Init rva=0x0019a4c0 mode=off (not installed) +09:33:54.759 [tid 880] hook: Game::SectionDictionary::SectionDictionary rva=0x00176f40 mode=off (not installed) +09:33:54.759 [tid 880] research: ProcessResearch hook ready (Cost=010bda00, node=0x34, rng=0x9cc, fpu_cw=0x027f, replace_cascade=off) +09:33:54.759 [tid 880] hook: Game::TechTree::ProcessResearch rva=0x001876c0 -> va=010c76c0 MH_CreateHook -> MH_OK (trampoline=00a30fc0) +09:33:54.775 [tid 880] hook: Game::TechTree::ProcessResearch MH_EnableHook -> MH_OK mode=compare +09:33:54.775 [tid 880] techfx: OnTechResearched hook ready (regions=15, gate=0/0, fpu_cw=0x027f) +09:33:54.775 [tid 880] hook: Game::ServerPlayer::OnTechResearched rva=0x00491790 mode=off (not installed) +09:33:54.775 [tid 880] hook: Game::ServerPlayer::ComputeBudget rva=0x00463030 mode=off (not installed) +09:33:54.775 [tid 880] hook: Game::ServerSystem::ProcessTurn rva=0x003598e0 mode=off (not installed) +09:33:54.775 [tid 880] hook: Game::ServerSystem::GroupOutput rva=0x0034b7a0 mode=off (not installed) +09:33:54.775 [tid 880] hook: Game::ServerSystem::ComputeTotalOutput rva=0x00350480 mode=off (not installed) +09:33:54.775 [tid 880] player_turn: ServerPlayer::ProcessTurn hook armed (ratio helper at 010be950) +09:33:54.775 [tid 880] hook: Game::ServerPlayer::ProcessTurn rva=0x00491340 mode=off (not installed) +09:33:54.775 [tid 880] hook: Game::StrategyServer::MoveFleet rva=0x003d9ee0 mode=off (not installed) +09:33:54.775 [tid 880] hook: Game::StrategyServer::ProcessFleetMovement rva=0x003da9a0 mode=off (not installed) +09:33:54.775 [tid 880] hook: Game::StrategyHost::Autosave rva=0x00495210 mode=off (not installed) +09:33:54.775 [tid 880] hook: Game::StrategyServer::ProcessTurn rva=0x003dc6c0 mode=off (not installed) +09:33:54.775 [tid 880] hook: Game::StrategyServer::OnAllCombatDone_Tail rva=0x003d92a0 mode=off (not installed) +09:33:54.775 [tid 880] hook: Game::StrategyServer::ApplyEncounterResult rva=0x003d8920 mode=off (not installed) +09:33:54.775 [tid 880] hook: Game::StrategyServer::NodeLineDecay rva=0x003ae010 mode=off (not installed) +09:33:54.775 [tid 880] hook: Game::StrategyServer::ProcessNodeSpaceTravel rva=0x003a0e20 mode=off (not installed) +09:33:54.775 [tid 880] hook: Game::EncounterDetect::AssignContacts rva=0x003aa240 mode=off (not installed) +09:33:54.775 [tid 880] hook: Game::EncounterDetect::ProcessTeamRecord rva=0x003ca640 mode=off (not installed) +09:33:54.775 [tid 880] hook: Game::StrategyServer::BeginProcessTurn rva=0x003d98e0 mode=off (not installed) +09:33:54.775 [tid 880] hook: Game::SVSOSwarmQueen::OnTurnBegin rva=0x00129930 mode=off (not installed) +09:33:54.775 [tid 880] hook: Game::SVSOSwarmQueen::RegisterHives rva=0x00127630 mode=off (not installed) +09:33:54.775 [tid 880] hook: Game::SVSOSwarmQueen::TickHives rva=0x00127770 mode=off (not installed) +09:33:54.775 [tid 880] hook: Game::SVSOSlaversRefuel::UpdateDifficultyTier rva=0x00115820 mode=off (not installed) +09:33:54.775 [tid 880] hook: Mars::RNG::Seed rva=0x0009fdf0 mode=off (not installed) +09:33:54.775 [tid 880] hook: Game::StrategyApp::RunAI rva=0x004706f0 mode=off (not installed) +09:33:54.806 [tid 880] drawsite: Mars::RNG::NextFloat rva=0x0007d830 -> va=00fbd830 create=MH_OK enable=MH_OK +09:33:54.822 [tid 880] drawsite: Mars::RNG::NextInt rva=0x000271c0 -> va=00f671c0 create=MH_OK enable=MH_OK +09:33:54.853 [tid 880] drawsite: Mars::RNG::Chance rva=0x004e6dd0 -> va=01426dd0 create=MH_OK enable=MH_OK +09:33:54.869 [tid 880] drawsite: Mars::RNG::NextUInt rva=0x000f7670 -> va=01037670 create=MH_OK enable=MH_OK +09:33:54.884 [tid 880] drawsite: Mars::RNG::FloatRange rva=0x0007d8a0 -> va=00fbd8a0 create=MH_OK enable=MH_OK +09:33:54.916 [tid 880] drawsite: Mars::RNG::IntRangeBell rva=0x004e6d80 -> va=01426d80 create=MH_OK enable=MH_OK +09:33:54.931 [tid 880] drawsite: Mars::RNG::GaussianRange rva=0x004e6e30 -> va=01426e30 create=MH_OK enable=MH_OK +09:33:54.931 [tid 880] probe: installing 12 of 12 (probes= in shim.cfg) +09:33:54.947 [tid 880] probe: Game::ServerSpyManager::vslot13 rva=0x004877b0 -> va=013c77b0 create=MH_OK enable=MH_OK +09:33:54.963 [tid 880] probe: Game::ServerSpyManager::vslot14 rva=0x0048db80 -> va=013cdb80 create=MH_OK enable=MH_OK +09:33:54.994 [tid 880] probe: Game::ServerTradeManagerImpl::vslot13 rva=0x0048ef80 -> va=013cef80 create=MH_OK enable=MH_OK +09:33:55.009 [tid 880] probe: Game::ServerTradeManagerImpl::vslot15 rva=0x0042cca0 -> va=0136cca0 create=MH_OK enable=MH_OK +09:33:55.025 [tid 880] probe: Game::SpyManager::Slot13RngCallee rva=0x004408e0 -> va=013808e0 create=MH_OK enable=MH_OK +09:33:55.041 [tid 880] probe: Game::TradeManager::Slot13RngCalleeA rva=0x00420ca0 -> va=01360ca0 create=MH_OK enable=MH_OK +09:33:55.072 [tid 880] probe: Game::TradeManager::Slot13RngCalleeB rva=0x0048b440 -> va=013cb440 create=MH_OK enable=MH_OK +09:33:55.088 [tid 880] probe: Game::ServerTradeManager::CreateRaidEncounter rva=0x004938a0 -> va=013d38a0 create=MH_OK enable=MH_OK +09:33:55.103 [tid 880] probe: Game::ServerTradeManager::GenerateTradeRaidEncounters rva=0x00493290 -> va=013d3290 create=MH_OK enable=MH_OK +09:33:55.134 [tid 880] probe: Game::ServerSpyManager::vslot15 [control] rva=0x00487f30 -> va=013c7f30 create=MH_OK enable=MH_OK +09:33:55.150 [tid 880] probe: Game::ServerTradeManagerImpl::vslot14 [control] rva=0x004590d0 -> va=013990d0 create=MH_OK enable=MH_OK +09:33:55.166 [tid 880] probe: Game::EncounterDetect::Run [control] rva=0x003cb080 -> va=0130b080 create=MH_OK enable=MH_OK +09:33:55.166 [tid 880] watch: disabled (watch=off) +09:33:55.166 [tid 880] aiorders: disabled (aiorders=off) +09:33:55.166 [tid 880] fpu: module init, entry cw=0x027f 53bit-double/nearest; force=off value=0x0000 sample_ticks=on +09:33:55.166 [tid 880] fpu: sample_turn=on (off releases StrategyServer::ProcessTurn for another hook) +09:33:55.166 [tid 880] fpu: StrategyClient::EndTurn rva=0x00383be0 -> va=012c3be0 MH_CreateHook -> MH_OK (trampoline=00a30d40) +09:33:55.197 [tid 880] fpu: StrategyClient::EndTurn MH_EnableHook -> MH_OK +09:33:55.197 [tid 880] fpu: StrategyServer::BeginProcessTurn rva=0x003d98e0 -> va=013198e0 MH_CreateHook -> MH_OK (trampoline=00a30d20) +09:33:55.213 [tid 880] fpu: StrategyServer::BeginProcessTurn MH_EnableHook -> MH_OK +09:33:55.213 [tid 880] fpu: StrategyServer::ProcessTurn rva=0x003dc6c0 -> va=0131c6c0 MH_CreateHook -> MH_OK (trampoline=00a30d00) +09:33:55.228 [tid 880] fpu: StrategyServer::ProcessTurn MH_EnableHook -> MH_OK +09:33:55.228 [tid 880] fpu: DemoApp::OnTick rva=0x0049a640 -> va=013da640 MH_CreateHook -> MH_OK (trampoline=00a30ce0) +09:33:55.259 [tid 880] fpu: DemoApp::OnTick MH_EnableHook -> MH_OK +09:33:55.259 [tid 880] selftest: Shim::SelfTest::Fill mode=trace checksum=075ef0c3 records=1 +09:33:55.275 [tid 880] Application::Initialize called (this=00a88128) +09:33:56.166 [tid 880] fpu: TICK BASELINE at OnTick (this=00a88128): cw=0x127f 53bit-double/nearest +09:39:38.180 [tid 880] fpu: sample at StrategyClient::EndTurn (this=1e0711e8): cw=0x127f 53bit-double/nearest [no fpu.force configured] +09:39:41.289 [tid 880] fpu: sample at StrategyClient::EndTurn (this=32c5e628): cw=0x127f 53bit-double/nearest [no fpu.force configured] +09:39:41.336 [tid 880] fpu: sample at StrategyClient::EndTurn (this=32c58038): cw=0x127f 53bit-double/nearest [no fpu.force configured] +09:39:41.383 [tid 880] fpu: sample at StrategyClient::EndTurn (this=32c5d798): cw=0x127f 53bit-double/nearest [no fpu.force configured] +09:39:42.305 [tid 880] fpu: sample at StrategyServer::BeginProcessTurn (this=0d2908c8): cw=0x127f 53bit-double/nearest [no fpu.force configured] +09:39:42.305 [tid 880] fpu: sample at StrategyServer::ProcessTurn (this=0d2908c8): cw=0x127f 53bit-double/nearest +09:39:42.336 [tid 880] research: mode=compare steps=1 completions=1 overbudget=1166 cascade_possible=1 ok=1 cascade_completions=1 unlocked=3 otch_appends=1 roll_draws=0 failures=0 depth=0 name_unreadable=0 +09:39:42.383 [tid 880] research: mode=compare steps=1 completions=0 overbudget=0 cascade_possible=1 ok=1 cascade_completions=0 unlocked=0 otch_appends=0 roll_draws=0 failures=0 depth=0 name_unreadable=0 +09:39:42.398 [tid 880] research: mode=compare steps=1 completions=0 overbudget=0 cascade_possible=1 ok=1 cascade_completions=0 unlocked=0 otch_appends=0 roll_draws=0 failures=0 depth=0 name_unreadable=0 diff --git a/verify/results/shim/cr/cr-R0.log b/verify/results/shim/cr/cr-R0.log new file mode 100644 index 0000000..ea09c6d --- /dev/null +++ b/verify/results/shim/cr/cr-R0.log @@ -0,0 +1,118 @@ +09:51:31.009 [tid 19724] ==== sots-engine shim (binkw32 proxy) build cr-618ccb1-20260909T131556Z ==== +09:51:31.009 [tid 19724] exe: C:\SOTS\Sword of the Stars.exe +09:51:31.009 [tid 19724] exe base=0x00f40000 (link-time image base 0x00400000, ASLR delta +11796480) pid=20348 shim=71d70000 +09:51:31.009 [tid 19724] addresses: Source: sots-re ghidra/addresses.json @ aa8d3fb, generated 2026-09-09 by tools/gen_addresses.py +09:51:31.009 [tid 19724] config: hooks=trace +09:51:31.009 [tid 19724] config: hook.Game::EncounterDetect::AssignContacts=off +09:51:31.009 [tid 19724] config: hook.Game::EncounterDetect::ProcessTeamRecord=off +09:51:31.009 [tid 19724] config: hook.Game::SVSOSlaversRefuel::UpdateDifficultyTier=off +09:51:31.009 [tid 19724] config: hook.Game::SVSOSwarmQueen::OnTurnBegin=off +09:51:31.009 [tid 19724] config: hook.Game::SVSOSwarmQueen::RegisterHives=off +09:51:31.009 [tid 19724] config: hook.Game::SVSOSwarmQueen::TickHives=off +09:51:31.009 [tid 19724] config: hook.Game::SectionDictionary::SectionDictionary=off +09:51:31.025 [tid 19724] config: hook.Game::ServerPlayer::ComputeBudget=off +09:51:31.025 [tid 19724] config: hook.Game::ServerPlayer::OnTechResearched=off +09:51:31.025 [tid 19724] config: hook.Game::ServerPlayer::ProcessTurn=off +09:51:31.025 [tid 19724] config: hook.Game::ServerSystem::ComputeTotalOutput=off +09:51:31.025 [tid 19724] config: hook.Game::ServerSystem::GroupOutput=off +09:51:31.025 [tid 19724] config: hook.Game::ServerSystem::ProcessTurn=off +09:51:31.025 [tid 19724] config: hook.Game::StrategyApp::RunAI=off +09:51:31.025 [tid 19724] config: hook.Game::StrategyHost::Autosave=off +09:51:31.025 [tid 19724] config: hook.Game::StrategyServer::ApplyEncounterResult=off +09:51:31.025 [tid 19724] config: hook.Game::StrategyServer::BeginProcessTurn=off +09:51:31.025 [tid 19724] config: hook.Game::StrategyServer::MoveFleet=off +09:51:31.025 [tid 19724] config: hook.Game::StrategyServer::NodeLineDecay=off +09:51:31.025 [tid 19724] config: hook.Game::StrategyServer::OnAllCombatDone_Tail=off +09:51:31.025 [tid 19724] config: hook.Game::StrategyServer::ProcessFleetMovement=off +09:51:31.025 [tid 19724] config: hook.Game::StrategyServer::ProcessNodeSpaceTravel=off +09:51:31.025 [tid 19724] config: hook.Game::StrategyServer::ProcessTurn=off +09:51:31.025 [tid 19724] config: hook.Game::WeaponDictionary::Init=off +09:51:31.025 [tid 19724] config: hook.Mars::GlobalConsts::LoadFile=off +09:51:31.025 [tid 19724] config: hook.Mars::RNG::Seed=off +09:51:31.025 [tid 19724] config: hook.Game::TechTree::ProcessResearch=replace +09:51:31.025 [tid 19724] config: research.replace_cascade=off +09:51:31.025 [tid 19724] config: trace.path=C:\SOTS\shim.trace.jsonl +09:51:31.025 [tid 19724] config: trace.inline_max=256 +09:51:31.025 [tid 19724] config: trace.flush=always +09:51:31.088 [tid 19724] trace: C:\SOTS\shim.trace.jsonl (default mode trace, inline_max 256, flush always) +09:51:31.088 [tid 19724] hook: Mars_Application_Initialize rva=0x004a0e50 -> va=013e0e50 +09:51:31.088 [tid 19724] hook: MH_Initialize -> MH_OK +09:51:31.088 [tid 19724] hook: MH_CreateHook -> MH_OK (trampoline=017e0fe0) +09:51:31.119 [tid 19724] hook: MH_EnableHook -> MH_OK +09:51:31.119 [tid 19724] cfg: GlobalConsts hook ready (scale constant 0.017453292519943295) +09:51:31.119 [tid 19724] hook: Mars::GlobalConsts::LoadFile rva=0x004b73c0 mode=off (not installed) +09:51:31.119 [tid 19724] dict: dictionaries hook ready (crt new=73e7232b delete=73e70174) +09:51:31.119 [tid 19724] hook: Game::WeaponDictionary::Init rva=0x0019a4c0 mode=off (not installed) +09:51:31.119 [tid 19724] hook: Game::SectionDictionary::SectionDictionary rva=0x00176f40 mode=off (not installed) +09:51:31.119 [tid 19724] research: ProcessResearch hook ready (Cost=010bda00, node=0x34, rng=0x9cc, fpu_cw=0x027f, replace_cascade=off) +09:51:31.119 [tid 19724] hook: Game::TechTree::ProcessResearch rva=0x001876c0 -> va=010c76c0 MH_CreateHook -> MH_OK (trampoline=017e0fc0) +09:51:31.134 [tid 19724] hook: Game::TechTree::ProcessResearch MH_EnableHook -> MH_OK mode=replace +09:51:31.134 [tid 19724] techfx: OnTechResearched hook ready (regions=15, gate=0/0, fpu_cw=0x027f) +09:51:31.134 [tid 19724] hook: Game::ServerPlayer::OnTechResearched rva=0x00491790 mode=off (not installed) +09:51:31.134 [tid 19724] hook: Game::ServerPlayer::ComputeBudget rva=0x00463030 mode=off (not installed) +09:51:31.134 [tid 19724] hook: Game::ServerSystem::ProcessTurn rva=0x003598e0 mode=off (not installed) +09:51:31.134 [tid 19724] hook: Game::ServerSystem::GroupOutput rva=0x0034b7a0 mode=off (not installed) +09:51:31.134 [tid 19724] hook: Game::ServerSystem::ComputeTotalOutput rva=0x00350480 mode=off (not installed) +09:51:31.134 [tid 19724] player_turn: ServerPlayer::ProcessTurn hook armed (ratio helper at 010be950) +09:51:31.134 [tid 19724] hook: Game::ServerPlayer::ProcessTurn rva=0x00491340 mode=off (not installed) +09:51:31.134 [tid 19724] hook: Game::StrategyServer::MoveFleet rva=0x003d9ee0 mode=off (not installed) +09:51:31.134 [tid 19724] hook: Game::StrategyServer::ProcessFleetMovement rva=0x003da9a0 mode=off (not installed) +09:51:31.134 [tid 19724] hook: Game::StrategyHost::Autosave rva=0x00495210 mode=off (not installed) +09:51:31.134 [tid 19724] hook: Game::StrategyServer::ProcessTurn rva=0x003dc6c0 mode=off (not installed) +09:51:31.134 [tid 19724] hook: Game::StrategyServer::OnAllCombatDone_Tail rva=0x003d92a0 mode=off (not installed) +09:51:31.134 [tid 19724] hook: Game::StrategyServer::ApplyEncounterResult rva=0x003d8920 mode=off (not installed) +09:51:31.134 [tid 19724] hook: Game::StrategyServer::NodeLineDecay rva=0x003ae010 mode=off (not installed) +09:51:31.134 [tid 19724] hook: Game::StrategyServer::ProcessNodeSpaceTravel rva=0x003a0e20 mode=off (not installed) +09:51:31.134 [tid 19724] hook: Game::EncounterDetect::AssignContacts rva=0x003aa240 mode=off (not installed) +09:51:31.134 [tid 19724] hook: Game::EncounterDetect::ProcessTeamRecord rva=0x003ca640 mode=off (not installed) +09:51:31.134 [tid 19724] hook: Game::StrategyServer::BeginProcessTurn rva=0x003d98e0 mode=off (not installed) +09:51:31.134 [tid 19724] hook: Game::SVSOSwarmQueen::OnTurnBegin rva=0x00129930 mode=off (not installed) +09:51:31.134 [tid 19724] hook: Game::SVSOSwarmQueen::RegisterHives rva=0x00127630 mode=off (not installed) +09:51:31.134 [tid 19724] hook: Game::SVSOSwarmQueen::TickHives rva=0x00127770 mode=off (not installed) +09:51:31.134 [tid 19724] hook: Game::SVSOSlaversRefuel::UpdateDifficultyTier rva=0x00115820 mode=off (not installed) +09:51:31.134 [tid 19724] hook: Mars::RNG::Seed rva=0x0009fdf0 mode=off (not installed) +09:51:31.134 [tid 19724] hook: Game::StrategyApp::RunAI rva=0x004706f0 mode=off (not installed) +09:51:31.166 [tid 19724] drawsite: Mars::RNG::NextFloat rva=0x0007d830 -> va=00fbd830 create=MH_OK enable=MH_OK +09:51:31.181 [tid 19724] drawsite: Mars::RNG::NextInt rva=0x000271c0 -> va=00f671c0 create=MH_OK enable=MH_OK +09:51:31.213 [tid 19724] drawsite: Mars::RNG::Chance rva=0x004e6dd0 -> va=01426dd0 create=MH_OK enable=MH_OK +09:51:31.228 [tid 19724] drawsite: Mars::RNG::NextUInt rva=0x000f7670 -> va=01037670 create=MH_OK enable=MH_OK +09:51:31.275 [tid 19724] drawsite: Mars::RNG::FloatRange rva=0x0007d8a0 -> va=00fbd8a0 create=MH_OK enable=MH_OK +09:51:31.291 [tid 19724] drawsite: Mars::RNG::IntRangeBell rva=0x004e6d80 -> va=01426d80 create=MH_OK enable=MH_OK +09:51:31.306 [tid 19724] drawsite: Mars::RNG::GaussianRange rva=0x004e6e30 -> va=01426e30 create=MH_OK enable=MH_OK +09:51:31.306 [tid 19724] probe: installing 12 of 12 (probes= in shim.cfg) +09:51:31.338 [tid 19724] probe: Game::ServerSpyManager::vslot13 rva=0x004877b0 -> va=013c77b0 create=MH_OK enable=MH_OK +09:51:31.353 [tid 19724] probe: Game::ServerSpyManager::vslot14 rva=0x0048db80 -> va=013cdb80 create=MH_OK enable=MH_OK +09:51:31.369 [tid 19724] probe: Game::ServerTradeManagerImpl::vslot13 rva=0x0048ef80 -> va=013cef80 create=MH_OK enable=MH_OK +09:51:31.400 [tid 19724] probe: Game::ServerTradeManagerImpl::vslot15 rva=0x0042cca0 -> va=0136cca0 create=MH_OK enable=MH_OK +09:51:31.416 [tid 19724] probe: Game::SpyManager::Slot13RngCallee rva=0x004408e0 -> va=013808e0 create=MH_OK enable=MH_OK +09:51:31.431 [tid 19724] probe: Game::TradeManager::Slot13RngCalleeA rva=0x00420ca0 -> va=01360ca0 create=MH_OK enable=MH_OK +09:51:31.463 [tid 19724] probe: Game::TradeManager::Slot13RngCalleeB rva=0x0048b440 -> va=013cb440 create=MH_OK enable=MH_OK +09:51:31.478 [tid 19724] probe: Game::ServerTradeManager::CreateRaidEncounter rva=0x004938a0 -> va=013d38a0 create=MH_OK enable=MH_OK +09:51:31.494 [tid 19724] probe: Game::ServerTradeManager::GenerateTradeRaidEncounters rva=0x00493290 -> va=013d3290 create=MH_OK enable=MH_OK +09:51:31.525 [tid 19724] probe: Game::ServerSpyManager::vslot15 [control] rva=0x00487f30 -> va=013c7f30 create=MH_OK enable=MH_OK +09:51:31.541 [tid 19724] probe: Game::ServerTradeManagerImpl::vslot14 [control] rva=0x004590d0 -> va=013990d0 create=MH_OK enable=MH_OK +09:51:31.572 [tid 19724] probe: Game::EncounterDetect::Run [control] rva=0x003cb080 -> va=0130b080 create=MH_OK enable=MH_OK +09:51:31.572 [tid 19724] watch: disabled (watch=off) +09:51:31.572 [tid 19724] aiorders: disabled (aiorders=off) +09:51:31.572 [tid 19724] fpu: module init, entry cw=0x027f 53bit-double/nearest; force=off value=0x0000 sample_ticks=on +09:51:31.572 [tid 19724] fpu: sample_turn=on (off releases StrategyServer::ProcessTurn for another hook) +09:51:31.572 [tid 19724] fpu: StrategyClient::EndTurn rva=0x00383be0 -> va=012c3be0 MH_CreateHook -> MH_OK (trampoline=017e0d40) +09:51:31.588 [tid 19724] fpu: StrategyClient::EndTurn MH_EnableHook -> MH_OK +09:51:31.588 [tid 19724] fpu: StrategyServer::BeginProcessTurn rva=0x003d98e0 -> va=013198e0 MH_CreateHook -> MH_OK (trampoline=017e0d20) +09:51:31.619 [tid 19724] fpu: StrategyServer::BeginProcessTurn MH_EnableHook -> MH_OK +09:51:31.619 [tid 19724] fpu: StrategyServer::ProcessTurn rva=0x003dc6c0 -> va=0131c6c0 MH_CreateHook -> MH_OK (trampoline=017e0d00) +09:51:31.634 [tid 19724] fpu: StrategyServer::ProcessTurn MH_EnableHook -> MH_OK +09:51:31.634 [tid 19724] fpu: DemoApp::OnTick rva=0x0049a640 -> va=013da640 MH_CreateHook -> MH_OK (trampoline=017e0ce0) +09:51:31.666 [tid 19724] fpu: DemoApp::OnTick MH_EnableHook -> MH_OK +09:51:31.666 [tid 19724] selftest: Shim::SelfTest::Fill mode=trace checksum=075ef0c3 records=1 +09:51:31.681 [tid 19724] Application::Initialize called (this=03938128) +09:51:32.556 [tid 19724] fpu: TICK BASELINE at OnTick (this=03938128): cw=0x127f 53bit-double/nearest +09:57:42.520 [tid 19724] fpu: sample at StrategyClient::EndTurn (this=0dc22d40): cw=0x127f 53bit-double/nearest [no fpu.force configured] +09:57:45.614 [tid 19724] fpu: sample at StrategyClient::EndTurn (this=345fdee8): cw=0x127f 53bit-double/nearest [no fpu.force configured] +09:57:45.645 [tid 19724] fpu: sample at StrategyClient::EndTurn (this=345fabf0): cw=0x127f 53bit-double/nearest [no fpu.force configured] +09:57:45.692 [tid 19724] fpu: sample at StrategyClient::EndTurn (this=345fb338): cw=0x127f 53bit-double/nearest [no fpu.force configured] +09:57:46.598 [tid 19724] fpu: sample at StrategyServer::BeginProcessTurn (this=0dc25ab8): cw=0x127f 53bit-double/nearest [no fpu.force configured] +09:57:46.598 [tid 19724] fpu: sample at StrategyServer::ProcessTurn (this=0dc25ab8): cw=0x127f 53bit-double/nearest +09:57:46.614 [tid 19724] research: mode=replace steps=1 completions=1 overbudget=1166 cascade_possible=0 ok=0 cascade_completions=0 unlocked=0 otch_appends=0 roll_draws=0 failures=0 depth=0 name_unreadable=0 +09:57:46.629 [tid 19724] research: mode=replace steps=1 completions=0 overbudget=0 cascade_possible=0 ok=0 cascade_completions=0 unlocked=0 otch_appends=0 roll_draws=0 failures=0 depth=0 name_unreadable=0 +09:57:46.629 [tid 19724] research: mode=replace steps=1 completions=0 overbudget=0 cascade_possible=0 ok=0 cascade_completions=0 unlocked=0 otch_appends=0 roll_draws=0 failures=0 depth=0 name_unreadable=0 diff --git a/verify/results/shim/cr/cr-R1.log b/verify/results/shim/cr/cr-R1.log new file mode 100644 index 0000000..f192cf9 --- /dev/null +++ b/verify/results/shim/cr/cr-R1.log @@ -0,0 +1,118 @@ +09:42:14.649 [tid 19172] ==== sots-engine shim (binkw32 proxy) build cr-618ccb1-20260909T131556Z ==== +09:42:14.649 [tid 19172] exe: C:\SOTS\Sword of the Stars.exe +09:42:14.649 [tid 19172] exe base=0x00f40000 (link-time image base 0x00400000, ASLR delta +11796480) pid=20592 shim=71d70000 +09:42:14.649 [tid 19172] addresses: Source: sots-re ghidra/addresses.json @ aa8d3fb, generated 2026-09-09 by tools/gen_addresses.py +09:42:14.649 [tid 19172] config: hooks=trace +09:42:14.649 [tid 19172] config: hook.Game::EncounterDetect::AssignContacts=off +09:42:14.649 [tid 19172] config: hook.Game::EncounterDetect::ProcessTeamRecord=off +09:42:14.649 [tid 19172] config: hook.Game::SVSOSlaversRefuel::UpdateDifficultyTier=off +09:42:14.649 [tid 19172] config: hook.Game::SVSOSwarmQueen::OnTurnBegin=off +09:42:14.649 [tid 19172] config: hook.Game::SVSOSwarmQueen::RegisterHives=off +09:42:14.649 [tid 19172] config: hook.Game::SVSOSwarmQueen::TickHives=off +09:42:14.649 [tid 19172] config: hook.Game::SectionDictionary::SectionDictionary=off +09:42:14.649 [tid 19172] config: hook.Game::ServerPlayer::ComputeBudget=off +09:42:14.649 [tid 19172] config: hook.Game::ServerPlayer::OnTechResearched=off +09:42:14.649 [tid 19172] config: hook.Game::ServerPlayer::ProcessTurn=off +09:42:14.649 [tid 19172] config: hook.Game::ServerSystem::ComputeTotalOutput=off +09:42:14.649 [tid 19172] config: hook.Game::ServerSystem::GroupOutput=off +09:42:14.649 [tid 19172] config: hook.Game::ServerSystem::ProcessTurn=off +09:42:14.649 [tid 19172] config: hook.Game::StrategyApp::RunAI=off +09:42:14.649 [tid 19172] config: hook.Game::StrategyHost::Autosave=off +09:42:14.649 [tid 19172] config: hook.Game::StrategyServer::ApplyEncounterResult=off +09:42:14.649 [tid 19172] config: hook.Game::StrategyServer::BeginProcessTurn=off +09:42:14.649 [tid 19172] config: hook.Game::StrategyServer::MoveFleet=off +09:42:14.649 [tid 19172] config: hook.Game::StrategyServer::NodeLineDecay=off +09:42:14.649 [tid 19172] config: hook.Game::StrategyServer::OnAllCombatDone_Tail=off +09:42:14.649 [tid 19172] config: hook.Game::StrategyServer::ProcessFleetMovement=off +09:42:14.649 [tid 19172] config: hook.Game::StrategyServer::ProcessNodeSpaceTravel=off +09:42:14.649 [tid 19172] config: hook.Game::StrategyServer::ProcessTurn=off +09:42:14.649 [tid 19172] config: hook.Game::WeaponDictionary::Init=off +09:42:14.649 [tid 19172] config: hook.Mars::GlobalConsts::LoadFile=off +09:42:14.649 [tid 19172] config: hook.Mars::RNG::Seed=off +09:42:14.649 [tid 19172] config: hook.Game::TechTree::ProcessResearch=replace +09:42:14.649 [tid 19172] config: research.replace_cascade=on +09:42:14.649 [tid 19172] config: trace.path=C:\SOTS\shim.trace.jsonl +09:42:14.649 [tid 19172] config: trace.inline_max=256 +09:42:14.649 [tid 19172] config: trace.flush=always +09:42:14.742 [tid 19172] trace: C:\SOTS\shim.trace.jsonl (default mode trace, inline_max 256, flush always) +09:42:14.742 [tid 19172] hook: Mars_Application_Initialize rva=0x004a0e50 -> va=013e0e50 +09:42:14.742 [tid 19172] hook: MH_Initialize -> MH_OK +09:42:14.742 [tid 19172] hook: MH_CreateHook -> MH_OK (trampoline=00cd0fe0) +09:42:14.773 [tid 19172] hook: MH_EnableHook -> MH_OK +09:42:14.773 [tid 19172] cfg: GlobalConsts hook ready (scale constant 0.017453292519943295) +09:42:14.773 [tid 19172] hook: Mars::GlobalConsts::LoadFile rva=0x004b73c0 mode=off (not installed) +09:42:14.773 [tid 19172] dict: dictionaries hook ready (crt new=73e7232b delete=73e70174) +09:42:14.773 [tid 19172] hook: Game::WeaponDictionary::Init rva=0x0019a4c0 mode=off (not installed) +09:42:14.773 [tid 19172] hook: Game::SectionDictionary::SectionDictionary rva=0x00176f40 mode=off (not installed) +09:42:14.773 [tid 19172] research: ProcessResearch hook ready (Cost=010bda00, node=0x34, rng=0x9cc, fpu_cw=0x027f, replace_cascade=on) +09:42:14.773 [tid 19172] hook: Game::TechTree::ProcessResearch rva=0x001876c0 -> va=010c76c0 MH_CreateHook -> MH_OK (trampoline=00cd0fc0) +09:42:14.805 [tid 19172] hook: Game::TechTree::ProcessResearch MH_EnableHook -> MH_OK mode=replace +09:42:14.805 [tid 19172] techfx: OnTechResearched hook ready (regions=15, gate=0/0, fpu_cw=0x027f) +09:42:14.805 [tid 19172] hook: Game::ServerPlayer::OnTechResearched rva=0x00491790 mode=off (not installed) +09:42:14.805 [tid 19172] hook: Game::ServerPlayer::ComputeBudget rva=0x00463030 mode=off (not installed) +09:42:14.805 [tid 19172] hook: Game::ServerSystem::ProcessTurn rva=0x003598e0 mode=off (not installed) +09:42:14.805 [tid 19172] hook: Game::ServerSystem::GroupOutput rva=0x0034b7a0 mode=off (not installed) +09:42:14.805 [tid 19172] hook: Game::ServerSystem::ComputeTotalOutput rva=0x00350480 mode=off (not installed) +09:42:14.805 [tid 19172] player_turn: ServerPlayer::ProcessTurn hook armed (ratio helper at 010be950) +09:42:14.805 [tid 19172] hook: Game::ServerPlayer::ProcessTurn rva=0x00491340 mode=off (not installed) +09:42:14.805 [tid 19172] hook: Game::StrategyServer::MoveFleet rva=0x003d9ee0 mode=off (not installed) +09:42:14.805 [tid 19172] hook: Game::StrategyServer::ProcessFleetMovement rva=0x003da9a0 mode=off (not installed) +09:42:14.805 [tid 19172] hook: Game::StrategyHost::Autosave rva=0x00495210 mode=off (not installed) +09:42:14.805 [tid 19172] hook: Game::StrategyServer::ProcessTurn rva=0x003dc6c0 mode=off (not installed) +09:42:14.805 [tid 19172] hook: Game::StrategyServer::OnAllCombatDone_Tail rva=0x003d92a0 mode=off (not installed) +09:42:14.805 [tid 19172] hook: Game::StrategyServer::ApplyEncounterResult rva=0x003d8920 mode=off (not installed) +09:42:14.805 [tid 19172] hook: Game::StrategyServer::NodeLineDecay rva=0x003ae010 mode=off (not installed) +09:42:14.805 [tid 19172] hook: Game::StrategyServer::ProcessNodeSpaceTravel rva=0x003a0e20 mode=off (not installed) +09:42:14.805 [tid 19172] hook: Game::EncounterDetect::AssignContacts rva=0x003aa240 mode=off (not installed) +09:42:14.805 [tid 19172] hook: Game::EncounterDetect::ProcessTeamRecord rva=0x003ca640 mode=off (not installed) +09:42:14.805 [tid 19172] hook: Game::StrategyServer::BeginProcessTurn rva=0x003d98e0 mode=off (not installed) +09:42:14.805 [tid 19172] hook: Game::SVSOSwarmQueen::OnTurnBegin rva=0x00129930 mode=off (not installed) +09:42:14.805 [tid 19172] hook: Game::SVSOSwarmQueen::RegisterHives rva=0x00127630 mode=off (not installed) +09:42:14.805 [tid 19172] hook: Game::SVSOSwarmQueen::TickHives rva=0x00127770 mode=off (not installed) +09:42:14.805 [tid 19172] hook: Game::SVSOSlaversRefuel::UpdateDifficultyTier rva=0x00115820 mode=off (not installed) +09:42:14.805 [tid 19172] hook: Mars::RNG::Seed rva=0x0009fdf0 mode=off (not installed) +09:42:14.805 [tid 19172] hook: Game::StrategyApp::RunAI rva=0x004706f0 mode=off (not installed) +09:42:14.820 [tid 19172] drawsite: Mars::RNG::NextFloat rva=0x0007d830 -> va=00fbd830 create=MH_OK enable=MH_OK +09:42:14.852 [tid 19172] drawsite: Mars::RNG::NextInt rva=0x000271c0 -> va=00f671c0 create=MH_OK enable=MH_OK +09:42:14.867 [tid 19172] drawsite: Mars::RNG::Chance rva=0x004e6dd0 -> va=01426dd0 create=MH_OK enable=MH_OK +09:42:14.883 [tid 19172] drawsite: Mars::RNG::NextUInt rva=0x000f7670 -> va=01037670 create=MH_OK enable=MH_OK +09:42:14.916 [tid 19172] drawsite: Mars::RNG::FloatRange rva=0x0007d8a0 -> va=00fbd8a0 create=MH_OK enable=MH_OK +09:42:14.945 [tid 19172] drawsite: Mars::RNG::IntRangeBell rva=0x004e6d80 -> va=01426d80 create=MH_OK enable=MH_OK +09:42:14.961 [tid 19172] drawsite: Mars::RNG::GaussianRange rva=0x004e6e30 -> va=01426e30 create=MH_OK enable=MH_OK +09:42:14.961 [tid 19172] probe: installing 12 of 12 (probes= in shim.cfg) +09:42:14.992 [tid 19172] probe: Game::ServerSpyManager::vslot13 rva=0x004877b0 -> va=013c77b0 create=MH_OK enable=MH_OK +09:42:15.008 [tid 19172] probe: Game::ServerSpyManager::vslot14 rva=0x0048db80 -> va=013cdb80 create=MH_OK enable=MH_OK +09:42:15.039 [tid 19172] probe: Game::ServerTradeManagerImpl::vslot13 rva=0x0048ef80 -> va=013cef80 create=MH_OK enable=MH_OK +09:42:15.070 [tid 19172] probe: Game::ServerTradeManagerImpl::vslot15 rva=0x0042cca0 -> va=0136cca0 create=MH_OK enable=MH_OK +09:42:15.086 [tid 19172] probe: Game::SpyManager::Slot13RngCallee rva=0x004408e0 -> va=013808e0 create=MH_OK enable=MH_OK +09:42:15.118 [tid 19172] probe: Game::TradeManager::Slot13RngCalleeA rva=0x00420ca0 -> va=01360ca0 create=MH_OK enable=MH_OK +09:42:15.133 [tid 19172] probe: Game::TradeManager::Slot13RngCalleeB rva=0x0048b440 -> va=013cb440 create=MH_OK enable=MH_OK +09:42:15.148 [tid 19172] probe: Game::ServerTradeManager::CreateRaidEncounter rva=0x004938a0 -> va=013d38a0 create=MH_OK enable=MH_OK +09:42:15.180 [tid 19172] probe: Game::ServerTradeManager::GenerateTradeRaidEncounters rva=0x00493290 -> va=013d3290 create=MH_OK enable=MH_OK +09:42:15.211 [tid 19172] probe: Game::ServerSpyManager::vslot15 [control] rva=0x00487f30 -> va=013c7f30 create=MH_OK enable=MH_OK +09:42:15.226 [tid 19172] probe: Game::ServerTradeManagerImpl::vslot14 [control] rva=0x004590d0 -> va=013990d0 create=MH_OK enable=MH_OK +09:42:15.258 [tid 19172] probe: Game::EncounterDetect::Run [control] rva=0x003cb080 -> va=0130b080 create=MH_OK enable=MH_OK +09:42:15.258 [tid 19172] watch: disabled (watch=off) +09:42:15.258 [tid 19172] aiorders: disabled (aiorders=off) +09:42:15.258 [tid 19172] fpu: module init, entry cw=0x027f 53bit-double/nearest; force=off value=0x0000 sample_ticks=on +09:42:15.258 [tid 19172] fpu: sample_turn=on (off releases StrategyServer::ProcessTurn for another hook) +09:42:15.258 [tid 19172] fpu: StrategyClient::EndTurn rva=0x00383be0 -> va=012c3be0 MH_CreateHook -> MH_OK (trampoline=00cd0d40) +09:42:15.273 [tid 19172] fpu: StrategyClient::EndTurn MH_EnableHook -> MH_OK +09:42:15.273 [tid 19172] fpu: StrategyServer::BeginProcessTurn rva=0x003d98e0 -> va=013198e0 MH_CreateHook -> MH_OK (trampoline=00cd0d20) +09:42:15.305 [tid 19172] fpu: StrategyServer::BeginProcessTurn MH_EnableHook -> MH_OK +09:42:15.305 [tid 19172] fpu: StrategyServer::ProcessTurn rva=0x003dc6c0 -> va=0131c6c0 MH_CreateHook -> MH_OK (trampoline=00cd0d00) +09:42:15.320 [tid 19172] fpu: StrategyServer::ProcessTurn MH_EnableHook -> MH_OK +09:42:15.320 [tid 19172] fpu: DemoApp::OnTick rva=0x0049a640 -> va=013da640 MH_CreateHook -> MH_OK (trampoline=00cd0ce0) +09:42:15.351 [tid 19172] fpu: DemoApp::OnTick MH_EnableHook -> MH_OK +09:42:15.351 [tid 19172] selftest: Shim::SelfTest::Fill mode=trace checksum=075ef0c3 records=1 +09:42:15.367 [tid 19172] Application::Initialize called (this=03548128) +09:42:16.336 [tid 19172] fpu: TICK BASELINE at OnTick (this=03548128): cw=0x127f 53bit-double/nearest +09:48:17.041 [tid 19172] fpu: sample at StrategyClient::EndTurn (this=0d6dd1e0): cw=0x127f 53bit-double/nearest [no fpu.force configured] +09:48:20.150 [tid 19172] fpu: sample at StrategyClient::EndTurn (this=32e7aed0): cw=0x127f 53bit-double/nearest [no fpu.force configured] +09:48:20.181 [tid 19172] fpu: sample at StrategyClient::EndTurn (this=32e7f7a0): cw=0x127f 53bit-double/nearest [no fpu.force configured] +09:48:20.228 [tid 19172] fpu: sample at StrategyClient::EndTurn (this=32e7a040): cw=0x127f 53bit-double/nearest [no fpu.force configured] +09:48:21.134 [tid 19172] fpu: sample at StrategyServer::BeginProcessTurn (this=0d66ade8): cw=0x127f 53bit-double/nearest [no fpu.force configured] +09:48:21.134 [tid 19172] fpu: sample at StrategyServer::ProcessTurn (this=0d66ade8): cw=0x127f 53bit-double/nearest +09:48:21.150 [tid 19172] research: mode=replace steps=1 completions=1 overbudget=1166 cascade_possible=1 ok=1 cascade_completions=1 unlocked=3 otch_appends=1 roll_draws=0 failures=0 depth=0 name_unreadable=0 +09:48:21.181 [tid 19172] research: mode=replace steps=1 completions=0 overbudget=0 cascade_possible=1 ok=1 cascade_completions=0 unlocked=0 otch_appends=0 roll_draws=0 failures=0 depth=0 name_unreadable=0 +09:48:21.197 [tid 19172] research: mode=replace steps=1 completions=0 overbudget=0 cascade_possible=1 ok=1 cascade_completions=0 unlocked=0 otch_appends=0 roll_draws=0 failures=0 depth=0 name_unreadable=0 diff --git a/verify/traces/cr-N.jsonl.gz b/verify/traces/cr-N.jsonl.gz new file mode 100644 index 0000000000000000000000000000000000000000..6bea7719cfac065448bc7378da5aa19966ee870c GIT binary patch literal 55936 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

2Vxo{hU5Ljcz&J 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 literal 0 HcmV?d00001 diff --git a/verify/traces/cr-R1.jsonl.gz b/verify/traces/cr-R1.jsonl.gz new file mode 100644 index 0000000000000000000000000000000000000000..c2627617b1fe4ec47ae9aeea0980e9504e569bd1 GIT binary patch literal 38300 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 C>BVjU literal 0 HcmV?d00001