Commit graph

222 commits

Author SHA1 Message Date
alex
e50d5e5900 recapture: golden traces with guards on the live game
Five hooks recaptured; no source change needed. ProcessResearch's over-budget
event now diverges as one line instead of a 609 KB save diff (15 calls, 3
diverged, RNG 15/15). ComputeBudget holds at 0 over 4284 compares but only 20
distinct states and 13 always-zero slots. MoveFleet diverges on 8 of 45 calls by
1 ULP of position - B4's clean verdict was a one-sample verdict. First guarded
captures for OnTechResearched (RollResearchEvent draw finally fired and matched),
the colony turn and MoveFleet. Guards mapped SetResearched live and found an
undeclared observed-tech vector append.
2026-09-08 03:04:34 -04:00
alex
82ef52f55c sync generated header (380 entries) after events merge 2026-09-08 02:50:37 -04:00
alex
5bd6d04bce merge lane E: event-posting API (EventStorage@player+0x29c, PostEvent 0x008862b0) 2026-09-08 02:48:55 -04:00
alex
a7348be72c game/events: the player event log and the five research events
Recovers the game's event-posting API so the engine can post events and the
compare harness can see them. Until now the owner's event list was invisible to
every layer: B3's replace-mode oracle failed by exactly one item across 40,300
(an unposted EVENT_RESEARCH_OVERBUDGET) while its compare read clean, and B2's
clean compare bounds the economy fields only.

New pure module src/game/events:
  * EventStorage / TurnEvents / PlayerEvent -- the list is bucketed by TURN, not
    flat, which the save-editor struct notes had wrong.
  * EventStorage::Post reproducing the original's rules, including the four that
    change save bytes: the FLT_MAX (not infinity) default position; action 0 with
    no subject and no position storing as 2; per-bucket dedup that compares
    message/image/location/position/action but NOT summary; and EvNxID starting
    at 0 and being promoted to 1 on the first post.
  * PruneOldTurns reproduced with its off-by-one: of a leading run of buckets
    older than turn-50 it erases n-1, so one stale bucket always survives. The
    survivor is serialized, so correcting it would diverge.
  * research_events: the five events the research path raises, their EvImg
    identifiers and string-table keys, and the 0.8 completion split evaluated
    against (double)0.8f rather than the decimal 0.8.

Localized text is deliberately absent: only the EVENTSUM_/EVENTMSG_ keys are
here and the text resolves through a caller-supplied lookup, as the game does.

The four event offsets the B3 hook carried as local literals now come from the
generated header; they are read off instructions rather than inferred from the
save schema.

tests/game_events: 112 checks including a replay of the event list
turn3-state.sav actually holds. ctest 31/31 -> 32/32.

docs/E-events.md carries the proposed region and Coverage wording for the next
B3 recapture.
2026-09-08 02:45:57 -04:00
alex
7584badab3 sync header 2026-09-08 02:07:51 -04:00
alex
ebd8297a5d merge b4 live verification (header regenerated) 2026-09-08 02:07:28 -04:00
alex
bf163a187f b4 live: 36 calls 0 divergences, no colony RNG draws as predicted; fix 3 hook bugs (stale args, two-base StrategyServer, raw Ghidra offset) 2026-09-08 02:07:28 -04:00
alex
e1cbb81fdb clean-room: strip decompiler identifier from a coverage note 2026-09-08 01:30:33 -04:00
alex
3f0721f443 merge harness audit (coverage + guards) 2026-09-08 01:28:35 -04:00
alex
c110fb245b harness: compile-time Coverage on every descriptor, guard regions, replace-mode records; audit of 23 undeclared side effects 2026-09-08 01:28:35 -04:00
alex
b925944492 fix: regenerate address header so b2 offsets are present 2026-09-08 01:19:30 -04:00
alex
a5ffe187ea merge b2 live verification (header regenerated) 2026-09-08 01:18:39 -04:00
alex
bbba536d99 b2 live: 3 completions compared 0 divergences; float32 confirmed on the game; RollResearchEvent RNG region added; xenotech block size bug fixed 2026-09-08 01:18:39 -04:00
alex
89c0013496 merge b4; regenerate header 2026-09-08 00:57:55 -04:00
alex
e3b14ed22b merge b4 (colony/movement corrections; VM verification pending) 2026-09-08 00:57:55 -04:00
alex
4abf654983 b4: colony + movement hooks; 22 formula corrections (growth curve has no capacity term, range margin +0.05f, ties-to-even rounding); 3 verified signatures 2026-09-08 00:57:55 -04:00
alex
646e4e8bb2 merge b3 live verification; regenerate header 2026-09-08 00:30:07 -04:00
alex
8a58862707 b3 live results: 13/15 zero-divergence, RNG post-state 14/15; research target is state 3 (no decay); oracle gap = unposted overbudget event 2026-09-08 00:29:44 -04:00
alex
f28c6393ba merge b2; regenerate address header (211 entries) 2026-09-08 00:01:27 -04:00
alex
1cd5c74f57 merge b2 (tech effects corrected; VM verification pending) 2026-09-08 00:01:04 -04:00
alex
4a6e11d1ce b2: OnTechResearched hook + 10 effects-table corrections (float32, xenotech block size, no already-researched guard, sticky mask, AI bonus values) 2026-09-08 00:01:04 -04:00
alex
b791392eba merge m2 verification notes 2026-09-07 23:52:50 -04:00
alex
0082eee3b9 m2: live verification results (weapons compare 0 div, oracle passes; section compare crash documented) 2026-09-07 23:52:50 -04:00
alex
9cd997da93 merge b1 (ComputeBudget verified: 4437 compares, 0 divergences, oracle byte-identical); union shim hooks; regenerate header 2026-09-07 23:24:59 -04:00
alex
16f3aa90e5 b1: ComputeBudget hook + adapter; fix researchMoneyKept to be charged only with a research target; budget out-param is int[22] 2026-09-07 23:24:10 -04:00
alex
3ebc8bf5a9 merge b3 (RNG + research corrections; VM verification pending) 2026-09-07 23:14:08 -04:00
alex
dd97137fb0 b3: research hook + RNG-snapshot compare design; fix draw mapping to y/(2^32-1), NextInt inclusive, float32 odds, spend floor, decay constants 2026-09-07 23:14:08 -04:00
alex
81218c732c merge m2 manifest hooks (code-complete; VM verification pending) 2026-09-07 22:41:42 -04:00
alex
da679cd79f m2: manifest/id dictionary hooks + manifest_loader; thiscall support in Hook template; struct sizes pinned (+0x14 word) 2026-09-07 22:41:42 -04:00
alex
de779ad786 wire game/effects into host + shim builds 2026-09-07 22:33:40 -04:00
alex
16ce9ab6ee merge sim-pin (pinned formulas + tech effects) 2026-09-07 22:32:16 -04:00
alex
f83f6af62d game/sim: pin all five low-confidence formulas; game/effects: TechId table + 44 typed strategic effects 2026-09-07 22:32:16 -04:00
alex
b1fcb56017 generated address header: verified RNG signatures 2026-09-07 22:29:05 -04:00
alex
8b231c0a86 merge m1 config loader (cmake union) 2026-09-07 22:16:55 -04:00
alex
16e9d927af m1: GlobalConsts::LoadFile hook + game/config loader; trace 19 calls, compare 0 div, replace passes End-Turn oracle 2026-09-07 22:16:55 -04:00
alex
683d2b130e tests: restore test_catalog fixture text (rename only member accesses) 2026-09-07 22:15:20 -04:00
alex
b404f89e16 tests: restore remaining 'requires' data-key text in fixtures 2026-09-07 22:14:37 -04:00
alex
4dc323f674 tests: restore 'requires' data key in sample fixtures (rename touched string text) 2026-09-07 22:13:11 -04:00
alex
587e4ab9fb game/data+design: rename member 'requires' -> requires_tech (C++20 keyword, -Werror under design tests) 2026-09-07 22:12:26 -04:00
alex
ba9ec951d2 merge game/design; wire; readme 2026-09-07 22:10:35 -04:00
alex
6ea3b5f433 merge game/design 2026-09-07 22:10:35 -04:00
alex
ab2f58ed63 game/design: assembly/fit/gating rules + derived stats on game/data; 127/127 designs, 197/197 DOpts, oracle-identical 2026-09-07 22:10:35 -04:00
alex
044e1afd7a generated address header refresh (tech-effects, M1 recon) 2026-09-07 22:05:51 -04:00
alex
4f0a9dbd82 game/data: adapt to engine-parity parse API (items->key_quoted pairs; lenient unterminated quote) 2026-09-07 22:01:25 -04:00
alex
4d5b573668 merge engine parity 2026-09-07 18:10:18 -04:00
alex
9ccde259aa mars/parse + mars/text: engine parity (Mars::Script tokenizer, first-wins keys, trailing-pair drop); oracles 1531/1531, 64/64 2026-09-07 18:10:18 -04:00
alex
750ad59ff7 merge game/data; wire into builds; readme 2026-09-07 17:55:08 -04:00
alex
7e0b446a96 merge game/data 2026-09-07 17:55:08 -04:00
alex
9065c26829 game/data: typed catalogs (weapons, sections, turrets, ids, tech tree, strings), cross_check; oracle 229k values 0 diffs 2026-09-07 17:55:08 -04:00
alex
9e110b43ba merge shim/trace; ctest foreach union 2026-09-07 17:51:19 -04:00