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>
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-rsHEAD:e6d43a2…(unchanged from prior C+22 session on 2026-05-18 — verified bygit log -1).exports.rscarries the Phase D Stage 3 contention-replay manifest inrtl_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 whenXENIA_CONTENTION_MANIFEST_PATHunset).- 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+48via helper0x8245B1F8find-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:
- Class E ruled out (Phase 0 verification above).
- Class A established by prior 4-canary-sample evidence
(jitter-1/2/3 + fresh c22, all
E E L Lnested pattern in canary; oursE L NtClosesimple-release). - Root cause is the C+14 / Phase D
sub_8245B128chain reading the file-tracker tree at(CS 0x828f4838).r30+48, with peer tid=5 timing-dependent inserts. - Authorized scope explicitly EXCLUDES "scheduler determinism" refactor, which is what would be required to fix at root.
- 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.mddiff-cold-vs-cold.mdcanary-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:
- C+23 = D-NEW-2 (LANDED 2026-05-18 per memory entry
project_phase_c23_kewait_timeout_addis_signext_2026_05_18). - C+24 = D-NEW-3 (XAudio voice-category divergence on tid=14→9 sister chain).
- Parallel scheduler-determinism track — multi-session
refactor. Memory entry
project_scheduler_determinism_plan_2026_05_18documents 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.