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>
This commit is contained in:
135
audit-runs/phase-c11-1-access-recent-fix/re-validation.md
Normal file
135
audit-runs/phase-c11-1-access-recent-fix/re-validation.md
Normal file
@@ -0,0 +1,135 @@
|
||||
# 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.
|
||||
Reference in New Issue
Block a user