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,97 @@
# Phase C+23 — Cold-vs-cold verification
**Date:** 2026-05-26
**Mode:** Engine modified (`vd_query_video_flags` constant return).
Cold-vs-cold protocol: fresh `xrs-c23` cold runs vs archived canary
jitter set.
## Methodology
- ours-cold jsonls: `/tmp/ours-c23-vd-cold-{1,2,3}.jsonl` (28.7 MB
each, 108,507 events on tid=1). Captured under
`XENIA_CACHE_WIPE=1` with the freshly built `xrs-c23` binary
(release, post-fix).
- canary jitter set: 3 archived cold runs `canary-jitter-{1,2,3}.jsonl`
(4.4 / 3.5 / 3.7 GB) from
`xenia-canary/build-cross/bin/Windows/Debug/`. Same reference
jitter set used in C+20, C+21, C+22, Phase D Stage 0..4.
- tid map: `--tid-map 6=1` (canary main thread → ours main thread).
## Pre-C+23 baseline (post-C+22)
```
matched=105,138 across all 3 jitters
first divergence: kernel.return VdQueryVideoFlags
canary=3 ours=0
at idx 105,138 (tid=6→1)
```
## Post-C+23 (3-jitter table)
| jitter | matched | first divergence at | first-divergence kind / payload |
|---|---|---|---|
| 1 | **105,286** | 105,286 | `import.call VdGetCurrentDisplayGamma` (canary) vs `import.call KeAcquireSpinLockAtRaisedIrql` (ours) |
| 2 | **105,286** | 105,286 | (same) |
| 3 | **105,286** | 105,286 | (same) |
Delta vs baseline: **+148 events** in main matched-prefix on all
three jitters. The new first divergence (`VdGetCurrentDisplayGamma`
vs `KeAcquireSpinLockAtRaisedIrql`) is genuine and identical across
all three jitters.
## Absorber counters (sanity)
| jitter | floating_create (c/o) | floating_wait (c/o) |
|---|---|---|
| 1 | 0 / 0 | 1 / 0 |
| 2 | 0 / 0 | 0 / 0 |
| 3 | 1 / 0 | 3 / 0 |
Within the expected scheduling-jitter window. Matched-prefix
stable at 105,286 across all three.
## Sister chains
No sister chain regressions: the diff report lists only the main
`tid=6 → tid=1` chain (no sister chains exercised in the new
window). All previously matched sister chains
(11, 32, 4, 41, 16) remain unaffected because they fire outside
the 105,138105,286 window.
## Determinism (3 cold runs)
| run | md5 | matched-prefix vs jitter-1 | ours_total |
|---|---|---|---|
| cold-1 | `4e2e781ff0609f3a0a08f573dee4be4e` | 105,286 | 108,507 |
| cold-2 | `b195d82a1b61e87d6f54a2ac2b3e091b` | 105,286 | 108,507 |
| cold-3 | `e6b94d4dc151007c924b81bbc5c9faf5` | 105,286 | 108,507 |
The byte-level md5 differs (host_ns/guest_cycle wall-time jitter,
expected) but the logical semantic state — matched-prefix,
ours_total, first-divergence index, divergent payloads — is
bit-identical across all 3 runs.
New cold baseline digest (representative cold-1):
**`4e2e781ff0609f3a0a08f573dee4be4e`**.
## Phase B `image_canonical_sha256`
Pinned hash `ea8d160e…` UNCHANGED. No XEX loader changes; only
kernel export logic modified.
## Test suite
xenia-kernel: **226 PASS** (was 224 + 2 new).
## Conclusion
Phase C+23 advances main matched-prefix from 105,138 → 105,286
across all three canary jitter cold runs (+148 events,
+0.0311% of canary total). The next divergence is a real
post-VdSwap control-flow mismatch unrelated to video flags.
Engine MODIFIED (~50 LOC: 1 registration edit + 6 LOC function
body + 40 LOC tests). Diff tool UNCHANGED. Phase B
`image_loaded_sha256` ε class boundary UNCHANGED.
Tripstones 1, 2, 3, 4, 5, 6 honored.