chore: update React on Rails and Shakapacker RC test matrix#740
chore: update React on Rails and Shakapacker RC test matrix#740justin808 wants to merge 8 commits into
Conversation
|
Important Review skippedDraft detected. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
✨ Finishing Touches🧪 Generate unit tests (beta)
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. Comment |
Review app commands
For setup details, comment |
| "react-on-rails-pro": "16.7.0-rc.0", | ||
| "react-on-rails-pro-node-renderer": "16.7.0-rc.0", |
There was a problem hiding this comment.
The yarn.lock file was intentionally left at 16.6.0 for these packages, which means the committed lockfile is inconsistent with package.json. Any CI step using --frozen-lockfile (e.g. yarn install --frozen-lockfile) will fail because the lockfile doesn't satisfy the new 16.7.0-rc.0 requirement. The lockfile should be regenerated by running yarn install locally and committing the result—even for RC versions—so the repo is in a coherent, reproducible state.
| psych (>= 4.0.0) | ||
| tsort | ||
| react_on_rails (16.6.0) | ||
| react_on_rails (16.7.0.rc.0) |
There was a problem hiding this comment.
The PR description notes that Gemfile.lock was manually edited (only version strings were updated, not via bundle update react_on_rails_pro). Modern Bundler versions store per-gem checksums in Gemfile.lock; if those weren't updated to match the new gem tarballs, bundle install will fail with a checksum mismatch error. Please regenerate this file with bundle update react_on_rails react_on_rails_pro and commit the result.
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes and found 1 potential issue.
Bugbot Autofix prepared a fix for the issue found in the latest run.
- ✅ Fixed: Stale yarn lock blocks installs
- Updated yarn.lock to lock react-on-rails-pro, react-on-rails-pro-node-renderer, and the nested react-on-rails dependency at 16.7.0-rc.0 so frozen installs now succeed.
Or push these changes by commenting:
@cursor push 06cf0b472a
Preview (06cf0b472a)
diff --git a/yarn.lock b/yarn.lock
--- a/yarn.lock
+++ b/yarn.lock
@@ -8783,10 +8783,10 @@
resolved "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz"
integrity sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==
-react-on-rails-pro-node-renderer@16.6.0:
- version "16.6.0"
- resolved "https://registry.npmjs.org/react-on-rails-pro-node-renderer/-/react-on-rails-pro-node-renderer-16.6.0.tgz#c13ca0f156566531d7c6e005759459b0f19472a8"
- integrity sha512-fBZ0lKRaEe8LyVTdUsXx364zQfL6hGJuE+2qQsKo+bXm0aTVq2RtO49gzq0m7Y4xuhBTVmnPQUP0O1v1cGRzLg==
+react-on-rails-pro-node-renderer@16.7.0-rc.0:
+ version "16.7.0-rc.0"
+ resolved "https://registry.yarnpkg.com/react-on-rails-pro-node-renderer/-/react-on-rails-pro-node-renderer-16.7.0-rc.0.tgz#fcd6b23bddf81a3805f38d2f23561a6aeaa16ef2"
+ integrity sha512-kgm8iuoyT1I2DPID0AWTaSjIuVbiW39vTBBouEZ2adxzX2+YKVpuBGQgTaRedTUPcdCkuVTnSNPIgcmkY9FNmw==
dependencies:
"@fastify/formbody" "^7.4.0 || ^8.0.2"
"@fastify/multipart" "^8.3.1 || ^9.0.3"
@@ -8796,12 +8796,12 @@
lockfile "^1.0.4"
pino "^9.0.0"
-react-on-rails-pro@16.6.0:
- version "16.6.0"
- resolved "https://registry.npmjs.org/react-on-rails-pro/-/react-on-rails-pro-16.6.0.tgz#19a5ea99d7b397dd56f14cff1f31955211b4d0a2"
- integrity sha512-Uc8o3gdHyIETvY5J9wVUyONKOhnkw9kGJDREMHQb/IuXoB5/Vo51UK487Rcep2Z+Dzz/bEvNoF+GuZohORZ7Zw==
+react-on-rails-pro@16.7.0-rc.0:
+ version "16.7.0-rc.0"
+ resolved "https://registry.yarnpkg.com/react-on-rails-pro/-/react-on-rails-pro-16.7.0-rc.0.tgz#2b1b6f1a65dc1780e77f7c2cb3e78916bf7b9eba"
+ integrity sha512-gy7PgXJZokaDepBVnqPIzINAhxJiBYbkGN0BHu/chRjhW2L7CJO/PC5pLnWnaV6CBu8AJipM+oNBiUpEXUyA6A==
dependencies:
- react-on-rails "16.6.0"
+ react-on-rails "16.7.0-rc.0"
react-on-rails-rsc@19.0.4:
version "19.0.4"
@@ -8812,10 +8812,10 @@
neo-async "^2.6.1"
webpack-sources "^3.2.0"
-react-on-rails@16.6.0:
- version "16.6.0"
- resolved "https://registry.npmjs.org/react-on-rails/-/react-on-rails-16.6.0.tgz#da7f117fec14f420f7f6ffe6bdb34b7fc2e01b3a"
- integrity sha512-LqLi7A0n0Tv5c3yMYlwS9s6rE82gvXNMj3sscmK2LOgIJ+mLQlOX65n0Jq5ZJ4Nsl9SRgxEOOQmcrfvDeB9F1g==
+react-on-rails@16.7.0-rc.0:
+ version "16.7.0-rc.0"
+ resolved "https://registry.yarnpkg.com/react-on-rails/-/react-on-rails-16.7.0-rc.0.tgz#4fb47203ab9f65528605233c3b6cddba69536107"
+ integrity sha512-81Lu9ToSlunduiPQm+R+C+DJ9irdPDFEN3Jvq8dyI6r5uKc9kgfsTiJkyeULjk613RBAT0apkr08GOyhaSe94A==
react-proxy@^1.1.7:
version "1.1.8"You can send follow-ups to the cloud agent here.
Reviewed by Cursor Bugbot for commit e26bec4. Configure here.
Code Review: chore: bump react_on_rails to 16.7.0.rc.0OverviewThis PR bumps Blocking Issues1. yarn.lock is stale (inline comment on package.json) 2. Gemfile.lock was manually edited, not regenerated (inline comment on Gemfile.lock) Non-blocking Observations
SummaryThe intent of the PR is correct, but the two lockfile issues need to be resolved before merge to avoid broken CI and broken |
…#3366) (#3368) ## Summary Fixes [#3366](#3366) — a 16.7.0-rc.0 regression where the RSC client manifest (`react-client-manifest.json`) is silently dropped from the Pro Node Renderer upload, breaking server-component rendering with `ENOENT` on the renderer side. - Add a side-effect import of `react-on-rails-rsc/client.browser` at the top of `wrapServerComponentRenderer/client.tsx`. RSCWebpackPlugin scans every parsed module's resource path for an exact match against `require.resolve("../client.browser.js")` and only emits `react-client-manifest.json` when it finds one. Previously the client runtime was reachable only through a three-level transitive chain (`wrapServerComponentRenderer/client` → `getReactServerComponent.client` → `react-on-rails-rsc/client.browser`); any tooling that severed a link in that chain silently dropped the manifest and produced the misleading `Client runtime at react-on-rails-rsc/client was not found` warning. The direct import keeps the runtime resource in the client module graph regardless of how downstream tooling handles transitive default imports. - Add a structural regression test that fails if the side-effect import is removed from either the source or the compiled lib output. - Add a webpack-level regression test that compiles `wrapServerComponentRenderer/client.tsx` with the old transitive `getReactServerComponent.client` edge replaced by a stub, then asserts `RSCWebpackPlugin` still emits `react-client-manifest.json`. This proves the direct import itself preserves the manifest. ## Why Issue #3366 reports that the warning + missing manifest first appears when the consuming app upgrades to `react_on_rails_pro` / `react-on-rails-pro` / `react-on-rails-pro-node-renderer` `16.7.0-rc.0` from `16.6.0`, even with `react-on-rails-rsc@19.0.4` and `shakapacker@10.0.0` unchanged. The actual chain in source/lib is intact between both versions, and the issue does not reproduce on the in-tree dummy app or a clean clone of the tutorial PR — but the user's environment clearly does see `clientFileNameFound = false` from the upstream RSC plugin. The defensive direct import removes that fragility: even if a future transpiler/tree-shaker decides `getReactServerComponent.client` is "unused" or rewrites the path, the side-effect import keeps `client.browser` in the graph and the plugin always emits the manifest. ## Evaluation Confirmed the fix addresses the bug mechanism. The RSC plugin decides whether to write `react-client-manifest.json` by seeing the `react-on-rails-rsc/client.browser` module in the client compilation. The direct side-effect import is an appropriate fix because it changes build graph visibility without changing renderer runtime behavior. I verified the new behavior test is meaningful by temporarily removing the direct import: with the old transitive helper path stubbed out, webpack emitted the expected `Client runtime at react-on-rails-rsc/client was not found` warning and the test failed. Restoring the import made the same test pass and emit `react-client-manifest.json`. The Pro dummy build also emits both `react-client-manifest.json` and `react-server-client-manifest.json` successfully. ## Test plan - [x] `pnpm --filter react-on-rails-pro exec jest tests/wrapServerComponentRenderer.client.manifest.test.js --runInBand` passes - [x] Red check: temporarily removing `import 'react-on-rails-rsc/client.browser';` makes the new manifest test fail with the upstream missing-client-runtime warning - [x] `pnpm --filter react-on-rails-pro exec jest tests/wrapServerComponentRenderer.client.manifest.test.js tests/wrapServerComponentRenderer.client.imports.test.ts --runInBand` passes - [x] `pnpm --filter react-on-rails-pro exec jest tests/createReactOnRailsPro.test.ts --runInBand` passes - [x] `pnpm --filter react-on-rails-pro run test:non-rsc` passes: 7 suites, 58 tests - [x] `pnpm --filter react-on-rails-pro run type-check` passes - [x] `pnpm run lint` passes - [x] `(cd react_on_rails && bundle exec rubocop)` passes - [x] `(cd react_on_rails_pro && bundle exec rubocop --ignore-parent-exclusion)` passes; RuboCop prints deprecation warnings from dependencies but reports no offenses - [x] `pnpm exec prettier --check packages/react-on-rails-pro/tests/wrapServerComponentRenderer.client.manifest.test.js packages/react-on-rails-pro/tests/fixtures/rsc-manifest/getReactServerComponent.client.stub.ts` passes - [x] `RAILS_ENV=test NODE_ENV=development bundle exec bin/shakapacker` from `react_on_rails_pro/spec/dummy` passes and emits `react-client-manifest.json` plus `react-server-client-manifest.json` - [x] `git diff --check` passes - [x] Pre-commit and pre-push hooks passed while committing and pushing `3013f9d90` - [ ] Full-repo `pnpm start format.listDifferent` is blocked by an existing ignored `.context/plans/issue-3366-reproduction-plan.md` formatting issue; the PR files pass direct Prettier checks - [ ] Verify CI passes on this PR - [ ] Verify [shakacode/react-webpack-rails-tutorial#740](shakacode/react-webpack-rails-tutorial#740) unblocks once a new RC build with this fix is published 🤖 Generated with [Claude Code](https://claude.com/claude-code) <!-- CURSOR_SUMMARY --> --- > [!NOTE] > **Medium Risk** > Touches Pro RSC client entrypoint bundling to force inclusion of the RSC client runtime, which can affect build output and hydration behavior if misconfigured. Added tests reduce regression risk, but changes are in a critical RSC packaging path. > > **Overview** > Restores reliable React Server Components hydration for Pro by adding a **top-level side-effect import** of `react-on-rails-rsc/client.browser` in `wrapServerComponentRenderer/client.tsx`, ensuring `RSCWebpackPlugin` consistently emits `react-client-manifest.json` even when transitive imports are disrupted. > > Adds regression coverage: a structural test that enforces the presence of the side-effect import (source and built `lib` when available) and a webpack-level test that stubs `getReactServerComponent.client` to prove manifest emission still occurs. Updates `knip.ts` to ignore dynamically referenced test fixtures and records the fix in `CHANGELOG.md`. > > <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit 1bb24cc. 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** * Restored inclusion of the client runtime so the client manifest is emitted, preventing React Server Components hydration failures in certain build setups. * **Tests** * Added regression tests to ensure the client runtime import is preserved and the client manifest is emitted during bundling. * **Documentation** * Updated CHANGELOG with the fix. <!-- review_stack_entry_start --> [](https://app.coderabbit.ai/change-stack/shakacode/react_on_rails/pull/3368?utm_source=github_walkthrough&utm_medium=github&utm_campaign=change_stack) <!-- review_stack_entry_end --> <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…#3366) (#3368) ## Summary Fixes [#3366](#3366) — a 16.7.0-rc.0 regression where the RSC client manifest (`react-client-manifest.json`) is silently dropped from the Pro Node Renderer upload, breaking server-component rendering with `ENOENT` on the renderer side. - Add a side-effect import of `react-on-rails-rsc/client.browser` at the top of `wrapServerComponentRenderer/client.tsx`. RSCWebpackPlugin scans every parsed module's resource path for an exact match against `require.resolve("../client.browser.js")` and only emits `react-client-manifest.json` when it finds one. Previously the client runtime was reachable only through a three-level transitive chain (`wrapServerComponentRenderer/client` → `getReactServerComponent.client` → `react-on-rails-rsc/client.browser`); any tooling that severed a link in that chain silently dropped the manifest and produced the misleading `Client runtime at react-on-rails-rsc/client was not found` warning. The direct import keeps the runtime resource in the client module graph regardless of how downstream tooling handles transitive default imports. - Add a structural regression test that fails if the side-effect import is removed from either the source or the compiled lib output. - Add a webpack-level regression test that compiles `wrapServerComponentRenderer/client.tsx` with the old transitive `getReactServerComponent.client` edge replaced by a stub, then asserts `RSCWebpackPlugin` still emits `react-client-manifest.json`. This proves the direct import itself preserves the manifest. ## Why Issue #3366 reports that the warning + missing manifest first appears when the consuming app upgrades to `react_on_rails_pro` / `react-on-rails-pro` / `react-on-rails-pro-node-renderer` `16.7.0-rc.0` from `16.6.0`, even with `react-on-rails-rsc@19.0.4` and `shakapacker@10.0.0` unchanged. The actual chain in source/lib is intact between both versions, and the issue does not reproduce on the in-tree dummy app or a clean clone of the tutorial PR — but the user's environment clearly does see `clientFileNameFound = false` from the upstream RSC plugin. The defensive direct import removes that fragility: even if a future transpiler/tree-shaker decides `getReactServerComponent.client` is "unused" or rewrites the path, the side-effect import keeps `client.browser` in the graph and the plugin always emits the manifest. ## Evaluation Confirmed the fix addresses the bug mechanism. The RSC plugin decides whether to write `react-client-manifest.json` by seeing the `react-on-rails-rsc/client.browser` module in the client compilation. The direct side-effect import is an appropriate fix because it changes build graph visibility without changing renderer runtime behavior. I verified the new behavior test is meaningful by temporarily removing the direct import: with the old transitive helper path stubbed out, webpack emitted the expected `Client runtime at react-on-rails-rsc/client was not found` warning and the test failed. Restoring the import made the same test pass and emit `react-client-manifest.json`. The Pro dummy build also emits both `react-client-manifest.json` and `react-server-client-manifest.json` successfully. ## Test plan - [x] `pnpm --filter react-on-rails-pro exec jest tests/wrapServerComponentRenderer.client.manifest.test.js --runInBand` passes - [x] Red check: temporarily removing `import 'react-on-rails-rsc/client.browser';` makes the new manifest test fail with the upstream missing-client-runtime warning - [x] `pnpm --filter react-on-rails-pro exec jest tests/wrapServerComponentRenderer.client.manifest.test.js tests/wrapServerComponentRenderer.client.imports.test.ts --runInBand` passes - [x] `pnpm --filter react-on-rails-pro exec jest tests/createReactOnRailsPro.test.ts --runInBand` passes - [x] `pnpm --filter react-on-rails-pro run test:non-rsc` passes: 7 suites, 58 tests - [x] `pnpm --filter react-on-rails-pro run type-check` passes - [x] `pnpm run lint` passes - [x] `(cd react_on_rails && bundle exec rubocop)` passes - [x] `(cd react_on_rails_pro && bundle exec rubocop --ignore-parent-exclusion)` passes; RuboCop prints deprecation warnings from dependencies but reports no offenses - [x] `pnpm exec prettier --check packages/react-on-rails-pro/tests/wrapServerComponentRenderer.client.manifest.test.js packages/react-on-rails-pro/tests/fixtures/rsc-manifest/getReactServerComponent.client.stub.ts` passes - [x] `RAILS_ENV=test NODE_ENV=development bundle exec bin/shakapacker` from `react_on_rails_pro/spec/dummy` passes and emits `react-client-manifest.json` plus `react-server-client-manifest.json` - [x] `git diff --check` passes - [x] Pre-commit and pre-push hooks passed while committing and pushing `3013f9d90` - [ ] Full-repo `pnpm start format.listDifferent` is blocked by an existing ignored `.context/plans/issue-3366-reproduction-plan.md` formatting issue; the PR files pass direct Prettier checks - [ ] Verify CI passes on this PR - [ ] Verify [shakacode/react-webpack-rails-tutorial#740](shakacode/react-webpack-rails-tutorial#740) unblocks once a new RC build with this fix is published 🤖 Generated with [Claude Code](https://claude.com/claude-code) <!-- CURSOR_SUMMARY --> --- > [!NOTE] > **Medium Risk** > Touches Pro RSC client entrypoint bundling to force inclusion of the RSC client runtime, which can affect build output and hydration behavior if misconfigured. Added tests reduce regression risk, but changes are in a critical RSC packaging path. > > **Overview** > Restores reliable React Server Components hydration for Pro by adding a **top-level side-effect import** of `react-on-rails-rsc/client.browser` in `wrapServerComponentRenderer/client.tsx`, ensuring `RSCWebpackPlugin` consistently emits `react-client-manifest.json` even when transitive imports are disrupted. > > Adds regression coverage: a structural test that enforces the presence of the side-effect import (source and built `lib` when available) and a webpack-level test that stubs `getReactServerComponent.client` to prove manifest emission still occurs. Updates `knip.ts` to ignore dynamically referenced test fixtures and records the fix in `CHANGELOG.md`. > > <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit 1bb24cc. 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** * Restored inclusion of the client runtime so the client manifest is emitted, preventing React Server Components hydration failures in certain build setups. * **Tests** * Added regression tests to ensure the client runtime import is preserved and the client manifest is emitted during bundling. * **Documentation** * Updated CHANGELOG with the fix. <!-- review_stack_entry_start --> [](https://app.coderabbit.ai/change-stack/shakacode/react_on_rails/pull/3368?utm_source=github_walkthrough&utm_medium=github&utm_campaign=change_stack) <!-- review_stack_entry_end --> <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Updates react_on_rails_pro gem and react-on-rails-pro, react-on-rails-pro-node-renderer npm packages from RC.0 to RC.2.
Code Review — chore: update React on Rails and Shakapacker RC test matrixOverviewThis PR bumps Discrepancy: Shakapacker not updatedThe PR description dedicates a full section to "Shakapacker 10.1.0 RC" and states:
However the actual diff shows:
This makes the PR description misleading for reviewers. If the Shakapacker update is intentionally deferred (which the description's blocking notes suggest), that section should be reworded to describe what was evaluated but not yet applied rather than framing it as a done item. JWT major-version bump (2.10.2 → 3.2.0) — needs verification
RSC Spec Parser — correctness notesThe new binary parser in
Minor / Non-blocking
SummaryThe dependency upgrades are mechanically straightforward. The main asks before merge:
|
| end | ||
|
|
||
| def discard_blank_frame_lines(body) | ||
| body = body.byteslice(1..) || "".b while body.start_with?("\n") |
There was a problem hiding this comment.
The while modifier with an assignment on the same line is valid Ruby but uncommon enough to cause a double-take. An explicit loop block is easier to scan:
| body = body.byteslice(1..) || "".b while body.start_with?("\n") | |
| def discard_blank_frame_lines(body) | |
| while body.start_with?("\n") | |
| body = body.byteslice(1..) || "".b | |
| end | |
| body | |
| end |
| raise "Malformed length-prefixed RSC payload: missing tab separator" unless content_length_hex | ||
|
|
||
| content_start = header_end + 1 | ||
| content_length = Integer(content_length_hex, 16) |
There was a problem hiding this comment.
Integer(content_length_hex, 16) raises ArgumentError on invalid hex input, which bypasses the explicit raise "Malformed …" pattern used on every other error path. Consider wrapping it for a consistent failure message:
| content_length = Integer(content_length_hex, 16) | |
| content_length = Integer(content_length_hex.strip, 16) |
Or wrap with rescue:
content_length = Integer(content_length_hex, 16)
rescue ArgumentError
raise "Malformed length-prefixed RSC payload: invalid hex length '#{content_length_hex}'"|
|
||
| [ | ||
| parse_payload_metadata(metadata_json, content), | ||
| body.byteslice(content_start + content_length, body.bytesize) || "".b |
There was a problem hiding this comment.
byteslice(offset, length) takes a length as its second argument, not an end index. Passing body.bytesize works (it's large enough to capture everything remaining) but reads as if it were an end index. The endless-range form is both correct and self-documenting:
| body.byteslice(content_start + content_length, body.bytesize) || "".b | |
| body.byteslice(content_start + content_length..) || "".b |
| def parse_payload_metadata(metadata_json, content) | ||
| metadata = JSON.parse(metadata_json.force_encoding(Encoding::UTF_8)) | ||
| content.force_encoding(Encoding::UTF_8) | ||
| metadata["html"] = metadata.delete("payloadType") == "object" ? JSON.parse(content) : content |
There was a problem hiding this comment.
The metadata.delete("payloadType") call is doing double duty — removing the key and returning its value for the comparison. This is idiomatic Ruby but non-obvious at first read. A brief comment clarifies the intent:
| metadata["html"] = metadata.delete("payloadType") == "object" ? JSON.parse(content) : content | |
| # Remove payloadType from the hash and use its value to decide how to decode content. | |
| metadata["html"] = metadata.delete("payloadType") == "object" ? JSON.parse(content) : content |


Refs shakacode/react_on_rails#3360
Release matrix
React on Rails 16.7.0 RC
Published and registry-verified release target:
react-on-rails@16.7.0-rc.1react-on-rails-pro@16.7.0-rc.1react-on-rails-pro-node-renderer@16.7.0-rc.1create-react-on-rails-app@16.7.0-rc.1react_on_rails 16.7.0.rc.1,react_on_rails_pro 16.7.0.rc.1Current app-update blocker:
rcdist-tags point at16.7.0-rc.1.react-on-rails-pro@16.7.0-rc.1is published withdependencies: { "react-on-rails": "workspace:*" }.workspace:*dependency from npm, soyarn add react-on-rails-pro@16.7.0-rc.1fails withCouldn't find any versions for "react-on-rails" that matches "workspace:*".react-on-rails-prodepends on the concrete matching npm version instead ofworkspace:*.react-on-rails-rscremains React-versioned and is not part of the React on Rails product-version bump.Shakapacker 10.1.0 RC
Published release target:
shakapacker@10.1.0-rc.2shakapacker-webpack@10.1.0-rc.2shakapacker-rspack@10.1.0-rc.2shakapacker 10.1.0.rc.2Implementation notes:
shakapacker@10.1.0-rc.2and theshakapackergem to10.1.0.rc.2.shakapacker-rspack@10.1.0-rc.2explicitly.package.json, because this project uses Yarn v1 and Yarn v1 does not auto-install required peer dependencies.assets_bundler: webpackfor now. Testingassets_bundler: rspackstill fails in the React Server Components plugin withcontextModuleFactory.resolveDependencies is not a function, so Webpack remains the working build path while the RSC/Rspack compatibility issue is unresolved.Changelog notes studied
React on Rails 16.7.0.rc.1 notes checked:
webpackHelpersexport forreactDomClientWarning.REACT_ON_RAILS_BASE_PORT/CONDUCTOR_PORT.jwt2.x compatibility restoration, RSC client manifest restoration, Fastify security bump, TanStack Router hydration fixes, nested package-root doctor fixes, and generated pack serialization fixes.Shakapacker 10.1.0-rc.2 notes checked:
shakapacker-webpackandshakapacker-rspack.shakapacker-rspackdepends onshakapacker ~10.1.0-rc.2and declares required Rspack peer dependencies.^20.19.0 || >=22.12.0.Validation
Local validation run against the prepared Shakapacker/Rspack dependency update:
bin/conductor-exec bundle checkbin/conductor-exec yarn install --frozen-lockfilebin/conductor-exec yarn check --verify-treebin/conductor-exec yarn jest client/__tests__/webpack/bundlerUtils.spec.jsbin/conductor-exec yarn build:testgit diff --checkAdditional React on Rails rc.1 install check:
16.7.0-rc.1packages.bin/conductor-exec yarn add react-on-rails-pro@16.7.0-rc.1 react-on-rails-pro-node-renderer@16.7.0-rc.1fails because the publishedreact-on-rails-propackage depends onreact-on-railsviaworkspace:*.CI status on the currently pushed PR commit:
claude-reviewfailed because Claude Code hit a session limit; the failure is external to the app/test suite.Follow-up before final review
react-on-rails-prodepends on a concretereact-on-railsversion rather thanworkspace:*.Note
Medium Risk
Dependency RC upgrades affect server rendering and RSC streaming; spec changes reflect a protocol shift that must match production behavior.
Overview
Bumps the app to React on Rails / React on Rails Pro
16.7.0.rc.2on both Ruby (react_on_rails,react_on_rails_pro) and npm (react-on-rails-pro,react-on-rails-pro-node-renderer), with lockfile refreshes for related gems and the node renderer’s Fastify peer.Updates
spec/requests/server_components_spec.rbso RSC streaming tests no longer assume one JSON object per line. Parsing now walks a length-prefixed frame format: optional blank line separators, a metadata line with tab-separated hex length, raw content bytes, andpayloadType-aware decoding into the existinghtmlfield expectations.Reviewed by Cursor Bugbot for commit 516ce28. Bugbot is set up for automated code reviews on this repo. Configure here.