# 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,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.