CB: third pinned run -- three processes, nine natural seeds, one autosave

C5b confirms C5a: pinning the AI client seeds to an earlier run's makes the creation
turn reproducible. Three processes, each drawing its own three seeds, all pinned to
C3's, all producing d59bb9f2... with identical gates (including player 512's target
282, the value no other run has produced) and identical element records.

The only word that differs anywhere across the three is word 3 of list 23's unnamed
Population body. Three runs with byte-identical autosaves cannot differ in a word the
applier reads, so that word is noise -- localised using the pinned pair as an
instrument, which is what a control on a k>1 workload is for.

Two agreeing is a 1/k coincidence; three is 1/k^2.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ARBgSooAfokKUy6wKUKEyZ
This commit is contained in:
alex 2026-09-08 19:26:20 -04:00
parent 954f3cec63
commit a64673378a
5 changed files with 1149 additions and 19 deletions

View file

@ -197,29 +197,35 @@ named set as an id, and nobody has mapped 282 to a name. That is the honest stat
The autosave is `d59bb9f2fd0eb535…` (66,746 B) — which is exactly the file lane L5's own
`hooks=off` run produced. Two lanes, two processes, same outcome, by chance.
### 4.2 Runs C5a, pinned — the creation turn IS reproducible
### 4.2 Runs C5a and C5b, pinned — the creation turn IS reproducible
C5a is C3 re-run with `aiseed=pin` set to the three seeds **C3 itself observed**. Its own natural
seeds were entirely different (`0x227235b9` / `0x762d125e` / `0x9d77d4e6`) and were overwritten
before the client ctor saw them.
C5a and C5b are C3 re-run with `aiseed=pin` set to the three seeds **C3 itself observed**. Each is a
separate process; each drew its own three natural seeds, all different from C3's and from each
other's, and each had them overwritten before the client constructor saw them.
| | C3 (unpinned) | C5a (pinned to C3's seeds) |
|---|---|---|
| natural seeds drawn | `e70a4703` / `0c63ca36` / `372be4df` | `227235b9` / `762d125e` / `9d77d4e6` |
| seeds **used** | same | **C3's** |
| research targets 32 / 496 / 512 | 144 / 90 / **282** | 144 / 90 / **282** |
| every other gate and element record | — | **identical** |
| `(Autosave).sav` | `d59bb9f2fd0eb535…` | **`d59bb9f2fd0eb535…`** |
| | C3 (unpinned) | C5a (pinned) | C5b (pinned) |
|---|---|---|---|
| natural seeds drawn | `e70a4703` / `0c63ca36` / `372be4df` | `227235b9` / `762d125e` / `9d77d4e6` | `be649c5c` / `2200dbd2` / `d418f3f8` |
| seeds **used** | its own | **C3's** | **C3's** |
| research targets 32 / 496 / 512 | 144 / 90 / **282** | 144 / 90 / **282** | 144 / 90 / **282** |
| all six gates, all four blocks | — | **identical** | **identical** |
| element records (lists 1, 3, 5, 23) | — | **identical** | **identical** |
| `(Autosave).sav` | `d59bb9f2fd0eb535…` | **`d59bb9f2fd0eb535…`** | **`d59bb9f2fd0eb535…`** |
**The workload that three lanes could not reproduce is reproducible once the seeds are pinned.**
Lane L1's mechanism is confirmed from the other end: the seed is *the* per-process input, and
`game/ai` is a deterministic function of (save, per-client seed). Rung B's input is therefore a
**closed** record — save + seeds + block — and not a log of something that happened once.
**The workload that three lanes could not reproduce is reproducible once the seeds are pinned —
three processes, nine distinct natural seeds, one autosave.** Lane L1's mechanism is confirmed from
the other end: the seed is *the* per-process input, and `game/ai` is a deterministic function of
(save, per-client seed). Rung B's input is a **closed** record — save + seeds + block — not a log of
something that happened once.
The single difference in the whole decoded stream is **word 3 of list 23's unnamed `Population`
body** (`876301736` vs `245`). By the argument of §2 — two runs, byte-identical autosaves — that
word is not a word the applier reads either, which is one more word localised as noise, using the
pinned pair as the instrument. That is what a control on a `k > 1` workload is *for*.
Two runs agreeing on a `k > 1` workload is a `1/k` coincidence; three is `1/k²`, about 3 % at lane
L4's k = 6. That is the reason the third run was worth the eight minutes.
The single difference anywhere in the decoded stream is **word 3 of list 23's unnamed `Population`
body** — `876301736`, `245`, `61179324` across the three. By the argument of §2 (runs whose
autosaves are byte-identical cannot differ in a word the applier reads) that word is noise, now on
three data points rather than two. Localising it is exactly what a control on a `k > 1` workload
is *for*, and it did not exist before this lane could pin.
---
@ -308,3 +314,25 @@ Rules for consuming it, in order of how much they cost to get wrong:
it is not enough to show a word is *stable*, and the stable prefixes above are therefore upper
bounds on noise, not proofs of a record. They agree with the writer's own instruction stream,
which is the second, independent leg.
---
## 8. The guest, left as found (and one thing that was not preserved)
VM146 stopped, `binkw32.dll` restored to lane L5's build (md5 `F8DFC4AE…`, verified equal to
`C:\SOTS\shimdist-l5\binkw32.dll`), `shim.cfg` back to `hooks=off`, `SavedGames` at eight files
so the Load-dialog row geometry is unchanged.
**Not preserved:** the two autosaves that were in `SavedGames` when this lane took the guest.
`cbdeploy.ps1` deletes them before every run — deliberately, so that a run which writes none is
distinguishable from one that rewrites them, and so the dialog lists a constant six files. The
autosaves now present are run **C5b's** outputs (`a3f9dc4b…` / `d59bb9f2…`), both of which are
recorded byte-for-byte in `verify/results/saves/`. They are scratch files every lane's deploy script
deletes anyway, and nothing in the campaign depends on them, but the deletion was not announced in
advance and is recorded here rather than left for someone to notice.
Left in place for the next lane: `C:\SOTS\shimdist-cb` (build `cb-final-20260908T2320Z` plus the
four `shim.cfg.cb*` variants) and `C:\SOTS\cb\` (`cbdeploy.ps1`, `cbstep.ps1`, `cbgrab.ps1`,
`cbrun.ps1`, and the five collected run directories). The WSL-side drivers are in
`verify/harness/cb/`.

View file

@ -0,0 +1,46 @@
aiorders: out=C:\SOTS\shim.aiorders.txt probes=0 of 20
aicfg words=32 deep=1 research=0 seed=pin pins=3 detours=2
aiseed pin netId=32 value=0xe70a4703
aiseed pin netId=496 value=0x0c63ca36
aiseed pin netId=512 value=0x372be4df
aiorders: batch hook StrategySim::ApplyTurnCommandBatch rva=0x0048f9b0 va=00a6f9b0 create=MH_OK enable=MH_OK
aiseed: StrategyApp::RunAI rva=0x004706f0 va=00a506f0 create=MH_OK enable=MH_OK
airesearch: disabled (airesearch=off)
---- aibatch seq=1 blocks=0x012ff5b4 n=1 stride=0x1b4 ----
aiblk seq=1 blk=0/1 at=0x012ff5b4 pid=16 rate=1:0.25 target=0:19920344 boost=0:0,0 g4=0:0,0 f3=0:1,1,1 civ=0
ailists seq=1 blk=0 pid=16 nonEmpty=0 sizes(1..27)=[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ]
aiprobe seq=1 none installed (aiprobes=off)
aiseed call=1 netId=32 observed=0xbe649c5c used=0xe70a4703 pinned=1
aiseed call=2 netId=496 observed=0x2200dbd2 used=0x0c63ca36 pinned=1
aiseed call=3 netId=512 observed=0xd418f3f8 used=0x372be4df pinned=1
---- aibatch seq=2 blocks=0x1e391ef8 n=8 stride=0x1b4 ----
aiblk seq=2 blk=0/8 at=0x1e391ef8 pid=16 rate=1:0.25 target=0:0 boost=0:0,0 g4=0:0,0 f3=0:1,1,1 civ=0
ailists seq=2 blk=0 pid=16 nonEmpty=0 sizes(1..27)=[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ]
aiblk seq=2 blk=1/8 at=0x1e3920ac pid=32 rate=1:0.8 target=1:144 boost=0:0,0 g4=0:0,0 f3=0:1,1,1 civ=0
ailists seq=2 blk=1 pid=32 nonEmpty=4 sizes(1..27)=[ 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 ]
ailist blk=1 pid=32 list=1 off=0x070 size=1
aielem blk=1 pid=32 list=1 idx=0 node=0x1e3746b0 words=32 f0=1.74428e-38 f1=-0.00012207 ints=[ 12447588 -1191182335 1869508424 1632378994 6644590 -1721931907 11 15 2135936087 2 44 862815264 862815468 862815468 -1564249672 0 0 0 -1109545122 2 41 855303880 855303948 855303948 1013849056 0 0 0 1727786879 2 46 862671456 ] hex=[ 00bdef64 b9000001 6f6e6f48 614c2072 0065636e 995d677d 0000000b 0000000f 7f4fcc57 00000002 0000002c 336d8420 336d84ec 336d84ec a2c371b8 00000000 00000000 00000000 bdddaf5e 00000002 00000029 32fae6c8 32fae70c 32fae70c 3c6e1be0 00000000 00000000 00000000 66fbef7f 00000002 0000002e 336b5260 ]
aivec blk=1 pid=32 list=1 idx=0 at=w11 first=0x336d8420 cap=51 count=51 ints=[ 863131624 0 0 0 24 31 0 8 0 0 0 0 0 0 15 0 0 863130944 0 0 0 24 31 0 8 0 0 0 0 0 0 15 ] hex=[ 337257e8 00000000 00000000 00000000 00000018 0000001f 00000000 00000008 00000000 00000000 00000000 00000000 00000000 00000000 0000000f 00000000 00000000 33725540 00000000 00000000 00000000 00000018 0000001f 00000000 00000008 00000000 00000000 00000000 00000000 00000000 00000000 0000000f ] TRUNCATED
aivec blk=1 pid=32 list=1 idx=0 at=w21 first=0x32fae6c8 cap=17 count=17 ints=[ 863131664 0 0 0 24 31 0 8 0 0 0 0 0 0 15 0 0 ] hex=[ 33725810 00000000 00000000 00000000 00000018 0000001f 00000000 00000008 00000000 00000000 00000000 00000000 00000000 00000000 0000000f 00000000 00000000 ]
aistr blk=1 pid=32 list=1 idx=0 at=w2 sso=1 len=11 text="Honor Lance"
ailist blk=1 pid=32 list=3 off=0x088 size=1
aielem blk=1 pid=32 list=3 idx=0 node=0x339c8bc8 words=32 f0=0 f1=4.03574e-43 ints=[ 0 288 18 1 633685498 -2013235968 61229892 61229880 61229868 61229856 61229844 61229832 633423110 -2147453440 863640144 863640336 863640016 863640416 863640432 863640576 641549570 -2147453184 865897512 865897512 240 181 163 53 641287438 -2147452928 61185480 61185492 ] hex=[ 00000000 00000120 00000012 00000001 25c545fa 88007500 03a64b44 03a64b38 03a64b2c 03a64b20 03a64b14 03a64b08 25c14506 80007600 337a1a50 337a1b10 337a19d0 337a1b60 337a1b70 337a1c00 263d4502 80007700 339c8c28 339c8c28 000000f0 000000b5 000000a3 00000035 2639450e 80007800 03a59dc8 03a59dd4 ]
aivec blk=1 pid=32 list=3 idx=0 at=w16 first=0x337a19d0 cap=104 count=100 ints=[ 0 2 613324733 -2013248257 0 0 613455803 -2013248001 1065353216 0 613586873 -2013247745 0 0 613717959 -2013247489 1037465456 0 613849029 -2013247233 0 0 613980099 -2013246977 1065353216 5 614111169 -2013246721 1065353216 0 614242255 -2013246465 ] hex=[ 00000000 00000002 248e97bd 880044ff 00000000 00000000 249097bb 880045ff 3f800000 00000000 249297b9 880046ff 00000000 00000000 249497c7 880047ff 3dd67770 00000000 249697c5 880048ff 00000000 00000000 249897c3 880049ff 3f800000 00000005 249a97c1 88004aff 3f800000 00000000 249c97cf 88004bff ] TRUNCATED
ailist blk=1 pid=32 list=5 off=0x0a0 size=1
aielem blk=1 pid=32 list=5 idx=0 node=0x3324d2e0 words=32 f0=4.03574e-43 f1=0 ints=[ 288 0 1065353216 0 0 0 0 0 603410151 -2147398144 12329660 528 2 0 65535 0 65535 0 864157696 32 600395489 -1946071296 506948320 858051440 858051200 15 864209288 865040320 1 864209288 864157697 32 ] hex=[ 00000120 00000000 3f800000 00000000 00000000 00000000 00000000 00000000 23f74ee7 80014e00 00bc22bc 00000210 00000002 00000000 0000ffff 00000000 0000ffff 00000000 33820000 00000020 23c94ee1 8c014f00 1e376ae0 3324d370 3324d280 0000000f 3382c988 338f77c0 00000001 3382c988 33820001 00000020 ]
ailist blk=1 pid=32 list=23 off=0x178 size=1
aielem blk=1 pid=32 list=23 idx=0 node=0x337253b0 words=32 f0=4.03574e-43 f1=1.74089e-38 ints=[ 288 12423408 865896840 865896864 865896864 538968065 1018011388 -2147163360 1969644882 543516007 1684107860 1750278245 28777 1 1 2147483647 1018339065 -2147163104 1701407809 1918312558 1634427749 25959 3481707 1845493810 16776960 538968064 1018666498 -2147162848 1701407809 1918312558 1634427749 25959 ] hex=[ 00000120 00bd90f0 339c8988 339c89a0 339c89a0 20200001 3cad9efc 8004e320 75666552 20656567 64617254 68532065 00007069 00000001 00000001 7fffffff 3cb29ef9 8004e420 65696c41 7257206e 616b6365 00006567 0035206b 6e000032 00ffff00 20200000 3cb79e02 8004e520 65696c41 7257206e 616b6365 00006567 ]
aivec blk=1 pid=32 list=23 idx=0 at=w2 first=0x339c8988 cap=6 count=6 ints=[ 12422480 1 2 61179324 1000000000 0 ] hex=[ 00bd8d50 00000001 00000002 03a585bc 3b9aca00 00000000 ]
aiblk seq=2 blk=2/8 at=0x1e392260 pid=496 rate=1:0.8 target=1:90 boost=0:0,0 g4=0:0,0 f3=0:1,1,1 civ=0
ailists seq=2 blk=2 pid=496 nonEmpty=0 sizes(1..27)=[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ]
aiblk seq=2 blk=3/8 at=0x1e392414 pid=512 rate=1:0.8 target=1:282 boost=0:0,0 g4=0:0,0 f3=0:1,1,1 civ=0
ailists seq=2 blk=3 pid=512 nonEmpty=0 sizes(1..27)=[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ]
aiblk seq=2 blk=4/8 at=0x1e3925c8 pid=0 rate=0:8.96831e-44 target=0:0 boost=0:0,0 g4=0:0,0 f3=0:1,1,1 civ=0
ailists seq=2 blk=4 pid=0 nonEmpty=0 sizes(1..27)=[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ]
aiblk seq=2 blk=5/8 at=0x1e39277c pid=0 rate=0:8.96831e-44 target=0:0 boost=0:0,0 g4=0:0,0 f3=0:1,1,1 civ=0
ailists seq=2 blk=5 pid=0 nonEmpty=0 sizes(1..27)=[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ]
aiblk seq=2 blk=6/8 at=0x1e392930 pid=0 rate=0:8.96831e-44 target=0:0 boost=0:0,0 g4=0:0,0 f3=0:1,1,1 civ=0
ailists seq=2 blk=6 pid=0 nonEmpty=0 sizes(1..27)=[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ]
aiblk seq=2 blk=7/8 at=0x1e392ae4 pid=0 rate=0:8.96831e-44 target=0:0 boost=0:0,0 g4=0:0,0 f3=0:1,1,1 civ=0
ailists seq=2 blk=7 pid=0 nonEmpty=0 sizes(1..27)=[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ]
aiprobe seq=2 none installed (aiprobes=off)

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,38 @@
tcb 1
meta source cb-c5b-turn1to2-pinned.txt
meta input turn1-state.sav
meta input_sha256 a3f9dc4b49fc669c814b09b87a9c6795de21bac80a1c7bfe3901b8e239fa36cc
meta output (Autosave).sav 66746 d59bb9f2fd0eb5358c35954fbf2fcb70d06bafbba2560e0fa5d3f906bfb159d8
meta control c3-turn1to2-run1 and c5a-turn1to2-pinned; all three produced d59bb9f2...
meta lane CB capture_version 1 build cb2-20260908T2251Z guest VM146
meta extension vN:a,b -- a vector whose contents ARE known; bare vN still means unknown and must still be refused
meta batch seq=2 n=8
seed 32 0xe70a4703 pinned
seed 496 0x0c63ca36 pinned
seed 512 0x372be4df pinned
block 0 16
gate 0 rate 0.25
block 1 32
gate 1 rate 0.8
gate 1 target 144
list 1 1 1
elem 1 1 0 ?
meta string 1 1 0 w2 "Honor Lance"
list 1 3 1
elem 1 3 0 i1 i18 i288 i0
list 1 5 1
elem 1 5 0 i288 ? ? ? ? ? ? ?
meta rates 1 5 0 memory-order-f32 0.0,1.0,0.0,0.0,0.0,0.0,0.0
meta rates-note memory member 1 is wire member SRsc (lane RB, from a replay that regressed two leaves when the memory order was used as the wire order); the other six memory members are UNREAD. Values are certain, positions are not.
list 1 23 1
elem 1 23 0 i288 ? v6:12422480,1,2,61179324,1000000000,0
block 2 496
gate 2 rate 0.8
gate 2 target 90
block 3 512
gate 3 rate 0.8
gate 3 target 282
block 4 0
block 5 0
block 6 0
block 7 0