Source changes (dormant parity infra, retained from iterate 2.AI/2.AO): - xenia-kernel/exports.rs: nt_create_event manual_reset polarity + related event wiring - xenia-gpu/mmio_region.rs: D1MODE_VBLANK_VLINE_STATUS hardcode parity Also lands the audit-runs/ analysis notes (.md/.txt/.json digests) for the iterate 2.x VSync/0x10e8/0x1004 wedge investigation. Raw trace dumps (.jsonl/.gz/.csv/.stdout) and agent worktrees (.claude/) are gitignored as regenerable local artifacts — see memory + HANDOFF for the running findings. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
3.1 KiB
Phase C+25 — Re-validation
Gates
| # | Gate | Status | Evidence |
|---|---|---|---|
| 1 | Build clean | ✅ | cargo build --release succeeds; only pre-existing dead-code warning. |
| 2 | Phase B image_canonical_sha256 unchanged |
✅ | Zero engine LOC modified → Phase B hash is ea8d160e… by construction. |
| 3 | Engine determinism (3× cold) | ✅ | c25-digest-rep{1,2,3}.json all identical: instructions=50000007 imports=40390 unimpl=0 draws=0 swaps=1 unique_render_targets=0. |
| 4 | Main matched-prefix advances past 105,112 | ✅ | 105,112 → 105,128 (+16) — see diff-postfix.md. |
| 5 | Sister chains preserved | ✅ | 4→11=11, 7→2=32, 12→7=4, 14→9=41, 15→10=16 — all unchanged vs Phase W. |
| 6 | Kernel tests pass | ✅ | xenia-kernel: 217 passed, 0 failed (unchanged baseline). |
| 7 | Diff-tool unit tests pass | ✅ | 39 baseline + 4 new C+25 tests = 43 PASS. |
| 8 | --no-canonicalize-allocators backward-compat |
✅ | Flag unchanged; raw-VA comparison still available. |
| 9 | Progression metric — PRIMARY gate | ⚠️ NEGATIVE | swaps=1, draws=0, unique_render_targets=0. Wedge persists per Phase W finding. |
Per-chain matched-prefix delta
| chain | Phase W (pre) | C+25 (post) | Δ |
|---|---|---|---|
| canary tid=6 → ours tid=1 (main) | 105,112 | 105,128 | +16 |
| canary tid=4 → ours tid=11 | 11 | 11 | 0 |
| canary tid=7 → ours tid=2 | 32 | 32 | 0 |
| canary tid=12 → ours tid=7 | 4 | 4 | 0 |
| canary tid=14 → ours tid=9 | 41 | 41 | 0 |
| canary tid=15 → ours tid=10 | 16 | 16 | 0 |
Zero regressions on any chain.
Progression metric (PRIMARY)
3 cold reproducible runs:
| field | rep1 | rep2 | rep3 | vs Phase W |
|---|---|---|---|---|
| instructions | 50000007 | 50000007 | 50000007 | unchanged |
| imports | 40390 | 40390 | 40390 | unchanged |
| unimpl | 0 | 0 | 0 | unchanged |
| draws | 0 | 0 | 0 | unchanged |
| swaps | 1 | 1 | 1 | unchanged |
| unique_render_targets | 0 | 0 | 0 | unchanged |
| shader_blobs_live | 0 | 0 | 0 | unchanged |
| texture_cache_entries | 0 | 0 | 0 | unchanged |
Verdict: matched-prefix advanced (+16) but the wedge is structurally unchanged. This is the expected outcome per cascade-prediction gate E (~10% probability of movement). The C+25 fix is a diff-tool canonicalization, not an engine behavior change; the engine's boot trajectory is byte-identical to Phase W (digest fields prove it).
The next divergence at idx 105,128 (thread.create.ctx_ptr: canary
0xbe56bb3c in vC0… heap region vs ours 0x42453b3c in unified heap) is
another deferred-Path-β symptom — a heap-VA leaking into a non-return
payload field. Canonicalization could be extended to cover specific payload
fields too, but that's a follow-up scope decision.
Determinism note
The engine binary is xrs-c25 (renamed from xrs-verify-c23; built from the
same source tree, which is unchanged by C+25 since the C+25 diff is
Python-only). All 3 cold runs used XENIA_CACHE_WIPE=1 and produced
identical digests, confirming the engine's cold-boot trajectory is the same
as Phase W's 73e99d6002…-class run.