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

71 lines
2.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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.