Skip to content

chore(deps): consolidate 12 dependency PRs and fix the nightly clippy break blocking them all - #55

Merged
fredclausen merged 25 commits into
mainfrom
chore/dependency-roundup
Sep 18, 2026
Merged

fredclausen merged 25 commits into
mainfrom
chore/dependency-roundup

Conversation

@fredclausen

@fredclausen fredclausen commented Sep 18, 2026

Copy link
Copy Markdown
Member

Consolidates all 12 open dependency PRs into one branch and fixes the single root
cause that was holding every one of them red.

Supersedes and closes: #43 #44 #45 #46 #47 #48 #49 #50 #51 #52 #53 #54

Root cause

All 12 PRs failed identically on Check ubuntu-latest nightly and
Check macos-latest nightly. None of them failed because of their own content:

error: enum with no variants
   --> crates/fredshell-core/src/lib.rs:117:1
117 | pub enum BuiltinError {}
    = note: `-D clippy::empty-enums` implied by `-D clippy::nursery`

clippy::empty_enums is a nursery lint, and the workspace sets
nursery = { level = "deny" }. It began firing when nightly clippy picked the
lint up, so every branch in the repo went red at once — including main, which
still has the same code. Stable was and is unaffected.

I reproduced this against today's nightly (1.100.0-nightly, clippy 0.1.100)
and confirmed empty_enums is the only error; nothing else has accumulated
in the intervening weeks.

Changes

1. fix: allow clippy::empty_enums on BuiltinError

One line. BuiltinError is uninhabited deliberately — its doc comment reserves
the slot for future builtins (read, wait) whose failure modes are richer
than an exit status, and CoreError::Builtin already wraps it. The emptiness is
a temporary property of an intentional design, so the lint is wrong at this site.
This mirrors the pre-existing #[allow(clippy::uninhabited_references)] on the
Display impl three lines below, which exists for exactly the same reason.

2. chore(flake): add devShells.nightly

CI gates on nightly, but devShells.default only carried the stable toolchain —
so a nightly-only break could not be reproduced locally at all. That gap is why
one lint sat undiagnosed across 12 PRs for weeks. I had to build a throwaway
nix shell to find it.

The new shell deliberately omits extraDev and corePkgs: those carry the
stable rustc/cargo/clippy plus pre-commit tooling, and mixing them with nightly
would put two toolchains on PATH and trip the E0514 failure already documented
on the default shell. Trade-off is explicit in a comment — no pre-commit hooks in
the nightly shell, so commit from default and use nightly only to run
cargo xtask check.

nix develop --impure .#nightly --command cargo xtask check

3. The 12 dependency bumps

Area Updates
Rust crates base64 0.23.1, clap 4.6.6, syn 3.0.5, plus Cargo.lock maintenance
Actions determinate-nix-action, dtolnay/rust-toolchain, Swatinem/rust-cache 2.9.2, taiki-e/install-action 2.87.12
Flake inputs nixpkgs, nixpkgs-reference 88ae382, precommit, rust-overlay

Notes on the merge

  • #52, #53, #54 (the three update-* flake-input PRs) turned out to be
    fully supersededrenovate/lock-file-maintenance had already advanced
    every input past what they proposed. They are included in the history but
    contribute nothing on top.
  • The one genuine conflict was flake.lock between lock-file-maintenance and
    the update-* branches. Rather than hand-pick hunks across 12 conflicted
    blocks, I resolved it by regenerating the lock with nix flake update, which
    is the only resolution guaranteed internally consistent. All inputs are now at
    current rather than at four different stale points.
  • Cargo.lock needed one reconciliation the merges could not do themselves: a
    stale syn 3.0.3 entry under wasm-bindgen resolved to 3.0.5.

Verification

cargo xtask check (fmt + clippy -D warnings + machete + test + doc) run
locally in both toolchains:

Toolchain Result
stable (dev shell) exit 0
nightly 1.100.0 / clippy 0.1.100 exit 0

pre-commit run --all-files — all 25 active hooks pass.
nix flake check — all outputs evaluate, including both dev shells.

Deliberately not done

CI posture is unchanged. nursery + pedantic at deny, on nightly, with
-D warnings, as a required check, means clippy's release schedule can turn
the whole repo red with no code change — which is precisely what happened here.
Fixing this one lint does not prevent the next one. Making the nightly leg
advisory was considered and explicitly deferred; worth revisiting if this recurs.

Summary by CodeRabbit

  • Developer Experience

    • Added a dedicated nightly Rust development environment with Clippy, rustfmt, and cargo-machete support.
    • Preserved the existing stable development environment and its reference-toolchain configuration.
    • Updated the nightly environment to use an isolated build directory.
  • Maintenance

    • Refreshed development dependencies and pinned tooling revisions.
    • Updated the Nix package reference used by development environments.
    • Added a targeted lint configuration for an intentionally uninhabited error type.

renovate Bot and others added 25 commits September 1, 2026 00:38
…rminate-nix-action-digest' into chore/dependency-roundup
…into chore/dependency-roundup

# Conflicts:
#	flake.lock
…inError

clippy 0.1.100 (nightly) fires clippy::empty_enums on
`pub enum BuiltinError {}`. The lint is a member of the nursery
group, which the workspace denies, so the nightly leg of the CI
`check` matrix failed on every open branch regardless of content.

BuiltinError is uninhabited on purpose: its doc comment reserves the
slot for future builtins (read, wait) whose failure modes are richer
than an exit status, and CoreError::Builtin already wraps it. The
emptiness is a temporary property of an intentional design, not an
oversight, so the lint is wrong here. This mirrors the existing
#[allow(clippy::uninhabited_references)] on the Display impl
immediately below, which exists for the same reason.

Verified `cargo xtask check` exits 0 on both stable and nightly
(1.100.0-nightly, clippy 0.1.100).
The CI `check` matrix runs `cargo xtask check` on both stable and
nightly, but devShells.default only carried the stable toolchain.
A nightly-only lint break was therefore impossible to reproduce
locally — which is how a single new clippy::nursery lint
(clippy::empty_enums) held twelve dependency PRs red for weeks
before anyone could diagnose it.

The new shell deliberately omits extraDev and corePkgs. Those carry
the stable rustc/cargo/clippy plus the pre-commit tooling, and
combining them with the nightly toolchain would put two toolchains
on PATH and trip the E0514 failure already documented on the
default shell. Consequence: no pre-commit hooks in this shell —
commit from the default shell, use this one only for
`cargo xtask check` on nightly.

CARGO_TARGET_DIR is set in the shellHook rather than as a static
mkShell env var because it must be absolute. A relative value is
resolved against each cargo invocation's cwd, and trybuild runs
cargo from inside crates/fredshell-spec-macros; a relative
target/nightly consequently produced a stray tree at
crates/fredshell-spec-macros/target/nightly that the root-anchored
/target/ gitignore does not cover, and cargo-machete then walked
trybuild's generated manifests and failed the check with bogus
unused-dependency findings.

Verified: nixfmt/statix/deadnix clean, `nix flake check` passes, and
`cargo xtask check` exits 0 in both shells with no stray target
trees left behind.
Copilot AI lite review requested due to automatic review settings September 18, 2026 17:53
@coderabbitai

coderabbitai Bot commented Sep 18, 2026

Copy link
Copy Markdown

Review Change StackReview Change Stack

Note

Currently processing new changes in this PR. This may take a few minutes, please wait...

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Team

Run ID: 881afd36-2022-4e1d-9a5c-614a297a98c4

📥 Commits

Reviewing files that changed from the base of the PR and between fcef7b8 and f999916.

⛔ Files ignored due to path filters (2)
  • Cargo.lock is excluded by !**/*.lock
  • flake.lock is excluded by !**/*.lock
📒 Files selected for processing (4)
  • .github/workflows/ci.yml
  • Cargo.toml
  • crates/fredshell-core/src/lib.rs
  • flake.nix
 __________________________________________
< Every day I'm shufflin'... through code. >
 ------------------------------------------
  \
   \   \
        \ /\
        ( )
      .( o ).
✨ Finishing Touches
📝 Generate docstrings
  • Commit to this branch
  • Create a new PR
🧪 Generate unit tests (beta)
  • Commit to this branch
  • Create a new PR

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.

🔵 Needs a closer look

A required reference-document update remains unresolved, and the broad dependency and flake refresh warrants human review.

Pull request overview

Consolidates dependency updates, fixes the nightly Clippy failure, and adds a reproducible nightly Nix shell.

Changes:

  • Allows the intentional empty BuiltinError enum.
  • Adds an isolated nightly development shell.
  • Updates Rust, Nix, GitHub Actions, and lockfiles.
File summaries
File Description
flake.nix Adds the nightly development shell.
flake.lock Refreshes pinned Nix inputs.
crates/fredshell-core/src/lib.rs Allows the intentional empty enum.
Cargo.toml Updates direct dependencies.
Cargo.lock Refreshes dependency resolution.
.github/workflows/ci.yml Updates pinned action revisions.
Review details

Suppressed comments (1)

flake.nix:19

  • This changes the authoritative nixpkgs-reference revision, but tests/spec/REFERENCE.md still declares aec71e3... (and the old pin date). The repository's upgrade policy requires the machine-readable [reference] block to be updated with every flake pin bump; please update that document and re-record/inspect fixtures if the new Bash or coreutils versions differ.
    nixpkgs-reference.url = "github:nixos/nixpkgs/88ae3822eb8aec31f12a4a1895cb064413511177";
  • Files reviewed: 4/6 changed files
  • Comments generated: 0
  • Review effort level: Lite

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

@fredclausen
fredclausen merged commit a2a3b0c into main Sep 18, 2026
8 of 9 checks passed
fredclausen added a commit that referenced this pull request Sep 18, 2026
fix(spec): catch nixpkgs-reference pin drift, and repair the drift #55 introduced
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.

3 participants