Skip to content

Commit eecf8ea

Browse files
doublegateclaude
andcommitted
docs: remove the 1.96 split everywhere it was still stated as current
3175827 moved the libretro buildbot to Rust 1.99 and gave every crate the workspace floor. It left the split described as current in places the first sweep missed (`git grep 1.96`, not run then). Copilot (#590, #591, #593), CodeRabbit (#591) and agy (#590, #591, #593) each reported subsets. Fixed: - the seven libretro-path Cargo.toml files: the "builds this crate on Rust 1.96.0" comment is deleted, since the inherited workspace value is the fact; - .cargo/config.toml (the MSRV-aware resolver note); - ARCHITECTURE.md's tree line; - CONTRIBUTING.md's MSRV bullet; - docs/build-and-tooling.md; - docs/dev/BUILD.md, whose RUSTUP_TOOLCHAIN=1.96.0 command would now be rejected by cargo; - docs/dev/STYLE_GUIDE.md; - docs/benchmarks.md; - the webOS comment in .gitlab-ci.yml, plus a header on its #91899 post-mortem saying which two details have moved since (the pin value, and `rustup toolchain install ... --target` in place of `rustup target add`; Copilot on #592); - the bus.rs reborrow comment. The `&mut *self.ram` reborrow is KEPT: iterating `&mut Box<[T; N]>` needs 1.97+, both forms compile on the 1.99 floor, and changing working code buys nothing (agy suggested removing it). Kept: every 1.96 reference that is dated history (CHANGELOG entries, the 2026-07-20 buildbot post-mortem, rust-toolchain.toml's account of the split, the plans). A second `git grep -E "1\.96"` after this change shows only those. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014qfTKi2M3swo7qnwvYCkDj
1 parent 0f90209 commit eecf8ea

16 files changed

Lines changed: 23 additions & 23 deletions

File tree

‎.cargo/config.toml‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@
2222
rustflags = ["--cfg=web_sys_unstable_apis", "--cfg=getrandom_backend=\"wasm_js\""]
2323

2424
# MSRV-aware (v1.3.0 bumped 1.86 -> 1.96, v3.0.1 -> 1.99) dependency resolution.
25-
# The workspace pins rust-version = "1.99" and the seven libretro-path crates
26-
# "1.96"; `fallback` makes `cargo update` prefer dependency
25+
# Every crate inherits the workspace's rust-version = "1.99" (seven libretro-path
26+
# crates declared "1.96" for one day in v3.0.1); `fallback` makes `cargo update` prefer dependency
2727
# versions compatible with that MSRV over the newest available. Without it, a
2828
# future `cargo update` could pull a past-MSRV crate (e.g. `image` >= 0.26, a
2929
# transitive dep of `arboard`'s clipboard image support, which needs a newer

‎.gitlab-ci.yml‎

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,18 @@
3030
# ---------------------------------------------------------------------------
3131
# Why every job carries a `before_script` (pipeline #91899 post-mortem)
3232
# ---------------------------------------------------------------------------
33+
# (History, 2026-07-20. The mechanism still holds; two details moved since:
34+
# the pin is whatever `rust-toolchain.toml` says (1.99.0 at v3.0.1), and since
35+
# v3.0.1 each job runs `rustup toolchain install ${RUSTUP_TOOLCHAIN} --profile
36+
# minimal --target ${RUST_TARGET}`, which installs the pinned toolchain WITH
37+
# its target in one step, where this record says `rustup target add`.)
38+
#
3339
# The first buildbot run passed only `libretro-build-linux-x64`; the other
3440
# nine died with `E0463: can't find crate for core`. Root cause is entirely
3541
# on our side, not the build images:
3642
#
37-
# This repo pins its toolchain in `rust-toolchain.toml` (`channel =
38-
# "1.96.0"`). The build image ships its own default toolchain with every
43+
# This repo pinned its toolchain in `rust-toolchain.toml` (`channel =
44+
# "1.96.0"` then). The build image ships its own default toolchain with every
3945
# libretro cross target pre-provisioned — but our pin makes rustup download
4046
# and install a SEPARATE, pristine 1.96.0 toolchain on the first `cargo`
4147
# invocation, and that toolchain carries only the host `rust-std` plus the
@@ -360,8 +366,8 @@ libretro-build-tvos-arm64:
360366
# Built in libretro's webOS image, which has its own rustup, libclang and the
361367
# LG webOS SDKs. The template's `before_script` sources the SDK environment,
362368
# so it is kept via `!reference`, and the #91899 `rustup target add` follows
363-
# it: the `channel` pin makes rustup fetch a pristine 1.96.0 here too, without
364-
# the targets the image installed on its own default toolchain.
369+
# it: the pinned toolchain (`RUSTUP_TOOLCHAIN`) is a pristine install here too,
370+
# without the targets the image installed on its own default toolchain.
365371
libretro-build-webos-armv7a:
366372
extends:
367373
- .libretro-rust-webos-armv7a-default

‎ARCHITECTURE.md‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# RustyNES Architecture
22

33
**Document Version:** 2.1.0
4-
**Last Updated:** 2026-08-30
4+
**Last Updated:** 2026-10-07
55
**Applies to:** RustyNES v3.0.1 (the scheduling model is v2.0.0 "Timebase" onward)
66

77
This document fixes the high-level architecture of RustyNES. The per-subsystem specs under `docs/` (`cpu-6502.md`, `ppu-2c02.md`, `apu-2a03.md`, `mappers.md`, `scheduler.md`) take these decisions as given and elaborate one chip each. After reading this you should know the workspace shape, the scheduling model, the public boundary, and the load-bearing invariants. The canonical, always-current architecture spec is [`docs/architecture.md`](docs/architecture.md); this file is the top-level companion.
@@ -53,7 +53,7 @@ These cross-cutting choices span many files and are not negotiable without re-de
5353

5454
```text
5555
rustynes/
56-
├── Cargo.toml # Workspace definition (edition 2024, MSRV 1.99; libretro path 1.96)
56+
├── Cargo.toml # Workspace definition (edition 2024, MSRV 1.99 for every crate)
5757
├── crates/
5858
│ ├── rustynes-core/ # Glue: Nes struct, run loop, scheduler, Bus,
5959
│ │ # save state, region config. Re-exports chip crates.

‎CONTRIBUTING.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ forbids, so a flaky test is a bug to fix, not to retry.
134134

135135
- **Format:** `cargo fmt` (rustfmt defaults).
136136
- **Lint:** pass `cargo clippy --workspace --all-targets -- -D warnings` with no warnings.
137-
- **Edition:** Rust 2024. **Toolchain:** 1.99 (pinned in `rust-toolchain.toml`). **MSRV:** 1.99, except the seven crates the libretro core builds (`rustynes-{cpu,ppu,apu,mappers,core,gamedb,libretro}`), which keep 1.96 for the libretro buildbot; CI checks them on 1.96.
137+
- **Edition:** Rust 2024. **Toolchain:** 1.99 (pinned in `rust-toolchain.toml`). **MSRV:** 1.99 for every crate. The libretro buildbot uses the same toolchain (`RUSTUP_TOOLCHAIN` in `.gitlab-ci.yml`), and CI fails if the two ever differ, so move both in one change.
138138
- The chip stack (`rustynes-{cpu,ppu,apu,mappers,core}`) is `#![no_std]` + `extern crate alloc;`. `unsafe` is only permitted at FFI boundaries (`rustynes-cheevos`) and the one native priority hook in `rustynes-frontend`, and **must** carry a `// SAFETY:` comment explaining the invariant.
139139
- No emojis in code, comments, or commits (project policy).
140140

‎crates/rustynes-apu/Cargo.toml‎

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ name = "rustynes-apu"
33
description = "Cycle-accurate Ricoh 2A03 APU (Audio Processing Unit) for the NES"
44
version.workspace = true
55
edition.workspace = true
6-
# The libretro buildbot builds this crate on Rust 1.96.0 (`.gitlab-ci.yml`).
76
rust-version.workspace = true
87
license.workspace = true
98
authors.workspace = true

‎crates/rustynes-core/Cargo.toml‎

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ name = "rustynes-core"
33
description = "Cycle-accurate NES emulator core: scheduler, bus, save state, public Nes facade"
44
version.workspace = true
55
edition.workspace = true
6-
# The libretro buildbot builds this crate on Rust 1.96.0 (`.gitlab-ci.yml`).
76
rust-version.workspace = true
87
license.workspace = true
98
authors.workspace = true

‎crates/rustynes-core/src/bus.rs‎

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1260,9 +1260,10 @@ impl SystemBus {
12601260
// Byte 3 (bits 24-31) — extracted without a truncating cast.
12611261
s.to_le_bytes()[3]
12621262
};
1263-
// `&mut *self.ram`, not `&mut self.ram`: `&mut Box<[T; N]>` only
1264-
// became iterable after Rust 1.96, and this crate builds on 1.96 for
1265-
// the libretro buildbot. Reborrowing the array works on both.
1263+
// `&mut *self.ram` reborrows the array: iterating `&mut Box<[T; N]>`
1264+
// directly needs Rust 1.97+. The crate's floor is 1.99, so either form
1265+
// compiles today; the reborrow dates from v3.0.1's one-day split, when
1266+
// the libretro buildbot briefly built this crate on 1.96.
12661267
for byte in &mut *self.ram {
12671268
*byte = next();
12681269
}

‎crates/rustynes-cpu/Cargo.toml‎

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ name = "rustynes-cpu"
33
description = "Cycle-accurate Ricoh 2A03 (6502 derivative) CPU core for the NES"
44
version.workspace = true
55
edition.workspace = true
6-
# The libretro buildbot builds this crate on Rust 1.96.0 (`.gitlab-ci.yml`).
76
rust-version.workspace = true
87
license.workspace = true
98
authors.workspace = true

‎crates/rustynes-gamedb/Cargo.toml‎

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
name = "rustynes-gamedb"
1212
version.workspace = true
1313
edition.workspace = true
14-
# The libretro buildbot builds this crate on Rust 1.96.0 (`.gitlab-ci.yml`).
1514
rust-version.workspace = true
1615
license.workspace = true
1716
authors.workspace = true

‎crates/rustynes-libretro/Cargo.toml‎

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ name = "rustynes-libretro"
33
description = "Cycle-accurate NES emulator libretro core wrapper"
44
version.workspace = true
55
edition.workspace = true
6-
# The libretro buildbot builds this crate on Rust 1.96.0 (`.gitlab-ci.yml`).
76
rust-version.workspace = true
87
license.workspace = true
98
authors.workspace = true

0 commit comments

Comments
 (0)