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:
111
audit-runs/phase-c2-MmAllocatePhysicalMemoryEx/re-validation.md
Normal file
111
audit-runs/phase-c2-MmAllocatePhysicalMemoryEx/re-validation.md
Normal file
@@ -0,0 +1,111 @@
|
||||
# Phase C+2 — re-validation
|
||||
|
||||
## Gate 1 — Determinism (cvar-OFF)
|
||||
|
||||
3 fresh runs of `xrs-phaseC2 check -n 50000000 --stable-digest --out …`:
|
||||
|
||||
| run | digest md5 |
|
||||
|-----|------------|
|
||||
| 1 | 608d8e8d293250698207a7d8fc0c18df |
|
||||
| 2 | 608d8e8d293250698207a7d8fc0c18df |
|
||||
| 3 | 608d8e8d293250698207a7d8fc0c18df |
|
||||
| Phase C+1 baseline | 608d8e8d293250698207a7d8fc0c18df |
|
||||
|
||||
**Result**: ✅ byte-identical to C+1 baseline. Expected: this session only
|
||||
modified `tools/diff-events/diff_events.py` (Python diff tool); zero ours
|
||||
engine code touched.
|
||||
|
||||
## Gate 2 — Phase B `image_canonical_sha256`
|
||||
|
||||
Not re-snapshotted. Inferred OK by Gate 1 (no image-loading or memory-
|
||||
layout code modified).
|
||||
|
||||
## Gate 3 — Phase A matched-prefix extension (THE KEY METRIC)
|
||||
|
||||
Re-ran the existing capture pair (canary from `phase-c-first-divergence/
|
||||
phase-a/canary.jsonl`; ours from `phase-c1-keQuerySystemTime/ours.jsonl`)
|
||||
through the upgraded diff tool. No fresh engine runs needed — diff tool
|
||||
change is comparison-side only.
|
||||
|
||||
| chain | C+1 matched (pre-canonicalize) | C+2 matched (post-canonicalize) | Δ |
|
||||
|-------|--------------------------------|--------------------------------|----|
|
||||
| canary tid=6 → ours tid=1 (main) | 161 | **102014** | **+101853** |
|
||||
| canary tid=4 → ours tid=11 | 5 | 5 | 0 |
|
||||
| canary tid=7 → ours tid=2 | 2 | 2 | 0 |
|
||||
| canary tid=12 → ours tid=7 | 2 | 2 | 0 |
|
||||
| canary tid=14 → ours tid=9 | 11 | 11 | 0 |
|
||||
| canary tid=15 → ours tid=10 | — (no div) | — (no div) | 0 |
|
||||
|
||||
**Main thread matched prefix: 161 → 102014. Gate 3 ✅** (strictly greater
|
||||
than 161, as required).
|
||||
|
||||
The new divergence at idx=102014 on tid=6→tid=1 is `RtlImageXexHeaderField`
|
||||
returning `805433576` (`0x3001F0E8`) in canary vs `0` in ours — the next
|
||||
Phase C+3 target. Off-thread divergences (tid=4/7/12/14) are unchanged by
|
||||
this fix because their divergences are not allocator-related.
|
||||
|
||||
## Gate 4 — Build
|
||||
|
||||
No engine build required (Python tool only). `python3 -c 'import
|
||||
xenia-rs.tools.diff-events.diff_events'` not applicable (script, not
|
||||
package). The tool runs end-to-end on three input pairs (validation
|
||||
checks below) without traceback.
|
||||
|
||||
## Gate 5 — Phase A determinism (emitter)
|
||||
|
||||
Emitter unchanged. The Phase A capture files used as input are byte-
|
||||
identical to those used in C+1 (no re-emit). Gate vacuous; recorded
|
||||
N/A.
|
||||
|
||||
## Gate 6 — Backward compatibility (diff-tool flag)
|
||||
|
||||
```
|
||||
python3 diff_events.py --no-canonicalize-allocators \
|
||||
--canary ...canary.jsonl --ours ...c1-ours.jsonl
|
||||
```
|
||||
|
||||
Result table:
|
||||
|
||||
| canary_tid | ours_tid | matched | canary_total | ours_total | first_divergence_at |
|
||||
|---|---|---|---|---|---|
|
||||
| 4 | 11 | 5 | 47573 | 9 | 5 |
|
||||
| 6 | 1 | 161 | 329948 | 108492 | 161 |
|
||||
| 7 | 2 | 2 | 29 | 33 | 2 |
|
||||
| 12 | 7 | 2 | 6689 | 3 | 2 |
|
||||
| 14 | 9 | 11 | 1371603 | 75 | 11 |
|
||||
| 15 | 10 | 15 | 863209 | 15 | — |
|
||||
|
||||
**Matches the C+1 pre-fix table byte-for-byte. ✅** The new flag reproduces
|
||||
the legacy behavior exactly.
|
||||
|
||||
## Gate 7 — Self-diff sanity (no false positive)
|
||||
|
||||
```
|
||||
python3 diff_events.py --validate-identical \
|
||||
--canary phase-a-diff-harness/canary-sanity.jsonl \
|
||||
--ours phase-a-diff-harness/canary-sanity.jsonl
|
||||
exit code: 0
|
||||
```
|
||||
|
||||
A stream diffed against itself reports zero divergences. The
|
||||
canonicalization is *idempotent under self-diff* — both sides assign the
|
||||
same ordinals on the same stream, so the sentinels match. ✅
|
||||
|
||||
```
|
||||
python3 diff_events.py --validate-identical \
|
||||
--canary phase-c1-keQuerySystemTime/ours.jsonl \
|
||||
--ours phase-c1-keQuerySystemTime/ours.jsonl
|
||||
exit code: 0
|
||||
```
|
||||
|
||||
## Summary
|
||||
|
||||
| gate | result |
|
||||
|---|---|
|
||||
| 1. cvar-OFF determinism (3 ours runs vs C+1 baseline) | ✅ all 4 = `608d8e8d…` |
|
||||
| 2. Phase B `image_canonical_sha256` | ✅ (inferred from gate 1) |
|
||||
| 3. Phase A main matched prefix > 161 | ✅ **161 → 102014** (+101853) |
|
||||
| 4. Build clean | ✅ (Python only) |
|
||||
| 5. Phase A determinism | ✅ (emitter unchanged; vacuous) |
|
||||
| 6. `--no-canonicalize-allocators` backward-compat | ✅ byte-identical to C+1 |
|
||||
| 7. Self-diff sanity | ✅ exit 0 both cases |
|
||||
Reference in New Issue
Block a user