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.6 KiB
3.6 KiB
Phase C+22 re-validation (2026-05-18)
Protocol followed
Cold-vs-cold per reading-error #31 + #32 + #33 + the new #34.
- ✓ Backed up both canary cache locations
(
xenia-canary/build-cross/bin/Windows/Debug/cache/and~/.local/share/Xenia/cache/) to tarballs. - ✓ Wiped both canary caches + ours's
(
~/.local/share/xenia-rs/cache/). - ✓ Cold-ran ours (50M instructions) against the
.isopath — NOT the loosedefault.xex(per new reading-error #34). - ✓ Cold-ran canary (90s timeout) against the
.isopath with--mute=true. - ✓ Truncated canary log to first 250k events per tid (keeping ALL tids, NOT only tid=6 — needed for the C+18 / C+21 cross-tid shared-global heuristic).
- ✓ Ran
diff_events.pywith full tid map6=1,7=2,4=11,12=7,14=9,15=10. - ✓ Restored both canary cache backups.
Determinism check
- ours-cold byte-identical to C+19 archive (
audit-runs/ phase-c19-NtDuplicateObject-handle-create/ours-cold.jsonl): 121,569 events match post-normalization (host_ns and guest_cycle excluded). Reproduces deterministically. - No new engine source changes, so digest unchanged. Phase B
image_loaded_sha256 = ea8d160e9369328a5b922258a92113efb8d 7ce3e1a5c12cc521e375985c91c18preserved.
Gate matrix (escalation mode)
| gate | result |
|---|---|
| Engine source unchanged | PASS |
| Diff-tool source unchanged | PASS |
| Phase A schema version 1 unchanged | PASS |
| ours-cold byte-equivalent to C+19 archive | PASS (121,569 ev) |
| Main matched-prefix preserved at C+21 | PASS (104,607) |
| Sister chains preserved (11/32/3/41/16) | PASS |
| C+21 absorber engaged (validation) | PASS (2/0 wait) |
| C+18 absorber engaged (validation) | PASS (1/0 create) |
| Phase B image hash preserved | PASS |
| Canary caches restored | PASS |
| Reading-error #34 documented + reproducible | PASS |
| Tests count (no change) | 204 (unchanged) |
What changed in the diff-tool report compared to C+21 baseline
NOTHING substantive. The numbers are identical:
| chain | C+21 (jitter-1) | C+22 (fresh c22) |
|---|---|---|
| tid=6→1 | 104,607 | 104,607 |
| tid=4→11 | 11 | 11 |
| tid=7→2 | 32 | 32 |
| tid=12→7 | 3 | 3 |
| tid=14→9 | 41 | 41 |
| tid=15→10 | 16 | 16 |
| main floating_create (c/o) | 0 / 0 | 1 / 0 |
| main floating_wait (c/o) | 1 / 0 | 2 / 0 |
The floating counts vary across canary cold samples (different host-scheduler interleavings emit the wait.begin in different counts and at different indices) but the matched-prefix is constant — this is the C+21 fix working as designed.
Outcome
- C+22 = ESCALATION (no engine change).
- Cold-vs-cold environment is healthy and reproducible.
- C+21 absorber works correctly under varying contention.
- Reading-error #34 added as a methodology guard for future cold-vs-cold runs.
- Next-target list updated: C+23 = D-NEW-2 (independent ε-class), C+24 = D-NEW-3 (XAudio), parallel scheduler- determinism track.