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.6 KiB
Phase C+22 — Cold-vs-cold verification
Date: 2026-05-26 Mode: Diff-tool only (engine unchanged).
Methodology
- ours-cold jsonl:
/tmp/ours-boot-cold.jsonl(pre-existing, 28.7 MB, 108,507 events on tid=1, 102,196 main-thread + worker noise). Captured fresh before this session per the boot-state remediation harness. Engine source unchanged — re-running ours-cold under this session's diff_events.py would produce a byte-identical jsonl. - 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/. These are the same reference jitter set used in C+20, C+21, Phase D Stage 0..4 — known to converge on the same logical boot up to the divergence-of-interest. - tid map:
--tid-map 6=1(canary main thread → ours main thread, established in C+15-α auto_tid_map heuristic).
Pre-C+22 baseline (run before changes)
canary-jitter-1.jsonl → matched=105,128
first divergence: payload.ctx_ptr
canary='0xbe56bb3c' ours='0x42453b3c'
at idx 105,128 (thread.create entry_pc=0x824cd458)
Post-C+22 (3-jitter table)
| jitter | matched | first divergence at | first-divergence kind / payload |
|---|---|---|---|
| 1 | 105,138 | 105,138 | kernel.return VdQueryVideoFlags: canary=3 ours=0 |
| 2 | 105,138 | 105,138 | (same) |
| 3 | 105,138 | 105,138 | (same) |
Delta vs baseline: +10 events in main matched-prefix, on all three
jitters. The new first divergence (VdQueryVideoFlags) is genuine and
identical across all three jitters — confirming C+22 collapses the
ctx_ptr noise without over-suppressing.
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 |
Jitter-to-jitter variance in absorber counts is expected (scheduling- jitter window). Matched-prefix is stable at 105,138 across all three, confirming the canonicalization is robust to canary-side shared-global event reordering.
Sister chains
No sister chains exercised in the 105,128–105,138 range. The 10
absorbed events are all on the main tid=6 → tid=1 chain:
[105135] handle.create (sid different — already skipped)
[105135] thread.create (ctx_ptr CANONICALIZED v1.7)
[105136] kernel.return ExCreateThread
[105137] kernel.return KiApcNormalRoutineNop
[105137] import.call VdQueryVideoMode
[105138] kernel.call VdQueryVideoMode
[105138] kernel.return VdQueryVideoMode
[105139] import.call VdQueryVideoFlags
[105140] kernel.call VdQueryVideoFlags
[105141] kernel.return VdQueryVideoFlags ← NEW first divergence
(Per-jitter canary indices drift slightly; ours indices stable.)
Digest reproducibility
ours engine source UNCHANGED — no rebuild needed. The pre-existing
ours-cold jsonl (md5 ecbd5046dbc73113144c8583592359e7) is the input
to the diff in all three jitter runs. Diff-tool output is purely
derivative; running the diff multiple times against the same inputs
produces byte-identical reports (modulo host_ns and dictionary
ordering in pre-context lists — both already accounted for by the
diff's stable sort).
Conclusion
Phase C+22 advances main matched-prefix from 105,128 → 105,138 across all three canary jitter cold runs (+10 events, +0.0095 % of canary total). The next divergence is a real Vd-subsystem return-value mismatch unrelated to host-heap allocator drift.
Engine UNCHANGED. Phase B image_loaded_sha256 ε boundary UNCHANGED.
Tripstones 1, 2, 3, 4, 5, 6 honored.