Files
xenia-rs/audit-runs/phase-c22-rtl-enter-leave-104607/escalation-confirmed.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

7.7 KiB

Phase C+22 re-invocation — ESCALATION CONFIRMED (2026-05-22)

Decision

RE-CONFIRM the C+22 escalation landed 2026-05-18. No engine change, no diff-tool change. Class A (scheduler-determinism + post-wait state-mutation downstream effect) — same root cause as C+20, structurally parallel to C+14.

Phase 0 — Class E ruled out (verified today)

Both engines register RtlEnterCriticalSection and RtlLeaveCriticalSection symmetrically:

engine RtlEnterCriticalSection RtlLeaveCriticalSection
canary xboxkrnl_table.inc:307 ord 0x125 (293) kFunction shimmed xboxkrnl_table.inc:318 ord 0x130 (304) kFunction shimmed
ours exports.rs:169 register_export(Xboxkrnl, 0x0125, …, rtl_enter) exports.rs:177 register_export(Xboxkrnl, 0x0130, …, rtl_leave)

(Note: the prompt cited "ord 293" / "ord 304" decimal; the hex forms 0x125 / 0x130 are the actual table indices. They match the decimal values — no off-by-one.)

Class E ruled out — both export paths reach a real implementation in both engines.

State drift check vs prior C+22 session

  • xenia-rs HEAD: e6d43a2… (unchanged from prior C+22 session on 2026-05-18 — verified by git log -1).
  • exports.rs carries the Phase D Stage 3 contention-replay manifest in rtl_enter_critical_section (lines 3290-3396). This was already in place at the prior C+22 session per the Phase D Stage 3+4 memory entry. Default-mode behavior unchanged (manifest short-circuits when XENIA_CONTENTION_MANIFEST_PATH unset).
  • Working tree contains uncommitted canary-side instrumentation for AUDIT-068/069 and Iterate 2.A (per the index entries) — none of it touches RtlEnter/Leave or the post-wait branch.
  • xenia-canary RtlEnter/Leave shims unchanged (same ord lookup table file, same line numbers).

Cross-reference with C+14 + Phase D forensics

The Phase D D-extension memory entry already pinpoints the upstream root cause:

tid=1 wakes from notification-event wait → consults CS-protected tree at (CS 0x828f4838).r30+48 via helper 0x8245B1F8 find-or-insert → canary's tree has more entries because peer tid=5 had more wall-time to insert during the wait window → canary's "insert" path nested-Enter+Leaves; ours's "match" path early-exits.

That's exactly the C+14 single-CS wrapper at sub_8245B128 + the file-tracker singleton at 0x828F4838. The C+22 prompt's "file-tracker state divergence (F)" hypothesis is correct, and the Phase D D-extension absorber (LANDED 2026-05-18) is already the diff-tool-level band-aid that crosses reading-error #23 in spirit — it absorbed +439 events past the cap by folding the [Enter-block, Leave-block] pair as a nested-CS-cleanup absorber. Main is now at 105,046 matched-prefix per the Phase D D-extension entry (not the 104,607 from C+21 — the absorber advanced past the cap).

Reconciling 104,607 (prompt) vs 105,046 (Phase D D-ext)

The prompt frames today's target as "idx 104,607 cold-vs-cold first divergence." This was the C+21 / C+22 baseline. The Phase D D-extension (LANDED 2026-05-18, same date as prior C+22) shifted main to 105,046 via diff-tool absorber. Both can be true: the prompt cites the pre-D-extension cap; today's methodologically-correct measurement uses the post-D-extension diff tool.

Without re-running cold-vs-cold (cost-benefit unfavorable given no engine drift), the existing Phase D D-extension result stands as the most recent matched-prefix value. Today's invocation does not advance it.

Authorized fix shape (or escalation rationale)

Escalation. Per the prompt's tripstone 5: "if this turns out to be the same sub_8245B128 file-tracker issue, escalate cleanly. Don't push through." That tripstone fires today:

  1. Class E ruled out (Phase 0 verification above).
  2. Class A established by prior 4-canary-sample evidence (jitter-1/2/3 + fresh c22, all E E L L nested pattern in canary; ours E L NtClose simple-release).
  3. Root cause is the C+14 / Phase D sub_8245B128 chain reading the file-tracker tree at (CS 0x828f4838).r30+48, with peer tid=5 timing-dependent inserts.
  4. Authorized scope explicitly EXCLUDES "scheduler determinism" refactor, which is what would be required to fix at root.
  5. Diff-tool absorber for this region ALREADY LANDED (Phase D D-extension, +439 events past cap).

No engine modification within scope can advance further. The prompt's "quick fix ≤50 LOC" path is not available; the "C+14-class deferred" path is the correct outcome.

Per-chain delta table

No fresh cold-vs-cold run executed in today's invocation (cost- benefit: engine state for this subsystem is unchanged from 2026-05-18 C+22, which already executed the full protocol). Per Phase D D-extension's archived measurement:

chain C+21 C+22 (prior) Phase D D-ext today (no run)
canary tid=6 → ours tid=1 main 104,607 104,607 105,046 105,046
canary tid=4 → ours tid=11 11 11 11 11
canary tid=7 → ours tid=2 32 32 32 32
canary tid=12 → ours tid=7 3 3 4 (per index) 4
canary tid=14 → ours tid=9 41 41 41 41
canary tid=15 → ours tid=10 16 16 16 16

Jitter verification

Inherited from prior C+22 session (canary-jitter-1/2/3 + fresh c22 cold): all 4 canary samples agree on the E E L L nested pattern post-wait. Re-verification today is not warranted — canary table file is unchanged and the canary-jitter jsonls are archived intact.

Gates (escalation-mode)

gate result
Phase 0 — Class E ruled out PASS
xenia-rs HEAD unchanged for this subsys PASS
canary table file unchanged PASS
Phase B image_canonical_sha256 UNCHANGED ea8d160e…
Prior escalation evidence still valid PASS
Tripstone 5 (C+14-class) fires correctly PASS
Canary caches untouched today PASS (no run)
--mute=true discipline N/A (no run)

Files

  • This file: confirmation of prior escalation.
  • Prior C+22 session artifacts: xenia-rs/audit-runs/phase-c22-rtl-enter-leave-control-flow/
    • investigation.md (263 lines)
    • escalation.md (123 lines)
    • cold-vs-cold-result.md (96 lines)
    • re-validation.md
    • diff-cold-vs-cold.md
    • canary-binary-cache-pre-wipe.tar.gz + canary-xdg-cache-pre-wipe.tar.gz
  • Phase D D-extension landed-state: see memory index entry phase_d_d_extension_absorber_2026_05_18.

Next target

Per the prior C+22 escalation's next-target recommendation:

  1. C+23 = D-NEW-2 (LANDED 2026-05-18 per memory entry project_phase_c23_kewait_timeout_addis_signext_2026_05_18).
  2. C+24 = D-NEW-3 (XAudio voice-category divergence on tid=14→9 sister chain).
  3. Parallel scheduler-determinism track — multi-session refactor. Memory entry project_scheduler_determinism_plan_2026_05_18 documents the plan. Phase D Stages 0-4 already implemented the replay-track infrastructure; Phase D D-extension landed the diff-tool absorber that crossed the cap.

The Phase C C+22 thread is COMPLETE at the escalation boundary; advancement requires the parallel scheduler track.