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
18 changes: 18 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

## [1.19.0] "Afterburner" - 2026-07-15

Fifteenth release of the RustyNES-parity roadmap: an optional PGO/BOLT pipeline for the
shipping `rustysnes` binary, deliberately last per the plan (after mobile-specific hot-path
work landed, so the profile isn't invalidated).

### Added

- **PGO/BOLT pipeline** (Mobile-track-adjacent, deliberately last per the RustyNES-parity
Expand Down Expand Up @@ -37,6 +43,18 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
documented honestly in `docs/performance.md` — this is an expected, not a failure, state; a
short/narrow local run isn't representative of CI's real `3600`-frame training sweep).

### Fixed

- **A real bug in `pgo.yml`'s BOLT stage, found in PR review**: re-invoking the whole
`scripts/pgo/run.sh` between `cargo pgo bolt build` and `cargo pgo bolt optimize` ran a
separate, non-BOLT PGO cycle that never fed BOLT's profile data and could clobber the
bolt-instrumented binary with an unrelated plain-PGO one. Fixed per `cargo-pgo`'s own
documented BOLT+PGO combined workflow: `--with-pgo` on both `cargo pgo bolt build` and
`cargo pgo bolt optimize`, with the erroneous `run.sh` re-invocation removed. Real BOLT profile
gathering (running the actual GUI frontend binary against a workload) stays out of scope —
this project's frontend has no headless CLI mode — so the fix deliberately uses `cargo-pgo`'s
own documented profile-less BOLT fallback instead.

## [1.18.0] "Dormant" - 2026-07-14

Fourteenth release of the RustyNES-parity roadmap: Mobile Phase 5, monetization scaffolding.
Expand Down
34 changes: 17 additions & 17 deletions Cargo.lock

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

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ members = [
]

[workspace.package]
version = "1.18.0"
version = "1.19.0"
edition = "2024"
rust-version = "1.96"
license = "MIT OR Apache-2.0"
Expand Down
2 changes: 1 addition & 1 deletion crates/rustysnes-android/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
[package]
name = "rustysnes-android"
description = "RustySNES: Android JNI presentation host (wgpu-on-Surface, no emulation logic)"
version = "1.18.0"
version = "1.19.0"
edition.workspace = true
rust-version.workspace = true
license.workspace = true
Expand Down
2 changes: 1 addition & 1 deletion crates/rustysnes-apu/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "rustysnes-apu"
version = "1.18.0"
version = "1.19.0"
edition.workspace = true
rust-version.workspace = true
license.workspace = true
Expand Down
2 changes: 1 addition & 1 deletion crates/rustysnes-cart/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "rustysnes-cart"
version = "1.18.0"
version = "1.19.0"
edition.workspace = true
rust-version.workspace = true
license.workspace = true
Expand Down
2 changes: 1 addition & 1 deletion crates/rustysnes-cheevos/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
[package]
name = "rustysnes-cheevos"
description = "Native-only RetroAchievements (rcheevos) FFI wrapper for RustySNES"
version = "1.18.0"
version = "1.19.0"
edition.workspace = true
rust-version.workspace = true
license.workspace = true
Expand Down
2 changes: 1 addition & 1 deletion crates/rustysnes-core/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "rustysnes-core"
version = "1.18.0"
version = "1.19.0"
edition.workspace = true
rust-version.workspace = true
license.workspace = true
Expand Down
2 changes: 1 addition & 1 deletion crates/rustysnes-cpu/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "rustysnes-cpu"
version = "1.18.0"
version = "1.19.0"
edition.workspace = true
rust-version.workspace = true
license.workspace = true
Expand Down
2 changes: 1 addition & 1 deletion crates/rustysnes-frontend/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
[package]
name = "rustysnes-frontend"
description = "RustySNES: cross-platform SNES emulator binary (winit + wgpu + cpal + egui)"
version = "1.18.0"
version = "1.19.0"
edition.workspace = true
rust-version.workspace = true
license.workspace = true
Expand Down
2 changes: 1 addition & 1 deletion crates/rustysnes-gfx-shaders/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
[package]
name = "rustysnes-gfx-shaders"
description = "RustySNES: shared WGSL presentation-shader sources (blit + post-filters)"
version = "1.18.0"
version = "1.19.0"
edition.workspace = true
rust-version.workspace = true
license.workspace = true
Expand Down
2 changes: 1 addition & 1 deletion crates/rustysnes-ios/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
[package]
name = "rustysnes-ios"
description = "RustySNES: iOS Metal presentation host (wgpu-on-CAMetalLayer, no emulation logic)"
version = "1.18.0"
version = "1.19.0"
edition.workspace = true
rust-version.workspace = true
license.workspace = true
Expand Down
2 changes: 1 addition & 1 deletion crates/rustysnes-mobile/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
[package]
name = "rustysnes-mobile"
description = "RustySNES: UniFFI mobile bridge (Kotlin/Swift bindings over the emulation core)"
version = "1.18.0"
version = "1.19.0"
edition.workspace = true
rust-version.workspace = true
license.workspace = true
Expand Down
2 changes: 1 addition & 1 deletion crates/rustysnes-monetization/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
[package]
name = "rustysnes-monetization"
description = "RustySNES: dormant entitlement/ad-pacing policy scaffold (mobile-only, never a dependency of the deterministic core)"
version = "1.18.0"
version = "1.19.0"
edition.workspace = true
rust-version.workspace = true
license.workspace = true
Expand Down
2 changes: 1 addition & 1 deletion crates/rustysnes-netplay/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
[package]
name = "rustysnes-netplay"
description = "RustySNES: GGPO-style rollback netplay (UDP native, WebRTC browser)"
version = "1.18.0"
version = "1.19.0"
edition.workspace = true
rust-version.workspace = true
license.workspace = true
Expand Down
2 changes: 1 addition & 1 deletion crates/rustysnes-ppu/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "rustysnes-ppu"
version = "1.18.0"
version = "1.19.0"
edition.workspace = true
rust-version.workspace = true
license.workspace = true
Expand Down
2 changes: 1 addition & 1 deletion crates/rustysnes-savestate/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "rustysnes-savestate"
version = "1.18.0"
version = "1.19.0"
edition.workspace = true
rust-version.workspace = true
license.workspace = true
Expand Down
2 changes: 1 addition & 1 deletion crates/rustysnes-script/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
[package]
name = "rustysnes-script"
description = "RustySNES: sandboxed Lua 5.4 scripting (memory read/write + a per-frame callback)"
version = "1.18.0"
version = "1.19.0"
edition.workspace = true
rust-version.workspace = true
license.workspace = true
Expand Down
2 changes: 1 addition & 1 deletion crates/rustysnes-test-harness/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "rustysnes-test-harness"
version = "1.18.0"
version = "1.19.0"
edition.workspace = true
rust-version.workspace = true
license.workspace = true
Expand Down
12 changes: 9 additions & 3 deletions docs/STATUS.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,12 @@
This file is authoritative for per-suite pass counts, the board / coprocessor matrix, and
version policy. Everything else defers to it.

**Current release:** `v1.18.0 "Dormant"` (`v0.1.0 "Foundation"`,
**Current release:** `v1.19.0 "Afterburner"` (`v0.1.0 "Foundation"`,
`v0.2.0 "Persistence"`, `v0.3.0 "Continuum"`, `v0.4.0 "Completion"`, `v0.5.0 "Fidelity"`,
`v0.6.0 "Shippable"`, `v0.7.0 "Resolution"`, `v0.8.0 "Community"`, `v0.9.0 "Threshold"`,
`v1.0.0 "Zenith"`, `v1.0.1 "Aftertouch"`, `v1.1.0 "Latchkey"`, `v1.2.0 "Phosphor"`,
`v1.3.0 "Palimpsest"`, and `v1.4.0 "Convergence"` precede it; see `to-dos/VERSION-PLAN.md` for the
full ladder). **`v1.5.0`-`v1.18.0`** are the opening rungs of the RustyNES-parity ladder — a CI
full ladder). **`v1.5.0`-`v1.19.0`** are the RustyNES-parity ladder — a CI
safety net (`v1.5.0 "Bedrock"`), a MkDocs documentation site + PWA + accuracy ledger
(`v1.6.0 "Lighthouse"`), the debugger extracted into its own module plus a hex Memory panel
(`v1.7.0 "Telemetry"`, `v1.7.1` patch), a Memory Compare panel + in-app Docs panel
Expand Down Expand Up @@ -44,7 +44,13 @@ the deterministic core, every pricing/pacing figure an explicit placeholder pend
standing "Mobile Phase 6" store-launch gate) wired into both mobile shells as an inert,
log-only startup call, real-verified on the Android AVD via `logcat` and compile-verified for
iOS via a real macOS CI build after fixing a genuine `xcodebuild` xcframework-modulemap
collision found on that same CI run (`v1.18.0 "Dormant"`) — all frontend/tooling/CI work
collision found on that same CI run (`v1.18.0 "Dormant"`), and finally an optional PGO/BOLT
pipeline for the shipping `rustysnes` binary — `scripts/pgo/run.sh` (instrument → train against
the committed permissive ROM corpus → optimized rebuild) plus `.github/workflows/pgo.yml`
(`workflow_dispatch`/release-tag-only, promotion gated on both a `>3%` Criterion speedup and a
byte-identical `--features test-roms` re-run under the PGO profile, never on speed alone),
real-verified end-to-end in this development environment including a genuine BOLT-stage bug
found and fixed in PR review (`v1.19.0 "Afterburner"`) — all frontend/tooling/CI work
with **zero
change** to the accuracy dashboard, per-suite pass counts, or coprocessor tier matrix below,
which stayed byte-identical throughout; see `CHANGELOG.md` for full per-release detail. `v1.0.0`
Expand Down
13 changes: 9 additions & 4 deletions to-dos/ROADMAP.md
Original file line number Diff line number Diff line change
Expand Up @@ -365,10 +365,15 @@ under `v1.0.0`) and the netplay save-state-cost pre-work.
pricing/pacing figure an explicit placeholder; wired into both mobile shells as an inert,
log-only startup call, verified for real on the Android AVD via `logcat` and compile-verified
for iOS via a real macOS CI build, which caught and fixed a genuine `xcodebuild`
xcframework-modulemap collision) — and a PGO/BOLT pipeline last (`v1.19.0`). Tracked in
lockstep against RustyNES's own continuing development via `to-dos/LOCKSTEP-CHECKLIST.md`, not
a frozen snapshot target. Full detail in `to-dos/VERSION-PLAN.md`'s "RustyNES-parity ladder"
section.
xcframework-modulemap collision), and finally an optional PGO/BOLT pipeline for the shipping
`rustysnes` binary (`v1.19.0 "Afterburner"`, **RELEASED 2026-07-15** — `scripts/pgo/run.sh` +
`.github/workflows/pgo.yml`, promotion gated on both a `>3%` Criterion speedup and a
byte-identical `--features test-roms` re-run under the PGO profile, never on speed alone;
verified for real end-to-end in this development environment, including a genuine BOLT-stage
structural bug found and fixed in PR review). This closes the RustyNES-parity ladder plan.
Tracked in lockstep against RustyNES's own continuing development via
`to-dos/LOCKSTEP-CHECKLIST.md`, not a frozen snapshot target. Full detail in
`to-dos/VERSION-PLAN.md`'s "RustyNES-parity ladder" section.
- **Flagged by the 2026-07-12 lockstep re-check — no rung assigned yet, maintainer go/no-go
needed.** RustyNES shipped two items since the roadmap's `v2.1.5` baseline that RustySNES's own
ladder doesn't currently account for: (1) a **GIF/WAV screen+audio capture subsystem**
Expand Down
Loading
Loading