Skip to content

Pin react-on-rails-rsc to stable 19.0.5 (#3634)#4080

Merged
justin808 merged 2 commits into
mainfrom
jg/3634-rsc-stable-pin
Jun 18, 2026
Merged

Pin react-on-rails-rsc to stable 19.0.5 (#3634)#4080
justin808 merged 2 commits into
mainfrom
jg/3634-rsc-stable-pin

Conversation

@justin808

@justin808 justin808 commented Jun 17, 2026

Copy link
Copy Markdown
Member

Why

Stable react-on-rails-rsc@19.0.5 is now published on npm latest (verified downstream: Pro RSC test suite + e2e green on 19.0.5). Until now this repo pinned the prerelease 19.0.5-rc.7 as the default/published react-on-rails-rsc for the v17 line — most importantly in the react_on_rails:install generator, which is what end users actually receive. Shipping a final major (v17) whose headline RSC CSS FOUC fix depends on an RC is not acceptable.

This flips every default/published pin from 19.0.5-rc.7 → stable 19.0.5. The native RSC manifest CSS fix (record .css siblings; .mjs chunk support; href normalization) that resolves the 'use client' FOUC (#3211) ships in 19.0.5, so the FOUC floor is now a published stable release.

Changes

  • react_on_rails/lib/generators/react_on_rails/js_dependency_manager.rb: RSC_PACKAGE_VERSION_PIN 19.0.5-rc.719.0.5 (the generator install pin → end users); comment reworded to stable framing; resolved TODO(#3642) removed. Asserting spec updated.
  • Root package.json + packages/react-on-rails-pro/package.json: react-on-rails-rsc devDependency 19.0.5-rc.719.0.5; pnpm-overrides comment "published/default pin" string updated.
  • pnpm-lock.yaml: regenerated (the 19.0.5-rc.7 entries → 19.0.5).
  • Pro RSC install docs (rspack-compatibility.md, create-without-ssr.md, upgrading-existing-pro-app.md): 19.0.5-rc.719.0.5; "keep the exact RC pin until stable ships" guidance reworded to the stable pin. llms-full-pro.txt regenerated to match.
  • CHANGELOG.md: [Unreleased] entry; notes the native RSC CSS FOUC fix requires >= 19.0.5.

Explicitly NOT touched (intentional)

Validation (local, all green)

  • rubocop on the generator: no offenses. Generator specs (js_dependency_manager_spec.rb, install_generator_spec.rb): 608 examples, 0 failures (run with the gem Gemfile per AGENTS.md).
  • pnpm run type-check (9 projects), pnpm run lint, prettier --check: clean.
  • script/check-docs-sidebar ✓; generate-llms-full.mjs --check ✓ (491 KiB, well under the 2048 KiB split threshold).
  • Lockfile: zero 19.0.5-rc.7 entries remain; the five 19.2.0-rc.1 entries unchanged.

Codex Decision Log

  • Non-blocking: codex review / /simplify not run for this diff.
    • Decision: rely on hosted CI + review bots on the head SHA.
    • Why: the change is mechanical version-string flips + regenerated lockfile/llms with no logic change; full local validation (rubocop, 608 rspec, type-check, lint, format, docs/llms guard) is green. The meaningful risk surface is dependency resolution + CI, not code complexity.
    • Review later: confirm hosted generator-install CI (real npm install) resolves the stable pin.

Fixes #3634


Note

Low Risk
Mechanical version and documentation updates with no runtime logic changes; main risk is CI/npm resolving the new stable pin correctly.

Overview
Replaces the default react-on-rails-rsc@19.0.5-rc.7 prerelease pin with stable 19.0.5 everywhere new RSC apps and this repo are expected to resolve that package—so the v17 RSC CSS FOUC fix floor is a published release, not an RC.

Generator & workspace: RSC_PACKAGE_VERSION_PIN in js_dependency_manager.rb is now 19.0.5 (RC TODO removed). Install/info and failure warnings use stable wording via rsc_package_version_prerelease? instead of always describing a temporary prerelease. Root and Pro package.json devDependencies and pnpm-lock.yaml match; pnpm override comments reference 19.0.5 as the published default.

Docs & changelog: Pro RSC guides (create-without-ssr, upgrading-existing-pro-app, rspack-compatibility), regenerated llms-full-pro.txt, and [Unreleased] Changed note all tell users to install and record exactly 19.0.5 (no “wait for stable” RC language).

Specs are updated for the new pin strings and stable messaging. React 19.2 soak pins (19.2.0-rc.1) are unchanged.

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

Summary by CodeRabbit

  • Documentation
    • Updated React Server Components Pro guides to reference the stable react-on-rails-rsc@19.0.5 pin (create-without-SSR, upgrading Pro apps, rspack compatibility, and troubleshooting).
  • Dependencies
    • Upgraded react-on-rails-rsc from 19.0.5-rc.7 to 19.0.5 across the workspace, Pro package, and generator defaults.
  • Bug Fixes
    • Refined generator pin messaging to correctly distinguish stable vs prerelease pins, and to surface accurate manual install guidance on failure.
  • Tests
    • Updated RSC pin expectations and messaging assertions to match the stable 19.0.5 behavior.

@coderabbitai

coderabbitai Bot commented Jun 17, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 9473fde4-ccb6-4c6f-a7e9-492df05cb613

📥 Commits

Reviewing files that changed from the base of the PR and between 922e827 and eed3206.

⛔ Files ignored due to path filters (1)
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (10)
  • CHANGELOG.md
  • docs/pro/react-server-components/create-without-ssr.md
  • docs/pro/react-server-components/rspack-compatibility.md
  • docs/pro/react-server-components/upgrading-existing-pro-app.md
  • llms-full-pro.txt
  • package.json
  • packages/react-on-rails-pro/package.json
  • react_on_rails/lib/generators/react_on_rails/js_dependency_manager.rb
  • react_on_rails/spec/react_on_rails/generators/install_generator_spec.rb
  • react_on_rails/spec/react_on_rails/generators/js_dependency_manager_spec.rb
✅ Files skipped from review due to trivial changes (4)
  • packages/react-on-rails-pro/package.json
  • docs/pro/react-server-components/rspack-compatibility.md
  • docs/pro/react-server-components/create-without-ssr.md
  • CHANGELOG.md
🚧 Files skipped from review as they are similar to previous changes (5)
  • package.json
  • docs/pro/react-server-components/upgrading-existing-pro-app.md
  • react_on_rails/lib/generators/react_on_rails/js_dependency_manager.rb
  • react_on_rails/spec/react_on_rails/generators/install_generator_spec.rb
  • llms-full-pro.txt

Walkthrough

Promotes the react-on-rails-rsc package pin from the 19.0.5-rc.7 prerelease to the stable 19.0.5 release. The change updates the generator constant RSC_PACKAGE_VERSION_PIN, adds prerelease-detection branching in generator messaging methods, bumps root and Pro package.json manifests, updates all generator specs, and propagates the version change through Pro RSC documentation and the changelog.

Changes

Stable react-on-rails-rsc@19.0.5 pin rollout

Layer / File(s) Summary
Generator constant, prerelease detection, and messaging logic
react_on_rails/lib/generators/react_on_rails/js_dependency_manager.rb
RSC_PACKAGE_VERSION_PIN is updated from 19.0.5-rc.7 to 19.0.5; a new rsc_package_version_prerelease? helper detects prerelease versions; rsc_dependency_pin_info and rsc_dependency_pin_failed_warning methods now branch on prerelease vs stable pins to emit different messaging text.
Package manifests
package.json, packages/react-on-rails-pro/package.json
Root and Pro devDependencies are bumped to react-on-rails-rsc@19.0.5 and the pnpm override comment is updated to reflect the stable pin.
Generator and spec updates
react_on_rails/spec/react_on_rails/generators/js_dependency_manager_spec.rb, react_on_rails/spec/react_on_rails/generators/install_generator_spec.rb
All generator spec assertions are updated to expect the stable 19.0.5 pin: RSC_PACKAGE_VERSION_PIN constant expectation, fallback install command, stable-pin message assertions with explicit exclusions of prerelease wording, pinned-install failure/raise warning messages and recovery commands, and #add_rsc_dependencies messaging expectations.
Documentation and changelog
CHANGELOG.md, docs/pro/react-server-components/create-without-ssr.md, docs/pro/react-server-components/rspack-compatibility.md, docs/pro/react-server-components/upgrading-existing-pro-app.md, llms-full-pro.txt
CHANGELOG records the stable 19.0.5 pin promotion and the >= 19.0.5 requirement for the native RSC CSS FOUC fix; all Pro RSC install snippets, prerequisite tables, version policy notes, and troubleshooting commands are updated from 19.0.5-rc.7 to react-on-rails-rsc@19.0.5.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~12 minutes

Possibly related issues

  • #3634 (RSC FOUC: ship stable react-on-rails-rsc@19.0.5 and pin v17 to it): This PR directly implements Task 2 of that issue — bumping the prerelease pin to stable 19.0.5 in the generator, package manifests, specs, and docs, and documenting the >= 19.0.5 FOUC floor in the changelog.
  • #3965: This PR pins react-on-rails-rsc to the stable 19.0.5 release in all manifests, fulfilling a prerequisite condition for replacing a wildcard pin with an explicit version range.

Possibly related PRs

  • shakacode/react_on_rails#3857: The immediately preceding bump (to 19.0.5-rc.7) in the same generator constant and spec file, making this PR the direct follow-up that promotes it to stable.
  • shakacode/react_on_rails#3577: First introduced the RSC_PACKAGE_VERSION_PIN constant in js_dependency_manager.rb and the matching spec expectations that this PR updates.
  • shakacode/react_on_rails#3664: Established the prerelease-pin install/fallback warning messaging in js_dependency_manager.rb and its specs that this PR updates to use the stable version string.

Suggested labels

enhancement, documentation, P2, review-needed

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'Pin react-on-rails-rsc to stable 19.0.5 (#3634)' clearly and concisely describes the main change: pinning the dependency from prerelease to stable.
Linked Issues check ✅ Passed All Task 2 coding requirements from issue #3634 are met: generator pin updated, package.json files updated, lockfile regenerated, documentation updated, CHANGELOG added, and tests updated.
Out of Scope Changes check ✅ Passed All changes are directly scoped to pinning react-on-rails-rsc to stable 19.0.5 across generator, dependencies, documentation, and tests with no unrelated modifications.

✏️ 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/3634-rsc-stable-pin

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.

Comment thread CHANGELOG.md Outdated
@claude

claude Bot commented Jun 17, 2026

Copy link
Copy Markdown
Contributor

Code Review

Summary: Mechanical version-string promotion from prerelease react-on-rails-rsc@19.0.5-rc.7 to stable 19.0.5 across the generator, package manifests, lockfile, docs, and test assertions. Low-risk and well-scoped.

What's good

  • All pin sites are updated consistently (Ruby constant, both package.json files, lockfile, three doc files, generated llms-full-pro.txt, and every test assertion).
  • The TODO(#3642) comment is properly removed now that the stable release is available.
  • The pnpm lockfile integrity hash is updated correctly (sha512-EGa5pp... reflects the published stable tarball, not the RC).
  • The intentional carve-outs (React 19.2 soak pins, Pro peerDependencies tightening) are left untouched and clearly documented.
  • Test coverage mirrors the change — js_dependency_manager_spec.rb updates every assertion that referenced 19.0.5-rc.7.

One bug to fix

CHANGELOG.md line 29 — the PR link reads [PR 3634](…/pull/3634) but this is PR 4080. See the inline comment for a one-line suggestion.

Minor observations (non-blocking)

  • The package.json comment string is updated correctly from react-on-rails-rsc 19.0.5-rc.7 to 19.0.5, keeping the "published/default pin" framing accurate.
  • The rspack-compatibility.md note that previously said "switch to 19.0.5 stable once published" is correctly reworded to just state the stable pin — no stale forward-looking language remains.

Verdict: LGTM once the CHANGELOG PR link is corrected.

@greptile-apps

greptile-apps Bot commented Jun 17, 2026

Copy link
Copy Markdown

Greptile Summary

This PR promotes the react-on-rails-rsc pin from the 19.0.5-rc.7 prerelease to the stable 19.0.5 release across all surfaces that end users interact with — the Ruby generator constant, both package.json manifests, the lockfile, and three Pro RSC documentation pages (plus the regenerated llms-full-pro.txt).

  • The core change is a one-line update to RSC_PACKAGE_VERSION_PIN in js_dependency_manager.rb (removing the associated TODO), with every downstream reference updated consistently, all specs updated to match, and the lockfile regenerated with the new integrity hash.
  • Documentation wording is updated from RC-oriented guidance ("keep this pin until stable ships") to stable-release guidance, and the intentional React 19.2 soak overrides are left untouched.

Confidence Score: 5/5

Safe to merge — a mechanical version-string promotion with no logic changes; all 10 updated files are internally consistent.

The change flips one constant in the Ruby generator, updates both package.json devDependencies, regenerates the lockfile, and rewrites all matching strings in three doc pages and their derived llms file. Every spec that asserted the old RC string has been updated. The only catch is a stale PR number in the CHANGELOG link (/pull/3634 should be /pull/4080), which is a documentation nit and does not affect runtime behavior.

CHANGELOG.md — the PR link number needs a one-character fix. All other files are clean.

Important Files Changed

Filename Overview
react_on_rails/lib/generators/react_on_rails/js_dependency_manager.rb Flips RSC_PACKAGE_VERSION_PIN constant from 19.0.5-rc.7 to 19.0.5 and removes the TODO comment; straightforward and correct
react_on_rails/spec/react_on_rails/generators/js_dependency_manager_spec.rb All spec assertions updated from 19.0.5-rc.7 to 19.0.5 in lock-step with the constant change; no gaps found
CHANGELOG.md New [Unreleased] entry added; the PR link points to /pull/3634 (the issue number) instead of /pull/4080 (the actual PR)
package.json devDependency react-on-rails-rsc pinned to 19.0.5; pnpm-overrides comment updated accordingly; intentional 19.2 soak override left untouched
packages/react-on-rails-pro/package.json devDependency react-on-rails-rsc updated from 19.0.5-rc.7 to 19.0.5, consistent with root package.json
pnpm-lock.yaml Lockfile regenerated cleanly: all 19.0.5-rc.7 specifiers/resolutions replaced with 19.0.5 (new integrity hash); five 19.2.0-rc.1 soak entries left unchanged as expected
docs/pro/react-server-components/upgrading-existing-pro-app.md Version pin updated in prerequisites table, install commands, and troubleshooting section; all occurrences covered
docs/pro/react-server-components/create-without-ssr.md RC pin wording replaced with stable-release wording; install command examples updated across all package managers
docs/pro/react-server-components/rspack-compatibility.md Two RC-pin references updated to stable; stale parenthetical '(switch to 19.0.5 stable once published)' correctly removed
llms-full-pro.txt Regenerated from docs; mirrors all doc changes mechanically; no independent logic

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    A["RSC_PACKAGE_VERSION_PIN\n'19.0.5'\n(js_dependency_manager.rb)"] --> B["react:install generator\nnpm install --save-exact\nreact-on-rails-rsc@19.0.5"]
    A --> C["Root package.json\ndevDependency: 19.0.5"]
    A --> D["packages/react-on-rails-pro/package.json\ndevDependency: 19.0.5"]
    C --> E["pnpm-lock.yaml\nresolution: 19.0.5\nnew integrity hash"]
    D --> E
    A --> F["Pro RSC Docs\ncreate-without-ssr.md\nrspack-compatibility.md\nupgrading-existing-pro-app.md"]
    F --> G["llms-full-pro.txt\n(regenerated)"]
    style A fill:#4CAF50,color:#fff
    style B fill:#2196F3,color:#fff
Loading
%%{init: {'theme': 'base', 'themeVariables': {"darkMode": true, "background": "#0d1117", "primaryColor": "#21262d", "primaryTextColor": "#e6edf3", "primaryBorderColor": "#8b949e", "lineColor": "#8b949e", "textColor": "#e6edf3", "edgeLabelBackground": "#161b22", "actorBkg": "#21262d", "actorBorder": "#8b949e", "actorTextColor": "#e6edf3", "actorLineColor": "#8b949e", "signalColor": "#8b949e", "signalTextColor": "#e6edf3", "noteBkgColor": "#373320", "noteBorderColor": "#d4a72c", "noteTextColor": "#f0e6c0", "labelBoxBkgColor": "#21262d", "labelBoxBorderColor": "#8b949e", "labelTextColor": "#e6edf3", "loopTextColor": "#e6edf3", "activationBkgColor": "#30363d", "activationBorderColor": "#8b949e"}}}%%
flowchart TD
    A["RSC_PACKAGE_VERSION_PIN\n'19.0.5'\n(js_dependency_manager.rb)"] --> B["react:install generator\nnpm install --save-exact\nreact-on-rails-rsc@19.0.5"]
    A --> C["Root package.json\ndevDependency: 19.0.5"]
    A --> D["packages/react-on-rails-pro/package.json\ndevDependency: 19.0.5"]
    C --> E["pnpm-lock.yaml\nresolution: 19.0.5\nnew integrity hash"]
    D --> E
    A --> F["Pro RSC Docs\ncreate-without-ssr.md\nrspack-compatibility.md\nupgrading-existing-pro-app.md"]
    F --> G["llms-full-pro.txt\n(regenerated)"]
    style A fill:#4CAF50,color:#fff
    style B fill:#2196F3,color:#fff
Loading

Reviews (1): Last reviewed commit: "Pin react-on-rails-rsc to stable 19.0.5 ..." | Re-trigger Greptile

Comment thread CHANGELOG.md Outdated
@github-actions

github-actions Bot commented Jun 17, 2026

Copy link
Copy Markdown
Contributor

size-limit report 📦

Path Size
react-on-rails/client bundled (gzip) 62.83 KB (0%)
react-on-rails/client bundled (gzip) (time) 62.83 KB (0%)
react-on-rails/client bundled (brotli) 53.9 KB (0%)
react-on-rails/client bundled (brotli) (time) 53.9 KB (0%)
react-on-rails-pro/client bundled (gzip) 64.27 KB (0%)
react-on-rails-pro/client bundled (gzip) (time) 64.27 KB (0%)
react-on-rails-pro/client bundled (brotli) 55.21 KB (0%)
react-on-rails-pro/client bundled (brotli) (time) 55.21 KB (+0.02% 🔺)
registerServerComponent/client bundled (gzip) 74.43 KB (+0.01% 🔺)
registerServerComponent/client bundled (gzip) (time) 74.43 KB (+0.01% 🔺)
registerServerComponent/client bundled (brotli) 64.04 KB (-0.09% 🔽)
registerServerComponent/client bundled (brotli) (time) 64.04 KB (-0.09% 🔽)
wrapServerComponentRenderer/client bundled (gzip) 67.23 KB (-0.01% 🔽)
wrapServerComponentRenderer/client bundled (gzip) (time) 67.23 KB (+0.01% 🔺)
wrapServerComponentRenderer/client bundled (brotli) 57.67 KB (+0.07% 🔺)
wrapServerComponentRenderer/client bundled (brotli) (time) 57.67 KB (+0.07% 🔺)

@chatgpt-codex-connector chatgpt-codex-connector 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 0d9bd87e17

ℹ️ 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".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread docs/pro/react-server-components/create-without-ssr.md

@coderabbitai coderabbitai Bot left a comment

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.

Actionable comments posted: 1

🧹 Nitpick comments (1)
docs/pro/react-server-components/upgrading-existing-pro-app.md (1)

266-267: ⚡ Quick win

Align troubleshooting commands with package-manager-agnostic pattern.

Lines 26-28 exemplify the package-manager-agnostic style by providing pnpm, yarn, and npm alternatives. The troubleshooting section should follow the same pattern for consistency and usability.

♻️ Proposed fix to add yarn and npm alternatives to troubleshooting
- **Missing `react-on-rails-rsc` package**: Run `pnpm add react-on-rails-rsc@19.0.5`
+ **Missing `react-on-rails-rsc` package**: Run `pnpm add react-on-rails-rsc@19.0.5` (or `yarn add react-on-rails-rsc@19.0.5` / `npm install react-on-rails-rsc@19.0.5`)
- **React or `react-on-rails-rsc` version mismatch**: RSC currently requires React 19.0.x with patch >= 19.0.4 and the exact `react-on-rails-rsc@19.0.5` pin. Check with `pnpm list react react-dom react-on-rails-rsc`
+ **React or `react-on-rails-rsc` version mismatch**: RSC currently requires React 19.0.x with patch >= 19.0.4 and the exact `react-on-rails-rsc@19.0.5` pin. Check with `pnpm list react react-dom react-on-rails-rsc` (or `yarn why` / `npm ls`)
🤖 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 `@docs/pro/react-server-components/upgrading-existing-pro-app.md` around lines
266 - 267, The troubleshooting section at lines 266-267 contains two items with
pnpm-only commands that should be made package-manager-agnostic. For the missing
package item with the "pnpm add react-on-rails-rsc@19.0.5" command and the
version check item with the "pnpm list react react-dom react-on-rails-rsc"
command, add equivalent yarn and npm alternatives following the same
multi-package-manager pattern demonstrated in lines 26-28 of the document. Each
command should show the pnpm, yarn, and npm variations with appropriate syntax
for each package manager.

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.

Inline comments:
In `@react_on_rails/lib/generators/react_on_rails/js_dependency_manager.rb`:
- Around line 163-165: The RSC_PACKAGE_VERSION_PIN constant is now pinned to a
stable release version (19.0.5), but the warning or error messaging that
references this constant still incorrectly describes it as a prerelease and
mentions waiting for stable to be published. Find the warning or informational
messages that reference RSC_PACKAGE_VERSION_PIN or mention "prerelease" or
"until stable is published" in relation to this package, and update the
messaging to accurately reflect that 19.0.5 is now a stable release rather than
a prerelease.

---

Nitpick comments:
In `@docs/pro/react-server-components/upgrading-existing-pro-app.md`:
- Around line 266-267: The troubleshooting section at lines 266-267 contains two
items with pnpm-only commands that should be made package-manager-agnostic. For
the missing package item with the "pnpm add react-on-rails-rsc@19.0.5" command
and the version check item with the "pnpm list react react-dom
react-on-rails-rsc" command, add equivalent yarn and npm alternatives following
the same multi-package-manager pattern demonstrated in lines 26-28 of the
document. Each command should show the pnpm, yarn, and npm variations with
appropriate syntax for each package manager.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: fd292337-b651-46b9-89bf-7fd11669ae80

📥 Commits

Reviewing files that changed from the base of the PR and between 1bf4695 and 0d9bd87.

⛔ Files ignored due to path filters (1)
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (9)
  • CHANGELOG.md
  • docs/pro/react-server-components/create-without-ssr.md
  • docs/pro/react-server-components/rspack-compatibility.md
  • docs/pro/react-server-components/upgrading-existing-pro-app.md
  • llms-full-pro.txt
  • package.json
  • packages/react-on-rails-pro/package.json
  • react_on_rails/lib/generators/react_on_rails/js_dependency_manager.rb
  • react_on_rails/spec/react_on_rails/generators/js_dependency_manager_spec.rb

@justin808

Copy link
Copy Markdown
Member Author

+ci-status

@github-actions

Copy link
Copy Markdown
Contributor

CI Status

Head SHA: 0d9bd87e1709
Changed files: 10
Docs-only heuristic (matches ci-changes-detector metadata paths): no
ready-for-hosted-ci label: absent
force-full-hosted-ci label: absent
Current hosted-CI waiver: not present for this SHA

Only the required gate is active unless hosted CI is requested.

@justin808

Copy link
Copy Markdown
Member Author

+ci-run-hosted

@github-actions github-actions Bot added the ready-for-hosted-ci Run optimized hosted GitHub CI for this PR label Jun 17, 2026
@github-actions

Copy link
Copy Markdown
Contributor

Hosted CI Requested

Triggered 9 workflow(s) for 0d9bd87e1709.
Mode: optimized hosted CI (path-selected by script/ci-changes-detector).
Added ready-for-hosted-ci, so future commits will keep running optimized hosted CI until +ci-stop-hosted is used.

View progress in the Actions tab.

justin808 added a commit that referenced this pull request Jun 17, 2026
- CHANGELOG: fix the changelog entry's PR link to point at PR 4080
  (was pointing at the issue URL /pull/3634); keep Closes Issue 3634.
- Generator messaging: make rsc_dependency_pin_info and
  rsc_dependency_pin_failed_warning conditional on whether
  RSC_PACKAGE_VERSION_PIN is a prerelease (contains "-"). A prerelease
  pin keeps the existing "temporarily / this prerelease / until stable
  {target} is published" wording; the now-stable 19.0.5 pin uses
  accurate wording with no prerelease/temporary framing. Add a stable-pin
  spec asserting the messages omit prerelease wording, and update the
  install_generator_spec expectation accordingly.
- Docs: reword the React-19.0.x NOTE in create-without-ssr.md and
  upgrading-existing-pro-app.md to state the generator pins
  react-on-rails-rsc to exactly 19.0.5 (no ^/~) and that manual
  installers should record it as exactly 19.0.5 because the RSC bundler
  APIs are version-coupled, while react/react-dom stay on ~19.0.4.
  Regenerate llms-full-pro.txt to mirror the doc edits.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@justin808 justin808 force-pushed the jg/3634-rsc-stable-pin branch from 0d9bd87 to 922e827 Compare June 17, 2026 22:50
justin808 and others added 2 commits June 17, 2026 12:52
Stable react-on-rails-rsc@19.0.5 is now published on npm latest, so flip
every default/published pin from the 19.0.5-rc.7 prerelease to the stable
19.0.5 release. This is the v17 final pin.

- Generator default RSC_PACKAGE_VERSION_PIN -> "19.0.5"; reword the pin
  comment to stable framing and drop the resolved TODO(#3642).
- Update js_dependency_manager_spec assertions and warning-text/literal
  expectations from 19.0.5-rc.7 to 19.0.5 (the unrelated 19.1.0-rc.1
  stub_const is left as-is).
- Root package.json devDependency and pnpm-overrides comment, plus the
  Pro package devDependency, now pin 19.0.5.
- Regenerate pnpm-lock.yaml: the react-on-rails-rsc 19.0.5-rc.7 entries
  become 19.0.5; the intentional 19.2.0-rc.1 soak entries are untouched.
- Reword the Pro RSC install docs (rspack-compatibility, create-without-ssr,
  upgrading-existing-pro-app) to state stable 19.0.5 is the pin.
- Regenerate llms-full-pro.txt to mirror the Pro doc edits.
- Add a [Unreleased] CHANGELOG entry; note the native RSC CSS FOUC fix
  requires react-on-rails-rsc >= 19.0.5.

Intentionally left untouched: the React 19.2 soak pins
(react_on_rails_pro_dummy override + Pro dummy package, 19.2.0-rc.1 /
react 19.2.7), the Pro package peerDependencies "*", and the node-renderer
RSC peer-support files.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- CHANGELOG: fix the changelog entry's PR link to point at PR 4080
  (was pointing at the issue URL /pull/3634); keep Closes Issue 3634.
- Generator messaging: make rsc_dependency_pin_info and
  rsc_dependency_pin_failed_warning conditional on whether
  RSC_PACKAGE_VERSION_PIN is a prerelease (contains "-"). A prerelease
  pin keeps the existing "temporarily / this prerelease / until stable
  {target} is published" wording; the now-stable 19.0.5 pin uses
  accurate wording with no prerelease/temporary framing. Add a stable-pin
  spec asserting the messages omit prerelease wording, and update the
  install_generator_spec expectation accordingly.
- Docs: reword the React-19.0.x NOTE in create-without-ssr.md and
  upgrading-existing-pro-app.md to state the generator pins
  react-on-rails-rsc to exactly 19.0.5 (no ^/~) and that manual
  installers should record it as exactly 19.0.5 because the RSC bundler
  APIs are version-coupled, while react/react-dom stay on ~19.0.4.
  Regenerate llms-full-pro.txt to mirror the doc edits.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@justin808 justin808 force-pushed the jg/3634-rsc-stable-pin branch from 922e827 to eed3206 Compare June 17, 2026 22:52

@chatgpt-codex-connector chatgpt-codex-connector 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: eed3206881

ℹ️ 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".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread package.json
@justin808

Copy link
Copy Markdown
Member Author

Review-thread triage (head eed320688) — all four unresolved threads addressed or routed:

  1. claude / greptile — CHANGELOG PR link (P2, now outdated): Fixed — the entry links [PR 4080] (was the issue URL pull/3634). Resolving.
  2. codex — exact-save flags in create-without-ssr.md/upgrading-existing-pro-app.md (P2): Addressed via the NOTE prose instead of a blanket --exact flag — a blanket exact flag would also wrongly pin react@~19.0.4 exactly. The notes now state the generator records react-on-rails-rsc exactly 19.0.5 and manual installers should do the same (RSC bundler APIs are version-coupled), while react/react-dom stay on ~19.0.4. Resolving.
  3. codex — raise RSC_PEER_SUPPORT.recommendedMin to 19.0.5 (P2): Correct, but out of this PR's scope — it's handled by the sibling batch PR Raise RSC peer recommendedMin to stable 19.0.5 (#3632) #4078 (Fixes chore(pro): raise RSC peer recommendedMin to the stable react-on-rails-rsc release once 19.0.5-rc.6 is promoted #3632), which bumps recommendedMin 19.0.219.0.5 and activates the warn tier for 19.0.2–19.0.4. Pin react-on-rails-rsc to stable 19.0.5 (#3634) #4080 and Raise RSC peer recommendedMin to stable 19.0.5 (#3632) #4078 land together in this batch, so apps won't get the stable-pin docs without the warn-tier. Resolving here; tracked there.

@claude

claude Bot commented Jun 17, 2026

Copy link
Copy Markdown
Contributor

Code Review - PR 4080: Pin react-on-rails-rsc to stable 19.0.5

Summary: Clean, low-risk version-string promotion. All findings are minor or informational.

What the PR does

Promotes the react-on-rails-rsc pin from the pre-release 19.0.5-rc.7 to the stable 19.0.5 release everywhere the repo surfaces that version to users: the generator constant, both package.json files, pnpm-lock.yaml, three Pro RSC install docs, the LLM context blob, and CHANGELOG.md.

Strengths

  • Comprehensive sweep. Every pin site is updated: generator constant, devDependencies, lockfile, docs, llms-full-pro.txt, changelog. No stragglers.
  • Good abstraction. The new rsc_package_version_prerelease? helper avoids magic-string conditionals and makes future toggling back to a pre-release explicit rather than scattered include?("-") calls.
  • Both branches are tested. The prerelease branch is exercised via stub_const (line 726 of js_dependency_manager_spec.rb), and the stable branch is exercised with the real constant (line 742). No dead coverage.
  • Spec assertions cover negative cases. Checking not_to include("prerelease"), "temporarily", and "until stable" catches future regressions where the wording drifts back to RC framing.
  • React 19.2 soak pins intentionally excluded. The PR description is explicit about what is not changed and why - good for future archaeology.

Minor observations

  1. Stable-branch message still uses transitional "adding" language

In rsc_dependency_pin_failed_warning (stable branch), RspackPlugin is already shipped in the stable release, so "adding" reads as if it is still in flight. "supporting" or "including" would be more accurate for the stable branch. The same wording appears in rsc_dependency_pin_info's else branch. Not a bug - just slightly misleading user-facing text.

  1. rsc_stable_package_version_target is runtime-unreachable under the current stable pin

The method is only called from inside the if rsc_package_version_prerelease? branches, so at runtime with RSC_PACKAGE_VERSION_PIN = "19.0.5" it is never invoked. The spec covers it via stub_const, which is correct, but a short comment that the method exists to serve future pre-release pins would help the next reader confirm it is not orphaned.

  1. CHANGELOG placement

The "Changed" sub-section is inserted between the existing "Fixed" entry and the [17.0.0.rc.5] header. No sibling "Changed" block existed in the Unreleased section before, so this is structurally correct.

Security / dependency integrity

The pnpm-lock.yaml integrity hash change from sha512-cyQw... to sha512-EGa5... is expected when swapping package versions. CI must verify the resolved tarball matches the new hash (standard pnpm behaviour).

Verdict

Approve with nits. The wording fix in point 1 is the only thing worth a follow-up; it is non-blocking. The local validation described in the PR body (608 RSpec examples, type-check, lint, format, docs guard) is thorough for a mechanical pin bump. Waiting on hosted CI to confirm real npm install resolution of the stable tarball before merge, as noted by the ready-for-hosted-ci label.

@claude

claude Bot commented Jun 17, 2026

Copy link
Copy Markdown
Contributor

PR Review: Pin react-on-rails-rsc to stable 19.0.5 (#3634)

Overview

Clean, well-scoped version promotion: every RC pin of react-on-rails-rsc@19.0.5-rc.7 is replaced with the stable 19.0.5 release. Changes span the generator constant, root/Pro package.json devDependencies, pnpm-lock.yaml, three Pro RSC docs, the regenerated llms-full-pro.txt, and the corresponding specs. No runtime logic changes.


What Is Good

  • Forward-looking helper added: rsc_package_version_prerelease? makes the info/warning messages context-aware so the next time the generator moves to a new RC the messaging automatically adjusts without a separate docs/copy PR.
  • Negative assertions in specs: The updated and new specs check not_to include("prerelease"), not_to include("temporarily"), and not_to include("until stable") — these prevent accidental regression back to RC wording.
  • TODO removed correctly: The TODO(#3642) comment in js_dependency_manager.rb is cleanly removed.
  • Lockfile integrity hash changed correctly: The pnpm-lock.yaml snapshot shows a different SHA512 for 19.0.5 vs 19.0.5-rc.7, as expected for a different published artifact.

Minor Issues

1. New spec hardcodes "19.0.5" instead of using the constant (js_dependency_manager_spec.rb, new test around line 743)

The test directly asserts expect(message).to include("react-on-rails-rsc@19.0.5") while adjacent tests in the same file use the more resilient pattern:

rsc_package = "react-on-rails-rsc@#{ReactOnRails::Generators::JsDependencyManager::RSC_PACKAGE_VERSION_PIN}"

When the pin next advances, this test fails on two lines instead of one. A more pin-agnostic version:

it "uses accurate messaging without prerelease wording for a stable package pin" do
  pin = ReactOnRails::Generators::JsDependencyManager::RSC_PACKAGE_VERSION_PIN
  expect(pin).not_to include("-")   # assert stable, not a specific string

  info    = instance.send(:rsc_dependency_pin_info)
  warning = instance.send(:rsc_dependency_pin_failed_warning)

  [info, warning].each do |message|
    expect(message).to include("react-on-rails-rsc@#{pin}")
    expect(message).to include("react-on-rails-rsc/WebpackPlugin")
    expect(message).to include("react-on-rails-rsc/RspackPlugin")
    expect(message).not_to include("prerelease")
    expect(message).not_to include("temporarily")
    expect(message).not_to include("until stable")
  end
end

2. Yarn/npm install commands do not use --exact / --save-exact (create-without-ssr.md, upgrading-existing-pro-app.md)

The adjacent NOTE explicitly says to record react-on-rails-rsc as exactly 19.0.5 (no ^ or ~). However yarn add react-on-rails-rsc@19.0.5 saves "react-on-rails-rsc": "^19.0.5" by default, and npm behaves the same without --save-exact. pnpm (the primary command) does save exact when given an exact specifier, so that line is already correct.

Suggesting:

yarn add --exact react-on-rails-rsc@19.0.5
# npm install --save-exact react-on-rails-rsc@19.0.5

This prevents users following the yarn/npm variant from storing ^19.0.5 and accidentally resolving a future 19.1.x before that range is blessed.


Not Blocking

Both issues above are polish — neither affects runtime behavior or the correctness of the promoted version pin. The core change (RC → stable) is correct, complete, and well-tested.

Verdict: approved with the above suggestions noted for a quick fixup or follow-up.

Comment thread docs/pro/react-server-components/create-without-ssr.md
@justin808

Copy link
Copy Markdown
Member Author

Late review-nit triage (head eed320688, both advisory P2, resolving without another CI cycle):

  1. claude — spec hardcodes "19.0.5" vs the constant (maintainability nit): Intentional for this test — it's the dedicated stable-pin case asserting the message renders the concrete stable version (and omits "prerelease"/"until stable" wording). The prerelease branch is covered separately by the 19.1.0-rc.1 stub test. When the pin next advances to a prerelease, this test should be revisited deliberately. Keeping the literal here.
  2. claude — docs NOTE "record exactly 19.0.5" vs caret-saving add commands: The NOTE already documents exactly this ("record react-on-rails-rsc as exactly 19.0.5 … rather than the default caret range") — i.e. claude's own offered alternative ("a follow-up NOTE pointing out that only react-on-rails-rsc needs to be exact"). The commands intentionally keep react/react-dom on the ~19.0.4 range, so a blanket --exact flag would wrongly pin those too; the prose guidance is the correct resolution.

Both behavior-preserving nits; not gating the release-gate stable pin. Resolving per the merge-endgame debounce rule (main is advancing with unrelated docs PRs every few minutes).

@justin808 justin808 merged commit 92b2a34 into main Jun 18, 2026
55 checks passed
@justin808 justin808 deleted the jg/3634-rsc-stable-pin branch June 18, 2026 01:36
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ready-for-hosted-ci Run optimized hosted GitHub CI for this PR

Projects

None yet

Development

Successfully merging this pull request may close these issues.

RSC FOUC: ship stable react-on-rails-rsc@19.0.5 and pin v17 to it (native-only)

1 participant