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

81 lines
3.6 KiB
Markdown

# 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.