Skip to content

Commit 754f812

Browse files
doublegateclaude
andcommitted
chore(release): cut v1.30.1 "Imprint"
Closes out the provenance/licensing/attribution pass, plus three README corrections that belong with it. ZERO emulation-core behaviour change -- across the source files this pass touched, the only non-comment edit is one test rename. AccuracySNES battery 56/56, scenes 2/2. The AI-assistance disclosure moves to the TOP of the README, as a "Development note" blockquote right after the opening paragraph, matching the sibling project's placement. A disclosure a reader has to scroll 800 lines to find is a disclosure in name only; the License section keeps a pointer. The emulator capability-comparison graphic is removed, along with its now-orphaned asset. It ranked this project against Mesen2, bsnes, Snes9x and ares in a hand-drawn diagram that nothing verified and nothing regenerated -- its own caption already had to disclaim it as "illustrative" and point elsewhere for the real numbers. A comparison that has to disclaim itself is not carrying its weight. The README's AccuracySNES figures were badly stale and are corrected against the generated coverage report: 346 tests at 100% on-cart covering 304 of 443, not "124/124 scoring plus 10 golden vectors"; scenes cover 55, not 3; the host tier covers 2; 361 of 443 total, with the never-sum-the-tiers rule made explicit. The cross-validation line also still said "Mesen2 and snes9x" after ares became a third reference in v1.29.0. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
1 parent e99b5fd commit 754f812

5 files changed

Lines changed: 232 additions & 27 deletions

File tree

‎CHANGELOG.md‎

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,30 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
99

1010
## [Unreleased]
1111

12+
## [1.30.1] "Imprint" - 2026-08-04
13+
1214
### Changed
1315

16+
- **The AI-assistance disclosure moved to the top of the README**, as a `Development note` blockquote
17+
immediately after the opening paragraph — the placement the sibling project uses, so the two read
18+
the same way. A disclosure that a reader has to scroll 800 lines to find is a disclosure in name
19+
only. The License section keeps a one-paragraph pointer rather than repeating it.
20+
21+
- **The emulator capability-comparison graphic is removed**, along with its now-orphaned asset
22+
(`images/RustySNES_Emu-Compare.png`). It ranked this project against Mesen2, bsnes, Snes9x and
23+
ares in a hand-drawn diagram whose contents nothing verified and nothing regenerated — its own
24+
caption already had to disclaim it as "illustrative" and point elsewhere for real numbers. A
25+
comparison that has to disclaim itself is not carrying its weight, and this release is about the
26+
written record matching what can be checked. The measured, always-current figures remain in
27+
`docs/STATUS.md` and the Compatibility and Accuracy table.
28+
29+
- **The README's AccuracySNES figures were badly stale** and are corrected against the generated
30+
coverage report: the battery is **346 tests at 100% on-cart covering 304 of 443** assertions, not
31+
"124 / 124 scoring, plus 10 golden vectors", and rendered scenes cover **55** rather than 3 — with
32+
the third **host-side** tier (2) named, the total stated as **361 of 443**, and the standing rule
33+
that the three tiers are never summed into one figure made explicit. The cross-validation line
34+
also still said "Mesen2 and snes9x" when a third reference (ares) landed in `v1.29.0`.
35+
1436
- **Provenance, licensing and attribution pass — the written record now matches what the code
1537
actually is. Zero emulation-core behaviour change.** Run against `docs/provenance.md`'s playbook.
1638
Across 13 changed source files the **only** non-comment edit is one test *rename*; every other

‎README.md‎

Lines changed: 29 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
</p>
1515

1616
<p align="center">
17-
<a href="https://github.com/doublegate/RustySNES/actions"><img src="https://github.com/doublegate/RustySNES/workflows/CI/badge.svg" alt="Build Status"></a> <a href="#license"><img src="https://img.shields.io/badge/license-MIT%20OR%20Apache--2.0-blue.svg" alt="License: MIT OR Apache-2.0"></a> <a href="https://github.com/doublegate/RustySNES/releases"><img src="https://img.shields.io/badge/version-v1.30.0-blue.svg" alt="Version"></a> <a href="rust-toolchain.toml"><img src="https://img.shields.io/badge/rust-1.96-orange.svg" alt="Rust: 1.96"></a><br>
17+
<a href="https://github.com/doublegate/RustySNES/actions"><img src="https://github.com/doublegate/RustySNES/workflows/CI/badge.svg" alt="Build Status"></a> <a href="#license"><img src="https://img.shields.io/badge/license-MIT%20OR%20Apache--2.0-blue.svg" alt="License: MIT OR Apache-2.0"></a> <a href="https://github.com/doublegate/RustySNES/releases"><img src="https://img.shields.io/badge/version-v1.30.1-blue.svg" alt="Version"></a> <a href="rust-toolchain.toml"><img src="https://img.shields.io/badge/rust-1.96-orange.svg" alt="Rust: 1.96"></a><br>
1818
<a href="#compatibility-and-accuracy"><img src="https://img.shields.io/badge/65C816%20oracle-0--diff-brightgreen.svg" alt="65C816 oracle: 0-diff"></a> <a href="#compatibility-and-accuracy"><img src="https://img.shields.io/badge/SPC700%20oracle-0--diff-brightgreen.svg" alt="SPC700 oracle: 0-diff"></a> <a href="https://doublegate.github.io/RustySNES/"><img src="https://img.shields.io/badge/pages-demo%20%2B%20rustdoc%20%2B%20docs-success.svg" alt="GitHub Pages"></a><br>
1919
<a href="#platform-support"><img src="https://img.shields.io/badge/platform-Windows%20%7C%20Linux%20%7C%20macOS%20%7C%20Web-lightgrey.svg" alt="Platform"></a>
2020
</p>
@@ -27,6 +27,17 @@ pure Rust.** Following the lineage of its predecessor
2727
accuracy bar — a master-clock lockstep scheduler, a strictly-owned bus, and a deterministic audio
2828
resync model.
2929

30+
> **Development note — AI-assisted:** RustySNES is heavily AI-assisted software, built with LLM
31+
> tooling under a human-directed, test-driven workflow (public test ROMs and a first-party
32+
> self-scoring accuracy cartridge as the oracle, a `no_std` core, and continuous CI). The
33+
> repository's own history makes the pace plain — first commit `2026-06-25`, ~120,000 lines of Rust
34+
> across ~480 commits in about six weeks. See
35+
> [`docs/originality-and-provenance.md`](docs/originality-and-provenance.md) for what that means for
36+
> originality and licensing, [`NOTICE`](NOTICE) for attribution, and the
37+
> [Acknowledgments](#acknowledgments) for the references and components it builds on. Accuracy
38+
> claims are meant to be *checked* by running the public suites, not taken on faith; comparisons to
39+
> other emulators are comparisons, not a claim of being "better."
40+
3041
Beyond reference accuracy, RustySNES is a real, playable emulation platform today: a native
3142
desktop shell (`winit` + `wgpu` + `cpal` + `egui`) boots real commercial ROMs with picture, sound,
3243
and control, alongside **11 cartridge coprocessors**, save states with a thumbnail 10-slot
@@ -462,7 +473,8 @@ Run `rustysnes help controls` / `help gamepad` for the full reference.
462473
No *publicly available* SNES ROM plays the role AccuracyCoin plays for the NES, so RustySNES
463474
wrote one: **AccuracySNES** ([`tests/roms/AccuracySNES/`](tests/roms/AccuracySNES/)), a
464475
first-party, dual-MIT/Apache-2.0 self-scoring test cartridge. It runs with no input, publishes its
465-
verdicts to WRAM, and is cross-validated headlessly against Mesen2 and snes9x. The point of the
476+
verdicts to WRAM, and is cross-validated headlessly against **three independent references** —
477+
snes9x, Mesen2, and (as of `v1.29.0`) a headless ares host. The point of the
466478
design is that it needs no host-side expected values: the identical image is meant to run
467479
unmodified on any emulator and, on a flash cart, on a real console — though see the honest ceiling
468480
below, because it has not yet been run on one. Around it, accuracy is a
@@ -472,8 +484,8 @@ here, always current, reaffirmed every release:
472484

473485
| Layer | Result |
474486
| --- | --- |
475-
| AccuracySNES (first-party self-scoring cartridge) | **100.00%** — 124 / 124 scoring, plus 10 golden vectors; agrees with Mesen2 and snes9x on both the NTSC and PAL images |
476-
| AccuracySNES rendered scenes (host framebuffer oracle, [`docs/adr/0013`](docs/adr/0013-accuracysnes-framebuffer-oracle.md)) | **3 / 3 blessed** — reported separately and deliberately **not** folded into the line above, because a rendered scene needs a host holding the golden |
487+
| AccuracySNES (first-party self-scoring cartridge) | **100.00% on-cart** — a 346-test battery covering **304 of 443** enumerated assertions; cross-validated against snes9x, Mesen2 and ares on both the NTSC and PAL images |
488+
| AccuracySNES rendered scenes (host framebuffer oracle, [`docs/adr/0013`](docs/adr/0013-accuracysnes-framebuffer-oracle.md)) | **55 assertions**, all blessed only from a render the references agree on — reported separately and deliberately **not** folded into the line above, because a rendered scene needs a host holding the golden. A third **host-side** tier covers 2 more, admitted only where the cart physically cannot observe the assertion. **361 of 443 in total, never summed into one figure** ([`docs/accuracysnes-coverage.md`](docs/accuracysnes-coverage.md), regenerated with the ROM so it cannot drift) |
477489
| CPU (65C816) per-opcode oracle | **99.994%** — 5,119,710 / 5,120,000; the 290 residuals are emulation-mode cases where SST is the lone outlier vs bsnes/ares/MesenCE/snes9x + AccuracySNES, resolved toward hardware ([`docs/adr/0002`](docs/adr/0002-fractional-timebase-refactor.md), [`docs/cpu.md`](docs/cpu.md)) |
478490
| SPC700 per-opcode oracle | **0-diff, 100.00%** — 256,000 / 256,000 |
479491
| On-cart CPU (gilyon `cputest-basic`) | **green** — 1107 / 1107 "Success" |
@@ -536,14 +548,6 @@ or opt-in flag, so the default/native/`no_std`/wasm builds stay byte-identical w
536548
> oracle suites above, which need `--features test-roms`). When a doc and a passing test ROM
537549
> disagree, **the ROM wins** — that is this project's definition of "cycle-accurate."
538550
539-
<p align="center">
540-
<img src="images/RustySNES_Emu-Compare.png" alt="RustySNES capability comparison against Mesen2, bsnes, Snes9x, and ares" width="800">
541-
</p>
542-
543-
<p align="center"><sub>An illustrative capability comparison against established SNES emulators —
544-
authoritative, always-current pass counts live in <a href="docs/STATUS.md">docs/STATUS.md</a>,
545-
not this diagram.</sub></p>
546-
547551
---
548552

549553
## Performance
@@ -623,7 +627,12 @@ Material-for-MkDocs documentation handbook at
623627

624628
## Current Release
625629

626-
RustySNES's current release is **v1.30.0 "Threshold"** — the last rung before the mobile store
630+
RustySNES's current release is **v1.30.1 "Imprint"** — a provenance, licensing and attribution
631+
release with **zero emulation-core behaviour change**: the written record now matches what the code
632+
actually is. See [`NOTICE`](NOTICE) and
633+
[`docs/originality-and-provenance.md`](docs/originality-and-provenance.md).
634+
635+
It follows **v1.30.0 "Threshold"** — the last rung before the mobile store
627636
gate: an App Store §4.7 mobile-shell supplement, an unsigned Android release build path, an
628637
instrumented UniFFI smoke test that boots a real cartridge on a device, a **51% headless frame-time
629638
recovery** (14.34 ms → 7.03 ms) bisected to a per-dot H-IRQ walk, and a fuzzing campaign that turns
@@ -799,18 +808,12 @@ project's own comments previously described that relationship wrongly, is in
799808
NotoEmoji, Hack, emoji-icon-font). Their licences ship with every release in
800809
[`LICENSES-THIRD-PARTY-FONTS.txt`](LICENSES-THIRD-PARTY-FONTS.txt).
801810

802-
### AI-assistance disclosure
803-
804-
**RustySNES is developed with substantial AI assistance.** The architecture, accuracy methodology,
805-
and engineering judgement are the maintainer's; a large fraction of the code and documentation is
806-
written by an AI coding agent working under that direction. The repository's own history makes the
807-
pace plain — first commit `2026-06-25`, and roughly 120,000 lines of Rust across ~480 commits within
808-
about six weeks — and it is disclosed here rather than left for a reader to infer.
809-
810-
This does not change how the project's accuracy claims should be judged, because those claims are
811-
deliberately built to be checkable without trusting the author: an on-cart battery that scores
812-
itself, three independent reference emulators, and a coverage report regenerated with the artefact
813-
it describes. See [`docs/originality-and-provenance.md`](docs/originality-and-provenance.md).
811+
**AI assistance.** RustySNES is heavily AI-assisted software; the disclosure is at the top of this
812+
README, and [`docs/originality-and-provenance.md`](docs/originality-and-provenance.md) sets out what
813+
that means for originality and licensing. It does not change how the accuracy claims should be
814+
judged, because those claims are built to be checkable without trusting the author: an on-cart
815+
battery that scores itself, three independent reference emulators, and a coverage report regenerated
816+
with the artefact it describes.
814817

815818
---
816819

@@ -859,7 +862,7 @@ If you use RustySNES in academic research, please cite:
859862
author = {RustySNES Contributors},
860863
title = {RustySNES: A Cycle-Accurate SNES Emulator in Rust},
861864
year = {2026},
862-
version = {1.30.0},
865+
version = {1.30.1},
863866
url = {https://github.com/doublegate/RustySNES},
864867
note = {Cycle-accurate SNES/Super Famicom emulator on a master-clock-precise scheduler;
865868
65C816 and SPC700 both 0-diff against their per-opcode oracles; AccuracySNES,

‎docs/STATUS.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
This file is authoritative for per-suite pass counts, the board / coprocessor matrix, and
44
version policy. Everything else defers to it.
55

6-
**Current release:** `v1.30.0 "Threshold"` (`v1.29.0 "Triangulate"`, `v1.28.0 "Plumbline"`,
6+
**Current release:** `v1.30.1 "Imprint"` (`v1.30.0 "Threshold"`, `v1.29.0 "Triangulate"`, `v1.28.0 "Plumbline"`,
77
`v1.27.0 "Tether"`, `v1.26.0 "Bulwark"`, `v1.25.0 "Workbench"`, `v1.24.0 "Ensemble"`, `v1.23.0 "Cadence"`, `v1.22.0 "Horizon"`, `v1.21.0 "Touchstone"`, `v0.1.0 "Foundation"`,
88
`v0.2.0 "Persistence"`, `v0.3.0 "Continuum"`, `v0.4.0 "Completion"`, `v0.5.0 "Fidelity"`,
99
`v0.6.0 "Shippable"`, `v0.7.0 "Resolution"`, `v0.8.0 "Community"`, `v0.9.0 "Threshold"`,

0 commit comments

Comments
 (0)