Files
xenia-rs/audit-runs/phase-c9-XamContentCreateEnumerator/broad-impact.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

2.9 KiB
Raw Blame History

Phase C+9 — broad impact

Resolved divergences (C+8 → C+9)

idx name C+8 ours C+9 ours canary status
102197 XamContentCreateEnumerator return_value 0 1317 (0x525) 1317 MATCH

New first divergence

idx name canary ours hypothesis
102404 NtQueryFullAttributesFile return_value 0 (STATUS_SUCCESS) 3221225524 (0xC0000034 STATUS_OBJECT_NAME_NOT_FOUND) VFS path lookup miss — file/dir exists on canary's pre-populated cache/HDD root but not ours's fresh VFS. AUDIT-052/054 sibling class.

Persisting divergences (different bug, hold)

  • tid=12 → 7 idx=2: KeWaitForSingleObject ret 258 vs 0 (held)
  • tid=14 → 9 idx=39: XAudio vs RtlEnterCriticalSection (held)

Coarse-counter movement

This is the first non-zero coarse digest delta since C+5 (imports: 40470 → 40465, -5). Interpretation: the return_value flip at idx=102197 routes the game into a different control-flow branch that calls 5 fewer import functions within 50M instructions. This is exactly the bull's-eye behavior we want — the fix has visible downstream effect.

draws=0/swaps=1 stable: still in the pre-renderer boot phase.

XAM call coverage delta

Pre-C+9: XamContentCreateEnumerator fired 1× with stub return. Post-C+9: XamContentCreateEnumerator fires 1× with X_ERROR_NO_SUCH_USER. Total XAM-content callsite count UNCHANGED (1 invocation in 50M).

Reading-error class

NO new class introduced. #28 (canary source supersedes NT-doc / plan annotations) re-applied with one extra rigor step: the plan's inline constant identity (0x525 = X_ERROR_NO_CONTENT) was WRONG — 0x525 is X_ERROR_NO_SUCH_USER. Lesson: verify constants from canary's xbox.h, not from the plan's natural-language descriptions. This is the same class of "trust the source not the framing" that #28 captures; logged here as a fresh data point.

Deferred-item interaction check

item touched?
Heap region (C+2) NO
Clock (Stage 2) NO
Audio host-pump (AUDIT-032/048) NO
KeSetEvent / KeResetEvent semantics NO
VFS cache persistence (AUDIT-052/054) NO (Phase C+10 may need to revisit)
xam_user_get_signin_state user0=1 model FLAGGED as internal inconsistency — separate fix, not landed
profile-manager model FLAGGED for future XAM-user-subsystem session

Internal inconsistency surfaced (NOT FIXED)

Ours's xam_user_get_signin_state (xam.rs:380-384) returns 1 for user_index == 0, but the C+9 fix says "no profile installed → 0x525 for user 0." When the game eventually calls XamUserGetSigninState(0), canary returns 0 (idx 107996 confirmed in canary.jsonl) while ours returns 1. This will become a Phase A first divergence in a future Phase C session — fix shape will be: xam_user_get_signin_state returns 0 unconditionally (mirror canary's "no profile manager" default).

Single-fix discipline: NOT landed in C+9.