sots-re/verify/results/compare/recap-b1-compare.md
alex 05095e93da lane R: golden-trace recapture with guards on the live game
Five hooks recaptured, build recap-7584bad-20260908T0615Z, no source change.

- ProcessResearch: the over-budget event is now a compare divergence
  (side.events.after.v.next_id orig=4 ours=3) instead of a 609 KB save diff.
  15 calls over 5 turns, 3 diverged, RNG matched 15/15.
- ComputeBudget: 4284 compared, 0 diverged, guard quiet - but only 20 distinct
  states and 13 of 22 slots always zero.
- MoveFleet: 8 of 45 calls diverge by 1 ULP of position. B4's clean verdict was
  a one-sample verdict.
- First guarded captures for OnTechResearched (RollResearchEvent draw fired and
  matched), the colony turn and MoveFleet.
- Guards mapped SetResearched live and found an undeclared ObservedTech append.

VM140 released at the main menu, hooks=trace.
2026-09-08 03:06:43 -04:00

1.8 KiB

tracecmp report: recap-b1-compare.jsonl

  • build: recap-7584bad-20260908T0615Z started: 2026-09-08T06:40:02Z inline_max: 256
  • calls: 4284 compared: 4284 diverged: 0 invalid records: 0 warnings: 0
  • coverage: 4284 guarded call(s), 0 undeclared write(s) in 0 call(s); 0 hook(s) unstated, 0 contradicted
hook calls modes compared diverged errors
Game::ServerPlayer::ComputeBudget 4284 compare:4284 4284 0 0

coverage

hook verdict compared regions guards undeclared writes unmodelled
Game::ServerPlayer::ComputeBudget partial budget, inputs, research_alloc budget_object 0 4

Game::ServerPlayer::ComputeBudget — not checked by this run

  • (high) 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) — they are copied out of the original's own output and back into the same slots, so they match BY CONSTRUCTION and prove nothing [declared input boundary; see budget_inputs.h]
  • (high) ServerSystem::ComputeOutput repairs damaged ships in orbit — 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 [guard:budget_object does not reach the ships; unverified]
  • (medium) the difficulty-mods row from StrategyServer::GetDifficultyMods — not reachable from a ServerPlayer, so the two relevant entries are fitted constants measured from the B1 trace rather than snapshotted inputs
  • (low) the research-allocation vector's heap block — only the element count is compared; the three words are heap pointers the default policy ignores