sots-engine/tests
alex 076f71439d stream: the name-gen used-slot pair, and the Sprj and FTPnts bodies
Three bodies, one reason: the corpus grew from 22 saves to 43 and started
carrying content the shapes did not name.

ProjectName read `usnc` as a count of ONE item, on the strength of a comment
saying "usnc is 0 in every save available".  Game::SpecialProjectNameGen::Write
(0x008147e0) says otherwise: each 88-byte record opens with a 32-byte table of
per-suffix use counts, `usnc` is the number of NON-ZERO slots, and the loop then
writes, for every non-zero slot, its INDEX as `usp` and its count byte -- movzx
widened -- as `usc`.  Both go through WriteInt, so both are i32 on the wire.
Twelve corpus saves have one such slot and were round-tripping exactly 12 bytes
short: one i32 item, 4 length + 3 tag + 4 value + 1 pad.

`Sprj` is a polymorphic frame and both halves of its mapping are now measured.
ServerPlayer::Write emits `SprjT` from the plain member at project+0x3c, and
ServerPlayer::Read feeds that value to the factory at 0x008610a0, whose table at
0x008611e8 is 0 BackEngProject / 1 MonitorProject / 2 JewelsProject / 3
TechOfferProject -- and each of those constructors stores its own index back at
+0x3c.  Only SprjT 0 is exercised by any save; the other three arms are typed
from the recovered schema and labelled as the hypotheses they are, and an
unknown SprjT falls to rest() so it shows up as opaque coverage rather than
being mis-read in silence.

FieldTemplate carried its points because no save had ever put one on the wire.
Six now do, so Game::FieldTemplate::Point is typed and bound.  FTPPosX/PosY/Sqd
read 0 in every observed point, so their i32 disk type is still the schema's
word and not the corpus's, and the comment says so.

All 43 saves now round-trip byte-identically; the wire-schema conformance test
binds six new shapes with 0 MISMATCH and every one matching item for item.
2026-09-09 10:03:50 -04:00
..
app RB: sots_turn --turn-commands replays a recorded command stream, and ModCount closes 2026-09-08 18:57:46 -04:00
game_ai merge lane RB: --turn-commands replay (game_ai test list union-resolved; header regenerated) 2026-09-08 19:08:34 -04:00
game_combat B5: the post-battle retreat rules as a pure planner (game/combat) 2026-09-08 11:52:57 -04:00
game_config 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
game_data tests: restore test_catalog fixture text (rename only member accesses) 2026-09-07 22:15:20 -04:00
game_design lane D2: aggregate hull size in the record's MEMORY slot order, not its wire order 2026-09-08 12:47:14 -04:00
game_effects 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
game_events lane P: post the research events from ours (count-only), declare ObservedTech 2026-09-08 04:16:22 -04:00
game_nav lane P2: fleet path planning (game/nav) 2026-09-08 12:43:11 -04:00
game_sim L5: the interest literals verified live at a boundary, with a control that fails 2026-09-08 17:48:42 -04:00
mars_parse 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
mars_stream stream: the name-gen used-slot pair, and the Sprj and FTPnts bodies 2026-09-09 10:03:50 -04:00
mars_text 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
mars_vfs mars/vfs: gob ZIP reader + native override, miniz 3.1.2; oracle-verified 8352+2035 entries 2026-09-07 17:40:51 -04:00
shim_budget 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
shim_colony 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
shim_events lane P: post the research events from ours (count-only), declare ObservedTech 2026-09-08 04:16:22 -04:00
shim_movement 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
shim_player_turn T: hook for Game::ServerPlayer::ProcessTurn, with the prediction committed first 2026-09-08 08:08:47 -04:00
shim_rng_ledger Z: measure the strategic RNG, do not assume it 2026-09-08 09:16:24 -04:00
shim_techfx 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
shim_trace 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
addr_smoke.cpp m0: binkw32 proxy shim, minhook, trace hook on Application::Initialize; build/deploy tooling 2026-09-07 17:22:15 -04:00