Skip to content

Pin @babel/preset-react to v7 in generator e2e template#1167

Merged
justin808 merged 4 commits into
mainfrom
jg/fix-generator-babel-preset-react-v7
Jun 30, 2026
Merged

Pin @babel/preset-react to v7 in generator e2e template#1167
justin808 merged 4 commits into
mainfrom
jg/fix-generator-babel-preset-react-v7

Conversation

@justin808

@justin808 justin808 commented Jun 19, 2026

Copy link
Copy Markdown
Member

Problem

The Generator specs job is failing on main and every open PR (e.g. #1161), with the react e2e build erroring:

ERROR in ./app/javascript/components/App.jsx
× Module not found: Can't resolve 'react/jsx-dev-runtime'
× Module not found: Can't resolve 'react'
× Module not found: Can't resolve 'react-dom/client'

Root cause

spec/generator_specs/e2e_template/template.rb installed @babel/preset-react with no version constraint:

package_json.manager.add(["react", "react-dom", "@babel/preset-react"])

@babel/preset-react@8.0.1 (now latest) requires @babel/core@^8 as a peer, but Shakapacker's generated app uses @babel/core@^7. npm resolved the unpinned add to v8 and failed with:

npm ERR! code ERESOLVE
npm ERR! Found: @babel/core@7.29.7
npm ERR! Could not resolve dependency:
npm ERR! peer @babel/core@"^8.0.0" from @babel/preset-react@8.0.1

Because the npm add aborted, react/react-dom were never installed, so the subsequent bin/shakapacker build couldn't resolve react. This is purely upstream dependency drift — the same job passed days ago with no source change.

Fix

Pin the template's preset to the v7 line, matching the app's @babel/core@^7 (and the existing @babel/preset-react@^7.18.6 pin already used in spec/dummy):

package_json.manager.add(["react", "react-dom", "@babel/preset-react@^7"])

Verified via npm install --dry-run against a @babel/core@^7.29.7 app: the pin resolves to @babel/preset-react@7.29.7 (peer @babel/core@^7.0.0-0) cleanly.

🤖 Generated with Claude Code


Note

Low Risk
Test-only generator template change; no runtime or production dependency behavior.

Overview
Fixes Generator specs / React e2e failures caused by npm resolving an unpinned @babel/preset-react to v8, which peers on @babel/core@^8 while generated apps stay on Babel 7npm add aborts and react / react-dom never install.

The e2e generator template now installs @babel/preset-react@^7 (aligned with spec/dummy) and documents the peer mismatch in a short comment.

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

Summary by CodeRabbit

  • Chores
    • Updated the app template’s React and Babel package versions to better match the included demo stack.
    • Improved consistency in the generated setup by using newer, pinned dependency versions.

@coderabbitai

coderabbitai Bot commented Jun 19, 2026

Copy link
Copy Markdown

Warning

Review limit reached

@justin808, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 24 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 62d2783a-889f-45b4-8d2d-96f40e2c25d5

📥 Commits

Reviewing files that changed from the base of the PR and between 31d71f5 and 4ddd073.

📒 Files selected for processing (1)
  • spec/generator_specs/e2e_template/template.rb
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch jg/fix-generator-babel-preset-react-v7

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.

@greptile-apps

greptile-apps Bot commented Jun 19, 2026

Copy link
Copy Markdown
Contributor

Greptile Summary

This PR fixes a broken CI job caused by upstream version drift: @babel/preset-react@8 (the new latest) requires @babel/core@^8, but Shakapacker's generated app uses @babel/core@^7, causing npm to abort with ERESOLVE and leaving react/react-dom uninstalled. The fix pins the e2e template's install to @babel/preset-react@^7, consistent with the existing pin in spec/dummy.

  • Adds @^7 version constraint to the @babel/preset-react entry in package_json.manager.add(...).
  • Adds an inline comment explaining the reason for the pin, making the intent clear for future maintainers.

Confidence Score: 5/5

A one-line dependency pin that unblocks CI with no logic or behavior changes to the Shakapacker runtime.

The change is a targeted version constraint on a single test-template dependency. It mirrors a pin already present in spec/dummy, is consistent with the app's @babel/core ^7 baseline, and carries a clear explanatory comment. No runtime code is touched.

No files require special attention.

Important Files Changed

Filename Overview
spec/generator_specs/e2e_template/template.rb Pins @babel/preset-react to ^7 to match the generated app's @babel/core ^7 constraint, with an explanatory comment documenting the upstream drift issue.

Reviews (1): Last reviewed commit: "Pin @babel/preset-react to v7 in generat..." | Re-trigger Greptile

@claude

claude Bot commented Jun 19, 2026

Copy link
Copy Markdown
Contributor

Code Review

Overview: This is a minimal, targeted fix for a legitimate CI breakage caused by upstream dependency drift — @babel/preset-react@8 shipping with an incompatible @babel/core@^8 peer requirement. The fix is correct and the root cause analysis in the PR description is thorough.

What's good

  • The fix itself is exactly right: pinning @babel/preset-react@^7 matches the generated app's @babel/core@^7 constraint and is consistent with what spec/dummy already uses.
  • Single-file, four-line change — appropriately minimal scope.
  • No changelog needed (CI/test infrastructure fix, not a user-facing change).

Minor observations

Comment verbosity: The three-line comment describes the failure scenario in detail. A tighter version conveys the same non-obvious constraint in one line and stays closer to the project's "no unnecessary comments" style:

# Pin to v7: @babel/preset-react@8 requires @babel/core@^8, but this app uses ^7 (ERESOLVE).
package_json.manager.add(["react", "react-dom", "@babel/preset-react@^7"])

That said, a pinning comment is warranted here — this is exactly the kind of hidden external constraint that would puzzle a future reader — so this is just a style nit.

Slight inconsistency with spec/dummy: spec/dummy/package.json pins to ^7.18.6 while this template uses the looser ^7. Both are correct — ^7 is fine and arguably cleaner since we don't need a specific floor here. Just noting it for awareness.

react and react-dom remain unpinned: These could drift to a breaking major version in the future. React 19 works fine with webpack/babel so it's not an immediate concern, but worth keeping in mind if CI becomes flaky again.

Verdict

Solid, necessary fix. The approach is correct and the scope is appropriately tight.

Comment thread spec/generator_specs/e2e_template/template.rb Outdated
@justin808

Copy link
Copy Markdown
Member Author

Address-review summary

Scan scope: full PR history; no previous address-review summary was present.

Mattered

  • None.

Optional

  • Resolved one comment-style thread as auto-deferred. No code change was made because the existing comment documents the concrete npm/Babel peer-dependency failure mode, and a comment-only push would restart CI/review.

Skipped

  • None.

Next default scan starts after this comment. Say check all reviews to rescan the full PR.

@claude

claude Bot commented Jun 29, 2026

Copy link
Copy Markdown
Contributor

Review

Correct and necessary fix. The root cause analysis in the PR description is accurate: npm resolving an unpinned @babel/preset-react to v8 (which peers on @babel/core@^8) aborted the install and left react/react-dom uninstalled. Pinning to ^7 is the right remedy.

One minor consistency nit (see inline): the chosen floor ^7.17.0 is lower than the existing reference in spec/dummy/package.json (^7.18.6). Both resolve to the same latest 7.x today, but using ^7.18.6 would keep the two references aligned.

Out-of-scope observation (pre-existing, not introduced here): react and react-dom remain unpinned in this template while spec/dummy/package.json pins them at ^18.3.1. React 19 is now latest, so a fresh install could pull it in and fail the e2e fixture if any React 18-only API is used. Worth a follow-up PR.

Comment thread spec/generator_specs/e2e_template/template.rb Outdated
@claude

claude Bot commented Jun 29, 2026

Copy link
Copy Markdown
Contributor

Review

This PR bumps @babel/preset-react in the e2e generator template from ^7.17.0 to ^7.18.6, aligning it with spec/dummy/package.json. The intent is good and the direction is correct.

One issue worth fixing: the added comment doesn't match the diff.

The PR description says the old code had no version constraint ("@babel/preset-react" without a version), but the diff shows the old code was already @babel/preset-react@^7.17.0. Since ^7.x.x in npm semver means >=7.17.0 <8.0.0, that constraint already prevents v8 from being installed. The added comment's phrase "an unpinned add resolves to v8" does not accurately describe the situation shown in the diff.

The functional change (bumping the minimum from 7.17.0 → 7.18.6) is correct and safe — it aligns with spec/dummy and has no practical impact since npm always resolves to the latest compatible version. But the comment text should be corrected to avoid misleading future readers about what the old code actually did. Suggested rewrite below in the inline comment.

Comment thread spec/generator_specs/e2e_template/template.rb Outdated
@claude

claude Bot commented Jun 29, 2026

Copy link
Copy Markdown
Contributor

Review

This PR bumps @babel/preset-react from ^7.17.0 to ^7.18.6 in the e2e generator template to align it with spec/dummy. The change is test-only and low risk. Two issues worth addressing before merging:

1. Root cause doesn't match the diff

The PR description says the original code was unpinned (@babel/preset-react with no version), but the diff base is @babel/preset-react@^7.17.0 — already a v7 pin. Semver caret ranges prevent npm from crossing a major boundary, so ^7.17.0 can never resolve to v8; the described ERESOLVE failure cannot be caused by that constraint. Either:

  • The description is inaccurate about the original state (the version bump is still harmless but doesn't fix what it claims), or
  • There was an intermediate commit that added ^7.17.0 before this PR was opened, in which case only one of the two changes was needed.

This is worth clarifying because if the actual root cause was something different, this fix may not prevent a recurrence.

2. react and react-dom remain unpinned

The same manager.add call installs react and react-dom without any version constraint, while spec/dummy/package.json pins both at ^18.3.1. React 19 is the current npm latest and contains breaking API changes. If the template resolves to React 19, the e2e JSX files may fail to build for the same class of reason this PR is trying to prevent. See inline comment.

Comment thread spec/generator_specs/e2e_template/template.rb Outdated
Comment thread spec/generator_specs/e2e_template/template.rb Outdated

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

🧹 Nitpick comments (1)
spec/generator_specs/e2e_template/template.rb (1)

35-35: 📐 Maintainability & Code Quality | 🔵 Trivial

Ensure file ends with a trailing newline.

The file may be missing a trailing newline character. As per coding guidelines, all files must end with a trailing newline.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@spec/generator_specs/e2e_template/template.rb` at line 35, The template file
may be missing a trailing newline at the end of the file. Update the end of the
template so it always terminates with a newline character, keeping the change
within the e2e template content itself.

Source: Coding guidelines

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Nitpick comments:
In `@spec/generator_specs/e2e_template/template.rb`:
- Line 35: The template file may be missing a trailing newline at the end of the
file. Update the end of the template so it always terminates with a newline
character, keeping the change within the e2e template content itself.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: e673d29e-247f-4ccb-a0f0-9bdf7f141141

📥 Commits

Reviewing files that changed from the base of the PR and between 9dbedfa and 31d71f5.

📒 Files selected for processing (1)
  • spec/generator_specs/e2e_template/template.rb

@justin808 justin808 force-pushed the jg/fix-generator-babel-preset-react-v7 branch from 31d71f5 to f603c56 Compare June 30, 2026 09:58
@claude

claude Bot commented Jun 30, 2026

Copy link
Copy Markdown
Contributor

The fix is correct and the version alignment with `spec/dummy` is the right approach. A couple of notes:

PR description inaccuracy: The description states that `@babel/preset-react` was installed "with no version constraint", showing `@babel/preset-react` without a pin. However, the actual diff shows the old code already had `@babel/preset-react@^7.17.0`. The real gap was that `react` and `react-dom` were unpinned (no version specifier at all), which allowed npm to resolve them to a version that conflicted with other deps. The description should be corrected so the team has an accurate record of the root cause.

React 19 forward-compatibility: Pinning `^18.3.1` keeps the e2e template fixed on React 18. Once React 19 becomes the npm default, this template (and CI) won't exercise React 19 compatibility. That may be intentional for stability — just worth noting as a conscious trade-off since the template now needs a manual bump when the project is ready to validate React 19.

Minor style nit (inline): the single-line array was reformatted to multi-line and a comment was added; both are extraneous relative to the version-pin task per the project's "keep changes focused and minimal" rule.

Comment thread spec/generator_specs/e2e_template/template.rb Outdated
@claude

claude Bot commented Jun 30, 2026

Copy link
Copy Markdown
Contributor

The fix is correct and addresses the root cause: pinning @babel/preset-react to ^7.18.6 prevents npm from resolving to the newly-released v8, which peers on @babel/core@^8 and causes the install to abort before react/react-dom are ever added. The new version pins all three packages to match spec/dummy exactly, which also closes a latent bug — the template's JSX already uses ReactDOM.createRoot (a React 18 API), so the previous unversioned react/react-dom installs could silently land on React 16/17 and fail at runtime.

One small nit on the added comment (see inline): it explains what was done rather than why the version was constrained, which is the part that would be non-obvious to a future reader.

Comment thread spec/generator_specs/e2e_template/template.rb Outdated
justin808 and others added 2 commits June 30, 2026 00:29
The generator specs' react e2e template installed @babel/preset-react
with no version constraint. @babel/preset-react@8 was published requiring
@babel/core ^8 as a peer, but Shakapacker's generated app uses
@babel/core ^7. npm therefore resolved the unpinned add to v8 and failed
with ERESOLVE, which aborted the whole `npm add` and left react and
react-dom uninstalled. The subsequent bin/shakapacker build then failed
with "Module not found: Can't resolve 'react'", breaking the Generator
specs job on main and every PR.

Pin to @babel/preset-react@^7 to match the app's @babel/core ^7, matching
the existing pin already used in spec/dummy.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@justin808 justin808 force-pushed the jg/fix-generator-babel-preset-react-v7 branch from 2c5b03e to a12f7e8 Compare June 30, 2026 10:29
@claude

claude Bot commented Jun 30, 2026

Copy link
Copy Markdown
Contributor

Review

The fix is correct and the version choices align with spec/dummy/package.json — this will stop the CI breakage. A couple of things worth noting.

Root cause description is inaccurate

The PR description says @babel/preset-react had "no version constraint," but origin/main already had @babel/preset-react@^7.17.0, which caps at <8.0.0 and cannot resolve to v8. The real unfixed issue was that react and react-dom had no version pins at all — that's what this PR actually fixes (adding @^18.3.1 to both). The description's stated ERESOLVE scenario couldn't have come from the old constraint; the actual failure was likely react/react-dom resolving to a mismatched version.

The code change is still correct — the description just doesn't match the diff.

Stale comment risk

The inline comment # but this template uses @babel/core 7 bakes in a version assumption with nothing to enforce it. When Shakapacker eventually adds Babel 8 support, this comment will silently lie while the version pin (@^7.18.6) remains the actual enforcement. Consider trimming it to just the observable constraint — e.g. # preset-react 8 peers on @babel/core 8; pin to v7 to match this app's @babel/core — or dropping the Babel version callout and letting the pin speak for itself.

Comment thread spec/generator_specs/e2e_template/template.rb Outdated
@claude

claude Bot commented Jun 30, 2026

Copy link
Copy Markdown
Contributor

Review

This PR pins react and react-dom to ^18.3.1 and bumps @babel/preset-react from ^7.17.0 to ^7.18.6 in the e2e generator template, aligning it with spec/dummy/package.json. The fix is correct and well-targeted — the JSX files already use react-dom/client / ReactDOM.createRoot (React 18 APIs), so the React 18 pin is appropriate, and the v7 cap on @babel/preset-react correctly keeps it compatible with the generated app's @babel/core@^7 (see lib/install/package.json).

Minor observation on the PR description: The body says the root cause was that @babel/preset-react had "no version constraint", but the diff's base line shows it was already pinned at ^7.17.0. The packages that were actually unversioned are react and react-dom. The description may reflect an earlier state of main before a partial fix landed; it's worth clarifying so future bisectors don't chase the wrong package.

Unexplained minor tightening: @babel/preset-react lower-bound moves from ^7.17.0^7.18.6 without explanation in the PR. This is harmless (both caps at <8.0.0, aligns with spec/dummy), but a one-word note ("align with spec/dummy") in the description would make the intent clear.

No bugs, no removed invariants, no cross-file impact found. LGTM.

Comment thread spec/generator_specs/e2e_template/template.rb
@claude

claude Bot commented Jun 30, 2026

Copy link
Copy Markdown
Contributor

Review: Pin @babel/preset-react to v7 in generator e2e template

The fix is correct and the direction is right — aligning the e2e template's dependencies with `spec/dummy/package.json` (which already uses exactly these version ranges) is the right call, and this is test-only with no production impact.

One thing worth clarifying: the PR description says the original file had `@babel/preset-react` with no version constraint, but the actual diff shows it already had `@babel/preset-react@^7.17.0` — a v7 pin that would have blocked v8 resolution entirely. The real fix that stops the CI failure is the new react/react-dom pins (`@^18.3.1`), which prevent npm from resolving those to React 19. The babel preset bump from `^7.17.0` → `^7.18.6` is a nice alignment with `spec/dummy` but wasn't the root cause of the breakage.

Findings

spec/generator_specs/e2e_template/template.rb:8-9 — Comment describes a non-issue and omits the actual issue

The comment "pin to v7 to match the generated app's @babel/core" implies the v7 pin is new, but the original already had @^7.17.0. The more important constraint — that unpinned react/react-dom were pulling in React 19 — goes unmentioned. Left as-is, a future maintainer bumping the babel preset ceiling might remove it thinking it's just an old guard, without realizing the react pins are the real CI protection. See inline suggestion.

Minor: comment style differs from the file's established pattern

Every other comment in the file is a single-line section label (# install react, # update webpack presets for react, # install rspec-rails). The new two-line inline prose comment breaks that pattern. If the rationale is worth preserving (and it is), a single line or a commit message note would be less surprising.


Overall: approve with the comment nit addressed. The version pins themselves are correct and consistent with the rest of the test suite.

@claude

claude Bot commented Jun 30, 2026

Copy link
Copy Markdown
Contributor

Review

The fix is correct and well-targeted. The three pinned versions (react@^18.3.1, react-dom@^18.3.1, @babel/preset-react@^7.18.6) exactly match spec/dummy/package.json, so the e2e template is now consistent with the dummy app. No correctness, security, or performance issues found.

One minor note on the PR description: it states that @babel/preset-react was installed with "no version constraint", but the diff shows the old line was @babel/preset-react@^7.17.0 — already pinned to v7. The actual root cause was that react and react-dom had no version constraint, allowing npm to resolve them to React 19 (incompatible with the generated app config). The fix is correct regardless; the description just slightly misattributes the source of the failure.

On the added comments: the two comment lines explaining why versions are locked (react-dom 19 incompatibility, babel peer dep mismatch) are worth keeping. Without them, a future maintainer would likely see bare ^18.3.1 pins and bump them to 19, breaking things again. These are exactly the non-obvious hidden constraints that warrant a comment.

LGTM.

@justin808 justin808 merged commit 21bfa89 into main Jun 30, 2026
16 checks passed
@justin808 justin808 deleted the jg/fix-generator-babel-preset-react-v7 branch June 30, 2026 11:46
justin808 added a commit that referenced this pull request Jun 30, 2026
## Problem

`i18n` **1.15.0** (published 2026-06-18) calls `Fiber[:i18n_config]`
(Fiber storage, Ruby 3.2+) but its gemspec declares
`required_ruby_version >= 3.1`. So Bundler happily installs it on **Ruby
3.1**, where loading Active Support then crashes:

```
i18n-1.15.0/lib/i18n.rb:58:in `config': undefined method `[]' for Fiber:Class (NoMethodError)
  current = Fiber[:i18n_config] || self.config = I18n::Config.new
```

This turns **every Ruby 3.1 matrix job red** on `main` (the full matrix
runs on pushes / `workflow_dispatch`):

- **Generator specs** — `rails new` crashes before any app is created,
failing all 77 examples and fail-fast-cancelling the rest of the matrix.
- **Ruby based checks** — Active Support boot crashes the same way.

Ruby 2.7/3.0 are unaffected (Bundler skips 1.15.0 via
`required_ruby_version` and falls back to 1.14.x); Ruby 3.2+ has
`Fiber[]` so 1.15.0 works there.

## Fix

Pin `i18n < 1.15` **only for Ruby < 3.2**, mirroring the existing
`concurrent-ruby` pin:

- The affected gemfiles (`6.1`, `7.0`, `7.1`, `7.2` — the ones that run
on Ruby 3.1) so the repo bundle's `rails`/Active Support load cleanly.
- The generated base Rails app in the generator spec, so the app itself
boots on Ruby 3.1.

Ruby 3.2+ continues to use `i18n` 1.15.x. No production code or
published-gem dependencies change — gemfiles and test setup only, so no
CHANGELOG entry.

## Relationship to #1167

This is **stacked on #1167** ("Pin `@babel/preset-react` to v7"). That
PR fixes a *separate* fresh upstream breakage (`@babel/preset-react@8`
requires `@babel/core@^8` + Node ≥22.18) which is what makes the **PR
minimal matrix** (`3.4/8.0`, `2.7/7.0`) red. This PR fixes the
**full-matrix-only** Ruby 3.1 breakage. Merge #1167 first; GitHub will
then retarget this PR to `main`.

Verified via a full-matrix `workflow_dispatch` run on this branch (which
includes Ruby 3.1).

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

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Low Risk**
> CI and test Gemfile pins only; no runtime or published gem dependency
changes.
> 
> **Overview**
> **Unblocks Ruby 3.1 CI** by keeping Bundler from resolving `i18n`
1.15.0, which calls `Fiber[]` (Ruby 3.2+) and crashes Rails boot on 3.1.
> 
> The Rails **6.1 / 7.0 / 7.1 / 7.2** gemfiles now include `gem "i18n",
"< 1.15" if RUBY_VERSION < "3.2"`, following the same pattern as the
existing `concurrent-ruby` pin. The generator spec appends the same
constraint to the generated base app’s Gemfile when Ruby is below 3.2 so
`rails new` and generator examples boot on 3.1. Ruby 3.2+ is unchanged
and can still use `i18n` 1.15.x.
> 
> <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit
84fffa6. Bugbot is set up for automated
code reviews on this repo. Configure
[here](https://www.cursor.com/dashboard/bugbot).</sup>
<!-- /CURSOR_SUMMARY -->

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

## Summary by CodeRabbit

* **Bug Fixes**
* Improved app generation reliability on older Ruby versions by avoiding
problematic dependency releases that could prevent newly created apps
from starting.
* **Tests**
* Updated the generator test setup to account for Ruby-version-specific
behavior during app creation.

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

---------

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
justin808 added a commit that referenced this pull request Jul 4, 2026
## Summary

Stamps the **`v10.2.0`** release section in `CHANGELOG.md` and adds the
user-visible entries that were still missing for PRs merged since
`v10.1.0`.

Header format matches the repo convention (`## [v10.2.0] - July 3,
2026`) and is parseable by `rakelib/release.rake`'s
`extract_changelog_section` (`## [v<npm-version>]`), so `bundle exec
rake release` / `sync_github_release` will pick up the notes
automatically.

### Changelog changes

- **Version header**: inserted `## [v10.2.0] - July 3, 2026` immediately
after `## [Unreleased]`; all accumulated entries now live under it, and
`## [Unreleased]` is empty.
- **Compare links**: `[unreleased]` now compares `v10.2.0...main`; added
`[v10.2.0]: …/compare/v10.1.0...v10.2.0`.

### New entries added (were missing)

| PR | Section | Note |
| --- | --- | --- |
| [#1187](#1187) | Added |
Babel 8 peer dependency support + preset option compatibility |
| [#1184](#1184) | Added |
Folded into the #695 AI-prompt entry (gates the React on Rails section
on app detection) |
| [#1142](#1142) | Fixed |
Rspack dev-server config no longer loads in static watch mode (fixes
#1137) |

### Already documented (carried into v10.2.0)

`#1180`, `#695`, `#1141`, `#1150`, `#1179`, `#1192`, `#1127`, `#1178`,
`#1161`, `#1147`.

### Reviewed and intentionally excluded (not user-visible)

Docs: `#1145`, `#1148`, `#1152`, `#1155`, `#1183`, `#1188`, `#1189`,
`#1193`.
CI: `#1151`, `#1168`, `#1171`.
Tests / fixtures: `#1128`, `#1154`, `#1167`, `#1186`.
Workflow / agent tooling: `#1153`, `#1176`, `#1182`.

(`#1107` is already documented under `## [v10.1.0]`.)

## Next step

After merge, run the repo's release task (no args) — it reads `v10.2.0`
from the changelog and creates the GitHub release from this section.

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

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
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.

1 participant