Lane L3 needed to watch the trade-route and spy-program vectors across a whole game played forward, not one turn of one save. `modcount` and `tshn` arm once on purpose -- their targets are picked from one turn's state and re-picking them would move the measurement -- so this is a third mode rather than a change to either. `cont` puts all four debug slots on the two containers, `_Myfirst` as well as `_Mylast`. Both vectors are default-constructed with all three pointers zero, so the first element writes all three: watching only `_Mylast` cannot separate "allocated for the first time" from "appended to an existing buffer", and those are different events in the model this lane set out to falsify. It re-arms and re-logs on every End Turn, and the canary self-test's counter is therefore read as a delta -- on the arm-once modes the delta is the old value, so their log lines are byte-identical. `ReportContainer` is factored out of `ArmTshnSlots` so both modes emit the same container line. Lane W3's published count=0 is the control every later count is compared against, and a reformatted line would have made that comparison a judgement call. The defect: `Shim_Init` returned before `install_watchpoints` whenever the trace mode was `off`, so `hooks=off watch=on` printed `watch=on` in the banner and armed absolutely nothing -- a config that reports a confident zero, which is the failure method rule 1 exists to catch. The watchpoints are an independent instrument with their own arming detour and no trace records, and a long play session wants them without paying 30-45 s per End Turn for template hooks that measure nothing it is asking about. MinHook is now initialised and the module installed on the `hooks=off` path when `watch=on`. Configs: shim.cfg.l3cont / .l3control differ in exactly one key for rule 19; .l3probe is lane H's hp11 verbatim plus the three watch keys, so the entry counts stay comparable to lane H's empty-container baseline line for line. Gates: clean_room_check OK; host ctest 54/54; CT111 shim cross-build OK, exports 66 names identical. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01ARBgSooAfokKUy6wKUKEyZ
40 lines
1.6 KiB
Text
40 lines
1.6 KiB
Text
# Lane L3: lane H's shim.cfg.hp11 verbatim -- the same eleven register-transparent entry probes and
|
|
# the same six-hook RNG ledger -- plus the watchpoint module in cont mode. The point is to run the
|
|
# IDENTICAL instrument lane H ran on an empty-container turn against a turn whose trade-route
|
|
# vector is NON-empty, so the two entry counts are comparable line for line.
|
|
hook.Shim::SelfTest::Fill=off
|
|
hook.Mars::GlobalConsts::LoadFile=off
|
|
hook.Game::WeaponDictionary::Init=off
|
|
hook.Game::SectionDictionary::SectionDictionary=off
|
|
hook.Game::ServerPlayer::ComputeBudget=off
|
|
hook.Game::TechTree::ProcessResearch=off
|
|
hook.Game::ServerPlayer::OnTechResearched=off
|
|
hook.Game::ServerSystem::ProcessTurn=off
|
|
hook.Game::ServerPlayer::ProcessTurn=off
|
|
hook.Game::ServerSystem::GroupOutput=off
|
|
hook.Game::ServerSystem::ComputeTotalOutput=off
|
|
hook.Game::StrategyServer::MoveFleet=off
|
|
hook.Game::StrategyServer::ProcessFleetMovement=off
|
|
|
|
hook.Game::StrategyHost::Autosave=trace
|
|
hook.Game::StrategyServer::ProcessTurn=trace
|
|
hook.Game::StrategyServer::OnAllCombatDone_Tail=trace
|
|
hook.Game::StrategyServer::ApplyEncounterResult=trace
|
|
hook.Game::StrategyServer::NodeLineDecay=trace
|
|
hook.Game::StrategyServer::ProcessNodeSpaceTravel=trace
|
|
hook.Game::EncounterDetect::AssignContacts=trace
|
|
hook.Game::EncounterDetect::ProcessTeamRecord=trace
|
|
|
|
fpu.sample_turn=off
|
|
fpu.sample_ticks=off
|
|
|
|
# The generator is 0x9cc bytes and every record carries it twice. Inlining it as hex would make
|
|
# each record ~5 kB of state nobody reads.
|
|
trace.inline_max=64
|
|
trace.path=C:\SOTS\shim.trace.jsonl
|
|
trace.flush=always
|
|
probes=11
|
|
|
|
watch=on
|
|
watch.mode=cont
|
|
watch.out=C:\SOTS\shim.watch.txt
|