Files
xenia-rs/audit-runs/phase-c11-1-access-recent-fix/re-validation.md
MechaCat02 ef93a4fa14 handoff: VSync/event-wedge fixes + iterate 2.A–2.BC research notes
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>
2026-06-05 07:19:08 +02:00

4.8 KiB
Raw Blame History

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