Skip to content

chore(deps): consolidate dependency bumps (egui 0.37, wgpu 30, zip 9, Rust 1.99) - #49

Merged
doublegate merged 2 commits into
mainfrom
chore/consolidate-deps-2026-10
Oct 20, 2026
Merged

doublegate merged 2 commits into
mainfrom
chore/consolidate-deps-2026-10

Conversation

@doublegate

@doublegate doublegate commented Oct 20, 2026 •

Copy link
Copy Markdown
Owner

Summary

Consolidates all 7 open Dependabot PRs (#42, #43, #44, #45, #46, #47, #48) and aligns the graphics stack and Rust toolchain with RustyNES v3.4.0:

Supersedes #42, #43, #44, #45, #46, #47, #48.


Note

Medium Risk
Large dependency and graphics-stack upgrade touches rendering, zip ROM loading, and wasm builds; emulator core logic changes are minimal but UI presentation paths need regression testing.

Overview
Bumps the workspace to Rust 1.99 and refreshes CI, docs, and Dependabot (including an egui-wgpu dependency group and dropping Dependabot include: "scope" to avoid duplicate commit prefixes).

Upgrades the desktop/web UI stack: egui/egui-wgpu/egui-winit 0.37, wgpu/naga 30, and zip 9, with Cargo.lock following. The frontend is adjusted for those APIs—wgpu adapter/surface/present paths, egui texture deltas and Id::unique, and zip entry names as Result in ROM archive loading.

Pins wasm bindings (wasm-bindgen, js-sys, web-sys, etc.) to match the lockfile. Clippy 1.99 fixes land across the repo (empty checks, as_chunks, DC-blocker suboptimal_flops allows, egui test cleanup via drop_without_applying_deltas).

Reviewed by Cursor Bugbot for commit cba66f0. Bugbot is set up for automated code reviews on this repo. Configure here.

… Rust 1.99)

- Bump pinned toolchain and workspace MSRV from Rust 1.96 to Rust 1.99 across rust-toolchain.toml, Cargo.toml, workflows, and docs
- Upgrade egui, egui-winit, and egui-wgpu to 0.37.0 (enabling monochrome_emoji_fonts to preserve default UI and debugger icon fonts) and migrate textures_delta and Id::unique call sites
- Upgrade wgpu and naga to 30.0.1 across native, wasm32, and dev-dependencies and migrate RequestAdapterOptions, SurfaceConfiguration, and Queue::present
- Upgrade zip to 9.0.5 and migrate ZipFile::name() Result return in rom_archive.rs
- Upgrade wasm-bindgen (0.2.129), wasm-bindgen-futures (0.4.79), js-sys (0.3.106), web-sys (0.3.106), and transitive crates
- Fix Rust 1.99 clippy lints (assert_is_empty, chunks_exact_to_as_chunks, suboptimal_flops) and dependabot.yml commit-message scope duplication

Supersedes #42, #43, #44, #45, #46, #47, #48.
Copilot AI balanced review requested due to automatic review settings October 20, 2026 05:04
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 20, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-20T05:07:47.020177Z df2cbec PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@coderabbitai

coderabbitai Bot commented Oct 20, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration
  • Configuration used: Organization UI
  • Review profile: ASSERTIVE
  • Plan: Advanced
  • Run ID: 3967d58a-9398-48b8-ba64-2baa3e108660
📥 Commits

Reviewing files that changed from the base of the PR and between df2cbec and cba66f0.

📒 Files selected for processing: 8
  • crates/rusty2600-cheevos/src/lib.rs
  • crates/rusty2600-frontend/src/app.rs
  • crates/rusty2600-frontend/src/debugger/callstack.rs
  • crates/rusty2600-frontend/src/debugger/memory_compare_panel.rs
  • crates/rusty2600-frontend/src/input.rs
  • crates/rusty2600-frontend/src/rom_archive.rs
  • crates/rusty2600-script/src/engine.rs
  • docs/frontend.md

Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 4 remain after this review.

📝 Summary

Summary by CodeRabbit

  • Improvements

    • Updated the supported Rust toolchain to version 1.99 across builds, documentation, and development guidance.
    • Improved graphics compatibility, rendering setup, and web builds.
    • Improved touch-overlay behavior with more reliable controls and unique interface elements.
    • Malformed ROM archive filenames are now skipped gracefully instead of potentially causing a crash.
  • Bug Fixes

    • Improved frame presentation and texture update handling.
  • Testing

    • Refined coverage for touch controls, frame output, empty states, and stack behavior.

The workspace and CI workflows move to Rust 1.99. Frontend dependencies and rendering integration are updated. ROM archive decoding now skips undecodable entry names. Tests and Clippy annotations are updated.

Changes: Toolchain and frontend maintenance

Layer / File(s) Summary
Toolchain and dependency versions
.github/dependabot.yml, Cargo.toml, rust-toolchain.toml, crates/rusty2600-frontend/Cargo.toml, crates/rusty2600-netplay/Cargo.toml, .github/workflows/*, CONTRIBUTING.md, README.md
The workspace toolchain, workflows, documentation, and dependencies are updated for Rust 1.99 and the newer frontend stack. Dependabot groups egui and wgpu-related updates.
Frontend graphics and UI integration
crates/rusty2600-frontend/src/app.rs, crates/rusty2600-frontend/src/gfx.rs, crates/rusty2600-frontend/src/shell.rs, crates/rusty2600-frontend/src/wasm.rs
Texture updates and frees are drained, frames use Gfx::queue.present, adapter and surface options are explicit, and overlay areas use unique egui IDs.
ROM and pixel-buffer handling
crates/rusty2600-frontend/src/rom_archive.rs, crates/rusty2600-frontend/examples/dump_frame.rs, crates/rusty2600-frontend/tests/hd_pack_splice.rs
Archive entries with undecodable names are skipped. Frame output and HD-pack tests process complete RGBA pixels with fixed-size chunks.
Test assertions and lint annotations
crates/rusty2600-cheevos/src/lib.rs, crates/rusty2600-frontend/src/debugger/*, crates/rusty2600-frontend/src/input.rs, crates/rusty2600-script/src/engine.rs, crates/rusty2600-frontend/src/emu_thread.rs, crates/rusty2600-mobile/src/lib.rs
Tests replace empty-result checks with typed array comparisons. Clippy allowances cover selected imports, casts, and floating-point operations.

Priority: ➖ Normal

Estimated code review effort: 3 (Moderate) | ~25 minutes

Change: Other

Merge Risk: ⚪ Minimal · up to cba66

No actionable merge-blocking risk remains; the PR is mergeable with normal checks.

Architecture risk: 🔵 Low · up to cba66

The change affects 6 systems.

Changed systems: crates, Cargo.toml, CONTRIBUTING.md, docs, README.md, rust-toolchain.toml

Architecture concerns
No architecture-level concerns identified.

Review details

Systems and components

  • observed — crates (service) was modified; 16 changed files map to changed impact.
  • observed — Cargo.toml (service) was modified; 1 changed file maps to changed impact.
  • observed — CONTRIBUTING.md (service) was modified; 1 changed file maps to changed impact.
  • observed — docs (service) was modified; 1 changed file maps to changed impact.

Before / after behavior

  • observed — Modified behavior in CONTRIBUTING.md: The development setup now specifies Rust 1.99 instead of Rust 1.96 for the pinned toolchain.
  • observed — Modified behavior in Cargo.toml: The workspace rust-version requirement changed from Rust 1.96 to Rust 1.99.
  • observed — Modified behavior in README.md: Updated the README toolchain badge to display Rust 1.99 instead of Rust 1.96.
  • observed — Modified behavior in crates/rusty2600-frontend/Cargo.toml: Upgraded the base graphics and UI dependencies to wgpu 30 and egui 0.37; the existing wgpu features and platform features remain unchanged, and egui now enables monochrome_emoji_fonts.
Pre-merge checks: Passed 5
Check name Status Explanation
Description check Passed The description accurately summarizes the dependency upgrades, Rust 1.99 migration, frontend API changes, and Dependabot consolidation.
Title check Passed The title clearly and concisely identifies the consolidated dependency bumps, including egui, wgpu, zip, and Rust 1.99.
Docstring Coverage Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 25 functions across 14 files. (1 skipped: …
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.
Full details: Docstring Coverage

Explanation

Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 25 functions across 14 files. (1 skipped: 1 unsupported.)

✨ Finishing Touches
📝 Generate docstrings
  • Commit to this branch
  • Create a new PR
🧪 Generate unit tests (beta)
  • Commit to this branch
  • Create a new PR
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

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

@socket-security

socket-security Bot commented Oct 20, 2026 •

Copy link
Copy Markdown

Review the following changes in direct dependencies. Learn more about Socket for GitHub.

Diff Package Supply Chain
Security
Vulnerability Quality Maintenance License
Updatedegui@​0.35.0 ⏵ 0.37.025 -1010093100100
Updatedwgpu@​29.0.4 ⏵ 30.0.14710093100100
Updatednaga@​29.0.4 ⏵ 30.0.172 -910093100100
Updatedserde_json@​1.0.151 ⏵ 1.0.1548210093100100
Updatedcc@​1.6.0 ⏵ 1.9.09810093100100
Updatedegui-wgpu@​0.35.0 ⏵ 0.37.010010093100100
Updatedegui-winit@​0.35.0 ⏵ 0.37.010010093100100
Updatedzip@​8.6.0 ⏵ 9.0.5100 +110099 +6100100

View full report

@github-actions

github-actions Bot commented Oct 20, 2026 •

Copy link
Copy Markdown

Antigravity review (Gemini via Ultra)

[agy] print timeout after 5m0s with turn in progress; returning partial output

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

Earlier review rounds (newest first)
Round reviewed at 2026-10-20 05:50 UTC

Antigravity review (Gemini via Ultra)

[agy] print timeout after 5m0s with turn in progress; returning partial output

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

Earlier review rounds (newest first)
Round reviewed at 2026-10-20 05:41 UTC

Antigravity review (Gemini via Ultra)

Consolidates workspace toolchain and dependency upgrades to Rust 1.99, egui/egui-wgpu/egui-winit 0.37, wgpu/naga 30, zip 9, and current wasm-bindgen/js-sys/web-sys releases, updating affected call sites and lint suppressions.

Blocking issues

None found.

Suggestions

  • rom_archive.rs:105-111: In extract_first_rom, entry.name() is now fallible in zip 9 and returns a Cow<'_, str>. Calling ? and .into_owned() before checking ROM_EXTENSIONS means:
    1. A non-ROM entry (such as an .nfo or readme with a legacy non-UTF-8 filename) appearing earlier in the central directory will abort extraction of the entire archive with RomArchiveError::Malformed even when a valid .a26/.bin/.rom entry follows.
    2. Every non-ROM entry allocates an owned String just to be discarded by the extension check.
      Check ROM_EXTENSIONS against the borrowed Cow<str> first, only call .into_owned() on the matching entry, and consider skipping entries where entry.name() fails or checking the raw bytes when scanning for a ROM extension.
  • crates/rusty2600-frontend/Cargo.toml:161-163 / Cargo.lock:199-219: Bumping egui-winit to 0.37 with features = ["links", "wayland", "x11"] now pulls in arboard 3.7.0, wl-clipboard-rs, tree_magic_mini (nom 8, petgraph), and image 0.25.10 (png, tiff, fax, zune-jpeg, moxcms, pxfm). Check whether wayland/x11 in egui-winit 0.37 unconditionally enable arboard's image-data feature or if clipboard/image support can be pared back so the frontend doesn't compile full TIFF/JPEG/color-management stacks solely for windowing.
  • docs/frontend.md:443-446: The wasm-winit status section still attributes the adapter fallback behavior specifically to wgpu 29; update the note to reflect wgpu 30 (and whether the webgpu-vs-wgpu-core behavior changed).

Nitpicks

  • crates/rusty2600-cheevos/src/lib.rs:93-94, callstack.rs:61-68, memory_compare_panel.rs:97, input.rs:480-528, engine.rs:523-526: assert_eq!(x, [] as [T; 0]) is noisy compared to assert_eq!(x.as_slice(), &[]) when satisfying clippy's assert_Empty / comparison lints.
  • emu_thread.rs:386, emu_thread.rs:493, emu_thread.rs:639, wasm.rs:449, crates/rusty2600-mobile/src/lib.rs:182: Five copies of the same 1-pole DC-blocker recurrence now carry #[allow(clippy::suboptimal_flops)]; a small shared helper would centralize both the filter step and the lint allow.

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

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.

🟡 Changes recommended

The egui upgrade leaves two scripting tests dropping unapplied texture deltas, triggering debug assertions.

1 open issue
What changed in this PR

Consolidates dependency updates from #42–#48 and migrates Rusty2600’s frontend and build tooling to the updated stack.

Changes:

  • Raises Rust/MSRV to 1.99 across tooling, workflows, and documentation.
  • Upgrades egui, wgpu/naga, zip, and web bindings, adapting frontend APIs.
  • Updates lint-sensitive code and groups coupled Dependabot updates.
File Description
rust-toolchain.toml Pins Rust 1.99.
README.md Updates Rust badge.
crates/​rusty2600-script/​src/​engine.rs Updates empty-log assertion.
crates/​rusty2600-netplay/​Cargo.toml Aligns web bindings.
crates/​rusty2600-mobile/​src/​lib.rs Preserves audio arithmetic with lint allowance.
crates/​rusty2600-frontend/​tests/​hd_pack_splice.rs Updates pixel chunk iteration.
crates/​rusty2600-frontend/​src/​wasm.rs Adds targeted lint allowances and error documentation.
crates/​rusty2600-frontend/​src/​shell.rs Migrates egui identifiers.
crates/​rusty2600-frontend/​src/​rom_archive.rs Handles fallible ZIP filenames.
crates/​rusty2600-frontend/​src/​input.rs Updates empty-result assertions.
crates/​rusty2600-frontend/​src/​gfx.rs Adapts wgpu initialization.
crates/​rusty2600-frontend/​src/​emu_thread.rs Preserves audio arithmetic with lint allowances.
crates/​rusty2600-frontend/​src/​debugger/​memory_compare_panel.rs Updates empty-diff assertion.
crates/​rusty2600-frontend/​src/​debugger/​callstack.rs Updates empty-stack assertions.
crates/​rusty2600-frontend/​src/​app.rs Migrates texture handling, presentation, and identifiers.
crates/​rusty2600-frontend/​examples/​dump_frame.rs Updates pixel chunk iteration.
crates/​rusty2600-frontend/​Cargo.toml Upgrades frontend dependencies.
crates/​rusty2600-cheevos/​src/​lib.rs Updates empty-list assertions.
CONTRIBUTING.md Documents Rust 1.99.
Cargo.toml Raises workspace MSRV.
Cargo.lock Refreshes resolved dependencies.
.github/​workflows/​singlestep-full.yml Updates test toolchain.
.github/​workflows/​release.yml Updates release toolchain.
.github/​workflows/​pages.yml Updates web-build toolchain.
.github/​workflows/​ci.yml Updates CI toolchains.
.github/​dependabot.yml Groups graphics updates and fixes commit prefixes.

Review effort: Balanced

Comment thread crates/rusty2600-frontend/Cargo.toml

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

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

Fix All in Cursor

Bugbot Autofix prepared a fix for the issue found in the latest run.

  • ✅ Fixed: Zip name errors abort ROM search
    • extract_first_rom now skips entries whose name fails to decode (like it already skips directories and non-ROM extensions) instead of returning Malformed, so a later valid ROM entry is still found.

Create PR

Or push these changes by commenting:

@cursor push de2886a0dc
Preview (de2886a0dc)
diff --git a/crates/rusty2600-frontend/src/rom_archive.rs b/crates/rusty2600-frontend/src/rom_archive.rs
--- a/crates/rusty2600-frontend/src/rom_archive.rs
+++ b/crates/rusty2600-frontend/src/rom_archive.rs
@@ -102,10 +102,9 @@
         if entry.is_dir() {
             continue;
         }
-        let name = entry
-            .name()
-            .map_err(|e| RomArchiveError::Malformed(e.to_string()))?
-            .into_owned();
+        let Ok(name) = entry.name().map(std::borrow::Cow::into_owned) else {
+            continue;
+        };
         if !ROM_EXTENSIONS.contains(&extension_of(&name).as_str()) {
             continue;
         }

You can send follow-ups to the cloud agent here.

Reviewed by Cursor Bugbot for commit df2cbec. Configure here.

Comment thread crates/rusty2600-frontend/src/rom_archive.rs Outdated
…p undecodable zip names

- Call full_output.drop_without_applying_deltas() in scripting overlay tests for egui 0.37 debug assertion compatibility
- Skip non-decodable entry names and check ROM_EXTENSIONS before allocating owned String in rom_archive::extract_first_rom
- Replace [] as [T; 0] slice assertions with .as_slice(), &[] and update wgpu version note in docs/frontend.md
@doublegate

Copy link
Copy Markdown
Owner Author

Adjudication of Antigravity (agy) Review Items (cba66f0)

  • rom_archive.rs:105-111 (extract_first_rom): Fixed in cba66f0 — extract_first_rom now skips entries whose entry.name() fails to decode and checks ROM_EXTENSIONS against the borrowed Cow<str> before allocating an owned String.
  • crates/rusty2600-frontend/Cargo.toml:161-163 (egui-winit 0.37 / arboard): Verified via cargo tree -i arboard --target all -e features (warning: nothing to print) that arboard and image are not compiled into any target. egui-winit = { version = "0.37", default-features = false, features = ["links", "wayland", "x11"] } leaves the optional arboard dependency disabled; arboard appears in Cargo.lock only because egui-winit's wayland feature uses weak-optional syntax (arboard?/wayland-data-control), which Cargo records in Cargo.lock without activating arboard.
  • docs/frontend.md:443-446: Updated in cba66f0 to reference wgpu 29/30.
  • Empty slice assertions ([] as [T; 0]): Updated in cba66f0 to use .as_slice(), &[] across rusty2600-cheevos, memory_compare_panel.rs, input.rs, and rusty2600-script (and [0u16; 0] in callstack.rs where http::StatusCode's PartialEq<u16> impl makes &[] ambiguous under --features full).

@doublegate

Copy link
Copy Markdown
Owner Author

/agy-review

@coderabbitai

coderabbitai Bot commented Oct 20, 2026 •

Copy link
Copy Markdown
⚠️ Action not completed

Already reviewed the last commit. Use @coderabbitai full review to rerun a review of the entire changeset.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@doublegate
doublegate merged commit a351940 into main Oct 20, 2026
14 checks passed
@doublegate
doublegate deleted the chore/consolidate-deps-2026-10 branch October 20, 2026 06:49
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