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>
105 lines
3.4 KiB
Markdown
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.
|