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>
3.4 KiB
Cold-vs-cold result — Phase C+13 (2026-05-14)
| canary_tid | ours_tid | matched | first_divergence | event-kind at divergence |
|---|---|---|---|---|
| 6 | 1 | 104574 | 104574 | import.call: canary=RtlEnterCriticalSection (ord 293) / ours=RtlLeaveCriticalSection (ord 304) — NEW divergence, surfaced by C+13 fix |
| 4 | 11 | 9 | — | no divergence in 9 events — unchanged from C+12 |
| 7 | 2 | 29 | — | no divergence in 29 events — unchanged from C+12 |
| 12 | 7 | 2 | 2 | pre-existing KeWaitForSingleObject TIMEOUT/SUCCESS — unchanged |
| 14 | 9 | 39 | 39 | pre-existing XAudio init — unchanged |
| 15 | 10 | 15 | — | no divergence in 15 events — unchanged |
Main matched-prefix advance: +712 events (103,862 → 104,574).
New cold digest baseline
e1dfcb1559f987b35012a7f2dc6d93f5 (was ad4f74ee324fdedb0bfdd4cc4c6468e9).
Stable-counter delta vs C+12 (digest-cold-stable-1.json):
instructions: 50000002 → 50000007 (+5)
imports: 40447 → 40390 (-57)
unimpl: 0 → 0
draws: 0 → 0
swaps: 1 → 1
unique_render_targets: 0 → 0
shader_blobs_live: 0 → 0
texture_cache_entries: 0 → 0
The imports drop is the expected signature of the fix:
where ours previously synth-empty'd missing disc paths
(emitting an extra kernel.call/return pair), it now returns
NOT_FOUND inline. The net imports delta (-57) suggests roughly
~57 missing-disc-file probes per cold boot were previously
masked.
Phase B image_loaded_sha256
ea8d160e9369328a5b922258a92113efb8d7ce3e1a5c12cc521e375985c91c18
(unchanged from C+12 / C+11.1 / C+11 — the engine fix is observation-
only on the loaded image bytes).
Verification of the divergence resolution at idx 103862
Ours (post-fix) emission at idx 103862:
{
"kind": "kernel.return",
"tid": 1,
"tid_event_idx": 103862,
"payload": {
"name": "NtCreateFile",
"return_value": 18446744072635809844,
"status": "0xc0000034",
"side_effects": []
}
}
Canary (oracle) emission at idx 103862:
{
"kind": "kernel.return",
"tid": 6,
"tid_event_idx": 103862,
"payload": {
"name": "NtCreateFile",
"return_value": 18446744072635809844,
"status": "0xc0000034",
"side_effects": []
}
}
Bit-identical match — STATUS_OBJECT_NAME_NOT_FOUND (0xC0000034)
on both sides for the missing game:\dat\files.tbl open.
New first divergence (next target)
tid_event_idx=104574: ordinal-of-call mismatch in a tight
RtlEnterCriticalSection / RtlLeaveCriticalSection sequence.
Pre-context (last 5 matching events both engines):
[104569] kernel.call RtlLeaveCriticalSection
[104570] kernel.return RtlLeaveCriticalSection
[104571] import.call RtlEnterCriticalSection
[104572] kernel.call RtlEnterCriticalSection
[104573] kernel.return RtlEnterCriticalSection
Divergent event:
canary: [104574] import.call RtlEnterCriticalSection
ours: [104574] import.call RtlLeaveCriticalSection
Reading: canary does two sequential RtlEnterCriticalSection
calls (nested-lock pattern around the NOT_FOUND error-handling
path); ours does one Enter followed by a Leave (single-lock
pattern). This is downstream code branching differently — likely
an error-handling path in the boot validator that takes a
double-lock when a disc lookup misses. Investigate the function
on whose path Sylpheed is at pc 104574 in ours.