New shim module src/shim/hooks/ai_orders.{h,cpp}: one register-transparent entry
stub on StrategySim::ApplyTurnCommandBatch dumps every submitted TurnCommands block
(six gates, 27 list lengths, element bytes) at the point where all of them are
complete in memory; sixteen entry probes, with RunTaskList's stub recording the
pass so every later hit is pass-attributed.
Two workloads on VM145, one End Turn each. The rule-19 control passed with all
seventeen detours installed: both autosaves byte-identical to the published oracle.
What the AI actually emits, and three things no reading had produced:
- a list-23 element on EVERY turn, the first element ever observed in the free
half of the cost table -- and both turns still cost the measured 12;
- the ids in AI commands are client-allocated and travel in the command (design
18, fleet 34; neither exists in the input save);
- pass 0 emits nothing, measured from element counts rather than inferred.
tests/game_ai/test_live_blocks.cpp rebuilds both captured blocks through the public
OrderClient API and asserts the list profile, element values, gate counts and
ModCount total: 44 checks. Kept separate from test_orders.cpp, which stays the
record of what static reading predicted.
Gates: clean_room_check OK, host ctest 55/55, CT111 shim cross-build exit 0.
39 lines
1.7 KiB
Text
39 lines
1.7 KiB
Text
# Lane L4. THE THREE CONFIGS BELOW DIFFER FROM EACH OTHER IN AT MOST TWO KEYS, ON PURPOSE.
|
|
#
|
|
# `l4control` installs nothing but the same template-hook set as `l4dump`/`l4probes` (all off),
|
|
# `l4dump` adds ONE detour (`aiorders=on`), `l4probes` adds sixteen entry probes on top
|
|
# (`aiprobes=all`). Rule 19 is run against the campaign's published autosave oracle, and the
|
|
# pairwise single-key differences are what localise a failure to one half of the instrument.
|
|
#
|
|
# Lane H's own entry probes are explicitly `probes=off` here: that set is the one measured to have
|
|
# changed an autosave by 4 bytes, and leaving it on the default (which is ALL of them) would make
|
|
# every byte comparison below meaningless.
|
|
hooks=trace
|
|
hook.Shim::SelfTest::Fill=off
|
|
hook.Mars::GlobalConsts::LoadFile=off
|
|
hook.Game::WeaponDictionary::Init=off
|
|
hook.Game::SectionDictionary::SectionDictionary=off
|
|
hook.Game::TechTree::ProcessResearch=off
|
|
hook.Game::ServerPlayer::ComputeBudget=off
|
|
hook.Game::ServerPlayer::OnTechResearched=off
|
|
hook.Game::ServerPlayer::ProcessTurn=off
|
|
hook.Game::ServerSystem::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=off
|
|
hook.Game::StrategyServer::ProcessTurn=off
|
|
hook.Game::StrategyServer::OnAllCombatDone_Tail=off
|
|
hook.Game::StrategyServer::ApplyEncounterResult=off
|
|
hook.Game::StrategyServer::NodeLineDecay=off
|
|
hook.Game::StrategyServer::ProcessNodeSpaceTravel=off
|
|
hook.Game::EncounterDetect::AssignContacts=off
|
|
hook.Game::EncounterDetect::ProcessTeamRecord=off
|
|
trace.path=C:\SOTS\shim.trace.jsonl
|
|
trace.flush=always
|
|
probes=off
|
|
watch=off
|
|
aiorders.out=C:\SOTS\shim.aiorders.txt
|
|
aiorders=on
|
|
aiprobes=off
|