Files
xenia-rs/audit-runs/phase-c8-keResetEvent/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

2.8 KiB

Phase C+8 — KeResetEvent re-validation

Gate matrix

# gate result
1 cvar-OFF determinism 50M (3 runs) PASS — all 3 = c6d895829b4611964978990ae1cb8a6a (unchanged from C+7 baseline; coarse 50M stable-digest fields don't yet see the post-102164 trajectory)
2 Phase B image_loaded_sha256 PASS — ea8d160e9369328a5b922258a92113efb8d7ce3e1a5c12cc521e375985c91c18 (matches baseline; image_canonical_sha256 computed at diff-time depends only on the XEX loader which is untouched, so still 62c51908...)
3 Phase A main chain matched-prefix > 102164 PASS — 102197 (+33 from 102164)
3b tid=4 -> 11 unchanged PASS — 9 (no regression)
3c tid=7 -> 2 unchanged PASS — 29 (no regression)
3d tid=12 -> 7 unchanged PASS — 2 (no regression)
3e tid=14 -> 9 unchanged PASS — 39 (no regression)
3f tid=15 -> 10 unchanged PASS — 15 (no regression)
4 Build clean PASS (1 unrelated walk_committed_regions dead-code warning, pre-existing)
5 Phase A emitter determinism (2 runs) PASS — both deterministic-fields md5 = 9135e369547111096f2c6d2be130dbb1
6 Unit tests PASS — 156 -> 160 (+4 new, 0 regressions)

Stable-digest comparison

Baseline (C+7 XamTaskCloseHandle): digest 50M c6d895829b4611964978990ae1cb8a6a. Post C+8 KeResetEvent: identical. The two changes (return value at 102164, downstream events) sit inside the matched window and don't yet move coarse counters (instructions=50M, imports=40470, unimpl=0, draws=0, swaps=1, unique_render_targets=0, shader_blobs_live=0, texture_cache_entries=0). This is the same coarseness pattern observed in C+7-precursor.

Phase A determinism

ours.jsonl (run 1) det-fields md5: 9135e369547111096f2c6d2be130dbb1 ours-determ.jsonl (run 2) : 9135e369547111096f2c6d2be130dbb1

Byte-identical on deterministic fields. New --phase-a det baseline (9135e369...), replacing C+7's eca3ac9a... baseline. Change is the return_value flip at idx=102164 (0 -> 1) cascading into a different event sequence inside the matched window after 102164.

Per-chain summary

chain C+7 XamTaskCloseHandle C+8 KeResetEvent delta
canary tid=6 -> ours tid=1 (main) 102164 102197 +33
canary tid=4 -> ours tid=11 9 9 0 (sister at end of ours window)
canary tid=7 -> ours tid=2 29 29 0 (sister at end of ours window)
canary tid=12 -> ours tid=7 2 2 0 (different bug: KeWaitForSingleObject ret 258 vs 0)
canary tid=14 -> ours tid=9 39 39 0 (different bug: XAudio vs RtlEnterCS)
canary tid=15 -> ours tid=10 15 15 0

All gates pass. No regressions.

Next target

XamContentCreateEnumerator at tid=6->1 idx=102197:

  • canary return_value=1317 (0x525 = X_ERROR_NO_CONTENT)
  • ours return_value=0