PAR: the load-time stream offset also varies between processes, and the five-scope table
Adds the lifetime-census result: the three AI clients arrive at their first turn 9 / 411 / 421 words into their streams while the human's generator is at word 0, and client 32 started its turn at block index 9 in one process and 11 in another FROM THE SAME SAVE -- the rejection loops it runs during Prepare Turn resolve differently under different seeds. So a client's generator position at the start of a turn is not a function of the save either. Also records what pinning the seed showed (the same three words, and the oracle bytes unchanged -- so every one of those words is a draw whose result never reaches the save, measured directly for the first time), the facade call-site attribution that names client 512's single draw as the research-target tie-break at 0x006a8495, and one observation this lane could NOT resolve: three fresh processes on turn1-state gave the same autosave although 512's stream demonstrably differed, which does not reproduce lane L5's three-different-files result on that pair.
This commit is contained in:
parent
6e34c72906
commit
198695c4cc
1 changed files with 19 additions and 9 deletions
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
- **Type:** subsystem (live measurement + static classification)
|
||||
- **Status:** **verified — the answer is NO**, at every scope the question can be asked at
|
||||
- **Confidence:** high on the negative (measured on two boards, four AI clients, five fresh
|
||||
- **Confidence:** high on the negative (measured on two boards, three AI clients, six runs in six fresh
|
||||
processes, with the instrument's autosaves byte-identical to the published oracle);
|
||||
medium on the completeness of the site inventory (§6 says what is not covered)
|
||||
- **Owner / date:** lane PAR · 2026-09-08 · VM140 (reference) + VM145
|
||||
|
|
@ -16,11 +16,11 @@
|
|||
|
||||
---
|
||||
|
||||
## 0. The verdict, at four scopes
|
||||
## 0. The verdict, at five scopes
|
||||
|
||||
**The hypothesis is false, and it is false in the strongest available way: it fails at the
|
||||
primitive, at the site, at the client and at the turn.** There is no scope at which an AI client's
|
||||
word count is fixed.
|
||||
primitive, at the site, at the client, at the turn, and even at the point where the turn begins.**
|
||||
There is no scope at which an AI client's word count is fixed.
|
||||
|
||||
| scope | claim | measured |
|
||||
|---|---|---|
|
||||
|
|
@ -28,6 +28,7 @@ word count is fixed.
|
|||
| **per client, across turns** | one client costs the same each turn | client 32: **3** on turn 2, **7** on turn 1 |
|
||||
| **per client, across processes (path fixed)** | one client's count is a property of the board | client 512, turn 1, **one and the same `cl_RandRange` call** (the research tie-break, `0x006a8495`): **1 word** in one process, **3 words** in another |
|
||||
| **per site** | a site that is reached always costs the same | `RNG_Chance` costs **0 words** at `p ≤ 0` and `p ≥ 1`; `RNG_NextInt` is an **unbounded rejection loop** |
|
||||
| **at the start of the turn** | a client's stream position is a function of the save | client 32 began its turn at block index **9** in one process and **11** in another, from the same file |
|
||||
|
||||
The two shadow empires (496, 512) own nothing at all — no colonies, no fleets, no systems — and
|
||||
they still do not agree with each other: on turn 1, 496 spends **0** and 512 spends **1 call
|
||||
|
|
@ -365,11 +366,20 @@ Listed so a later lane does not double-count them:
|
|||
as a 0/1/2 selector, while the four real `AIObject` sinks read `[pkt+0]` as the code — and none of
|
||||
those four draws anything.)*
|
||||
|
||||
The load-time cost is large and asymmetric. Measured with the lifetime census on the canonical pair:
|
||||
the three AI clients arrive at their first turn already **17, 424 and 427** words into their
|
||||
streams, and the human client's generator is at 0. `g_GlobalRNG 0x00af6e58` shows **3 words drawn,
|
||||
one per AI client construction** — a second, independent falsification of
|
||||
`ai-turn-logic.md` §5.1's "every draw from it returns 0", after lane L1's.
|
||||
**The load-time cost is large, asymmetric, and itself not fixed.** With the lifetime census on the
|
||||
canonical pair, the three AI clients arrive at their first turn already **9, 411 and 421** words
|
||||
into their streams (build `par4`, in which the nested double count is corrected), while the human
|
||||
client's generator is at word 0. And the figure moves between processes: client 32 began its turn at
|
||||
block index **9** in one run and **11** in another, because the rejection loops it runs during
|
||||
Prepare Turn resolve differently under different seeds.
|
||||
|
||||
So the AI's generator position at the start of a turn is **not** a function of the save. Two loads of
|
||||
the same file put the same client at two different stream offsets. That is a second, independent
|
||||
reason a reimplementation cannot reach a byte match on an AI empire by counting draws.
|
||||
|
||||
`g_GlobalRNG 0x00af6e58` shows **3 words drawn, one per AI client construction** — a second,
|
||||
independent falsification of `ai-turn-logic.md` §5.1's "every draw from it returns 0", after lane
|
||||
L1's, and from a different instrument.
|
||||
|
||||
---
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue