Skip to content

Fix broken links and update badges#2237

Merged
ihabadham merged 17 commits intomasterfrom
ihabadham/link-checker-cleanup
Dec 19, 2025
Merged

Fix broken links and update badges#2237
ihabadham merged 17 commits intomasterfrom
ihabadham/link-checker-cleanup

Conversation

@ihabadham
Copy link
Copy Markdown
Collaborator

@ihabadham ihabadham commented Dec 17, 2025

Summary

  • Update workflow badges in README.md after PR Enhance change detection & workflow triggers #2020 renamed workflows
  • Replace dead Heroku download badge with shields.io equivalent
  • Fix CHANGELOG compare link tag prefixes to match actual git tags
  • Add lychee exclusions for historical issues that can't be fixed

Details

Workflow Badges (README.md)

PR #2020 renamed workflows but didn't update README badges:

  • main.ymlintegration-tests.yml
  • rspec-package-specs.ymlgem-tests.yml

Download Badge (README.md)

ruby-gem-downloads-badge.herokuapp.com died when Heroku removed free tier (Nov 2022). Replaced with shields.io: img.shields.io/gem/dt/react_on_rails

CHANGELOG Tag Prefixes

Fixed compare links to match actual git tags:

  • 16.2.0.beta.19/20v16.2.0.beta.19/20 (tags have v prefix)
  • v2.0.02.0.0 (tag has no v prefix)

Lychee Exclusions

Added exclusions for issues that can't be fixed:

  • Never-tagged releases: 8.0.7 and 10.1.2 had CHANGELOG entries but git tags were forgotten. The work was included in next releases.
  • Deleted GitHub accounts: 7 contributors whose accounts no longer exist
  • Private repo: react_on_rails_pro requires authentication

Related

Test plan

  • CI link checker passes
  • Workflow badges display correctly in README
  • Download badge shows count (~12M)

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Documentation

    • Updated README badges and several documentation links; refreshed changelog link formatting and a migration domain example; clarified upgrade notes and release docs; expanded caching guidance with richer examples and updated cross-references; replaced one external link with an archived version.
  • Chores

    • Expanded exclude patterns to ignore numerous external sites, CI/badge endpoints, deleted/private repo references, SSL/hostname and bot-blocking noise.

✏️ Tip: You can customize this high-level summary in your review settings.

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Dec 17, 2025

Warning

Rate limit exceeded

@ihabadham has exceeded the limit for the number of commits or files that can be reviewed per hour. Please wait 21 minutes and 48 seconds before requesting another review.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

📥 Commits

Reviewing files that changed from the base of the PR and between e3c1a2d and 1cc7368.

📒 Files selected for processing (1)
  • .lychee.toml (1 hunks)

Note

Other AI code review bot(s) detected

CodeRabbit has detected other AI code review bot(s) in this pull request and will avoid duplicating their findings in the review comments. This may lead to a less comprehensive review.

Walkthrough

Expanded .lychee.toml link-checker exclude patterns; updated badges and links in README.md and react_on_rails_pro/README.md; adjusted CHANGELOG/NEWS link formatting and domains; updated several docs links and examples; added richer examples in pro caching docs and replaced one external link with an archived URL.

Changes

Cohort / File(s) Summary
Link-checker excludes
\.lychee\.toml
Added numerous exclude patterns and annotated sections covering badge services, CI timeouts, planned deployments, external sites that block bots/timeout in CI, deleted GitHub accounts, private repos, historical release compare URLs, and SSL/hostname issues. No other config semantics changed.
Changelog / NEWS / README badges
CHANGELOG.md, NEWS.md, README.md
Updated CHANGELOG compare links to use v-prefixed refs in places and adjusted a migration domain reference; swapped/renamed several README badges and simplified a gem-downloads badge query; updated Rspack Support link target.
Upgrade & docs link targets
docs/upgrading/upgrading-react-on-rails.md, react_on_rails_pro/README.md, react_on_rails_pro/docs/home-pro.md
Updated example config/webpacker.yml link; changed pro README badge/workflow target; adjusted "Clearing of Global State" link to API reference.
Pro docs examples & archived link
react_on_rails_pro/docs/caching.md, react_on_rails_pro/docs/release-notes/v4-react-server-components.md
Expanded cache-key guidance with concrete Ruby examples and updated internal doc path; replaced an external release-notes link with a web.archive.org archived URL and made formatting/editorial adjustments.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~10 minutes

  • Focus review on:
    • .lychee.toml: validate regexes/syntax and ensure no needed URLs were unintentionally excluded.
    • README/CI badge URLs and workflow targets for correctness.
    • react_on_rails_pro/docs/caching.md: verify example code accuracy and clarity.

Possibly related issues

  • #2232 — Matches the same categories of exclude additions and broken-link fixes addressed by the .lychee.toml expansion.

Possibly related PRs

  • #2243 — Edits the same react_on_rails_pro/docs/caching.md file (typo fixes vs. expanded examples here).
  • #2048 — Also adjusts CHANGELOG link/version formatting; closely related to the CHANGELOG edits.
  • #2230 — Adds SSL/network-related excludes to .lychee.toml; overlaps with the exclude patterns added here.

Suggested reviewers

  • justin808
  • alexeyr-ci2
  • AbanoubGhadban

Poem

🐰 I hopped through links both old and new,
I nudged the badges and pruned the queue,
Archived a page, gave examples a spin,
Lychee skips the webs that once made us grin,
A tidy warren — cheers from this rabbit crew!

Pre-merge checks and finishing touches

✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The PR title accurately summarizes the main changes: fixing broken links and updating badges, which are the primary objectives evident across all modified files.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@claude
Copy link
Copy Markdown
Contributor

claude Bot commented Dec 17, 2025

Code Review - PR #2237: Fix broken links and update badges

✅ Overall Assessment

This is a well-executed cleanup PR that addresses broken links and outdated badges. The changes are narrowly scoped, well-documented, and address legitimate issues identified by the link checker.


🎯 What's Good

1. Excellent Documentation & Investigation

2. Correct Badge Updates (README.md)

  • ✅ Workflow badge updates correctly reflect PR Enhance change detection & workflow triggers #2020's workflow renames:
    • main.ymlintegration-tests.yml
    • rspec-package-specs.ymlgem-tests.yml
  • ✅ Heroku download badge replacement is appropriate (Heroku free tier ended Nov 2022)
    • Old: ruby-gem-downloads-badge.herokuapp.com (dead service)
    • New: img.shields.io/gem/dt/react_on_rails (reliable, widely-used)

3. Smart Lychee Exclusions (.lychee.toml)

  • Well-commented exclusions with clear justification:
    • Historical releases (8.0.7, 10.1.2) that were never tagged
    • Deleted GitHub user accounts (7 contributors)
    • Private repo (react_on_rails_pro) that requires auth
  • References issue Link checker cleanup: Fix 62 broken links across codebase #2232 for investigation details
  • Regex patterns are precise and won't over-exclude

4. CHANGELOG Tag Prefix Fixes

  • Correctly standardizes compare links to match actual git tags
  • Fixes inconsistencies where some beta versions use v prefix, others don't

⚠️ Observations & Recommendations

1. link-checker-checklist.md Location

Current: Added to repository root
Concern: This is a working document for a specific PR/issue, not permanent project documentation.

Per CLAUDE.md guidelines:

When creating analysis documents (deep dives, investigations, historical context):

  • Location: Place in /analysis directory
  • Format: Use Markdown (.md)
  • Naming: Use descriptive kebab-case names

Recommendation:

  • Move to /analysis/link-checker-cleanup-2232.md
  • Or remove from PR if it's just a working checklist (not needed in git history)
  • Keep only if this will serve as permanent documentation of the cleanup effort

2. CHANGELOG Link Verification

The CHANGELOG changes look correct based on the PR description, but I cannot verify actual git tag existence in this environment. The changes assume:

  • Beta tags v16.2.0.beta.19 and v16.2.0.beta.20 exist with v prefix
  • Tag 2.0.0 exists WITHOUT v prefix (vs v2.0.0)

Recommendation:

  • Verify tag existence before merge: git tag | grep '16.2.0.beta'
  • Ensure compare links actually work in browser
  • Consider adding a comment documenting the tag prefix inconsistency

3. Missing Git Tags (Lychee Exclusions)

The PR excludes comparison links for versions 8.0.7 and 10.1.2 that were "never tagged."

Question: Should these CHANGELOG entries be:

  1. ✅ Kept with exclusions (current approach) - preserves history
  2. 🤔 Removed entirely - they weren't actually released
  3. 📝 Annotated with notes explaining they were rolled into next release

Recommendation: Current approach is fine, but consider adding a brief note in CHANGELOG itself near those versions (e.g., "Note: Version 8.0.7 was documented but never released as a separate tag").


🔍 Code Quality Checklist

  • Best Practices: Well-commented TOML additions, clear regex patterns
  • Potential Bugs: None identified
  • Performance: No performance impact (config files only)
  • Security: No security concerns
  • Test Coverage: Changes are non-code (badges, links, config)
    • ✅ CI link checker should validate this PR
    • ✅ README badges should display correctly

📋 Pre-Merge Checklist

Before merging, please verify:

  1. Workflow badges display correctly

    • Visit README.md on GitHub and confirm all badges load
    • Click badge links to ensure they point to correct workflows
  2. Download badge shows count

    • New shields.io badge displays total downloads (~12M as noted in PR)
  3. CI link checker passes

    • check-markdown-links workflow succeeds
    • Excluded links don't create false positives
  4. CHANGELOG links work

    • Test compare links in browser (especially beta versions)
    • Verify git tags match the v prefix usage
  5. File location (if keeping checklist in repo)

    • Consider moving link-checker-checklist.md/analysis/ per CLAUDE.md

🎓 Convention Notes (per CLAUDE.md)

  • ✅ Changes are documentation/config only - no RuboCop/linting needed
  • ✅ No code changes, so no test requirements
  • ✅ PR description follows project standards with clear summary and test plan

💡 Summary

Approval Status:Approve with minor suggestions

This PR is fundamentally sound and ready to merge after:

  1. Verifying CI passes (especially link checker)
  2. Confirming badges display correctly
  3. Optionally moving checklist to /analysis/ directory

Great work on the thorough investigation and documentation! The categorization of link issues in the checklist is particularly valuable for future maintenance.


🤖 Review generated with Claude Code

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

📜 Review details

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 3ef0ff0 and d6f2869.

📒 Files selected for processing (4)
  • .lychee.toml (1 hunks)
  • CHANGELOG.md (2 hunks)
  • README.md (1 hunks)
  • link-checker-checklist.md (1 hunks)
🧰 Additional context used
📓 Path-based instructions (2)
**/*.{js,jsx,ts,tsx,json,css,scss,md}

📄 CodeRabbit inference engine (CLAUDE.md)

Use Prettier as the sole authority for formatting non-Ruby files

Files:

  • README.md
  • link-checker-checklist.md
  • CHANGELOG.md
CHANGELOG.md

📄 CodeRabbit inference engine (CLAUDE.md)

Update /CHANGELOG.md for open-source features, bug fixes, breaking changes, and performance improvements

Files:

  • CHANGELOG.md
🧠 Learnings (12)
📚 Learning: 2025-12-16T03:39:07.980Z
Learnt from: CR
Repo: shakacode/react_on_rails PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-12-16T03:39:07.980Z
Learning: Exclude directories `/coverage`, `/tmp`, `/gen-examples`, `/packages/react-on-rails/lib`, `/node_modules`, and generated directories from IDE indexing to prevent slowdowns

Applied to files:

  • .lychee.toml
  • README.md
📚 Learning: 2025-12-16T03:39:07.980Z
Learnt from: CR
Repo: shakacode/react_on_rails PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-12-16T03:39:07.980Z
Learning: Applies to lib/react_on_rails/**/*.rb : Validate RBS signatures with `bundle exec rake rbs:validate` and run Steep type checker with `bundle exec rake rbs:steep` for Ruby files

Applied to files:

  • README.md
  • CHANGELOG.md
📚 Learning: 2025-12-16T03:39:07.980Z
Learnt from: CR
Repo: shakacode/react_on_rails PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-12-16T03:39:07.980Z
Learning: Applies to react_on_rails_pro/**/*.{js,ts,jsx,tsx,json,css,scss} : The `react_on_rails_pro/` directory has its own Prettier/ESLint configuration and will be linted separately in CI

Applied to files:

  • README.md
📚 Learning: 2025-02-12T16:38:06.537Z
Learnt from: Romex91
Repo: shakacode/react_on_rails PR: 1697
File: package-scripts.yml:28-28
Timestamp: 2025-02-12T16:38:06.537Z
Learning: The file `node_package/lib/ReactOnRails.full.js` is autogenerated during the build process and should not be present in the repository.

Applied to files:

  • README.md
  • CHANGELOG.md
📚 Learning: 2025-09-16T08:01:11.146Z
Learnt from: justin808
Repo: shakacode/react_on_rails PR: 1770
File: lib/generators/react_on_rails/templates/base/base/app/javascript/src/HelloWorld/ror_components/HelloWorld.client.jsx:2-2
Timestamp: 2025-09-16T08:01:11.146Z
Learning: React on Rails uses webpack CSS Modules configuration with namedExports: true, which requires the import syntax `import * as style from './file.module.css'` rather than the default export pattern. This configuration enables better tree shaking and bundle size optimization for CSS modules.

Applied to files:

  • README.md
  • CHANGELOG.md
📚 Learning: 2025-09-15T21:24:48.207Z
Learnt from: AbanoubGhadban
Repo: shakacode/react_on_rails PR: 1781
File: node_package/src/ClientSideRenderer.ts:82-95
Timestamp: 2025-09-15T21:24:48.207Z
Learning: In React on Rails, the force_load feature includes both explicit `data-force-load="true"` usage and the ability to hydrate components during the page loading state (`document.readyState === 'loading'`). Both capabilities require a Pro license, so the condition `!railsContext.rorPro && (isComponentForceLoaded || document.readyState === 'loading')` correctly gates both scenarios.

Applied to files:

  • README.md
📚 Learning: 2025-12-16T03:39:07.980Z
Learnt from: CR
Repo: shakacode/react_on_rails PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-12-16T03:39:07.980Z
Learning: Applies to lib/react_on_rails/**/*.rb : Add RBS type signatures for new Ruby files in `lib/react_on_rails/` by creating corresponding `.rbs` files in `sig/react_on_rails/`

Applied to files:

  • README.md
  • CHANGELOG.md
📚 Learning: 2025-04-26T21:55:55.874Z
Learnt from: alexeyr-ci2
Repo: shakacode/react_on_rails PR: 1732
File: spec/dummy/client/app-react16/startup/ReduxSharedStoreApp.client.jsx:40-44
Timestamp: 2025-04-26T21:55:55.874Z
Learning: In the react_on_rails project, files under `app-react16` directories are copied/moved to corresponding `/app` directories during the conversion process (removing the `-react16` suffix), which affects their relative import paths at runtime.

Applied to files:

  • README.md
  • CHANGELOG.md
📚 Learning: 2025-12-16T03:39:07.980Z
Learnt from: CR
Repo: shakacode/react_on_rails PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-12-16T03:39:07.980Z
Learning: Applies to packages/react-on-rails/src/**/*.tsx : For React component files, use TypeScript (.tsx extension) and follow the component registry pattern for registration

Applied to files:

  • README.md
📚 Learning: 2025-02-18T13:08:01.477Z
Learnt from: AbanoubGhadban
Repo: shakacode/react_on_rails PR: 1644
File: lib/react_on_rails/helper.rb:190-197
Timestamp: 2025-02-18T13:08:01.477Z
Learning: RSC support validation in React on Rails Pro is handled through a chain of validations:
1. Pro version check in `run_stream_inside_fiber`
2. RSC support check during pack generation via `ReactOnRailsPro.configuration.enable_rsc_support`
3. RSC support validation during component registration
This makes additional validation in the helper methods unnecessary.

Applied to files:

  • README.md
📚 Learning: 2025-12-16T03:39:07.980Z
Learnt from: CR
Repo: shakacode/react_on_rails PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-12-16T03:39:07.980Z
Learning: Applies to CHANGELOG.md : Update `/CHANGELOG.md` for open-source features, bug fixes, breaking changes, and performance improvements

Applied to files:

  • CHANGELOG.md
📚 Learning: 2025-12-16T03:39:07.980Z
Learnt from: CR
Repo: shakacode/react_on_rails PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-12-16T03:39:07.980Z
Learning: Applies to CHANGELOG_PRO.md : Update `/CHANGELOG_PRO.md` for Pro-only features, bug fixes, and performance improvements

Applied to files:

  • CHANGELOG.md
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (10)
  • GitHub Check: dummy-app-integration-tests (3.4, 22, latest)
  • GitHub Check: examples (3.4, latest)
  • GitHub Check: build-dummy-app-webpack-test-bundles
  • GitHub Check: rspec-package-tests (3.4, latest)
  • GitHub Check: pro-lint-js-and-ruby
  • GitHub Check: build-dummy-app-webpack-test-bundles
  • GitHub Check: build
  • GitHub Check: precompile-check
  • GitHub Check: markdown-link-check
  • GitHub Check: claude-review
🔇 Additional comments (2)
.lychee.toml (1)

48-62: LGTM! Well-documented exclusions.

The three categories of exclusions are appropriate:

  • Historical untagged releases prevent false positives for versions documented in CHANGELOG but never tagged
  • Deleted GitHub user accounts prevent 404 errors for contributors whose accounts no longer exist
  • Private repo exclusion prevents authentication failures

The regex patterns are properly escaped and the inline comments clearly explain the purpose of each exclusion.

README.md (1)

12-16: LGTM! Badge updates align with workflow renames.

The badge updates correctly reflect:

  • Workflow renames from PR #2020 (main.yml → integration-tests.yml, rspec-package-specs.yml → gem-tests.yml)
  • Switch to shields.io for gem downloads badge after Heroku free tier shutdown

All URLs are correctly formatted and point to the appropriate GitHub Actions workflows.

Comment thread CHANGELOG.md
Comment thread CHANGELOG.md
Comment thread link-checker-checklist.md Outdated
@claude
Copy link
Copy Markdown
Contributor

claude Bot commented Dec 17, 2025

Code Review: Fix broken links and update badges

Overall Assessment

Excellent PR - Well-documented, focused scope, and addresses legitimate maintenance issues. The changes are appropriate and follow best practices for link validation exclusions.


Strengths

  1. Comprehensive Documentation: The PR description and new link-checker-checklist.md provide excellent traceability and context for all changes
  2. Proper Categorization: Issues are logically grouped (deleted users, missing tags, workflow badges, etc.)
  3. Appropriate Use of Exclusions: Using .lychee.toml exclusions for unfixable issues (deleted GitHub accounts, never-tagged releases) is the correct approach
  4. Historical Context: Well-researched explanations for why certain releases (8.0.7, 10.1.2) were never tagged

Code Quality & Best Practices

✅ .lychee.toml

✅ CHANGELOG.md

  • Good: Tag prefix fixes align with actual git tag conventions
  • Note: The changes assume the following tag naming conventions:
    • Beta versions: v16.2.0.beta.19, v16.2.0.beta.20 (with v prefix)
    • Version 2.0.0: 2.0.0 (without v prefix)
    • Version 2.0.1: v2.0.1 (with v prefix)

Recommendation: Verify these tag names exist in the repository before merging:

# Verify the beta tags exist
gh api repos/shakacode/react_on_rails/git/refs/tags/v16.2.0.beta.19 --jq '.ref'
gh api repos/shakacode/react_on_rails/git/refs/tags/v16.2.0.beta.20 --jq '.ref'

# Verify the 2.0.x tags
gh api repos/shakacode/react_on_rails/git/refs/tags/2.0.0 --jq '.ref'
gh api repos/shakacode/react_on_rails/git/refs/tags/v2.0.1 --jq '.ref'

✅ README.md

  • Good: Workflow badge updates correctly reflect renamed workflows from PR Enhance change detection & workflow triggers #2020
  • Good: Replacing dead Heroku badge with shields.io equivalent
  • Verify: The new shields.io badge should show ~12M downloads as mentioned in test plan

✅ link-checker-checklist.md

  • Excellent: Comprehensive tracking document
  • Good: Clear status indicators and progress tracking
  • Good: Links to related PRs for context

Potential Issues

1. Tag Name Verification (Medium Priority)

The CHANGELOG changes assume specific tag naming conventions. If these tags don't exist with the exact names used, the compare links will still be broken.

Action: Run the verification commands above to confirm tag names before merging.

2. Inconsistent Tag Naming Pattern

The changes reveal inconsistent tag naming across versions:

  • Some versions use v prefix: v16.2.0.beta.19
  • Others don't: 2.0.0
  • This inconsistency can cause confusion

Suggestion: Consider documenting the tag naming convention or standardizing it going forward.

3. Missing Pro Badge Update

The checklist shows:

pro-package-tests.yml/badge.svg | react_on_rails_pro/README.md | → pro-test-package-and-gem.yml

This appears to be unchecked and not included in this PR.

Question: Is this intentional (separate PR) or an oversight?


Security Considerations

✅ No security concerns - this PR only updates documentation, badges, and link checker configuration.


Performance Considerations

✅ No performance impact - documentation and configuration changes only.


Test Coverage

The PR mentions:

  • CI link checker passes
  • Workflow badges display correctly in README
  • Download badge shows count (~12M)

Recommendation: Verify all three items before merging, especially:

  1. Wait for the markdown-link-check workflow to complete
  2. Visually inspect the badges on the PR preview
  3. Confirm the shields.io badge loads and shows the correct download count

Suggestions

  1. Add verification step to PR checklist: Include commands to verify git tag names exist
  2. Document tag naming convention: Add a note to CONTRIBUTING.md or CLAUDE.md about the project's tag naming convention
  3. Consider automation: The tag prefix mismatches could be caught with a CI job that validates CHANGELOG links

Final Recommendation

Approve with minor verification

This PR is well-researched and properly addresses legitimate link checker failures. Before merging:

  1. Verify the git tags exist with the exact names used in CHANGELOG.md
  2. Wait for CI link checker to pass
  3. Confirm badges render correctly

Great work on the thorough investigation and documentation! The link-checker-checklist.md is particularly helpful for tracking progress on this cleanup effort.

🤖 Generated with Claude Code

@coderabbitai coderabbitai Bot added the bug label Dec 17, 2025
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

📜 Review details

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between fea4908 and 8e4d761.

📒 Files selected for processing (2)
  • README.md (2 hunks)
  • link-checker-checklist.md (1 hunks)
🧰 Additional context used
📓 Path-based instructions (1)
**/*.{js,jsx,ts,tsx,json,css,scss,md}

📄 CodeRabbit inference engine (CLAUDE.md)

Use Prettier as the sole authority for formatting non-Ruby files

Files:

  • link-checker-checklist.md
  • README.md
🧠 Learnings (12)
📚 Learning: 2025-12-16T03:39:07.980Z
Learnt from: CR
Repo: shakacode/react_on_rails PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-12-16T03:39:07.980Z
Learning: Applies to lib/react_on_rails/**/*.rb : Validate RBS signatures with `bundle exec rake rbs:validate` and run Steep type checker with `bundle exec rake rbs:steep` for Ruby files

Applied to files:

  • README.md
📚 Learning: 2025-12-16T03:39:07.980Z
Learnt from: CR
Repo: shakacode/react_on_rails PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-12-16T03:39:07.980Z
Learning: Applies to react_on_rails_pro/**/*.{js,ts,jsx,tsx,json,css,scss} : The `react_on_rails_pro/` directory has its own Prettier/ESLint configuration and will be linted separately in CI

Applied to files:

  • README.md
📚 Learning: 2025-02-12T16:38:06.537Z
Learnt from: Romex91
Repo: shakacode/react_on_rails PR: 1697
File: package-scripts.yml:28-28
Timestamp: 2025-02-12T16:38:06.537Z
Learning: The file `node_package/lib/ReactOnRails.full.js` is autogenerated during the build process and should not be present in the repository.

Applied to files:

  • README.md
📚 Learning: 2025-09-16T08:01:11.146Z
Learnt from: justin808
Repo: shakacode/react_on_rails PR: 1770
File: lib/generators/react_on_rails/templates/base/base/app/javascript/src/HelloWorld/ror_components/HelloWorld.client.jsx:2-2
Timestamp: 2025-09-16T08:01:11.146Z
Learning: React on Rails uses webpack CSS Modules configuration with namedExports: true, which requires the import syntax `import * as style from './file.module.css'` rather than the default export pattern. This configuration enables better tree shaking and bundle size optimization for CSS modules.

Applied to files:

  • README.md
📚 Learning: 2025-09-15T21:24:48.207Z
Learnt from: AbanoubGhadban
Repo: shakacode/react_on_rails PR: 1781
File: node_package/src/ClientSideRenderer.ts:82-95
Timestamp: 2025-09-15T21:24:48.207Z
Learning: In React on Rails, the force_load feature includes both explicit `data-force-load="true"` usage and the ability to hydrate components during the page loading state (`document.readyState === 'loading'`). Both capabilities require a Pro license, so the condition `!railsContext.rorPro && (isComponentForceLoaded || document.readyState === 'loading')` correctly gates both scenarios.

Applied to files:

  • README.md
📚 Learning: 2025-12-16T03:39:07.980Z
Learnt from: CR
Repo: shakacode/react_on_rails PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-12-16T03:39:07.980Z
Learning: Applies to lib/react_on_rails/**/*.rb : Add RBS type signatures for new Ruby files in `lib/react_on_rails/` by creating corresponding `.rbs` files in `sig/react_on_rails/`

Applied to files:

  • README.md
📚 Learning: 2025-04-26T21:55:55.874Z
Learnt from: alexeyr-ci2
Repo: shakacode/react_on_rails PR: 1732
File: spec/dummy/client/app-react16/startup/ReduxSharedStoreApp.client.jsx:40-44
Timestamp: 2025-04-26T21:55:55.874Z
Learning: In the react_on_rails project, files under `app-react16` directories are copied/moved to corresponding `/app` directories during the conversion process (removing the `-react16` suffix), which affects their relative import paths at runtime.

Applied to files:

  • README.md
📚 Learning: 2025-12-16T03:39:07.980Z
Learnt from: CR
Repo: shakacode/react_on_rails PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-12-16T03:39:07.980Z
Learning: Applies to packages/react-on-rails/src/**/*.tsx : For React component files, use TypeScript (.tsx extension) and follow the component registry pattern for registration

Applied to files:

  • README.md
📚 Learning: 2025-02-18T13:08:01.477Z
Learnt from: AbanoubGhadban
Repo: shakacode/react_on_rails PR: 1644
File: lib/react_on_rails/helper.rb:190-197
Timestamp: 2025-02-18T13:08:01.477Z
Learning: RSC support validation in React on Rails Pro is handled through a chain of validations:
1. Pro version check in `run_stream_inside_fiber`
2. RSC support check during pack generation via `ReactOnRailsPro.configuration.enable_rsc_support`
3. RSC support validation during component registration
This makes additional validation in the helper methods unnecessary.

Applied to files:

  • README.md
📚 Learning: 2025-10-23T17:22:01.074Z
Learnt from: AbanoubGhadban
Repo: shakacode/react_on_rails PR: 1875
File: lib/react_on_rails/utils.rb:112-124
Timestamp: 2025-10-23T17:22:01.074Z
Learning: In React on Rails, when Pro is installed but not licensed, the intended behavior is to raise an error on boot. The `react_on_rails_pro?` method validates licenses and should raise errors early (including during path resolution in methods like `server_bundle?`) to enforce licensing requirements rather than failing later with obscure errors.

Applied to files:

  • README.md
📚 Learning: 2025-02-18T13:08:01.477Z
Learnt from: AbanoubGhadban
Repo: shakacode/react_on_rails PR: 1644
File: lib/react_on_rails/helper.rb:190-197
Timestamp: 2025-02-18T13:08:01.477Z
Learning: RSC support validation is handled in deeper level calls of the React on Rails Pro codebase, so it doesn't need to be validated again in the `rsc_payload_react_component` helper method.

Applied to files:

  • README.md
📚 Learning: 2025-07-08T05:57:29.630Z
Learnt from: AbanoubGhadban
Repo: shakacode/react_on_rails PR: 1745
File: node_package/src/RSCRequestTracker.ts:8-14
Timestamp: 2025-07-08T05:57:29.630Z
Learning: The global `generateRSCPayload` function in React on Rails Pro (RORP) is provided by the framework during rendering requests, not implemented in application code. The `declare global` statements are used to document the expected interface that RORP will inject at runtime.

Applied to files:

  • README.md
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (10)
  • GitHub Check: build-dummy-app-webpack-test-bundles (3.4, 22, latest)
  • GitHub Check: rspec-package-tests (3.4, latest)
  • GitHub Check: examples (3.4, latest)
  • GitHub Check: build-dummy-app-webpack-test-bundles
  • GitHub Check: precompile-check
  • GitHub Check: pro-lint-js-and-ruby
  • GitHub Check: build
  • GitHub Check: build-dummy-app-webpack-test-bundles
  • GitHub Check: markdown-link-check
  • GitHub Check: claude-review
🔇 Additional comments (3)
README.md (3)

12-12: Approve badge consolidation and Gem Downloads replacement.

The consolidation of status badges and replacement of the deprecated Heroku gem download badge with shields.io's gem/dt endpoint is correct. The badge URL structure follows shields.io conventions, and removing the type=total query parameter doesn't impact functionality.


151-151: LGTM on i18n line formatting.

The internationalization line formatting is correct and maintains proper Markdown table structure.


14-16: Workflow files are correctly configured.

All referenced workflow files exist in .github/workflows/ with the correct names: integration-tests.yml, gem-tests.yml, and package-js-tests.yml.

Comment thread link-checker-checklist.md Outdated
@ihabadham ihabadham force-pushed the ihabadham/link-checker-cleanup branch from 8e4d761 to 6f1bdaa Compare December 17, 2025 04:45
@claude
Copy link
Copy Markdown
Contributor

claude Bot commented Dec 17, 2025

Code Review - PR #2237: Fix broken links and update badges

✅ Overall Assessment

This is a well-executed maintenance PR that addresses link checker failures and outdated badges. The changes are focused, well-documented, and follow the repository's conventions.


🎯 Strengths

  1. Excellent Documentation: The link-checker-checklist.md is exceptional - it clearly categorizes errors, distinguishes between actual failures and false positives, and provides context for each decision.

  2. Systematic Approach: The PR methodically addresses link issues:

    • Historical git tags that were never created (8.0.7, 10.1.2)
    • Deleted GitHub user accounts
    • Private repo exclusions
    • Badge updates to match renamed workflows
  3. Well-Researched Fixes: The CHANGELOG.md tag prefix corrections demonstrate careful investigation of actual git tag naming conventions (mixing v prefix and no prefix).

  4. Comprehensive Context: The PR description and checklist provide clear rationale for why certain links can't be fixed (e.g., historical releases, deleted accounts).


📋 Code Quality

✅ .lychee.toml changes:

  • Well-organized exclusions with clear comments
  • Good use of regex patterns for efficiency
  • Appropriate grouping (historical releases, deleted accounts, private repos)

✅ CHANGELOG.md changes:

  • Correctly identifies inconsistent tag prefix usage
  • Fixes compare links to match actual git tags
  • Changes are minimal and focused

✅ README.md changes:

  • Badge updates match actual workflow filenames
  • Dead Heroku badge replacement is sensible (shields.io is standard)
  • No functional changes, only cosmetic fixes

✅ link-checker-checklist.md:

  • Excellent tracking document
  • Clear categorization and status tracking
  • Will help with follow-up work

🔍 Observations & Suggestions

1. Verification of Tag Prefixes (Minor)

The CHANGELOG changes assume certain tags have v prefixes while others don't. While this appears correct based on the investigation, it would be ideal to verify a few key tags:

# Verify these tags exist as expected:
git ls-remote --tags origin | grep -E "(16\.2\.0\.beta\.(19|20)|2\.0\.[012])"

The changes look correct, but explicit verification would add confidence.

2. link-checker-checklist.md Location (Question)

Per CLAUDE.md guidelines, analysis documents should go in /analysis/ directory. Consider:

mv link-checker-checklist.md analysis/link-checker-cleanup-2237.md

This is a tracking document for ongoing work, so it could reasonably stay at root temporarily, but eventually should move to /analysis/ if it's primarily historical context.

3. Follow-up PR Tracking (Suggestion)

The checklist mentions 16 remaining CI errors and references pending PRs (#2236, #2238). Consider:

  • Opening GitHub issues for the remaining errors if they're not already tracked
  • Linking those issues in the checklist
  • This ensures nothing gets lost if the checklist file is eventually removed

4. Badge.fury.io Exclusion (Minor)

The checklist notes that badge.fury.io/js/react-on-rails returns 403 and should be excluded. However, the .lychee.toml doesn't include this exclusion yet. Was this intentional (to fix in a follow-up), or should it be added?


🔒 Security Considerations

✅ No security concerns. The changes are documentation-only.


⚡ Performance Considerations

✅ No performance impact. Changes only affect:

  • Link checker configuration (reduces false positives)
  • Static badges and documentation

🧪 Test Coverage

Verification checklist from PR description:

  • CI link checker passes - Should verify this after merge
  • Workflow badges display correctly in README - Can verify visually on GitHub
  • Download badge shows count (~12M) - Can verify on rubygems.org

Recommendation: Before merging, confirm that the link checker CI passes with these exclusions.


📝 Adherence to Repository Guidelines

Follows CLAUDE.md requirements:

  • Changes are documentation-only, so no RuboCop/Prettier needed
  • No code changes, so no testing required
  • Changelog not updated (correctly - this is a docs-only change per guidelines)

Note: Per CLAUDE.md, changelog should only be updated for user-visible changes. Link checker fixes and badge updates are internal/cosmetic, so correctly omitted.


🎨 Minor Nitpicks

  1. Trailing whitespace in link-checker-checklist.md: Line 8 has trailing dashes - not critical but could clean up:

    ---
  2. Consistency in exclusion comments: Most exclusions have explanatory comments, which is great. The pattern is consistent.


✅ Recommendation

APPROVE with minor follow-up suggestions

This PR is ready to merge. The suggested improvements are minor and can be addressed in follow-up PRs if needed:

  1. Verify the badge.fury.io exclusion is handled
  2. Consider moving checklist to /analysis/ once work is complete
  3. Ensure CI link checker passes before merging

Great work on systematically cleaning up the link checker errors! 🎉


Related PRs to watch:

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

♻️ Duplicate comments (3)
CHANGELOG.md (2)

1873-1875: LGTM! Beta version compare links correctly use v prefix.

These changes correctly add the v prefix to match the actual git tag names. As confirmed in previous review validation, the beta versions (v16.2.0.beta.19 and v16.2.0.beta.20) exist with the v prefix in the repository tags.


2017-2018: LGTM! Compare links correctly match actual git tag naming.

These changes correctly reflect the actual git tag names in the repository. As confirmed in previous review validation:

  • Tag 2.0.0 exists WITHOUT v prefix
  • Tags v2.0.1 and v1.2.2 exist WITH v prefix

The compare links now accurately reference the actual tags.

link-checker-checklist.md (1)

1-101: 🚫 Remove this temporary tracking file before merging.

As noted in previous reviews and the PR objectives, this checklist is a temporary tracking document that should not be merged into the repository.

Action required: Delete this file from the commit before merging.

To remove the file:

git rm link-checker-checklist.md
git commit -m "Remove temporary tracking checklist"

Suggested alternatives for preserving the content:

  • Post as a comment on issue #2232 for tracking reference
  • Keep locally in your working directory
  • Use GitHub Projects or Issues to track remaining remediation work
📜 Review details

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 8e4d761 and 3c1ccc1.

📒 Files selected for processing (8)
  • .lychee.toml (1 hunks)
  • CHANGELOG.md (2 hunks)
  • README.md (3 hunks)
  • docs/upgrading/upgrading-react-on-rails.md (1 hunks)
  • link-checker-checklist.md (1 hunks)
  • react_on_rails_pro/README.md (1 hunks)
  • react_on_rails_pro/docs/caching.md (12 hunks)
  • react_on_rails_pro/docs/home-pro.md (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • README.md
🧰 Additional context used
📓 Path-based instructions (2)
**/*.{js,jsx,ts,tsx,json,css,scss,md}

📄 CodeRabbit inference engine (CLAUDE.md)

Use Prettier as the sole authority for formatting non-Ruby files

Files:

  • link-checker-checklist.md
  • react_on_rails_pro/docs/home-pro.md
  • react_on_rails_pro/README.md
  • docs/upgrading/upgrading-react-on-rails.md
  • CHANGELOG.md
  • react_on_rails_pro/docs/caching.md
CHANGELOG.md

📄 CodeRabbit inference engine (CLAUDE.md)

Update /CHANGELOG.md for open-source features, bug fixes, breaking changes, and performance improvements

Files:

  • CHANGELOG.md
🧠 Learnings (14)
📚 Learning: 2025-12-16T03:39:07.980Z
Learnt from: CR
Repo: shakacode/react_on_rails PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-12-16T03:39:07.980Z
Learning: Exclude directories `/coverage`, `/tmp`, `/gen-examples`, `/packages/react-on-rails/lib`, `/node_modules`, and generated directories from IDE indexing to prevent slowdowns

Applied to files:

  • .lychee.toml
  • docs/upgrading/upgrading-react-on-rails.md
📚 Learning: 2025-12-16T03:39:07.980Z
Learnt from: CR
Repo: shakacode/react_on_rails PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-12-16T03:39:07.980Z
Learning: Applies to react_on_rails_pro/**/*.{js,ts,jsx,tsx,json,css,scss} : The `react_on_rails_pro/` directory has its own Prettier/ESLint configuration and will be linted separately in CI

Applied to files:

  • react_on_rails_pro/docs/home-pro.md
  • react_on_rails_pro/README.md
  • docs/upgrading/upgrading-react-on-rails.md
  • react_on_rails_pro/docs/caching.md
📚 Learning: 2025-04-26T21:55:55.874Z
Learnt from: alexeyr-ci2
Repo: shakacode/react_on_rails PR: 1732
File: spec/dummy/client/app-react16/startup/ReduxSharedStoreApp.client.jsx:40-44
Timestamp: 2025-04-26T21:55:55.874Z
Learning: In the react_on_rails project, files under `app-react16` directories are copied/moved to corresponding `/app` directories during the conversion process (removing the `-react16` suffix), which affects their relative import paths at runtime.

Applied to files:

  • react_on_rails_pro/docs/home-pro.md
  • docs/upgrading/upgrading-react-on-rails.md
  • CHANGELOG.md
  • react_on_rails_pro/docs/caching.md
📚 Learning: 2025-12-16T03:39:07.980Z
Learnt from: CR
Repo: shakacode/react_on_rails PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-12-16T03:39:07.980Z
Learning: Applies to CHANGELOG_PRO.md : Update `/CHANGELOG_PRO.md` for Pro-only features, bug fixes, and performance improvements

Applied to files:

  • react_on_rails_pro/README.md
  • CHANGELOG.md
📚 Learning: 2025-10-23T17:22:01.074Z
Learnt from: AbanoubGhadban
Repo: shakacode/react_on_rails PR: 1875
File: lib/react_on_rails/utils.rb:112-124
Timestamp: 2025-10-23T17:22:01.074Z
Learning: In React on Rails, when Pro is installed but not licensed, the intended behavior is to raise an error on boot. The `react_on_rails_pro?` method validates licenses and should raise errors early (including during path resolution in methods like `server_bundle?`) to enforce licensing requirements rather than failing later with obscure errors.

Applied to files:

  • react_on_rails_pro/README.md
📚 Learning: 2025-12-16T03:39:07.980Z
Learnt from: CR
Repo: shakacode/react_on_rails PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-12-16T03:39:07.980Z
Learning: Applies to lib/react_on_rails/**/*.rb : Validate RBS signatures with `bundle exec rake rbs:validate` and run Steep type checker with `bundle exec rake rbs:steep` for Ruby files

Applied to files:

  • react_on_rails_pro/README.md
  • docs/upgrading/upgrading-react-on-rails.md
  • CHANGELOG.md
📚 Learning: 2025-09-16T08:01:11.146Z
Learnt from: justin808
Repo: shakacode/react_on_rails PR: 1770
File: lib/generators/react_on_rails/templates/base/base/app/javascript/src/HelloWorld/ror_components/HelloWorld.client.jsx:2-2
Timestamp: 2025-09-16T08:01:11.146Z
Learning: React on Rails uses webpack CSS Modules configuration with namedExports: true, which requires the import syntax `import * as style from './file.module.css'` rather than the default export pattern. This configuration enables better tree shaking and bundle size optimization for CSS modules.

Applied to files:

  • docs/upgrading/upgrading-react-on-rails.md
  • react_on_rails_pro/docs/caching.md
📚 Learning: 2025-02-12T16:38:06.537Z
Learnt from: Romex91
Repo: shakacode/react_on_rails PR: 1697
File: package-scripts.yml:28-28
Timestamp: 2025-02-12T16:38:06.537Z
Learning: The file `node_package/lib/ReactOnRails.full.js` is autogenerated during the build process and should not be present in the repository.

Applied to files:

  • docs/upgrading/upgrading-react-on-rails.md
  • CHANGELOG.md
📚 Learning: 2025-12-16T03:39:07.980Z
Learnt from: CR
Repo: shakacode/react_on_rails PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-12-16T03:39:07.980Z
Learning: Applies to {package.json,Rakefile,**/webpack.config.js,config/**/*.js} : Validate that no hardcoded paths need updating after resolving merge conflicts in build configuration files

Applied to files:

  • docs/upgrading/upgrading-react-on-rails.md
📚 Learning: 2025-12-16T03:39:07.980Z
Learnt from: CR
Repo: shakacode/react_on_rails PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-12-16T03:39:07.980Z
Learning: Create webpack debugging scripts in the dummy app root to inspect actual webpack configuration when encountering webpack/Shakapacker issues, then remove debug scripts before committing

Applied to files:

  • docs/upgrading/upgrading-react-on-rails.md
📚 Learning: 2025-12-16T03:39:07.980Z
Learnt from: CR
Repo: shakacode/react_on_rails PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-12-16T03:39:07.980Z
Learning: Applies to packages/react-on-rails/src/**/*.tsx : For React component files, use TypeScript (.tsx extension) and follow the component registry pattern for registration

Applied to files:

  • docs/upgrading/upgrading-react-on-rails.md
📚 Learning: 2025-12-16T03:39:07.980Z
Learnt from: CR
Repo: shakacode/react_on_rails PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-12-16T03:39:07.980Z
Learning: Applies to lib/react_on_rails/**/*.rb : Add RBS type signatures for new Ruby files in `lib/react_on_rails/` by creating corresponding `.rbs` files in `sig/react_on_rails/`

Applied to files:

  • docs/upgrading/upgrading-react-on-rails.md
  • react_on_rails_pro/docs/caching.md
📚 Learning: 2025-12-16T19:45:54.357Z
Learnt from: alexeyr-ci2
Repo: shakacode/react_on_rails PR: 2183
File: docs/building-features/react-helmet.md:6-12
Timestamp: 2025-12-16T19:45:54.357Z
Learning: In all end-user documentation under docs/, ensure package-manager-agnostic installation instructions include npm, yarn, and pnpm. Reserve the pnpm-only policy for internal development files (package.json, scripts, CI configs, developer guides like CLAUDE.md/WARP.md).

Applied to files:

  • docs/upgrading/upgrading-react-on-rails.md
📚 Learning: 2025-12-16T03:39:07.980Z
Learnt from: CR
Repo: shakacode/react_on_rails PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-12-16T03:39:07.980Z
Learning: Applies to CHANGELOG.md : Update `/CHANGELOG.md` for open-source features, bug fixes, breaking changes, and performance improvements

Applied to files:

  • CHANGELOG.md
🪛 LanguageTool
react_on_rails_pro/docs/caching.md

[grammar] ~25-~25: Ensure spelling is correct
Context: ... Timing of the cached view helper which maybe calling server rendering. Here's a sam...

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)


[grammar] ~47-~47: Use a hyphen to join words.
Context: ... Rendering) Caching ### Why? 1. Server side rendering is typically done like a ...

(QB_NEW_EN_HYPHEN)


[grammar] ~52-~52: Ensure spelling is correct
Context: ...f you're using regular caching for most componentas (cached_react_component_hash), and you ...

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)


[grammar] ~52-~52: Ensure spelling is correct
Context: ...ll your rendering calls, increasing the liklihood of premature cache ejection. In the fu...

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)


[grammar] ~54-~54: Use a hyphen to join words.
Context: ...eful server rendering. Thus, your server side JavaScript depend on externalities,...

(QB_NEW_EN_HYPHEN)


[style] ~190-~190: Consider shortening this phrase to just ‘whether’, unless you mean ‘regardless of whether’.
Context: ... Pro returns both the raw cache key and whether or not there was a cache hit. ### Your JavaSc...

(WHETHER)

🪛 markdownlint-cli2 (0.18.1)
react_on_rails_pro/docs/caching.md

7-7: Images should have alternate text (alt text)

(MD045, no-alt-text)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (10)
  • GitHub Check: dummy-app-integration-tests (3.4, 22, latest)
  • GitHub Check: rspec-package-tests (3.4, latest)
  • GitHub Check: examples (3.4, latest)
  • GitHub Check: pro-lint-js-and-ruby
  • GitHub Check: precompile-check
  • GitHub Check: build
  • GitHub Check: build-dummy-app-webpack-test-bundles
  • GitHub Check: build-dummy-app-webpack-test-bundles
  • GitHub Check: claude-review
  • GitHub Check: markdown-link-check
🔇 Additional comments (5)
docs/upgrading/upgrading-react-on-rails.md (1)

279-279: URL reference is accurate and currently maintained.

The react-on-rails-v9-rc-generator repository exists and contains the webpacker.yml example. The same URL is referenced in official ShakaCode upgrade documentation, confirming this is the canonical reference for the webpacker configuration during v9 upgrades. The change is appropriate.

react_on_rails_pro/docs/caching.md (1)

1-245: Scope mismatch: Document reformatting outside PR objectives.

The PR objectives focus on fixing broken links and updating badges in README. However, this file shows comprehensive cosmetic reformatting (list numbering, whitespace, wording adjustments). Please clarify if these changes are intentional as part of this PR or if they should be separated into a distinct documentation cleanup PR. This helps keep the review scope focused and makes it easier to track the purpose of each change.

Per the retrieved learnings, the react_on_rails_pro/ directory has its own Prettier/ESLint configuration and will be linted separately in CI. Are these changes aligned with that separate linting process, or should formatting concerns be deferred to that pipeline?

react_on_rails_pro/README.md (1)

6-6: LGTM! Badge update is consistent with workflow rename.

The badge URL and link have been correctly updated to reflect the workflow rename from pro-package-tests.yml to pro-test-package-and-gem.yml. Both the badge image source and the link target are updated consistently.

react_on_rails_pro/docs/home-pro.md (1)

42-42: Documentation link is correct and points to the existing configuration reference file.

The link to docs/api-reference/configuration.md is valid and properly formatted.

.lychee.toml (1)

41-64: Link checker exclusions are well-documented and appropriately categorized.

The new exclusions are properly organized with clear justifications:

  • Badge services that block automated requests (badge.fury.io)
  • Sites from PROJECTS.md that block bots or are unreliable (foxford.ru, airgoat.com, first.io, estately.com, careerbuilder.com, blog.shakacode.com, hiring.careerbuilder.com)
  • Historical releases never tagged (8.0.7 and 10.1.2) with reference to issue #2232 for investigation details
  • Deleted GitHub user accounts (alleycat-at-git, Conturbo, jblasco3, nostophilia, railsme, samphilipd, wouldntsavezion)
  • Private repository requiring authentication (react_on_rails_pro)

The comments clearly explain why each exclusion is necessary, and the regex patterns are correctly formatted.

Comment thread react_on_rails_pro/docs/caching.md Outdated
@claude
Copy link
Copy Markdown
Contributor

claude Bot commented Dec 18, 2025

Code Review - PR #2237: Fix broken links and update badges

Overall Assessment: ✅ Excellent Work

This PR demonstrates excellent documentation maintenance practices with thorough investigation, clear documentation, and comprehensive fixes. The code quality is high and follows repository conventions.


Strengths

1. Exceptional Documentation 📝

2. Comprehensive Link Fixes 🔗

  • 15 broken links fixed in this PR alone
  • Proper use of .lychee.toml exclusions with explanatory comments
  • Historical context for unfixable issues (missing git tags, deleted accounts)
  • Smart solutions: Wayback Machine for dead external links

3. Accurate Badge Updates

4. CHANGELOG Tag Consistency 📋

  • Fixed tag prefix inconsistencies (v16.2.0.beta.19 vs 16.2.0.beta.19)
  • Ensures compare links work correctly on GitHub
  • Demonstrates attention to detail

Code Quality Observations

✅ Best Practices Followed

  1. Clear commit history: Single focused merge commit
  2. Well-structured exclusions: Regex patterns in .lychee.toml are precise and documented
  3. No over-engineering: Simple, direct fixes without unnecessary complexity
  4. Backward compatibility: No breaking changes to functionality

📊 File Changes Analysis

File Lines Changed Quality
.lychee.toml +26 Excellent - well-commented exclusions
link-checker-checklist.md +88 (new) Outstanding documentation
CHANGELOG.md ±12 Precise tag prefix fixes
README.md ±12 Clean badge updates
Pro docs ~40 lines Good cleanup

Suggestions for Future Work

1. Link Checker Checklist Location 📁

Consider: The new link-checker-checklist.md is at the repository root. Per CLAUDE.md guidelines:

When creating analysis documents (deep dives, investigations, historical context):

  • Location: Place in /analysis directory

Recommendation: Move to /analysis/link-checker-cleanup-2025-12.md to keep root directory clean. This aligns with the pattern of /analysis/rake-task-duplicate-analysis.md.

2. Lychee Exclusion Maintenance 🧹

The exclusions list is growing. Consider adding a comment section in .lychee.toml:

# Last reviewed: 2025-12-19
# Next review: 2026-06-19 (test if sites are back online)

This helps future maintainers know when to re-validate exclusions.

3. Documentation Cross-References 🔗

The Pro docs/caching.md had multiple path updates. Consider:

  • Adding a comment in documentation reorganization PRs: "Remember to check Pro docs"
  • Or create a docs/path-migrations.md that tracks major path changes

Testing Observations

Verification Steps (Recommended):

# Verify badges render correctly
# Check: https://github.com/shakacode/react_on_rails/tree/ihabadham/link-checker-cleanup

# Run link checker locally
bin/check-links

# Verify CHANGELOG compare links work
# Example: https://github.com/shakacode/react_on_rails/compare/v16.2.0.beta.19...v16.2.0.beta.20

Security Considerations

No security concerns:

  • No code execution changes
  • No dependency updates
  • Only documentation and configuration changes

Performance Considerations

Positive impact:

  • Faster CI runs: Fewer false positive link failures to investigate
  • Better developer experience: Working badges and links

Potential Issues

⚠️ Minor: Badge Image Caching

The shields.io download badge might be cached by browsers showing old counts. This is expected and not an issue - it will update over time.

⚠️ Historical Releases Documentation

The exclusions for 8.0.7 and 10.1.2 are correct, but consider adding a note in the CHANGELOG itself:

## [8.0.7] - Never Released
Note: This version was documented but never tagged. Changes were included in 9.0.0.

This makes it clear to users browsing the CHANGELOG without needing to reference issue #2232.


Adherence to CLAUDE.md Guidelines

Follows all critical requirements:

  • No formatting violations (docs-only changes)
  • Clear documentation of changes
  • No premature optimization
  • Focused on user-visible improvements

Final Recommendation

✅ APPROVE with optional enhancements

This PR is ready to merge as-is. The suggested improvements above are optional refinements for future PRs, not blockers.

Merge confidence: High
Risk level: Very Low (documentation only)
Impact: Positive (cleaner CI, better DX)


Great work, @ihabadham! This kind of thorough cleanup significantly improves the project's maintainability. 🎉

🤖 Generated with Claude Code

@ihabadham ihabadham force-pushed the ihabadham/link-checker-cleanup branch from df3287f to e67067e Compare December 18, 2025 23:43
@claude
Copy link
Copy Markdown
Contributor

claude Bot commented Dec 18, 2025

Code Review - Link Checker Cleanup

✅ Overall Assessment

This is a well-executed documentation cleanup PR. The changes are focused, well-documented, and follow project conventions. The systematic approach to fixing broken links demonstrates thoroughness.


📝 Strengths

  1. Excellent Documentation: The link-checker-checklist.md provides comprehensive tracking of all link issues, fixes, and rationale. This is exemplary.

  2. Systematic Approach: Clear categorization of fixes:

  3. Good Comments: The .lychee.toml exclusions include helpful comments explaining WHY each pattern is excluded (e.g., "8.0.7 never tagged", "SSL certificate expired").

  4. Minimal Scope: Changes are limited to documentation/configuration - no code changes, reducing risk.


🔍 Code Quality

README.md Changes:

  • ✅ Workflow badges correctly updated to match renamed workflow files
  • ✅ Dead Heroku badge replaced with shields.io (good choice - more reliable)
  • ✅ Minor URL fixes (protocol updates, path corrections)

CHANGELOG.md Changes:

  • ✅ Tag prefix corrections make sense (though I cannot verify actual git tags in this environment)
  • ✅ URL protocol fix (http://www.reactrails.comhttps://reactrails.com)
  • ⚠️ Minor concern: The tag prefix changes assume tags exist with v prefix for beta versions. Consider adding a note in the PR description confirming these tags exist.

.lychee.toml Changes:

  • ✅ Well-organized exclusion patterns with clear comments
  • ✅ Regex patterns look correct (proper escaping)
  • ✅ Appropriate categories (bots, timeouts, historical, deleted accounts)
  • ✅ Private repo exclusion is necessary and correctly documented

link-checker-checklist.md:

  • ✅ Excellent tracking document
  • ⚠️ Documentation concern: This file references itself as being on branch ihabadham/link-checker-cleanup - should this be removed/genericized before merge?

🐛 Potential Issues

None identified - this is a low-risk documentation change.


🔒 Security Concerns

None - purely documentation/configuration changes.


⚡ Performance Considerations

Positive impact: Better link checker exclusions will make CI runs faster and more reliable.


🧪 Test Coverage

N/A for this PR - documentation changes don't require code tests.

Recommended verification:

  • ✅ CI link checker should pass
  • ✅ Workflow badges should render correctly
  • ✅ Download badge should display count

📋 Recommendations

  1. Minor - link-checker-checklist.md:

    • Consider whether this file should live at the root or in /analysis per CLAUDE.md guidelines
    • The file includes branch name/PR number - consider if this should be genericized before merge
    • Alternatively, if this is a temporary tracking document, consider deleting it after PR merge
  2. Verification - CHANGELOG tag prefixes:

    • The PR description mentions these were verified, but it would be helpful to add the verification command used
    • Example: git tag | grep 'v16.2.0.beta.19'
  3. Future improvement:

    • Consider adding a CI check that validates CHANGELOG compare links against actual git tags
    • This would prevent future tag prefix mismatches

✨ Praise

  • Exceptional documentation: The tracking checklist is a model for how to document systematic cleanup work
  • Thorough investigation: The distinction between actual errors, false positives, and unfixable historical issues shows careful analysis
  • Good project citizenship: Updating workflow badges after they were renamed in PR Enhance change detection & workflow triggers #2020

🎯 Verdict

APPROVED

This PR is ready to merge. It's a clean, well-documented improvement to project documentation and CI reliability.

Suggested merge message:

Fix broken links and update badges

- Update workflow badges after PR #2020 renamed workflows
- Replace dead Heroku badge with shields.io
- Fix CHANGELOG tag prefixes to match actual git tags
- Add lychee exclusions for historical unfixable links
- Add comprehensive tracking document

Part of #2232

Reviewed per CLAUDE.md guidelines

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

♻️ Duplicate comments (2)
react_on_rails_pro/docs/caching.md (1)

25-25: Address previously flagged grammar and spelling errors still present in modified lines.

These issues were identified in a past review and remain unfixed in the current changeset, despite being in lines marked as changed. LanguageTool has again flagged them:

  • Line 25: "which maybe calling" → "which may be calling"
  • Line 47: "Server side rendering" → "Server-side rendering" (compound adjective requires hyphen)
  • Line 52: "componentas" → "components"; "liklihood" → "likelihood"
  • Line 54: "server side JavaScript" → "server-side JavaScript" (compound adjective)
  • Line 206: "THe goal" → "The goal"
  • Line 190: "whether or not there was a cache hit" → consider shortening to "whether there was a cache hit"
🔎 Proposed fixes
- - **cached_react_component** and **cached_react_component_hash**: Timing of the cached view helper which maybe calling server rendering.
+ - **cached_react_component** and **cached_react_component_hash**: Timing of the cached view helper which may be calling server rendering.

- 1. Server side rendering is typically done like a stateless functional component, meaning that the result should be idempotent from based on props passed in.
+ 1. Server-side rendering is typically done like a stateless functional component, meaning that the result should be idempotent from based on props passed in.

- If you're using regular caching for most componentas (cached_react_component_hash), and you don't want to use caching for other components, then having prerender caching still results in caching for all your rendering calls, increasing the liklihood of premature cache ejection.
+ If you're using regular caching for most components (cached_react_component_hash), and you don't want to use caching for other components, then having prerender caching still results in caching for all your rendering calls, increasing the likelihood of premature cache ejection.

- In the future, React on Rails will allow stateful server rendering. Thus, your server side JavaScript depend on externalities, such as AJAX calls for
+ In the future, React on Rails will allow stateful server rendering. Thus, your server-side JavaScript depend on externalities, such as AJAX calls for

- Cache key composition can be confirmed in development mode with the following steps. THe goal is to confirm that some change that should trigger new cached data actually triggers a new cache key.
+ Cache key composition can be confirmed in development mode with the following steps. The goal is to confirm that some change that should trigger new cached data actually triggers a new cache key.

- Note in the above example, React on Rails Pro returns both the raw cache key and whether or not there was a cache hit.
+ Note in the above example, React on Rails Pro returns both the raw cache key and whether there was a cache hit.

Also applies to: 47-47, 52-52, 54-54, 206-206, 190-190

link-checker-checklist.md (1)

1-88: Remove temporary tracking file before merging.

As noted in previous review comments, this checklist is a temporary tracking document that should not be committed to the repository. Temporary files create clutter and will quickly become outdated after merge.

Action required: Delete this file before merging the PR.

Recommended alternatives for preserving this information:

  • Post as a comment on PR #2237 or issue #2232 for visibility
  • Keep locally in your working directory
  • Use GitHub Projects or Milestones to track remediation work
  • Archive in wiki, discussions, or internal documentation

Once the cleanup work is complete and related PRs are merged, this tracking document can be discarded.

🧹 Nitpick comments (1)
react_on_rails_pro/docs/home-pro.md (1)

42-42: Use relative path for consistency.

This change introduces an absolute GitHub URL while other references to the same file (lines 62, 164) use relative paths (./configuration.md). Mixing absolute and relative URLs creates maintenance overhead and can break when the repository is forked or viewed locally.

🔎 Proposed fix: Use consistent relative path

If linking to the Pro configuration docs in the same repository:

-For more details, see [Rails Configuration](https://github.com/shakacode/react_on_rails/blob/master/docs/api-reference/configuration.md).
+For more details, see [Rails Configuration](./configuration.md).

If the intent is to link to the main (non-Pro) React on Rails configuration docs, verify the target file exists and consider adding a comment explaining why this reference differs from the others.

📜 Review details

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between df3287f and e67067e.

📒 Files selected for processing (10)
  • .lychee.toml (1 hunks)
  • CHANGELOG.md (3 hunks)
  • NEWS.md (1 hunks)
  • README.md (3 hunks)
  • docs/upgrading/upgrading-react-on-rails.md (1 hunks)
  • link-checker-checklist.md (1 hunks)
  • react_on_rails_pro/README.md (1 hunks)
  • react_on_rails_pro/docs/caching.md (12 hunks)
  • react_on_rails_pro/docs/home-pro.md (1 hunks)
  • react_on_rails_pro/docs/release-notes/v4-react-server-components.md (1 hunks)
✅ Files skipped from review due to trivial changes (1)
  • react_on_rails_pro/README.md
🚧 Files skipped from review as they are similar to previous changes (4)
  • CHANGELOG.md
  • NEWS.md
  • README.md
  • docs/upgrading/upgrading-react-on-rails.md
🧰 Additional context used
📓 Path-based instructions (1)
**/*.{js,jsx,ts,tsx,json,css,scss,md}

📄 CodeRabbit inference engine (CLAUDE.md)

Use Prettier as the sole authority for formatting non-Ruby files

Files:

  • react_on_rails_pro/docs/home-pro.md
  • react_on_rails_pro/docs/release-notes/v4-react-server-components.md
  • link-checker-checklist.md
  • react_on_rails_pro/docs/caching.md
🧠 Learnings (17)
📓 Common learnings
Learnt from: CR
Repo: shakacode/react_on_rails PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-12-16T03:39:07.980Z
Learning: Applies to CHANGELOG.md : Update `/CHANGELOG.md` for open-source features, bug fixes, breaking changes, and performance improvements
Learnt from: CR
Repo: shakacode/react_on_rails PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-12-16T03:39:07.980Z
Learning: Applies to CHANGELOG_PRO.md : Update `/CHANGELOG_PRO.md` for Pro-only features, bug fixes, and performance improvements
📚 Learning: 2025-04-26T21:55:55.874Z
Learnt from: alexeyr-ci2
Repo: shakacode/react_on_rails PR: 1732
File: spec/dummy/client/app-react16/startup/ReduxSharedStoreApp.client.jsx:40-44
Timestamp: 2025-04-26T21:55:55.874Z
Learning: In the react_on_rails project, files under `app-react16` directories are copied/moved to corresponding `/app` directories during the conversion process (removing the `-react16` suffix), which affects their relative import paths at runtime.

Applied to files:

  • react_on_rails_pro/docs/home-pro.md
  • react_on_rails_pro/docs/release-notes/v4-react-server-components.md
  • react_on_rails_pro/docs/caching.md
📚 Learning: 2025-12-16T03:39:07.980Z
Learnt from: CR
Repo: shakacode/react_on_rails PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-12-16T03:39:07.980Z
Learning: Applies to react_on_rails_pro/**/*.{js,ts,jsx,tsx,json,css,scss} : The `react_on_rails_pro/` directory has its own Prettier/ESLint configuration and will be linted separately in CI

Applied to files:

  • react_on_rails_pro/docs/home-pro.md
  • react_on_rails_pro/docs/caching.md
📚 Learning: 2025-09-16T08:01:11.146Z
Learnt from: justin808
Repo: shakacode/react_on_rails PR: 1770
File: lib/generators/react_on_rails/templates/base/base/app/javascript/src/HelloWorld/ror_components/HelloWorld.client.jsx:2-2
Timestamp: 2025-09-16T08:01:11.146Z
Learning: React on Rails uses webpack CSS Modules configuration with namedExports: true, which requires the import syntax `import * as style from './file.module.css'` rather than the default export pattern. This configuration enables better tree shaking and bundle size optimization for CSS modules.

Applied to files:

  • react_on_rails_pro/docs/home-pro.md
  • react_on_rails_pro/docs/release-notes/v4-react-server-components.md
  • react_on_rails_pro/docs/caching.md
📚 Learning: 2025-09-15T21:24:48.207Z
Learnt from: AbanoubGhadban
Repo: shakacode/react_on_rails PR: 1781
File: node_package/src/ClientSideRenderer.ts:82-95
Timestamp: 2025-09-15T21:24:48.207Z
Learning: In React on Rails, the force_load feature includes both explicit `data-force-load="true"` usage and the ability to hydrate components during the page loading state (`document.readyState === 'loading'`). Both capabilities require a Pro license, so the condition `!railsContext.rorPro && (isComponentForceLoaded || document.readyState === 'loading')` correctly gates both scenarios.

Applied to files:

  • react_on_rails_pro/docs/home-pro.md
  • react_on_rails_pro/docs/caching.md
📚 Learning: 2025-07-08T05:57:29.630Z
Learnt from: AbanoubGhadban
Repo: shakacode/react_on_rails PR: 1745
File: node_package/src/RSCRequestTracker.ts:8-14
Timestamp: 2025-07-08T05:57:29.630Z
Learning: The global `generateRSCPayload` function in React on Rails Pro (RORP) is provided by the framework during rendering requests, not implemented in application code. The `declare global` statements are used to document the expected interface that RORP will inject at runtime.

Applied to files:

  • react_on_rails_pro/docs/home-pro.md
  • react_on_rails_pro/docs/caching.md
📚 Learning: 2025-10-23T17:22:01.074Z
Learnt from: AbanoubGhadban
Repo: shakacode/react_on_rails PR: 1875
File: lib/react_on_rails/utils.rb:112-124
Timestamp: 2025-10-23T17:22:01.074Z
Learning: In React on Rails, when Pro is installed but not licensed, the intended behavior is to raise an error on boot. The `react_on_rails_pro?` method validates licenses and should raise errors early (including during path resolution in methods like `server_bundle?`) to enforce licensing requirements rather than failing later with obscure errors.

Applied to files:

  • react_on_rails_pro/docs/home-pro.md
  • react_on_rails_pro/docs/caching.md
📚 Learning: 2025-02-13T16:50:47.848Z
Learnt from: AbanoubGhadban
Repo: shakacode/react_on_rails PR: 1644
File: node_package/src/clientStartup.ts:18-21
Timestamp: 2025-02-13T16:50:47.848Z
Learning: In the react_on_rails module, the `reactOnRailsPageUnloaded` function in clientStartup.ts is intentionally kept private as it's only used internally as a callback for `onPageUnloaded`.

Applied to files:

  • react_on_rails_pro/docs/home-pro.md
  • react_on_rails_pro/docs/release-notes/v4-react-server-components.md
  • react_on_rails_pro/docs/caching.md
📚 Learning: 2025-02-18T13:08:01.477Z
Learnt from: AbanoubGhadban
Repo: shakacode/react_on_rails PR: 1644
File: lib/react_on_rails/helper.rb:190-197
Timestamp: 2025-02-18T13:08:01.477Z
Learning: RSC support validation in React on Rails Pro is handled through a chain of validations:
1. Pro version check in `run_stream_inside_fiber`
2. RSC support check during pack generation via `ReactOnRailsPro.configuration.enable_rsc_support`
3. RSC support validation during component registration
This makes additional validation in the helper methods unnecessary.

Applied to files:

  • react_on_rails_pro/docs/home-pro.md
  • react_on_rails_pro/docs/caching.md
📚 Learning: 2025-02-12T16:38:06.537Z
Learnt from: Romex91
Repo: shakacode/react_on_rails PR: 1697
File: package-scripts.yml:28-28
Timestamp: 2025-02-12T16:38:06.537Z
Learning: The file `node_package/lib/ReactOnRails.full.js` is autogenerated during the build process and should not be present in the repository.

Applied to files:

  • react_on_rails_pro/docs/home-pro.md
  • react_on_rails_pro/docs/release-notes/v4-react-server-components.md
  • react_on_rails_pro/docs/caching.md
📚 Learning: 2025-04-09T12:56:10.756Z
Learnt from: AbanoubGhadban
Repo: shakacode/react_on_rails PR: 1696
File: node_package/src/RSCPayloadContainer.ts:0-0
Timestamp: 2025-04-09T12:56:10.756Z
Learning: In the react_on_rails codebase, RSC payloads are already stringified using `JSON.stringify()` before being processed by the `escapeScript` function, which handles escaping of special characters. The function only needs to handle specific HTML markers like comments and closing script tags.

Applied to files:

  • react_on_rails_pro/docs/home-pro.md
  • react_on_rails_pro/docs/caching.md
📚 Learning: 2025-12-16T03:39:07.980Z
Learnt from: CR
Repo: shakacode/react_on_rails PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-12-16T03:39:07.980Z
Learning: Applies to react_on_rails/spec/dummy/e2e/playwright/**/*.spec.js : In Playwright E2E tests, use `app('clean')` in `beforeEach` to ensure clean database state, and leverage Rails helpers (appFactories, appEval) instead of UI setup

Applied to files:

  • react_on_rails_pro/docs/home-pro.md
📚 Learning: 2025-12-16T03:39:07.980Z
Learnt from: CR
Repo: shakacode/react_on_rails PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-12-16T03:39:07.980Z
Learning: Exclude directories `/coverage`, `/tmp`, `/gen-examples`, `/packages/react-on-rails/lib`, `/node_modules`, and generated directories from IDE indexing to prevent slowdowns

Applied to files:

  • .lychee.toml
📚 Learning: 2025-12-16T03:39:07.980Z
Learnt from: CR
Repo: shakacode/react_on_rails PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-12-16T03:39:07.980Z
Learning: Applies to lib/react_on_rails/**/*.rb : Add RBS type signatures for new Ruby files in `lib/react_on_rails/` by creating corresponding `.rbs` files in `sig/react_on_rails/`

Applied to files:

  • react_on_rails_pro/docs/caching.md
📚 Learning: 2025-02-18T13:08:01.477Z
Learnt from: AbanoubGhadban
Repo: shakacode/react_on_rails PR: 1644
File: lib/react_on_rails/helper.rb:190-197
Timestamp: 2025-02-18T13:08:01.477Z
Learning: RSC support validation is handled in deeper level calls of the React on Rails Pro codebase, so it doesn't need to be validated again in the `rsc_payload_react_component` helper method.

Applied to files:

  • react_on_rails_pro/docs/caching.md
📚 Learning: 2024-10-08T20:53:47.076Z
Learnt from: theforestvn88
Repo: shakacode/react_on_rails PR: 1620
File: spec/dummy/client/app/startup/HelloTurboStream.jsx:3-3
Timestamp: 2024-10-08T20:53:47.076Z
Learning: The `RailsContext` import in `spec/dummy/client/app/startup/HelloTurboStream.jsx` is used later in the project, as clarified by the user theforestvn88.

Applied to files:

  • react_on_rails_pro/docs/caching.md
📚 Learning: 2025-12-16T03:39:07.980Z
Learnt from: CR
Repo: shakacode/react_on_rails PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-12-16T03:39:07.980Z
Learning: Applies to lib/react_on_rails/**/*.rb : Validate RBS signatures with `bundle exec rake rbs:validate` and run Steep type checker with `bundle exec rake rbs:steep` for Ruby files

Applied to files:

  • react_on_rails_pro/docs/caching.md
🪛 LanguageTool
react_on_rails_pro/docs/caching.md

[grammar] ~25-~25: Ensure spelling is correct
Context: ... Timing of the cached view helper which maybe calling server rendering. Here's a sam...

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)


[grammar] ~47-~47: Use a hyphen to join words.
Context: ... Rendering) Caching ### Why? 1. Server side rendering is typically done like a ...

(QB_NEW_EN_HYPHEN)


[grammar] ~52-~52: Ensure spelling is correct
Context: ...f you're using regular caching for most componentas (cached_react_component_hash), and you ...

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)


[grammar] ~52-~52: Ensure spelling is correct
Context: ...ll your rendering calls, increasing the liklihood of premature cache ejection. In the fu...

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)


[grammar] ~54-~54: Use a hyphen to join words.
Context: ...eful server rendering. Thus, your server side JavaScript depend on externalities,...

(QB_NEW_EN_HYPHEN)


[style] ~190-~190: Consider shortening this phrase to just ‘whether’, unless you mean ‘regardless of whether’.
Context: ... Pro returns both the raw cache key and whether or not there was a cache hit. ### Your JavaSc...

(WHETHER)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (10)
  • GitHub Check: dummy-app-integration-tests (3.4, 22, latest)
  • GitHub Check: rspec-package-tests (3.4, latest)
  • GitHub Check: examples (3.4, latest)
  • GitHub Check: build-dummy-app-webpack-test-bundles
  • GitHub Check: pro-lint-js-and-ruby
  • GitHub Check: build
  • GitHub Check: build-dummy-app-webpack-test-bundles
  • GitHub Check: precompile-check
  • GitHub Check: claude-review
  • GitHub Check: markdown-link-check
🔇 Additional comments (2)
react_on_rails_pro/docs/release-notes/v4-react-server-components.md (1)

66-66: LGTM: Wayback Machine archive preserves dead reference.

Replacing the dead questlab.pro link with a Wayback Machine archive is the correct approach for maintaining historical references in documentation.

.lychee.toml (1)

41-73: LGTM: Well-documented exclusions handle legitimate CI failures.

The added exclusions appropriately handle various categories of link-checking issues:

  • Badge services and sites that block automated requests
  • Timeout-prone external sites
  • Historical references to never-tagged releases
  • Deleted contributor accounts
  • Private repositories

The regex patterns are correctly escaped and anchored, and the comments clearly document the reason for each exclusion.

@claude
Copy link
Copy Markdown
Contributor

claude Bot commented Dec 18, 2025

Code Review - PR #2237: Fix broken links and update badges

Summary

This PR addresses infrastructure hygiene by fixing broken links and updating badges after workflow renames. The changes are well-documented and follow a clear pattern of fixing historical issues that cannot be corrected at the source.


✅ Strengths

1. Excellent Documentation

2. Comprehensive Approach

  • Fixes both symptoms (broken badges) and root causes (incorrect tag prefixes)
  • Addresses multiple types of link issues systematically:

3. Good Separation of Concerns

  • Distinguishes between fixable issues (corrected) and unfixable issues (excluded)
  • Clear categorization in lychee exclusions

🔍 Observations & Suggestions

1. CHANGELOG Tag Prefix Inconsistency ⚠️
The changes fix some tag prefix issues, but I notice potential inconsistency in lines 1873-1875:

[unreleased]: https://github.com/shakacode/react_on_rails/compare/v16.2.0.beta.20...master
[16.2.0.beta.20]: https://github.com/shakacode/react_on_rails/compare/v16.2.0.beta.19...v16.2.0.beta.20
[16.2.0.beta.19]: https://github.com/shakacode/react_on_rails/compare/16.1.1...v16.2.0.beta.19

Question: Should 16.1.1 in the last line be v16.1.1? The pattern suggests all tags should have v prefix, but this one is mixed. Verify the actual git tag:

git tag | grep "16\.1\.1"

2. Lychee Configuration Changes
The retry settings were increased:

  • max_retries: 4 → 5
  • retry_wait_time: 15 → 30 seconds

This is reasonable for CI flakiness, but consider:

  • Will this significantly increase CI run time for link checking?
  • Have you tested that 5 retries at 30s intervals is sufficient for the timeout issues?

3. Redux GitHub URL Update
Good catch updating reactjs/reduxreduxjs/redux in NEWS.md (line 53). The Redux org was renamed in 2018, so this is correct.

4. Historical Tag Exclusions
The exclusions for versions 8.0.7 and 10.1.2 are well-documented. Consider adding a comment in CHANGELOG.md itself (not just lychee.toml) near those entries to prevent future confusion:

## [8.0.7] - Never Released
<!-- Note: This version was documented but never tagged. Changes were included in 9.0.0 -->

5. Minor: Deleted Account Exclusions
The regex for deleted GitHub accounts is comprehensive. However, if these are in contributor lists, consider also adding a comment in CONTRIBUTORS.md or similar noting these accounts are no longer accessible (if such a file exists).


🧪 Testing Recommendations

Pre-merge checklist:

# 1. Verify the workflow badges render correctly
# Visit the README on your PR branch and check all badges load

# 2. Verify git tags match your CHANGELOG fixes
git tag | grep -E "(16\.2\.0\.beta\.(19|20)|16\.1\.1|2\.0\.[01])"

# 3. Run link checker locally to confirm exclusions work
# (Assuming lychee is available)
lychee --config .lychee.toml README.md CHANGELOG.md

# 4. Verify the gem download badge shows correct count
curl -I "https://img.shields.io/gem/dt/react_on_rails" | grep -i location

🎯 Code Quality Assessment

Category Rating Notes
Documentation ⭐⭐⭐⭐⭐ Excellent inline comments and PR description
Correctness ⭐⭐⭐⭐½ Mostly correct, verify tag prefix consistency
Completeness ⭐⭐⭐⭐⭐ Comprehensive coverage of link issues
Maintainability ⭐⭐⭐⭐⭐ Clear categorization, easy to understand

🚀 Recommendation

APPROVE with minor verification suggested for CHANGELOG tag prefixes.

This is solid infrastructure work that will prevent CI failures and keep documentation accurate. The systematic approach to categorizing link issues is exemplary.

Action items before merge:

  1. ✅ Verify git tag prefixes in CHANGELOG match actual tags (especially around 16.1.1 and 2.0.0)
  2. ⚠️ Confirm CI link checker passes with new exclusions
  3. ⚠️ Verify workflow badges display correctly in README

📚 Adherence to Project Guidelines

✅ Follows CLAUDE.md requirements:

  • Changes are documentation/config only (no code formatting needed)
  • No RuboCop/ESLint required for these file types
  • Well-documented changes
  • Clear commit message with references

Great work on the systematic cleanup! This kind of infrastructure maintenance is often overlooked but crucial for project health. 🙌

@claude
Copy link
Copy Markdown
Contributor

claude Bot commented Dec 19, 2025

PR Review: Fix broken links and update badges

Overall Assessment

This is a well-executed documentation maintenance PR that addresses broken links and outdated badges. The changes are straightforward, low-risk, and improve the project documentation quality.


Strengths

1. Comprehensive Link Audit

  • Properly updates workflow badges to match renamed workflows (PR Enhance change detection & workflow triggers #2020)
  • Fixes dead Heroku badge with shields.io equivalent
  • Corrects CHANGELOG version tag prefixes
  • Documents historical issues (never-tagged releases) instead of silently ignoring them

2. Well-Documented Exclusions

The .lychee.toml additions are excellent:

3. Proper Tag Prefix Corrections

The CHANGELOG fixes show attention to detail - ensures compare links work correctly with actual git tags.

4. Follows CLAUDE.md Guidelines

  • Documentation-only changes (no changelog entry needed)
  • Clear commit message and PR description
  • Links to related PRs and issues

Minor Observations

1. Badge URL Change

Adding alt text Gem Downloads is good for accessibility. The shields.io endpoint should be reliable long-term.

2. Lychee Exclusion Scope

The exclusions for deleted GitHub accounts use exact username matches with dollar sign anchors, which only excludes profile pages. If you want to exclude all links to these users (including PRs, issues, comments), consider removing the dollar sign anchor.

Current: Only excludes profile pages
Alternative: Could exclude all links to those users

3. Historical Tag Documentation

The comments about never-tagged releases are excellent and prevent future confusion.


Testing Recommendations

Pre-merge:

  • CI link checker should pass (currently in progress)
  • Verify workflow badges display correctly on GitHub
  • Spot-check a few CHANGELOG compare links manually

Post-merge:

  • Check that README badges render correctly
  • Verify gem download count appears on shields.io badge

Risk Assessment

Risk Level: Very Low

  • Documentation-only changes
  • No code modifications
  • No breaking changes
  • Backward compatible (old links still work, they just redirect)

Suggestions (Non-blocking)

  1. Consider testing locally if you have lychee installed
  2. After merge, verify workflow badges link to correct workflows:
    • Integration Tests
    • Gem Tests
    • JS Tests

Recommendation

APPROVE - This PR is ready to merge once CI passes.

The changes are well-documented, low-risk, and improve documentation quality. The exclusion comments in .lychee.toml are particularly well done and will help future maintainers.


Related Documentation

Per CLAUDE.md:

  • No changelog entry needed (documentation-only)
  • No linting issues expected
  • No new code to test

Great work on the thorough link audit and documentation!

Comment thread .lychee.toml
ihabadham added a commit that referenced this pull request Dec 19, 2025
## 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]>
ihabadham and others added 2 commits December 19, 2025 02:48
Temporary file to track investigation of 43 broken links.
Will be deleted before merging.

Related to #2232
- Update workflow badges in README.md (main.yml → integration-tests.yml,
  rspec-package-specs.yml → gem-tests.yml) after PR #2020 renamed them
- Replace dead ruby-gem-downloads-badge.herokuapp.com with shields.io
  (Heroku free tier shutdown Nov 2022)
- Fix CHANGELOG tag prefixes to match actual git tags:
  - Add v prefix to 16.2.0.beta.19/20 (tags have v prefix)
  - Remove v prefix from 2.0.0 (tag has no v prefix)
- Add lychee exclusions for:
  - Historical releases never tagged (8.0.7, 10.1.2 - CHANGELOG updated
    but git tag + version bump forgotten)
  - Deleted GitHub user accounts (7 contributors)
  - Private react_on_rails_pro repo

Part of #2232

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

Co-Authored-By: Claude Opus 4.5 <[email protected]>
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (1)
.lychee.toml (1)

97-97: Consider removing the $ anchor for broader matching.

The $ end anchor restricts this pattern to exact profile URLs (e.g., https://github.com/alleycat-at-git). However, CHANGELOG entries might also reference these users' repositories, commits, or pull requests (e.g., https://github.com/alleycat-at-git/some-repo/pull/123), which won't be matched.

🔎 More permissive pattern
-  '^https://github\.com/(alleycat-at-git|Conturbo|jblasco3|nostophilia|railsme|samphilipd|wouldntsavezion)$',
+  '^https://github\.com/(alleycat-at-git|Conturbo|jblasco3|nostophilia|railsme|samphilipd|wouldntsavezion)(/|$)',

This pattern matches both the profile page and any subpaths (repos, commits, PRs, etc.).

📜 Review details

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 691c4d4 and a2301a0.

📒 Files selected for processing (1)
  • .lychee.toml (1 hunks)
🧰 Additional context used
🧠 Learnings (2)
📓 Common learnings
Learnt from: CR
Repo: shakacode/react_on_rails PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-12-16T03:39:07.980Z
Learning: Applies to CHANGELOG_PRO.md : Update `/CHANGELOG_PRO.md` for Pro-only features, bug fixes, and performance improvements
Learnt from: CR
Repo: shakacode/react_on_rails PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-12-16T03:39:07.980Z
Learning: Applies to CHANGELOG.md : Update `/CHANGELOG.md` for open-source features, bug fixes, breaking changes, and performance improvements
📚 Learning: 2025-12-16T03:39:07.980Z
Learnt from: CR
Repo: shakacode/react_on_rails PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-12-16T03:39:07.980Z
Learning: Exclude directories `/coverage`, `/tmp`, `/gen-examples`, `/packages/react-on-rails/lib`, `/node_modules`, and generated directories from IDE indexing to prevent slowdowns

Applied to files:

  • .lychee.toml
🔇 Additional comments (1)
.lychee.toml (1)

17-81: Excellent reorganization!

The file structure is now much clearer with consistent section headers and logical grouping. Most importantly, the pivotaltracker.com and undeveloped.com patterns (lines 78-79) are now correctly placed under "EXTERNAL SITES THAT TIMEOUT DURING CI CHECKS," addressing the earlier feedback. The visual separation with blank lines and = dividers significantly improves maintainability.

ihabadham and others added 8 commits December 19, 2025 02:49
pro-package-tests.yml was renamed to pro-test-package-and-gem.yml in PR #2020.

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

Co-Authored-By: Claude Opus 4.5 <[email protected]>
- caching.md: docs/basics/generator-functions-and-railscontext.md → docs/core-concepts/render-functions-and-railscontext.md
- home-pro.md: docs/configuration.md → docs/api-reference/configuration.md

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

Co-Authored-By: Claude Opus 4.5 <[email protected]>
Returns 403 for automated requests but works in browsers.

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

Co-Authored-By: Claude Opus 4.5 <[email protected]>
/docs/api/ → /docs/api-reference/

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

Co-Authored-By: Claude Opus 4.5 <[email protected]>
Point to react-on-rails-v9-rc-generator which still has the historical
webpacker.yml config (same repo used elsewhere in this doc section).

The react-webpack-rails-tutorial repo migrated to shakapacker.yml.

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

Co-Authored-By: Claude Opus 4.5 <[email protected]>
ihabadham and others added 6 commits December 19, 2025 02:53
The questlab.pro domain expired. Using archived copy to preserve
the Meta RSC migration case study reference.

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

Co-Authored-By: Claude <[email protected]>
- Update reactjs/redux to reduxjs/redux (repo moved)
- Remove outdated 2016 coaching line with dead shakacode.com/work link
- Add lychee exclusions for sites that timeout in CI:
  pivotaltracker.com, undeveloped.com, devchat.tv, chlg.co

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

Co-Authored-By: Claude <[email protected]>
All 15 fixes complete, 2 remaining items covered by PR #2236.

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

Co-Authored-By: Claude <[email protected]>
- Delete link-checker-checklist.md (temporary tracking file, preserved in git history)
- Increase retries from 4 to 5 and wait time from 15s to 30s for transient 504 errors

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

Co-Authored-By: Claude <[email protected]>
reactrails.com returns 504 from GitHub Actions IPs but works locally.
Reverted retry settings (5/30s → 4/15s) since increased retries didn't help.

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

Co-Authored-By: Claude <[email protected]>
@ihabadham ihabadham force-pushed the ihabadham/link-checker-cleanup branch from a2301a0 to e3c1a2d Compare December 19, 2025 00:55
…ntries

- Add visual section separators with ============== style headers
- Move pivotaltracker.com and undeveloped.com to 'EXTERNAL SITES THAT TIMEOUT DURING CI CHECKS' section
- Add blank lines between major categories for better readability
- Improve category naming for clarity (e.g., 'SITES FROM PROJECTS.MD' -> 'SITES FROM PROJECTS.MD THAT BLOCK BOTS OR ARE UNRELIABLE')

Co-authored-by: Ihab Adham <[email protected]>
@ihabadham ihabadham merged commit 2e1a166 into master Dec 19, 2025
29 checks passed
@ihabadham ihabadham deleted the ihabadham/link-checker-cleanup branch December 19, 2025 01:12
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant