Skip to content

Fix conductor setup dirtying Pro lockfiles (sqlite3 Ruby 3.4 compat)#2667

Merged
justin808 merged 3 commits intomainfrom
jg/2663-extract-path-resolver
Mar 17, 2026
Merged

Fix conductor setup dirtying Pro lockfiles (sqlite3 Ruby 3.4 compat)#2667
justin808 merged 3 commits intomainfrom
jg/2663-extract-path-resolver

Conversation

@justin808
Copy link
Copy Markdown
Member

@justin808 justin808 commented Mar 17, 2026

Summary

  • Root cause: sqlite3 ~> 1.4 resolves to 1.7.3, whose precompiled gems require ruby < 3.4.dev. On Ruby 3.4.8, bundler falls back to the source gem variant (adding mini_portile2), dirtying both Pro lockfiles on every bundle install
  • Fix: Update sqlite3 constraint from ~> 1.4 to ~> 2.0 — sqlite3 2.x precompiled gems support Ruby 3.4 natively
  • Secondary: Conductor setup script now ensures the correct bundler version (matching BUNDLED WITH in each lockfile) is installed before running bundle install

Closes #2663

Test plan

  • Pro unit tests pass (282 examples, 0 failures) with sqlite3 2.9.2
  • Run conductor-setup.sh in a fresh workspace and verify git status shows no dirty lockfiles
  • CI passes

🤖 Generated with Claude Code


Note

Medium Risk
Touches dependency resolution and lockfiles across multiple Ruby apps; risk is mainly around native gem compatibility and CI/environment differences when installing sqlite3 2.x and matching bundler versions.

Overview
Prevents conductor-setup.sh from dirtying Ruby lockfiles by auto-installing the Bundler version specified in each Gemfile.lock and then running bundle install across all lockfile directories via a single loop.

Updates React on Rails Pro development dependencies to require sqlite3 ~> 2.0, and refreshes the Pro and dummy app lockfiles to sqlite3 2.9.2 with updated platform gem entries.

Written by Cursor Bugbot for commit bc76883. This will update automatically on new commits. Configure here.

Summary by CodeRabbit

  • Chores
    • Improved development setup with automatic synchronization of Bundler versions across project dependencies
    • Updated SQLite3 development dependency to version 2.0

bundle install resolves sqlite3 differently on Darwin 25 vs the
platforms in the committed lockfiles, causing dirty diffs in
react_on_rails_pro/ lockfiles. Restore them after install so
workspaces start clean.

Closes #2663

Co-Authored-By: Claude Opus 4.6 <[email protected]>
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Mar 17, 2026

Walkthrough

Adds per-directory Bundler-version matching and installation to the shell setup flow, driven by a new LOCKFILE_DIRS list and install_matching_bundler(lockfile) helper; replaces duplicated per-directory bundle installs with a loop that installs matching Bundler (non-fatally) and runs bundle install for each directory. Also updates a development Gemfile dependency.

Changes

Cohort / File(s) Summary
Setup script — bundler matching & loop
conductor-setup.sh
Adds LOCKFILE_DIRS array and install_matching_bundler(lockfile) function that reads BUNDLED WITH from Gemfile.lock, installs the matching Bundler if missing (non-fatal), and replaces duplicated Ruby install steps with a loop that pushd/bundle install/popd per directory. Messaging updated to reflect per-directory processing.
Gem dependency update
react_on_rails_pro/Gemfile.development_dependencies
Bumps sqlite3 development dependency from ~> 1.4 to ~> 2.0.

Sequence Diagram(s)

sequenceDiagram
  participant Script as conductor-setup.sh
  participant FS as FileSystem
  participant RubyGems as RubyGems/Bundler
  participant Bundler as bundler (local)
  Script->>FS: read LOCKFILE_DIRS
  loop for each lockfile
    Script->>FS: read <Gemfile.lock> BUNDLED WITH
    Script->>Bundler: check installed versions
    alt matching bundler missing
      Script->>RubyGems: install specific bundler version
      RubyGems-->>Bundler: bundler installed
    end
    Script->>FS: pushd directory
    Script->>Bundler: run `bundle install`
    Script->>FS: popd
  end
  Script->>Script: continue remaining setup (corepack, pnpm, hooks, lint)
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Poem

🐰 I hopped through locks and versioned trails,
I sniffed the Bundler in each tiny vale,
I fetched the right gem-rabbit for every nest,
And left your bundles tidy — snug and blessed. 🥕

🚥 Pre-merge checks | ✅ 3 | ❌ 2

❌ Failed checks (2 warnings)

Check name Status Explanation Resolution
Linked Issues check ⚠️ Warning The PR objectives describe addressing issue #2663 (extracting shared path-resolver helpers), but the actual changes only modify conductor-setup.sh and sqlite3 gem version, with no code changes to Doctor/SystemChecker modules. The PR does not implement the stated objective to extract path-resolver helpers into a shared module. Either add the required code refactoring or clarify that this PR addresses only the sqlite3/conductor-setup fix, deferring the #2663 extraction.
Out of Scope Changes check ⚠️ Warning Changes to conductor-setup.sh bundler-matching and sqlite3 dependency bump are in scope, but the PR claims to close #2663 without implementing its extraction requirements, creating scope mismatch. Clarify the PR's scope: confirm whether it addresses #2663 extraction work or focus solely on sqlite3/conductor-setup fixes. Avoid mixing unrelated objectives in a single PR.
✅ 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 describes the primary changes: fixing conductor setup to prevent dirtying Pro lockfiles via sqlite3 Ruby 3.4 compatibility.
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch jg/2663-extract-path-resolver
📝 Coding Plan
  • Generate coding plan for human review comments

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@greptile-apps
Copy link
Copy Markdown

greptile-apps Bot commented Mar 17, 2026

Greptile Summary

This PR adds a git checkout -- step in conductor-setup.sh to restore react_on_rails_pro/Gemfile.lock and react_on_rails_pro/spec/dummy/Gemfile.lock after bundle install, preventing darwin-25 (macOS Sequoia) platform-specific sqlite3 resolution from dirtying committed lockfiles during workspace setup.

Key observations:

  • The fix correctly targets the newly added git checkout after all four bundle install calls have completed, and correctly runs from the repo root using relative paths.
  • The 2>/dev/null || true guard is appropriate — it silently no-ops when react_on_rails_pro is absent (e.g., for contributors without access to the private submodule).
  • Gap: The script also runs bundle install at the repository root (line 80) and inside react_on_rails/spec/dummy (lines 83–85). Neither of those lockfiles is included in the restoration step. If the same platform-resolution issue affects those Gemfiles (which use the same system Ruby/Bundler), git status would still show dirty files after setup. All four lockfiles should be restored for a truly clean workspace.

Confidence Score: 3/5

  • Safe to merge, but the fix is incomplete — the root and react_on_rails/spec/dummy Gemfile.lock files are not restored, leaving them potentially dirty.
  • The change is a narrow, low-risk shell script addition. The || true guard prevents it from breaking the setup flow. However, it only partially solves the stated problem: two of the four lockfiles written by bundle install are left out of the restore step, which may still result in a dirty workspace on Darwin 25.
  • conductor-setup.sh — review which Gemfile.lock files are included in the git checkout restoration step.

Important Files Changed

Filename Overview
conductor-setup.sh Adds a git checkout step after all bundle install calls to restore committed Gemfile.lock files dirtied by platform-specific gem resolution on Darwin 25. The fix only covers the two react_on_rails_pro lockfiles, while the root and react_on_rails/spec/dummy lockfiles — which are also generated by bundle install steps earlier in the script — are left unrestored.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    A[bundle install - root] -->|may dirty| B[Gemfile.lock ❌ not restored]
    C[bundle install - react_on_rails/spec/dummy] -->|may dirty| D[react_on_rails/spec/dummy/Gemfile.lock ❌ not restored]
    E[bundle install - react_on_rails_pro] -->|may dirty| F[react_on_rails_pro/Gemfile.lock ✅ restored]
    G[bundle install - react_on_rails_pro/spec/dummy] -->|may dirty| H[react_on_rails_pro/spec/dummy/Gemfile.lock ✅ restored]
    F --> I[git checkout -- react_on_rails_pro lockfiles]
    H --> I
    I --> J[Workspace setup continues]
Loading

Last reviewed commit: "Restore committed Ge..."

Comment thread conductor-setup.sh Outdated
Comment on lines +102 to +105
git checkout -- \
react_on_rails_pro/Gemfile.lock \
react_on_rails_pro/spec/dummy/Gemfile.lock \
2>/dev/null || true
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Incomplete lockfile restoration — root and react_on_rails/spec/dummy lockfiles are not restored

The script runs bundle install in four directories (root, react_on_rails/spec/dummy, react_on_rails_pro, and react_on_rails_pro/spec/dummy), but the new git checkout step only restores the two react_on_rails_pro lockfiles.

If the darwin-25 sqlite3 platform-resolution issue (or any other platform-specific gem resolution) affects the root Gemfile.lock or react_on_rails/spec/dummy/Gemfile.lock, those files will still be dirtied after setup. The fix feels incomplete — consider restoring all four lockfiles for consistency:

Suggested change
git checkout -- \
react_on_rails_pro/Gemfile.lock \
react_on_rails_pro/spec/dummy/Gemfile.lock \
2>/dev/null || true
git checkout -- \
Gemfile.lock \
react_on_rails/spec/dummy/Gemfile.lock \
react_on_rails_pro/Gemfile.lock \
react_on_rails_pro/spec/dummy/Gemfile.lock \
2>/dev/null || true

If the root and react_on_rails/spec/dummy lockfiles are intentionally excluded (e.g., they don't pin sqlite3 and are therefore unaffected), a brief comment explaining that would make the intent clearer.

Comment thread conductor-setup.sh Outdated
Comment on lines +102 to +105
git checkout -- \
react_on_rails_pro/Gemfile.lock \
react_on_rails_pro/spec/dummy/Gemfile.lock \
2>/dev/null || true
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

The 2>/dev/null || true makes this best-effort, which is fine, but it silently discards both expected cases (file not tracked yet) and unexpected ones (git in a bad state, corrupted repo, etc.). Consider at least surfacing a warning when the checkout fails:

Suggested change
git checkout -- \
react_on_rails_pro/Gemfile.lock \
react_on_rails_pro/spec/dummy/Gemfile.lock \
2>/dev/null || true
git checkout -- \
react_on_rails_pro/Gemfile.lock \
react_on_rails_pro/spec/dummy/Gemfile.lock \
2>/dev/null || echo "⚠️ Could not restore lockfiles — workspace may be dirty"

Comment thread conductor-setup.sh Outdated
Comment on lines +102 to +104
git checkout -- \
react_on_rails_pro/Gemfile.lock \
react_on_rails_pro/spec/dummy/Gemfile.lock \
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

The same platform-specific sqlite3 resolution issue could affect the root Gemfile.lock and react_on_rails/spec/dummy/Gemfile.lock as well — both were modified by bundle install earlier in the script. If the goal is a clean git status after setup, those should be restored here too for consistency:

Suggested change
git checkout -- \
react_on_rails_pro/Gemfile.lock \
react_on_rails_pro/spec/dummy/Gemfile.lock \
git checkout -- \
Gemfile.lock \
react_on_rails/spec/dummy/Gemfile.lock \
react_on_rails_pro/Gemfile.lock \
react_on_rails_pro/spec/dummy/Gemfile.lock \

@claude
Copy link
Copy Markdown
Contributor

claude Bot commented Mar 17, 2026

Review

The fix is straightforward and addresses a real pain point (platform-specific sqlite3 lockfile rewrites dirtying the workspace on macOS Sequoia). A couple of things worth addressing:

Incomplete coverage — The script also runs bundle install for the root Gemfile.lock and react_on_rails/spec/dummy/Gemfile.lock (lines 80 and 84). If the Darwin 25 issue applies to the react_on_rails_pro lockfiles, it can apply to those too, so the restore step should cover all four lockfiles to guarantee a clean git status post-setup.

Silent failure2>/dev/null || true suppresses everything; if git is in an unexpected state the script silently continues. Even a fallback echo warning (see inline suggestion) would make debugging easier without compromising the best-effort intent.

Masking legitimate updates — Worth noting in a comment near the restore step: if a developer intentionally updates one of these lockfiles (e.g. adding a gem), running setup again will silently revert their changes. An alternative that avoids this entirely is using bundle lock --add-platform in CI to bake the Darwin platform into the committed lockfile, so bundle install never rewrites it locally. That's a more invasive change, but worth considering as a follow-up.

Copy link
Copy Markdown
Contributor

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

🧹 Nitpick comments (1)
conductor-setup.sh (1)

101-105: Consider extending this lockfile-stability pattern to post-setup workflows.

run_rspec:dummy and the Pro CI dummy install path also run bundle install, so they can reintroduce lockfile drift after setup. A follow-up centralization (or equivalent guard) would keep behavior consistent across developer and CI flows.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@conductor-setup.sh` around lines 101 - 105, The lockfile restore in
conductor-setup.sh only runs during setup and can be undone by later bundle
installs; update the post-setup workflows (specifically the run_rspec:dummy task
and the Pro CI dummy install path) to reuse the same lockfile-stability guard:
either call the existing restore routine from conductor-setup.sh or add
equivalent git checkout commands for react_on_rails_pro/Gemfile.lock and
react_on_rails_pro/spec/dummy/Gemfile.lock immediately before/after their bundle
install steps so those flows cannot reintroduce lockfile drift.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Nitpick comments:
In `@conductor-setup.sh`:
- Around line 101-105: The lockfile restore in conductor-setup.sh only runs
during setup and can be undone by later bundle installs; update the post-setup
workflows (specifically the run_rspec:dummy task and the Pro CI dummy install
path) to reuse the same lockfile-stability guard: either call the existing
restore routine from conductor-setup.sh or add equivalent git checkout commands
for react_on_rails_pro/Gemfile.lock and
react_on_rails_pro/spec/dummy/Gemfile.lock immediately before/after their bundle
install steps so those flows cannot reintroduce lockfile drift.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 71456883-7f85-4385-9060-401cfd45369c

📥 Commits

Reviewing files that changed from the base of the PR and between 6ec9412 and f3d3c3e.

📒 Files selected for processing (1)
  • conductor-setup.sh

sqlite3 1.7.3 precompiled gems require ruby < 3.4.dev. On Ruby 3.4+,
bundler silently falls back to the source gem variant, adding
mini_portile2 and dirtying the lockfile on every bundle install.

sqlite3 2.x precompiled gems support Ruby 3.4 natively, eliminating
the platform resolution mismatch.

Co-Authored-By: Claude Opus 4.6 <[email protected]>
@justin808 justin808 changed the title Restore committed Gemfile.lock files after bundle install in setup Fix conductor setup dirtying Pro lockfiles (sqlite3 Ruby 3.4 compat) Mar 17, 2026
Read BUNDLED WITH from each lockfile and install that bundler version
before running bundle install. Prevents bundler 4.x from re-resolving
platform gems differently than the 2.x that created the lockfiles.

Also consolidates the four bundle install blocks into a loop.

Co-Authored-By: Claude Opus 4.6 <[email protected]>
Comment thread conductor-setup.sh
popd > /dev/null
for dir in "${LOCKFILE_DIRS[@]}"; do
echo " $dir ..."
pushd "$dir" > /dev/null
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

The bundle install loop does not guard against missing directories, unlike install_matching_bundler which skips when the lockfile is absent. If react_on_rails_pro or react_on_rails/spec/dummy do not exist (e.g. standalone OSS checkout), pushd will fail here and set -e will abort the whole setup.

Suggested change
pushd "$dir" > /dev/null
[[ -d "$dir" ]] || continue
pushd "$dir" > /dev/null

Comment thread conductor-setup.sh
local v
v=$(grep -A1 "BUNDLED WITH" "$lockfile" | tail -1 | tr -d ' ')
if [[ -n "$v" ]]; then
if ! run_cmd gem list bundler -i -v "$v" > /dev/null 2>&1; then
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

gem list -i -v VERSION is correct (exits 0 if that exact version is installed, 1 otherwise), but the flags read cryptically. A short comment here would help future readers understand what this check does without having to look up RubyGems docs.

Suggested change
if ! run_cmd gem list bundler -i -v "$v" > /dev/null 2>&1; then
# -i: exit 0 if installed, 1 if not; -v: scope to exact version
if ! run_cmd gem list bundler -i -v "$v" > /dev/null 2>&1; then

Comment thread conductor-setup.sh
install_matching_bundler() {
local lockfile="$1"
if [[ -f "$lockfile" ]]; then
local v
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Minor robustness nit: tr -d ' ' strips ASCII spaces but not carriage returns. If a Gemfile.lock is ever checked in with CRLF line endings (Windows editor, etc.), the extracted version would be 2.4.10\r, which wouldn't match the gem list query and would trigger a redundant gem install on every run.

Suggested change
local v
v=$(grep -A1 "BUNDLED WITH" "$lockfile" | tail -1 | tr -d ' \r')

Comment thread conductor-setup.sh
if [[ -f "$lockfile" ]]; then
local v
v=$(grep -A1 "BUNDLED WITH" "$lockfile" | tail -1 | tr -d ' ')
if [[ -n "$v" ]]; then
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

On older RubyGems versions, gem list without --exact does a substring/regex name match, so bundler could also match bundler-audit or similar gems. Adding --exact makes the intent explicit and safe across all RubyGems versions:

Suggested change
if [[ -n "$v" ]]; then
if ! run_cmd gem list --exact bundler -i -v "$v" > /dev/null 2>&1; then

Comment thread conductor-setup.sh
Comment on lines +94 to +100
}

LOCKFILE_DIRS=(
"."
"react_on_rails/spec/dummy"
"react_on_rails_pro"
"react_on_rails_pro/spec/dummy"
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

The react_on_rails_pro entries assume the Pro subpackage is present. Open-source contributors cloning only the public repo won't have these directories, and pushd react_on_rails_pro will cause the script to exit (due to set -e) with a confusing error.

This is a pre-existing issue (the old code had separate pushd react_on_rails_pro blocks), but consolidating into a shared array is a good moment to add a guard:

Suggested change
}
LOCKFILE_DIRS=(
"."
"react_on_rails/spec/dummy"
"react_on_rails_pro"
"react_on_rails_pro/spec/dummy"
LOCKFILE_DIRS=(
"."
"react_on_rails/spec/dummy"
)
# Add Pro directories only if they exist
if [[ -d "react_on_rails_pro" ]]; then
LOCKFILE_DIRS+=(
"react_on_rails_pro"
"react_on_rails_pro/spec/dummy"
)
fi

@@ -470,14 +470,18 @@ GEM
actionpack (>= 6.1)
activesupport (>= 6.1)
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

The source gem entry (sqlite3 (2.9.2) with mini_portile2 dependency) still appears here alongside the native gems. This is expected — bundler keeps the source fallback in the lockfile even when a native gem is available — but it means on a platform without a matching native gem, bundler will still compile from source (requiring a C toolchain). Given that 2.x adds more native platforms (including musl variants), this should rarely be hit in practice.

@claude
Copy link
Copy Markdown
Contributor

claude Bot commented Mar 17, 2026

Good PR. The root-cause fix (ensuring correct bundler version before install) is the right approach vs restoring lockfiles after the fact. The sqlite3 2.x bump correctly addresses Ruby 3.4 compat, and 2.9.2 lockfiles add musl platform variants which helps containerized CI. Minor issues flagged as inline comments: (1) tr needs backslash-r to guard against CRLF lockfiles; (2) gem list needs --exact to prevent substring matches; (3) LOCKFILE_DIRS hardcodes Pro directories without checking they exist - open-source contributors will hit a confusing pushd failure. No concerns with the sqlite3 2.x API surface (dev/test dep only) or run_cmd + pushd fallback behavior.

Copy link
Copy Markdown
Contributor

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

🧹 Nitpick comments (1)
conductor-setup.sh (1)

109-114: Consider explicitly pinning the Bundler version in the install command.

The script already ensures the correct Bundler version is installed via install_matching_bundler(), but you can make the version constraint explicit in the command itself. Instead of relying on the installed version, invoke bundle _x.y.z_ install to guarantee the lockfile-specified version is used, eliminating any shim-resolution ambiguity across environments.

♻️ Proposed change
for dir in "${LOCKFILE_DIRS[@]}"; do
    echo "   $dir ..."
    pushd "$dir" > /dev/null
-    run_cmd bundle install
+    bundler_version=$(awk '/^BUNDLED WITH$/{getline; gsub(/[[:space:]]/,""); print; exit}' "$dir/Gemfile.lock")
+    if [[ -n "$bundler_version" ]]; then
+        run_cmd bundle _"$bundler_version"_ install
+    else
+        run_cmd bundle install
+    fi
    popd > /dev/null
done
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@conductor-setup.sh` around lines 109 - 114, The loop currently runs run_cmd
bundle install which can pick the wrong bundler shim; update it to invoke the
explicit pinned bundler by using the installed version token (e.g., run_cmd
"bundle _${BUNDLER_VERSION}_ install") and ensure the BUNDLER_VERSION is set by
install_matching_bundler() before the loop; modify the invocation in the
LOCKFILE_DIRS loop (where run_cmd is called) to use the bundle _x.y.z_ form so
the lockfile-specified bundler is used consistently.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Nitpick comments:
In `@conductor-setup.sh`:
- Around line 109-114: The loop currently runs run_cmd bundle install which can
pick the wrong bundler shim; update it to invoke the explicit pinned bundler by
using the installed version token (e.g., run_cmd "bundle _${BUNDLER_VERSION}_
install") and ensure the BUNDLER_VERSION is set by install_matching_bundler()
before the loop; modify the invocation in the LOCKFILE_DIRS loop (where run_cmd
is called) to use the bundle _x.y.z_ form so the lockfile-specified bundler is
used consistently.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: df54fd07-41b8-4da1-a0f5-2b5c2bca05fd

📥 Commits

Reviewing files that changed from the base of the PR and between f3d3c3e and bc76883.

⛔ Files ignored due to path filters (2)
  • react_on_rails_pro/Gemfile.lock is excluded by !**/*.lock
  • react_on_rails_pro/spec/dummy/Gemfile.lock is excluded by !**/*.lock
📒 Files selected for processing (2)
  • conductor-setup.sh
  • react_on_rails_pro/Gemfile.development_dependencies

@justin808 justin808 merged commit 07bb4d7 into main Mar 17, 2026
47 checks passed
@justin808 justin808 deleted the jg/2663-extract-path-resolver branch March 17, 2026 23:50
justin808 added a commit that referenced this pull request Mar 25, 2026
## Summary

- Stamp `### [16.5.0.rc.0]` version header with today's date
- Add 10 new changelog entries for PRs merged since v16.4.0
- Fix incomplete PR 2818 entry (missing author link)

### New entries added

**Added:**
- `create-react-on-rails-app --pro` support (PR 2818)
- Global prerender env override `REACT_ON_RAILS_PRERENDER_OVERRIDE` (PR
2816)
- `react_on_rails:sync_versions` rake task (PR 2797)
- Pro/RSC setup checks in `react_on_rails:doctor` (PR 2674)

**Changed:**
- [Pro] Canonical env var for worker count is now
`RENDERER_WORKERS_COUNT` (PR 2611)

**Improved:**
- Smoother `create-react-on-rails-app` and install generator flows (PR
2650)
- Pro upgrade hint after install (PR 2642)

**Fixed:**
- Preserve runtime env vars across `Bundler.with_unbundled_env` (PR
2836)
- Fix doctor prerender check and ExecJS display for Pro/RSC apps (PR
2773)
- Fix doctor false positives for custom layouts (PR 2612)

### Skipped PRs (not user-visible)

Docs-only: #2845, #2842, #2826, #2830, #2820, #2809, #2803, #2785,
#2801, #2791, #2789, #2788, #2772, #2778, #2780, #2784, #2671, #2676,
#2662, #2657, #2669
CI/internal tooling: #2825, #2817, #2819, #2812, #2815, #2810, #2808,
#2807, #2634, #2798, #2761, #2760, #2658, #2639, #2667, #2656

## Test plan

- [x] Verified version header and diff links are correct
- [x] Verified all entries follow changelog formatting conventions
- [x] Verified file ends with newline
- [ ] After merge, run `rake release` to publish 16.5.0.rc.0

🤖 Generated with [Claude Code](https://claude.com/claude-code)

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Low Risk**
> Documentation-only change updating `CHANGELOG.md` with a new
`16.5.0.rc.0` section and compare links; no runtime code is modified.
> 
> **Overview**
> Adds a new `16.5.0.rc.0` (2026-03-25) section to `CHANGELOG.md`,
consolidating recent PR entries under **Added/Changed/Improved/Fixed**
and correcting the previously incomplete `--pro` CLI entry author
attribution.
> 
> Updates the bottom compare links so `[unreleased]` now compares from
`v16.5.0.rc.0` and adds a link definition for `[16.5.0.rc.0]`.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
481a71c. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

## Release Notes - v16.5.0.rc.0

* **New Features**
  * Added sync_versions task for streamlined version management
  * Expanded doctor checks for Pro and RSC support

* **Improvements**
  * Enhanced generator workflow and Pro upgrade guidance
  * Improved environment variable handling and preservation

* **Bug Fixes**
* Fixed detection issues with doctor tools and ExecJS/prerender
functionality

<!-- end of auto-generated comment: release notes by coderabbit.ai -->

Co-authored-by: Claude Opus 4.6 (1M context) <[email protected]>
justin808 added a commit that referenced this pull request Mar 30, 2026
…2667)

## Summary
- **Root cause**: `sqlite3 ~> 1.4` resolves to 1.7.3, whose precompiled
gems require `ruby < 3.4.dev`. On Ruby 3.4.8, bundler falls back to the
source gem variant (adding `mini_portile2`), dirtying both Pro lockfiles
on every `bundle install`
- **Fix**: Update `sqlite3` constraint from `~> 1.4` to `~> 2.0` —
sqlite3 2.x precompiled gems support Ruby 3.4 natively
- **Secondary**: Conductor setup script now ensures the correct bundler
version (matching `BUNDLED WITH` in each lockfile) is installed before
running `bundle install`

Closes #2663

## Test plan
- [x] Pro unit tests pass (282 examples, 0 failures) with sqlite3 2.9.2
- [ ] Run `conductor-setup.sh` in a fresh workspace and verify `git
status` shows no dirty lockfiles
- [ ] CI passes

🤖 Generated with [Claude Code](https://claude.com/claude-code)

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Medium Risk**
> Touches dependency resolution and lockfiles across multiple Ruby apps;
risk is mainly around native gem compatibility and CI/environment
differences when installing `sqlite3` 2.x and matching bundler versions.
> 
> **Overview**
> Prevents `conductor-setup.sh` from dirtying Ruby lockfiles by
**auto-installing the Bundler version specified in each `Gemfile.lock`**
and then running `bundle install` across all lockfile directories via a
single loop.
> 
> Updates React on Rails Pro development dependencies to require
`sqlite3 ~> 2.0`, and refreshes the Pro and dummy app lockfiles to
`sqlite3 2.9.2` with updated platform gem entries.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
bc76883. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **Chores**
* Improved development setup with automatic synchronization of Bundler
versions across project dependencies
  * Updated SQLite3 development dependency to version 2.0

<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: Claude Opus 4.6 <[email protected]>
justin808 added a commit that referenced this pull request Apr 6, 2026
…2667)

## Summary
- **Root cause**: `sqlite3 ~> 1.4` resolves to 1.7.3, whose precompiled
gems require `ruby < 3.4.dev`. On Ruby 3.4.8, bundler falls back to the
source gem variant (adding `mini_portile2`), dirtying both Pro lockfiles
on every `bundle install`
- **Fix**: Update `sqlite3` constraint from `~> 1.4` to `~> 2.0` —
sqlite3 2.x precompiled gems support Ruby 3.4 natively
- **Secondary**: Conductor setup script now ensures the correct bundler
version (matching `BUNDLED WITH` in each lockfile) is installed before
running `bundle install`

Closes #2663

## Test plan
- [x] Pro unit tests pass (282 examples, 0 failures) with sqlite3 2.9.2
- [ ] Run `conductor-setup.sh` in a fresh workspace and verify `git
status` shows no dirty lockfiles
- [ ] CI passes

🤖 Generated with [Claude Code](https://claude.com/claude-code)

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Medium Risk**
> Touches dependency resolution and lockfiles across multiple Ruby apps;
risk is mainly around native gem compatibility and CI/environment
differences when installing `sqlite3` 2.x and matching bundler versions.
> 
> **Overview**
> Prevents `conductor-setup.sh` from dirtying Ruby lockfiles by
**auto-installing the Bundler version specified in each `Gemfile.lock`**
and then running `bundle install` across all lockfile directories via a
single loop.
> 
> Updates React on Rails Pro development dependencies to require
`sqlite3 ~> 2.0`, and refreshes the Pro and dummy app lockfiles to
`sqlite3 2.9.2` with updated platform gem entries.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
bc76883. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **Chores**
* Improved development setup with automatic synchronization of Bundler
versions across project dependencies
  * Updated SQLite3 development dependency to version 2.0

<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: Claude Opus 4.6 <[email protected]>
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.

Extract shared path-resolver helpers from Doctor and SystemChecker

1 participant