forked from shakacode/react_on_rails
-
Notifications
You must be signed in to change notification settings - Fork 0
[pull] master from shakacode:master #128
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
pull
wants to merge
1,287
commits into
stackriot:master
Choose a base branch
from
shakacode:master
base: master
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
fb78ec9 to
b7ea684
Compare
36f25fa to
32d4665
Compare
…1846) Previously, `bin/dev kill` only terminated processes by pattern matching (e.g., "rails", "puma", "webpack-dev-server"). This could miss processes that were holding ports 3000 or 3001 but didn't match the patterns. Now `bin/dev kill` also finds and terminates any process listening on ports 3000 and 3001 using `lsof -ti:PORT`, ensuring a clean restart even when unexpected processes are blocking the development ports. Changes: - Add kill_port_processes(ports) method to find and kill processes on specific ports - Add find_port_pids(port) helper that uses lsof to find PIDs listening on a port - Update kill_processes to call kill_port_processes([3000, 3001]) - Add comprehensive tests for port-killing functionality - Handle edge cases (lsof not found, permission denied) gracefully The port-killing is integrated as default behavior (no --force flag needed) since ports 3000/3001 are explicitly development ports and this matches the existing UX where kill doesn't ask for confirmation.
- Refactored code to move JS Pro-related logic into its own package for better modularity and maintainability. - Updated dependencies and documentation to reflect the new package structure. - Ensured backward compatibility and provided migration instructions where necessary.
* Move Pro Ruby code to MIT license Moved lib/react_on_rails/pro/ code to MIT-licensed locations: - lib/react_on_rails/pro/helper.rb → lib/react_on_rails/pro_helper.rb - lib/react_on_rails/pro/utils.rb → lib/react_on_rails/pro_utils.rb Changes: - Removed Pro license headers from moved files - Changed namespace from ReactOnRails::Pro:: to ReactOnRails:: - Removed Pro warning badge functionality (no longer needed) - Deleted lib/react_on_rails/pro/ directory entirely - Updated LICENSE.md to reflect all lib/react_on_rails/ is MIT - Updated documentation references Benefits: - Ruby signaling code now in MIT gem for marketing visibility - Actual functionality still requires Pro npm package - Clean license boundaries maintained - Users can't bypass Pro features by editing Ruby code * Remove Pro warning badge tests Removed all test contexts for Pro warning badge functionality since the badge feature has been removed from the codebase. Tests removed: - react_component Pro license warning contexts - react_component_hash Pro license warning contexts - redux_store Pro license warning contexts * Revert previous two commits to preserve Pro warning badge * Move Pro Ruby code to MIT license (preserving Pro warning badge) Moved lib/react_on_rails/pro/ code to MIT-licensed locations: - lib/react_on_rails/pro/helper.rb → lib/react_on_rails/pro_helper.rb - lib/react_on_rails/pro/utils.rb → lib/react_on_rails/pro_utils.rb Changes: - Removed Pro license headers from moved files - Changed namespace from ReactOnRails::Pro:: to ReactOnRails:: - PRESERVED Pro warning badge functionality (shows when Pro features used without license) - Deleted lib/react_on_rails/pro/ directory - Updated LICENSE.md to reflect all lib/react_on_rails/ is MIT - Updated documentation references Benefits: - Ruby signaling code now in MIT gem for marketing visibility - Pro warning badge alerts users about Pro features - Actual functionality still requires Pro npm package - Clean license boundaries maintained
* Modernize release process for monorepo - Replace release-it with native Yarn workspace publish commands - Update release rake task to handle both NPM packages (react-on-rails and react-on-rails-pro) - Synchronize versions across gem and both NPM packages - Set react-on-rails-pro to use exact version dependency on react-on-rails - Remove obsolete release scripts from package.json files - Delete packages/react-on-rails/scripts/release - Update documentation with comprehensive release instructions The new release process: 1. Bumps version in lib/react_on_rails/version.rb (source of truth) 2. Updates all 3 package.json files with new version 3. Updates react-on-rails-pro dependency to exact version 4. Commits, tags, and pushes changes 5. Publishes both NPM packages using yarn workspace publish 6. Publishes Ruby gem Benefits: - No external release-it dependency - Both NPM packages properly released - Version sync enforced across all 5 files - Single command releases everything: rake release[X.Y.Z] 🤖 Generated with Claude Code Co-Authored-By: Claude <[email protected]> * Fix syntax error and RuboCop violations in release.rake - Remove extra end statement that was causing syntax error - Fix string concatenation to use interpolation - Fix operator precedence ambiguity - Convert multi-line unless blocks to modifier form - Refactor unless/else to if/else for clarity - Fix line length violation - Eliminate duplicate separator line code All RuboCop violations resolved. File now passes bundle exec rubocop with zero offenses. * Add skip_push option to release task - Add 4th argument 'skip_push' to skip git push operations - Useful for testing the release process locally - Commits and tags are still created, but not pushed to remote - Displays warning message when push is skipped - Update documentation with new parameter and example usage Example: rake release[16.2.0,false,npm,skip_push] 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]> * Add parameter validation for registry and skip_push - Validate registry parameter accepts only: 'verdaccio', 'npm', or empty string - Validate skip_push parameter accepts only: 'skip_push' or empty string - Raise ArgumentError with clear message for invalid values - Prevents silent failures from typos or incorrect usage Examples of errors: rake release[16.2.0,false,foo] → ArgumentError: Invalid registry value 'foo' rake release[16.2.0,false,npm,skip] → ArgumentError: Invalid skip_push value 'skip' 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]> * run bundle on the gem root while releasing * update dependency version of rorp package to 16.1.2 * Revert "update dependency version of rorp package to 16.1.2" This reverts commit 324fb8c. * update dependency version of rorp package to 16.1.1 --------- Co-authored-by: Claude <[email protected]>
Removed links and images for Rails Autoscale and Reviewable.
#1857) * Add offline JWT-based license validation system for React on Rails Pro Implements a pure offline license validation system using JWT tokens signed with RSA-256. No internet connectivity required for validation. Key features: - JWT-based licenses verified with embedded public key (RSA-256) - Offline validation in Ruby gem and Node renderer - Environment variable or config file support - Development-friendly (warnings) vs production (errors) - Zero impact on browser bundle size - Comprehensive test coverage Changes: - Add JWT dependencies (Ruby jwt gem, Node jsonwebtoken) - Create license validation modules for Ruby and Node - Integrate validation into Rails context (rorPro field) - Add license check on Node renderer startup - Update .gitignore for license file - Add comprehensive tests for both Ruby and Node - Create LICENSE_SETUP.md documentation The system validates licenses at: 1. Ruby gem initialization (Rails startup) 2. Node renderer startup 3. Browser relies on server validation (railsContext.rorPro) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]> * Add React on Rails Pro license file to .gitignore in multiple locations * add needed licence rake tasks * Require exp field in license validation * Add tests for required exp field validation * Require valid license in all environments (dev, test, prod) Breaking Change: All environments now require valid licenses * Add license validation on startup for both Rails and Node renderer * Change license field from 'license_type' to 'plan' and add 'issued_by' support * Remove obsolete license key file from the dummy config * Add React on Rails Pro license file to .gitignore and Gemfile.lock * Fix require statement in license validator spec to use spec_helper * update yarn.lock * Fix license validator spec by stubbing Rails.logger and Rails.root * Fix Node.js license validator tests and disable auto-expiration check - Add ignoreExpiration: true to jwt.verify() to match Ruby behavior - Mock process.exit globally in tests to prevent actual exit - Mock console.error and console.log to suppress test output - Update all invalid license tests to check process.exit was called - Simplify file-based license test to use ENV variable - All 9 Node.js tests now passing Changes align Node.js validator with Ruby validator: - Both manually check expiration after disabling auto-check - Both call exit/raise on invalid licenses - Both provide consistent error messages 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]> * Remove react_on_rails_pro_licence_valid? and consolidate to react_on_rails_pro? * Make react_on_rails_pro? actively validate license and remove backward compatibility * Remove redundant 'before: :load_config_initializers' hook from license validation * Rename validation methods to use ! convention for exception-throwing * Update license public key documentation and source URL * Refactor license validation to remove unnecessary conditional logging * Refactor LicensePublicKey module documentation for clarity and consistency * Refactor LicenseValidator to simplify validation logic and remove unnecessary checks * Refactor Node.js license validator from singleton class to functional pattern * Enhance license data structure and improve security in license validation * Refactor validateLicense to void function for clearer API semantics * Enhance public key update task with local URL handling and add usage instructions * Enhance ReactOnRailsHelper spec by mocking additional utility methods for improved test coverage * Enhance pro features context by allowing multiple message stubs for improved test flexibility * Enhance pro features context by adding support for RSC in immediate hydration * fix TS problems * Enhance license validation test by generating a separate key pair for invalid signature scenario * Refactor license claims in JWT to use standard 'iss' identifier and update related tests for improved clarity and consistency * Implement license expiration handling with a 1-month grace period for production environments and update related tests for clarity and coverage * Add license attribution comment and refactor license validation methods for clarity * Refactor license validation methods to use 'validated_license_data!' for improved clarity and consistency * Add tests for react_on_rails_attribution_comment to verify Pro and open source license comments * Add tests for Pro and open source attribution comments in rendered output * Add tests for single attribution comment inclusion in React on Rails Pro and non-Pro scenarios * Refactor license evaluation logic and improve error handling for missing license * Remove unnecessary setup in pro_attribution_comment tests for cleaner context * Stub ReactOnRailsPro::Utils.pro_attribution_comment for consistent test behavior across all contexts * Update tests to expect HTML comments instead of script tags for React components * Stub ReactOnRailsPro::Utils.pro_attribution_comment for consistent test behavior * Update documentation to clarify license usage and add HTML comment attribution for React on Rails * Refactor license validation logic to use getValidatedLicenseData and update tests for consistency * Update grace period message format to use "day(s)" for consistency in attribution comments --------- Co-authored-by: Claude <[email protected]>
Replaces streaming flaky tests at ReactOnRailsPro `integration_spec.rb`, which use hacks to test the streaming behavior using `capybara,` with `Playwright` tests that support streamed page tests without any hacks.
Consolidates Pro package testing on GitHub Actions alongside the main package, creating 3 new workflow files to replace CircleCI configuration. ## Workflows Created - **pro-lint.yml**: RuboCop, ESLint, Prettier, TypeScript checks - **pro-package-tests.yml**: Jest unit tests, RSpec package tests, webpack builds - **pro-integration-tests.yml**: RSpec integration tests, Playwright E2E tests (with Redis)
Migrates React Server Components (RSC) and streaming SSR functionality from the open-source gem to the Pro gem, establishing clear separation between free and commercial features. Changes: - Phase 1: Updated documentation to reflect Pro-only RSC/streaming features - Phase 2: Moved RSC configs to ReactOnRailsPro.configure block - Phase 3: Migrated RSC utility methods to ReactOnRailsPro::Utils - Phase 4: Moved streaming helper methods to ReactOnRailsPro::Helper
Unify release scripts and add strict version validation (#1881) Why - Version mismatches between gem and npm packages caused subtle runtime errors that were difficult to diagnose. - Separate release scripts for Core and Pro packages created maintenance overhead and increased risk of version skew. - Permissive version checking (warnings only) allowed misconfigurations to reach production. Summary This PR consolidates release workflows into a single atomic process with synchronized versioning across all five packages (react-on-rails gem/npm, react-on-rails-pro gem/npm, and node-renderer). It replaces soft warnings with strict fail-fast validation at boot time and request time, enforcing exact version matching and preventing common misconfigurations. Key improvements - Unified release script manages all five packages atomically with single version number, automatic Ruby version switching, and semver bump support - Strict boot-time validation fails fast with actionable errors for missing package.json, conflicting packages, semver wildcards, or version mismatches - Node renderer validates gem version on every request (strict in dev, permissive with warnings in prod) with normalization handling Ruby vs NPM version format differences - Command injection protection via Shellwords escaping and input validation for all package manager commands - Cache size management prevents unbounded memory growth in version comparison - Improved wildcard and x-range detection in semver validation - Dynamic package manager detection provides manager-specific install/remove commands in error messages Breaking changes - Applications now fail to boot (instead of logging warnings) when package.json is misconfigured with wrong versions, missing packages, or semver wildcards. - Users must use exact versions in package.json (no ^, ~, >, <, * operators). - Remote node renderer validates gem version at request time; version mismatches in development now return 412 Precondition Failed (production allows with warning). Migration: Update package.json to use exact versions matching installed gem. Security - Added command injection protection via Shellwords.escape for package names and versions in all package manager command generation. - Input validation enforces npm naming standards for package names and safe semver patterns for versions. - Defense-in-depth: validation before command generation plus escaping. Impact - Existing installs: Boot-time validation will surface any existing misconfigurations immediately with clear remediation steps. Remote node renderer users may see 412 errors in development if versions are mismatched. - New installs: Prevented from launching with incorrect configurations; error messages guide to correct package.json setup. Upgrade/rollback notes Before upgrading: Ensure package.json uses exact versions (e.g., "16.1.1" not "^16.1.1") matching your installed gem version. For Pro users, ensure react-on-rails-pro package matches react_on_rails_pro gem version. To rollback after upgrade: If validation errors block your application, either fix package.json per error message or temporarily rollback gem version until package.json can be corrected. References - PR #1881 - Issue #1876
* Update preinstall script to enable use as a Git dependency * Update changelog and docs --------- Co-authored-by: Alexey Romanov <[email protected]>
Co-authored-by: Alexey Romanov <[email protected]>
* Remove orphaned docs/guides/advanced/README.md This navigation index file was left behind after the reorganization in #1845. The links it contained point to files now in core-concepts/, making this index redundant. Cleanup after PR #1845. * Create introduction.md and remove redundant overview - Add docs/introduction.md as unified homepage - Explains what React on Rails is and why to use it - Clear when to use / when not to use decision guide - Three clear paths: Quick Start, Installation, Tutorial - Built from actual docs (overview, doctrine, system requirements) - Added community stat (thousands of production sites) - Delete docs/core-concepts/react-on-rails-overview.md - Content consolidated into introduction.md - Outdated prerequisites (Rails >=5 vs current Rails 7+) - Creates confusion with two similar entry points - Update links to overview.md: - docs/home.md: Overview → Introduction - docs/misc/doctrine.md: Overview → Introduction Solves Problem 1.2 (Multiple Conflicting Entry Points) from docs improvement plan. Next: Handle remaining entry point files (home.md, README.md, getting-started.md). * Simplify docs/README.md and enhance introduction.md - Simplify docs/README.md for GitHub users: - Direct users to website first - Keep valuable learning paths from PR #1813 - Keep popular use cases table - Add documentation categories overview - Remove duplicate content (now in introduction.md) - Reduced from 173 lines to 65 lines - Enhance introduction.md: - Add missing react_on_rails_demo_ssr_hmr example repo - Now has all 3 example repos (spec/dummy, demo SSR/HMR, live reactrails.com) Purpose: docs/README.md serves GitHub users browsing repo structure, while introduction.md serves as website homepage. Different audiences, minimal duplication. * Update ia-redesign-live.md with Phase 3 progress Document completion of entry point consolidation work: - Created introduction.md - Deleted overview.md - Simplified docs/README.md - Updated folder structure to reflect changes Next: Delete home.md, handle getting-started.md * Delete docs/home.md - replaced by introduction.md - Was the current website homepage (29 lines of links) - All valuable content already in introduction.md or README.md - No unique content lost (example repos, use cases, help links all covered) - Replaced by introduction.md as new website homepage Updated ia-redesign-live.md to reflect completion. Next: Extract content from getting-started.md then delete it. * Transform getting-started.md into understanding-react-on-rails.md Transform docs/getting-started.md (253 lines) into a focused conceptual guide: docs/getting-started/understanding-react-on-rails.md (238 lines). Changes: - Removed redundant sections (Choose Starting Point, System Requirements, More Reading) - Transformed installation section into brief conceptual overview with links - Kept and refined: Basic Usage, Auto-Bundling, Render-Functions, Error Handling - Added clear 'Next Steps' section with organized learning paths - Updated link in quick-start.md to point to new file - Deleted original docs/getting-started.md Purpose: This is now a conceptual journey guide explaining how React on Rails works, complementing the hands-on tutorial and quick-start guides. Addresses user feedback that tutorial was too overwhelming and mixed audiences. Next: Website config updates (keeping for last as requested) * Rename understanding-react-on-rails.md to using-react-on-rails.md Rationale: - "understanding" is vague and confusing next to how-react-on-rails-works.md - "using" clearly indicates practical usage guide - Better distinction: how-react-on-rails-works.md (architecture) vs using-react-on-rails.md (practical usage) Changes: - Renamed docs/getting-started/understanding-react-on-rails.md → using-react-on-rails.md - Updated link in quick-start.md - Updated references in ia-redesign-live.md 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]> * Improve tutorial: extract Heroku deployment, fix versions, reorganize structure Changes to tutorial.md: 1. Replaced Heroku deployment section (139 lines) with brief Deployment section linking to deployment guides 2. Updated versions: Ruby 2.7 → 3.0+, Rails 5.1.3 → 7.0+, RoR v13 → v16 3. Clarified Redux usage: tutorial demonstrates Redux, but basic installer uses Hooks (user choice) 4. Merged duplicate HMR sections into one cohesive section using ./bin/dev 5. Renamed "Other features" → "Going Further" with better organization: - Server Rendering (important) - Optional Configuration subsection (/client structure, Cloud9, RubyMine) Changes to heroku-deployment.md: 1. Merged tutorial's detailed Heroku instructions with existing guide 2. Added note about older versions with link to current Heroku Rails 7 guide 3. Organized into clear sections: Create App, Buildpacks, Postgres, Puma, Node/Yarn, Assets, Deploy Rationale: - Tutorial was overwhelming with platform-specific deployment before core features - Heroku content now in dedicated guide (reusable, maintainable) - Clear separation: tutorial teaches React on Rails, deployment guides teach platforms - Better progression: install → run → features → deploy → advanced 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]> * Delete outdated manual-installation-overview.md Rationale: - File has been outdated since 2018 (had "TODO: Review this file" for 7 years) - Confused purpose: title says "Manual Installation" but subtitle says "summarizes what generator does" - Outdated content: references /client directory, webpacker, missing auto-bundling - No clear use case: rails generate react_on_rails:install IS the manual installation (not external CLI like create-react-app) - Content is better covered in: - how-react-on-rails-works.md (architecture) - using-react-on-rails.md (usage) - Generator source code (what files are created) Changes: - Deleted docs/advanced-topics/manual-installation-overview.md - Removed link in installation-into-an-existing-rails-app.md - Updated ia-redesign-live.md tracker Decision discussed with team in Slack. Can be reverted if use case is identified. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]> * Update IA redesign plan to reflect Phase 3 completion Mark Phase 3 as completed with notes on what actually happened vs what was planned: - ✅ Created introduction.md (as planned) - ✅ Transformed getting-started.md → using-react-on-rails.md (adapted from original plan) - ✅ Simplified README.md (kept, not deleted) - ✅ Deleted home.md (as planned) - ✅ Added tutorial improvements (discovered during work) - ✅ Deleted manual-installation-overview.md (discovered during work) - ✅ Updated cross-references manually (not scripted) Updated testing checklist to show what's complete and what's deferred to Phase 1. * linting * Fix MDX parsing error in quick-start.md Escape <head> tag in prose to prevent MDX from expecting closing tag. Changed "in the <head>:" to "in the `<head>` section:" to use inline code. This fixes gatsby-plugin-mdx compilation error: "Expected a closing tag for <head> before the end of paragraph" * Fix documentation H1 headings for improved search indexing Add missing H1 headings and improve H1 quality across 10 documentation files to enable proper Algolia search indexing and improve accessibility. Critical fixes (missing H1): - configuration.md: Add "React on Rails Configuration Options" - react-on-rails-pro.md: Change H2 to H1 - rails-engine-integration.md: Add "Integrating React on Rails with Rails Engines" - troubleshooting-when-using-webpacker.md: Add H1 and fix structure - troubleshooting-when-using-shakapacker.md: Add H1 and fix heading hierarchy - credits.md: Add "React on Rails Credits and Authors" Quality improvements (better searchability): - images.md: "Images" → "Configuring Images and Assets with Webpack" - foreman-issues.md: "Foreman Issues" → "Troubleshooting Foreman with React on Rails" - updating-dependencies.md: "Updating Dependencies" → "Updating Ruby and JavaScript Dependencies" - api-reference/README.md: "API Reference" → "React on Rails API Reference Guide" Why: Algolia indexes H1 as primary title. Files without H1 show as "Untitled" in search results. Generic H1s reduce searchability. Reference: docs/planning/docs-improvement/h1-headings-audit-report.md (local file, not tracked) * Fix multiple H1 headings in documentation for improved search indexing Continue fixing H1 heading issues by addressing files with multiple H1s. Demoted duplicate H1s to H2 throughout documentation while maintaining proper heading hierarchy (H1→H2→H3→H4). Files changed: - tutorial.md: Demoted 6 H1s (Table of Contents, Installation, HMR, Deployment, Going Further, Conclusion) - rails-engine-integration.md: Changed "Github Issues" H1 to H2 - hmr-and-hot-reloading-with-the-webpack-dev-server.md: Fixed 2 H1s with proper hierarchy - i18n.md: "Notes" H1 to H2 - react-and-redux.md: "Redux Reducers" H1 to H2 - react-router.md: "Server Rendering Using React Router V4" H1 to H2 - rspec-configuration.md: 2 H1s to H2s - generator-details.md: "Understanding the Organization..." H1 to H2 - redux-store-api.md: "More Details" H1 to H2 - view-helpers-api.md: "More details" H1 to H2 - style.md: "Git Usage" H1 to H2 Rationale: Multiple H1s per document confuse Algolia search ranking, screen readers, and violate accessibility standards. Each document should have exactly one H1 as the main title. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]> * Restructure turbolinks.md to clarify Turbo vs legacy Turbolinks Reorganize turbolinks.md content to clearly separate modern Turbo (recommended) from legacy Turbolinks support. All Turbolinks v2 and v5 content is now properly nested under "Legacy Turbolinks Support" section. Key structural changes: - "Using Turbo" section remains at H2 level (modern, recommended approach) - Created "Legacy Turbolinks Support" H2 section with clear deprecation notice - Nested all Turbolinks content as H3-H5 subsections: - Why Turbolinks? (H3) - Requirements and "Why Not" sections (H3) - Installation details with checklists (H3→H4→H5) - Turbolinks 5 Specific Information (H3) - Technical Details and Troubleshooting (H3→H4) Content improvements: - Added explicit support status for Turbolinks 5.x and 2.x - Clarified auto-detection behavior for legacy versions - Moved CSRF/MIME type technical details under proper troubleshooting section - Updated messaging from "may be outdated" to "still supported, migrate when possible" Rationale: Based on codebase investigation (pageLifecycle.ts, turbolinksUtils.ts), Turbo is the recommended navigation system since 2021. All Turbolinks versions are legacy but still supported. Original flat structure mixed modern and legacy content without clear distinction, potentially confusing users about which system to use. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]> * Modernize generator and project structure documentation This commit updates documentation that was 9.5 years outdated, removing references to directory structures and patterns that haven't existed since 2016 and replacing them with accurate modern (2025) guidance. ## Changes to docs/api-reference/generator-details.md - Replace outdated structure description with accurate modern organization - Document both non-Redux and Redux generator structures separately - Add visual directory trees showing actual generated code locations - Document previously undocumented --typescript option - Remove references to non-existent app/lib folder (removed Apr 2016) - Remove incorrect path app/javascript/app/bundles (never existed - was docs typo) - Add auto-bundling explanation with cross-reference - Show real component structure: src/ComponentName/ror_components/ ## Changes to docs/building-features/react-router.md - Update path reference from legacy client/app/bundles to modern src/ structure - Clarify this example applies to --redux generator option - Make path reference generic rather than specific to outdated structure ## Changes to docs/getting-started/project-structure.md Complete rewrite to reflect modern React on Rails: ### Removed outdated content: - Old bundles/ structure presented as current (was 2015-2016 pattern) - "Moving node_modules to /client" section (tested and proven broken with Shakapacker) - References to /client/app/assets directory (generator stopped creating in Apr 2016) - Outdated CSS/assets management discussion ### Added modern content: - Modern auto-bundling structure as recommended approach - Traditional manual structure as legacy option with clear use cases - Decision guide for choosing between approaches - CSS Modules documentation (default in generator since modern versions) - Real code examples from actual generator templates - Rails Asset Pipeline as alternative approach - Advanced global styles pattern ## Historical Context Research revealed: - Oct 2015: Generator created client/app/lib/middlewares/ and client/app/bundles/ - Apr 5, 2016: Docs added describing app/lib folder - Apr 23, 2016: Generator removed these directories (18 days later!) - Apr 2016 - Oct 2025: Docs never updated - outdated for 9.5 years ## Testing Performed Created test app at /home/ihab/ihab/work/shakacode/test/default-structure-test/: - Verified default generator creates src/ structure, not bundles/ - Verified CSS modules co-located with components - Tested /client conversion: works perfectly (just move + config change) - Tested moving node_modules to /client: FAILS with Shakapacker - Confirmed SHAKAPACKER_CONFIG env var doesn't solve the issue 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]> * Update React Router documentation and spec/dummy to v6 This major update modernizes React Router integration from outdated v4/v5 to current v6 API, fixing critical gaps discovered through testing. Documentation Changes (docs/building-features/react-router.md): - Remove 5-year-old "needs updating" warning - Pin React Router to v6 (^6.0.0) with explanation about v7 incompatibility - Add critical "Rails Routes Configuration" section with wildcard routing - Update all code examples to React Router v6 API: * Switch → Routes * component prop → element prop * StaticRouter import from 'react-router-dom/server' - Add path matching guidance (React Router paths must match Rails routes) - Update Turbolinks → Turbo/Turbolinks with Rails version context - Improve clarity: generator doesn't create React Router code - Add installation instructions and compatibility notes spec/dummy Updates (v5→v6 migration): - client/app/routes/routes.jsx: Add Routes wrapper, wildcard path support - client/app/components/RouterLayout.jsx: Switch→Routes, use relative paths - client/app/startup/RouterApp.server.jsx: Update StaticRouter import location - package.json: Upgrade react-router-dom from ^5.2.0 to ^6.0.0 - yarn.lock: Update dependencies (@remix-run/[email protected]) Key Discoveries from Testing: 1. React Router v7 merged with Remix, incompatible with our SSR approach 2. Rails wildcard routing is CRITICAL but was never documented 3. Documentation examples were 9+ years misleading about generator output 4. StaticRouter import location changed in v6 (breaks without this update) Testing: - Created fresh test app following documentation step-by-step - Validated client-side routing, SSR, direct URL visits, browser navigation - Confirmed spec/dummy React Router demo works with v6 API 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]> * Modernize process manager documentation Replace outdated foreman-issues.md with comprehensive process-managers.md guide. Changes: - Create docs/building-features/process-managers.md with modern guidance - Documents both Overmind (recommended) and Foreman - Explains why React on Rails needs multiple processes - Includes authoritative explanation from Foreman's wiki about not bundling - Shows how bin/dev works under the hood - Move docs/building-features/foreman-issues.md to docs/outdated/ - Preserves 2017-era bug reports for historical reference - Removes clutter from main docs (outdated/ filtered from navigation) - Update lib/react_on_rails/dev/process_manager.rb - Change link from our old doc to official Foreman wiki - Users get explanation directly from authoritative source Addresses feedback that foreman-issues.md was outdated and didn't mention modern alternatives like Overmind (which bin/dev actually prefers). * Move outdated code-splitting.md to outdated/ and update references The code-splitting.md file was explicitly marked as "(Outdated)" and directed users to contact [email protected] instead of following it. The modern solution is React on Rails Pro's loadable-components guide. Changes: - Moved docs/building-features/code-splitting.md → docs/outdated/code-splitting.md - Updated API reference to point to Pro loadable-components (appropriate for reference docs) - Removed outdated code-splitting links from beginner guides (quick-start, using-react-on-rails) - Updated planning doc to track the move Rationale: - File content from 2017 for React Router v3/v4 with ExecJS - Uses deprecated patterns (manual renderer functions, webpack v1) - Example uses abandoned react-s3-uploader package - Pro's loadable-components doc (updated Sept 2022) provides modern approach - Uses @loadable/component (React team's official recommendation) - Both docs solve the same problem: code splitting WITH SSR - Outdated doc itself says to contact Justin about loadable-components Decision: Keep Pro feature out of beginner docs to avoid confusion about whether Pro is required. Only mention in API reference where advanced users look for specific features. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]> * Fix broken links to outdated/webpack.md Two user-facing docs were linking to docs/outdated/webpack.md which is excluded from the website, causing 404 errors. Changes: - docs/core-concepts/webpack-configuration.md: Updated to link to Shakapacker's webpack customization docs (most relevant for users customizing webpack) - docs/deployment/troubleshooting-build-errors.md: Updated to link to our own webpack-configuration.md (keeps users in our documentation) Context: webpack.md was moved to outdated/ in commit e08f91d (Oct 3, 2025) because it contained "outdated Webpack v2 content". The file references Webpack v2 patterns and links to a 2017 forum post. These two links were not updated when the file was moved, causing broken references. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]> * Remove outdated documentation folder The docs/outdated/ folder contained deprecated content that was excluded from the website build. This content is preserved in git history and can be accessed through previous commits if needed. Deleted files: - docs/outdated/code-splitting.md - docs/outdated/converting-from-custom-webpack-config-to-rails-webpacker-config.md - docs/outdated/deferred-rendering.md - docs/outdated/foreman-issues.md - docs/outdated/rails-assets-relative-paths.md - docs/outdated/rails-assets.md - docs/outdated/rails3.md - docs/outdated/tips-for-usage-with-sp6.md - docs/outdated/upgrade-webpacker-v3-to-v4.md - docs/outdated/webpack-v1-notes.md - docs/outdated/webpack.md This cleanup follows the recommendation to rely on git history rather than maintaining hidden documentation in the main branch. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]> * Fix failing RSpec test after process manager docs update Updated test expectation to match the new Foreman documentation link. In commit 6cc93c7, we updated lib/react_on_rails/dev/process_manager.rb to link to Foreman's official wiki instead of our outdated foreman-issues.md. The test was still expecting the old link pattern. Change: - Old expectation: /foreman-issues\.md/ - New expectation: /Don't-Bundle-Foreman/ This matches the new error message which now points to: https://github.com/ddollar/foreman/wiki/Don't-Bundle-Foreman Fixes the failing spec: ReactOnRails::Dev::ProcessManager.show_process_manager_installation_help displays helpful error message with installation instructions 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]> * Fix broken markdown links to turbolinks.md Updated two broken links in react-router.md that were pointing to the old location ../rails/turbolinks.md which no longer exists. The turbolinks.md file was moved from docs/rails/ to docs/building-features/ during the PR #1845 documentation reorganization, but these links were not updated at that time. Changes: - ../rails/turbolinks.md → ./turbolinks.md (same directory) This fixes the markdown-link-check CI failure: ERROR: 1 dead link found in docs/building-features/react-router.md ! [✖] ../rails/turbolinks.md → Status: 400 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]> * Enable React Router v7 future flags to silence warnings in tests Added future flags to BrowserRouter in the dummy app to enable v7-compatible behavior and eliminate console warnings that were causing test failures. Changes: - spec/dummy/client/app/startup/RouterApp.client.jsx: Added future prop with v7_startTransition and v7_relativeSplatPath flags Why this fixes the issue: The dummy app integration tests were failing because selenium_logger.rb treats JavaScript console warnings as errors. React Router v6 emits warnings about upcoming v7 changes:⚠️ React Router Future Flag Warning: React Router will begin wrapping state updates in React.startTransition in v7. You can use the v7_startTransition future flag to opt-in early.⚠️ React Router Future Flag Warning: Relative route resolution within Splat routes is changing in v7. You can use the v7_relativeSplatPath future flag to opt-in early. By enabling these flags, we: 1. Silence the warnings 2. Adopt v7-compatible behavior early 3. Demonstrate best practices for React Router v6 users 4. Align with React Router's official migration guide Reference: https://reactrouter.com/upgrading/future Fixes test failures: - React Router when rendering /react_router is expected to have text "Woohoo..." - React Router when rendering /react_router clicking links correctly renders... 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]> * Fix documentation issues identified in PR review Addresses valid issues from Claude's PR review: 1. Fixed JavaScript syntax error in using-react-on-rails.md:192 - Changed semicolon to comma in object destructuring example - Was accidentally introduced during linting commit 2. Clarified Rails version requirements in tutorial.md - Changed "We support Rails 6 and later" to "This tutorial targets Rails 7.0+" - Explicitly noted Rails 6 is supported but tutorial uses Rails 7 - Removed version confusion between prerequisites and tutorial steps 3. Fixed markdownlint issues - Added language hint to code fence in using-react-on-rails.md (text) - Added language hint to Procfile code fence in heroku-deployment.md (procfile) These changes ensure code examples are syntactically correct and version requirements are clear for users following the tutorial. * typo * Remove redundant api-reference/README.md This category index file was an orphaned remnant from PR #1813 that used a different navigation approach with category landing pages. During the IA redesign (PR #1845), similar category index files like guides/advanced/README.md were deleted as "redundant" because docs/README.md now serves as the single navigation hub. The api-reference/README.md survived by accident and is now the only category with such an index file, creating inconsistency. Changes: - Deleted docs/api-reference/README.md (7-line TOC) - Updated docs/README.md reference to point directly to view-helpers-api.md (the main API reference file) - Preserves existing folder-level link on line 50 that points to api-reference/ Rationale: Category folders don't need README indexes when the main docs hub already provides navigation. This matches the pattern established when we deleted guides/advanced/README.md. * fix dead link * another dead link * Update Node.js requirement from 18+/16 to 20+ across documentation Fixes Node version inconsistencies identified by CodeRabbit in PR #1860. Changes: - docs/introduction.md: 18+ → 20+ - docs/getting-started/quick-start.md: 18+ → 20+ - docs/deployment/heroku-deployment.md: 16.19.0 → 20.0.0 Rationale: - React on Rails v16 requires Node 20+ for ESM module support - Node 16 reached EOL in September 2023 - Node 18 reaches EOL in April 2025 - CI currently tests only Node 20 and 22 - Release notes specify Node 20.19.0+ or 22.12.0+ required The tutorial.md (line 7) says "Updated for React on Rails v16" and users following it would use Node 20+, so deployment guide should match to avoid confusion. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]> * Fix broken React Router v6 migration guide link The link was returning 404. Updated from the incorrect path: - /en/main/upgrading/v5 (broken) to the working path: - /docs/en/v6/upgrading/v5 (verified working) This link was added in commit 391281a when updating React Router documentation to v6. The URL structure changed on reactrouter.com. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]> * Fix inconsistent link text in how-to-conditionally-server-render doc Update link display text from 'here in docs/basics/configuration.md' to 'available here' to match the actual URL path (docs/api-reference/configuration/) Co-authored-by: Ihab Adham <[email protected]> * Document Turbo integration and immediate_hydration feature (resolve TODO) Replace TODO from PR #1620 with comprehensive Turbo documentation covering both free (Turbo Frames) and Pro (Turbo Streams) features. Changes: 1. **New "Using Turbo" Section** - Installation steps (turbo-rails gem + @hotwired/turbo-rails package) - Basic configuration (ReactOnRails.setOptions({ turbo: true })) - Turbo Frames usage (free, works out of the box) - Turbo Streams usage (requires immediate_hydration: true - Pro feature) - Complete working example with turbo_frame_tag and turbo_stream.update - Links to v16.0 release notes, streaming docs, and spec/dummy example 2. **Migration Context** - Note about force_load → immediate_hydration rename in v16.0 - Clear distinction between free vs Pro features - Explanation of WHY Turbo Streams need immediate_hydration (they don't dispatch turbo:render events, directly manipulate DOM) 3. **Improved Async Scripts Warning** - Replaced confusing "Do not use immediate_hydration: false" warning - New clear warning: "Async Scripts with Turbolinks Require Pro Feature" - Explains the race condition problem - Provides three alternatives with behavioral descriptions: * defer (waits for full page load before hydration) * Upgrade to Turbo (recommended) * Use Pro for immediate_hydration: true Technical Context: - PR #1620 (Aug 2024) added force_load for Turbo Streams - PR #1781 (Sep 2025) renamed to immediate_hydration + made Pro-only - Feature still actively used (spec/dummy has working example) - Default immediate_hydration: false causes race conditions with async scripts Resolves TODO on line 16 left by Justin in PR #1620 comments. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]> * Remove confusing "(Free)" label from Turbo Basic Setup heading The "(Free)" label in "### Basic Setup (Free)" was confusing because: - Appears before any mention of Pro features - Not used elsewhere in the codebase - Readers don't know what it's contrasting with yet - The Pro callout box later provides sufficient contrast Changed to simply "### Basic Setup" to match patterns used in other docs like streaming-server-rendering.md. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]> * Fix multiple H1 headings in client-vs-server-rendering.md Changed second H1 to H2 for proper document structure: - Line 21: "# Different Server-Side Rendering Code" → "## Different..." Having multiple H1s in a document is problematic for: - SEO (search engines expect one H1 per page) - Accessibility (screen readers use heading hierarchy) - Documentation systems (assume H1 is the page title) - Navigation/table of contents generation The second heading is a subtopic about techniques for having different client/server code, so it should be H2 under the main page topic. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]> --------- Co-authored-by: Claude <[email protected]> Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com> Co-authored-by: Ihab Adham <[email protected]>
…ndle PR (#1889) - Moves `packages/react-on-rails/handleError.ts` to `packages/react-on-rails/src/generateRenderingErrorMessage.ts`. - Move some utility functions from `packages/react-on-rails-pro/src/streamServerRenderedReactComponent.ts` to `packages/react-on-rails-pro/src/streamingUtils.ts`
… 'react-dom/server' in the RSC bundle (#1888) - Moved all utility functions needed by `ReactOnRailsRSC` to separate files, so these files don't include any imports for `react-dom/server` module. - Improved Error handling while generating RSC payload by transferring the erorr to the rails side and logging the error and the stack
…eaks (#1894) ## Key Improvements ### Architecture Changes - **Eliminated global state**: Removed shared Redis clients and global promise maps that caused memory leaks and cross-request contamination - **Lazy initialization**: Stream listening now starts only when getValue() is called, reducing unnecessary connections - **Simplified promise management**: Replaced complex dual-lifecycle promise handling with a simple value map and promise cache - **Single-phase stream reading**: Merged checkExistingMessages() and setupStreamListener() into one listenToStream() function ### Bug Fixes - Fixed memory leaks by using Map.delete() instead of setting undefined - Fixed race conditions in connection handling with proper promise guards - Improved error handling and propagation throughout the module - Fixed lastProcessedId tracking to prevent message loss - Added proper cleanup in destroy() method
Add concurrency tests to ensure there are no memory leakage or deadlocks at react on rails and react on rails pro packages
New developers following the Getting Started guides encounter the "can't find executable foreman" error when running ./bin/dev. This commit adds clear documentation about this prerequisite in both the Quick Start and Using React on Rails guides. Changes: - Add foreman/overmind to Prerequisites section in quick-start.md - Add installation instructions before bin/dev command in quick-start.md - Add note with installation info in using-react-on-rails.md - Include links to detailed installation guides for both tools - Emphasize global installation requirement for foreman This improves the developer onboarding experience by surfacing this requirement before developers encounter errors. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude <[email protected]>
* Add changelog guidelines to CLAUDE.md Following the Shakapacker PR #742 guidelines, this adds comprehensive changelog documentation requirements to CLAUDE.md: - Changelog entries required for user-visible changes only (features, bug fixes, breaking changes, deprecations, performance improvements) - No entries needed for linting, formatting, internal refactoring, tests, or documentation fixes - Format requirements: PR links, author links, consistent formatting - Breaking changes: bold formatting with migration guide links - Version release: update version diff links This ensures consistent, high-quality changelog maintenance across the project. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]> * Fix changelog guidelines: PR format and automation reference Fixes identified in code review: 1. PR link format: Changed from `[PR #123]` to `[PR 1818]` (no hash) - Analysis shows 165 entries without hash vs only 7 with hash - Aligns with actual project standard 2. Added reference to `bundle exec rake update_changelog` - This is the existing automation for updating version headers - Mentioned in CHANGELOG.md line 18 but was missing from guidelines 3. Verified file ends with newline (required per CLAUDE.md) These changes ensure guidelines match actual usage and reference existing automation tools. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]> * Enhance changelog guidelines with comprehensive documentation Following code review recommendations, this adds: 1. **Section header guidance**: Documents both standard keepachangelog.com headers (Added, Changed, Deprecated, Removed, Fixed, Security) and project-specific headers (Breaking Changes, New Features, Bug Fixes, Security Enhancements, API Improvements, etc.) 2. **Complete format examples**: Three real-world examples showing: - Simple entry format - Breaking change with migration guide - Entry with sub-bullets All examples verified against actual CHANGELOG.md patterns 3. **Cross-reference**: Added reference to CHANGELOG.md lines 15-18 for contributor guidelines and keepachangelog.com format 4. **Better organization**: Restructured into subsections (Section Headers, Format Requirements, Entry Format Examples) for easier reference These enhancements make the guidelines actionable and ensure consistent, high-quality changelog entries. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]> * Simplify changelog section to conserve space Reduces the changelog section from ~50 lines to 5 concise bullets: - Consolidates what to include/exclude into one line each - Provides format example inline instead of separate section - References CHANGELOG.md lines 15-18 for full guidelines - Points to existing `bundle exec rake update_changelog` task - Includes grep command to view real formatting examples This saves space while making the guidelines more actionable by pointing developers to existing tools and real examples rather than duplicating information. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]> * Add /update-changelog command for guided changelog updates Adds comprehensive slash command based on Shakapacker's implementation with React on Rails-specific improvements: **New slash command**: `/update-changelog` - Provides guided workflow for adding changelog entries - Ensures correct formatting (no hash in PR numbers) - Validates user-visible vs non-user-visible changes - Handles version boundaries and beta releases - Includes real examples from the codebase - Documents both standard and custom section headers **Improvements over Shakapacker version**: - Updated PR link format (no hash symbol) - Documents all React on Rails custom section headers - References `bundle exec rake update_changelog` for version management - Includes actual examples from CHANGELOG.md - Added grep command for viewing real formatting examples **Updated CLAUDE.md**: - References `/update-changelog` command for guided updates - Separates version management (rake task) from entry creation (command) - Maintains concise 6-bullet format This makes changelog updates consistent and reduces errors by providing an interactive guided process with comprehensive documentation. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]> * Fix update-changelog command: remove redundancy and fix formatting Addresses code review feedback: 1. **Removed redundant section headers**: - "New Features" (redundant with standard "Added") - "Bug Fixes" (redundant with standard "Fixed") - "Security Enhancements" (redundant with standard "Security") - "Code Improvements" (internal, not user-visible) 2. **Added "Improved" to standard headers** (used 9 times in CHANGELOG.md) 3. **Emphasized standard headers**: Updated guidance to prefer standard keepachangelog.com headers and use custom ones sparingly 4. **Fixed broken markdown formatting**: - Corrected triple/quadruple backtick issues in Breaking Change example - Removed nested code blocks that broke rendering - Simplified code examples within the markdown example 5. **Final header list**: - Standard: Added, Changed, Deprecated, Removed, Fixed, Security, Improved - Custom: Breaking Changes, API Improvements, Developer Experience, Generator Improvements, Performance, Pro License Features This reduces confusion and ensures the command guides developers to use consistent, standard headers while keeping legitimate project-specific headers for special cases. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]> --------- Co-authored-by: Claude <[email protected]>
…times (#2211) ## Summary Fixes #2210 - When `reactOnRailsPageLoaded()` is called multiple times (e.g., for asynchronously loaded content), previously rendered client-side components were being re-hydrated, causing hydration mismatch errors in React 19. **Root cause**: The `shouldHydrate` check (`!!domNode.innerHTML`) was true for previously client-rendered components because they already had HTML content. This caused React to try to hydrate content that wasn't server-rendered. **Fix**: Skip rendering for components that are already tracked in the `renderedRoots` Map. This prevents re-hydration of already-rendered components while still allowing new components to be rendered. ## Changes - **packages/react-on-rails/src/ClientRenderer.ts**: Add check to skip already-rendered components in `renderElement()` - **packages/react-on-rails/tests/ClientRenderer.test.ts**: Add unit test for the fix - **react_on_rails/spec/dummy/**: Add test page and E2E Playwright test for the scenario ## Test plan - [x] Unit test passes: Component should not be re-rendered when `renderComponent()` is called twice - [ ] Playwright E2E test: `async_page_loaded_test` page should show no hydration errors when adding components dynamically - [ ] Manual test: Go to `/async_page_loaded_test`, click "Add Component" multiple times, verify no console errors ## Workaround mentioned in issue The user noted that using `reactOnRailsComponentLoaded(domId)` per component works without issues. This fix makes `reactOnRailsPageLoaded()` work correctly as well. 🤖 Generated with [Claude Code](https://claude.com/claude-code) <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Bug Fixes** * Prevented duplicate client renders that caused hydration errors; replaced DOM nodes with the same ID now re-render and hydrate correctly. * **Tests** * Added unit and end-to-end tests covering repeated render calls, node replacement, and hydration behavior; added a runtime test page and manual-render test component. * **Chores** * Migrated JS package commands from Yarn to PNPM across CI and project scripts. <sub>✏️ Tip: You can customize this high-level summary in your review settings.</sub> <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: Claude Opus 4.5 <[email protected]>
### Summary Clarifies the difference between the two changelog update options in the release script: - **Option A (Claude Code)**: Now marked as "(recommended)" with description "analyze commits, write entries, and create a PR" - this does the full job - **Option B (Manual)**: Now clarifies "(headers only, you must write entries)" - the rake task only adds version headers and links, users must still write the actual changelog content This helps users understand that the rake task is a minimal tool while Claude Code provides full changelog automation. ### Pull Request checklist - [x] ~Add/update test to cover these changes~ - [x] ~Update documentation~ - [x] ~Update CHANGELOG file~ _No tests, docs, or changelog needed - this is just clarifying existing release script output._ <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Chores** * Clarified release workflow: Option A — Use Claude Code (recommended) to run /update-changelog and create a PR; Option B — Manual (headers only) requires writing entries and an explicit push step. Updated Unreleased/beta header handling and compare links for the new beta tag. * **Bug Fixes** * Fixed hydration mismatch when the page-load routine runs multiple times (handles DOM node replacement). * **Documentation** * Expanded contributor release guidance with step-by-step changelog processes, stricter entry/link formatting, beta/stable workflows, and templates. <sub>✏️ Tip: You can customize this high-level summary in your review settings.</sub> <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: Claude Opus 4.5 <[email protected]>
## Summary - Fixed malformed markdown code fences in `docs/guides/improved-error-messages.md` - This was causing MDX parsing errors during Gatsby builds on the ShakaCode website ## Problem The markdown file had mismatched code fence delimiters which broke the sc-website Cloudflare Pages build: - Nested erb code block wasn't properly closed before outer fence closed - Stray triple backticks after the first code example - Two code blocks used ```````` to close when opened with ``````` The MDX parser failed with: `Objects are not valid as a React child (found: [object RegExp])` ## Test plan - [ ] Verify markdown renders correctly on GitHub - [ ] Confirm sc-website Cloudflare Pages build succeeds after merge 🤖 Generated with [Claude Code](https://claude.com/claude-code) <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Documentation** * Improved formatting consistency in error message guides for better readability. <sub>✏️ Tip: You can customize this high-level summary in your review settings.</sub> <!-- end of auto-generated comment: release notes by coderabbit.ai --> Co-authored-by: Claude Opus 4.5 <[email protected]>
## Summary Replaces the broken `markdown-link-check` setup with `lychee` for link checking. ## Problem The previous setup using `Wandalen/wretry.action` wrapper with `tcort/markdown-link-check` was **silently failing** due to a Node.js 21 ESM compatibility bug (see #2217). The tool crashed on every file, but the crash message didn't match the error detection pattern, so CI falsely reported "All links are good!" - while actually checking zero links. ## Solution Migrate to [lychee](https://github.com/lycheeverse/lychee), a Rust-based link checker that: - ✅ **Built-in retry for ALL transient errors** (502, 503, 504) - what PR #1899 wanted but couldn't achieve - ✅ **Proper exit codes** (2 = link failures, not relying on string matching) - ✅ **Faster execution** (~12 seconds vs 4+ minutes for 550 links) - ✅ **Result caching** for faster repeated runs - ✅ **No Docker/Node.js compatibility issues** ## Changes - Replace `.github/markdown-link-check-config.json` with `.lychee.toml` - Update workflow to use `lycheeverse/lychee-action@v2` - Add `.lycheecache` to `.gitignore` ## Test Plan - [x] CI link checker workflow runs successfully - [x] lychee correctly identifies broken links (will show ~26 errors from known broken URLs that need separate fixes) ## Note This PR will **fail CI** because it correctly detects ~26 broken links that the previous setup missed. Those links need to be fixed in a separate PR (like #2216). Fixes #2217 🤖 Generated with [Claude Code](https://claude.com/claude-code) <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Chores** * Migrated CI markdown-link checking to Lychee with caching and updated workflow steps. * Removed the previous markdown-link-check configuration and added a new Lychee configuration. * Updated ignore rules to stop tracking Lychee cache artifacts. * **Documentation** * Rewrote and refreshed release notes and migration docs; updated tutorial links and formatting. * Clarified contributing guidance, changelog entry, and project listing content. <sub>✏️ Tip: You can customize this high-level summary in your review settings.</sub> <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: Claude Opus 4.5 <[email protected]> Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com> Co-authored-by: Alexey Romanov <[email protected]>
Updates file paths, command examples, and GitHub URLs throughout the codebase that became outdated after PR #2114 restructured the monorepo. Key changes (38 files): - GitHub blob URLs: lib/react_on_rails/* → react_on_rails/lib/react_on_rails/* - Command examples: cd spec/dummy → cd react_on_rails/spec/dummy - Config files: conductor.json, .stylelintrc.json ignore patterns - Documentation: ~35 files across docs/, root files, .claude/, and Pro docs - Code comments: Updated path references in spec support files All changes are path corrections with no functional modifications. Fixes #2215 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Opus 4.5 <[email protected]>
…55183, CVE-2025-55184, CVE-2025-67779) (#2233) Upgrade React to v19.0.3 and react-on-rails-rsc to v19.0.4 to fix critical security vulnerabilities in React Server Components. ## Security Fixes This merge addresses three critical CVEs: - **CVE-2025-55183 (CVSS 5.3)**: Source code exposure in server function references. The fix overrides toString() methods to return safe placeholders instead of exposing actual source code containing hardcoded secrets. - **CVE-2025-55184 (CVSS 7.5)**: Denial of Service via cyclic promises. Attackers could send malicious payloads with circular promise references causing infinite loops and 100% CPU consumption. - **CVE-2025-67779 (CVSS 7.5)**: DoS incomplete fix variant. Complete fix provided in patched version. ## Changes - React: ^19.0.0 → ^19.0.3 (includes December 11, 2025 security patches) - React-DOM: ^19.0.0 → ^19.0.3 - react-on-rails-rsc: ^19.0.4 (includes PR #12 with react-server-dom-webpack v19.0.3) - Scheduler: 0.25.0 → 0.27.0 (transitive from React) ## Verification - ✓ No vulnerable React versions remain in lock files - ✓ All React Server Components security patches verified - ✓ Non-breaking patch-level React upgrade - ✓ CHANGELOG updated with security details - ✓ Peer dependency range allows ≥19.0.2 (end user responsibility) Closes #2223
…s) (#2229) Fixes all broken links (both local file paths and website URLs) that resulted from the docs reorganization in PR #1845. Key changes (5 files): - Local file paths: 7 fixes across CHANGELOG.md, NEWS.md, README.md, rbs-type-signatures.md - Website URLs: 14 shakacode.com URL fixes across CHANGELOG.md, README.md, javascript-api.md - Link text: Fixed inconsistent link text on CHANGELOG.md line 712 (per CodeRabbit review) All changes are documentation link corrections with no functional modifications. Part of link cleanup tracked in #2232 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Sonnet 4.5 <[email protected]>
Excludes 4 sites with SSL certificate issues from link checking. These are portfolio/sponsor sites in PROJECTS.md and README.md with SSL problems we cannot fix. Excluded sites: - blinkinc.com (SSL certificate expired) - localwise.com (SSL verification failed) - mycfsapp.com (SSL hostname mismatch) - scoutapp.com (SSL hostname mismatch) Closes #2227 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Sonnet 4.5 <[email protected]>
Adds bin/check-links for running the lychee link checker locally with identical behavior to CI. Problem Running lychee directly locally produces different results than CI because: - Local globs like *.md match untracked files that CI never sees - This causes false positives that waste debugging time (e.g., local investigation artifacts) Solution The script uses git ls-files to check only git-tracked, user-facing docs — the same paths CI checks: - docs/**/*.md and docs/*.md - *.md (root level only) - react_on_rails_pro/docs/**/*.md and react_on_rails_pro/docs/*.md - react_on_rails_pro/*.md Features - Matches CI behavior exactly using git ls-files - Lychee installation check with helpful error message - Robust error handling with set -eo pipefail Usage bin/check-links Part of link cleanup tracked in #2232 🤖 Generated with https://claude.com/claude-code
Fix broken file:// links in documentation - CHANGELOG.md: Remove dead link to deleted generator template (skip_display_none deprecated) - Pro CONTRIBUTING.md: Update stale branch reference and file extension Closes #2231 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Opus 4.5 <[email protected]>
## Summary Fixes grammar and spelling errors in `react_on_rails_pro/docs/caching.md`: - "which maybe calling" → "which may be calling" - "componentas" → "components" - "liklihood" → "likelihood" - "THe goal" → "The goal" - "idempotent from based on" → "idempotent based on" - "particulary" → "particularly" Initially identified by CodeRabbit in [PR #2237 review](#2237 (comment)). Additional typos identified by Claude review. 🤖 Generated with [Claude Code](https://claude.com/claude-code) <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Documentation** * Improved clarity and accuracy in caching documentation with corrections to spelling, grammar, punctuation, and formatting. <sub>✏️ Tip: You can customize this high-level summary in your review settings.</sub> <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: Claude Opus 4.5 <[email protected]>
Resolves all 62 link checker errors from issue #2232. ## Fixes - **Workflow badges**: Updated README badges after PR #2020 renamed workflows - **Doc paths**: Fixed broken paths in Pro docs, upgrade guides, and README after docs reorganization - **Dead services**: Replaced Heroku download badge with shields.io, questlab.pro with Wayback archive - **Broken URLs**: Fixed CHANGELOG tag prefixes, Redux repo rename, reactrails.com www subdomain - **Removed**: Outdated 2016 coaching line with dead link ## Exclusions Added lychee exclusions for links that cannot be fixed: - Historical releases never tagged (8.0.7, 10.1.2) - Deleted GitHub accounts (7 contributors) - Private repo, SSL errors, bot-blocking sites, CI timeouts Reorganized .lychee.toml with clear section headers. Resolves #2232
### Summary #2121 missed some changes in scripts and docs. ### Pull Request checklist - [ ] ~Add/update test to cover these changes~ - [x] Update documentation - [ ] ~Update CHANGELOG file~ <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Chores** * Migrated documentation and developer workflows from Yarn to PNPM across install, build, test, lint, publish, workspace, and CI guidance. * Updated examples, checklists, verification steps, and lockfile references to reflect PNPM or package-manager-agnostic instructions. * Removed a legacy optional preinstall orchestration step and aligned scripts and setup guidance with the PNPM workflow. <sub>✏️ Tip: You can customize this high-level summary in your review settings.</sub> <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: Alexey Romanov <[email protected]> Co-authored-by: Claude Opus 4.5 <[email protected]>
## Summary Fixes intermittent CI failures in the `markdown-link-check` job caused by `https://npmjs.com/` returning 403 Forbidden. The existing exclude pattern only matched URLs with `www.`: ``` ^https://www\.npmjs\.(org|com) ``` But `docs/getting-started/tutorial.md` links to `https://npmjs.com/` (without `www`), which wasn't excluded. ## Changes Updated the pattern to make `www.` optional: ``` ^https://(www\.)?npmjs\.(org|com) ``` ## Test plan - [x] Pattern syntax is valid regex - [x] CI `markdown-link-check` job should pass 🤖 Generated with [Claude Code](https://claude.com/claude-code) <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Chores** * Updated configuration to exclude additional npmjs URL variants from link checking. <sub>✏️ Tip: You can customize this high-level summary in your review settings.</sub> <!-- end of auto-generated comment: release notes by coderabbit.ai --> Co-authored-by: Claude Opus 4.5 <[email protected]>
- Add required YAML frontmatter (name, description) to pr-testing-agent.md - Move pr-testing-guide.md to .claude/docs/ (documentation, not an agent) - Replace markdown links with plain file paths per subagent best practices - Add "Additional Context" section pointing to files the agent can read - Update cross-references for new file locations - Remove reference to non-existent code-reviewer agent The agent was originally created as documentation (PR #2109) and later moved to .claude/agents/ (PR #2112) without the required frontmatter. This aligns it with Claude Code subagent specifications. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
…2239) ## Summary - Moved configuration documentation files from `docs/api-reference/` to `docs/configuration/` - Configuration docs are not API reference - they document how to configure React on Rails - Creates a dedicated folder for better organization ## Changes - Moved `configuration.md`, `configuration-pro.md`, `configuration-deprecated.md` to `docs/configuration/` - Updated all internal documentation links (9 files) - Updated generator template references - Updated spec/dummy initializer file references - Updated CHANGELOG reference - Updated docs README to list Configuration as a separate category ## Test plan - [ ] Verify all documentation links work correctly - [ ] Check that the new folder structure renders properly on the documentation website 🤖 Generated with [Claude Code](https://claude.com/claude-code) <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Documentation** * Reorganized Configuration documentation into its own dedicated section, separating it from the API Reference. * Updated all documentation links to reference the new Configuration location. <sub>✏️ Tip: You can customize this high-level summary in your review settings.</sub> <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: Claude Opus 4.5 <[email protected]>
## Summary Adds a custom Claude Code slash command (`/address-review`) that fetches GitHub PR review comments and creates a todo list to address them. ## Features - Accepts full PR URLs or just PR numbers - Supports specific review comments (`#pullrequestreview-...`) - Supports specific issue comments (`#issuecomment-...`) - Creates organized todo list with file paths, line numbers, and reviewer names - Automatically replies to comments after addressing them to close the feedback loop ## Usage ``` /address-review 12345 /address-review https://github.com/org/repo/pull/12345 /address-review https://github.com/org/repo/pull/12345#pullrequestreview-123456789 /address-review https://github.com/org/repo/pull/12345#issuecomment-123456789 ``` 🤖 Generated with [Claude Code](https://claude.com/claude-code) <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Documentation** * Introduced a comprehensive guide for an automated workflow to manage GitHub PR review comments. The workflow converts comments into actionable todo lists with support for multiple PR reference formats, intelligent filtering to exclude non-actionable items, error handling for edge cases, and GitHub API integration for seamless comment management and responses. <sub>✏️ Tip: You can customize this high-level summary in your review settings.</sub> <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: Claude <[email protected]>
After PR #1841 split JS Pro code into a separate package, Pro documentation was not updated. Users following these docs encountered the "Cannot mix react-on-rails (core) with react-on-rails-pro" error. Changes: - Fix 19 incorrect imports across 5 RSC/code-splitting docs - Add client package installation section to installation.md - Add import migration guide to updating.md with troubleshooting - Clarify import requirements in LICENSING_FAQ.md - Fix broken link to RSC tutorial in installation.md - Exclude yourmechanic.com from link checker (blocks bots) Fixes #2249
## Summary Format all 21 Pro documentation files with Prettier and fix documentation issues. ### Changes - **Prettier formatting**: Applied consistent formatting to all Pro docs (first time since monorepo merger in Sept 2025) - **Fixed Prettier bug corruption**: `RENDERER_PORT` was mangled to `RENDERER*PORT` due to [Prettier issue #4362](prettier/prettier#4362) - wrapped in backticks to prevent - **Fixed typos**: "automaticaly" → "automatically", "we you open the noder-renderer" → "when you open the node-renderer" - **Fixed grammar**: "Ruby only" → "Ruby-only" (compound adjective hyphenation) - **Fixed capitalization**: "Github" → "GitHub" - **Removed vague TODO**: Unhelpful `(*TODO: Need to check on this*)` removed from heroku.md ### Files Changed - 21 Pro docs formatted with Prettier - 4 docs with content fixes (bundle-caching.md, heroku.md, profiling-server-side-rendering-code.md, style.md) 🤖 Generated with [Claude Code](https://claude.com/claude-code)
…#2256) Add `main` field to `react-on-rails-pro` and `react-on-rails-pro-node-renderer` package.json files for compatibility with legacy module resolvers. ## Problem ESLint import resolvers like `eslint-import-resolver-node` use the `resolve` npm package, which doesn't support Node.js conditional exports. This caused false positive "Unable to resolve path to module" errors even though imports worked at runtime. ## Solution Add the `main` field pointing to the default export: - `react-on-rails-pro`: `lib/ReactOnRails.full.js` - `react-on-rails-pro-node-renderer`: `lib/ReactOnRailsProNodeRenderer.js` This matches the approach used in the open-source `react-on-rails` package and provides backward compatibility without affecting modern tools that use `exports`. ## Testing - ✅ Clean install passes - ✅ Build succeeds - ✅ yalc publish works - ✅ ESLint import resolver resolves modules correctly Fixes #2255
…ndencies (#2261) Address 58 Dependabot security vulnerabilities in dev/test dependencies. Key fixes: - Ruby: activestorage (critical), rack (5 high CVEs), nokogiri (critical), rexml, puma, net-imap - JS: webpack (critical XSS/cross-realm), webpack-dev-server (source theft), jws/jsonwebtoken (HMAC bypass) Changes: - Pin Rails to ~> 7.1.0 in OS dev Gemfile (stays on 7.1.6, avoids 7.2 breaking changes) - Upgrade webpack-dev-server 4→5 (no security fix in 4.x line) - Update all affected Gemfile.lock and pnpm-lock.yaml files All changes are dev/test dependencies only — production gem code unchanged. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <[email protected]>
#2259) ## Summary Fixes race conditions in `ReactOnRailsPro::Request` connection management: - **Lazy initialization race**: `@connection ||= create_connection` is not atomic - multiple threads could create duplicate connections at startup - **Mutex creation race**: Even `@mutex ||= Mutex.new` has a race, so we use a constant `CONNECTION_MUTEX` instead - **Exception safety**: Create new connection before closing old one ## Solution Uses the **double-checked locking pattern**: ```ruby CONNECTION_MUTEX = Mutex.new def connection conn = @connection return conn if conn # Fast path: lock-free CONNECTION_MUTEX.synchronize do @connection ||= create_connection # Slow path: only once per process end end ``` ### Performance characteristics | Scenario | Behavior | |----------|----------| | Steady state (99.99% of calls) | Lock-free pointer read | | Initialization | Single mutex acquisition per worker | | Reset | Mutex-protected, creates before closing | ## Why this approach? Alternatives considered: - `Concurrent::AtomicReference`: Lock-free but wastes connections at startup (all racing threads create one, N-1 discarded) - `Concurrent::Map`: Equivalent behavior but adds dependency and complexity for a single value The Mutex + double-checked locking is optimal because: - Only 1 connection created at startup (vs N with AtomicReference) - Lock-free after initialization - No external dependencies (`concurrent-ruby` not in gemspec) - Simple and well-understood pattern ## Test plan - [ ] Existing tests pass - [ ] Manual verification in multi-threaded environment Closes #2258 🤖 Generated with [Claude Code](https://claude.com/claude-code) <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Refactor** * Improved internal connection management for more reliable, thread-safe lazy initialization and atomic swaps during concurrent access and resets. * **Tests** * Added concurrency-focused tests to ensure single initialization under race conditions, safe resets while in use, proper replacement/closure of connections, and graceful handling of close errors. <sub>✏️ Tip: You can customize this high-level summary in your review settings.</sub> <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: Claude Opus 4.5 <[email protected]>
### Summary Consolidated the CHANGELOG entries from beta versions into single 16.2.0.rc.0 release sections for both open-source and Pro changelogs. This matches the new release candidate tagged on December 29, 2025. **Open-source CHANGELOG.md:** - Consolidated 16.2.0.beta.19 and 16.2.0.beta.20 into 16.2.0.rc.0 - Added new entries for PRs 2259, 2256, 2261, 2233 **Pro react_on_rails_pro/CHANGELOG.md:** - Renamed v16.2.0.beta.13 section to v16.2.0.rc.0 - Added Legacy Module Resolver Compatibility fix (PR 2256) - Updated version links ### Pull Request checklist - [x] Update CHANGELOG file - ~[ ] Add/update test to cover these changes~ - ~[ ] Update documentation~ ### Other Information New user-visible entries in 16.2.0.rc.0: - **Thread-Safe Connection Management (Pro)** - Fixed race conditions (PR 2259) - **Legacy Module Resolver Compatibility (Pro)** - Added main field for legacy resolvers (PR 2256) - **Development Dependencies Security** - 58 Dependabot vulnerabilities fixed (PR 2261) - **React Server Components CVE Fixes** - Upgraded React to v19.0.3 (PR 2233) --------- Co-authored-by: Claude Haiku 4.5 <[email protected]>
The tag `v16.1.1` does not exist - only `16.1.1` exists (without `v` prefix). PR #2262 accidentally changed `16.1.1` to `v16.1.1` in the compare links when consolidating beta versions into the rc.0 release. Fixes: - CHANGELOG.md: `v16.1.1...v16.2.0.rc.0` → `16.1.1...v16.2.0.rc.0` - react_on_rails_pro/CHANGELOG.md: same fix 🤖 Generated with [Claude Code](https://claude.com/claude-code)
### Summary Security alerts are now enabled, configure Dependabot to only do security upgrades (for now at least). ### Pull Request checklist - [ ] ~Add/update test to cover these changes~ - [ ] ~Update documentation~ - [ ] ~Update CHANGELOG file~ <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Chores** * Enabled weekly, security-only Dependabot updates for npm, Bundler, and GitHub Actions; disabled non-security PRs, set a 3-day cooldown, added grouped security and CI labels, and scoped updates by directory/group. * **Documentation** * Added monorepo merger guidance with configuration update steps, Dependabot configuration examples (pre/post), and a "When to update dependabot" operational section. <sub>✏️ Tip: You can customize this high-level summary in your review settings.</sub> <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: Alexey Romanov <[email protected]>
## Summary - Removes references to `config.license_token` which doesn't exist in the codebase - Replaces with correct config file method (`config/react_on_rails_pro_license.key`) - Adds link to LICENSE_SETUP.md for complete instructions ## Background The `config.license_token` option was incorrectly documented in PR #1901 but was never actually implemented in PR #1857. The LicenseValidator only supports two methods: 1. **Environment variable**: `REACT_ON_RAILS_PRO_LICENSE` 2. **Config file**: `config/react_on_rails_pro_license.key` There is no `license_token` attribute in the `ReactOnRailsPro::Configuration` class. ## Files Changed - `react_on_rails_pro/docs/installation.md` - Fixed license configuration section - `react_on_rails_pro/docs/updating.md` - Fixed license configuration section ## Test Plan - [x] Verified the config file method matches what LICENSE_SETUP.md documents - [x] Verified `config.license_token` does not exist in the codebase 🤖 Generated with [Claude Code](https://claude.com/claude-code) <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Documentation** * License configuration now uses file-based setup instead of environment variables. * New license key file requires .gitignore configuration. * Comprehensive setup guidance available in LICENSE_SETUP.md. <sub>✏️ Tip: You can customize this high-level summary in your review settings.</sub> <!-- end of auto-generated comment: release notes by coderabbit.ai --> Co-authored-by: Claude Opus 4.5 <[email protected]>
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
See Commits and Changes for more details.
Created by
pull[bot]
Can you help keep this open source service alive? 💖 Please sponsor : )