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>
71 lines
2.9 KiB
Markdown
71 lines
2.9 KiB
Markdown
# 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.
|