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

105 lines
3.4 KiB
Markdown

# 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:
```json
{
"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:
```json
{
"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.