Commit 7f45e51
chore(release): v1.21.0 "Touchstone" (#237)
* chore(release): v1.21.0 "Touchstone"
Cut v1.21.0, the accuracy release. Two long-running tracks that accumulated in
CHANGELOG's [Unreleased] across the entire v1.8.0-v1.20.0 era (while those rungs
shipped frontend/mobile/shader/CI work with zero change to the emulation core)
are released together, because they are one story told from two ends:
- The per-dot PPU compositor (docs/adr/0014, T-CA-10) is now the emulator's only
renderer. The scanline is composited one column at a time against live
registers, so a mid-line write to CGRAM/OAM/scroll/INIDISP reaches only the
not-yet-drawn columns. The whole-line batch path is removed (single code path),
validated 29/29 on the undisbeliever corpus against a headless MesenCE built
this cycle as both the per-dot blueprint and the exact-frame oracle.
- The first-party AccuracySNES self-scoring cartridge matured into a usable
instrument: an AccuracyCoin-style paged menu, an automatic skyline results
screen, a per-test B-skip, and a Select WRAM debug hex viewer, over a battery
that climbed 323 -> 342 of 443 dossier assertions (289 on-cart + 53 scenes).
Version bump and documentation sync only; no emulator behaviour change beyond
the per-dot compositor already shipped on main. Details:
- Bump the workspace + all 16 crate package versions 1.20.0 -> 1.21.0; refresh
Cargo.lock. Inter-crate dependency floors (^1.4.0) and the historical `v1.20.0`
"added in" annotations in src/docs are deliberately left untouched.
- CHANGELOG.md: rename [Unreleased] -> [1.21.0] "Touchstone" (2026-07-24) with a
comprehensive release intro; open a fresh empty [Unreleased].
- README.md: version badge v1.8.0 -> v1.21.0 (was stale); PPU bullet reworded
from "per-scanline compositor" to the per-dot compositor with an ADR link.
- docs/STATUS.md (single source of truth): current-release pointer v1.9.0 ->
v1.21.0 with the intervening v1.10.0-v1.20.0 ladder summarized; AccuracySNES
accuracy-dashboard row refreshed (123/123 -> 342/443, 330-test battery,
MesenCE cross-check); the rustysnes-ppu subsystem row updated to the per-dot
sole renderer.
- to-dos/VERSION-PLAN.md: new v1.21.0 "Touchstone" rung documenting the full
release scope (per-dot compositor, AccuracySNES instrument, cycle-accuracy
fixes, the Antigravity CI reviewer).
- to-dos/ROADMAP.md: AccuracySNES coverage 255 -> 342 of 443.
- to-dos/TIER1-CYCLE-ACCURACY.md: T-CA-10 marked LANDED (sole renderer).
- docs/accuracy-ledger.md: mid-scanline/HDMA entry deepened to dot resolution.
- docs/accuracysnes-plan.md: "where the battery stands" refreshed (330 tests,
342/443, 53 scenes, on-cart UI row).
- docs/ppu.md: "Rendering model" rewritten from per-scanline-migrating to the
per-dot sole renderer; crates/rustysnes-ppu/src/render.rs module doc likewise.
Gates green: cargo fmt --all --check; cargo clippy --workspace
--exclude rustysnes-android --all-targets -D warnings; RUSTDOCFLAGS=-D warnings
cargo doc; cargo test --workspace (518 passed). .gitignore reviewed (already
covers ref-proj/MesenCE, ROMs, and AccuracySNES build intermediates; no change).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* docs(release): scope the per-dot compositor claim to compose/draw, not fetch
Address the CodeRabbit + Antigravity reviews on the v1.21.0 release PR. The
release notes and the render.rs module doc claimed the per-dot compositor makes
"a mid-line write to CGRAM, OAM, a scroll register, or INIDISP reach only the
not-yet-drawn columns" — over-stating it. Only the compose/draw stage
(pd_render_to_dot) is per-dot; the BG/sprite line fetch (pd_fetch_line) is still
performed line-wide up front, so a mid-line scroll/tilemap/OPT write is NOT yet
reflected on later columns (incremental fetch-ahead is T-CA-10 Phase 4c, not
landed). Corrected the wording consistently — drop "scroll" from the honored
mid-line writes and add the Phase-4c qualifier — across CHANGELOG.md, README-
adjacent docs/STATUS.md (header + PPU subsystem row), to-dos/VERSION-PLAN.md,
docs/ppu.md (Rendering model), docs/accuracy-ledger.md, and the render.rs module
doc (whose second paragraph also still described the removed per-scanline model
as current). Preserves the project's accuracy-honesty posture (no claiming
support/accuracy not actually implemented).
Docs + one module-doc comment only; no code behaviour change. fmt/clippy/doc
gates green on rustysnes-ppu.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* docs(ppu): mark the v0.8.0 mid-scanline section superseded by the per-dot model
The "Rendering model" bullet (now describing the per-dot compositor) referenced
the "Mid-scanline/HDMA-driven register timing" section, whose opening still
described the v0.8.0 per-scanline-at-RENDER_DOT model as current — two
contradictory renderer specs for a reader following the link (CodeRabbit). Add a
prominent "Superseded — historical" banner at the top of that section pointing to
the per-dot compositor (docs/adr/0014) as the current spec, and past-tense its
status line, rather than rewrite the detailed (still-accurate-as-lineage)
v0.8.0 investigation in place. Notes the one part still live: the BG/sprite line
fetch is line-wide (mid-line scroll is Phase 4c).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>1 parent d555351 commit 7f45e51
28 files changed
Lines changed: 185 additions & 89 deletions
File tree
- crates
- rustysnes-android
- rustysnes-apu
- rustysnes-cart
- rustysnes-cheevos
- rustysnes-core
- rustysnes-cpu
- rustysnes-frontend
- rustysnes-gfx-shaders
- rustysnes-ios
- rustysnes-mobile
- rustysnes-monetization
- rustysnes-netplay
- rustysnes-ppu
- src
- rustysnes-savestate
- rustysnes-script
- rustysnes-test-harness
- docs
- to-dos
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
9 | 9 | | |
10 | 10 | | |
11 | 11 | | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
12 | 36 | | |
13 | 37 | | |
14 | 38 | | |
| |||
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
22 | 22 | | |
23 | 23 | | |
24 | 24 | | |
25 | | - | |
| 25 | + | |
26 | 26 | | |
27 | 27 | | |
28 | 28 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
14 | 14 | | |
15 | 15 | | |
16 | 16 | | |
17 | | - | |
| 17 | + | |
18 | 18 | | |
19 | 19 | | |
20 | 20 | | |
| |||
149 | 149 | | |
150 | 150 | | |
151 | 151 | | |
152 | | - | |
153 | | - | |
154 | | - | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
155 | 157 | | |
156 | 158 | | |
157 | 159 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | 3 | | |
4 | | - | |
| 4 | + | |
5 | 5 | | |
6 | 6 | | |
7 | 7 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | | - | |
| 3 | + | |
4 | 4 | | |
5 | 5 | | |
6 | 6 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | | - | |
| 3 | + | |
4 | 4 | | |
5 | 5 | | |
6 | 6 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | 3 | | |
4 | | - | |
| 4 | + | |
5 | 5 | | |
6 | 6 | | |
7 | 7 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | | - | |
| 3 | + | |
4 | 4 | | |
5 | 5 | | |
6 | 6 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | | - | |
| 3 | + | |
4 | 4 | | |
5 | 5 | | |
6 | 6 | | |
| |||
0 commit comments