Avoid caching async props prerender streams - #4376
Conversation
|
Warning Review limit reached
Next review available in: 20 minutes Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. How can I continue?After more reviews become available, a review can be triggered using the 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 configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (3)
✨ 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 SummaryThis is a small, well-scoped security fix. Verified the change end-to-end: Correctness of the fix
Left an inline note on a related, currently-unreachable edge case: the explicit fragment-style cache ( Minor / non-blocking
Overall: correct, minimal, appropriately conservative (disables caching rather than trying to build a safe-but-complex cache key), and backed by a test that actually proves the bug is fixed. |
ReviewThis PR bypasses the Pro prerender stream cache ( The fix is incomplete — the same class of bug is still reachable through the higher-level fragment-cache helpers
Concretely: Given the PR is described as release-blocking for a cache-isolation security bug, I'd suggest either extending Minor: dead test additions
🤖 Automated review |
Address-review summaryScan scope: full current-head unresolved review threads as of 2026-07-02T08:00Z. Mattered
Optional
Skipped
Next default scan starts after this comment. Say |
|
+ci-run-hosted |
Hosted CI RequestedTriggered 9 workflow(s) for View progress in the Actions tab. |
…cache-4359 * origin/main: Guard preload links for older Shakapacker (#4377) Document runtime RC blocker fixes (#4373) Warn on undetermined RSC Rspack boot validation (#4355) Fail fast when local benchmark server exits (#4380) Preserve agent-coord-bounded output on bounded exits (#4381) # Conflicts: # CHANGELOG.md
Greptile SummaryThis PR prevents async-props stream output from being reused across cached prerenders. The main changes are:
Confidence Score: 5/5This looks safe to merge.
Important Files Changed
Reviews (1): Last reviewed commit: "Merge remote-tracking branch 'origin/mai..." | Re-trigger Greptile |
Review: Avoid caching async props prerender streams (#4376)Summary of change: Adds a check in Findings
This PR only patches None of these consult
Concretely: Minor (test coverage)
Everything else (changelog formatting/placement, the |
…nsport * origin/main: Avoid caching async props prerender streams (#4376)
…derer-shutdown-restart * origin/main: Add mechanical parity guards for Ruby↔TS protocol constants (#4412) (#4427) Move Node tsconfigs from @tsconfig/node14 to @tsconfig/node18 (#4410) (#4429) [Pro] Remove unused addressable and rainbow runtime deps from gemspec (#4416) (#4422) Delete finished #3313 Prism Gemfile-rewriter spike (#4421) Extract generator scan/tracking helpers (#4405) (#4430) Extract install_dependency_group helper in JsDependencyManager (#4403) (#4424) Remove obsolete Ruby<2.6 YAML-aliases capability shim (#4417) (#4428) Remove inert config.server_render_method option (#4415) (#4423) Prune stale knip ignores and enforce binaries in CI (#4408) (#4425) Extract shared redux_store kwargs validator (#4402) (#4420) Avoid caching async props prerender streams (#4376) Release incremental render context on setup failure (#4383) Optimize response type emitter snapshots (#4397) Skip generated stylesheet metadata for OSS renders (#4395) Avoid mutating render option inputs (#4396) Changelog: document PR 4282 registry cleanup (#4399) # Conflicts: # CHANGELOG.md
* origin/main: Add mechanical parity guards for Ruby↔TS protocol constants (#4412) (#4427) Move Node tsconfigs from @tsconfig/node14 to @tsconfig/node18 (#4410) (#4429) [Pro] Remove unused addressable and rainbow runtime deps from gemspec (#4416) (#4422) Delete finished #3313 Prism Gemfile-rewriter spike (#4421) Extract generator scan/tracking helpers (#4405) (#4430) Extract install_dependency_group helper in JsDependencyManager (#4403) (#4424) Remove obsolete Ruby<2.6 YAML-aliases capability shim (#4417) (#4428) Remove inert config.server_render_method option (#4415) (#4423) Prune stale knip ignores and enforce binaries in CI (#4408) (#4425) Extract shared redux_store kwargs validator (#4402) (#4420) Avoid caching async props prerender streams (#4376) Release incremental render context on setup failure (#4383) Optimize response type emitter snapshots (#4397) Skip generated stylesheet metadata for OSS renders (#4395) Avoid mutating render option inputs (#4396) Changelog: document PR 4282 registry cleanup (#4399) # Conflicts: # react_on_rails_pro/Gemfile.lock # react_on_rails_pro/react_on_rails_pro.gemspec # react_on_rails_pro/spec/dummy/Gemfile.lock
…cache-4317 * origin/main: Drop deprecation-tombstone config options for 17.0.0 (#4419) (#4432) Add mechanical parity guards for Ruby↔TS protocol constants (#4412) (#4427) Move Node tsconfigs from @tsconfig/node14 to @tsconfig/node18 (#4410) (#4429) [Pro] Remove unused addressable and rainbow runtime deps from gemspec (#4416) (#4422) Delete finished #3313 Prism Gemfile-rewriter spike (#4421) Extract generator scan/tracking helpers (#4405) (#4430) Extract install_dependency_group helper in JsDependencyManager (#4403) (#4424) Remove obsolete Ruby<2.6 YAML-aliases capability shim (#4417) (#4428) Remove inert config.server_render_method option (#4415) (#4423) Prune stale knip ignores and enforce binaries in CI (#4408) (#4425) Extract shared redux_store kwargs validator (#4402) (#4420) Avoid caching async props prerender streams (#4376) Release incremental render context on setup failure (#4383) Optimize response type emitter snapshots (#4397) Skip generated stylesheet metadata for OSS renders (#4395) Avoid mutating render option inputs (#4396) Changelog: document PR 4282 registry cleanup (#4399)
…-4364 * origin/main: (24 commits) Preserve streaming LoadError during dependency failures (#4388) Wire eslint-rules RuleTester suite into a runner, CI, and knip (#4409) (#4433) Handle fire-and-forget RSCRoute retry failures (#4378) Fix visible hydration cleanup for detached roots (#4374) Avoid full locale default obsolete scans (#4398) Document RSC public-page validation and sidecar patterns (#4387) Remove dead methods; prune always-false Rails<5.0 spec branches (#4418) (#4431) Drop deprecation-tombstone config options for 17.0.0 (#4419) (#4432) Add mechanical parity guards for Ruby↔TS protocol constants (#4412) (#4427) Move Node tsconfigs from @tsconfig/node14 to @tsconfig/node18 (#4410) (#4429) [Pro] Remove unused addressable and rainbow runtime deps from gemspec (#4416) (#4422) Delete finished #3313 Prism Gemfile-rewriter spike (#4421) Extract generator scan/tracking helpers (#4405) (#4430) Extract install_dependency_group helper in JsDependencyManager (#4403) (#4424) Remove obsolete Ruby<2.6 YAML-aliases capability shim (#4417) (#4428) Remove inert config.server_render_method option (#4415) (#4423) Prune stale knip ignores and enforce binaries in CI (#4408) (#4425) Extract shared redux_store kwargs validator (#4402) (#4420) Avoid caching async props prerender streams (#4376) Release incremental render context on setup failure (#4383) ... # Conflicts: # CHANGELOG.md
Summary
Rationale
Issue #4359 is a release-blocking security/cache-isolation bug: async props can emit user-specific data after the initial render path, so reusing a prerender stream cache entry can replay another request's async content. This PR keeps static prerender stream caching intact but excludes async-props renders from that cache path.
Fixes #4359.
Tests
BUNDLE_GEMFILE=react_on_rails_pro/Gemfile bundle exec rspec react_on_rails_pro/spec/react_on_rails_pro/server_rendering_pool/pro_rendering_spec.rbcd react_on_rails_pro && BUNDLE_GEMFILE=../Gemfile bundle exec rubocop --ignore-parent-exclusionscript/check-pro-license-headerspnpm exec prettier --check CHANGELOG.mdgit diff --check origin/main...HEADcodex review --base origin/main(no findings)Codex Decision Log
async_props_blockis present.Batch A
.agents/agent-workflow.ymland.agents/workflows/pr-processing.mdabsent; used installed PR-processing workflow.qa/batch-a, pending final batch QA.CHANGELOG.md.