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,66 @@
# Phase C+13 broad-impact assessment
## Resolved
| event | before | after |
|---|---|---|
| Main idx 103862 `NtCreateFile(game:\\dat\\files.tbl)` | ours=`0x00000000` (synth-success) / canary=`0xc0000034` | ours=`0xc0000034` matches canary bit-for-bit |
## Advanced
| metric | before | after | delta |
|---|---|---|---|
| Main cold-vs-cold matched prefix (canary tid=6 → ours tid=1) | 103,862 | 104,574 | **+712 events** |
| Stable digest `imports` | 40,447 | 40,390 | -57 |
| Stable digest `instructions` | 50,000,002 | 50,000,007 | +5 |
`imports -57` is the population of previously-masked missing-disc-file
probes: each one used to emit a synth-success kernel.call/return pair
plus an `import.call`, ours now emits just a NOT_FOUND kernel.return.
Net 57 import-call slots freed = ~28 distinct missing-file paths that
the boot validator now sees as NOT_FOUND.
## Persisted (sister chains, all unchanged)
| canary_tid | ours_tid | matched | notes |
|---|---|---|---|
| 4 | 11 | 9 | no divergence in compared events |
| 7 | 2 | 29 | no divergence in compared events |
| 12 | 7 | 2 | pre-existing KeWaitForSingleObject TIMEOUT/SUCCESS |
| 14 | 9 | 39 | pre-existing XAudio init divergence |
| 15 | 10 | 15 | no divergence in compared events |
No sister-chain regression. The fix is scoped to `open_vfs_file`'s
disc-path arm; sister tids don't touch this code path during their
captured windows.
## NEW (surfaced by the fix)
| location | observation |
|---|---|
| Main idx 104574 | Ordinal-of-call mismatch: canary does **two** sequential `RtlEnterCriticalSection` (104571, 104574); ours does one `Enter` then `Leave`. Likely an error-handling path in Sylpheed's boot validator that takes a nested lock on disc-file NOT_FOUND. |
This is the expected pattern: scoping the synth-empty surfaces the
code branch that handles missing disc files honestly. The new
divergence is at the next layer of the boot validator's error-path
logic and becomes the Phase C+14 target.
## Risk: did anything regress in non-cold scenarios?
- **Kernel unit tests**: 177 → 181 pass; no failures. The new
`nt_create_file_non_disc_prefix_missing_still_synthesizes` test
proves the legacy synth-empty path is preserved for non-disc
prefixes (i.e. writable system partitions).
- **Phase B image hash**: unchanged. The fix doesn't touch image
loading.
- **Lockstep goldens**: `--stable-digest` 3× determinism PASS; no
jitter introduced. The C+12 baseline digest was already a
stable-mode reference, so the new digest just becomes the C+13
baseline.
## Summary
One divergence Resolved (idx 103862). +712 events Advanced on the
main chain. Zero sister regressions. One NEW divergence at idx
104574 — a higher-quality target (error-handling path divergence)
than a synth-empty masked divergence.