Files
xenia-rs/audit-runs/phase-c22-rtl-enter-leave-control-flow/re-validation.md
MechaCat02 ef93a4fa14 handoff: VSync/event-wedge fixes + iterate 2.A–2.BC research notes
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>
2026-06-05 07:19:08 +02:00

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.

  1. ✓ Backed up both canary cache locations (xenia-canary/build-cross/bin/Windows/Debug/cache/ and ~/.local/share/Xenia/cache/) to tarballs.
  2. ✓ Wiped both canary caches + ours's (~/.local/share/xenia-rs/cache/).
  3. ✓ Cold-ran ours (50M instructions) against the .iso path — NOT the loose default.xex (per new reading-error #34).
  4. ✓ Cold-ran canary (90s timeout) against the .iso path with --mute=true.
  5. ✓ 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).
  6. ✓ Ran diff_events.py with full tid map 6=1,7=2,4=11,12=7,14=9,15=10.
  7. ✓ 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 7ce3e1a5c12cc521e375985c91c18 preserved.

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.