Skip to content

release: v2.2.5 "Colophon" — provenance, licensing, and documentation integrity - #342

Merged
doublegate merged 3 commits into
mainfrom
release/v2.2.5-colophon
Aug 4, 2026
Merged

release: v2.2.5 "Colophon" — provenance, licensing, and documentation integrity#342
doublegate merged 3 commits into
mainfrom
release/v2.2.5-colophon

Conversation

@doublegate

@doublegate doublegate commented Aug 4, 2026

Copy link
Copy Markdown
Owner

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 the
code actually is.

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. 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

  • In-source "port" comments corrected across CPU (SH* unstable stores), PPU
    (sprite-eval / OAM decay models), APU, and ~14 mapper sites — reframed to
    documented hardware behavior cross-checked against reference emulators as
    oracles. blip.rs no longer mislabels blip_buf (LGPL-2.1+; independent BLEP
    impl).
  • CRT shaders + NTSC filters reviewed at source level and reframed from
    "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.
  • NOTICE rewritten: GPL emulators disclosed as oracles-only (incl. GeraNES
    GPL-3.0-only
    , previously undisclosed); incorporated permissive components
    attributed with the MIT text (emu2413, TriCNES, rcheevos); bundled fonts +
    test ROMs attributed; visual influences credited.
  • New 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.
  • README — AI-assistance disclosure added; a comparison graphic with
    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, and
    sub-test count fixed; blanket coverage added for ~150 previously-undocumented
    committed test ROMs (502 total, none commercial).
  • Version bumped 2.2.4 → 2.2.5 (single-sourced; libretro .info too);
    STATUS.md / AGENTS.md / ROADMAP synced; release notes authored. Android app
    gained the Press Start 2P OFL text. .gitignore gained a nested
    crates/*/target/ rule and two orphaned tracked build artifacts were untracked.

Verification

  • AccuracyCoin 141/141 (full + run-ahead), nestest 0-diff, dual-path
    fast_dotloop differential, 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-eabihf no_std cross-compile all pass.

On merge

release-auto.yml tags v2.2.5, builds the desktop binaries, and publishes the
GitHub Release from .github/release-notes/v2.2.5.md once this lands green on
main.

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Documentation
    • Added v2.2.5 “Colophon” release notes and comprehensive originality, provenance, and licensing guidance.
    • Clarified third-party attributions, AI assistance, shader and audio techniques, test-ROM licensing, acknowledgments, screenshots, and citations.
  • Chores
    • Updated the application and libretro version to v2.2.5.
    • Added the Android font license notice and improved build-artifact exclusions.
  • Compatibility
    • Emulation behavior, save states, formats, replays, shaders, and deterministic verification artifacts remain unchanged.

… 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>
Copilot AI review requested due to automatic review settings August 4, 2026 00:18
@coderabbitai

coderabbitai Bot commented Aug 4, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

RustyNES 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.

Changes

v2.2.5 Colophon release

Layer / File(s) Summary
Release metadata and project documentation
.github/release-notes/*, AGENTS.md, CHANGELOG.md, Cargo.toml, README.md, crates/rustynes-libretro/*, docs/STATUS.md, to-dos/ROADMAP.md
Release records, version metadata, README content, status information, and roadmap entries now identify v2.2.5 and its documentation-focused scope.
Licensing and provenance records
NOTICE, docs/originality-and-provenance.md, android/app/src/main/assets/*
The project records component, oracle, visual-influence, test-ROM, font, and license provenance.
Source and shader provenance comments
crates/rustynes-apu/*, crates/rustynes-cpu/*, crates/rustynes-frontend/*, crates/rustynes-gfx-shaders/*, crates/rustynes-mappers/*, crates/rustynes-ppu/*, crates/rustynes-test-harness/*
Implementation comments now describe independent implementations, documented sources, behavioral cross-checks, and revised attribution details.
ROM licensing and repository support
tests/roms/LICENSES.md, tests/roms/README.md, .gitignore
ROM documentation now records updated harness paths, AccuracyCoin coverage, committed ROM inventories, and licensing categories. Nested crate build outputs are ignored.

Estimated code review effort: 2 (Simple) | ~15 minutes

Possibly related PRs

  • doublegate/RustyNES#327: Updates release metadata and the libretro core version in a separate release scope.
  • doublegate/RustyNES#339: Overlaps with the AccuracyCoin ROM inventory, licensing, and 141/141 validation documentation.
🚥 Pre-merge checks | ✅ 9
✅ Passed checks (9 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly and concisely identifies the v2.2.5 release and its main provenance, licensing, and documentation-integrity changes.
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Docs-As-Spec Sync ✅ Passed The complete PR diff changes only comments in the four checked crates: 130 added and 81 removed lines, with zero non-comment lines; no observable behavior change triggers the docs requirement.
Changelog Entry For User-Visible Changes ✅ Passed The diff contains no executable changes; source edits are comments, and the PR states zero emulation-core behavior changes. It adds a complete v2.2.5 changelog entry; [Unreleased] needs no entry.
No Unwrap/Expect/Panic On Untrusted Input ✅ Passed The PR adds no .unwrap(), .expect(), or panic!() calls and no non-comment Rust lines; all changed source lines are documentation-only.
Safety Comment On New Unsafe Blocks ✅ Passed The PR diff adds no unsafe lines, and every changed Rust file contains no unsafe block or unsafe fn; therefore no new SAFETY comment is required.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch release/v2.2.5-colophon

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 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.md to 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 .gitignore rule for nested crate target/ 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.

Comment thread docs/originality-and-provenance.md

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

📥 Commits

Reviewing files that changed from the base of the PR and between 5733afa and 028005e.

⛔ Files ignored due to path filters (3)
  • Cargo.lock is excluded by !**/*.lock, !Cargo.lock
  • crates/rustynes-test-harness/target/cpu_boot_trace/mmc3_test_2_4_ours.bin is excluded by !**/*.bin
  • crates/rustynes-test-harness/target/cpu_boot_trace/mmc3_test_2_4_ours.preview.csv is excluded by !**/*.csv
📒 Files selected for processing (42)
  • .github/release-notes/v2.2.5.md
  • .gitignore
  • AGENTS.md
  • CHANGELOG.md
  • Cargo.toml
  • NOTICE
  • README.md
  • android/app/src/main/assets/PressStart2P-OFL.txt
  • crates/rustynes-apu/src/blip.rs
  • crates/rustynes-apu/src/opll.rs
  • crates/rustynes-cpu/src/cpu.rs
  • crates/rustynes-frontend/src/debugger/source_map.rs
  • crates/rustynes-frontend/src/ntsc_bisqwit.rs
  • crates/rustynes-frontend/src/ntsc_lmp88959.rs
  • crates/rustynes-gfx-shaders/src/bisqwit.wgsl
  • crates/rustynes-gfx-shaders/src/crt_guest.wgsl
  • crates/rustynes-gfx-shaders/src/crt_royale.wgsl
  • crates/rustynes-gfx-shaders/src/crt_stack.rs
  • crates/rustynes-gfx-shaders/src/lib.rs
  • crates/rustynes-gfx-shaders/src/megatron.wgsl
  • crates/rustynes-libretro/rustynes_libretro.info
  • crates/rustynes-mappers/src/fds.rs
  • crates/rustynes-mappers/src/kaiser.rs
  • crates/rustynes-mappers/src/lib.rs
  • crates/rustynes-mappers/src/m016_bandai_fcg.rs
  • crates/rustynes-mappers/src/m035_jy_asic.rs
  • crates/rustynes-mappers/src/m069_sunsoft_fme7.rs
  • crates/rustynes-mappers/src/m176_bmc_fk23c.rs
  • crates/rustynes-mappers/src/m268_bmc_coolboy.rs
  • crates/rustynes-mappers/src/m513_sachen_9602.rs
  • crates/rustynes-mappers/src/mmc3_clones.rs
  • crates/rustynes-mappers/src/multicart_discrete.rs
  • crates/rustynes-mappers/src/ntdec.rs
  • crates/rustynes-mappers/src/sachen_discrete.rs
  • crates/rustynes-mappers/src/unif.rs
  • crates/rustynes-ppu/src/palette_gen.rs
  • crates/rustynes-ppu/src/ppu.rs
  • crates/rustynes-test-harness/src/bin/pgo_trainer.rs
  • docs/STATUS.md
  • docs/originality-and-provenance.md
  • tests/roms/LICENSES.md
  • to-dos/ROADMAP.md

Comment thread .github/release-notes/v2.2.5.md Outdated
Comment thread crates/rustynes-apu/src/opll.rs Outdated
Comment thread crates/rustynes-gfx-shaders/src/megatron.wgsl
Comment thread crates/rustynes-ppu/src/ppu.rs
Comment thread docs/originality-and-provenance.md Outdated
Comment thread README.md
Comment thread README.md
Comment thread tests/roms/LICENSES.md
Comment thread tests/roms/LICENSES.md
Comment thread tests/roms/LICENSES.md Outdated
doublegate and others added 2 commits August 3, 2026 21:16
…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>
@github-actions

github-actions Bot commented Aug 4, 2026

Copy link
Copy Markdown

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 docs/originality-and-provenance.md, and audits/rewords in-source comments and NOTICE to clarify oracle references versus incorporated permissive dependencies without changing emulation core behavior.

Blocking issues

None found.

Suggestions

  • NOTICE: Under Bundled test ROMs, the sentence introducing third-party test ROM attributions is truncated mid-word (The permissive works whose licenses require their notices b). Complete this sentence (e.g., ...require their notices to be reproduced are listed below:).

Nitpicks

  • .gitignore: The added crates/*/target/ pattern is redundant if Cargo workspace builds output to the root /target/ directory, though harmless if manual out-of-workspace crate builds occur.

Automated first-pass review by agy on a self-hosted runner -- not a human review.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

📥 Commits

Reviewing files that changed from the base of the PR and between 028005e and d15b1ae.

📒 Files selected for processing (12)
  • .github/release-notes/v2.2.5.md
  • AGENTS.md
  • CHANGELOG.md
  • README.md
  • crates/rustynes-apu/src/opll.rs
  • crates/rustynes-frontend/src/ntsc_bisqwit.rs
  • crates/rustynes-gfx-shaders/src/megatron.wgsl
  • crates/rustynes-ppu/src/ppu.rs
  • docs/STATUS.md
  • docs/originality-and-provenance.md
  • tests/roms/LICENSES.md
  • tests/roms/README.md

Comment thread tests/roms/README.md
@doublegate
doublegate merged commit 0265b3b into main Aug 4, 2026
30 checks passed
@doublegate
doublegate deleted the release/v2.2.5-colophon branch August 4, 2026 02:29
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants