sots-re/verify/results/shim/br/shim.cfg.brprobe

104 lines
5.7 KiB
Text

# Lane BP -- probe 2 of the 2026-09-09 resolution: runs A and B, the PINNED pair.
#
# THE PROBE. `ad-turn27-two-raiders.sav` is the richest AI turn the campaign owns: thirteen ships
# complete into five new fleets, a design is created, a system is colonised. Two `hooks=off`
# processes on it differ in 94 leaves (lane AD, `raid-gate-multiplicity.md` section 5). Row 360
# proved that PINNING the AI client seeds collapses three processes to one -- but only on
# `turn1-state`, an early-game turn. If the seed is the only per-process input on a RICH turn too,
# these two runs are byte-identical. If they are not, reading 3 of the resolution is alive, and
# C-exact ("nothing else per-process reaches the turn") is false on the turns that matter.
#
# THE MECHANISM IS THE CONSTRUCTOR-ARGUMENT OVERWRITE, NOT A RE-SEED. `aiseed=pin` replaces the
# fourth argument of `Game::StrategyApp::RunAI` -- the word the `StrategyClient` constructor hands
# to `RNG_Seed` -- before the callee reads it. It is NOT `airng.pin_seed`, which re-seeds the
# generator at bracket entry and is a declared perturbation; using that here would test a
# different thing and the resolution says so in as many words.
#
# THE PIN SET IS COMPLETE BY CONSTRUCTION. Every net id run L observed is listed explicitly, AND
# the wildcard is set, so a client with an id nobody has seen is still pinned instead of silently
# passing through unpinned. A partial pin set is worse than none: the run would look pinned and
# be half-natural.
#
# HOOK SET: identical to shim.cfg.bplog except the `aiseed=` line and the values.
hooks=trace
trace.path=C:\SOTS\shim.trace.jsonl
trace.flush=always
probes=off
watch=off
# LANE BR (2026-09-09), the ONLY change from shim.cfg.bppin, and it is exactly three
# non-comment lines: the per-client draw ledger is turned ON. `airng.pin_seed=off` is stated
# EXPLICITLY (it is also the default) because a pinned generator is a declared perturbation and
# this run must not carry one -- the seed pin here is the constructor-argument overwrite in the
# `aiseed=` block below, nothing else. `airng=on` installs the OnResumePlaying bracket plus the
# two AI-exclusive facade detours (cl_Chance, cl_RandRange); that instrument is measured
# behaviour-neutral in `roll-parity.md`.
airng=on
airng.pin_seed=off
airng.out=C:\SOTS\shim.airng.txt
aidesign=off
# EVERY template hook, off by name. `Config::mode_for` falls through to `default_mode` for any
# hook NOT named here, and `default_mode` is `trace`, so an omission from this list silently
# leaves that hook INSTALLED. (`shim.cfg.cbpin` omits six of them -- see the finding.)
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::OnTechResearched=off
hook.Game::ServerPlayer::ComputeBudget=off
hook.Game::ServerSystem::ProcessTurn=off
hook.Game::ServerSystem::GroupOutput=off
hook.Game::ServerSystem::ComputeTotalOutput=off
hook.Game::ServerPlayer::ProcessTurn=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
hook.Game::StrategyServer::BeginProcessTurn=off
hook.Game::SVSOSwarmQueen::OnTurnBegin=off
hook.Game::SVSOSwarmQueen::RegisterHives=off
hook.Game::SVSOSwarmQueen::TickHives=off
hook.Game::SVSOSlaversRefuel::UpdateDifficultyTier=off
hook.Mars::RNG::Seed=off
# The trace framework installs its own template hook on RunAI (lane L1's seed probe) and MinHook
# refuses a second detour on one target (`MH_ERROR_ALREADY_CREATED`). Off here so the ONE detour
# on RunAI is the aiseed module's.
hook.Game::StrategyApp::RunAI=off
# The command-block dump. `aiorders=on` alone installs exactly one detour
# (StrategySim::ApplyTurnCommandBatch); `aiprobes=` would add more, and does not.
# `aiorders.deep=off`: the deep follower chases heap pointers whose VALUES are per-process, which
# would put per-process noise in the very log used to localise a per-process difference.
aiorders=on
aiorders.out=C:\SOTS\shim.aiorders.txt
aiorders.words=12
aiorders.deep=off
aiprobes=off
airesearch=off
aiseed=pin
# The values run L observed for itself on THIS save, on this guest, with this build, at
# 2026-09-09 01:20:53 local -- so the pinned runs reproduce a turn that actually happened
# rather than a synthetic one (lane CB's rule).
#
# RUN L CORRECTS THE BRIEF: the save has seven non-human players but the engine constructs only
# THREE AI clients. `RunAI` fired exactly three times, for net ids 32 (The Eternal Empire), 496
# and 512 (both "Spengler", RebelAI). The four NPC factions -- 528 Alien Menace, 544 Peacekeeper
# Enforcer, 560 Von Neumann, 576 Independent Colony -- get no AI client, no RunAI call and no
# seed. A seven-id pin list would have been three pins and four dead entries.
#
# The wildcard is deliberately a value that appears nowhere else: if a fourth client ever shows
# up it is still pinned (no silent pass-through) AND its log line reads `used=0xdeadbeef`, so it
# can never be mistaken for a natural seed.
aiseed.values=32=156ebbbd,496=fe7b2826,512=0ed341d1,*=deadbeef
#
# With `aiseed=pin` and no values the module logs "PIN MODE WITH NO PINS -- every seed passes
# through unchanged, so this run is NOT pinned and must not be reported as one". Read that, and
# the three `aiseed call=... pinned=1` lines, in shim.log before trusting any run.