Skip to content

Conversation

@findolor
Copy link
Contributor

@findolor findolor commented Dec 9, 2025

Motivation

Solution

Checks

By submitting this for review, I'm confirming I've done the following:

  • made this PR as small as possible
  • unit-tested any new functionality
  • linked any relevant issues or PRs
  • included screenshots (if this involves a front-end change)

Summary by CodeRabbit

  • Chores

    • Upgraded Rust development toolchain to 1.89.0 for improved compiler features and stability.
    • Added project build configuration to standardize source/output/library paths, enable build metadata output, and exclude test/script directories from regular builds.
  • Tests

    • Improved build and test verification workflows with enhanced checks and formatting validation.

✏️ Tip: You can customize this high-level summary in your review settings.

@findolor findolor self-assigned this Dec 9, 2025
@coderabbitai
Copy link

coderabbitai bot commented Dec 9, 2025

Walkthrough

Bump Rust toolchain version in flake.nix from "1.87.0" to "1.89.0" and add a new Foundry configuration block in foundry.toml specifying src/out/libs paths, build_info settings, and ignored_paths for tests and scripts.

Changes

Cohort / File(s) Summary
Flake configuration
flake.nix
Update rust-version from "1.87.0" to "1.89.0" in flake outputs/toolchain derivation. No other functional changes.
Foundry configuration
foundry.toml
Add [profile.default] block with src, out, libs, build_info, build_info_path, and ignored_paths settings for Foundry builds.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~10 minutes

  • Verify Rust version bump consistency with CI/build configs.
  • Confirm foundry.toml paths and ignored_paths match repo layout and build expectations.

Possibly related issues

Possibly related PRs

Suggested reviewers

  • rouzwelt
  • thedavidmeister
  • hardyjosh

Pre-merge checks and finishing touches

✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately captures the main change (Rust version bump from 1.87.0 to 1.89.0 in flake.nix), though it doesn't specify the exact versions or files affected.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
✨ Finishing touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch 2025-12-09-rust-version-bump

📜 Recent review details

Configuration used: CodeRabbit UI

Review profile: ASSERTIVE

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between e8e63a1 and 127d110.

📒 Files selected for processing (2)
  • flake.nix (1 hunks)
  • foundry.toml (1 hunks)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (3)
  • GitHub Check: rainix-check-shell (macos-latest)
  • GitHub Check: rainix-check-shell (ubuntu-latest)
  • GitHub Check: rainix (macos-latest, rainix-rs-test)
🔇 Additional comments (1)
foundry.toml (1)

1-9: Foundry default profile config is coherent; just confirm paths match your fixtures.

The src, out, libs, and build_info_path settings form a consistent fixture‑oriented layout, and ignored_paths mirrors the CI comment. Please just verify that these directories exist in the repo and that forge build succeeds with this config so you don’t hit path‑resolution surprises later.


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

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

📜 Review details

Configuration used: CodeRabbit UI

Review profile: ASSERTIVE

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 59a4f0b and e8e63a1.

📒 Files selected for processing (1)
  • flake.nix (2 hunks)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (4)
  • GitHub Check: rainix (macos-latest, rainix-rs-artifacts)
  • GitHub Check: rainix (macos-latest, rainix-rs-test)
  • GitHub Check: rainix-check-shell (ubuntu-latest)
  • GitHub Check: rainix-check-shell (macos-latest)
🔇 Additional comments (1)
flake.nix (1)

181-183: Revert scope concern—these changes are in-scope for the foundry error fix.

The commit is "fix foundry error," not a Rust version update. The rainix-sol-static task modifications—changing to test/fixture, adding --build-info --skip filters, and using --ignore-compile—are appropriate fixes for a foundry-related issue. The cd test/fixture applies intentionally to all subsequent commands in this task (including forge fmt --check on line 184).

old-pkgs = import nixpkgs-old { inherit system; };

rust-version = "1.87.0";
rust-version = "1.89.0";
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🌐 Web query:

Rust 1.89.0 stable release date breaking changes

💡 Result:

  • Release date: August 7, 2025. [1][2]

  • Notable breaking or potentially breaking changes:

    • Sized hierarchy change (Part I): small breaking change affecting ?Sized bounds on impls for certain recursive types with associated type projections — may require refactoring or opting into the unstable feature. [2]
    • Cross-compiled doctests are now executed for cargo test --doc --target ..., which can surface previously-unchecked failing doctests. Tests can be disabled with ignore-<target>. [1][2]
    • Some formerly-accidentally-stable intrinsics (e.g., std::intrinsics::copy, copy_nonoverlapping, write_bytes) were turned into proper intrinsics (no debug assertions, cannot coerce to fn pointers) and std::intrinsics::drop_in_place was removed — code depending on the old behavior may break. [2]
    • New warn/deny-by-default lints (e.g., mismatched_lifetime_syntaxes replacing elided_named_lifetimes, dangerous_implicit_autorefs made deny-by-default) can produce new warnings/errors in existing code. [1][2]
    • i128/u128 removed from improper_ctypes_definitions (they no longer warn in extern "C"), and extern "C" on wasm32 changed to a standards-compliant ABI — both can affect FFI assumptions. [1][2]
    • Target-tier and platform/tooling changes (e.g., demotion-in-progress of x86_64-apple-darwin to Tier 2 with host tools) may cause future compatibility/test coverage issues. [1]

Sources: Rust blog announcement and official release notes for Rust 1.89.0. [1][2]

References
[1] Announcing Rust 1.89.0 (Rust Blog, Aug 7 2025).
[2] Rust 1.89.0 release notes / changelog.


Rust 1.89.0 has been released (August 7, 2025) but includes several breaking changes requiring testing.

This version introduces notable breaking changes: Sized hierarchy modifications affecting ?Sized bounds, cross-compiled doctests now executing (which may surface previously unchecked failures), changes to intrinsics behavior (std::intrinsics::copy, copy_nonoverlapping, write_bytes no longer support debug assertions or function pointer coercion; drop_in_place removed), new warn/deny-by-default lints, and FFI-related changes. Ensure the codebase is tested thoroughly with this version, particularly if it uses doctests with cross-compilation targets, FFI code, or relies on the changed intrinsics.

🤖 Prompt for AI Agents
In flake.nix around line 21 the rust-version is set to "1.89.0", which is a
breaking release; update the flake to either pin back to the last known-good
toolchain (e.g., 1.88.x) until compatibility is verified, or add 1.89.0 as an
additional toolchain in the CI matrix and run full test suites (unit,
integration, cross-compiled doctests) and FFI checks; if tests fail, revert the
runtime/default to 1.88.x and open a follow-up task to incrementally fix code
for the 1.89 breaking changes (Sized hierarchy, intrinsics, doctests, new lints,
FFI) before making 1.89 the default.

@findolor findolor merged commit b074f64 into main Dec 10, 2025
11 of 13 checks passed
@github-actions
Copy link

@coderabbitai assess this PR size classification for the totality of the PR with the following criterias and report it in your comment:

S/M/L PR Classification Guidelines:

This guide helps classify merged pull requests by effort and complexity rather than just line count. The goal is to assess the difficulty and scope of changes after they have been completed.

Small (S)

Characteristics:

  • Simple bug fixes, typos, or minor refactoring
  • Single-purpose changes affecting 1-2 files
  • Documentation updates
  • Configuration tweaks
  • Changes that require minimal context to review

Review Effort: Would have taken 5-10 minutes

Examples:

  • Fix typo in variable name
  • Update README with new instructions
  • Adjust configuration values
  • Simple one-line bug fixes
  • Import statement cleanup

Medium (M)

Characteristics:

  • Feature additions or enhancements
  • Refactoring that touches multiple files but maintains existing behavior
  • Breaking changes with backward compatibility
  • Changes requiring some domain knowledge to review

Review Effort: Would have taken 15-30 minutes

Examples:

  • Add new feature or component
  • Refactor common utility functions
  • Update dependencies with minor breaking changes
  • Add new component with tests
  • Performance optimizations
  • More complex bug fixes

Large (L)

Characteristics:

  • Major feature implementations
  • Breaking changes or API redesigns
  • Complex refactoring across multiple modules
  • New architectural patterns or significant design changes
  • Changes requiring deep context and multiple review rounds

Review Effort: Would have taken 45+ minutes

Examples:

  • Complete new feature with frontend/backend changes
  • Protocol upgrades or breaking changes
  • Major architectural refactoring
  • Framework or technology upgrades

Additional Factors to Consider

When deciding between sizes, also consider:

  • Test coverage impact: More comprehensive test changes lean toward larger classification
  • Risk level: Changes to critical systems bump up a size category
  • Team familiarity: Novel patterns or technologies increase complexity

Notes:

  • the assessment must be for the totality of the PR, that means comparing the base branch to the last commit of the PR
  • the assessment output must be exactly one of: S, M or L (single-line comment) in format of: SIZE={S/M/L}
  • do not include any additional text, only the size classification
  • your assessment comment must not include tips or additional sections
  • do NOT tag me or anyone else on your comment

@coderabbitai
Copy link

coderabbitai bot commented Dec 10, 2025

Tip

For best results, initiate chat on the files or code changes.

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Get the full diff stats for the PR
git diff origin/main...HEAD --stat

# Get the detailed diff to assess complexity
git diff origin/main...HEAD

# Count the number of files changed
git diff origin/main...HEAD --numstat | wc -l

Length of output: 124


🏁 Script executed:

#!/bin/bash
# Check current branch
git branch -a

# Try getting diff between branches directly
git diff main HEAD --stat 2>/dev/null || echo "Direct diff failed"

# Use gh CLI to get the PR diff
gh pr diff 99 --repo rainlanguage/rainix

Length of output: 564


SIZE=S

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.

4 participants