Files
xenia-rs/audit-runs/phase-w-wedge-reattack/current-state.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

64 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 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] })` =
handle `0x12c8` = `Thread(id=13, exit=None)`. PC `0x824ac578`
(`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] })` =
handle `0x12d0` = `Event/Auto`. PC `0x824ac578`, `r12 = 0x821cb1e0`
= `sub_821CB030+0x1B0` (post-wait PC). Same wait site as AUDIT-059.
- **`sub_825070F0` fires 0×** (no `CTOR-PROBE` line 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.