Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 0 additions & 5 deletions .markdownlintignore
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,3 @@ to-dos/archive/
# that fed them — reference, not maintained prose, kept exactly as authored
# (like ref-docs/).
to-dos/plans/

# Harvested mobile-monetization reference set (from the rustynes-monetization
# scaffold, 2026-06-23) — reference design docs kept largely as authored, with a
# reconciliation banner in the index. Reference, not maintained prose (like ref-docs/).
docs/monetization/
14 changes: 7 additions & 7 deletions AGENTS.md

Large diffs are not rendered by default.

43 changes: 43 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,49 @@ cycle-accurate core later replaced.

## [Unreleased]

## [2.2.6] - 2026-08-04 - "Almanac" (de-monetization + provenance accuracy)

A **de-monetization and provenance** release. RustyNES is now permanently
open-source and **income/profit-free forever** (ADR 0035): all planned
monetization is removed and the native Android/iOS apps are kept as **free FOSS
apps** — no ads, no tracking, no paid unlock, every feature available. **Zero
emulation-core behavior changes** — the `#![no_std]` chip stack, save-state / TAS
/ netplay formats, and every golden vector are byte-identical, so **AccuracyCoin
holds 141/141 (100.00%)** and nestest is 0-diff by construction.

### Removed

- The `rustynes-monetization` crate and `docs/monetization/` are deleted and the
workspace member removed (no emulation crate ever depended on it). The Android
paid layer (Play Billing `LicenseManager`, the AppLovin MAX / RevenueCat
`MonetizationGate` + ad gates, the demo/paywall UI + strings, AdMob/AppLovin
manifest entries, and the billing/ad Gradle deps + BuildConfig keys + the
monetization cargo/uniffi tasks) is removed; `MainActivity` no longer gates any
feature behind an unlock/demo. The iOS paid layer (the StoreKit `StoreManager`,
the `appStore` monetization build channel, billing entitlements) is removed.

### Changed

- The `foss` / `play` Android flavor split is retained but now only distinguishes
the pure-AOSP build from the build carrying the *free* Google-Play services
(Play Games achievements, Cast, Integrity, in-app update, cloud save) — no ads,
no billing. Nightly Rust is now used only by `cargo fuzz`.
- ROADMAP / `docs/STATUS.md` / version plans reframed to the OSS/income-free
position; the freed v2.3.0 slot is repurposed for accuracy/fidelity work.
- **Provenance accuracy (ADR 0035 + ADR 0030):** `NOTICE` and
`docs/originality-and-provenance.md` now disclose honestly that the PPU
octal-latch / hybrid-address *timing* was calibrated to TriCNES's per-dot
behavior (beyond black-box oracle use), which reproduced a TriCNES-specific
artifact that mis-renders mid-render `$2006` writes (e.g. Rad Racer). This is
scheduled to be reworked to be documentation-derived in v2.3.0.

### Added

- **ADR 0035** "RustyNES is permanently non-commercial (no monetization)";
**ADR 0025** marked Superseded and **ADR 0027** amended (its App-Store §4.7
ROM-compliance rules stay — valid for a free app; the ad/ATT/StoreKit-unlock
clauses are removed).

## [2.2.5] - 2026-08-03 - "Colophon" (provenance, licensing, and documentation integrity)

A **provenance, licensing, and documentation-integrity** release, prompted by
Expand Down
41 changes: 17 additions & 24 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 3 additions & 3 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,13 @@ members = [
"crates/rustynes-gfx-shaders",
"crates/rustynes-hdpack",
"crates/rustynes-ra",
"crates/rustynes-monetization", "crates/rustynes-libretro",
"crates/rustynes-libretro",
Comment thread
coderabbitai[bot] marked this conversation as resolved.
]
# The libretro buildbot's shared CI templates run a bare, unscoped
# `cargo build --release --target <triple>` from the repo root (no `-p`,
# no `--manifest-path` — the script is centrally maintained and can't be
# edited per-core). Scoping the default member to just the libretro crate
# keeps that command building ONLY `rustynes-libretro`, not all 18 workspace
# keeps that command building ONLY `rustynes-libretro`, not all 17 workspace
# members (in particular `rustynes-frontend`, which needs wgpu/winit/cpal/
# wayland system libs the buildbot's headless cross-compile image doesn't
# have). This does not change any `--workspace`/`-p <crate>`-scoped command
Expand All @@ -32,7 +32,7 @@ members = [
default-members = ["crates/rustynes-libretro"]

[workspace.package]
version = "2.2.5"
version = "2.2.6"
edition = "2024"
rust-version = "1.96"
license = "MIT OR Apache-2.0"
Expand Down
7 changes: 7 additions & 0 deletions NOTICE
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,13 @@ permission notice are reproduced below.
oracle at crates/rustynes-test-harness/golden/tricnes/tricnes-full-src/.
https://github.com/100thCoin/TriCNES (commit 9199870)
Copyright (c) 2025 Chris Siebert
Note (v2.2.6): the octal-latch / hybrid-address *timing* was calibrated to
TriCNES's per-dot behavior rather than derived independently from hardware
documentation, which reproduced a TriCNES-specific artifact (mis-rendering
mid-render $2006 writes, e.g. Rad Racer). This is disclosed in
docs/originality-and-provenance.md sec. 2.2 and is being reworked to be
documentation-derived in v2.3.0 (see ADR 0030). TriCNES is MIT, so this is a
behavioral-fidelity note, not a licensing one.

* rcheevos v12.3.0 -- RetroAchievements client runtime, vendored at
crates/rustynes-cheevos/vendor/rcheevos/ (compiled only under the optional
Expand Down
Loading