# Phase C+11.1 — re-validation (HARD GATE) All gates listed in the original plan executed and passed. ## Gate 1 — Determinism (3× cold reproducible) 3 sequential `xrs-c11p1 check -n 50000000 --stable-digest` runs with `find ~/.local/share/xenia-rs/cache -mindepth 1 -delete` before each: | run | digest md5 | |---|---| | 1 | `ad4f74ee324fdedb0bfdd4cc4c6468e9` | | 2 | `ad4f74ee324fdedb0bfdd4cc4c6468e9` | | 3 | `ad4f74ee324fdedb0bfdd4cc4c6468e9` | PASS. New cold baseline. Differs from C+11's `b8fa0e0460359a4f660adb7605e053de` because the disp=1 + opts=0x7 cold probes now miss cleanly instead of producing spurious mkdir+SUCCESS — a behavior change is expected when correcting a behavior bug. Digest JSON: ``` { "instructions": 50000002, "imports": 40447, "unimpl": 0, "draws": 0, "swaps": 1, "unique_render_targets": 0, "shader_blobs_live": 0, "texture_cache_entries": 0 } ``` ## Gate 2 — Warm digest still deterministic `xrs-c11p1 check -n 50000000 --stable-digest` with the post-cold-run cache state already in place: `ad4f74ee324fdedb0bfdd4cc4c6468e9` — identical to cold. The C+11 era's cold-vs-warm gap (`b8fa0e04…` vs `cee0849a…`) has collapsed: with disp=1 returning NOT_FOUND cleanly, the first cache probe always misses and the rest of the boot path follows the same trajectory whether the cache is empty or warm. ## Gate 3 — XENIA_CACHE_WIPE=1 opt-out still works `XENIA_CACHE_WIPE=1 xrs-c11p1 check -n 50000000 --stable-digest`: `ad4f74ee324fdedb0bfdd4cc4c6468e9` — identical. The AUDIT-038 wipe mode is preserved; under the new fix it produces the same digest as the default-persistent mode (because the boot path is identical when the cache is empty in either case). ## Gate 4 — Phase B `image_loaded_sha256` unchanged `xrs-c11p1 exec --phase-b-snapshot-dir --phase-b-snapshot-and-exit`: ``` phase-b-snap/ours/config.json: "image_loaded_sha256": "ea8d160e9369328a5b922258a92113efb8d7ce3e1a5c12cc521e375985c91c18" ``` PASS — matches the prior Phase B baseline (`ea8d160e…`). The fix does not perturb the XEX image or its load layout. ## Gate 5 — Cargo tests `cargo test -p xenia-kernel --release`: **172 passed; 0 failed**. Baseline pre-C+11.1 was 170 tests. Net +2 tests: * `cache_open_directory_on_missing_path_returns_not_found` — pins the cold-boot disp=1 + opts=0x7 behavior across `access`, `ignore`, `recent`. Asserts NOT_FOUND status, handle=0, and no host side-effect. * `cache_disp5_after_disp1_miss_creates_file` — pins the two-call sequence canary actually executes (disp=1 NOT_FOUND → disp=5 FILE created). ## Gate 6 — Phase A cold-vs-cold matched-prefix table See [cold-vs-cold-baseline.md](cold-vs-cold-baseline.md). Headline main matched-prefix = **102404** (cold-vs-cold canonical; replaces the deprecated `+1521 to 103925` warm-asymmetric value). No regression on any of the 6 sister chains: | canary_tid | ours_tid | matched | first_divergence | regressed? | |---|---|---|---|---| | 6 | 1 | 102404 | 102404 | no (= prior cold value) | | 4 | 11 | 9 | — | no | | 7 | 2 | 29 | — | no | | 12 | 7 | 2 | 2 | no (pre-existing, unrelated) | | 14 | 9 | 39 | 39 | no (pre-existing, unrelated) | | 15 | 10 | 15 | — | no | ## Gate 7 — Cache layout matches canary structurally Direct `stat` comparison: ``` ~/.local/share/xenia-rs/cache/ ~/.local/share/Xenia/cache/ 69d8e45c/ (dir) 69d8e45c/ (dir) aab216c3/ (dir) aab216c3/ (dir) d4ea4615/ (dir) d4ea4615/ (dir) 87719002/ (dir, canary-only — not reached in 50M ours boot) access (file, 72 B) access (file, 240 B) recent (file, 48 B) recent (file, 48 B → 160 B over many warm boots) ``` The `access`/`recent` dir-vs-file bug is **resolved**. ours's file sizes are smaller because they reflect one boot's worth of manifest records; canary's larger sizes reflect many warm boots. Structural layout (file vs directory, no spurious `ignore/`) matches. ## Gate 8 — Build clean `cargo build --release` from `xenia-rs/` succeeds with no errors. One unrelated `dead_code` warning on `walk_committed_regions` in `phase_b_snapshot.rs` is pre-existing and unaffected. ## Snapshots * `canary-cache-pre-wipe.tar.gz` — canary's 23-file oracle, preserved for any future warm-cache experiments. * `canary-cache-post-cold.tar.gz` — identical to pre-wipe (canary did not populate its cache in the 120 s cold-run window). * `ours-cache-post-cold.tar.gz` — ours's post-cold cache state showing the file-not-dir layout the fix produces. ## Summary ALL 8 gates PASS. The fix is landable.