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

136 lines
4.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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](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.