The clock fix (INSTRUCTIONS_PER_MS 10_000 -> 1_000_000, commit 645feb8) moves
the worker-hub +66 ms render gate from ~660k to ~66M instructions, so the old
-n 50M anchor is now pre-render (swaps=0) and no longer guards boot rendering.
Re-anchor sylpheed_n50m -> sylpheed_n200m: at -n 200M the fixed build renders
steadily (draws=3165, swaps=895) and the stable digest is deterministic across
repeated inline lockstep runs. Renames the golden, updates the test's -n and
doc comment, and refreshes tests/golden/README.md. Per the README's re-baseline
policy (intentional digest move -> separate commit).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
79 lines
3.2 KiB
Markdown
79 lines
3.2 KiB
Markdown
# Sylpheed regression goldens
|
||
|
||
These JSON files anchor `xenia-rs check` digest output for Project Sylpheed.
|
||
|
||
## Files
|
||
|
||
| File | -n | Mode | Captures |
|
||
|------|----|------|----------|
|
||
| `sylpheed_n2m.json` | 2_000_000 | full digest | early boot (swaps=0, no rendering) |
|
||
| `sylpheed_n200m.json` | 200_000_000 | stable-digest | steady boot rendering (draws=3165, swaps=895) |
|
||
|
||
Note: `sylpheed_n200m.json` replaces the former `sylpheed_n50m.json`. The
|
||
intro-video clock fix (`INSTRUCTIONS_PER_MS` 10_000 → 1_000_000) moved the
|
||
worker-hub `+66 ms` render gate to ~66M instr, so 50M is now pre-render
|
||
(swaps=0). Re-anchored to 200M to keep the golden guarding boot rendering.
|
||
|
||
## Stable-digest mode
|
||
|
||
`sylpheed_n200m.json` is captured with `--stable-digest`, which omits
|
||
timing-sensitive counters: `packets` (±2–8% lockstep noise from a GPU thread
|
||
race), `resolves`, `interrupts_delivered`, `interrupts_dropped`,
|
||
`texture_decodes`. The remaining fields are byte-identical across repeated
|
||
lockstep runs at a fixed -n.
|
||
|
||
`sylpheed_n2m.json` predates the stable-digest flag and uses full-digest
|
||
compare. It still works because at -n 2M the GPU pipeline has not produced any
|
||
packets yet — `packets=0` is trivially deterministic.
|
||
|
||
## Circularity hazard
|
||
|
||
Per ORACBUG-001/002/003, these goldens were captured by running the same code
|
||
they validate. They detect **regression** from a known-good snapshot, not
|
||
**correctness**. When a planned fix intentionally moves the digest (e.g. a
|
||
shader fix landing `draws > 0` for the first time), re-baseline the golden as
|
||
a separate commit and reference the audit ID in the message.
|
||
|
||
## Re-baselining
|
||
|
||
```sh
|
||
cargo build --release -p xenia-app
|
||
target/release/xenia-rs check \
|
||
"$SYLPHEED_ISO" \
|
||
-n 200000000 \
|
||
--gpu-inline \
|
||
--stable-digest \
|
||
--out crates/xenia-app/tests/golden/sylpheed_n200m.json
|
||
```
|
||
|
||
## Running the goldens
|
||
|
||
```sh
|
||
cargo test --release -p xenia-app --test sylpheed_oracles -- --ignored --nocapture
|
||
```
|
||
|
||
The tests are `#[ignore]`-gated because each run takes a few seconds, which is
|
||
unacceptable in the default `cargo test` cycle. The ISO path defaults to the
|
||
contributor's local `~/RE Project Sylpheed/Project Sylpheed*.iso` and can be
|
||
overridden via `SYLPHEED_ISO=/path/to/sylpheed.iso`.
|
||
|
||
## n4b canonical-invocation regression anchor (deferred)
|
||
|
||
The audit's recommended next sprint also called for a `sylpheed_n4b.json`
|
||
golden capturing the canonical reference invocation
|
||
`xenia-rs check sylpheed.iso -n 4_000_000_000 --parallel --reservations-table`.
|
||
This is **deferred** because:
|
||
|
||
1. The `--parallel --reservations-table` combination is empirically pathologically
|
||
slow at -n 100M (>32 min per run per the audit memory). At -n 4B the run cost
|
||
is many hours, not the single-session-friendly 5–15 min the original plan
|
||
estimated.
|
||
2. Each phase that intentionally moves rendering counters (C, D, E, F) would
|
||
need a re-baseline of n4b — a significant time cost compounding over the
|
||
sprint.
|
||
|
||
Once the renderer-unblock phases (C+D+E) land and `draws > 0` is confirmed at
|
||
-n 100M lockstep, an n4b artifact may be captured one-shot and stored under
|
||
`audit-runs/post-fix/` (not as a test golden) as a manual regression anchor for
|
||
the canonical invocation.
|