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>
This commit is contained in:
MechaCat02
2026-06-05 07:19:08 +02:00
parent acd1656753
commit ef93a4fa14
620 changed files with 108303 additions and 1 deletions

View File

@@ -0,0 +1,25 @@
{
"build_id": "ours-phaseB",
"cvars": {
"phase_b_dump_section_content": false,
"phase_b_snapshot_and_exit": true,
"phase_b_snapshot_dir": "audit-runs/phase-ab-verify/coexist"
},
"deterministic_skip": [
"host_ns_at_snapshot",
"wall_clock_iso8601",
"build_id",
"iso_path",
"cvars.phase_b_snapshot_dir"
],
"engine": "ours",
"host_ns_at_snapshot": 0,
"image_loaded_sha256": "ea8d160e9369328a5b922258a92113efb8d7ce3e1a5c12cc521e375985c91c18",
"iso_path": "",
"schema_version": 1,
"wall_clock_iso8601": "epoch:0",
"xex_entry_point": "0x824ab748",
"xex_header_sha256": "0000000000000000000000000000000000000000000000000000000000000000",
"xex_image_base": "0x82000000",
"xex_image_size": 9568256
}

View File

@@ -0,0 +1,234 @@
{
"cr": [
"0x0",
"0x0",
"0x0",
"0x0",
"0x0",
"0x0",
"0x0",
"0x0"
],
"ctr": "0x0000000000000000",
"deterministic_skip": [
"hw_id"
],
"engine": "ours",
"fpr": [
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000"
],
"fpscr": "0x00000000",
"gpr": [
"0x0000000000000000",
"0x00000000700fff00",
"0x0000000020000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x000000007fff0000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000"
],
"hw_id": 0,
"lr": "0x00000000bcbcbcbc",
"msr": "0x0000000000009030",
"pc": "0x824ab748",
"pcr_base": "0x7fff0000",
"schema_version": 1,
"stack_base": "0x00000000",
"stack_limit": "0x00000000",
"thread_id": 1,
"tls_base": "0x00000000",
"vr": [
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000"
],
"vrsave": "0xffffffff",
"vscr": "00000000000000000000000000010000",
"xer": {
"ca": 0,
"ov": 0,
"so": 0,
"tbc": 0
}
}

View File

@@ -0,0 +1,62 @@
{
"deterministic_skip": [
"raw_handle_id",
"exports_registered_count"
],
"engine": "ours",
"exports_registered_count": 199,
"exports_registered_sample": [
"xam.xex!NetDll_WSACleanup",
"xam.xex!NetDll_WSAStartup",
"xam.xex!XGetAVPack",
"xam.xex!XGetGameRegion",
"xam.xex!XGetLanguage",
"xam.xex!XGetVideoMode",
"xam.xex!XMsgInProcessCall",
"xam.xex!XMsgStartIORequest",
"xam.xex!XMsgStartIORequestEx",
"xam.xex!XNotifyGetNext",
"xam.xex!XNotifyPositionUI",
"xam.xex!XamAlloc",
"xam.xex!XamContentClose",
"xam.xex!XamContentCreate",
"xam.xex!XamContentCreateEnumerator",
"xam.xex!XamContentDelete",
"xam.xex!XamContentGetCreator",
"xam.xex!XamContentGetDeviceData",
"xam.xex!XamContentGetDeviceName",
"xam.xex!XamContentGetDeviceState",
"xam.xex!XamContentSetThumbnail",
"xam.xex!XamEnableInactivityProcessing",
"xam.xex!XamEnumerate",
"xam.xex!XamFree",
"xam.xex!XamGetExecutionId",
"xam.xex!XamGetSystemVersion",
"xam.xex!XamInputGetCapabilities",
"xam.xex!XamInputGetKeystrokeEx",
"xam.xex!XamInputGetState",
"xam.xex!XamInputSetState",
"xam.xex!XamLoaderLaunchTitle",
"xam.xex!XamLoaderTerminateTitle"
],
"exports_registered_sha256": "bb97815f82b2313c9eaa07bf80dab47c5c23408c24203a1283dfb2aba1e84e09",
"handle_name_table": [],
"notification_listeners": [],
"objects": [
{
"details": {
"entry_pc": "0x824ab748",
"exit_code": null,
"hw_id": 0,
"is_entry_thread": true,
"thread_id": 1
},
"handle_semantic_id": "9879c5053fedb1d0",
"name": null,
"raw_handle_id": "0x00001000",
"type": "Thread",
"type_code": 5
}
],
"schema_version": 1
}

View File

@@ -0,0 +1,11 @@
{
"engine": "ours",
"files": {
"config.json": "246e12c68f05971f3fbc23e52796d9dad669bb1702e4baa10b1bccc9af3e426d",
"cpu_state.json": "4e6df54ca1939d08854f3a52b49ed2c5ee0823d63cdecad8a7395203dac5443a",
"kernel.json": "b64ea3a6c14f1b0aaadc6de8adbb894edf636a813120d08028ca096e1d06bacc",
"memory.json": "8ff1253f790f3f2645e9f47fb50fa7b52073ae2e73fe5ef68ff6d53af59681dd",
"vfs.json": "97bb2bda57266d8e0dd1da13309eab5ece43130ef378a0b682917d299e9dc4e1"
},
"schema_version": 1
}

View File

@@ -0,0 +1,84 @@
{
"committed_pages_total": 2594,
"deterministic_skip": [
"host_base_pointer"
],
"engine": "ours",
"guest_address_space_bytes": 4294967296,
"heaps": [
{
"base": "0x00000000",
"name": "v00000000",
"page_size": 4096,
"page_state_histogram": {
"committed": 0
},
"size": "0x40000000"
},
{
"base": "0x40000000",
"name": "v40000000",
"page_size": 4096,
"page_state_histogram": {
"committed": 263
},
"size": "0x40000000"
},
{
"base": "0x80000000",
"name": "v80000000",
"page_size": 4096,
"page_state_histogram": {
"committed": 2336
},
"size": "0x40000000"
},
{
"base": "0x90000000",
"name": "v90000000",
"page_size": 4096,
"page_state_histogram": {
"committed": 0
},
"size": "0x40000000"
}
],
"page_size": 4096,
"regions": [
{
"byte_count": 1048576,
"end": "0x70100000",
"protect": 0,
"section_kind": null,
"sha256": "30e14955ebf1352266dc2ff8067e68104607e750abb9d3b36582b8af909fcb58",
"start": "0x70000000"
},
{
"byte_count": 4096,
"end": "0x7ffe1000",
"protect": 0,
"section_kind": null,
"sha256": "ad7facb2586fc6e966c004d7d1d16b024f5805ff7cb47c7a85dabd8b48892ca7",
"start": "0x7ffe0000"
},
{
"byte_count": 4096,
"end": "0x7fff1000",
"protect": 0,
"section_kind": null,
"sha256": "e35cddaf9c210aed7505ec4cf1c599f58ac2b7ec25b0885db1ee49aba2db519a",
"start": "0x7fff0000"
},
{
"byte_count": 9568256,
"end": "0x82920000",
"protect": 0,
"section_kind": null,
"sha256": "ea8d160e9369328a5b922258a92113efb8d7ce3e1a5c12cc521e375985c91c18",
"start": "0x82000000"
}
],
"regions_walked": [],
"schema_version": 1,
"section_contents": null
}

View File

@@ -0,0 +1,71 @@
{
"cache_root_listing": [],
"deterministic_skip": [
"host_path_realpath"
],
"engine": "ours",
"mounted_devices_observed_count": 1,
"resolve_path_probes": [
{
"is_directory": true,
"path": "\\Device\\Cdrom0",
"resolved": true,
"size": null
},
{
"is_directory": true,
"path": "\\Device\\Cdrom0\\dat",
"resolved": true,
"size": 4096
},
{
"is_directory": null,
"path": "\\Device\\Cdrom0\\dat\\movie",
"resolved": false,
"size": null
},
{
"is_directory": null,
"path": "\\Device\\Cdrom0\\dat\\movie\\opening.bik",
"resolved": false,
"size": null
},
{
"is_directory": false,
"path": "\\Device\\Cdrom0\\default.xex",
"resolved": true,
"size": 3497984
},
{
"is_directory": null,
"path": "\\Device\\HardDisk0\\Partition1",
"resolved": false,
"size": null
},
{
"is_directory": true,
"path": "cache:\\",
"resolved": true,
"size": null
},
{
"is_directory": null,
"path": "cache:\\nonexistent_probe",
"resolved": false,
"size": null
},
{
"is_directory": true,
"path": "game:\\dat",
"resolved": true,
"size": 4096
},
{
"is_directory": false,
"path": "game:\\default.xex",
"resolved": true,
"size": 3497984
}
],
"schema_version": 1
}

View File

@@ -0,0 +1,10 @@
{
"instructions": 50000001,
"imports": 40454,
"unimpl": 0,
"draws": 0,
"swaps": 1,
"unique_render_targets": 0,
"shader_blobs_live": 0,
"texture_cache_entries": 0
}

View File

@@ -0,0 +1,251 @@
# Phase A + Phase B re-validation evidence (post-fix)
Compact transcript of the post-fix re-runs that prove all 4 Phase A
gates and all 5 Phase B gates pass. For full discussion of the issues
fixed and per-step methodology see `verification-report.md`.
Conducted 2026-05-13. Build under test: `target/release/xenia-rs`
(combined Phase A + Phase B, byte-identical to `xenia-rs-phaseB`).
Diff tool under test: `tools/diff-state/diff_state.py` post-fix.
## Combined Phase A + Phase B cvar-OFF determinism
```
$ ./target/release/xenia-rs check --stable-digest -n 50000000 \
--out audit-runs/phase-ab-verify/digest-current-cvaroff.json \
"<ISO>"
$ diff audit-runs/phase-a-diff-harness/digest-pre-patch.json \
audit-runs/phase-ab-verify/digest-current-cvaroff.json
# (no output → byte-identical)
```
PASS. The current binary, with no Phase A or Phase B cvars, produces
the same `instructions=50000001 imports=40454 unimpl=0 draws=0
swaps=1 …` digest as the pre-Phase-A baseline.
## Phase A gates
### Gate 1 — cvar-OFF determinism
- **ours**: see "Combined cvar-OFF" above. PASS.
- **canary**: 18-s Wine smoke run with `--mute=true`, no Phase A cvars.
`xenia.log` shows `AUDIT-DEMO-SETUP-BEGIN` and
`AUDIT-DEMO-SETUP-GRAPHICS-OK`. CONFIG DUMP `[Audit]` section
contains `phase_a_event_log_path = ""` and
`phase_a_event_log_mem_writes = false`. PASS.
### Gate 2 — cvar-ON valid JSONL with `schema_version` first
```
$ python3 -c "import json; [json.loads(l) for l in open('audit-runs/phase-a-diff-harness/ours-sanity.jsonl')]"
# (no error — 121 363 lines all parse)
$ head -1 audit-runs/phase-a-diff-harness/ours-sanity.jsonl
{"schema_version":1,"engine":"ours","kind":"schema_version",…}
```
Same for `canary-sanity.jsonl` (1 635 789 lines, all parse, header is
`schema_version`). Kind histograms:
- ours: 1 schema_version + 40 454 each of import.call/kernel.call/kernel.return
- canary: 1 schema_version + 545 271 import.call + 545 270 kernel.call + 545 247 kernel.return (24 in-flight at SIGKILL).
PASS.
### Gate 3 — ≥100-event matching prefix on tid=6→tid=1
```
$ python3 tools/diff-events/diff_events.py \
--canary audit-runs/phase-a-diff-harness/canary-sanity.jsonl \
--ours audit-runs/phase-a-diff-harness/ours-sanity.jsonl \
--out /tmp/post-fix-phase-a.md
$ diff -q audit-runs/phase-a-diff-harness/diff-report.md /tmp/post-fix-phase-a.md
# (no output — byte-identical)
```
113 matched events on canary tid=6 → ours tid=1 before first
divergence at idx 113. PASS.
### Gate 4 — negative test detects corruption at exact index
```
$ python3 -c "
import json
with open('audit-runs/phase-a-diff-harness/ours-sanity.jsonl') as f:
lines=[next(f) for _ in range(100)]
open('/tmp/ours-short.jsonl','w').writelines(lines)
ev=json.loads(lines[49]); ev['kind']='kernel.CORRUPT'
lines[49]=json.dumps(ev)+'\n'
open('/tmp/ours-corrupt.jsonl','w').writelines(lines)
"
$ python3 tools/diff-events/diff_events.py --canary /tmp/ours-short.jsonl --ours /tmp/ours-short.jsonl --validate-identical
# exit 0 → self-diff PASS
$ python3 tools/diff-events/diff_events.py --canary /tmp/ours-short.jsonl --ours /tmp/ours-corrupt.jsonl --validate-identical
validate-identical: divergence in canary_tid=1 at tid_event_idx=48 (kind: canary='import.call' ours='kernel.CORRUPT')
# exit 1
```
PASS.
## Phase B gates
### Gate 1 — cvar-OFF determinism (combined Phase A + Phase B)
- **ours**: see "Combined cvar-OFF". PASS.
- **canary**: same Wine smoke run shows the 5 expected new
`[Audit]` cvar lines (2 Phase A + 3 Phase B). Smoke marker fires.
PASS.
### Gate 2 — well-formed snapshots both engines
```
$ ls audit-runs/phase-b-state-equivalence/snap-001/{canary,ours}/
canary/ config.json cpu_state.json kernel.json manifest.json memory.json vfs.json
ours/ config.json cpu_state.json kernel.json manifest.json memory.json vfs.json
$ for f in config cpu_state kernel manifest memory vfs; do
python3 -c "import json; json.load(open('audit-runs/phase-b-state-equivalence/snap-001/canary/$f.json'))"
python3 -c "import json; json.load(open('audit-runs/phase-b-state-equivalence/snap-001/ours/$f.json'))"
done
# (no error — 12 files all parse)
```
Manifest SHA-256 claims match recomputed file hashes (verified per
file). Note: ours emits keys alphabetically (`serde_json` default);
canary emits in insertion order (`fmt::format`). Diff tool parses
to dict before comparing — no functional impact. PASS, with
documentation update in `validation.md`.
### Gate 3 — hash-deterministic re-runs
**ours.** Two independent runs to different
`--phase-b-snapshot-dir`s:
```
$ ./target/release/xenia-rs exec --quiet \
--phase-b-snapshot-dir audit-runs/phase-ab-verify/snap-002a \
--phase-b-snapshot-and-exit "<ISO>"
$ ./target/release/xenia-rs exec --quiet \
--phase-b-snapshot-dir audit-runs/phase-ab-verify/snap-002b \
--phase-b-snapshot-and-exit "<ISO>"
$ python3 tools/diff-state/diff_state.py \
--canary audit-runs/phase-ab-verify/snap-002a/ours \
--ours audit-runs/phase-ab-verify/snap-002b/ours \
--validate-identical
validate-identical: OK
# exit 0
```
Same-dir byte-equality:
```
$ # snap-002c run 1 → ours/, then mv to ours-1, then run 2 → ours/
$ diff -r audit-runs/phase-ab-verify/snap-002c/ours \
audit-runs/phase-ab-verify/snap-002c/ours-1
# (no output — BYTE-IDENTICAL)
```
PASS.
**canary.** New snapshot run via Wine, compared to stored snap-001:
```
$ wine xenia_canary_phaseB.exe --mute=true \
--phase_b_snapshot_dir="$WP" --phase_b_snapshot_and_exit=true "<ISO>"
$ python3 tools/diff-state/diff_state.py \
--canary audit-runs/phase-b-state-equivalence/snap-001/canary \
--ours audit-runs/phase-ab-verify/snap-canary-002/canary \
--validate-identical
validate-identical: OK
# exit 0
```
PASS.
### Gate 4 — invariants
| invariant | canary | ours | ok |
|---|---|---|---|
| `xex_entry_point` | `0x824ab748` | `0x824ab748` | PASS |
| `cpu_state.pc == xex_entry_point` | yes | yes | PASS |
| `image_loaded_sha256` match | `a70993b7…` | `ea8d160e…` | **FAIL → STOP (expected catalog finding)** |
Mismatch reproducible across two independent canary runs (both
`a70993b7…`) and two independent ours runs (both `ea8d160e…`). The
mismatch is the documented Phase C handoff, not a Phase B failure.
### Gate 5 — diff-tool negative test
Reproduction of the verbatim `validation.md` procedure (after
diff_state.py fix):
```
$ cp audit-runs/phase-b-state-equivalence/snap-001/ours/kernel.json /tmp/kernel-mut.json
$ sed -i 's/"thread_id": 1/"thread_id": 999/' /tmp/kernel-mut.json
$ # build /tmp/verify-gate5/ from snap-001/ours + the mutated kernel.json
$ python3 tools/diff-state/diff_state.py \
--canary audit-runs/phase-b-state-equivalence/snap-001/ours \
--ours /tmp/verify-gate5 --out /tmp/r3.md
wrote /tmp/r3.md (2 divergences)
# exit 1
```
Report.md names two divergences:
- `kernel.json <manifest>` `manifest-hash-mismatch` σ-structural
(file SHA on disk does not match manifest's claim)
- `kernel.json objects[handle_semantic_id=9879c5053fedb1d0].details.thread_id`
γ-kernel-content `canary=1 ours=999`
PASS.
## Regression: stored Phase B catalog unchanged after fix
```
$ python3 tools/diff-state/diff_state.py \
--canary audit-runs/phase-b-state-equivalence/snap-001/canary \
--ours audit-runs/phase-b-state-equivalence/snap-001/ours \
--out /tmp/post-fix-phase-b.md
wrote /tmp/post-fix-phase-b.md (58 divergences)
# exit 2 (STOP)
$ diff -q audit-runs/phase-b-state-equivalence/report.md /tmp/post-fix-phase-b.md
# (no output → byte-identical)
```
The 58-divergence catalog is unchanged. The diff_state.py fix
behavior is restricted to the case where on-disk SHA disagrees with
manifest claim, which only occurs in tampering or cross-engine
testing where each engine emits its own bytes.
## Unit tests
```
$ cargo test -p xenia-kernel event_log
test event_log::tests::fnv1a_known_vector ... ok
test event_log::tests::semantic_id_stable ... ok
test result: ok. 2 passed; 0 failed
```
PASS.
## Summary
| Gate | Status |
|---|---|
| Phase A 1 cvar-OFF (ours) | PASS |
| Phase A 1 cvar-OFF (canary) | PASS |
| Phase A 2 cvar-ON well-formed JSONL | PASS |
| Phase A 3 ≥100-event matching prefix | PASS |
| Phase A 4 negative test | PASS |
| Phase B 1 cvar-OFF (ours) | PASS |
| Phase B 1 cvar-OFF (canary) | PASS |
| Phase B 2 well-formed snapshots | PASS |
| Phase B 3 hash-deterministic re-runs (ours) | PASS |
| Phase B 3 hash-deterministic re-runs (canary) | PASS |
| Phase B 4 invariants `pc == entry_point` | PASS |
| Phase B 4 invariant `image_loaded_sha256` | FAIL → STOP (documented finding for Phase C) |
| Phase B 5 negative test | PASS (post-fix) |
| Combined cvar-OFF byte-identical to baseline | PASS |
| Diff-tool synthetic edges (each tool, 5 cases) | PASS |
| Hook-point semantic equivalence | PASS |
All gates that should PASS, do. The single FAIL is the documented
`image_loaded_sha256` STOP condition that defines Phase B's success
boundary.

View File

@@ -0,0 +1,189 @@
# Phase A diff report
**This report is the output of Phase A's diff harness. Divergences
shown here are INPUT for Phase B (first-divergence localization),
not findings of Phase A.** Phase A's job is to make the harness
itself correct, not to analyze what it surfaces.
## Summary
| canary_tid | ours_tid | matched | canary_total | ours_total | first_divergence_at |
|---|---|---|---|---|---|
| 4 | 11 | 5 | 25163 | 9 | 5 |
| 6 | 1 | 113 | 313196 | 108492 | 113 |
| 7 | 2 | 2 | 29 | 33 | 2 |
| 12 | 7 | 2 | 2846 | 3 | 2 |
| 14 | 9 | 11 | 587000 | 75 | 11 |
| 15 | 10 | 15 | 355601 | 15 | — |
## canary_tid=4 → ours_tid=11
First divergence at `tid_event_idx=5`: payload.return_value: canary=1 ours=0
**Pre-context (last 5 matching events):**
```
canary: [0] import.call RtlEnterCriticalSection
ours: [0] import.call RtlEnterCriticalSection
canary: [1] kernel.call RtlEnterCriticalSection
ours: [1] kernel.call RtlEnterCriticalSection
canary: [2] kernel.return RtlEnterCriticalSection
ours: [2] kernel.return RtlEnterCriticalSection
canary: [3] import.call KeSetEvent
ours: [3] import.call KeSetEvent
canary: [4] kernel.call KeSetEvent
ours: [4] kernel.call KeSetEvent
```
**Divergent event:**
```
canary: [5] kernel.return KeSetEvent
ours: [5] kernel.return KeSetEvent
```
**Next event after the divergence (if any):**
```
canary: [6] import.call KeWaitForMultipleObjects
ours: [6] import.call KeWaitForMultipleObjects
```
**Raw events (JSON):**
```json
{"deterministic": true, "engine": "canary", "guest_cycle": 0, "host_ns": 1085465900, "kind": "kernel.return", "payload": {"name": "KeSetEvent", "return_value": 1, "side_effects": [], "status": "0x00000001"}, "schema_version": 1, "tid": 4, "tid_event_idx": 5}
{"deterministic": true, "engine": "ours", "guest_cycle": 33, "host_ns": 1691667785, "kind": "kernel.return", "payload": {"name": "KeSetEvent", "return_value": 0, "side_effects": [], "status": "0x00000000"}, "schema_version": 1, "tid": 11, "tid_event_idx": 5}
```
## canary_tid=6 → ours_tid=1
First divergence at `tid_event_idx=113`: payload.return_value: canary=0 ours=1880095840
**Pre-context (last 5 matching events):**
```
canary: [108] import.call RtlLeaveCriticalSection
ours: [108] import.call RtlLeaveCriticalSection
canary: [109] kernel.call RtlLeaveCriticalSection
ours: [109] kernel.call RtlLeaveCriticalSection
canary: [110] kernel.return RtlLeaveCriticalSection
ours: [110] kernel.return RtlLeaveCriticalSection
canary: [111] import.call KeQuerySystemTime
ours: [111] import.call KeQuerySystemTime
canary: [112] kernel.call KeQuerySystemTime
ours: [112] kernel.call KeQuerySystemTime
```
**Divergent event:**
```
canary: [113] kernel.return KeQuerySystemTime
ours: [113] kernel.return KeQuerySystemTime
```
**Next event after the divergence (if any):**
```
canary: [114] import.call RtlInitializeCriticalSection
ours: [114] import.call RtlInitializeCriticalSection
```
**Raw events (JSON):**
```json
{"deterministic": true, "engine": "canary", "guest_cycle": 0, "host_ns": 16129600, "kind": "kernel.return", "payload": {"name": "KeQuerySystemTime", "return_value": 0, "side_effects": [], "status": "0x00000000"}, "schema_version": 1, "tid": 6, "tid_event_idx": 113}
{"deterministic": true, "engine": "ours", "guest_cycle": 9415, "host_ns": 72844487, "kind": "kernel.return", "payload": {"name": "KeQuerySystemTime", "return_value": 1880095840, "side_effects": [], "status": "0x700ffc60"}, "schema_version": 1, "tid": 1, "tid_event_idx": 113}
```
## canary_tid=7 → ours_tid=2
First divergence at `tid_event_idx=2`: payload.return_value: canary=0 ours=1896873464
**Pre-context (last 5 matching events):**
```
canary: [0] import.call RtlInitAnsiString
ours: [0] import.call RtlInitAnsiString
canary: [1] kernel.call RtlInitAnsiString
ours: [1] kernel.call RtlInitAnsiString
```
**Divergent event:**
```
canary: [2] kernel.return RtlInitAnsiString
ours: [2] kernel.return RtlInitAnsiString
```
**Next event after the divergence (if any):**
```
canary: [3] import.call NtCreateFile
ours: [3] import.call NtCreateFile
```
**Raw events (JSON):**
```json
{"deterministic": true, "engine": "canary", "guest_cycle": 0, "host_ns": 726781700, "kind": "kernel.return", "payload": {"name": "RtlInitAnsiString", "return_value": 0, "side_effects": [], "status": "0x00000000"}, "schema_version": 1, "tid": 7, "tid_event_idx": 2}
{"deterministic": true, "engine": "ours", "guest_cycle": 2475, "host_ns": 462883889, "kind": "kernel.return", "payload": {"name": "RtlInitAnsiString", "return_value": 1896873464, "side_effects": [], "status": "0x710ffdf8"}, "schema_version": 1, "tid": 2, "tid_event_idx": 2}
```
## canary_tid=12 → ours_tid=7
First divergence at `tid_event_idx=2`: payload.return_value: canary=258 ours=0
**Pre-context (last 5 matching events):**
```
canary: [0] import.call KeWaitForSingleObject
ours: [0] import.call KeWaitForSingleObject
canary: [1] kernel.call KeWaitForSingleObject
ours: [1] kernel.call KeWaitForSingleObject
```
**Divergent event:**
```
canary: [2] kernel.return KeWaitForSingleObject
ours: [2] kernel.return KeWaitForSingleObject
```
**Next event after the divergence (if any):**
```
canary: [3] import.call RtlEnterCriticalSection
ours: <end of stream>
```
**Raw events (JSON):**
```json
{"deterministic": true, "engine": "canary", "guest_cycle": 0, "host_ns": 913948200, "kind": "kernel.return", "payload": {"name": "KeWaitForSingleObject", "return_value": 258, "side_effects": [], "status": "0x00000102"}, "schema_version": 1, "tid": 12, "tid_event_idx": 2}
{"deterministic": true, "engine": "ours", "guest_cycle": 30, "host_ns": 489593928, "kind": "kernel.return", "payload": {"name": "KeWaitForSingleObject", "return_value": 0, "side_effects": [], "status": "0x00000000"}, "schema_version": 1, "tid": 7, "tid_event_idx": 2}
```
## canary_tid=14 → ours_tid=9
First divergence at `tid_event_idx=11`: payload.return_value: canary=2 ours=0
**Pre-context (last 5 matching events):**
```
canary: [6] import.call KeAcquireSpinLockAtRaisedIrql
ours: [6] import.call KeAcquireSpinLockAtRaisedIrql
canary: [7] kernel.call KeAcquireSpinLockAtRaisedIrql
ours: [7] kernel.call KeAcquireSpinLockAtRaisedIrql
canary: [8] kernel.return KeAcquireSpinLockAtRaisedIrql
ours: [8] kernel.return KeAcquireSpinLockAtRaisedIrql
canary: [9] import.call KeRaiseIrqlToDpcLevel
ours: [9] import.call KeRaiseIrqlToDpcLevel
canary: [10] kernel.call KeRaiseIrqlToDpcLevel
ours: [10] kernel.call KeRaiseIrqlToDpcLevel
```
**Divergent event:**
```
canary: [11] kernel.return KeRaiseIrqlToDpcLevel
ours: [11] kernel.return KeRaiseIrqlToDpcLevel
```
**Next event after the divergence (if any):**
```
canary: [12] import.call KeRaiseIrqlToDpcLevel
ours: [12] import.call KeRaiseIrqlToDpcLevel
```
**Raw events (JSON):**
```json
{"deterministic": true, "engine": "canary", "guest_cycle": 0, "host_ns": 1086679400, "kind": "kernel.return", "payload": {"name": "KeRaiseIrqlToDpcLevel", "return_value": 2, "side_effects": [], "status": "0x00000002"}, "schema_version": 1, "tid": 14, "tid_event_idx": 11}
{"deterministic": true, "engine": "ours", "guest_cycle": 77, "host_ns": 1691712626, "kind": "kernel.return", "payload": {"name": "KeRaiseIrqlToDpcLevel", "return_value": 0, "side_effects": [], "status": "0x00000000"}, "schema_version": 1, "tid": 9, "tid_event_idx": 11}
```
## canary_tid=15 → ours_tid=10
No divergence within the 15 compared events (canary has 355601, ours has 15).

View File

@@ -0,0 +1,497 @@
{
"divergences": [
{
"canary": "0x00000000701d0000",
"class": "gamma-kernel-content",
"file": "cpu_state.json",
"kind": "value",
"ours": "0x00000000700fff00",
"path": "gpr[1]"
},
{
"canary": "0x0000000030028000",
"class": "gamma-kernel-content",
"file": "cpu_state.json",
"kind": "value",
"ours": "0x000000007fff0000",
"path": "gpr[13]"
},
{
"canary": "0x0000000000000000",
"class": "gamma-kernel-content",
"file": "cpu_state.json",
"kind": "value",
"ours": "0x00000000bcbcbcbc",
"path": "lr"
},
{
"canary": "0x30028000",
"class": "gamma-kernel-content",
"file": "cpu_state.json",
"kind": "value",
"ours": "0x7fff0000",
"path": "pcr_base"
},
{
"canary": "0x701d0000",
"class": "gamma-kernel-content",
"file": "cpu_state.json",
"kind": "value",
"ours": "0x00000000",
"path": "stack_base"
},
{
"canary": "0x70150000",
"class": "gamma-kernel-content",
"file": "cpu_state.json",
"kind": "value",
"ours": "0x00000000",
"path": "stack_limit"
},
{
"canary": 6,
"class": "gamma-kernel-content",
"file": "cpu_state.json",
"kind": "value",
"ours": 1,
"path": "thread_id"
},
{
"canary": "0x30027000",
"class": "gamma-kernel-content",
"file": "cpu_state.json",
"kind": "value",
"ours": "0x00000000",
"path": "tls_base"
},
{
"canary": "00000000000000000000000000000100",
"class": "gamma-kernel-content",
"file": "cpu_state.json",
"kind": "value",
"ours": "00000000000000000000000000010000",
"path": "vscr"
},
{
"canary": null,
"class": "sigma-structural",
"file": "memory.json",
"kind": "extra-field",
"ours": [],
"path": "regions_walked"
},
{
"canary": 2466,
"class": "gamma-kernel-content",
"file": "memory.json",
"kind": "value",
"ours": 2594,
"path": "committed_pages_total"
},
{
"canary": 261991,
"class": "sigma-structural",
"file": "memory.json",
"kind": "missing-field",
"ours": null,
"path": "heaps[base=0x00000000].page_state_histogram.free"
},
{
"canary": 153,
"class": "gamma-kernel-content",
"file": "memory.json",
"kind": "value",
"ours": 0,
"path": "heaps[base=0x00000000].page_state_histogram.committed"
},
{
"canary": 65536,
"class": "gamma-kernel-content",
"file": "memory.json",
"kind": "value",
"ours": 4096,
"path": "heaps[base=0x40000000].page_size"
},
{
"canary": 16098,
"class": "sigma-structural",
"file": "memory.json",
"kind": "missing-field",
"ours": null,
"path": "heaps[base=0x40000000].page_state_histogram.free"
},
{
"canary": 30,
"class": "gamma-kernel-content",
"file": "memory.json",
"kind": "value",
"ours": 263,
"path": "heaps[base=0x40000000].page_state_histogram.committed"
},
{
"canary": "0x3f000000",
"class": "gamma-kernel-content",
"file": "memory.json",
"kind": "value",
"ours": "0x40000000",
"path": "heaps[base=0x40000000].size"
},
{
"canary": 65536,
"class": "gamma-kernel-content",
"file": "memory.json",
"kind": "value",
"ours": 4096,
"path": "heaps[base=0x80000000].page_size"
},
{
"canary": 3950,
"class": "sigma-structural",
"file": "memory.json",
"kind": "missing-field",
"ours": null,
"path": "heaps[base=0x80000000].page_state_histogram.free"
},
{
"canary": 146,
"class": "gamma-kernel-content",
"file": "memory.json",
"kind": "value",
"ours": 2336,
"path": "heaps[base=0x80000000].page_state_histogram.committed"
},
{
"canary": "0x10000000",
"class": "gamma-kernel-content",
"file": "memory.json",
"kind": "value",
"ours": "0x40000000",
"path": "heaps[base=0x80000000].size"
},
{
"canary": 65536,
"class": "sigma-structural",
"file": "memory.json",
"kind": "missing-field",
"ours": null,
"path": "heaps[base=0x90000000].page_state_histogram.free"
},
{
"canary": null,
"class": "sigma-structural",
"file": "memory.json",
"kind": "extra-field",
"ours": 0,
"path": "heaps[base=0x90000000].page_state_histogram.committed"
},
{
"canary": "0x10000000",
"class": "gamma-kernel-content",
"file": "memory.json",
"kind": "value",
"ours": "0x40000000",
"path": "heaps[base=0x90000000].size"
},
{
"canary": 4096,
"class": "gamma-kernel-content",
"file": "memory.json",
"kind": "value",
"ours": 1048576,
"path": "regions[0].byte_count"
},
{
"canary": "0x30028000",
"class": "gamma-kernel-content",
"file": "memory.json",
"kind": "value",
"ours": "0x70100000",
"path": "regions[0].end"
},
{
"canary": "ad7facb2586fc6e966c004d7d1d16b024f5805ff7cb47c7a85dabd8b48892ca7",
"class": "delta-content",
"file": "memory.json",
"kind": "value",
"ours": "30e14955ebf1352266dc2ff8067e68104607e750abb9d3b36582b8af909fcb58",
"path": "regions[0].sha256"
},
{
"canary": "0x30027000",
"class": "gamma-kernel-content",
"file": "memory.json",
"kind": "value",
"ours": "0x70000000",
"path": "regions[0].start"
},
{
"canary": "0x30029000",
"class": "gamma-kernel-content",
"file": "memory.json",
"kind": "value",
"ours": "0x7ffe1000",
"path": "regions[1].end"
},
{
"canary": "2390751521f95a4c513da387bc2ee8a82c5b9261bfc565be5e108fafbda61cf3",
"class": "delta-content",
"file": "memory.json",
"kind": "value",
"ours": "ad7facb2586fc6e966c004d7d1d16b024f5805ff7cb47c7a85dabd8b48892ca7",
"path": "regions[1].sha256"
},
{
"canary": "0x30028000",
"class": "gamma-kernel-content",
"file": "memory.json",
"kind": "value",
"ours": "0x7ffe0000",
"path": "regions[1].start"
},
{
"canary": 524288,
"class": "gamma-kernel-content",
"file": "memory.json",
"kind": "value",
"ours": 4096,
"path": "regions[2].byte_count"
},
{
"canary": "0x701d0000",
"class": "gamma-kernel-content",
"file": "memory.json",
"kind": "value",
"ours": "0x7fff1000",
"path": "regions[2].end"
},
{
"canary": "07854d2fef297a06ba81685e660c332de36d5d18d546927d30daad6d7fda1541",
"class": "delta-content",
"file": "memory.json",
"kind": "value",
"ours": "e35cddaf9c210aed7505ec4cf1c599f58ac2b7ec25b0885db1ee49aba2db519a",
"path": "regions[2].sha256"
},
{
"canary": "0x70150000",
"class": "gamma-kernel-content",
"file": "memory.json",
"kind": "value",
"ours": "0x7fff0000",
"path": "regions[2].start"
},
{
"canary": "a70993b77ca9e29218d033fad7c0b45c874676c4e0edd966545d39b266486a9c",
"class": "delta-content",
"file": "memory.json",
"kind": "value",
"ours": "ea8d160e9369328a5b922258a92113efb8d7ce3e1a5c12cc521e375985c91c18",
"path": "regions[3].sha256"
},
{
"canary": 0,
"class": "sigma-structural",
"file": "kernel.json",
"kind": "seq-length",
"ours": 32,
"path": "exports_registered_sample"
},
{
"canary": "0000000000000000000000000000000000000000000000000000000000000000",
"class": "delta-content",
"file": "kernel.json",
"kind": "value",
"ours": "bb97815f82b2313c9eaa07bf80dab47c5c23408c24203a1283dfb2aba1e84e09",
"path": "exports_registered_sha256"
},
{
"canary": "0d6236cd0677766b",
"class": "gamma-kernel-content",
"file": "kernel.json",
"kind": "missing-from-ours",
"ours": null,
"path": "objects[handle_semantic_id=0d6236cd0677766b]"
},
{
"canary": "0d8cd68a54c991e3",
"class": "gamma-kernel-content",
"file": "kernel.json",
"kind": "missing-from-ours",
"ours": null,
"path": "objects[handle_semantic_id=0d8cd68a54c991e3]"
},
{
"canary": "0db6fd47a31adfc0",
"class": "gamma-kernel-content",
"file": "kernel.json",
"kind": "missing-from-ours",
"ours": null,
"path": "objects[handle_semantic_id=0db6fd47a31adfc0]"
},
{
"canary": "0e8c94fa2ab636b3",
"class": "gamma-kernel-content",
"file": "kernel.json",
"kind": "missing-from-ours",
"ours": null,
"path": "objects[handle_semantic_id=0e8c94fa2ab636b3]"
},
{
"canary": "20b2d85926bc7b11",
"class": "gamma-kernel-content",
"file": "kernel.json",
"kind": "missing-from-ours",
"ours": null,
"path": "objects[handle_semantic_id=20b2d85926bc7b11]"
},
{
"canary": "20b37f5926bd96d6",
"class": "gamma-kernel-content",
"file": "kernel.json",
"kind": "missing-from-ours",
"ours": null,
"path": "objects[handle_semantic_id=20b37f5926bd96d6]"
},
{
"canary": "20de1f16750fb24e",
"class": "gamma-kernel-content",
"file": "kernel.json",
"kind": "missing-from-ours",
"ours": null,
"path": "objects[handle_semantic_id=20de1f16750fb24e]"
},
{
"canary": "89cc99291d29ed5c",
"class": "gamma-kernel-content",
"file": "kernel.json",
"kind": "missing-from-ours",
"ours": null,
"path": "objects[handle_semantic_id=89cc99291d29ed5c]"
},
{
"canary": "8d4ce6ee5f4e68af",
"class": "gamma-kernel-content",
"file": "kernel.json",
"kind": "missing-from-ours",
"ours": null,
"path": "objects[handle_semantic_id=8d4ce6ee5f4e68af]"
},
{
"canary": "8d7786abada08427",
"class": "gamma-kernel-content",
"file": "kernel.json",
"kind": "missing-from-ours",
"ours": null,
"path": "objects[handle_semantic_id=8d7786abada08427]"
},
{
"canary": "a0c8cf37cde6a492",
"class": "gamma-kernel-content",
"file": "kernel.json",
"kind": "missing-from-ours",
"ours": null,
"path": "objects[handle_semantic_id=a0c8cf37cde6a492]"
},
{
"canary": null,
"class": "gamma-kernel-content",
"file": "kernel.json",
"kind": "extra-in-ours",
"ours": "9879c5053fedb1d0",
"path": "objects[handle_semantic_id=9879c5053fedb1d0]"
},
{
"canary": 0,
"class": "gamma-kernel-content",
"file": "vfs.json",
"kind": "type-mismatch",
"ours": null,
"path": "resolve_path_probes[0].size"
},
{
"canary": true,
"class": "gamma-kernel-content",
"file": "vfs.json",
"kind": "type-mismatch",
"ours": null,
"path": "resolve_path_probes[2].is_directory"
},
{
"canary": true,
"class": "gamma-kernel-content",
"file": "vfs.json",
"kind": "value",
"ours": false,
"path": "resolve_path_probes[2].resolved"
},
{
"canary": 4096,
"class": "gamma-kernel-content",
"file": "vfs.json",
"kind": "type-mismatch",
"ours": null,
"path": "resolve_path_probes[2].size"
},
{
"canary": 0,
"class": "gamma-kernel-content",
"file": "vfs.json",
"kind": "type-mismatch",
"ours": null,
"path": "resolve_path_probes[6].size"
},
{
"canary": "",
"class": "sigma-structural",
"file": "config.json",
"kind": "missing-field",
"ours": null,
"path": "cvars.phase_a_event_log_path"
},
{
"canary": "a70993b77ca9e29218d033fad7c0b45c874676c4e0edd966545d39b266486a9c",
"class": "delta-content-STOP",
"file": "config.json",
"kind": "value",
"ours": "ea8d160e9369328a5b922258a92113efb8d7ce3e1a5c12cc521e375985c91c18",
"path": "image_loaded_sha256"
},
{
"canary": "ccf935d24a74e002",
"class": "delta-content",
"file": "config.json",
"kind": "value",
"ours": "0000000000000000000000000000000000000000000000000000000000000000",
"path": "xex_header_sha256"
}
],
"file_status": {
"config.json": "diverged",
"cpu_state.json": "diverged",
"kernel.json": "diverged",
"memory.json": "diverged",
"vfs.json": "diverged"
},
"invariants": [
{
"canary": "0x824ab748",
"name": "xex_entry_point",
"ok": true,
"ours": "0x824ab748"
},
{
"canary": "0x824ab748 == 0x824ab748",
"name": "cpu_state.pc == xex_entry_point",
"ok": true,
"ours": "0x824ab748 == 0x824ab748"
},
{
"canary": "a70993b77ca9e29218d033fad7c0b45c874676c4e0edd966545d39b266486a9c",
"name": "image_loaded_sha256",
"ok": false,
"ours": "ea8d160e9369328a5b922258a92113efb8d7ce3e1a5c12cc521e375985c91c18"
}
],
"schema_version": 1,
"stop": true
}

View File

@@ -0,0 +1,98 @@
# Phase B snapshot diff
- canary snapshot: `audit-runs/phase-b-state-equivalence/snap-001/canary`
- ours snapshot: `audit-runs/phase-b-state-equivalence/snap-001/ours`
## Invariants (HARD GATE)
| invariant | canary | ours | ok? |
|---|---|---|---|
| xex_entry_point | `0x824ab748` | `0x824ab748` | PASS |
| cpu_state.pc == xex_entry_point | `0x824ab748 == 0x824ab748` | `0x824ab748 == 0x824ab748` | PASS |
| image_loaded_sha256 | `a70993b77ca9e29218d033fad7c0b45c874676c4e0edd966545d39b266486a9c` | `ea8d160e9369328a5b922258a92113efb8d7ce3e1a5c12cc521e375985c91c18` | FAIL |
> **STOP**: a primary equivalence invariant failed. Downstream divergences are not interpretable until this is resolved. Re-run with `--phase-b-dump-section-content` on both engines and binary-diff the regions to localize.
## File-level summary
| file | status | divergence count by class |
|---|---|---|
| cpu_state.json | diverged | gamma-kernel-content=9 |
| memory.json | diverged | sigma-structural=6 delta-content=4 gamma-kernel-content=17 |
| kernel.json | diverged | sigma-structural=1 delta-content=1 gamma-kernel-content=12 |
| vfs.json | diverged | gamma-kernel-content=5 |
| config.json | diverged | sigma-structural=1 delta-content-STOP=1 delta-content=1 |
## σ-structural divergences (priority 1)
- **memory.json** `regions_walked`: kind=`extra-field` canary=`None` ours=`[]`
- **memory.json** `heaps[base=0x00000000].page_state_histogram.free`: kind=`missing-field` canary=`261991` ours=`None`
- **memory.json** `heaps[base=0x40000000].page_state_histogram.free`: kind=`missing-field` canary=`16098` ours=`None`
- **memory.json** `heaps[base=0x80000000].page_state_histogram.free`: kind=`missing-field` canary=`3950` ours=`None`
- **memory.json** `heaps[base=0x90000000].page_state_histogram.free`: kind=`missing-field` canary=`65536` ours=`None`
- **memory.json** `heaps[base=0x90000000].page_state_histogram.committed`: kind=`extra-field` canary=`None` ours=`0`
- **kernel.json** `exports_registered_sample`: kind=`seq-length` canary=`0` ours=`32`
- **config.json** `cvars.phase_a_event_log_path`: kind=`missing-field` canary=`''` ours=`None`
## δ-content STOP divergences
- **config.json** `image_loaded_sha256`: kind=`value` canary=`'a70993b77ca9e29218d033fad7c0b45c874676c4e0edd966545d39b266486a9c'` ours=`'ea8d160e9369328a5b922258a92113efb8d7ce3e1a5c12cc521e375985c91c18'`
## δ-content divergences (priority 2)
- **memory.json** `regions[0].sha256`: kind=`value` canary=`'ad7facb2586fc6e966c004d7d1d16b024f5805ff7cb47c7a85dabd8b48892ca7'` ours=`'30e14955ebf1352266dc2ff8067e68104607e750abb9d3b36582b8af909fcb58'`
- **memory.json** `regions[1].sha256`: kind=`value` canary=`'2390751521f95a4c513da387bc2ee8a82c5b9261bfc565be5e108fafbda61cf3'` ours=`'ad7facb2586fc6e966c004d7d1d16b024f5805ff7cb47c7a85dabd8b48892ca7'`
- **memory.json** `regions[2].sha256`: kind=`value` canary=`'07854d2fef297a06ba81685e660c332de36d5d18d546927d30daad6d7fda1541'` ours=`'e35cddaf9c210aed7505ec4cf1c599f58ac2b7ec25b0885db1ee49aba2db519a'`
- **memory.json** `regions[3].sha256`: kind=`value` canary=`'a70993b77ca9e29218d033fad7c0b45c874676c4e0edd966545d39b266486a9c'` ours=`'ea8d160e9369328a5b922258a92113efb8d7ce3e1a5c12cc521e375985c91c18'`
- **kernel.json** `exports_registered_sha256`: kind=`value` canary=`'0000000000000000000000000000000000000000000000000000000000000000'` ours=`'bb97815f82b2313c9eaa07bf80dab47c5c23408c24203a1283dfb2aba1e84e09'`
- **config.json** `xex_header_sha256`: kind=`value` canary=`'ccf935d24a74e002'` ours=`'0000000000000000000000000000000000000000000000000000000000000000'`
## γ-kernel-content divergences (priority 2)
- **cpu_state.json** `gpr[1]`: kind=`value` canary=`'0x00000000701d0000'` ours=`'0x00000000700fff00'`
- **cpu_state.json** `gpr[13]`: kind=`value` canary=`'0x0000000030028000'` ours=`'0x000000007fff0000'`
- **cpu_state.json** `lr`: kind=`value` canary=`'0x0000000000000000'` ours=`'0x00000000bcbcbcbc'`
- **cpu_state.json** `pcr_base`: kind=`value` canary=`'0x30028000'` ours=`'0x7fff0000'`
- **cpu_state.json** `stack_base`: kind=`value` canary=`'0x701d0000'` ours=`'0x00000000'`
- **cpu_state.json** `stack_limit`: kind=`value` canary=`'0x70150000'` ours=`'0x00000000'`
- **cpu_state.json** `thread_id`: kind=`value` canary=`6` ours=`1`
- **cpu_state.json** `tls_base`: kind=`value` canary=`'0x30027000'` ours=`'0x00000000'`
- **cpu_state.json** `vscr`: kind=`value` canary=`'00000000000000000000000000000100'` ours=`'00000000000000000000000000010000'`
- **memory.json** `committed_pages_total`: kind=`value` canary=`2466` ours=`2594`
- **memory.json** `heaps[base=0x00000000].page_state_histogram.committed`: kind=`value` canary=`153` ours=`0`
- **memory.json** `heaps[base=0x40000000].page_size`: kind=`value` canary=`65536` ours=`4096`
- **memory.json** `heaps[base=0x40000000].page_state_histogram.committed`: kind=`value` canary=`30` ours=`263`
- **memory.json** `heaps[base=0x40000000].size`: kind=`value` canary=`'0x3f000000'` ours=`'0x40000000'`
- **memory.json** `heaps[base=0x80000000].page_size`: kind=`value` canary=`65536` ours=`4096`
- **memory.json** `heaps[base=0x80000000].page_state_histogram.committed`: kind=`value` canary=`146` ours=`2336`
- **memory.json** `heaps[base=0x80000000].size`: kind=`value` canary=`'0x10000000'` ours=`'0x40000000'`
- **memory.json** `heaps[base=0x90000000].size`: kind=`value` canary=`'0x10000000'` ours=`'0x40000000'`
- **memory.json** `regions[0].byte_count`: kind=`value` canary=`4096` ours=`1048576`
- **memory.json** `regions[0].end`: kind=`value` canary=`'0x30028000'` ours=`'0x70100000'`
- **memory.json** `regions[0].start`: kind=`value` canary=`'0x30027000'` ours=`'0x70000000'`
- **memory.json** `regions[1].end`: kind=`value` canary=`'0x30029000'` ours=`'0x7ffe1000'`
- **memory.json** `regions[1].start`: kind=`value` canary=`'0x30028000'` ours=`'0x7ffe0000'`
- **memory.json** `regions[2].byte_count`: kind=`value` canary=`524288` ours=`4096`
- **memory.json** `regions[2].end`: kind=`value` canary=`'0x701d0000'` ours=`'0x7fff1000'`
- **memory.json** `regions[2].start`: kind=`value` canary=`'0x70150000'` ours=`'0x7fff0000'`
- **kernel.json** `objects[handle_semantic_id=0d6236cd0677766b]`: kind=`missing-from-ours` canary=`'0d6236cd0677766b'` ours=`None`
- **kernel.json** `objects[handle_semantic_id=0d8cd68a54c991e3]`: kind=`missing-from-ours` canary=`'0d8cd68a54c991e3'` ours=`None`
- **kernel.json** `objects[handle_semantic_id=0db6fd47a31adfc0]`: kind=`missing-from-ours` canary=`'0db6fd47a31adfc0'` ours=`None`
- **kernel.json** `objects[handle_semantic_id=0e8c94fa2ab636b3]`: kind=`missing-from-ours` canary=`'0e8c94fa2ab636b3'` ours=`None`
- **kernel.json** `objects[handle_semantic_id=20b2d85926bc7b11]`: kind=`missing-from-ours` canary=`'20b2d85926bc7b11'` ours=`None`
- **kernel.json** `objects[handle_semantic_id=20b37f5926bd96d6]`: kind=`missing-from-ours` canary=`'20b37f5926bd96d6'` ours=`None`
- **kernel.json** `objects[handle_semantic_id=20de1f16750fb24e]`: kind=`missing-from-ours` canary=`'20de1f16750fb24e'` ours=`None`
- **kernel.json** `objects[handle_semantic_id=89cc99291d29ed5c]`: kind=`missing-from-ours` canary=`'89cc99291d29ed5c'` ours=`None`
- **kernel.json** `objects[handle_semantic_id=8d4ce6ee5f4e68af]`: kind=`missing-from-ours` canary=`'8d4ce6ee5f4e68af'` ours=`None`
- **kernel.json** `objects[handle_semantic_id=8d7786abada08427]`: kind=`missing-from-ours` canary=`'8d7786abada08427'` ours=`None`
- **kernel.json** `objects[handle_semantic_id=a0c8cf37cde6a492]`: kind=`missing-from-ours` canary=`'a0c8cf37cde6a492'` ours=`None`
- **kernel.json** `objects[handle_semantic_id=9879c5053fedb1d0]`: kind=`extra-in-ours` canary=`None` ours=`'9879c5053fedb1d0'`
- **vfs.json** `resolve_path_probes[0].size`: kind=`type-mismatch` canary=`0` ours=`None`
- **vfs.json** `resolve_path_probes[2].is_directory`: kind=`type-mismatch` canary=`True` ours=`None`
- **vfs.json** `resolve_path_probes[2].resolved`: kind=`value` canary=`True` ours=`False`
- **vfs.json** `resolve_path_probes[2].size`: kind=`type-mismatch` canary=`4096` ours=`None`
- **vfs.json** `resolve_path_probes[6].size`: kind=`type-mismatch` canary=`0` ours=`None`
## Phase C handoff
Suggested attack order: σ first (structural), then γ ranked by object type (Thread > Event > Semaphore > Mutex > Timer > File > Other), then δ. ε and τ are catalog-only.

View File

@@ -0,0 +1,497 @@
{
"divergences": [
{
"canary": "0x00000000701d0000",
"class": "gamma-kernel-content",
"file": "cpu_state.json",
"kind": "value",
"ours": "0x00000000700fff00",
"path": "gpr[1]"
},
{
"canary": "0x0000000030028000",
"class": "gamma-kernel-content",
"file": "cpu_state.json",
"kind": "value",
"ours": "0x000000007fff0000",
"path": "gpr[13]"
},
{
"canary": "0x0000000000000000",
"class": "gamma-kernel-content",
"file": "cpu_state.json",
"kind": "value",
"ours": "0x00000000bcbcbcbc",
"path": "lr"
},
{
"canary": "0x30028000",
"class": "gamma-kernel-content",
"file": "cpu_state.json",
"kind": "value",
"ours": "0x7fff0000",
"path": "pcr_base"
},
{
"canary": "0x701d0000",
"class": "gamma-kernel-content",
"file": "cpu_state.json",
"kind": "value",
"ours": "0x00000000",
"path": "stack_base"
},
{
"canary": "0x70150000",
"class": "gamma-kernel-content",
"file": "cpu_state.json",
"kind": "value",
"ours": "0x00000000",
"path": "stack_limit"
},
{
"canary": 6,
"class": "gamma-kernel-content",
"file": "cpu_state.json",
"kind": "value",
"ours": 1,
"path": "thread_id"
},
{
"canary": "0x30027000",
"class": "gamma-kernel-content",
"file": "cpu_state.json",
"kind": "value",
"ours": "0x00000000",
"path": "tls_base"
},
{
"canary": "00000000000000000000000000000100",
"class": "gamma-kernel-content",
"file": "cpu_state.json",
"kind": "value",
"ours": "00000000000000000000000000010000",
"path": "vscr"
},
{
"canary": null,
"class": "sigma-structural",
"file": "memory.json",
"kind": "extra-field",
"ours": [],
"path": "regions_walked"
},
{
"canary": 2466,
"class": "gamma-kernel-content",
"file": "memory.json",
"kind": "value",
"ours": 2594,
"path": "committed_pages_total"
},
{
"canary": 261991,
"class": "sigma-structural",
"file": "memory.json",
"kind": "missing-field",
"ours": null,
"path": "heaps[base=0x00000000].page_state_histogram.free"
},
{
"canary": 153,
"class": "gamma-kernel-content",
"file": "memory.json",
"kind": "value",
"ours": 0,
"path": "heaps[base=0x00000000].page_state_histogram.committed"
},
{
"canary": 65536,
"class": "gamma-kernel-content",
"file": "memory.json",
"kind": "value",
"ours": 4096,
"path": "heaps[base=0x40000000].page_size"
},
{
"canary": 16098,
"class": "sigma-structural",
"file": "memory.json",
"kind": "missing-field",
"ours": null,
"path": "heaps[base=0x40000000].page_state_histogram.free"
},
{
"canary": 30,
"class": "gamma-kernel-content",
"file": "memory.json",
"kind": "value",
"ours": 263,
"path": "heaps[base=0x40000000].page_state_histogram.committed"
},
{
"canary": "0x3f000000",
"class": "gamma-kernel-content",
"file": "memory.json",
"kind": "value",
"ours": "0x40000000",
"path": "heaps[base=0x40000000].size"
},
{
"canary": 65536,
"class": "gamma-kernel-content",
"file": "memory.json",
"kind": "value",
"ours": 4096,
"path": "heaps[base=0x80000000].page_size"
},
{
"canary": 3950,
"class": "sigma-structural",
"file": "memory.json",
"kind": "missing-field",
"ours": null,
"path": "heaps[base=0x80000000].page_state_histogram.free"
},
{
"canary": 146,
"class": "gamma-kernel-content",
"file": "memory.json",
"kind": "value",
"ours": 2336,
"path": "heaps[base=0x80000000].page_state_histogram.committed"
},
{
"canary": "0x10000000",
"class": "gamma-kernel-content",
"file": "memory.json",
"kind": "value",
"ours": "0x40000000",
"path": "heaps[base=0x80000000].size"
},
{
"canary": 65536,
"class": "sigma-structural",
"file": "memory.json",
"kind": "missing-field",
"ours": null,
"path": "heaps[base=0x90000000].page_state_histogram.free"
},
{
"canary": null,
"class": "sigma-structural",
"file": "memory.json",
"kind": "extra-field",
"ours": 0,
"path": "heaps[base=0x90000000].page_state_histogram.committed"
},
{
"canary": "0x10000000",
"class": "gamma-kernel-content",
"file": "memory.json",
"kind": "value",
"ours": "0x40000000",
"path": "heaps[base=0x90000000].size"
},
{
"canary": 4096,
"class": "gamma-kernel-content",
"file": "memory.json",
"kind": "value",
"ours": 1048576,
"path": "regions[0].byte_count"
},
{
"canary": "0x30028000",
"class": "gamma-kernel-content",
"file": "memory.json",
"kind": "value",
"ours": "0x70100000",
"path": "regions[0].end"
},
{
"canary": "ad7facb2586fc6e966c004d7d1d16b024f5805ff7cb47c7a85dabd8b48892ca7",
"class": "delta-content",
"file": "memory.json",
"kind": "value",
"ours": "30e14955ebf1352266dc2ff8067e68104607e750abb9d3b36582b8af909fcb58",
"path": "regions[0].sha256"
},
{
"canary": "0x30027000",
"class": "gamma-kernel-content",
"file": "memory.json",
"kind": "value",
"ours": "0x70000000",
"path": "regions[0].start"
},
{
"canary": "0x30029000",
"class": "gamma-kernel-content",
"file": "memory.json",
"kind": "value",
"ours": "0x7ffe1000",
"path": "regions[1].end"
},
{
"canary": "2390751521f95a4c513da387bc2ee8a82c5b9261bfc565be5e108fafbda61cf3",
"class": "delta-content",
"file": "memory.json",
"kind": "value",
"ours": "ad7facb2586fc6e966c004d7d1d16b024f5805ff7cb47c7a85dabd8b48892ca7",
"path": "regions[1].sha256"
},
{
"canary": "0x30028000",
"class": "gamma-kernel-content",
"file": "memory.json",
"kind": "value",
"ours": "0x7ffe0000",
"path": "regions[1].start"
},
{
"canary": 524288,
"class": "gamma-kernel-content",
"file": "memory.json",
"kind": "value",
"ours": 4096,
"path": "regions[2].byte_count"
},
{
"canary": "0x701d0000",
"class": "gamma-kernel-content",
"file": "memory.json",
"kind": "value",
"ours": "0x7fff1000",
"path": "regions[2].end"
},
{
"canary": "07854d2fef297a06ba81685e660c332de36d5d18d546927d30daad6d7fda1541",
"class": "delta-content",
"file": "memory.json",
"kind": "value",
"ours": "e35cddaf9c210aed7505ec4cf1c599f58ac2b7ec25b0885db1ee49aba2db519a",
"path": "regions[2].sha256"
},
{
"canary": "0x70150000",
"class": "gamma-kernel-content",
"file": "memory.json",
"kind": "value",
"ours": "0x7fff0000",
"path": "regions[2].start"
},
{
"canary": "a70993b77ca9e29218d033fad7c0b45c874676c4e0edd966545d39b266486a9c",
"class": "delta-content",
"file": "memory.json",
"kind": "value",
"ours": "ea8d160e9369328a5b922258a92113efb8d7ce3e1a5c12cc521e375985c91c18",
"path": "regions[3].sha256"
},
{
"canary": 0,
"class": "sigma-structural",
"file": "kernel.json",
"kind": "seq-length",
"ours": 32,
"path": "exports_registered_sample"
},
{
"canary": "0000000000000000000000000000000000000000000000000000000000000000",
"class": "delta-content",
"file": "kernel.json",
"kind": "value",
"ours": "bb97815f82b2313c9eaa07bf80dab47c5c23408c24203a1283dfb2aba1e84e09",
"path": "exports_registered_sha256"
},
{
"canary": "0d6236cd0677766b",
"class": "gamma-kernel-content",
"file": "kernel.json",
"kind": "missing-from-ours",
"ours": null,
"path": "objects[handle_semantic_id=0d6236cd0677766b]"
},
{
"canary": "0d8cd68a54c991e3",
"class": "gamma-kernel-content",
"file": "kernel.json",
"kind": "missing-from-ours",
"ours": null,
"path": "objects[handle_semantic_id=0d8cd68a54c991e3]"
},
{
"canary": "0db6fd47a31adfc0",
"class": "gamma-kernel-content",
"file": "kernel.json",
"kind": "missing-from-ours",
"ours": null,
"path": "objects[handle_semantic_id=0db6fd47a31adfc0]"
},
{
"canary": "0e8c94fa2ab636b3",
"class": "gamma-kernel-content",
"file": "kernel.json",
"kind": "missing-from-ours",
"ours": null,
"path": "objects[handle_semantic_id=0e8c94fa2ab636b3]"
},
{
"canary": "20b2d85926bc7b11",
"class": "gamma-kernel-content",
"file": "kernel.json",
"kind": "missing-from-ours",
"ours": null,
"path": "objects[handle_semantic_id=20b2d85926bc7b11]"
},
{
"canary": "20b37f5926bd96d6",
"class": "gamma-kernel-content",
"file": "kernel.json",
"kind": "missing-from-ours",
"ours": null,
"path": "objects[handle_semantic_id=20b37f5926bd96d6]"
},
{
"canary": "20de1f16750fb24e",
"class": "gamma-kernel-content",
"file": "kernel.json",
"kind": "missing-from-ours",
"ours": null,
"path": "objects[handle_semantic_id=20de1f16750fb24e]"
},
{
"canary": "89cc99291d29ed5c",
"class": "gamma-kernel-content",
"file": "kernel.json",
"kind": "missing-from-ours",
"ours": null,
"path": "objects[handle_semantic_id=89cc99291d29ed5c]"
},
{
"canary": "8d4ce6ee5f4e68af",
"class": "gamma-kernel-content",
"file": "kernel.json",
"kind": "missing-from-ours",
"ours": null,
"path": "objects[handle_semantic_id=8d4ce6ee5f4e68af]"
},
{
"canary": "8d7786abada08427",
"class": "gamma-kernel-content",
"file": "kernel.json",
"kind": "missing-from-ours",
"ours": null,
"path": "objects[handle_semantic_id=8d7786abada08427]"
},
{
"canary": "a0c8cf37cde6a492",
"class": "gamma-kernel-content",
"file": "kernel.json",
"kind": "missing-from-ours",
"ours": null,
"path": "objects[handle_semantic_id=a0c8cf37cde6a492]"
},
{
"canary": null,
"class": "gamma-kernel-content",
"file": "kernel.json",
"kind": "extra-in-ours",
"ours": "9879c5053fedb1d0",
"path": "objects[handle_semantic_id=9879c5053fedb1d0]"
},
{
"canary": 0,
"class": "gamma-kernel-content",
"file": "vfs.json",
"kind": "type-mismatch",
"ours": null,
"path": "resolve_path_probes[0].size"
},
{
"canary": true,
"class": "gamma-kernel-content",
"file": "vfs.json",
"kind": "type-mismatch",
"ours": null,
"path": "resolve_path_probes[2].is_directory"
},
{
"canary": true,
"class": "gamma-kernel-content",
"file": "vfs.json",
"kind": "value",
"ours": false,
"path": "resolve_path_probes[2].resolved"
},
{
"canary": 4096,
"class": "gamma-kernel-content",
"file": "vfs.json",
"kind": "type-mismatch",
"ours": null,
"path": "resolve_path_probes[2].size"
},
{
"canary": 0,
"class": "gamma-kernel-content",
"file": "vfs.json",
"kind": "type-mismatch",
"ours": null,
"path": "resolve_path_probes[6].size"
},
{
"canary": "",
"class": "sigma-structural",
"file": "config.json",
"kind": "missing-field",
"ours": null,
"path": "cvars.phase_a_event_log_path"
},
{
"canary": "a70993b77ca9e29218d033fad7c0b45c874676c4e0edd966545d39b266486a9c",
"class": "delta-content-STOP",
"file": "config.json",
"kind": "value",
"ours": "ea8d160e9369328a5b922258a92113efb8d7ce3e1a5c12cc521e375985c91c18",
"path": "image_loaded_sha256"
},
{
"canary": "ccf935d24a74e002",
"class": "delta-content",
"file": "config.json",
"kind": "value",
"ours": "0000000000000000000000000000000000000000000000000000000000000000",
"path": "xex_header_sha256"
}
],
"file_status": {
"config.json": "diverged",
"cpu_state.json": "diverged",
"kernel.json": "diverged",
"memory.json": "diverged",
"vfs.json": "diverged"
},
"invariants": [
{
"canary": "0x824ab748",
"name": "xex_entry_point",
"ok": true,
"ours": "0x824ab748"
},
{
"canary": "0x824ab748 == 0x824ab748",
"name": "cpu_state.pc == xex_entry_point",
"ok": true,
"ours": "0x824ab748 == 0x824ab748"
},
{
"canary": "a70993b77ca9e29218d033fad7c0b45c874676c4e0edd966545d39b266486a9c",
"name": "image_loaded_sha256",
"ok": false,
"ours": "ea8d160e9369328a5b922258a92113efb8d7ce3e1a5c12cc521e375985c91c18"
}
],
"schema_version": 1,
"stop": true
}

View File

@@ -0,0 +1,98 @@
# Phase B snapshot diff
- canary snapshot: `audit-runs/phase-b-state-equivalence/snap-001/canary`
- ours snapshot: `audit-runs/phase-b-state-equivalence/snap-001/ours`
## Invariants (HARD GATE)
| invariant | canary | ours | ok? |
|---|---|---|---|
| xex_entry_point | `0x824ab748` | `0x824ab748` | PASS |
| cpu_state.pc == xex_entry_point | `0x824ab748 == 0x824ab748` | `0x824ab748 == 0x824ab748` | PASS |
| image_loaded_sha256 | `a70993b77ca9e29218d033fad7c0b45c874676c4e0edd966545d39b266486a9c` | `ea8d160e9369328a5b922258a92113efb8d7ce3e1a5c12cc521e375985c91c18` | FAIL |
> **STOP**: a primary equivalence invariant failed. Downstream divergences are not interpretable until this is resolved. Re-run with `--phase-b-dump-section-content` on both engines and binary-diff the regions to localize.
## File-level summary
| file | status | divergence count by class |
|---|---|---|
| cpu_state.json | diverged | gamma-kernel-content=9 |
| memory.json | diverged | sigma-structural=6 delta-content=4 gamma-kernel-content=17 |
| kernel.json | diverged | sigma-structural=1 delta-content=1 gamma-kernel-content=12 |
| vfs.json | diverged | gamma-kernel-content=5 |
| config.json | diverged | sigma-structural=1 delta-content-STOP=1 delta-content=1 |
## σ-structural divergences (priority 1)
- **memory.json** `regions_walked`: kind=`extra-field` canary=`None` ours=`[]`
- **memory.json** `heaps[base=0x00000000].page_state_histogram.free`: kind=`missing-field` canary=`261991` ours=`None`
- **memory.json** `heaps[base=0x40000000].page_state_histogram.free`: kind=`missing-field` canary=`16098` ours=`None`
- **memory.json** `heaps[base=0x80000000].page_state_histogram.free`: kind=`missing-field` canary=`3950` ours=`None`
- **memory.json** `heaps[base=0x90000000].page_state_histogram.free`: kind=`missing-field` canary=`65536` ours=`None`
- **memory.json** `heaps[base=0x90000000].page_state_histogram.committed`: kind=`extra-field` canary=`None` ours=`0`
- **kernel.json** `exports_registered_sample`: kind=`seq-length` canary=`0` ours=`32`
- **config.json** `cvars.phase_a_event_log_path`: kind=`missing-field` canary=`''` ours=`None`
## δ-content STOP divergences
- **config.json** `image_loaded_sha256`: kind=`value` canary=`'a70993b77ca9e29218d033fad7c0b45c874676c4e0edd966545d39b266486a9c'` ours=`'ea8d160e9369328a5b922258a92113efb8d7ce3e1a5c12cc521e375985c91c18'`
## δ-content divergences (priority 2)
- **memory.json** `regions[0].sha256`: kind=`value` canary=`'ad7facb2586fc6e966c004d7d1d16b024f5805ff7cb47c7a85dabd8b48892ca7'` ours=`'30e14955ebf1352266dc2ff8067e68104607e750abb9d3b36582b8af909fcb58'`
- **memory.json** `regions[1].sha256`: kind=`value` canary=`'2390751521f95a4c513da387bc2ee8a82c5b9261bfc565be5e108fafbda61cf3'` ours=`'ad7facb2586fc6e966c004d7d1d16b024f5805ff7cb47c7a85dabd8b48892ca7'`
- **memory.json** `regions[2].sha256`: kind=`value` canary=`'07854d2fef297a06ba81685e660c332de36d5d18d546927d30daad6d7fda1541'` ours=`'e35cddaf9c210aed7505ec4cf1c599f58ac2b7ec25b0885db1ee49aba2db519a'`
- **memory.json** `regions[3].sha256`: kind=`value` canary=`'a70993b77ca9e29218d033fad7c0b45c874676c4e0edd966545d39b266486a9c'` ours=`'ea8d160e9369328a5b922258a92113efb8d7ce3e1a5c12cc521e375985c91c18'`
- **kernel.json** `exports_registered_sha256`: kind=`value` canary=`'0000000000000000000000000000000000000000000000000000000000000000'` ours=`'bb97815f82b2313c9eaa07bf80dab47c5c23408c24203a1283dfb2aba1e84e09'`
- **config.json** `xex_header_sha256`: kind=`value` canary=`'ccf935d24a74e002'` ours=`'0000000000000000000000000000000000000000000000000000000000000000'`
## γ-kernel-content divergences (priority 2)
- **cpu_state.json** `gpr[1]`: kind=`value` canary=`'0x00000000701d0000'` ours=`'0x00000000700fff00'`
- **cpu_state.json** `gpr[13]`: kind=`value` canary=`'0x0000000030028000'` ours=`'0x000000007fff0000'`
- **cpu_state.json** `lr`: kind=`value` canary=`'0x0000000000000000'` ours=`'0x00000000bcbcbcbc'`
- **cpu_state.json** `pcr_base`: kind=`value` canary=`'0x30028000'` ours=`'0x7fff0000'`
- **cpu_state.json** `stack_base`: kind=`value` canary=`'0x701d0000'` ours=`'0x00000000'`
- **cpu_state.json** `stack_limit`: kind=`value` canary=`'0x70150000'` ours=`'0x00000000'`
- **cpu_state.json** `thread_id`: kind=`value` canary=`6` ours=`1`
- **cpu_state.json** `tls_base`: kind=`value` canary=`'0x30027000'` ours=`'0x00000000'`
- **cpu_state.json** `vscr`: kind=`value` canary=`'00000000000000000000000000000100'` ours=`'00000000000000000000000000010000'`
- **memory.json** `committed_pages_total`: kind=`value` canary=`2466` ours=`2594`
- **memory.json** `heaps[base=0x00000000].page_state_histogram.committed`: kind=`value` canary=`153` ours=`0`
- **memory.json** `heaps[base=0x40000000].page_size`: kind=`value` canary=`65536` ours=`4096`
- **memory.json** `heaps[base=0x40000000].page_state_histogram.committed`: kind=`value` canary=`30` ours=`263`
- **memory.json** `heaps[base=0x40000000].size`: kind=`value` canary=`'0x3f000000'` ours=`'0x40000000'`
- **memory.json** `heaps[base=0x80000000].page_size`: kind=`value` canary=`65536` ours=`4096`
- **memory.json** `heaps[base=0x80000000].page_state_histogram.committed`: kind=`value` canary=`146` ours=`2336`
- **memory.json** `heaps[base=0x80000000].size`: kind=`value` canary=`'0x10000000'` ours=`'0x40000000'`
- **memory.json** `heaps[base=0x90000000].size`: kind=`value` canary=`'0x10000000'` ours=`'0x40000000'`
- **memory.json** `regions[0].byte_count`: kind=`value` canary=`4096` ours=`1048576`
- **memory.json** `regions[0].end`: kind=`value` canary=`'0x30028000'` ours=`'0x70100000'`
- **memory.json** `regions[0].start`: kind=`value` canary=`'0x30027000'` ours=`'0x70000000'`
- **memory.json** `regions[1].end`: kind=`value` canary=`'0x30029000'` ours=`'0x7ffe1000'`
- **memory.json** `regions[1].start`: kind=`value` canary=`'0x30028000'` ours=`'0x7ffe0000'`
- **memory.json** `regions[2].byte_count`: kind=`value` canary=`524288` ours=`4096`
- **memory.json** `regions[2].end`: kind=`value` canary=`'0x701d0000'` ours=`'0x7fff1000'`
- **memory.json** `regions[2].start`: kind=`value` canary=`'0x70150000'` ours=`'0x7fff0000'`
- **kernel.json** `objects[handle_semantic_id=0d6236cd0677766b]`: kind=`missing-from-ours` canary=`'0d6236cd0677766b'` ours=`None`
- **kernel.json** `objects[handle_semantic_id=0d8cd68a54c991e3]`: kind=`missing-from-ours` canary=`'0d8cd68a54c991e3'` ours=`None`
- **kernel.json** `objects[handle_semantic_id=0db6fd47a31adfc0]`: kind=`missing-from-ours` canary=`'0db6fd47a31adfc0'` ours=`None`
- **kernel.json** `objects[handle_semantic_id=0e8c94fa2ab636b3]`: kind=`missing-from-ours` canary=`'0e8c94fa2ab636b3'` ours=`None`
- **kernel.json** `objects[handle_semantic_id=20b2d85926bc7b11]`: kind=`missing-from-ours` canary=`'20b2d85926bc7b11'` ours=`None`
- **kernel.json** `objects[handle_semantic_id=20b37f5926bd96d6]`: kind=`missing-from-ours` canary=`'20b37f5926bd96d6'` ours=`None`
- **kernel.json** `objects[handle_semantic_id=20de1f16750fb24e]`: kind=`missing-from-ours` canary=`'20de1f16750fb24e'` ours=`None`
- **kernel.json** `objects[handle_semantic_id=89cc99291d29ed5c]`: kind=`missing-from-ours` canary=`'89cc99291d29ed5c'` ours=`None`
- **kernel.json** `objects[handle_semantic_id=8d4ce6ee5f4e68af]`: kind=`missing-from-ours` canary=`'8d4ce6ee5f4e68af'` ours=`None`
- **kernel.json** `objects[handle_semantic_id=8d7786abada08427]`: kind=`missing-from-ours` canary=`'8d7786abada08427'` ours=`None`
- **kernel.json** `objects[handle_semantic_id=a0c8cf37cde6a492]`: kind=`missing-from-ours` canary=`'a0c8cf37cde6a492'` ours=`None`
- **kernel.json** `objects[handle_semantic_id=9879c5053fedb1d0]`: kind=`extra-in-ours` canary=`None` ours=`'9879c5053fedb1d0'`
- **vfs.json** `resolve_path_probes[0].size`: kind=`type-mismatch` canary=`0` ours=`None`
- **vfs.json** `resolve_path_probes[2].is_directory`: kind=`type-mismatch` canary=`True` ours=`None`
- **vfs.json** `resolve_path_probes[2].resolved`: kind=`value` canary=`True` ours=`False`
- **vfs.json** `resolve_path_probes[2].size`: kind=`type-mismatch` canary=`4096` ours=`None`
- **vfs.json** `resolve_path_probes[6].size`: kind=`type-mismatch` canary=`0` ours=`None`
## Phase C handoff
Suggested attack order: σ first (structural), then γ ranked by object type (Thread > Event > Semaphore > Mutex > Timer > File > Other), then δ. ε and τ are catalog-only.

View File

@@ -0,0 +1,25 @@
{
"build_id": "ours-phaseB",
"cvars": {
"phase_b_dump_section_content": false,
"phase_b_snapshot_and_exit": true,
"phase_b_snapshot_dir": "audit-runs/phase-ab-verify/snap-002a"
},
"deterministic_skip": [
"host_ns_at_snapshot",
"wall_clock_iso8601",
"build_id",
"iso_path",
"cvars.phase_b_snapshot_dir"
],
"engine": "ours",
"host_ns_at_snapshot": 0,
"image_loaded_sha256": "ea8d160e9369328a5b922258a92113efb8d7ce3e1a5c12cc521e375985c91c18",
"iso_path": "",
"schema_version": 1,
"wall_clock_iso8601": "epoch:0",
"xex_entry_point": "0x824ab748",
"xex_header_sha256": "0000000000000000000000000000000000000000000000000000000000000000",
"xex_image_base": "0x82000000",
"xex_image_size": 9568256
}

View File

@@ -0,0 +1,234 @@
{
"cr": [
"0x0",
"0x0",
"0x0",
"0x0",
"0x0",
"0x0",
"0x0",
"0x0"
],
"ctr": "0x0000000000000000",
"deterministic_skip": [
"hw_id"
],
"engine": "ours",
"fpr": [
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000"
],
"fpscr": "0x00000000",
"gpr": [
"0x0000000000000000",
"0x00000000700fff00",
"0x0000000020000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x000000007fff0000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000"
],
"hw_id": 0,
"lr": "0x00000000bcbcbcbc",
"msr": "0x0000000000009030",
"pc": "0x824ab748",
"pcr_base": "0x7fff0000",
"schema_version": 1,
"stack_base": "0x00000000",
"stack_limit": "0x00000000",
"thread_id": 1,
"tls_base": "0x00000000",
"vr": [
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000"
],
"vrsave": "0xffffffff",
"vscr": "00000000000000000000000000010000",
"xer": {
"ca": 0,
"ov": 0,
"so": 0,
"tbc": 0
}
}

View File

@@ -0,0 +1,62 @@
{
"deterministic_skip": [
"raw_handle_id",
"exports_registered_count"
],
"engine": "ours",
"exports_registered_count": 199,
"exports_registered_sample": [
"xam.xex!NetDll_WSACleanup",
"xam.xex!NetDll_WSAStartup",
"xam.xex!XGetAVPack",
"xam.xex!XGetGameRegion",
"xam.xex!XGetLanguage",
"xam.xex!XGetVideoMode",
"xam.xex!XMsgInProcessCall",
"xam.xex!XMsgStartIORequest",
"xam.xex!XMsgStartIORequestEx",
"xam.xex!XNotifyGetNext",
"xam.xex!XNotifyPositionUI",
"xam.xex!XamAlloc",
"xam.xex!XamContentClose",
"xam.xex!XamContentCreate",
"xam.xex!XamContentCreateEnumerator",
"xam.xex!XamContentDelete",
"xam.xex!XamContentGetCreator",
"xam.xex!XamContentGetDeviceData",
"xam.xex!XamContentGetDeviceName",
"xam.xex!XamContentGetDeviceState",
"xam.xex!XamContentSetThumbnail",
"xam.xex!XamEnableInactivityProcessing",
"xam.xex!XamEnumerate",
"xam.xex!XamFree",
"xam.xex!XamGetExecutionId",
"xam.xex!XamGetSystemVersion",
"xam.xex!XamInputGetCapabilities",
"xam.xex!XamInputGetKeystrokeEx",
"xam.xex!XamInputGetState",
"xam.xex!XamInputSetState",
"xam.xex!XamLoaderLaunchTitle",
"xam.xex!XamLoaderTerminateTitle"
],
"exports_registered_sha256": "bb97815f82b2313c9eaa07bf80dab47c5c23408c24203a1283dfb2aba1e84e09",
"handle_name_table": [],
"notification_listeners": [],
"objects": [
{
"details": {
"entry_pc": "0x824ab748",
"exit_code": null,
"hw_id": 0,
"is_entry_thread": true,
"thread_id": 1
},
"handle_semantic_id": "9879c5053fedb1d0",
"name": null,
"raw_handle_id": "0x00001000",
"type": "Thread",
"type_code": 5
}
],
"schema_version": 1
}

View File

@@ -0,0 +1,11 @@
{
"engine": "ours",
"files": {
"config.json": "06d39edc1f1877cc8df6e96df34c8835e7cd070da340d146f9b16e931cecb229",
"cpu_state.json": "4e6df54ca1939d08854f3a52b49ed2c5ee0823d63cdecad8a7395203dac5443a",
"kernel.json": "b64ea3a6c14f1b0aaadc6de8adbb894edf636a813120d08028ca096e1d06bacc",
"memory.json": "8ff1253f790f3f2645e9f47fb50fa7b52073ae2e73fe5ef68ff6d53af59681dd",
"vfs.json": "97bb2bda57266d8e0dd1da13309eab5ece43130ef378a0b682917d299e9dc4e1"
},
"schema_version": 1
}

View File

@@ -0,0 +1,84 @@
{
"committed_pages_total": 2594,
"deterministic_skip": [
"host_base_pointer"
],
"engine": "ours",
"guest_address_space_bytes": 4294967296,
"heaps": [
{
"base": "0x00000000",
"name": "v00000000",
"page_size": 4096,
"page_state_histogram": {
"committed": 0
},
"size": "0x40000000"
},
{
"base": "0x40000000",
"name": "v40000000",
"page_size": 4096,
"page_state_histogram": {
"committed": 263
},
"size": "0x40000000"
},
{
"base": "0x80000000",
"name": "v80000000",
"page_size": 4096,
"page_state_histogram": {
"committed": 2336
},
"size": "0x40000000"
},
{
"base": "0x90000000",
"name": "v90000000",
"page_size": 4096,
"page_state_histogram": {
"committed": 0
},
"size": "0x40000000"
}
],
"page_size": 4096,
"regions": [
{
"byte_count": 1048576,
"end": "0x70100000",
"protect": 0,
"section_kind": null,
"sha256": "30e14955ebf1352266dc2ff8067e68104607e750abb9d3b36582b8af909fcb58",
"start": "0x70000000"
},
{
"byte_count": 4096,
"end": "0x7ffe1000",
"protect": 0,
"section_kind": null,
"sha256": "ad7facb2586fc6e966c004d7d1d16b024f5805ff7cb47c7a85dabd8b48892ca7",
"start": "0x7ffe0000"
},
{
"byte_count": 4096,
"end": "0x7fff1000",
"protect": 0,
"section_kind": null,
"sha256": "e35cddaf9c210aed7505ec4cf1c599f58ac2b7ec25b0885db1ee49aba2db519a",
"start": "0x7fff0000"
},
{
"byte_count": 9568256,
"end": "0x82920000",
"protect": 0,
"section_kind": null,
"sha256": "ea8d160e9369328a5b922258a92113efb8d7ce3e1a5c12cc521e375985c91c18",
"start": "0x82000000"
}
],
"regions_walked": [],
"schema_version": 1,
"section_contents": null
}

View File

@@ -0,0 +1,71 @@
{
"cache_root_listing": [],
"deterministic_skip": [
"host_path_realpath"
],
"engine": "ours",
"mounted_devices_observed_count": 1,
"resolve_path_probes": [
{
"is_directory": true,
"path": "\\Device\\Cdrom0",
"resolved": true,
"size": null
},
{
"is_directory": true,
"path": "\\Device\\Cdrom0\\dat",
"resolved": true,
"size": 4096
},
{
"is_directory": null,
"path": "\\Device\\Cdrom0\\dat\\movie",
"resolved": false,
"size": null
},
{
"is_directory": null,
"path": "\\Device\\Cdrom0\\dat\\movie\\opening.bik",
"resolved": false,
"size": null
},
{
"is_directory": false,
"path": "\\Device\\Cdrom0\\default.xex",
"resolved": true,
"size": 3497984
},
{
"is_directory": null,
"path": "\\Device\\HardDisk0\\Partition1",
"resolved": false,
"size": null
},
{
"is_directory": true,
"path": "cache:\\",
"resolved": true,
"size": null
},
{
"is_directory": null,
"path": "cache:\\nonexistent_probe",
"resolved": false,
"size": null
},
{
"is_directory": true,
"path": "game:\\dat",
"resolved": true,
"size": 4096
},
{
"is_directory": false,
"path": "game:\\default.xex",
"resolved": true,
"size": 3497984
}
],
"schema_version": 1
}

View File

@@ -0,0 +1,25 @@
{
"build_id": "ours-phaseB",
"cvars": {
"phase_b_dump_section_content": false,
"phase_b_snapshot_and_exit": true,
"phase_b_snapshot_dir": "audit-runs/phase-ab-verify/snap-002b"
},
"deterministic_skip": [
"host_ns_at_snapshot",
"wall_clock_iso8601",
"build_id",
"iso_path",
"cvars.phase_b_snapshot_dir"
],
"engine": "ours",
"host_ns_at_snapshot": 0,
"image_loaded_sha256": "ea8d160e9369328a5b922258a92113efb8d7ce3e1a5c12cc521e375985c91c18",
"iso_path": "",
"schema_version": 1,
"wall_clock_iso8601": "epoch:0",
"xex_entry_point": "0x824ab748",
"xex_header_sha256": "0000000000000000000000000000000000000000000000000000000000000000",
"xex_image_base": "0x82000000",
"xex_image_size": 9568256
}

View File

@@ -0,0 +1,234 @@
{
"cr": [
"0x0",
"0x0",
"0x0",
"0x0",
"0x0",
"0x0",
"0x0",
"0x0"
],
"ctr": "0x0000000000000000",
"deterministic_skip": [
"hw_id"
],
"engine": "ours",
"fpr": [
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000"
],
"fpscr": "0x00000000",
"gpr": [
"0x0000000000000000",
"0x00000000700fff00",
"0x0000000020000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x000000007fff0000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000"
],
"hw_id": 0,
"lr": "0x00000000bcbcbcbc",
"msr": "0x0000000000009030",
"pc": "0x824ab748",
"pcr_base": "0x7fff0000",
"schema_version": 1,
"stack_base": "0x00000000",
"stack_limit": "0x00000000",
"thread_id": 1,
"tls_base": "0x00000000",
"vr": [
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000"
],
"vrsave": "0xffffffff",
"vscr": "00000000000000000000000000010000",
"xer": {
"ca": 0,
"ov": 0,
"so": 0,
"tbc": 0
}
}

View File

@@ -0,0 +1,62 @@
{
"deterministic_skip": [
"raw_handle_id",
"exports_registered_count"
],
"engine": "ours",
"exports_registered_count": 199,
"exports_registered_sample": [
"xam.xex!NetDll_WSACleanup",
"xam.xex!NetDll_WSAStartup",
"xam.xex!XGetAVPack",
"xam.xex!XGetGameRegion",
"xam.xex!XGetLanguage",
"xam.xex!XGetVideoMode",
"xam.xex!XMsgInProcessCall",
"xam.xex!XMsgStartIORequest",
"xam.xex!XMsgStartIORequestEx",
"xam.xex!XNotifyGetNext",
"xam.xex!XNotifyPositionUI",
"xam.xex!XamAlloc",
"xam.xex!XamContentClose",
"xam.xex!XamContentCreate",
"xam.xex!XamContentCreateEnumerator",
"xam.xex!XamContentDelete",
"xam.xex!XamContentGetCreator",
"xam.xex!XamContentGetDeviceData",
"xam.xex!XamContentGetDeviceName",
"xam.xex!XamContentGetDeviceState",
"xam.xex!XamContentSetThumbnail",
"xam.xex!XamEnableInactivityProcessing",
"xam.xex!XamEnumerate",
"xam.xex!XamFree",
"xam.xex!XamGetExecutionId",
"xam.xex!XamGetSystemVersion",
"xam.xex!XamInputGetCapabilities",
"xam.xex!XamInputGetKeystrokeEx",
"xam.xex!XamInputGetState",
"xam.xex!XamInputSetState",
"xam.xex!XamLoaderLaunchTitle",
"xam.xex!XamLoaderTerminateTitle"
],
"exports_registered_sha256": "bb97815f82b2313c9eaa07bf80dab47c5c23408c24203a1283dfb2aba1e84e09",
"handle_name_table": [],
"notification_listeners": [],
"objects": [
{
"details": {
"entry_pc": "0x824ab748",
"exit_code": null,
"hw_id": 0,
"is_entry_thread": true,
"thread_id": 1
},
"handle_semantic_id": "9879c5053fedb1d0",
"name": null,
"raw_handle_id": "0x00001000",
"type": "Thread",
"type_code": 5
}
],
"schema_version": 1
}

View File

@@ -0,0 +1,11 @@
{
"engine": "ours",
"files": {
"config.json": "332be89dbc9ede421cac7120d7fca124a44ad90309623d72851574e59d83b9b0",
"cpu_state.json": "4e6df54ca1939d08854f3a52b49ed2c5ee0823d63cdecad8a7395203dac5443a",
"kernel.json": "b64ea3a6c14f1b0aaadc6de8adbb894edf636a813120d08028ca096e1d06bacc",
"memory.json": "8ff1253f790f3f2645e9f47fb50fa7b52073ae2e73fe5ef68ff6d53af59681dd",
"vfs.json": "97bb2bda57266d8e0dd1da13309eab5ece43130ef378a0b682917d299e9dc4e1"
},
"schema_version": 1
}

View File

@@ -0,0 +1,84 @@
{
"committed_pages_total": 2594,
"deterministic_skip": [
"host_base_pointer"
],
"engine": "ours",
"guest_address_space_bytes": 4294967296,
"heaps": [
{
"base": "0x00000000",
"name": "v00000000",
"page_size": 4096,
"page_state_histogram": {
"committed": 0
},
"size": "0x40000000"
},
{
"base": "0x40000000",
"name": "v40000000",
"page_size": 4096,
"page_state_histogram": {
"committed": 263
},
"size": "0x40000000"
},
{
"base": "0x80000000",
"name": "v80000000",
"page_size": 4096,
"page_state_histogram": {
"committed": 2336
},
"size": "0x40000000"
},
{
"base": "0x90000000",
"name": "v90000000",
"page_size": 4096,
"page_state_histogram": {
"committed": 0
},
"size": "0x40000000"
}
],
"page_size": 4096,
"regions": [
{
"byte_count": 1048576,
"end": "0x70100000",
"protect": 0,
"section_kind": null,
"sha256": "30e14955ebf1352266dc2ff8067e68104607e750abb9d3b36582b8af909fcb58",
"start": "0x70000000"
},
{
"byte_count": 4096,
"end": "0x7ffe1000",
"protect": 0,
"section_kind": null,
"sha256": "ad7facb2586fc6e966c004d7d1d16b024f5805ff7cb47c7a85dabd8b48892ca7",
"start": "0x7ffe0000"
},
{
"byte_count": 4096,
"end": "0x7fff1000",
"protect": 0,
"section_kind": null,
"sha256": "e35cddaf9c210aed7505ec4cf1c599f58ac2b7ec25b0885db1ee49aba2db519a",
"start": "0x7fff0000"
},
{
"byte_count": 9568256,
"end": "0x82920000",
"protect": 0,
"section_kind": null,
"sha256": "ea8d160e9369328a5b922258a92113efb8d7ce3e1a5c12cc521e375985c91c18",
"start": "0x82000000"
}
],
"regions_walked": [],
"schema_version": 1,
"section_contents": null
}

View File

@@ -0,0 +1,71 @@
{
"cache_root_listing": [],
"deterministic_skip": [
"host_path_realpath"
],
"engine": "ours",
"mounted_devices_observed_count": 1,
"resolve_path_probes": [
{
"is_directory": true,
"path": "\\Device\\Cdrom0",
"resolved": true,
"size": null
},
{
"is_directory": true,
"path": "\\Device\\Cdrom0\\dat",
"resolved": true,
"size": 4096
},
{
"is_directory": null,
"path": "\\Device\\Cdrom0\\dat\\movie",
"resolved": false,
"size": null
},
{
"is_directory": null,
"path": "\\Device\\Cdrom0\\dat\\movie\\opening.bik",
"resolved": false,
"size": null
},
{
"is_directory": false,
"path": "\\Device\\Cdrom0\\default.xex",
"resolved": true,
"size": 3497984
},
{
"is_directory": null,
"path": "\\Device\\HardDisk0\\Partition1",
"resolved": false,
"size": null
},
{
"is_directory": true,
"path": "cache:\\",
"resolved": true,
"size": null
},
{
"is_directory": null,
"path": "cache:\\nonexistent_probe",
"resolved": false,
"size": null
},
{
"is_directory": true,
"path": "game:\\dat",
"resolved": true,
"size": 4096
},
{
"is_directory": false,
"path": "game:\\default.xex",
"resolved": true,
"size": 3497984
}
],
"schema_version": 1
}

View File

@@ -0,0 +1,25 @@
{
"build_id": "ours-phaseB",
"cvars": {
"phase_b_dump_section_content": false,
"phase_b_snapshot_and_exit": true,
"phase_b_snapshot_dir": "audit-runs/phase-ab-verify/snap-002c"
},
"deterministic_skip": [
"host_ns_at_snapshot",
"wall_clock_iso8601",
"build_id",
"iso_path",
"cvars.phase_b_snapshot_dir"
],
"engine": "ours",
"host_ns_at_snapshot": 0,
"image_loaded_sha256": "ea8d160e9369328a5b922258a92113efb8d7ce3e1a5c12cc521e375985c91c18",
"iso_path": "",
"schema_version": 1,
"wall_clock_iso8601": "epoch:0",
"xex_entry_point": "0x824ab748",
"xex_header_sha256": "0000000000000000000000000000000000000000000000000000000000000000",
"xex_image_base": "0x82000000",
"xex_image_size": 9568256
}

View File

@@ -0,0 +1,234 @@
{
"cr": [
"0x0",
"0x0",
"0x0",
"0x0",
"0x0",
"0x0",
"0x0",
"0x0"
],
"ctr": "0x0000000000000000",
"deterministic_skip": [
"hw_id"
],
"engine": "ours",
"fpr": [
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000"
],
"fpscr": "0x00000000",
"gpr": [
"0x0000000000000000",
"0x00000000700fff00",
"0x0000000020000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x000000007fff0000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000"
],
"hw_id": 0,
"lr": "0x00000000bcbcbcbc",
"msr": "0x0000000000009030",
"pc": "0x824ab748",
"pcr_base": "0x7fff0000",
"schema_version": 1,
"stack_base": "0x00000000",
"stack_limit": "0x00000000",
"thread_id": 1,
"tls_base": "0x00000000",
"vr": [
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000"
],
"vrsave": "0xffffffff",
"vscr": "00000000000000000000000000010000",
"xer": {
"ca": 0,
"ov": 0,
"so": 0,
"tbc": 0
}
}

View File

@@ -0,0 +1,62 @@
{
"deterministic_skip": [
"raw_handle_id",
"exports_registered_count"
],
"engine": "ours",
"exports_registered_count": 199,
"exports_registered_sample": [
"xam.xex!NetDll_WSACleanup",
"xam.xex!NetDll_WSAStartup",
"xam.xex!XGetAVPack",
"xam.xex!XGetGameRegion",
"xam.xex!XGetLanguage",
"xam.xex!XGetVideoMode",
"xam.xex!XMsgInProcessCall",
"xam.xex!XMsgStartIORequest",
"xam.xex!XMsgStartIORequestEx",
"xam.xex!XNotifyGetNext",
"xam.xex!XNotifyPositionUI",
"xam.xex!XamAlloc",
"xam.xex!XamContentClose",
"xam.xex!XamContentCreate",
"xam.xex!XamContentCreateEnumerator",
"xam.xex!XamContentDelete",
"xam.xex!XamContentGetCreator",
"xam.xex!XamContentGetDeviceData",
"xam.xex!XamContentGetDeviceName",
"xam.xex!XamContentGetDeviceState",
"xam.xex!XamContentSetThumbnail",
"xam.xex!XamEnableInactivityProcessing",
"xam.xex!XamEnumerate",
"xam.xex!XamFree",
"xam.xex!XamGetExecutionId",
"xam.xex!XamGetSystemVersion",
"xam.xex!XamInputGetCapabilities",
"xam.xex!XamInputGetKeystrokeEx",
"xam.xex!XamInputGetState",
"xam.xex!XamInputSetState",
"xam.xex!XamLoaderLaunchTitle",
"xam.xex!XamLoaderTerminateTitle"
],
"exports_registered_sha256": "bb97815f82b2313c9eaa07bf80dab47c5c23408c24203a1283dfb2aba1e84e09",
"handle_name_table": [],
"notification_listeners": [],
"objects": [
{
"details": {
"entry_pc": "0x824ab748",
"exit_code": null,
"hw_id": 0,
"is_entry_thread": true,
"thread_id": 1
},
"handle_semantic_id": "9879c5053fedb1d0",
"name": null,
"raw_handle_id": "0x00001000",
"type": "Thread",
"type_code": 5
}
],
"schema_version": 1
}

View File

@@ -0,0 +1,11 @@
{
"engine": "ours",
"files": {
"config.json": "b7dd769ac76b2fb0ec22d3dec66f1e8fc28b3958c0114079bd7527ade85dde5e",
"cpu_state.json": "4e6df54ca1939d08854f3a52b49ed2c5ee0823d63cdecad8a7395203dac5443a",
"kernel.json": "b64ea3a6c14f1b0aaadc6de8adbb894edf636a813120d08028ca096e1d06bacc",
"memory.json": "8ff1253f790f3f2645e9f47fb50fa7b52073ae2e73fe5ef68ff6d53af59681dd",
"vfs.json": "97bb2bda57266d8e0dd1da13309eab5ece43130ef378a0b682917d299e9dc4e1"
},
"schema_version": 1
}

View File

@@ -0,0 +1,84 @@
{
"committed_pages_total": 2594,
"deterministic_skip": [
"host_base_pointer"
],
"engine": "ours",
"guest_address_space_bytes": 4294967296,
"heaps": [
{
"base": "0x00000000",
"name": "v00000000",
"page_size": 4096,
"page_state_histogram": {
"committed": 0
},
"size": "0x40000000"
},
{
"base": "0x40000000",
"name": "v40000000",
"page_size": 4096,
"page_state_histogram": {
"committed": 263
},
"size": "0x40000000"
},
{
"base": "0x80000000",
"name": "v80000000",
"page_size": 4096,
"page_state_histogram": {
"committed": 2336
},
"size": "0x40000000"
},
{
"base": "0x90000000",
"name": "v90000000",
"page_size": 4096,
"page_state_histogram": {
"committed": 0
},
"size": "0x40000000"
}
],
"page_size": 4096,
"regions": [
{
"byte_count": 1048576,
"end": "0x70100000",
"protect": 0,
"section_kind": null,
"sha256": "30e14955ebf1352266dc2ff8067e68104607e750abb9d3b36582b8af909fcb58",
"start": "0x70000000"
},
{
"byte_count": 4096,
"end": "0x7ffe1000",
"protect": 0,
"section_kind": null,
"sha256": "ad7facb2586fc6e966c004d7d1d16b024f5805ff7cb47c7a85dabd8b48892ca7",
"start": "0x7ffe0000"
},
{
"byte_count": 4096,
"end": "0x7fff1000",
"protect": 0,
"section_kind": null,
"sha256": "e35cddaf9c210aed7505ec4cf1c599f58ac2b7ec25b0885db1ee49aba2db519a",
"start": "0x7fff0000"
},
{
"byte_count": 9568256,
"end": "0x82920000",
"protect": 0,
"section_kind": null,
"sha256": "ea8d160e9369328a5b922258a92113efb8d7ce3e1a5c12cc521e375985c91c18",
"start": "0x82000000"
}
],
"regions_walked": [],
"schema_version": 1,
"section_contents": null
}

View File

@@ -0,0 +1,71 @@
{
"cache_root_listing": [],
"deterministic_skip": [
"host_path_realpath"
],
"engine": "ours",
"mounted_devices_observed_count": 1,
"resolve_path_probes": [
{
"is_directory": true,
"path": "\\Device\\Cdrom0",
"resolved": true,
"size": null
},
{
"is_directory": true,
"path": "\\Device\\Cdrom0\\dat",
"resolved": true,
"size": 4096
},
{
"is_directory": null,
"path": "\\Device\\Cdrom0\\dat\\movie",
"resolved": false,
"size": null
},
{
"is_directory": null,
"path": "\\Device\\Cdrom0\\dat\\movie\\opening.bik",
"resolved": false,
"size": null
},
{
"is_directory": false,
"path": "\\Device\\Cdrom0\\default.xex",
"resolved": true,
"size": 3497984
},
{
"is_directory": null,
"path": "\\Device\\HardDisk0\\Partition1",
"resolved": false,
"size": null
},
{
"is_directory": true,
"path": "cache:\\",
"resolved": true,
"size": null
},
{
"is_directory": null,
"path": "cache:\\nonexistent_probe",
"resolved": false,
"size": null
},
{
"is_directory": true,
"path": "game:\\dat",
"resolved": true,
"size": 4096
},
{
"is_directory": false,
"path": "game:\\default.xex",
"resolved": true,
"size": 3497984
}
],
"schema_version": 1
}

View File

@@ -0,0 +1,25 @@
{
"build_id": "ours-phaseB",
"cvars": {
"phase_b_dump_section_content": false,
"phase_b_snapshot_and_exit": true,
"phase_b_snapshot_dir": "audit-runs/phase-ab-verify/snap-002c"
},
"deterministic_skip": [
"host_ns_at_snapshot",
"wall_clock_iso8601",
"build_id",
"iso_path",
"cvars.phase_b_snapshot_dir"
],
"engine": "ours",
"host_ns_at_snapshot": 0,
"image_loaded_sha256": "ea8d160e9369328a5b922258a92113efb8d7ce3e1a5c12cc521e375985c91c18",
"iso_path": "",
"schema_version": 1,
"wall_clock_iso8601": "epoch:0",
"xex_entry_point": "0x824ab748",
"xex_header_sha256": "0000000000000000000000000000000000000000000000000000000000000000",
"xex_image_base": "0x82000000",
"xex_image_size": 9568256
}

View File

@@ -0,0 +1,234 @@
{
"cr": [
"0x0",
"0x0",
"0x0",
"0x0",
"0x0",
"0x0",
"0x0",
"0x0"
],
"ctr": "0x0000000000000000",
"deterministic_skip": [
"hw_id"
],
"engine": "ours",
"fpr": [
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000"
],
"fpscr": "0x00000000",
"gpr": [
"0x0000000000000000",
"0x00000000700fff00",
"0x0000000020000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x000000007fff0000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000"
],
"hw_id": 0,
"lr": "0x00000000bcbcbcbc",
"msr": "0x0000000000009030",
"pc": "0x824ab748",
"pcr_base": "0x7fff0000",
"schema_version": 1,
"stack_base": "0x00000000",
"stack_limit": "0x00000000",
"thread_id": 1,
"tls_base": "0x00000000",
"vr": [
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000"
],
"vrsave": "0xffffffff",
"vscr": "00000000000000000000000000010000",
"xer": {
"ca": 0,
"ov": 0,
"so": 0,
"tbc": 0
}
}

View File

@@ -0,0 +1,62 @@
{
"deterministic_skip": [
"raw_handle_id",
"exports_registered_count"
],
"engine": "ours",
"exports_registered_count": 199,
"exports_registered_sample": [
"xam.xex!NetDll_WSACleanup",
"xam.xex!NetDll_WSAStartup",
"xam.xex!XGetAVPack",
"xam.xex!XGetGameRegion",
"xam.xex!XGetLanguage",
"xam.xex!XGetVideoMode",
"xam.xex!XMsgInProcessCall",
"xam.xex!XMsgStartIORequest",
"xam.xex!XMsgStartIORequestEx",
"xam.xex!XNotifyGetNext",
"xam.xex!XNotifyPositionUI",
"xam.xex!XamAlloc",
"xam.xex!XamContentClose",
"xam.xex!XamContentCreate",
"xam.xex!XamContentCreateEnumerator",
"xam.xex!XamContentDelete",
"xam.xex!XamContentGetCreator",
"xam.xex!XamContentGetDeviceData",
"xam.xex!XamContentGetDeviceName",
"xam.xex!XamContentGetDeviceState",
"xam.xex!XamContentSetThumbnail",
"xam.xex!XamEnableInactivityProcessing",
"xam.xex!XamEnumerate",
"xam.xex!XamFree",
"xam.xex!XamGetExecutionId",
"xam.xex!XamGetSystemVersion",
"xam.xex!XamInputGetCapabilities",
"xam.xex!XamInputGetKeystrokeEx",
"xam.xex!XamInputGetState",
"xam.xex!XamInputSetState",
"xam.xex!XamLoaderLaunchTitle",
"xam.xex!XamLoaderTerminateTitle"
],
"exports_registered_sha256": "bb97815f82b2313c9eaa07bf80dab47c5c23408c24203a1283dfb2aba1e84e09",
"handle_name_table": [],
"notification_listeners": [],
"objects": [
{
"details": {
"entry_pc": "0x824ab748",
"exit_code": null,
"hw_id": 0,
"is_entry_thread": true,
"thread_id": 1
},
"handle_semantic_id": "9879c5053fedb1d0",
"name": null,
"raw_handle_id": "0x00001000",
"type": "Thread",
"type_code": 5
}
],
"schema_version": 1
}

View File

@@ -0,0 +1,11 @@
{
"engine": "ours",
"files": {
"config.json": "b7dd769ac76b2fb0ec22d3dec66f1e8fc28b3958c0114079bd7527ade85dde5e",
"cpu_state.json": "4e6df54ca1939d08854f3a52b49ed2c5ee0823d63cdecad8a7395203dac5443a",
"kernel.json": "b64ea3a6c14f1b0aaadc6de8adbb894edf636a813120d08028ca096e1d06bacc",
"memory.json": "8ff1253f790f3f2645e9f47fb50fa7b52073ae2e73fe5ef68ff6d53af59681dd",
"vfs.json": "97bb2bda57266d8e0dd1da13309eab5ece43130ef378a0b682917d299e9dc4e1"
},
"schema_version": 1
}

View File

@@ -0,0 +1,84 @@
{
"committed_pages_total": 2594,
"deterministic_skip": [
"host_base_pointer"
],
"engine": "ours",
"guest_address_space_bytes": 4294967296,
"heaps": [
{
"base": "0x00000000",
"name": "v00000000",
"page_size": 4096,
"page_state_histogram": {
"committed": 0
},
"size": "0x40000000"
},
{
"base": "0x40000000",
"name": "v40000000",
"page_size": 4096,
"page_state_histogram": {
"committed": 263
},
"size": "0x40000000"
},
{
"base": "0x80000000",
"name": "v80000000",
"page_size": 4096,
"page_state_histogram": {
"committed": 2336
},
"size": "0x40000000"
},
{
"base": "0x90000000",
"name": "v90000000",
"page_size": 4096,
"page_state_histogram": {
"committed": 0
},
"size": "0x40000000"
}
],
"page_size": 4096,
"regions": [
{
"byte_count": 1048576,
"end": "0x70100000",
"protect": 0,
"section_kind": null,
"sha256": "30e14955ebf1352266dc2ff8067e68104607e750abb9d3b36582b8af909fcb58",
"start": "0x70000000"
},
{
"byte_count": 4096,
"end": "0x7ffe1000",
"protect": 0,
"section_kind": null,
"sha256": "ad7facb2586fc6e966c004d7d1d16b024f5805ff7cb47c7a85dabd8b48892ca7",
"start": "0x7ffe0000"
},
{
"byte_count": 4096,
"end": "0x7fff1000",
"protect": 0,
"section_kind": null,
"sha256": "e35cddaf9c210aed7505ec4cf1c599f58ac2b7ec25b0885db1ee49aba2db519a",
"start": "0x7fff0000"
},
{
"byte_count": 9568256,
"end": "0x82920000",
"protect": 0,
"section_kind": null,
"sha256": "ea8d160e9369328a5b922258a92113efb8d7ce3e1a5c12cc521e375985c91c18",
"start": "0x82000000"
}
],
"regions_walked": [],
"schema_version": 1,
"section_contents": null
}

View File

@@ -0,0 +1,71 @@
{
"cache_root_listing": [],
"deterministic_skip": [
"host_path_realpath"
],
"engine": "ours",
"mounted_devices_observed_count": 1,
"resolve_path_probes": [
{
"is_directory": true,
"path": "\\Device\\Cdrom0",
"resolved": true,
"size": null
},
{
"is_directory": true,
"path": "\\Device\\Cdrom0\\dat",
"resolved": true,
"size": 4096
},
{
"is_directory": null,
"path": "\\Device\\Cdrom0\\dat\\movie",
"resolved": false,
"size": null
},
{
"is_directory": null,
"path": "\\Device\\Cdrom0\\dat\\movie\\opening.bik",
"resolved": false,
"size": null
},
{
"is_directory": false,
"path": "\\Device\\Cdrom0\\default.xex",
"resolved": true,
"size": 3497984
},
{
"is_directory": null,
"path": "\\Device\\HardDisk0\\Partition1",
"resolved": false,
"size": null
},
{
"is_directory": true,
"path": "cache:\\",
"resolved": true,
"size": null
},
{
"is_directory": null,
"path": "cache:\\nonexistent_probe",
"resolved": false,
"size": null
},
{
"is_directory": true,
"path": "game:\\dat",
"resolved": true,
"size": 4096
},
{
"is_directory": false,
"path": "game:\\default.xex",
"resolved": true,
"size": 3497984
}
],
"schema_version": 1
}

View File

@@ -0,0 +1,26 @@
{
"schema_version": 1,
"engine": "canary",
"build_id": "canary-phaseB",
"iso_path": "\\Device\\Cdrom0\\default.xex",
"xex_entry_point": "0x824ab748",
"xex_image_base": "0x82000000",
"xex_image_size": 9568256,
"image_loaded_sha256": "a70993b77ca9e29218d033fad7c0b45c874676c4e0edd966545d39b266486a9c",
"xex_header_sha256": "ccf935d24a74e002",
"cvars": {
"phase_a_event_log_path": "",
"phase_b_dump_section_content": false,
"phase_b_snapshot_and_exit": true,
"phase_b_snapshot_dir": "Z:\\home\\fabi\\RE - Project Sylpheed\\xenia-rs\\audit-runs\\phase-ab-verify\\snap-canary-002"
},
"wall_clock_iso8601": "epoch:1778703060",
"host_ns_at_snapshot": 0,
"deterministic_skip": [
"host_ns_at_snapshot",
"wall_clock_iso8601",
"build_id",
"iso_path",
"cvars.phase_b_snapshot_dir"
]
}

View File

@@ -0,0 +1,234 @@
{
"schema_version": 1,
"engine": "canary",
"pc": "0x824ab748",
"lr": "0x0000000000000000",
"ctr": "0x0000000000000000",
"msr": "0x0000000000009030",
"vrsave": "0xffffffff",
"fpscr": "0x00000000",
"xer": {
"ca": 0,
"ov": 0,
"so": 0,
"tbc": 0
},
"cr": [
"0x0",
"0x0",
"0x0",
"0x0",
"0x0",
"0x0",
"0x0",
"0x0"
],
"gpr": [
"0x0000000000000000",
"0x00000000701d0000",
"0x0000000020000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000030028000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000"
],
"fpr": [
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000",
"0x0000000000000000"
],
"vr": [
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000",
"00000000000000000000000000000000"
],
"vscr": "00000000000000000000000000000100",
"thread_id": 6,
"hw_id": 0,
"stack_base": "0x701d0000",
"stack_limit": "0x70150000",
"tls_base": "0x30027000",
"pcr_base": "0x30028000",
"deterministic_skip": [
"hw_id"
]
}

View File

@@ -0,0 +1,151 @@
{
"schema_version": 1,
"engine": "canary",
"objects": [
{
"details": {
"ctx_ptr": "0x00000000",
"entry_pc": "0x00000000",
"is_entry_thread": false,
"priority": 0,
"stack_size": 131072,
"suspended": false,
"thread_id": 3
},
"handle_semantic_id": "0d6236cd0677766b",
"name": null,
"raw_handle_id": "0x01000018",
"type": "Thread",
"type_code": 5
},
{
"details": {
"ctx_ptr": "0x00000000",
"entry_pc": "0x00000000",
"is_entry_thread": false,
"priority": 0,
"stack_size": 131072,
"suspended": false,
"thread_id": 1
},
"handle_semantic_id": "0d8cd68a54c991e3",
"name": null,
"raw_handle_id": "0x01000010",
"type": "Thread",
"type_code": 5
},
{
"details": {
"ctx_ptr": "0x00000000",
"entry_pc": "0x824ab748",
"is_entry_thread": true,
"priority": 13,
"stack_size": 524288,
"suspended": false,
"thread_id": 6
},
"handle_semantic_id": "0db6fd47a31adfc0",
"name": null,
"raw_handle_id": "0xf8000008",
"type": "Thread",
"type_code": 5
},
{
"details": {
"ctx_ptr": "0x00000000",
"entry_pc": "0x00000000",
"is_entry_thread": false,
"priority": 5,
"stack_size": 131072,
"suspended": false,
"thread_id": 5
},
"handle_semantic_id": "0e8c94fa2ab636b3",
"name": null,
"raw_handle_id": "0x01000020",
"type": "Thread",
"type_code": 5
},
{
"details": {},
"handle_semantic_id": "20b2d85926bc7b11",
"name": null,
"raw_handle_id": "0xf8000004",
"type": "Module",
"type_code": 8
},
{
"details": {},
"handle_semantic_id": "20b37f5926bd96d6",
"name": null,
"raw_handle_id": "0x01000004",
"type": "Module",
"type_code": 8
},
{
"details": {},
"handle_semantic_id": "20de1f16750fb24e",
"name": null,
"raw_handle_id": "0x0100000c",
"type": "Module",
"type_code": 8
},
{
"details": {},
"handle_semantic_id": "89cc99291d29ed5c",
"name": null,
"raw_handle_id": "0xf8000000",
"type": "Event",
"type_code": 1
},
{
"details": {
"ctx_ptr": "0x00000000",
"entry_pc": "0x00000000",
"is_entry_thread": false,
"priority": 5,
"stack_size": 131072,
"suspended": false,
"thread_id": 4
},
"handle_semantic_id": "8d4ce6ee5f4e68af",
"name": null,
"raw_handle_id": "0x0100001c",
"type": "Thread",
"type_code": 5
},
{
"details": {
"ctx_ptr": "0x00000000",
"entry_pc": "0x00000000",
"is_entry_thread": false,
"priority": 0,
"stack_size": 131072,
"suspended": false,
"thread_id": 2
},
"handle_semantic_id": "8d7786abada08427",
"name": null,
"raw_handle_id": "0x01000014",
"type": "Thread",
"type_code": 5
},
{
"details": {},
"handle_semantic_id": "a0c8cf37cde6a492",
"name": null,
"raw_handle_id": "0x01000008",
"type": "Module",
"type_code": 8
}
],
"handle_name_table": [],
"notification_listeners": [],
"exports_registered_count": 0,
"exports_registered_sample": [],
"exports_registered_sha256": "0000000000000000000000000000000000000000000000000000000000000000",
"deterministic_skip": [
"raw_handle_id",
"exports_registered_count"
]
}

View File

@@ -0,0 +1,11 @@
{
"schema_version": 1,
"engine": "canary",
"files": {
"config.json": "fbcaaba400e1fcc39eade7ac54c423ad06bd37cf594c3a3275a64288ff433122",
"cpu_state.json": "b57464533ac776df8d9f752678bca1a9ba7df77adc896eb313766952a50326dd",
"kernel.json": "78affa1cbb3bc93402a9c0e8686c9a632a5ce0b676999e68aad05e972b0dbc7b",
"memory.json": "18e39edfd15ce93042f2fe522254136b55d816df196164d5e2580751d2238e25",
"vfs.json": "93a5ee2826dc85d0d2c0559287a096b2d52e1f84fef8921ad024a1ca18c445ff"
}
}

View File

@@ -0,0 +1,86 @@
{
"schema_version": 1,
"engine": "canary",
"page_size": 4096,
"guest_address_space_bytes": 4294967296,
"heaps": [
{
"base": "0x00000000",
"name": "v00000000",
"page_size": 4096,
"page_state_histogram": {
"committed": 153,
"free": 261991
},
"size": "0x40000000"
},
{
"base": "0x40000000",
"name": "v40000000",
"page_size": 65536,
"page_state_histogram": {
"committed": 30,
"free": 16098
},
"size": "0x3f000000"
},
{
"base": "0x80000000",
"name": "v80000000",
"page_size": 65536,
"page_state_histogram": {
"committed": 146,
"free": 3950
},
"size": "0x10000000"
},
{
"base": "0x90000000",
"name": "v90000000",
"page_size": 4096,
"page_state_histogram": {
"free": 65536
},
"size": "0x10000000"
}
],
"regions": [
{
"byte_count": 4096,
"end": "0x30028000",
"protect": 0,
"section_kind": null,
"sha256": "ad7facb2586fc6e966c004d7d1d16b024f5805ff7cb47c7a85dabd8b48892ca7",
"start": "0x30027000"
},
{
"byte_count": 4096,
"end": "0x30029000",
"protect": 0,
"section_kind": null,
"sha256": "2390751521f95a4c513da387bc2ee8a82c5b9261bfc565be5e108fafbda61cf3",
"start": "0x30028000"
},
{
"byte_count": 524288,
"end": "0x701d0000",
"protect": 0,
"section_kind": null,
"sha256": "07854d2fef297a06ba81685e660c332de36d5d18d546927d30daad6d7fda1541",
"start": "0x70150000"
},
{
"byte_count": 9568256,
"end": "0x82920000",
"protect": 0,
"section_kind": null,
"sha256": "a70993b77ca9e29218d033fad7c0b45c874676c4e0edd966545d39b266486a9c",
"start": "0x82000000"
}
],
"committed_pages_total": 2466,
"section_contents": null,
"deterministic_skip": [
"host_base_pointer"
]
}

View File

@@ -0,0 +1,71 @@
{
"schema_version": 1,
"engine": "canary",
"resolve_path_probes": [
{
"is_directory": true,
"path": "\\Device\\Cdrom0",
"resolved": true,
"size": 0
},
{
"is_directory": true,
"path": "\\Device\\Cdrom0\\dat",
"resolved": true,
"size": 4096
},
{
"is_directory": true,
"path": "\\Device\\Cdrom0\\dat\\movie",
"resolved": true,
"size": 4096
},
{
"is_directory": null,
"path": "\\Device\\Cdrom0\\dat\\movie\\opening.bik",
"resolved": false,
"size": null
},
{
"is_directory": false,
"path": "\\Device\\Cdrom0\\default.xex",
"resolved": true,
"size": 3497984
},
{
"is_directory": null,
"path": "\\Device\\HardDisk0\\Partition1",
"resolved": false,
"size": null
},
{
"is_directory": true,
"path": "cache:\\",
"resolved": true,
"size": 0
},
{
"is_directory": null,
"path": "cache:\\nonexistent_probe",
"resolved": false,
"size": null
},
{
"is_directory": true,
"path": "game:\\dat",
"resolved": true,
"size": 4096
},
{
"is_directory": false,
"path": "game:\\default.xex",
"resolved": true,
"size": 3497984
}
],
"mounted_devices_observed_count": 1,
"cache_root_listing": [],
"deterministic_skip": [
"host_path_realpath"
]
}

View File

@@ -0,0 +1,292 @@
# Phase A + Phase B verification report
Session: 2026-05-13. Reviewer: WRITE-mode verify pass over Phase A
(`audit-runs/phase-a-diff-harness/`) and Phase B
(`audit-runs/phase-b-state-equivalence/`) deliverables. Discipline:
no Phase C investigation, no XEX sha256 chase, no anchor-on-divergence.
## Outcome
| Phase | Gates | Pre-fix | Post-fix |
|---|---|---|---|
| A | 4 | 4/4 PASS | 4/4 PASS |
| B | 5 | 4/5 PASS — gate 5 produced false-PASS | 5/5 PASS |
| Combined cvar-OFF determinism | 1 | PASS | PASS |
| Diff-tool synthetic edge cases | 5 (each tool) | PASS | PASS |
| Hook-point semantic equivalence | 2 (Phase A + Phase B) | PASS | PASS |
The "false-PASS" pre-fix is HIGH-severity and is detailed in
`Issue-1` below. Without the fix, the negative-test gate of Phase B
silently passed when the test was actually broken — meaning a tampered
snapshot file with an intact manifest copy would have been reported as
"identical" by `diff_state.py`. The Phase B catalog (canary↔ours
divergences) is unaffected by this bug because canary's manifest hashes
legitimately differ from ours's, so the buggy short-circuit never
engaged for any real Phase B comparison.
## Issues found and resolutions
### Issue 1 — HIGH: `diff_state.py` manifest-hash short-circuit trusts
manifests without verification
**Symptom.** Re-running `validation.md` gate 5 verbatim produces
`exit 0` and "0 divergences", *not* the documented `exit 1`. The
mutation (changing `kernel.json` `thread_id: 1``thread_id: 999`) is
silently masked because the gate-5 procedure copies the original
`manifest.json` alongside the mutated file. Both manifests then claim
the same kernel.json hash, so the diff tool's manifest-hash
short-circuit (`if ch == oh: file_status[name] = "identical"`) reports
the file as identical without comparing content.
**Reproduction.** `audit-runs/phase-ab-verify/synthetic-diff-tests/`
plus the verbatim gate-5 procedure (see this report's
`Re-validation gate 5`).
**Fix.** Patched
[`tools/diff-state/diff_state.py`](../../tools/diff-state/diff_state.py)
`diff_directory` to re-hash both files when manifests claim equality
and only short-circuit when the on-disk SHAs match the manifest. When
they don't, a `manifest-hash-mismatch` σ-structural divergence is
emitted *and* the file is fully content-diffed, ensuring no silent
masking.
**Re-validation.**
- Verbatim gate-5 procedure now exits `1` and names the divergence
precisely (`kernel.json objects[handle_semantic_id=…].details.thread_id
canary=1 ours=999`) plus the `manifest-hash-mismatch` σ row.
- Stored Phase B report (`report.md`) regenerates byte-identical
(58 divergences, exit 2 STOP) — no regression on the legitimate
canary↔ours comparison.
- Self-diff of `snap-001/ours` and `snap-001/canary` continues to
return `validate-identical: OK` exit 0 — the optimization still
applies to truthful manifests.
- Inter-run reproducibility tests (`snap-002a/ours` vs `snap-002b/ours`)
also pass `validate-identical`.
### Issue 2 — MEDIUM: `validation.md` gate 5 documents a procedure that
relies on the buggy short-circuit
The gate-5 procedure as written in `validation.md` (and the claim that
it produced `exit 1`) was already inaccurate before this verification.
Either the gate was re-stated from memory rather than re-run at
landing, or the actual run used a different procedure.
**Fix.** Updated
[`audit-runs/phase-b-state-equivalence/validation.md`](../phase-b-state-equivalence/validation.md)
gate-5 entry to (a) keep the verbatim procedure, (b) name *both*
divergences the fixed diff tool now surfaces (`manifest-hash-mismatch`
σ + the actual mutation), and (c) include a footnote describing the
pre-fix bug and pointing at the diff_state.py change.
### Issue 3 — LOW: `validation.md` gate 2 mis-claims canary's snapshot
JSON is sort-keys-sorted
Canary's `phase_b_snapshot.cc` writes JSON via direct `fmt::format`,
emitting keys in **insertion order**`schema_version, engine, pc, lr,
ctr, …`. ours's `phase_b_snapshot.rs` uses `serde_json` which emits
keys alphabetically (`cr, ctr, deterministic_skip, engine, …`). The
diff tool parses both sides into dicts before comparing, so this has
no functional impact on the catalog. It does mean that even
semantically-equivalent snapshots produce mismatching SHAs at the file
level, so the manifest-hash short-circuit in `diff_state.py` never
short-circuits canary↔ours comparisons (the underlying byte content
trivially differs even where the parsed semantics match).
**Fix.** Updated `validation.md` gate-2 entry to describe the actual
behavior accurately.
### Issue 4 — LOW: schema kind count and unwired-list inaccuracies
`audit-runs/phase-a-diff-harness/README.md` claims "Schema v1 declares
11 event kinds" and "wires three" then lists four kinds. Actual count
in `schema-v1.md`: **13 sections** with **16 distinct kind strings**
(`thread.suspend`/`thread.resume` and `vfs.open`/`vfs.read`/`vfs.close`
share their respective sections).
`ours-changes.md` lists six unwired kind families but omits
`thread.suspend`/`thread.resume`. The Rust emitter API has 9 `emit_*`
functions, of which 3 are wired (4 if you count the synthetic
`schema_version` header) and 6 are stubbed. Five additional kinds
have no Rust function yet (`thread.suspend`, `thread.resume`,
`mem.write`, `vfs.open`, `vfs.read`, `vfs.close`).
**Fix.** Updated
[`README.md`](../phase-a-diff-harness/README.md) and
[`ours-changes.md`](../phase-a-diff-harness/ours-changes.md) to
distinguish `wired` / `stubbed` / `not-yet-stubbed` precisely and use
accurate counts. Did **not** add any new emitters or hooks (out of
scope per session brief).
## Per-step verification record
### Step 2 — Combined Phase A + Phase B cvar-OFF determinism
Ran the current `target/release/xenia-rs` (built from sources containing
both Phase A and Phase B) with no Phase A or Phase B cvars set:
```
$ ./target/release/xenia-rs check --stable-digest -n 50000000 \
--out audit-runs/phase-ab-verify/digest-current-cvaroff.json \
"<ISO>"
$ diff audit-runs/phase-a-diff-harness/digest-pre-patch.json \
audit-runs/phase-ab-verify/digest-current-cvaroff.json
# (no output)
```
**PASS.** Combined Phase A + Phase B cvar-OFF binary digest is
byte-identical to the pre-Phase-A baseline.
Verified by `md5sum` that `target/release/xenia-rs` and
`target/release/xenia-rs-phaseB` are byte-identical (current build);
`xenia-rs-phaseA-pre` is older (pre-patch baseline).
### Step 3 — Phase A four gates re-validated
| Gate | Result | Method |
|---|---|---|
| 1 cvar-OFF byte-identical (ours) | ✅ | Step 2 above |
| 1 cvar-OFF canary smoke marker fires | ✅ | Wine 18-s timed run with `--mute=true`; `AUDIT-DEMO-SETUP-BEGIN` and `AUDIT-DEMO-SETUP-GRAPHICS-OK` both observed in `xenia.log`. CONFIG DUMP shows the 5 expected new cvars (2 Phase A + 3 Phase B), all default empty/false. |
| 2 cvar-ON valid JSONL with `schema_version` first line | ✅ | All 121 363 lines of `ours-sanity.jsonl` and 1 635 789 lines of `canary-sanity.jsonl` parse as JSON. Both lead with `{"schema_version":1,…,"kind":"schema_version",…}`. Kind histogram: ours 3:1:1:1 ratio import.call/kernel.call/kernel.return/header (perfect — 40454 each); canary 1:545271:545270:545247 (24 in-flight calls when wineserver killed, expected). |
| 3 ≥100-event matching prefix on tid=6→tid=1 | ✅ | Re-ran `diff_events.py` on stored sanity logs; output **byte-identical** to stored `diff-report.md`. 113 matched events on canary tid=6 → ours tid=1; first divergence at idx 113 (KeQuerySystemTime return_value differs — Phase B/C input). |
| 4 negative test detects corruption at exact index | ✅ | Took first 100 events of `ours-sanity.jsonl` to `/tmp/ours-short.jsonl`; corrupted line 50 (`tid_event_idx=48`) by changing `kind: import.call``kind: kernel.CORRUPT`. Self-diff: exit 0 OK. Corrupt diff: exit 1, `validate-identical: divergence in canary_tid=1 at tid_event_idx=48 (kind: canary='import.call' ours='kernel.CORRUPT')`. |
### Step 4 — Phase B five gates re-validated
| Gate | Result | Method |
|---|---|---|
| 1 cvar-OFF byte-identical (ours) | ✅ | Step 2 above |
| 1 cvar-OFF canary CONFIG DUMP shows 5 expected lines | ✅ | Same Wine smoke run; CONFIG DUMP `[Audit]` section includes `phase_a_event_log_path`, `phase_a_event_log_mem_writes`, `phase_b_dump_section_content`, `phase_b_snapshot_and_exit`, `phase_b_snapshot_dir` with default empty/false values. |
| 2 well-formed snapshots both engines | ✅ | Both snap-001 dirs contain 6 files; all parse as JSON; manifest SHA-256s match recomputed file hashes; ours's JSON is sort-keys-sorted, canary's is insertion-order (note Issue 3). |
| 3 hash-deterministic re-runs | ✅ ours | Two ours runs to different `--phase-b-snapshot-dir`s (`snap-002a` and `snap-002b`): `validate-identical: OK` exit 0. Same-dir re-run (`snap-002c/ours` vs `snap-002c/ours-1`): byte-identical via `diff -r`. |
| 3 hash-deterministic re-runs | ✅ canary | New canary snapshot `snap-canary-002/canary` vs existing `snap-001/canary`: `validate-identical: OK` exit 0. Full diff: 4 of 5 files identical, only `config.json` "diverged" with 0 reportable divergences (path/timestamp fields are skipped). |
| 4 invariant `pc == entry_point == 0x824ab748` both engines | ✅ | Confirmed by inspecting `snap-001/canary/cpu_state.json` and `snap-001/ours/cpu_state.json` — both `pc: "0x824ab748"`; `config.json::xex_entry_point: "0x824ab748"` in both. |
| 4 invariant `image_loaded_sha256` matches | ❌ FAIL → STOP | Reproduced canary `a70993b77ca9e29218d033fad7c0b45c874676c4e0edd966545d39b266486a9c` and ours `ea8d160e9369328a5b922258a92113efb8d7ce3e1a5c12cc521e375985c91c18` across **two independent runs each**. Reproducible STOP condition; this is the documented Phase C handoff, not a Phase B failure. |
| 5 negative test detects mutation | ❌ → ✅ post-fix | Pre-fix: false PASS (Issue 1). Post-fix: exit 1, names both the manifest-hash-mismatch σ and the actual mutation γ. |
### Step 5 — Hook-point semantic equivalence
**Phase A boundary.** Both engines hook at the kernel-export dispatch
boundary (canary: `shim_utils.h::ExportRegistrerHelper::*::Trampoline`;
ours: `state.rs::call_export`). Verified by inspecting the first 113
matched events on the boot thread:
- canary tid=6 [0]: `import.call RtlImageXexHeaderField` (ord=299)
- ours tid=1 [0]: `import.call RtlImageXexHeaderField` (ord=299)
- canary tid=6 [1]: `kernel.call RtlImageXexHeaderField`
- ours tid=1 [1]: `kernel.call RtlImageXexHeaderField`
- canary tid=6 [2]: `kernel.return RtlImageXexHeaderField`
- ours tid=1 [2]: `kernel.return RtlImageXexHeaderField`
The 113-event matching prefix demonstrates the boundary captures the
same kernel-call sequence on the boot thread of each engine through
113 calls.
**Asymmetries.**
- canary's debug build emits some kernel calls that complete before
shim_utils trampoline (24 in-flight calls when `wineserver -k` kills
the process — visible as `kernel.call > kernel.return` count
imbalance). ours's `check -n` exit is clean. Not an asymmetry of the
hook itself.
- ours's `call_export` only emits when an export is `Some(&(name,
func))` in the dispatch table; unimplemented exports take the early
return path and emit nothing. Canary's trampoline is per-shim; if
canary has a shim where ours has no export, only canary will emit a
`kernel.call` for it. This is an inherent boundary asymmetry that
Phase C should be aware of, but it does NOT invalidate the matching
prefix (the first 113 boot-thread calls are all on shared exports).
**Phase B boundary.** Both engines fire the snapshot hook immediately
before the first guest PPC instruction at `entry_point` on the boot
thread. PC == `0x824ab748` in both `cpu_state.json` files; `thread_id`
records the boot thread (canary 6, ours 1). No "instruction count" /
`tbl_tbu` field is captured, but the `pc == entry_pc` invariant is
sufficient: had any instructions executed, PC would have advanced.
**Verdict.** Both Phase A and Phase B hook points are semantically
equivalent across engines for the in-scope event types. Asymmetries
(unimplemented exports, kernel-call-count off-by-N at process kill)
are inherent to the boundaries themselves, not bugs in the harness.
### Step 6 — Diff-tool robustness (5 synthetic edge cases each)
#### `diff_events.py`
| Case | Input | Result |
|---|---|---|
| empty file | `empty.jsonl` | `SystemExit('empty file')` exit 1, no crash |
| single event (header only) | `single-event.jsonl` (just `schema_version`) | Auto-mapping finds no shared first kernel.call → exit 2 with clear message; no crash |
| missing schema header | first line is `import.call` | `SystemExit('first event is not schema_version')` exit 1, clear message |
| mismatched thread tids | canary has only tid=2; ours has only tid=1, no shared first-call name | exit 2 with clear "no tid mapping" message |
| field comparison rules honored | self-diff of `ours-sanity[0:99]` | exit 0; corruption at idx 48 → exit 1 with exact `tid_event_idx=48` named |
#### `diff_state.py`
| Case | Input | Result |
|---|---|---|
| empty snapshot dirs | `ds-empty/canary` and `ds-empty/ours` (no JSON files) | exit 2 STOP (invariants fail because `config.json` missing); 5 missing-file divergences |
| self-diff existing snapshot | `snap-001/ours` against itself | `validate-identical: OK` exit 0 (legitimate manifest match still short-circuits correctly) |
| missing canary dir | `/tmp/does-not-exist-xyz` as canary | exit 2 with "both snapshot dirs must exist" message |
| missing config.json | manifests present (empty) but no JSON files | exit 2 STOP (FileNotFoundError caught in `check_invariants`); 5 missing-file divergences |
| field mutation detection | `snap-001/ours` vs `/tmp/verify-gate5` (kernel.json mutated, manifest copied verbatim) | exit 1 (post-fix); names `manifest-hash-mismatch` σ + actual γ-content divergence |
All synthetic cases handled gracefully; no crashes, exit codes
distinguish failure modes (1 = data divergence; 2 = STOP / invalid
input).
### Step 7 — Schema coverage scope
Schema-v1.md declares **13 sections** (16 distinct kind strings).
Phase A wires:
| status | kinds |
|---|---|
| wired (call sites in `state.rs::call_export` + canary `shim_utils.h`) | `schema_version`, `import.call`, `kernel.call`, `kernel.return` |
| stubbed (Rust `emit_*` exists, no call site) | `thread.create`, `thread.exit`, `handle.create`, `handle.destroy`, `wait.begin`, `wait.end` |
| not-yet-stubbed (no Rust function) | `thread.suspend`, `thread.resume`, `mem.write`, `vfs.open`, `vfs.read`, `vfs.close` |
Documentation updates (Issue 4) clarify which is which. Per session
brief, **NOT** wiring any of the unwired kinds — that is Phase A+ /
Phase C scope.
## Confirmed Phase B `image_loaded_sha256` mismatch (handed to Phase C)
Reproducible across two independent runs of each engine:
- canary: `a70993b77ca9e29218d033fad7c0b45c874676c4e0edd966545d39b266486a9c`
- ours: `ea8d160e9369328a5b922258a92113efb8d7ce3e1a5c12cc521e375985c91c18`
`xex_entry_point` = `0x824ab748` and `cpu_state.pc` = `0x824ab748` in
**both** engines (these match — the snapshot point is equivalent). The
in-memory bytes loaded for the XEX image differ. Per Phase B contract,
this is the catalog finding handed to Phase C; verifier did not
investigate cause. Phase B's documented next-step (re-run with
`--phase-b-dump-section-content`, binary-diff `section_contents[]`)
remains the correct Phase C entry point.
## Files in this directory
| File | Purpose |
|---|---|
| `verification-report.md` | This file. |
| `re-validation.md` | Per-gate post-fix re-validation evidence (compact). |
| `digest-current-cvaroff.json` | Step 2 digest from current build. |
| `regenerated-phase-a-diff-report.md` | `diff_events.py` output on stored sanity logs (byte-identical to stored `diff-report.md`). |
| `regenerated-phase-b-report.md` | `diff_state.py` output on stored snap-001 (pre-fix; byte-identical to stored `report.md`). |
| `regenerated-phase-b-report-postfix.md` | Same, but generated post-fix (also byte-identical). |
| `snap-002a/ours/`, `snap-002b/ours/` | Two independent ours snapshot runs (Phase B gate 3 reproducibility). |
| `snap-002c/ours/`, `snap-002c/ours-1/` | Same-dir ours re-run (byte-equality test). |
| `snap-canary-002/canary/` | Independent canary snapshot run (Phase B gate 3 reproducibility). |
| `coexist/` | Phase A + Phase B cvars enabled simultaneously, ours brief run; jsonl + 5-file snapshot both emitted cleanly. |
| `synthetic-diff-tests/` | Fixtures for Step 6 edge-case tests. |
## Cascade prediction
- A re-verify gates with reproduction: **achieved** — all gates re-run,
reproductions match.
- B identify ≥1 instrumentation bug or doc issue: **achieved**
Issue 1 HIGH (diff tool short-circuit), Issues 24 documentation.
- C fixes land + re-pass all gates: **achieved** — diff_state.py fix +
4 doc fixes; all gates pass post-fix; no regressions.
- D Phase C base is solid going forward: **achieved**, with the
caveat that Issue 3 (canary insertion-order JSON) means inter-engine
manifest-hash short-circuit will never fire, but the fall-through
full-content-diff path covers this correctly.