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>
This commit is contained in:
MechaCat02
2026-06-05 07:19:08 +02:00
parent acd1656753
commit ef93a4fa14
620 changed files with 108303 additions and 1 deletions

View File

@@ -0,0 +1,94 @@
# Phase C+22 — Cold-vs-cold verification
**Date:** 2026-05-26
**Mode:** Diff-tool only (engine unchanged).
## Methodology
- ours-cold jsonl: `/tmp/ours-boot-cold.jsonl` (pre-existing, 28.7 MB,
108,507 events on tid=1, 102,196 main-thread + worker noise). Captured
fresh before this session per the boot-state remediation harness.
Engine source unchanged — re-running ours-cold under this session's
diff_events.py would produce a byte-identical jsonl.
- canary jitter set: 3 archived cold runs `canary-jitter-{1,2,3}.jsonl`
(4.4 / 3.5 / 3.7 GB) from
`xenia-canary/build-cross/bin/Windows/Debug/`. These are the same
reference jitter set used in C+20, C+21, Phase D Stage 0..4 — known
to converge on the same logical boot up to the divergence-of-interest.
- tid map: `--tid-map 6=1` (canary main thread → ours main thread,
established in C+15-α auto_tid_map heuristic).
## Pre-C+22 baseline (run before changes)
```
canary-jitter-1.jsonl → matched=105,128
first divergence: payload.ctx_ptr
canary='0xbe56bb3c' ours='0x42453b3c'
at idx 105,128 (thread.create entry_pc=0x824cd458)
```
## Post-C+22 (3-jitter table)
| jitter | matched | first divergence at | first-divergence kind / payload |
|---|---|---|---|
| 1 | **105,138** | 105,138 | `kernel.return VdQueryVideoFlags`: canary=3 ours=0 |
| 2 | **105,138** | 105,138 | (same) |
| 3 | **105,138** | 105,138 | (same) |
Delta vs baseline: **+10 events** in main matched-prefix, on all three
jitters. The new first divergence (`VdQueryVideoFlags`) is genuine and
identical across all three jitters — confirming C+22 collapses the
ctx_ptr noise without over-suppressing.
## Absorber counters (sanity)
| jitter | floating_create (c/o) | floating_wait (c/o) |
|---|---|---|
| 1 | 0 / 0 | 1 / 0 |
| 2 | 0 / 0 | 0 / 0 |
| 3 | 1 / 0 | 3 / 0 |
Jitter-to-jitter variance in absorber counts is expected (scheduling-
jitter window). Matched-prefix is stable at 105,138 across all three,
confirming the canonicalization is robust to canary-side
shared-global event reordering.
## Sister chains
No sister chains exercised in the 105,128105,138 range. The 10
absorbed events are all on the main `tid=6 → tid=1` chain:
```
[105135] handle.create (sid different — already skipped)
[105135] thread.create (ctx_ptr CANONICALIZED v1.7)
[105136] kernel.return ExCreateThread
[105137] kernel.return KiApcNormalRoutineNop
[105137] import.call VdQueryVideoMode
[105138] kernel.call VdQueryVideoMode
[105138] kernel.return VdQueryVideoMode
[105139] import.call VdQueryVideoFlags
[105140] kernel.call VdQueryVideoFlags
[105141] kernel.return VdQueryVideoFlags ← NEW first divergence
```
(Per-jitter canary indices drift slightly; ours indices stable.)
## Digest reproducibility
ours engine source UNCHANGED — no rebuild needed. The pre-existing
ours-cold jsonl (md5 `ecbd5046dbc73113144c8583592359e7`) is the input
to the diff in all three jitter runs. Diff-tool output is purely
derivative; running the diff multiple times against the same inputs
produces byte-identical reports (modulo `host_ns` and dictionary
ordering in pre-context lists — both already accounted for by the
diff's stable sort).
## Conclusion
Phase C+22 advances main matched-prefix from 105,128 → 105,138 across
all three canary jitter cold runs (+10 events, +0.0095 % of canary
total). The next divergence is a real Vd-subsystem return-value
mismatch unrelated to host-heap allocator drift.
Engine UNCHANGED. Phase B `image_loaded_sha256` ε boundary UNCHANGED.
Tripstones 1, 2, 3, 4, 5, 6 honored.