diff --git a/docs/L4-ai-orders.md b/docs/L4-ai-orders.md index 6d6ce0e..684170e 100644 --- a/docs/L4-ai-orders.md +++ b/docs/L4-ai-orders.md @@ -82,3 +82,33 @@ Lane L5 established this first and better, on VM146, and owns it oracle, not this pair. What this lane adds is where the divergence lives: the differing value is in the **submitted command block**, in player 512's research-target gate, so the decision is made client-side before submission and the sim is not diverging on identical input. + +## Addendum — the research-selection tie set + +`airesearch=on` adds three more register-transparent dump hooks: the per-player delimiter +(`SelectResearchTarget 0x006c8890`, which also prints the player's current target so a player that +returns immediately is distinguishable from one that walks an empty list), one line per candidate +(`TryResearchCandidate 0x006c8580`, in the order the selector sees them), and the outcome +(`cl_SetResearchTarget 0x00578f60`, which takes the tech's **name**, so the chosen tech is a string +in a register and needs no id table). Four reachability probes go with them: the two producers phase +18 tries before the walk, and the two halves of the fallback rotation. + +Measured on one End Turn from `turn1-state.sav`: + +* **Only one of the three AI players reaches the candidate walk.** The other two get their target + from a producer that runs first, which is why they are stable across every run of both lanes and + the third is not — they are on a different code path, not a luckier one. +* **The candidate stream has length one**, and the single entry is `{2, 12}` — small integers, a + *category*, not a tech. A vector of one has no order to scramble, so arrival order is not the + mechanism and the prediction that said it was is falsified. +* **The fallback never ran** (both probes zero), so it is not the three-arm rotation either. + +The variation is therefore inside the resolver that turns a category into a tech. `k` is nameable +from the shipped tech data for the arm that was observed: `XNC_ROOT` allows six tier-1 techs at an +identical 2000 RP, one per species, and each allows exactly one tier-2 successor — the six +`XNC_Trns2`. Four of those six are among the five values observed across six runs between +lanes L4 and L5. **Their costs differ (13000–30000), so the resolver is not ranking by cost**; it is +taking whichever member of the available set it reaches first. + +Full account, including the one observed value that is *not* in that family and what single run +would settle it, in `sots-re/findings/subsystems/ai-order-capture.md` §3.2.