Files
xenia-rs/audit-runs/phase-c13-game-dat-files-tbl/cold-vs-cold-result.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

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.