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>
2.9 KiB
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:
KeWaitForSingleObjectret 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.