Two results from the same VM session, both of which needed a workload the
corpus cannot supply.
CDiff, played forward. ref-turn2 loaded and 49 End Turns driven through the UI
helper to frame 51, with the entry hook emitting one record per turn:
50 calls, frames 2..51, EXACTLY TWO STORES
frame 2 -1 -> 0
frame 50 0 -> 1 <- the modelled tier transition, at the modelled frame
and 47 turns between them on which the writer ran and wrote NOTHING
predict_path was computed at entry from the transcribed threshold table on all
fifty turns and agreed with the cdiff region on every one. Frame >= 100 is still
a code read and is not claimed as a measurement.
The AI seed probe (asked for by the coordinator, ranked above CDiff). Hooks on
Mars::RNG::Seed and StrategyApp::RunAI, two launches from turn1-state, load
only. Every AI client seed differs between processes -- net 32, 496 and 512 all
move -- while the record structure is identical and one Seed call with seed=0
produces a byte-identical state in both runs.
So the turn1-state -> turn2 nondeterminism is a SEED effect, not the ordering
effect predicted, and the 'one of three varies' observation is explained by two
of the three empires having a research pick that is robust to the stream. This
falsifies lane AI1's 'every draw from the static generator returns 0', which
that lane had explicitly flagged as arithmetic rather than measurement.
Where the seed comes from is NOT established; the finding names the one hook
that would settle it and the six values it must reproduce.
VM140 left as found: the 8-file save set with its oracle bytes intact.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ARBgSooAfokKUy6wKUKEyZ
22 lines
793 B
Python
22 lines
793 B
Python
import json, sys
|
|
def val(x):
|
|
if isinstance(x, dict) and 't' in x:
|
|
v=x.get('v')
|
|
if x['t']=='struct' and isinstance(v,dict): return {k:val(w) for k,w in v.items()}
|
|
return v
|
|
return x
|
|
for p in sys.argv[1:]:
|
|
print("="*60, p)
|
|
n=0
|
|
for ln in open(p):
|
|
r=json.loads(ln)
|
|
if 'hook' not in r: continue
|
|
n+=1
|
|
a={x['n']:val(x) for x in (r.get('args') or [])}
|
|
s=r.get('side') or {}
|
|
after=val((s.get('rng') or {}).get('after'))
|
|
if r['hook'].endswith('RNG::Seed'):
|
|
print(f" #{n:2} Seed rng={a.get('rng')} seed=0x{a.get('seed',0):08x} strategic={a.get('is_strategic_generator')} after={after}")
|
|
else:
|
|
print(f" #{n:2} {r['hook']} {json.dumps(a)}")
|
|
print(f" ({n} records)")
|