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 W — current ours state (Phase W.1 ground truth)
Captured 2026-05-19. -n 500000000 cold run with XENIA_CACHE_WIPE=1 --halt-on-deadlock --trace-handles --ctor-probe=0x825070F0.
Headline: wedge is STRUCTURALLY UNCHANGED from AUDIT-049/058/059/062/065
- tid=1 (main)
state=Blocked(WaitAny { handles: [4808] })= handle0x12c8=Thread(id=13, exit=None). PC0x824ac578(do_wait_single),r12 = 0x82173c64=sub_82173990+0x2D4(post-wait PC). Same join-on-tid=13 as AUDIT-049. - tid=13 (worker)
state=Blocked(WaitAny { handles: [4816] })= handle0x12d0=Event/Auto. PC0x824ac578,r12 = 0x821cb1e0=sub_821CB030+0x1B0(post-wait PC). Same wait site as AUDIT-059. sub_825070F0fires 0× (noCTOR-PROBEline in stderr). Still the same activation gate that has not budged across all of Phase C- Phase D.
Wedge handle identity drift (AUDIT-049 era → today)
| Audit | Wedge handle | Wedge thread | Site |
|---|---|---|---|
| AUDIT-049 | 0x1288 |
tid=13 | sub_821CB030+0x1AC |
| AUDIT-059 | 0x12AC |
tid=13 | sub_821CB030+0x1AC |
| AUDIT-062 | 0x12AC |
tid=13 | sub_821CB030+0x1AC |
| AUDIT-065 | 0x12AC |
tid=13 | sub_821CB030+0x1AC |
| Phase W | 0x12d0 |
tid=13 | sub_821CB030+0x1B0 |
Handle ID drift is expected per dossier caveat (allocator ordinals
differ between runs); the site, thread, and "Event/Auto created by
tid=13 itself via lr=0x824a9f6c src=NtCreateEvent" all match.
All <NO_SIGNALS_DESPITE_WAITS> handles at deadlock
handle=0x00001020 kind=Event/Manual waiters=1 signals=0 waits=1 wakes=0
handle=0x00001040 kind=Event/Auto waiters=0 signals=0 waits=32 wakes=0
handle=0x000010b0 kind=Event/Auto waiters=0 signals=0 waits=7 wakes=0
handle=0x000010ec kind=Event/Manual waiters=1 signals=0 waits=2 wakes=0
handle=0x000012d0 kind=Event/Auto waiters=1 signals=0 waits=1 wakes=0 ← THE WEDGE
handle=0x000012e4 kind=Event/Auto waiters=1 signals=0 waits=1 wakes=0
0x12d0 SID d5e23609d3948568 does NOT appear in any canary cold trace
(SID is per-tid per-PC and the run-to-run handle/PC numbering precludes
matching). This confirms reading-error #30: shared-global SID recipe is
NOT applicable to NtCreateEvent on a per-call basis — these are
worker-local Events, not process-global dispatchers.
Thread / event totals: the worker-cluster gap
| canary_tid | ours_tid | matched | canary_total | ours_total | first_div |
|---|---|---|---|---|---|
| 4 | 11 | 11 | 75,287 | 11 | — |
| 6 | 1 | 105,112 | 351,340 | 108,507 | 105,112 |
| 7 | 2 | 32 | 32 | 33 | — |
| 12 | 7 | 4 | 9,264 | 5 | 4 |
| 14 | 9 | 41 | 1,904,055 | 77 | 41 |
| 15 | 10 | 16 | 995,517 | 17 | — |
Canary tid=14 / tid=15 emit 1.9M / 995K events; ours's mapped tids emit 77 / 17. The worker cluster (cf. AUDIT-057 thread-gap) never wakes up in ours, exactly as documented at every audit since.