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>
This commit is contained in:
MechaCat02
2026-06-05 07:19:08 +02:00
parent acd1656753
commit ef93a4fa14
620 changed files with 108303 additions and 1 deletions

View File

@@ -0,0 +1,55 @@
# 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