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>
67 lines
2.8 KiB
Markdown
67 lines
2.8 KiB
Markdown
# 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.
|