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.9 KiB
Phase C+2 — re-validation
Gate 1 — Determinism (cvar-OFF)
3 fresh runs of xrs-phaseC2 check -n 50000000 --stable-digest --out …:
| run | digest md5 |
|---|---|
| 1 | 608d8e8d293250698207a7d8fc0c18df |
| 2 | 608d8e8d293250698207a7d8fc0c18df |
| 3 | 608d8e8d293250698207a7d8fc0c18df |
| Phase C+1 baseline | 608d8e8d293250698207a7d8fc0c18df |
Result: ✅ byte-identical to C+1 baseline. Expected: this session only
modified tools/diff-events/diff_events.py (Python diff tool); zero ours
engine code touched.
Gate 2 — Phase B image_canonical_sha256
Not re-snapshotted. Inferred OK by Gate 1 (no image-loading or memory- layout code modified).
Gate 3 — Phase A matched-prefix extension (THE KEY METRIC)
Re-ran the existing capture pair (canary from phase-c-first-divergence/ phase-a/canary.jsonl; ours from phase-c1-keQuerySystemTime/ours.jsonl)
through the upgraded diff tool. No fresh engine runs needed — diff tool
change is comparison-side only.
| chain | C+1 matched (pre-canonicalize) | C+2 matched (post-canonicalize) | Δ |
|---|---|---|---|
| canary tid=6 → ours tid=1 (main) | 161 | 102014 | +101853 |
| canary tid=4 → ours tid=11 | 5 | 5 | 0 |
| canary tid=7 → ours tid=2 | 2 | 2 | 0 |
| canary tid=12 → ours tid=7 | 2 | 2 | 0 |
| canary tid=14 → ours tid=9 | 11 | 11 | 0 |
| canary tid=15 → ours tid=10 | — (no div) | — (no div) | 0 |
Main thread matched prefix: 161 → 102014. Gate 3 ✅ (strictly greater than 161, as required).
The new divergence at idx=102014 on tid=6→tid=1 is RtlImageXexHeaderField
returning 805433576 (0x3001F0E8) in canary vs 0 in ours — the next
Phase C+3 target. Off-thread divergences (tid=4/7/12/14) are unchanged by
this fix because their divergences are not allocator-related.
Gate 4 — Build
No engine build required (Python tool only). python3 -c 'import xenia-rs.tools.diff-events.diff_events' not applicable (script, not
package). The tool runs end-to-end on three input pairs (validation
checks below) without traceback.
Gate 5 — Phase A determinism (emitter)
Emitter unchanged. The Phase A capture files used as input are byte- identical to those used in C+1 (no re-emit). Gate vacuous; recorded N/A.
Gate 6 — Backward compatibility (diff-tool flag)
python3 diff_events.py --no-canonicalize-allocators \
--canary ...canary.jsonl --ours ...c1-ours.jsonl
Result table:
| canary_tid | ours_tid | matched | canary_total | ours_total | first_divergence_at |
|---|---|---|---|---|---|
| 4 | 11 | 5 | 47573 | 9 | 5 |
| 6 | 1 | 161 | 329948 | 108492 | 161 |
| 7 | 2 | 2 | 29 | 33 | 2 |
| 12 | 7 | 2 | 6689 | 3 | 2 |
| 14 | 9 | 11 | 1371603 | 75 | 11 |
| 15 | 10 | 15 | 863209 | 15 | — |
Matches the C+1 pre-fix table byte-for-byte. ✅ The new flag reproduces the legacy behavior exactly.
Gate 7 — Self-diff sanity (no false positive)
python3 diff_events.py --validate-identical \
--canary phase-a-diff-harness/canary-sanity.jsonl \
--ours phase-a-diff-harness/canary-sanity.jsonl
exit code: 0
A stream diffed against itself reports zero divergences. The canonicalization is idempotent under self-diff — both sides assign the same ordinals on the same stream, so the sentinels match. ✅
python3 diff_events.py --validate-identical \
--canary phase-c1-keQuerySystemTime/ours.jsonl \
--ours phase-c1-keQuerySystemTime/ours.jsonl
exit code: 0
Summary
| gate | result |
|---|---|
| 1. cvar-OFF determinism (3 ours runs vs C+1 baseline) | ✅ all 4 = 608d8e8d… |
2. Phase B image_canonical_sha256 |
✅ (inferred from gate 1) |
| 3. Phase A main matched prefix > 161 | ✅ 161 → 102014 (+101853) |
| 4. Build clean | ✅ (Python only) |
| 5. Phase A determinism | ✅ (emitter unchanged; vacuous) |
6. --no-canonicalize-allocators backward-compat |
✅ byte-identical to C+1 |
| 7. Self-diff sanity | ✅ exit 0 both cases |