304 lines
27 KiB
Markdown
304 lines
27 KiB
Markdown
# Resolution — the tail draws behind a tech gate; the ledger was firing-indexed, the audit must be gate-indexed
|
||
|
||
- **Type:** resolution (course-setting; no measurement taken here)
|
||
- **Trigger:** lane AC's `findings/control-flow/trade-raid-rng-gate.md` — `OnAllCombatDone_Tail`
|
||
costs 1 word/turn with a permitted raider parked on a trade-sector node, 0 in its own control
|
||
- **Date / author:** 2026-09-09 · re-resolver
|
||
- **Touches:** board rows 186 / 207 / 373 / 399 / 62; `tail-rng-ledger.md` headline (third
|
||
qualification); `indirect-edges.md` §3.1 (vindicated, and misquoted by AC §6); `backlog.md`
|
||
§3 item 3, §4 item 3, §5; `sots-engine` `phase_catalog.cpp` T23 and `TurnResult::rngUnaccounted`;
|
||
`method-rules.md` (new rule 28)
|
||
|
||
---
|
||
|
||
## 0. Decision
|
||
|
||
1. **The surprise is real and the instrument is exonerated for the word it found.** Same guest,
|
||
build, config; control reads 0, active reads 1; the callee that holds the decoded `NextFloat`
|
||
went 0 → 1 entry on the same turns; the success-only callee `B` fired on one turn of two,
|
||
which is what a roll does. **One qualification that AC's own prediction doc promised and the
|
||
run did not deliver:** every active-state number was taken at `probes=11`, which lane H
|
||
bisected as *not* byte-neutral (it suppresses a `ProcessTurn` research draw). The tail delta
|
||
survives that (it is entry-attributed and the perturbation is elsewhere in the turn); the
|
||
turn totals 20 / 18 do **not** become calibration numbers and **no AC autosave is an oracle
|
||
pair**. `ac-turn22-raider.sav` is a valid *input* state regardless.
|
||
2. **Lane Z's ledger is sound as an instrument and was never a completeness proof.** It reads
|
||
generator state across a bracket, so it cannot miss a draw *that happens*; its site table lists
|
||
sites *that fired*. Twice now (hives, raid roll) a site outside the table cost 0 on every turn
|
||
Z measured and non-zero on a state nobody had built. The structural gap is not in the ledger
|
||
but in the **audit** built on it: indexed by firing, it can only grow by luck. The next audit is
|
||
complete when it is **gate-indexed** (§3).
|
||
3. **Lane V2's static reading is vindicated, not overturned — and AC §6 misquotes it.** V2 §3.1
|
||
lists trade slot 13 (`0x0088ef80`, closure 84) as **drawing** `NextFloat, NextInt`, with the
|
||
`NextFloat` at **`0x00820e18` inside `0x00820ca0`** — the exact site AC fired. "Closure 185,
|
||
draw-free" is V2's row for **slot 9** (`0x00868060`, the route rebuilder L3 trapped), and
|
||
nothing contradicts it. Board row 399's last clause and AC §6's V2 paragraph are wrong and
|
||
must be corrected in place (rule 11). The static inventory was ahead of every measurement
|
||
here; what was missing was the step from *gate* to *save predicate*.
|
||
4. **The coordinator's "risk retired" row is overturned; L3's measurement survives.** L3's zeros
|
||
were true of its state. Its *inference* — "the next condition is freighters / `spyon`" — was
|
||
a guess at the nearest container, falsified by its own save (AI freighter on an active route
|
||
for seven turns) and by the predicate (freighters are not in it). Four lanes converged on a
|
||
false negative about reachability because none of them decoded the gate to a predicate on the
|
||
save and counted the corpus against it. **Rule 28, drafted in §6.**
|
||
5. **Rung B is affected exactly as Rung A is — the coordinator's reading is wrong.** The draw is
|
||
a *sim* draw on `S+0x16c`, keyed on state (`Flt.LocID` → `TradeSector`, `Pos` bit-equal,
|
||
`tscr` bit), not on the AI. `--turn-commands` replay runs no AI but **does run the tail**
|
||
(`command_replay.h:83`). Any pair whose input carries a permitted parked raider needs the
|
||
site modelled for both rungs. The canonical pair is untouched (`tscr = 252`, no fleet at a
|
||
sector node). No rung moves; §3 of the backlog gains an item.
|
||
6. **One probe, VM141, ~5 turns from `ac-turn22-raider.sav`:** a second raider of a different
|
||
hull on the same sector, measured with lane Z's **return-address** ledger (`draw_sites`) at
|
||
`probes=8` or `hooks=off`, two fresh processes. It separates per-fleet from per-sector cost,
|
||
prices the `design+0x12c > 1` short-circuit, catches `B`'s inner `NextInt`, and hands the
|
||
standalone its first raid-turn **oracle pair**. §4.
|
||
7. **The spy half is a lane, not a probe, and it needs a new game** (no AI-owned belt exists in
|
||
L3's map). Brief in §7; its instrument is `draw_sites`, not entry probes on `P`, for exactly
|
||
the reason AC gave.
|
||
|
||
---
|
||
|
||
## 1. The surprise, precisely
|
||
|
||
On VM141 under shim build `ac-7e726b9`, config `shim.cfg.l3probe`: one End Turn on lane L3's
|
||
`human-turn15-spyprogram.sav` gives `OnAllCombatDone_Tail` **355 → 355** and
|
||
`TradeManager::Slot13RngCalleeA` **0 entries**; two End Turns on AC's turn-21/22 lineage give
|
||
**468 → 469** and **487 → 488**, `A` **1 entry each**, `B` **1 then 0**. The difference between
|
||
the two states, read from the saves: `CnRad` true on player 0, `tscr` 253 not 252 on all six
|
||
sectors, and one `StarFleet` whose `LocID` is a `TradeSector` id with `Pos` bit-equal to the
|
||
sector's — the first such fleet in the corpus. AC's committed P6 predicted **no** firing on the
|
||
`tscr`-is-fixed reading; it was falsified, which is the strong form of rule 2.
|
||
|
||
## 2. The instrument
|
||
|
||
**Exonerated for the delta.** Three independent signals agree: the boundary ledger's +1, the
|
||
entry probe's 0 → 1 on the callee V2 had statically placed the `NextFloat` in, and `B`'s
|
||
success-only firing pattern. The control is the same instrument on the same guest minutes apart.
|
||
The `hooks=off` control on `ref-turn2` matched the three-process published oracle (rule 26's bar,
|
||
met by agreement with an already self-consistent control).
|
||
|
||
**Qualified on byte-neutrality — and AC knew.** `docs/AC-predictions.md` §2: *"I will take the
|
||
primary reading at `probes=8` … and cross-check at `probes=11`."* The report is `probes=11`
|
||
only. Lane H showed that configuration suppresses `RollResearchEvent`'s draw earlier in the turn.
|
||
Consequences: (a) the tail's +1 stands — it is attributed by entry and decode, and the known
|
||
perturbation is a `ProcessTurn` site; (b) the turn totals and `left` positions in AC's traces are
|
||
**not** calibration data; (c) AC's `(Autosave).sav` files were produced by a perturbed process and
|
||
are **not oracle pairs** — the raid-turn oracle pair still has to be made (§4 makes it). None of
|
||
this touches the *state* in `ac-turn22-raider.sav`, which is an input like any other.
|
||
|
||
## 3. Standing claims
|
||
|
||
| claim | where | verdict | scope / correction |
|
||
|---|---|---|---|
|
||
| "18–22 words/turn, every word attributed, zero residual" | lane Z, board 186 | **survives as measurement; qualified a second time** | True of every turn measured. "Every word attributed" is per-turn; it was read as "the site set is complete", which the instrument never claimed. Now two sites outside the set: hives (`BeginProcessTurn`, L1) and the raid roll (tail T23 call 7, AC). The ledger's *method* — state difference across a bracket — is exactly right and would show any future site as residual the moment its state is reached |
|
||
| L1's qualification of Z (creation-turn hive draws) | `hive-creation-rng.md`, board 336 | **survives** | Same shape as this one; both are rule-6 sites that no corpus state reached |
|
||
| V2: trade slot 13 draws `NextFloat`/`NextInt` at `0x00820e18`/`0x0088b613`; spy 13 draws at `0x00887c8a` (inline) + three in `P`; trade 15 and spy 14 one `Chance` each; "hook them with a live workload" | `indirect-edges.md` §3.1, board 207 | **survives — vindicated** | The site AC fired is V2's `0x00820e18`. Its *negative* rows (slots 7/8/9/11/12/14, spy 15) remain lower bounds by V2's own §6 (inlined draws). Board 207's "our corpus has neither" was the wrong diagnosis of *why* — the containers were never the gate |
|
||
| AC §6 / board 399: "V2 recorded trade slot 13 as closure 185, draw-free" | AC, board 399 | **overturned (misattribution)** | 185 / draw-free is slot **9**, the route rebuilder; L3 §3.3 quoted it correctly for slot 9 and AC carried the number to the wrong slot. Correct both in place |
|
||
| H §3: four outer callees entered every turn, gated inside; P2b-alt falsified — "the per-fleet test chain is the gate and rejects every fleet on a 23-fleet save" | `tail-probes.md` §3.1 | **survives exactly** | H stopped one step short of decoding the chain. It also established `probes=8` as the neutral configuration, which AC then did not use |
|
||
| W3: "if either container ever fills, the ledger and generator model need extending; the trigger is now detectable" | `w3-containers-status-handlers.md` §1 | **survives as a risk; trigger overturned** | Filling the containers changed nothing; the extension was needed for a state the container watch cannot see. The detectable trigger is `Flt.LocID` resolving to a `TradeSector` id |
|
||
| L3 §3.5 measured zeros with 21 routes + 1 spy | `trade-and-spy-workload.md` | **survives** | True of that state, and the state had an AI freighter on an active route the whole time |
|
||
| L3 §3.5 "the next condition is `tsnumflt > 0` / `spyon != 0`"; coordinator's "risk retired by evidence" | L3, board 373 | **overturned** | Freighters are not in the predicate; `spyon` understates the spy chain by `deat != 0`, a detection roll on an earlier turn (itself a draw), and `turn − sdet ≥ 3` |
|
||
| L3: "`spies2` is not the spy list" | L3 §6 | **still open** — unchanged | Deploy not reached; AC's P4 (fills only for a deployed spy) is the live reading; rule-6 flag stays |
|
||
| AC: gate = fleet at `TradeSector` node, `Pos` bit-equal, `tscr` bit, `tsct` ⇒ `FtFlg & 0x800`; `CCC_ComRaid` sets `CnRad` and bit 0 of every `tscr` | AC §2.1, §3 | **survives** (verified, one state) | Coverage: 1 fleet × 1 sector × 1 ship × 2 turns. The per-fleet loop is read, not measured (§4) |
|
||
| AC: cost = 1 word/turn | AC §1.2 | **qualified** | That raider's cost. `A` short-circuits without drawing when any ship's `design+0x12c > 1`; `B` ran once at 0 words with a `NextInt` inside it gated on something unread. Cost per turn is `Σ_fleets [passes G0–G4] × (short-circuit ? 0 : 1) + B's cost on success` — the first term is inference, the rest unmeasured |
|
||
| AC §2.2: the spy detection roll is inline in `vslot13`, invisible to an entry probe on `P` | AC | **survives — and V2 already listed the site** (`0x00887c8a`) | The fix is instrument choice: lane Z's `draw_sites` keys on return address and sees every entry-point call wherever it sits; only an *inlined* MT (rule 16) escapes it, and `0x008e6dd0` is `Chance`, an entry point |
|
||
| Backlog §4 item 3: "four can draw and none has fired (no trade routes / spy program in the corpus)" | `backlog.md` | **overturned** | One has fired; the corpus reason was wrong. Restated in §8 |
|
||
| Backlog §2: Rung B "unaffected … replay runs no AI" (coordinator's reading in the brief) | brief | **overturned** | Sim draw; the tail runs under replay. Rung B needs the same generator model as Rung A |
|
||
| Standalone calibration pairs `z2-*`, `z-t6-*` | lane Y | **survive** | Both turns have `tscr = 252` and no fleet at a sector; the site costs 0 there by the predicate, not by luck |
|
||
|
||
### 3.1 The ledger question, answered
|
||
|
||
*Is the method sound and the scope narrower, or is there a structural reason it kept missing
|
||
sites?* Both, and they are different objects. The **instrument** (bracket state difference +
|
||
return-address attribution) is sound and complete *for the turn it measures* — an unlisted site
|
||
that fires shows up as residual, which is how L1's run announced the hive draws. The **audit**
|
||
(`tail-rng-ledger.md` §11 read as "the generator model's site list") is structurally incomplete
|
||
because it is **indexed by firing**: a site enters it when a state reaches it, and no instrument
|
||
on a state can enumerate the states it is not in. It kept "missing" sites because the corpus kept
|
||
not reaching them, and nothing in the audit could say so.
|
||
|
||
**What makes the next audit complete rather than larger:** index it by **gate**, not by firing.
|
||
One row per statically-known draw site reachable from `BeginProcessTurn` ∪ `ProcessTurn` ∪
|
||
`OnAllCombatDone_Tail` over direct + tail-jump + pinned-virtual edges (lane I's 22 + 28 inlined,
|
||
V2's 8, L1's hive site, node-line decay, and V2 §4.3's SVSO overrides — the last with *which
|
||
generator* still unknown). Each row must carry **one of two things**: a measured firing (save,
|
||
turn, words), or a decoded gate written as a **predicate on save fields** plus the number of corpus
|
||
saves satisfying it. A row with neither is the audit's own to-do list; a row with predicate and
|
||
count 0 is rule 6 with a recipe attached (`tscr` bit ⇒ research `CCC_ComRaid`). Completeness is
|
||
then a property you can check by reading the table, and the table can be *wrong* — a predicate
|
||
claim is falsifiable by one manufactured save — which the firing-indexed list never was.
|
||
|
||
Today's unfilled rows, from V2's eight: `0x0088b613` (`B`'s `NextInt`; `B` ran, cost 0, gate
|
||
unread), `0x0082cdb8` (trade 15 `Chance`; loop is the route vector, L3 had 21 routes, cost 0,
|
||
gate unread), `0x0088dc43` (spy 14 `Chance`; loop is the spy vector, L3 had 1, cost 0, gate
|
||
unread), and the spy-13 family (`0x00887c8a` inline + `P`'s three) whose gate AC decoded and
|
||
whose corpus count is 0. Plus the SVSO slot-4/11/25 overrides with generator unknown.
|
||
|
||
## 4. The one probe — a second raider, a different hull, the return-address ledger, an oracle pair
|
||
|
||
**Load `ac-turn22-raider.sav` on VM141. Build one warship of a hull whose `design+0x12c > 1`
|
||
(AC's short-circuit field — a DN if that is hull class; whichever satisfies the read), keep it as
|
||
its own fleet, order it to sector 6 with a plain `click`, verify `Flt.LocID = 832` from the
|
||
autosave, then End Turn twice with lane Z's `draw_sites` detours armed and entry probes at
|
||
`probes=8`, in two fresh processes each, `hooks=off` once for the oracle bytes.**
|
||
|
||
Live hypotheses it separates, with the number each predicts on the tail:
|
||
|
||
- **H-fleet** (the decoded loop): cost = one draw per fleet passing G0–G4 that is not
|
||
short-circuited. Two raiders, one short-circuited ⇒ `A` entered **2×**, **1 word**, `B` entered
|
||
≥ 1× (the short-circuited fleet succeeds without rolling, so `B` fires for it every turn).
|
||
- **H-fleet, no short-circuit** (if the hull read is wrong): `A` 2×, **2 words**, `B` 0–2×.
|
||
- **H-sector** (one roll per sector, AC's reading wrong about the loop): `A` **1×**, **1 word**
|
||
regardless of fleet count.
|
||
|
||
Every outcome is informative and all three are cheap to tell apart. What rides along for free:
|
||
`draw_sites` prices `0x00820e18` and `0x0088b613` by return address (settling `B`'s cost on
|
||
success, which entry counting cannot), and the `hooks=off` run in two processes — agreeing, rule
|
||
26 — gives the standalone a **raid-turn calibration pair** it does not have, because AC's
|
||
autosaves were made under a perturbing configuration. Predictions to commit before the build:
|
||
`A` 2×/turn; 1 word if the short-circuit is real, 2 if not; `B` ≥ 1×/turn; `B` costs 0 on every
|
||
success; the un-instrumented pair reproduces in two processes.
|
||
|
||
Do **not** spend this probe on the spy half. Nothing in that game can reach a deployed spy.
|
||
|
||
## 5. The generator model, extended precisely
|
||
|
||
For `sots_turn`, in `phase_catalog.cpp` **T23** (currently `"eight vtable calls, wholly
|
||
unidentified"` — they are all identified, V2 §3): call 7 of 8, `ServerTradeManagerImpl::vslot13`
|
||
(`0x0088ef80`, dispatched at `0x007d97f7`), after the slot-9 route rebuild (call 5) and before
|
||
slot 15 (call 8). Iterate `StrategyServer` fleets in vector order; for each fleet `F`:
|
||
|
||
```
|
||
sector = F.LocID resolved; require node.kind == 2 (TradeSector) -- G2
|
||
require !(runtime flag pair +0xb8/+0xbc & 0x80000) -- G3a (not on the wire; assume clear)
|
||
owner = F.owner; require owner
|
||
require (sector.tscr >> owner.index) & 1 -- G3b (tscr is on the wire)
|
||
if ((sector.tsct >> owner.index) & 1) || owner.+0x5c == 4: -- G3c
|
||
require F.FtFlg & 0x800
|
||
require F.Pos == sector.Pos, all three floats bit-equal -- G4
|
||
if any ship in F has design+0x12c > 1: success, 0 words -- A short-circuit (read, unmeasured)
|
||
else: 1 × NextFloat via rng+4 (1 word, no rejection loop), success iff < odds
|
||
if success: B (0 words on 1 observation; contains NextInt 0x0088b613 behind an unread gate)
|
||
```
|
||
|
||
Odds: AC read `0.20` / `0.05` base, `+0.01·nShips`, ×2 with a freighter in the sector, scaled by a
|
||
per-ship float — **static, unvalidated** (two turns, one success); the standalone should carry the
|
||
**count** now and the decision as `rngUnaccounted`-style "not a prediction" until the odds are
|
||
checked, exactly as `trade_raid.cpp` already does for hits. Add the row to `TurnResult::
|
||
rngUnaccounted` today as `"T23c7 raid roll: N fleets pass the gate"` computed from the save, so
|
||
that on the canonical pair it prints 0 by predicate and on `ac-turn22-raider.sav` it prints 1 —
|
||
that line is the standalone's own rule-28 check.
|
||
|
||
**Interval:** unchanged at the ends (`BeginProcessTurn` → post-turn autosave). **Rung B:** same
|
||
model; additionally the *move order to a sector node* is a list-8 fleet move whose destination
|
||
is a non-star node, which `game/nav` cannot currently route — a new destination kind, noted for
|
||
RB, not urgent (no captured stream contains one).
|
||
|
||
**Ratchet (rule 27):** `CnRad` on `ServerPlayer`, `tscr = 253`, three `rt` records, `tsflt`
|
||
holding a warship id, and `Flt.LocID` = a `TradeSector` id are the content to type. `tscr` is
|
||
already a named wire field (L3); the schema needs `CnRad` and the reader needs to accept a
|
||
non-star `LocID`.
|
||
|
||
## 6. Draft rule 28 for `method-rules.md`
|
||
|
||
> ## 28. A zero on a gated path is not a negative until the gate is a predicate on the save
|
||
>
|
||
> Four lanes measured the trade-raid callee at zero entries and each was right about its state.
|
||
> Lane H read that the loop is over fleets and that "the per-fleet test chain rejects every
|
||
> fleet"; lane L3 built both containers, measured zero again, and named the next condition by
|
||
> looking at the nearest container (freighters, a deployed spy); the coordinator published the
|
||
> risk as retired by evidence. Lane AC decoded the chain to four tests, three of them on fields
|
||
> the save carries, found `tscr = 252` in every corpus save, went looking for what writes it, and
|
||
> found a tech. Nobody had been wrong about a measurement. Everybody had been wrong about
|
||
> **reachability**, because the negative was never stated as *which predicate failed*.
|
||
>
|
||
> So, for any site that a static inventory says can draw and a measurement says did not:
|
||
> **(a)** decode the gate to a predicate over save-visible fields, and say which conjunct failed
|
||
> on the state measured; **(b)** count the corpus saves that satisfy the whole predicate — if
|
||
> the count is 0 the result is rule 6 with a recipe, not a negative; **(c)** name the next
|
||
> workload from the failed conjunct, never from the nearest container or vector. A field that
|
||
> holds the same value in every corpus save (`tscr = 252`, like rule 8's `ReqCL == (Species != 4)`)
|
||
> is a corpus coincidence until its writer is found — find the writer before calling it a
|
||
> constant. And when a lane's instrument counts *entries* to a function, a draw sitting in the
|
||
> caller is invisible to it: pair entry probes with the return-address ledger before reporting
|
||
> a subtree draw-free.
|
||
>
|
||
> Damage: three lanes on the wrong variable, a "retired" row on the board for a day, and a
|
||
> generator model that would have shipped without the site. Caught by a committed prediction
|
||
> (P6) being falsified — rule 2 again.
|
||
|
||
Below rule 27, append as 28.
|
||
|
||
## 7. Course — guests and briefs
|
||
|
||
Five guests free. Spend two; keep VM140 as the oracle guest untouched.
|
||
|
||
**Lane AD — VM141 (AC's guest: its dist, saves and click verbs are there).** The §4 probe.
|
||
One-paragraph brief: *Start from `ac-turn22-raider.sav`. Add a second raider fleet of a hull
|
||
that satisfies `design+0x12c > 1` (say which field that is and which hull you chose); park it on
|
||
sector 6; confirm `Flt.LocID 832` from the autosave, not the panel. Measure two End Turns with
|
||
`draw_sites` armed and `probes=8` — not 11 — in two fresh processes; then `hooks=off` twice from
|
||
the same save for the oracle pair, and cite the agreement. Commit before the build: `A` entries,
|
||
words, `B` entries per turn under H-fleet, H-fleet-no-short-circuit, and H-sector. Report per-site
|
||
words by return address for `0x00820e18` and `0x0088b613`. The pair you produce is the
|
||
standalone's raid-turn calibration; hash it into `determinism-hashes.txt`.*
|
||
|
||
**Lane AS — VM144 (L3's guest: the research/design/Build Spy click paths and the tender
|
||
recipe live there).** The spy half, as a lane. Brief: *L3's map has no AI-owned belt; do not
|
||
reuse it. Start a new custom game at L3's settings, End Turn once, and read `ARes2 > 0` against
|
||
AI ownership in the autosave before investing a turn — regenerate until an AI colony with a belt
|
||
exists. Then L3's §5 recipe to a docked spy, move to the belt colony, `Special → Deploy Spy`.
|
||
Instrument: lane Z's `draw_sites` return-address ledger, not entry probes on `P` — the detection
|
||
roll at `0x00887c8a` (`Chance`, gated on `0x00743f80(system) & 1`) is inline in `vslot13`. Commit
|
||
before the build: `deat != 0` on the deploy turn; a tail draw on the first turn the system-side
|
||
bit is set (`sdet` stamped, `EVENT_SPY_DETECTED`); `P` entered on turn `sdet + 3` if the system
|
||
stays foreign-owned; `spies2` non-empty in exactly the deploy system (AC's P4). Report every
|
||
conjunct of the chain that was and was not satisfied per turn. This is ~20 turns; it is a lane.*
|
||
|
||
**Lane AG — host, no VM.** The gate-indexed audit (§3.1): one table, every reachable draw site,
|
||
firing-or-predicate, corpus count. Decode the three unread gates (`0x0088b613` in `B`,
|
||
`0x0082cdb8` in trade 15, `0x0088dc43` in spy 14 — closures 54–84, small) to save predicates and
|
||
count the corpus. Do not measure; hand each count-0 row a recipe for whoever holds a guest next.
|
||
State which generator the SVSO overrides use where it can be read, and mark the rest unknown.
|
||
|
||
**Engine (RB or the standalone owner).** §5: the T23 slot, the `rngUnaccounted` predicate row,
|
||
`CnRad` in the schema, non-star `LocID`. No `game/nav` work yet.
|
||
|
||
**Docs to correct in place (rule 11):** AC §6's V2 paragraph (slot 9, not 13); board 399's last
|
||
clause; `tail-rng-ledger.md` headline gains a second qualification block pointing here (the
|
||
first is L1's); `indirect-edges.md` §3.1 gains a one-line "fired: `0x00820e18`, lane AC" note;
|
||
L3 §3.5's "next condition" paragraph gets a pointer to AC §2 rather than a rewrite.
|
||
|
||
## 8. Roadmap — no rung moves; three lines change
|
||
|
||
`backlog.md` §3, add after item 3:
|
||
|
||
> | 3b | **the trade-raid roll in the tail** — T23 call 7; one `NextFloat` per fleet passing a
|
||
> four-test gate on `Flt.LocID`/`Pos`/`tscr`, 0 under a hull short-circuit; `B` on success
|
||
> (cost 0 on one observation) | `app` | lane AC decoded, lane AD measuring the loop | the
|
||
> `/Sim/RNG` leaf on any raid-turn pair; currently costs the canonical pair nothing by predicate |
|
||
|
||
§4 item 3, replace with: *trade + spy managers — all 11 virtual targets named; four can draw;
|
||
**one has fired** (trade 13, behind `CCC_ComRaid` + a parked raider — lane AC). The gate was
|
||
never the containers. Spy 13 decoded, unreached; trade 15 / spy 14 / `B`'s inner draw: gates
|
||
unread (lane AG).*
|
||
|
||
§5, replace "trade routes + spy program — the four tail draw sites" with: *a deployed-and-detected
|
||
spy at a foreign belt colony (lane AS); a second raider hull on a sector node (lane AD).*
|
||
|
||
---
|
||
|
||
## Proposed `campaign/board.md` rows
|
||
|
||
New row:
|
||
|
||
```
|
||
| RESOLUTION: the tail draws behind a tech — ledger firing-indexed, audit to be gate-indexed; V2 vindicated; Rung B affected | meta | verified | high | 100% | 2026-09-09 | Resolver on lane AC (`findings/resolutions/2026-09-09-tail-draws.md`). INSTRUMENT: exonerated for the +1 (same guest/build/config, control 0, callee 0->1, B success-only) — but every AC number is `probes=11`, the configuration lane H bisected as NOT byte-neutral, and AC's own predictions promised a `probes=8` primary reading it never took: the tail word stands, the turn totals are not calibration data, and NO AC AUTOSAVE IS AN ORACLE PAIR. LANE Z: instrument sound (state difference cannot miss a draw that happens); the AUDIT is structurally incomplete because it is indexed by FIRING — twice now (hives, raid roll) a site cost 0 on every measured state and fired on one nobody had built. Next audit must be GATE-INDEXED: every reachable site carries a measured firing OR a decoded predicate on save fields + the corpus count satisfying it (lane AG). V2 VINDICATED, NOT OVERTURNED: `indirect-edges.md` §3.1 lists trade slot 13 as DRAWING at 0x00820e18 — the exact site AC fired; "closure 185, draw-free" is SLOT 9, misquoted by AC §6 and row 399 — correct both. RUNG B IS AFFECTED: the draw is a SIM draw on S+0x16c keyed on Flt.LocID/Pos/tscr; replay runs the tail (command_replay.h:83). Canonical pair untouched (tscr=252, no fleet at a sector). Model: T23 call 7, per fleet passing G2/G3/G4, 1 NextFloat unless design+0x12c>1 (0 words), B on success (0 on one observation; NextInt 0x0088b613 gate unread). ONE PROBE, VM141 (lane AD): second raider of a short-circuit hull on sector 6 from ac-turn22-raider.sav, draw_sites + probes=8, two fresh processes, hooks=off pair for the oracle — separates per-fleet (A 2x) from per-sector (A 1x), prices the short-circuit, costs B by return address. Spy half = lane AS on VM144, NEW game (regenerate until an AI colony has a belt), draw_sites not entry probes (the detection roll 0x00887c8a is inline in vslot13). RULE 28 DRAFTED: a zero on a gated path is not a negative until the gate is a predicate on the save and the corpus is counted against it; name the next workload from the failed conjunct, never the nearest container; a corpus-constant field is a coincidence until its writer is found. No rung moves; backlog §3 gains 3b, §4 item 3 and §5 restated |
|
||
```
|
||
|
||
Edits to existing rows:
|
||
|
||
- **Row 186** (`RNG LEDGER CLOSED - zero residual`) — prefix: `QUALIFIED TWICE (L1 2026-09-08, AC 2026-09-09; resolver): "every word attributed" is per-turn and TRUE; the site table is firing-indexed and NOT a completeness claim — hives (BeginProcessTurn) and the trade-raid roll (tail T23c7) both cost 0 on every turn here and fire on states this corpus never held. Calibration pairs z2/z-t6 still valid (both cost 0 there by predicate).`
|
||
- **Row 207** — append: `FIRED 2026-09-09: 0x00820e18 (trade 13), lane AC, behind CCC_ComRaid + a fleet parked on a sector node. The "our corpus has neither" diagnosis was wrong — containers were never the gate. Seven of the eight sites still unfired; gates for 0x0088b613 / 0x0082cdb8 / 0x0088dc43 UNREAD (lane AG).`
|
||
- **Row 399** — replace the final clause (`And lane V2's "trade slot 13 is draw-free" … not about the code`) with: `CORRECTION TO THIS ROW AND TO AC §6: V2 never said trade slot 13 was draw-free — §3.1 lists it as DRAWING NextFloat/NextInt at 0x00820e18/0x0088b613, the exact site that fired. "Closure 185, draw-free" is V2's row for SLOT 9 (the route rebuilder L3 trapped), which stands.`
|
||
- **Row 62** (guest holders) — `VM141 = lane AD (raid-loop probe + oracle pair, from ac-turn22-raider.sav); VM144 = lane AS (deployed-spy lane, new game); VM140 reserved as oracle guest; VM145/VM146 free.`
|