release: v2.2.5 "Colophon" — provenance, licensing, and documentation integrity - #342
Conversation
… integrity A provenance, licensing, and documentation-integrity release, prompted by community review (NESdev forums) of the project's licensing and its AI-assisted origins. It corrects how RustyNES describes its own provenance — in source comments, in NOTICE, and in the docs — so the written record matches what the code actually is. There are ZERO emulation-core changes: the deterministic `#![no_std]` chip stack, the save-state / TAS / netplay formats, and every golden vector are byte-identical to v2.2.4 by construction, so AccuracyCoin holds 141/141 (100.00%) and nestest is 0-diff. This was re-verified after every edit (AccuracyCoin full + run-ahead, the nestest golden log, the dual-path fast_dotloop differential, and the snapshot-schema audit), and the whole tree passes `cargo fmt`, `clippy -D warnings` (workspace + retroachievements / scripting / hd-pack combos), `rustdoc -D warnings`, markdownlint, and the `thumbv7em-none-eabihf` no_std cross-compile. Motivation A reviewer observed — correctly — that a number of in-source comments described implementations as "ports" of other emulators, including GPL-licensed ones (Mesen2 GPLv3, puNES GPLv2), and that the project's heavy AI assistance was not disclosed. Rather than contest the point, the entire tree was audited (three independent read-only passes over source, docs, assets, and vendored trees) and the provenance record was corrected. The substantive finding: the chip, mapper, and peripheral BEHAVIORS are implemented from public hardware documentation (the NESdev wiki, published datasheets, the documented 6502 unofficial-opcode behavior) and pinned to public test ROMs; reference emulators were consulted only as behavioral ORACLES. Some comments mischaracterized that as "ported from X." No GPL-licensed emulator source is incorporated into RustyNES. Source-comment corrections (behavior byte-identical — comments only) - CPU: the SH* unstable-store helper (cpu.rs) reframed from "faithful port of Mesen2's SyaSxaAxa" to the documented 6502 unstable-store algorithm, pinned by AccuracyCoin's own sub-test, using RustyNES's own bus cycle-count machinery. - PPU: the OAM-data-bus field block, the OAM decay-on-read/write hooks, and the sprite-evaluation per-dot driver (ppu.rs) reframed from "port of Mesen2's ReadSpriteRam / WriteSpriteRam / ProcessSpriteEvaluation" to the NESdev- documented sprite-evaluation and OAM-DRAM-decay models; Mesen2 private-member cross-references and source line-number citations removed. The generated NTSC palette (palette_gen.rs) re-cited to the nesdev-documented Bisqwit method with ares demoted to an oracle. - Mappers: m035 (JY InvertPrgBits), m016 (X24C01/24C02 I2C EEPROM), kaiser (Waixing253), m176 (FK23C + the inner COOLBOY block), m268, m513 (TXC), mmc3_clones (Sachen 8259), multicart_discrete + ntdec (several NTDEC/TXC/BMC boards), sachen_discrete (JV001, formerly "Ported bit-for-bit from puNES JV001.c"), lib.rs (JY Company dispatch), unif.rs (board-name table), fds.rs (per-CRC drive table), and m069 (Sunsoft-5B audio target, re-cited to the blargg nonlinear mixer) — all reframed to register maps / documented hardware behavior cross-checked against reference emulators as oracles. - APU: blip.rs no longer mislabels blip_buf as BSD/MIT (it is LGPL-2.1+); the file is an independent band-limited-step (BLEP) implementation and says so. - pgo_trainer.rs and source_map.rs reworded (independent PGO harness; an independent ca65/cc65 .dbg importer — format interop, not a code port). - A machine-absolute path leak into ref-proj/Mesen2 in opll.rs was removed (retargeted to upstream emu2413), and its ADR cross-reference corrected. Video shaders and NTSC filters (creative expression — reviewed at source level) The CRT shaders (crt_royale, crt_guest, megatron) and the Bisqwit / EMMIR NTSC filters were reviewed. Each is a single-pass shader on RustyNES's own uniform/pipeline conventions and is structurally incompatible with being a translation of the upstream MULTI-pass shader source; copyright protects code expression, not a visual look or a rendering technique. They were reworded from "port / condensation of X" to independent single-pass reimplementations of the look, and the one comment claiming tables were "ported verbatim from Bisqwit's C ... as implemented by Mesen2" was corrected — those tables encode the NESdev- documented two-level NES composite signal. No upstream shader source is incorporated. NOTICE (rewritten for a complete, accurate attribution posture) - Reference emulators (Mesen2/MesenCE, higan, GeraNES, ares, FCEUX, Nestopia UE, puNES) disclosed as behavioral oracles only — no code incorporated. GeraNES (GPL-3.0-only), cited across ~58 files, was previously undisclosed. - Incorporated permissive components attributed with copyright + the MIT text: emu2413 v1.5.9 (Okazaki), TriCNES (Chris Siebert, commit 9199870), rcheevos v12.3.0 (RetroAchievements.org). - Bundled fonts (Font Awesome; Press Start 2P / OFL) and bundled test ROMs (AccuracyCoin MIT; Damian Yerrick Holy Mapperel zlib; blargg / kevtris PD) attributed, and the CRT-shader / NTSC-filter visual influences credited as independent reimplementations. Documentation and assets - New docs/originality-and-provenance.md: an honest account of where RustyNES advances, diverges from, or independently re-derives NES emulation technique (the one-clock timebase, the transistor-literal octal-latch fetch, the machine-checked accuracy-honesty gates, the determinism contract, measured-and- rejected optimizations), the development timeline, an oracle-vs-port classification of every reference, the full license posture, an explicit AI-assistance disclosure, and a "not a superiority claim" note. - README: added an AI-assistance disclosure; removed a comparison graphic with inaccurate details; corrected the mislabeled "sub-cycle accuracy in action" screenshot caption (an early-development image); toned down overstated language; synced Acknowledgments with NOTICE; bumped the version badge and the citation version. - tests/roms/LICENSES.md: fixed a false exclusion claim (four Holy Mapperel mapper ROMs stated as excluded are in fact committed), a stale crate path, and the AccuracyCoin sub-test count; added blanket coverage for the ~150 previously-undocumented committed test ROMs (502 committed .nes total, none commercial). - STATUS.md, AGENTS.md (canonical; CLAUDE.md / GEMINI.md symlink to it), and to-dos/ROADMAP.md synced to v2.2.5 current; .github/release-notes/v2.2.5.md authored for the automated GitHub Release body. - Android app assets gained the SIL OFL text for Press Start 2P (it shipped without the license text OFL 1.1 requires travel with the font; desktop and iOS already carried it). Version and hygiene - Workspace version bumped 2.2.4 -> 2.2.5 (single-sourced; 18 crates inherit), Cargo.lock regenerated, and the libretro rustynes_libretro.info display_version advanced to v2.2.5. - .gitignore gained a nested per-crate `crates/*/target/` rule, and two orphaned build artifacts accidentally tracked under crates/rustynes-test-harness/target/ were untracked. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
📝 WalkthroughWalkthroughRustyNES v2.2.5 updates release metadata, licensing notices, provenance documentation, implementation comments, shader comments, font licensing, and ROM inventory documentation. It also updates package and libretro versions. Emulation behavior remains unchanged. Changesv2.2.5 Colophon release
Estimated code review effort: 2 (Simple) | ~15 minutes Possibly related PRs
🚥 Pre-merge checks | ✅ 9✅ Passed checks (9 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
🟡 Not ready to approve
The new docs/originality-and-provenance.md still states the current release is v2.2.4, which should be corrected to v2.2.5 before tagging/publishing release documentation.
Once you've addressed the issues Copilot identified, you can request another Copilot review.
This review doesn't count toward merge requirements. Sign up for the private preview to control whether Copilot approvals count.
Pull request overview
This PR prepares the v2.2.5 “Colophon” release as a provenance/licensing/documentation-integrity update, explicitly aiming for zero emulation-core behavior changes while correcting and expanding attribution, provenance phrasing, and release metadata across the repo.
Changes:
- Reframes numerous in-source provenance comments from “ported from X” to “implemented from public hardware documentation and cross-checked against oracles,” and updates related docs (
NOTICE, README,docs/STATUS.md, new provenance doc, release notes). - Fixes and expands
tests/roms/LICENSES.mdto better reflect committed ROM coverage and correct stale crate paths. - Bumps workspace + libretro version markers to 2.2.5, and adds missing Android asset licensing text (Press Start 2P OFL) plus a
.gitignorerule for nested cratetarget/dirs.
File summaries
| File | Description |
|---|---|
| to-dos/ROADMAP.md | Updates roadmap narrative to reflect shipped releases through v2.2.5 and future v2.3.0 app-store launch. |
| tests/roms/LICENSES.md | Corrects stale crate paths, removes/adjusts incorrect exclusion wording, and adds blanket documentation for committed ROM directories/counts. |
| README.md | Bumps displayed version, adds AI-assistance disclosure, removes/rewrites comparison content, updates Current Release section + acknowledgments. |
| NOTICE | Major rewrite to clearly separate hardware-doc sources, oracle-only emulators, incorporated permissive components, bundled fonts, visual influences, and test ROM provenance. |
| docs/STATUS.md | Updates “Current release” banner to v2.2.5 and summarizes the provenance/documentation scope of the release. |
| docs/originality-and-provenance.md | New long-form provenance/originality/licensing posture document (but contains one stale “current release” line; see comment). |
| crates/rustynes-test-harness/src/bin/pgo_trainer.rs | Adjusts doc comments to avoid “adapted from Mesen2” phrasing. |
| crates/rustynes-ppu/src/ppu.rs | Rewords PPU provenance comments (OAM bus model, decay hooks, etc.) to cite NESdev docs/oracle cross-checks. |
| crates/rustynes-ppu/src/palette_gen.rs | Rewords palette generation docs to cite NESdev/Bisqwit method and oracle cross-checking. |
| crates/rustynes-mappers/src/unif.rs | Rewords UNIF board-map provenance comments away from “ported from” toward factual data + oracle cross-check framing. |
| crates/rustynes-mappers/src/sachen_discrete.rs | Rewords JV001-related comments/tests to NESdev documentation + oracle framing. |
| crates/rustynes-mappers/src/ntdec.rs | Rewords mapper register-map comments to NESdev documentation + oracle framing. |
| crates/rustynes-mappers/src/multicart_discrete.rs | Rewords BMC-11160/mapper-299 comments to documentation + oracle framing. |
| crates/rustynes-mappers/src/mmc3_clones.rs | Rewords Sachen 8259 clone notes to NESdev docs + oracle framing. |
| crates/rustynes-mappers/src/m513_sachen_9602.rs | Rewords TXC protection chip note to NESdev docs + oracle framing. |
| crates/rustynes-mappers/src/m268_bmc_coolboy.rs | Rewords CoolBoy notes to NESdev docs + oracle framing. |
| crates/rustynes-mappers/src/m176_bmc_fk23c.rs | Rewords FK23C/CoolBoy notes to NESdev docs + oracle framing. |
| crates/rustynes-mappers/src/m069_sunsoft_fme7.rs | Rewords audio calibration prose to emphasize oracle calibration rather than “derived from” phrasing. |
| crates/rustynes-mappers/src/m035_jy_asic.rs | Rewords JY ASIC doc to cite NESdev/Disch docs + oracle cross-check (no code incorporation). |
| crates/rustynes-mappers/src/m016_bandai_fcg.rs | Rewords EEPROM docs away from “faithful port of Mesen2” toward datasheet-driven state machine description. |
| crates/rustynes-mappers/src/lib.rs | Rewords JY ASIC dispatch comment to “implemented from nesdev” + oracle cross-check. |
| crates/rustynes-mappers/src/kaiser.rs | Rewords mapper-253 notes to documentation + oracle framing. |
| crates/rustynes-mappers/src/fds.rs | Rewords per-CRC quirk-table comments to “concept cross-checked as oracle” framing. |
| crates/rustynes-libretro/rustynes_libretro.info | Bumps libretro display_version to v2.2.5. |
| crates/rustynes-gfx-shaders/src/megatron.wgsl | Rewords header to “independent reimplementation” framing. |
| crates/rustynes-gfx-shaders/src/lib.rs | Rewords Bisqwit NTSC post-pass docs to NESdev hardware-model framing. |
| crates/rustynes-gfx-shaders/src/crt_stack.rs | Rewords CRT stack shader descriptions to “independent reimplementation” framing. |
| crates/rustynes-gfx-shaders/src/crt_royale.wgsl | Rewords CRT-Royale header to independent single-pass reimplementation framing. |
| crates/rustynes-gfx-shaders/src/crt_guest.wgsl | Rewords crt-guest header to independent single-pass reimplementation framing. |
| crates/rustynes-gfx-shaders/src/bisqwit.wgsl | Rewords a comment to describe the FCC NTSC YIQ→RGB matrix more generally. |
| crates/rustynes-frontend/src/ntsc_lmp88959.rs | Rewords doc comment to “independent implementation modeled on technique” + adds URL attribution. |
| crates/rustynes-frontend/src/ntsc_bisqwit.rs | Rewords module/docs and allow-list comment to avoid “ported verbatim” phrasing. |
| crates/rustynes-frontend/src/debugger/source_map.rs | Rewords doc comment to avoid “mirrors Mesen2” phrasing. |
| crates/rustynes-cpu/src/cpu.rs | Rewords SH* unstable-store helper docs to NESdev documentation + oracle framing. |
| crates/rustynes-apu/src/opll.rs | Updates algorithmic reference section to point at upstream emu2413 and correct ADR reference. |
| crates/rustynes-apu/src/blip.rs | Rewords BLEP/blip_buf mention to clarify independent implementation and avoid incorrect license characterization. |
| CHANGELOG.md | Adds v2.2.5 entry describing provenance/documentation changes and assets/license fixes. |
| Cargo.toml | Bumps workspace package version to 2.2.5. |
| Cargo.lock | Bumps workspace crate versions to 2.2.5. |
| android/app/src/main/assets/PressStart2P-OFL.txt | Adds the Press Start 2P SIL OFL 1.1 text to Android assets. |
| AGENTS.md | Updates Current release narrative to v2.2.5 and syncs related guidance text. |
| .gitignore | Adds ignore pattern for per-crate crates/*/target/ directories. |
| .github/release-notes/v2.2.5.md | Adds release notes content for the automated release flow. |
Review details
- Files reviewed: 42/45 changed files
- Comments generated: 1
- Review effort level: Lite
We're testing this review assessment. Please use 👍 or 👎 to tell us if it's correct.
There was a problem hiding this comment.
Actionable comments posted: 11
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In @.github/release-notes/v2.2.5.md:
- Around line 9-10: Apply the single release contract “zero emulation-core
behavior changes” across all records: update .github/release-notes/v2.2.5.md
lines 9-10, CHANGELOG.md lines 20-23, README.md lines 795-799, and
docs/STATUS.md lines 3-7 to distinguish source-comment changes from unchanged
behavior; in AGENTS.md lines 30 and 188, correct the historical release labels
to v2.2.4 as current/prior context as specified and use the same behavior
wording.
In `@crates/rustynes-apu/src/opll.rs`:
- Around line 24-25: The emu2413 provenance classification is inconsistent with
ADR 0006. Update the module header in crates/rustynes-apu/src/opll.rs, the
corresponding entry in docs/originality-and-provenance.md, and the related
NOTICE entry to consistently describe emu2413 as a clean-room Rust port rather
than an incorporated MIT component.
In `@crates/rustynes-gfx-shaders/src/megatron.wgsl`:
- Around line 3-6: Update the provenance comments at
crates/rustynes-gfx-shaders/src/megatron.wgsl#L3-L6 and replace the nearby “this
port keeps Megatron’s structure” wording with “this reimplementation keeps
Megatron’s structure”; also update the comments at
crates/rustynes-mappers/src/sachen_discrete.rs#L448-L450, including the `puNES:`
and “Mirrors puNES ...” references, to explicitly describe puNES as a behavioral
cross-check rather than incorporated source.
In `@crates/rustynes-ppu/src/ppu.rs`:
- Around line 4156-4161: Revise the contract comment for the side-effect-free
PPU sprite-evaluation model to match tick_oam_bus: describe it as isolated from
the rendering FSM, but remove claims that sprite evaluation is bug-free or that
primary OAM reads are read-only. Acknowledge the modeled 8-sprite/buggy H+L path
and the possible oam_decay_on_read rewrite when enabled, while preserving the
documented timing and implementation-boundary details.
In `@docs/originality-and-provenance.md`:
- Line 250: Update the current-release statement in the provenance documentation
from v2.2.4 “Cartridge” to v2.2.5 “Colophon”, while retaining the reference to
docs/STATUS.md as the source of truth and preserving v2.2.4 only as historical
context if necessary.
In `@NOTICE`:
- Around line 62-68: Update the TriCNES provenance entry in NOTICE to replace
the abbreviated hash 9199870 with the complete commit identifier, preserving the
existing attribution and URL.
In `@README.md`:
- Around line 991-996: Rewrite the TriCNES attribution in the README so it
explicitly states that RustyNES ports its PPU/DMA models and uses TriCNES as a
golden oracle. Remove the ambiguous “uses” construction while preserving the
existing project, author, and license attribution.
- Around line 689-696: Update the comparison disclaimer in the README paragraph
to say that comparisons are against a reference emulator, replacing the
ambiguous phrase “a reference RustyNES was measured on.” Preserve the
surrounding statement that this is not a claim that RustyNES is better.
In `@tests/roms/LICENSES.md`:
- Line 183: Update the AccuracyCoin validation paragraph in LICENSES.md to
describe that accuracycoin.rs decodes per-test RAM results and uses those
measurements to enforce the CI floor, replacing the outdated boot-without-crash
and unmeasured pass-rate claims. Keep the description aligned with the current
decoder behavior.
- Around line 120-124: Update the corpus documentation references in
tests/roms/README.md from crates/nes-test-harness/tests/ to
crates/rustynes-test-harness/tests/, matching the paths documented alongside
holy_mapperel.rs in LICENSES.md and keeping all related harness instructions
consistent.
- Around line 157-159: The ROM inventory counts documented in LICENSES.md are
outdated. Update the statements describing `.nes` files under
`tests/roms/nes-test-roms/` and the total committed `.nes` files to 89 and 328
respectively, leaving the surrounding licensing and inventory text unchanged.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro Plus
Run ID: 0c7d5788-9157-4e3e-a1d9-2c01723cf0cf
⛔ Files ignored due to path filters (3)
Cargo.lockis excluded by!**/*.lock,!Cargo.lockcrates/rustynes-test-harness/target/cpu_boot_trace/mmc3_test_2_4_ours.binis excluded by!**/*.bincrates/rustynes-test-harness/target/cpu_boot_trace/mmc3_test_2_4_ours.preview.csvis excluded by!**/*.csv
📒 Files selected for processing (42)
.github/release-notes/v2.2.5.md.gitignoreAGENTS.mdCHANGELOG.mdCargo.tomlNOTICEREADME.mdandroid/app/src/main/assets/PressStart2P-OFL.txtcrates/rustynes-apu/src/blip.rscrates/rustynes-apu/src/opll.rscrates/rustynes-cpu/src/cpu.rscrates/rustynes-frontend/src/debugger/source_map.rscrates/rustynes-frontend/src/ntsc_bisqwit.rscrates/rustynes-frontend/src/ntsc_lmp88959.rscrates/rustynes-gfx-shaders/src/bisqwit.wgslcrates/rustynes-gfx-shaders/src/crt_guest.wgslcrates/rustynes-gfx-shaders/src/crt_royale.wgslcrates/rustynes-gfx-shaders/src/crt_stack.rscrates/rustynes-gfx-shaders/src/lib.rscrates/rustynes-gfx-shaders/src/megatron.wgslcrates/rustynes-libretro/rustynes_libretro.infocrates/rustynes-mappers/src/fds.rscrates/rustynes-mappers/src/kaiser.rscrates/rustynes-mappers/src/lib.rscrates/rustynes-mappers/src/m016_bandai_fcg.rscrates/rustynes-mappers/src/m035_jy_asic.rscrates/rustynes-mappers/src/m069_sunsoft_fme7.rscrates/rustynes-mappers/src/m176_bmc_fk23c.rscrates/rustynes-mappers/src/m268_bmc_coolboy.rscrates/rustynes-mappers/src/m513_sachen_9602.rscrates/rustynes-mappers/src/mmc3_clones.rscrates/rustynes-mappers/src/multicart_discrete.rscrates/rustynes-mappers/src/ntdec.rscrates/rustynes-mappers/src/sachen_discrete.rscrates/rustynes-mappers/src/unif.rscrates/rustynes-ppu/src/palette_gen.rscrates/rustynes-ppu/src/ppu.rscrates/rustynes-test-harness/src/bin/pgo_trainer.rsdocs/STATUS.mddocs/originality-and-provenance.mdtests/roms/LICENSES.mdto-dos/ROADMAP.md
…ndings The v2.2.5 provenance edit changed a comment in crates/rustynes-gfx-shaders/src/bisqwit.wgsl, but that file is generated from `ntsc_bisqwit::shader_src()`; the `shared_bisqwit_wgsl_matches_generator` drift test asserts the two stay byte-identical, so the generator's emitted comment in ntsc_bisqwit.rs had to be updated to match. The prior local gating ran the targeted accuracy oracles (AccuracyCoin / nestest / fast_dotloop / snapshot), not the full `cargo test --workspace`, so the frontend `--lib` drift unit test was missed on CI; the full workspace test-roms suite now passes clean (121 suites, 0 failures). Also folds in the valid PR-review findings: - docs/originality-and-provenance.md: the section 3 "current release" line still read v2.2.4 (missed in the version bump) -> v2.2.5 (Copilot + CodeRabbit). - crates/rustynes-apu/src/opll.rs: drop the self-contradictory "clean-room reimplementation guided by the C source" wording -> "pure-Rust port of that C source, under the same MIT license". - crates/rustynes-ppu/src/ppu.rs: disambiguate "the sprite-eval hardware bug off" -> the optional OAMADDR sprite-eval corruption glitch is disabled; the 8-sprite overflow bug is still modeled. - crates/rustynes-gfx-shaders/src/megatron.wgsl: "this port keeps" -> "this reimplementation keeps". - README.md: the comparison disclaimer now names the references (Mesen2 / higan / ares) instead of an unnamed "reference RustyNES was measured on". Comment/doc-only; emulation behavior byte-identical (AccuracyCoin 141/141, nestest 0-diff, full workspace test-roms suite green), fmt + clippy -D warnings + markdownlint clean. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…iption, crate paths Adopts the valid PR-review findings from the automated reviewers (CodeRabbit, Copilot). Documentation only; no source or behavior change. - tests/roms/LICENSES.md: the blanket-coverage counts were computed from an on-disk `find` (which includes untracked clone contents) rather than `git ls-files`. Corrected to the authoritative committed totals: 328 committed `.nes` (was 502), of which `nes-test-roms/` contributes 89 committed (was 263); `extra/` (56) and `AccuracyCoin/sub-tests/` (26) were already correct. Also refreshed the stale AccuracyCoin description — it called the integration test a "boot-only smoke gate" with an "un-measured" pass rate and a "≥90% bar", but `accuracycoin.rs` now decodes the per-test result state from RAM and asserts the measured rate, which holds at 141/141 (100.00%). - tests/roms/README.md: updated the renamed harness paths (`crates/nes-test-harness/` -> `crates/rustynes-test-harness/`, `-p nes-test-harness` -> `-p rustynes-test-harness`, and the `accuracy_coin_catalog` crate reference) so the corpus docs no longer point at the old crate name. - Release-contract precision: v2.2.5 does change source *comments* in the emulation-core crates, so "zero emulation-core changes" is imprecise. Replaced with "zero emulation-core behavior changes" at the v2.2.5 sites (README, CHANGELOG, STATUS.md, AGENTS.md, release notes); the historical v2.2.4 / v2.2.2 statements (which touched no core files) are left as-is. Not adopted (with reason): CodeRabbit's suggestion to expand the TriCNES short commit hash `9199870` to the full 40-char id in NOTICE — the short hash is used consistently across the tree (crates/rustynes-ppu/src/ppu.rs and elsewhere), so expanding only NOTICE would introduce an inconsistency; left for a separate tree-wide pass if desired. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Antigravity review (Gemini via Ultra)This PR bumps workspace versions to v2.2.5 "Colophon", adds Press Start 2P font licensing for Android assets, creates Blocking issuesNone found. Suggestions
Nitpicks
Automated first-pass review by |
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@tests/roms/README.md`:
- Line 25: Update the catalog reference in the README table from the hyphenated
Cargo package name to the underscore-separated Rust crate identifier, using
rustynes_test_harness::accuracy_coin_catalog while leaving the surrounding
description unchanged.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro Plus
Run ID: b107d98b-6d35-4ae7-92e3-f267cf66b196
📒 Files selected for processing (12)
.github/release-notes/v2.2.5.mdAGENTS.mdCHANGELOG.mdREADME.mdcrates/rustynes-apu/src/opll.rscrates/rustynes-frontend/src/ntsc_bisqwit.rscrates/rustynes-gfx-shaders/src/megatron.wgslcrates/rustynes-ppu/src/ppu.rsdocs/STATUS.mddocs/originality-and-provenance.mdtests/roms/LICENSES.mdtests/roms/README.md
v2.2.5 "Colophon" — provenance, licensing, and documentation integrity
A provenance, licensing, and documentation-integrity release, prompted by
community review (NESdev forums) of the project's licensing and its AI-assisted
origins. It corrects how RustyNES describes its own provenance — in source
comments, in
NOTICE, and in the docs — so the written record matches what thecode actually is.
Zero emulation-core changes. The deterministic
#![no_std]chip stack, thesave-state / TAS / netplay formats, and every golden vector are byte-identical to
v2.2.4 by construction, so AccuracyCoin holds 141/141 (100.00%) and nestest is
0-diff. All accuracy claims were re-verified after every edit.
Motivation
A reviewer noted — correctly — that several in-source comments described
implementations as "ports" of other emulators, including GPL-licensed ones (Mesen2
GPLv3, puNES GPLv2), and that the project's heavy AI assistance was undisclosed.
The whole tree was audited (three independent read-only passes over source, docs,
assets, and vendored trees). The finding: chip/mapper/peripheral behaviors are
implemented from public hardware documentation (NESdev wiki, datasheets, the
documented 6502 behavior) and pinned to public test ROMs; reference emulators were
consulted only as behavioral oracles. Some comments mischaracterized that as
"ported from X." No GPL-licensed emulator source is incorporated into RustyNES.
What changed
(sprite-eval / OAM decay models), APU, and ~14 mapper sites — reframed to
documented hardware behavior cross-checked against reference emulators as
oracles.
blip.rsno longer mislabelsblip_buf(LGPL-2.1+; independent BLEPimpl).
"port / condensation of X" to independent single-pass reimplementations of the
look/technique (copyright covers code expression, not a visual look); the
"ported verbatim from Bisqwit's C" comment corrected to the NESdev-documented
composite-signal model. No upstream shader source is incorporated.
NOTICErewritten: GPL emulators disclosed as oracles-only (incl. GeraNESGPL-3.0-only, previously undisclosed); incorporated permissive components
attributed with the MIT text (emu2413, TriCNES, rcheevos); bundled fonts +
test ROMs attributed; visual influences credited.
docs/originality-and-provenance.md— an honest account of originality,provenance, the development timeline, the full license posture, an explicit
AI-assistance disclosure, and a "not a superiority claim" note.
inaccurate details removed; the mislabeled "sub-cycle accuracy" screenshot
caption fixed; tone softened; Acknowledgments synced with
NOTICE.tests/roms/LICENSES.md— false exclusion claim, stale crate path, andsub-test count fixed; blanket coverage added for ~150 previously-undocumented
committed test ROMs (502 total, none commercial).
.infotoo);STATUS.md / AGENTS.md / ROADMAP synced; release notes authored. Android app
gained the Press Start 2P OFL text.
.gitignoregained a nestedcrates/*/target/rule and two orphaned tracked build artifacts were untracked.Verification
fast_dotloopdifferential, and the snapshot-schema audit — all green.cargo fmt --check,clippy --workspace --all-targets -D warnings(+retroachievements / scripting / hd-pack combos),
rustdoc -D warnings,markdownlint, and the
thumbv7em-none-eabihfno_std cross-compile all pass.On merge
release-auto.ymltags v2.2.5, builds the desktop binaries, and publishes theGitHub Release from
.github/release-notes/v2.2.5.mdonce this lands green onmain.🤖 Generated with Claude Code
Summary by CodeRabbit