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>
3.2 KiB
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 underXENIA_CACHE_WIPE=1with the freshly builtxrs-c23binary (release, post-fix). - canary jitter set: 3 archived cold runs
canary-jitter-{1,2,3}.jsonl(4.4 / 3.5 / 3.7 GB) fromxenia-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,138–105,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.