diff --git a/findings/subsystems/ai-order-capture.md b/findings/subsystems/ai-order-capture.md index 36d527f..b15d0a0 100644 --- a/findings/subsystems/ai-order-capture.md +++ b/findings/subsystems/ai-order-capture.md @@ -257,6 +257,11 @@ measured to move an autosave by four bytes. ### 3.1 And a control that did **not** pass — the turn-1 workload is not reproducible +**Lane L5 got here first, on VM146, from the other end.** `turn1-to-turn2-nondeterminism.md` is the +owner of this result and it is the better-designed experiment: three runs including a pair with +*identical* hooks that still disagreed, which rules out the instrument in a way my configurations +cannot. What follows is an independent third-instrument corroboration and one thing it adds. + `turn1-state.sav` + one End Turn does **not** reproduce `turn2-state.sav`, on this build, with or without instruments. Three runs, three different files: @@ -279,15 +284,23 @@ techId **288** on the instrumented run, a different id on the others. So: **the research-target choice of an AI player that owns nothing is not reproducible run to run.** Players 16, 32 and 496 are stable across all three; only 512 moves. Three samples, one field. -This is a correction to an assumption, not to a published claim: `determinism-oracle.md` verifies -the oracle for the **`ref-turn2` workload** and says so; nobody had run the turn-1 workload three -times. It is now on the record that the turn-1 workload is **not** an oracle, and any lane -comparing bytes on it is comparing against noise. +**What this instrument adds to L5's result.** L5 measured the divergence in the *save*. This lane +sees it in the **`TurnCommands` block**: player 512's research-target gate carried techId **288** on +the instrumented run and a different id on the others, in the block the client submits. So the +divergent decision is made **client-side, before submission**, and reaches the save as a command +like any other — it is not the sim diverging on identical input. That is consistent with L5's +inference (a tie broken by per-process iteration order over a pointer-keyed container) and it +removes the sim from the list of suspects, which their instrument could not do. -I did not find the mechanism. It is not the instrument (the `hooks=off` run diverges from the -reference too, and by a *different* value). The shape — one player, one choice, stable everywhere -else — fits a tie-break that reads a heap address or an uninitialised word, and that is a -watchpoint on the selection site, not a reading exercise. +Second corroborating detail: across L5's three runs and this lane's two, the observed values are +`BIO_GnMod`, `XNC_TrnsLir2`, `XNC_TrnsHvr2`, `XNC_TrnsHum2`, `XNC_TrnsMorr2` — **five distinct +values in five runs**, and four of the five are the same tech with a different **species** suffix. +A selection walking a species- or player-keyed container and taking whichever arm it reaches first +fits that shape exactly; a numeric roll over a flat tech list does not. + +The right probe is the one L5 names: read the AI client's generator state after construction in two +processes, and — from this side — put a write watchpoint on the block's research-target payload at +`block+0x10` to catch the writer with its call chain. ---