Skip to content

Conversation

@ihabadham
Copy link
Contributor

@ihabadham ihabadham commented Sep 21, 2025

Summary

Added automated markdown link checking using GitHub Actions to prevent broken documentation links. This implements the 404 detection tool requested by Justin.

Pull Request checklist

  • Add/update test to cover these changes (Not applicable - workflow addition)
  • Update documentation (self-documenting via workflow)
  • Update CHANGELOG file

Other Information

The workflow will:

  • Run on every push/PR that modifies markdown files
  • Run weekly on Mondays to catch external link rot
  • Can be manually triggered via workflow dispatch
  • Checks all markdown files in the docs/ folder
  • Ignores localhost and mailto links
  • Properly handles GitHub relative links
  • Retries on rate limiting

This prevents future broken links like the RSC documentation issue fixed in PR #1799.


This change is Reviewable

Summary by CodeRabbit

  • Documentation

    • Updated many docs: refreshed external links to modern React and webpack sites, switched HTTP to HTTPS, adjusted example paths and filenames, replaced outdated examples, marked an upgrade guide as Outdated, clarified TypeScript client reference, fixed anchors and contributor link.
  • Chores

    • Added automated Markdown link checking with a new configuration (ignore/replacement patterns, headers, timeout and retry settings) and a workflow running on pushes, PRs, weekly schedule, and manual dispatch.

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Sep 21, 2025

Walkthrough

Adds a Markdown link-check configuration and GitHub Actions workflow, and updates many documentation links, paths, anchors, and small text/formatting items across docs. No production code or public APIs changed.

Changes

Cohort / File(s) Summary of Changes
Markdown link checker setup
/.github/markdown-link-check-config.json, /.github/workflows/check-markdown-links.yml
Adds markdown-link-check configuration (ignore/replacement patterns, headers, timeout/retry settings, alive status codes) and a workflow to run the link checker against docs/.
Docs: Router app references
/docs/api/view-helpers-api.md
Updates React Router example reference from ServerRouterApp.jsx to RouterApp.server.jsx.
Docs: JS examples and images
/docs/javascript/code-splitting.md, /docs/javascript/images.md
Adjusts client bundle path (client/app/startup/client-bundle.jsclient/app/packs/client-bundle.js) and ImageExample path; removes outdated DeferredRender example references.
Docs: Link updates to modern URLs
/docs/getting-started.md, /docs/home.md, /docs/guides/how-react-on-rails-works.md, /docs/javascript/react-and-redux.md, /docs/guides/render-functions-and-railscontext.md, /docs/rails/rails_view_rendering_from_inline_javascript.md, /docs/misc/doctrine.md, /docs/outdated/rails-assets-relative-paths.md, /docs/misc/style.md, /docs/javascript/credits.md, /docs/javascript/troubleshooting-build-errors.md, /docs/guides/how-to-conditionally-server-render-based-on-device-type.md
Refreshes many hyperlinks and anchors (HTTP→HTTPS, react.dev links, webpack.js.org, GitHub profile/link corrections), and switches some absolute links to relative doc links.
Docs: Contributor lint config path
/docs/contributor-info/linters.md
Updates ESLint example path to lib/generators/react_on_rails/templates/.eslintrc.
Docs: Additional details and webpack
/docs/additional-details/manual-installation-overview.md, /docs/additional-details/upgrade-webpacker-v3-to-v4.md, /docs/guides/webpack-configuration.md
Notes TypeScript client file reference, marks Webpacker v3→v4 doc as outdated with Shakapacker links, and fixes Shakapacker org text.
NEWS formatting
/NEWS.md
Minor formatting change (double dash to single dash) in a dated entry.

Sequence Diagram(s)

sequenceDiagram
  autonumber
  actor Dev as Developer / Schedule
  participant GH as GitHub Actions
  participant Repo as Repository (docs/)
  participant Action as markdown-link-check
  participant Web as External URLs

  Dev->>GH: Trigger (push/PR/schedule/dispatch)
  GH->>Repo: Checkout repository
  GH->>Action: Run with config `.github/markdown-link-check-config.json`
  Note over Action: Uses ignore/replacement patterns,\nheaders, timeout, and retry settings
  Action->>Repo: Scan `docs/*.md` (max-depth -1)
  loop For each URL
    Action->>Web: HTTP request (with Accept header for some hosts)
    alt 200 or 206
      Action-->>GH: Mark link OK
    else 429 and retryOn429
      Action->>Web: Retry up to retryCount (with fallback delay)
    else Error
      Action-->>GH: Report broken link
    end
  end
  GH-->>Dev: Job summary (pass/fail)
Loading

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~10–15 minutes

Possibly related PRs

Suggested reviewers

  • justin808
  • AbanoubGhadban
  • Judahmeek

Poem

I hop through docs to mend each link,
Nibble broken paths before they sink.
A config, a workflow, checks by night—
I tidy anchors, make HTTPS right.
Paws on keys, I patch with cheer 🐇✨

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 title "Add automated markdown link checking GitHub Action" succinctly and accurately summarizes the primary change: adding a GitHub Actions workflow and configuration to check Markdown links. It is specific, concise, and matches the PR objectives and modified files, so a reviewer can understand the main intent at a glance.
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.
✨ Finishing touches
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch add-markdown-link-checker

📜 Recent review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between a6102e0 and 1545d37.

📒 Files selected for processing (2)
  • .github/markdown-link-check-config.json (1 hunks)
  • docs/additional-details/upgrade-webpacker-v3-to-v4.md (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (2)
  • .github/markdown-link-check-config.json
  • docs/additional-details/upgrade-webpacker-v3-to-v4.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). (11)
  • GitHub Check: dummy-app-integration-tests (3.2, 20)
  • GitHub Check: dummy-app-integration-tests (3.4, 22)
  • GitHub Check: claude-review
  • GitHub Check: markdown-link-check
  • GitHub Check: examples (3.2, minimum)
  • GitHub Check: examples (3.4, latest)
  • GitHub Check: rspec-package-tests (3.4, latest)
  • GitHub Check: build
  • GitHub Check: rspec-package-tests (3.4, minimum)
  • GitHub Check: rspec-package-tests (3.2, latest)
  • GitHub Check: rspec-package-tests (3.2, minimum)

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

claude bot commented Sep 21, 2025

Code Review for PR #1800: Add automated markdown link checking

✅ Approved with Commendations

This is an excellent addition to the project's quality assurance tooling!

🎯 Strengths

  1. Proactive Quality Control - Prevents broken links from entering the codebase (as evidenced by PR Fix broken RSC documentation link in Pro docs #1799)

  2. Well-Configured Triggers:

    • Runs on markdown file changes (efficient)
    • Weekly scheduled runs catch external link rot
    • Manual triggering for on-demand checks
  3. Thoughtful Configuration:

    • Proper exclusions for localhost and mailto links
    • GitHub-specific optimizations for relative links
    • Appropriate timeout and retry settings
    • Rate limiting handling with retryOn429
  4. Focused Scope - Targets docs/ folder specifically, avoiding noise from other markdown files

💡 Potential Future Enhancements

Consider adding:

  • Slack/email notifications for broken external links found in scheduled runs
  • A badge in README showing link check status
  • Exclusion patterns for intentionally broken example links (if any)

📊 Overall Assessment

This is a valuable addition that will help maintain documentation quality over time. The configuration is production-ready and follows GitHub Actions best practices.

Ready to merge! This will help prevent issues like the one fixed in PR #1799. Great initiative! 🎉

Copy link
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 (11)
.github/markdown-link-check-config.json (4)

15-17: Avoid hardcoding default branch; make replacement resilient.

Hardcoding master will break if/when the default branch changes.

Apply:

-      "replacement": "https://github.com/shakacode/react_on_rails/blob/master/"
+      "replacement": "https://github.com/shakacode/react_on_rails/blob/${{ github.event.repository.default_branch || 'master' }}/"

If expressions aren’t supported here (likely), document the assumption in a comment and mirror the value from a single source in the workflow (see YAML suggestion to set an env var and reuse it).


3-12: Broaden localhost ignores.

Add common local hosts to reduce false failures (127.0.0.1, 0.0.0.0, ::1).

   "ignorePatterns": [
     {
       "pattern": "^http://localhost"
     },
     {
       "pattern": "^https://localhost"
     },
+    {
+      "pattern": "^https?://(127\\.0\\.0\\.1|0\\.0\\.0\\.0|\\[?::1\\]?)"
+    },
     {
       "pattern": "^mailto:"
     }
   ],

21-25: Consider setting a User-Agent for hosts that block bots.

Some sites (MDN, Medium, certain docs portals) return 403/429 without a UA. Add a generic UA header to reduce flakes.

   "httpHeaders": [
     {
       "urls": ["https://docs.github.com", "https://github.com"],
       "headers": {
-        "Accept": "text/html"
+        "Accept": "text/html",
+        "User-Agent": "markdown-link-check/ci"
       }
     }
   ],

27-31: Retry only on 429 may miss transient 5xx; consider modest generic retries.

If the tool supports it, add limited retries for 502/503/504 to combat flaky hosts on the weekly run.

.github/workflows/check-markdown-links.yml (7)

7-12: Path filters: match intent and avoid extra CI runs.

  • Use docs/**/*.md to trigger only when docs change (PR objective).
  • Prefer the canonical **/*.md form if you keep repo-wide matching.
   push:
     branches: [master]
     paths:
-      - '**.md'
+      - 'docs/**/*.md'
       - '.github/workflows/check-markdown-links.yml'
   pull_request:
     paths:
-      - '**.md'
+      - 'docs/**/*.md'
       - '.github/workflows/check-markdown-links.yml'

1-2: Limit token scope explicitly.

Set minimal permissions for the workflow.

 name: Check Markdown Links
+
+permissions:
+  contents: read

19-21: Add a job timeout.

Prevent hung runs from blocking CI.

 jobs:
   markdown-link-check:
     runs-on: ubuntu-latest
+    timeout-minutes: 10

22-25: Pin actions to a commit SHA for supply‑chain safety.

Pin both actions to a trusted commit (or at least a specific version) to avoid surprise changes.

-      - uses: actions/checkout@v4
+      - uses: actions/checkout@v4
+        # consider pinning: actions/checkout@<commit-sha>

       - name: Check markdown links
-        uses: gaurav-nelson/github-action-markdown-link-check@v1
+        uses: gaurav-nelson/github-action-markdown-link-check@v1
+        # consider pinning: gaurav-nelson/github-action-markdown-link-check@<commit-sha>

27-34: Speed up PRs: check only modified files on PRs, full scan otherwise.

Use expressions to toggle scope and DRY the base branch.

         with:
           use-quiet-mode: 'yes'
           use-verbose-mode: 'no'
           config-file: '.github/markdown-link-check-config.json'
           folder-path: 'docs/'
           file-extension: '.md'
           max-depth: -1
-          check-modified-files-only: 'no'
-          base-branch: 'master'
+          check-modified-files-only: ${{ github.event_name == 'pull_request' && 'yes' || 'no' }}
+          base-branch: ${{ github.base_ref || 'master' }}

24-35: Pass GITHUB_TOKEN to reduce GitHub rate limits.

Expose the default token to the action environment.

       - name: Check markdown links
         uses: gaurav-nelson/github-action-markdown-link-check@v1
+        env:
+          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
         with:

14-16: Optional: make scheduled runs non-blocking.

If link rot causes flakes, allow scheduled runs to report but not fail the branch.

   schedule:
     # Run weekly on Monday at 8am UTC
     - cron: '0 8 * * 1'
+  # consider a separate job with `continue-on-error: true` for the scheduled event
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 32d4665 and 2333a6e.

📒 Files selected for processing (3)
  • .github/markdown-link-check-config.json (1 hunks)
  • .github/workflows/check-markdown-links.yml (1 hunks)
  • docs/react-on-rails-pro/react-on-rails-pro.md (1 hunks)
🧰 Additional context used
📓 Path-based instructions (1)
**/*.{js,jsx,ts,tsx,json,md,yml,yaml,css,scss,html,graphql,mdx}

📄 CodeRabbit inference engine (CLAUDE.md)

Let Prettier handle all formatting; never manually format code

Files:

  • docs/react-on-rails-pro/react-on-rails-pro.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). (6)
  • GitHub Check: dummy-app-integration-tests (3.4, 22)
  • GitHub Check: dummy-app-integration-tests (3.2, 20)
  • GitHub Check: rspec-package-tests (3.2, minimum)
  • GitHub Check: claude-review
  • GitHub Check: markdown-link-check
  • GitHub Check: rspec-package-tests (3.4, minimum)
🔇 Additional comments (1)
docs/react-on-rails-pro/react-on-rails-pro.md (1)

25-25: Approve: relative link target exists

docs/react-on-rails-pro/major-performance-breakthroughs-upgrade-guide.md exists (case matches); relative link is correct.

ihabadham and others added 2 commits September 21, 2025 20:32
Implements automated link checking to prevent broken documentation links.
Uses markdown-link-check action that runs on:
- Push to master (when .md files change)
- Pull requests (when .md files change)
- Weekly schedule (Mondays at 8am UTC)
- Manual workflow dispatch

Includes configuration to:
- Ignore localhost and mailto links
- Handle GitHub relative links properly
- Retry on rate limiting
- Check all markdown files in docs/ folder

This addresses the need for automated 404 detection in documentation
as requested by Justin.

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

Co-Authored-By: Claude <noreply@anthropic.com>
@ihabadham ihabadham force-pushed the add-markdown-link-checker branch from 2333a6e to 1fdda76 Compare September 21, 2025 17:33
@claude
Copy link

claude bot commented Sep 21, 2025

Code Review for PR #1800: Add automated markdown link checking GitHub Action

🎯 Overall Assessment

This PR successfully implements automated markdown link checking as requested by Justin to prevent broken documentation links. The implementation is well-structured and addresses the specific issue mentioned in PR #1799.

✅ Strengths

  1. Comprehensive Configuration - The markdown link checker config includes essential features:

    • Proper ignoring of localhost and mailto links
    • Smart replacement patterns for GitHub relative links
    • Custom headers for GitHub API to prevent rate limiting
    • Retry logic with appropriate delays
    • Reasonable timeout settings
  2. Well-Designed Workflow Triggers:

    • Runs on relevant file changes (markdown files and workflow itself)
    • Scheduled weekly checks to catch external link rot
    • Manual trigger option for on-demand verification
    • Targets the correct docs/ folder with 79 markdown files
  3. Proper GitHub Integration:

    • Uses the latest action version (gaurav-nelson/github-action-markdown-link-check@v1)
    • Correctly configured for the repository structure
    • Appropriate verbosity settings

🔍 Suggestions for Improvement

  1. Performance Optimization:
    Consider adding concurrency settings to prevent multiple workflow runs:

    concurrency:
      group: ${{ github.workflow }}-${{ github.ref }}
      cancel-in-progress: true
  2. Enhanced Error Reporting:
    The current config could benefit from adding file path exclusions for generated content:

    "ignorePatterns": [
      // ... existing patterns
      {
        "pattern": "gen-examples/"
      }
    ]
  3. Documentation Coverage:
    Currently only checks docs/ folder. Consider also checking:

    • Root README.md
    • CHANGELOG.md
    • Other documentation files outside docs/
  4. Status Code Handling:
    The aliveStatusCodes only includes [200, 206]. Consider adding:

    • 301, 302 (redirects that should be followed)
    • 403 (some GitHub pages return this for API rate limiting)

⚠️ Minor Issues

  1. Missing CHANGELOG Update: As per the PR checklist, the CHANGELOG should be updated to document this new CI addition.

  2. Gemfile.lock Change: The version bump from 16.0.1.rc.0 to 16.0.1.rc.2 appears unrelated to this PR and might have been accidentally included.

🔒 Security Considerations

No security concerns identified. The workflow uses appropriate permissions and doesn't expose any sensitive data.

✨ Additional Recommendations

  1. Consider adding a badge to the README showing the link check status:

    [![Check Markdown Links](https://github.com/shakacode/react_on_rails/workflows/Check%20Markdown%20Links/badge.svg)](https://github.com/shakacode/react_on_rails/actions/workflows/check-markdown-links.yml)
  2. For better maintainability, consider documenting the link checker in a development guide or CONTRIBUTING.md.

✅ Approval Status

This PR is ready for merge with minor suggestions. The implementation successfully addresses the requirement to prevent broken documentation links and will help maintain documentation quality going forward.

Great work on implementing this automated check! 🚀

Updates moved file paths and removes references to deleted files.
@claude
Copy link

claude bot commented Sep 21, 2025

Code Review for PR #1800: Add automated markdown link checking

✅ Strengths

  1. Excellent addition - This workflow directly addresses the broken documentation links issue mentioned in PR Fix broken RSC documentation link in Pro docs #1799 and implements Justin's request for 404 detection.

  2. Well-configured workflow:

    • Smart triggers: runs on markdown changes, weekly schedule for external link rot, and manual dispatch
    • Proper path filtering to avoid unnecessary runs
    • Good choice of action (gaurav-nelson/github-action-markdown-link-check is well-maintained)
  3. Thoughtful configuration in markdown-link-check-config.json:

    • Ignores localhost and mailto links appropriately
    • Handles GitHub relative links correctly with replacement patterns
    • Includes retry logic for rate limiting (important for GitHub links)
    • Reasonable timeout and retry settings
  4. Documentation fixes - The PR correctly updates broken links found in the existing documentation.

🔍 Areas for Improvement

  1. Missing test coverage for removed links: While the PR notes that the DeferredRender examples have been removed, it would be helpful to add a comment explaining why these were outdated/removed.

  2. CHANGELOG update: The PR checklist indicates the CHANGELOG hasn't been updated. This should be added before merging.

  3. Consider additional file paths: Currently only checking docs/ folder. Consider also checking:

    • Root README.md
    • CONTRIBUTING.md
    • Other markdown files in the repository root

🐛 Potential Issues

  1. Version inconsistency in Gemfile.lock: The diff shows a version change from 16.0.1.rc.0 to 16.0.1.rc.2. This seems unrelated to the link checking feature and should either be removed or explained.

💡 Suggestions

  1. Add badge to README: Consider adding a workflow status badge to show the link check status.

  2. Expand coverage: Update the workflow to check all markdown files, not just those in docs/:

    folder-path: './'
    file-extension: '.md'
  3. Add exclusion patterns for generated files or examples if needed:

    "ignorePatterns": [
      {
        "pattern": "^.*/gen-examples/.*"
      }
    ]

✅ Security & Performance

  • No security concerns identified
  • The workflow is efficient with proper caching and only runs when necessary
  • Rate limiting handling prevents API exhaustion

📊 Test Coverage

The workflow itself serves as continuous testing for documentation links. No additional tests are needed for this CI addition.

Verdict

Approved with minor suggestions

This is a valuable addition that will prevent future documentation issues. Please address the CHANGELOG update and consider the suggestions above before merging. The Gemfile.lock change should be clarified or reverted if unintentional.

Great work on improving the documentation reliability! 🎉

Copy link
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)
docs/javascript/images.md (1)

34-34: Fix GitHub URL: use blob or a relative link

Verified: spec/dummy/client/app/startup/ImageExample.jsx exists on the default branch (master); spec/dummy/client/app/packs/ImageExample.jsx not found — update the docs link accordingly.

Apply one of the following diffs (preferred: relative):

- A full example can be found at [spec/dummy/client/app/startup/ImageExample.jsx](https://github.com/shakacode/react_on_rails/tree/master/spec/dummy/client/app/startup/ImageExample.jsx)
+ A full example can be found at [spec/dummy/client/app/startup/ImageExample.jsx](../../spec/dummy/client/app/startup/ImageExample.jsx)

Alternative (absolute, but correct):

- A full example can be found at [spec/dummy/client/app/startup/ImageExample.jsx](https://github.com/shakacode/react_on_rails/tree/master/spec/dummy/client/app/startup/ImageExample.jsx)
+ A full example can be found at [spec/dummy/client/app/startup/ImageExample.jsx](https://github.com/shakacode/react_on_rails/blob/master/spec/dummy/client/app/startup/ImageExample.jsx)
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 1fdda76 and c6fad48.

📒 Files selected for processing (3)
  • docs/api/view-helpers-api.md (1 hunks)
  • docs/javascript/code-splitting.md (1 hunks)
  • docs/javascript/images.md (1 hunks)
✅ Files skipped from review due to trivial changes (2)
  • docs/javascript/code-splitting.md
  • docs/api/view-helpers-api.md
🧰 Additional context used
📓 Path-based instructions (1)
**/*.{js,jsx,ts,tsx,json,md,yml,yaml,css,scss,html,graphql,mdx}

📄 CodeRabbit inference engine (CLAUDE.md)

Let Prettier handle all formatting; never manually format code

Files:

  • docs/javascript/images.md
🧠 Learnings (1)
📚 Learning: 2025-09-16T08:01:11.146Z
Learnt from: justin808
PR: shakacode/react_on_rails#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/javascript/images.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). (8)
  • GitHub Check: dummy-app-integration-tests (3.4, 22)
  • GitHub Check: dummy-app-integration-tests (3.2, 20)
  • GitHub Check: rspec-package-tests (3.2, minimum)
  • GitHub Check: rspec-package-tests (3.4, latest)
  • GitHub Check: rspec-package-tests (3.2, latest)
  • GitHub Check: rspec-package-tests (3.4, minimum)
  • GitHub Check: build
  • GitHub Check: markdown-link-check

Updates links to moved config files, eslintrc location, ReactOnRails source,
and fixes shakapacker URL typo.
@coderabbitai coderabbitai bot requested a review from justin808 September 21, 2025 18:23
@claude
Copy link

claude bot commented Sep 21, 2025

Code Review for PR #1800: Add automated markdown link checking GitHub Action

Overall Assessment

This is a well-implemented solution for automated link checking that will help maintain documentation quality. The implementation follows GitHub Actions best practices and includes thoughtful configuration to minimize false positives.

Strengths

  • Comprehensive triggers (push/PR/weekly/manual)
  • Smart configuration with retry logic and proper link handling
  • Fixes several broken documentation links

Suggestions for Improvement

  1. Consider adding redirect status codes (301-308) to aliveStatusCodes
  2. For PRs, consider using check-modified-files-only conditionally for better performance
  3. Add error reporting mechanism for scheduled runs
  4. Add pattern to ignore anchor links

Minor Issues

  • Ensure trailing newlines in new files per CLAUDE.md requirements
  • Update CHANGELOG as noted in PR checklist

Security: No concerns identified

Test Coverage: Workflow provides continuous testing

Performance: Well-optimized configuration

Recommendation

Approved with minor suggestions. This is a valuable addition that will prevent broken documentation links. Great work!

Copy link
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)
docs/additional-details/manual-installation-overview.md (1)

16-16: Tighten wording, code-format API calls, and use GitHub blob URL (not tree).

Also align wording with TS usage elsewhere in this PR.

-1. Your JavaScript code "registers" any components and stores per the ReactOnRails APIs of ReactOnRails.register(components) and ReactOnRails.registerStore(stores). See [our JavaScript API docs](../api/javascript-api.md) and the [React on Rails source](https://github.com/shakacode/react_on_rails/tree/master/node_package/src/ReactOnRails.client.ts).
+1. Your JavaScript/TypeScript code registers components and stores via the ReactOnRails APIs: `ReactOnRails.register(components)` and `ReactOnRails.registerStore(stores)`. See [our JavaScript API docs](../api/javascript-api.md) and the [React on Rails source](https://github.com/shakacode/react_on_rails/blob/master/node_package/src/ReactOnRails.client.ts).

If you expect the file path to move again, consider pinning to a commit permalink to avoid link rot.

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between c6fad48 and 7a6fb6d.

📒 Files selected for processing (4)
  • docs/additional-details/manual-installation-overview.md (1 hunks)
  • docs/additional-details/upgrade-webpacker-v3-to-v4.md (1 hunks)
  • docs/contributor-info/linters.md (1 hunks)
  • docs/guides/webpack-configuration.md (1 hunks)
✅ Files skipped from review due to trivial changes (3)
  • docs/contributor-info/linters.md
  • docs/additional-details/upgrade-webpacker-v3-to-v4.md
  • docs/guides/webpack-configuration.md
🧰 Additional context used
📓 Path-based instructions (1)
**/*.{js,jsx,ts,tsx,json,md,yml,yaml,css,scss,html,graphql,mdx}

📄 CodeRabbit inference engine (CLAUDE.md)

Let Prettier handle all formatting; never manually format code

Files:

  • docs/additional-details/manual-installation-overview.md
🧠 Learnings (3)
📚 Learning: 2025-09-16T08:01:11.146Z
Learnt from: justin808
PR: shakacode/react_on_rails#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/additional-details/manual-installation-overview.md
📚 Learning: 2025-04-26T21:55:55.874Z
Learnt from: alexeyr-ci2
PR: shakacode/react_on_rails#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:

  • docs/additional-details/manual-installation-overview.md
📚 Learning: 2025-02-12T16:38:06.537Z
Learnt from: Romex91
PR: shakacode/react_on_rails#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/additional-details/manual-installation-overview.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). (9)
  • GitHub Check: dummy-app-integration-tests (3.2, 20)
  • GitHub Check: dummy-app-integration-tests (3.4, 22)
  • GitHub Check: rspec-package-tests (3.4, latest)
  • GitHub Check: markdown-link-check
  • GitHub Check: build
  • GitHub Check: rspec-package-tests (3.4, minimum)
  • GitHub Check: rspec-package-tests (3.2, minimum)
  • GitHub Check: rspec-package-tests (3.2, latest)
  • GitHub Check: claude-review

The referenced config files no longer exist in React on Rails.
Preserves historical context while directing users to current resources.
@claude
Copy link

claude bot commented Sep 21, 2025

Code Review for PR #1800: Add automated markdown link checking GitHub Action

✅ Overall Assessment

This is a valuable addition that implements automated markdown link checking as requested. The implementation is solid and addresses the issue of broken documentation links proactively.

🎯 Strengths

  1. Comprehensive trigger strategy: Runs on push/PR for markdown changes, weekly schedule, and manual dispatch
  2. Smart configuration: Properly ignores localhost and mailto links, handles GitHub relative links
  3. Resilient to failures: Includes retry logic and rate limit handling
  4. Documentation fixes: Updates outdated links in existing documentation
  5. Focused scope: Only checks the docs/ folder, avoiding unnecessary checks

🔍 Areas for Improvement

1. Missing newline at end of files ⚠️

Both new files (.github/workflows/check-markdown-links.yml and .github/markdown-link-check-config.json) are missing trailing newlines, which violates the project CLAUDE.md requirements. CI will fail without these.

2. Configuration considerations:

  • The replacement pattern assumes master branch, but some repos use main. Consider making this configurable or detecting the default branch
  • The 20s timeout might be too aggressive for slow external sites. Consider increasing to 30s
  • Add pattern to ignore anchor links that start with #

3. Workflow optimizations:

  • Consider adding concurrency group to prevent multiple runs on rapid pushes:
concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true
  • Add job timeout to prevent hanging: timeout-minutes: 30

4. Security considerations:

  • Pin the action to a specific SHA instead of v1 for better security:
uses: gaurav-nelson/github-action-markdown-link-check@1.0.15

5. Test coverage:

  • Consider adding a test markdown file with known good/bad links to verify the checker works
  • The workflow itself could benefit from a dry-run mode for testing

6. Missing CHANGELOG update:

As noted in the PR checklist, the CHANGELOG needs updating for this new feature.

🐛 Potential Issues

  1. False positives on private repos: GitHub links to private repos will fail unless the workflow has appropriate token permissions
  2. No notification mechanism: Failed link checks will not notify anyone unless they check the Actions tab
  3. Performance on large documentation sets: With max-depth: -1 and checking all markdown files, this could be slow on larger projects

💡 Suggestions

  1. Add a badge to the README showing link check status:
[![Check Markdown Links](https://github.com/shakacode/react_on_rails/actions/workflows/check-markdown-links.yml/badge.svg)](https://github.com/shakacode/react_on_rails/actions/workflows/check-markdown-links.yml)
  1. Consider adding exceptions file for known-problematic URLs that should be ignored

  2. Add documentation in docs/contributor-info/ about the link checking process

✅ Documentation Updates

The PR correctly updates several outdated links, particularly fixing references to moved/renamed files. These changes improve documentation quality.

📝 Required Actions Before Merge

  1. ❗ Add trailing newlines to both new files
  2. ❗ Update CHANGELOG.md
  3. Consider addressing the security and optimization suggestions above

Great work on implementing this useful automation! This will definitely help maintain documentation quality going forward.

branches: [master]
paths:
- '**.md'
- '.github/workflows/check-markdown-links.yml'
Copy link
Collaborator

Choose a reason for hiding this comment

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

The config file .github/markdown-link-check-config.json should be included as well, since changing it can affect whether the check passes. I initially thought this file shouldn't be included, but the options starting on line 26 do matter.

- uses: actions/checkout@v4

- name: Check markdown links
uses: gaurav-nelson/github-action-markdown-link-check@v1
Copy link
Collaborator

Choose a reason for hiding this comment

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

Copy link
Collaborator

@alexeyr-ci2 alexeyr-ci2 Sep 21, 2025

Choose a reason for hiding this comment

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

Separately from the above, consider pinning to the exact SHA, even if the current workflows don't do that yet https://www.stepsecurity.io/blog/pinning-github-actions-for-enhanced-security-a-complete-guide

This is a much less used action than e.g. checkout, so less likely to be a target, but if it is compromised, less likely to be noticed as well.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Why this one? It's deprecated and recommends either https://github.com/tcort/github-action-markdown-link-check or https://github.com/UmbrellaDocs/action-linkspector instead.

Should we consider lychee-action instead? It's more actively maintained and Rust-based. Investigated the config migration:

  • Keeps: timeout, retries, headers, status codes
  • Loses: replacementPatterns - but we have zero / links in docs, so it's dead config
  • Gains: caching, better performance

Copy link
Collaborator

Choose a reason for hiding this comment

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

Your choice, but looks good.

Uses tcort/github-action-markdown-link-check which is actively maintained.
Same configuration and API as the deprecated gaurav-nelson version.
Changes to .github/markdown-link-check-config.json now trigger
the workflow since config changes affect link checking behavior.
@claude
Copy link

claude bot commented Sep 22, 2025

Code Review for PR #1800: Add automated markdown link checking GitHub Action

✅ Strengths

1. Well-Configured Link Checker

  • Comprehensive configuration with proper timeout, retry logic, and rate limiting handling
  • Smart ignore patterns for localhost and mailto links
  • Proper GitHub API headers to avoid false positives
  • Good choice using tcort/github-action-markdown-link-check@v1 - a mature and well-maintained action

2. Thoughtful Triggers

  • Runs on relevant file changes (markdown files and workflow configuration)
  • Weekly scheduled runs catch external link rot
  • Manual trigger option via workflow_dispatch is useful for debugging

3. Documentation Improvements

  • Fixed incorrect file extensions (.js → .ts) reflecting TypeScript migration
  • Updated outdated references to removed example components
  • Added helpful notices about outdated documentation
  • Fixed typo in Shakapacker URL

🔍 Issues & Suggestions

1. Version Pinning (Security Best Practice)
Currently using tcort/github-action-markdown-link-check@v1 which follows the major version. Consider pinning to a specific version or commit SHA for better security and reproducibility.

2. Missing Paths in Workflow Triggers
The workflow only checks docs/ folder but triggers on all **.md files. Consider aligning the trigger paths with the actual folder being checked to avoid unnecessary workflow runs.

3. Configuration Enhancement Suggestions
Consider adding patterns to ignore anchor links (^#) and handle relative parent paths (../) in the replacementPatterns section.

4. Missing CHANGELOG Entry
As noted in the PR checklist, the CHANGELOG should be updated to document this addition.

💡 Additional Recommendations

  1. Consider a Badge: Add a status badge to the README showing the link check status
  2. Documentation: Consider adding a note in contributor documentation about this workflow
  3. Test Coverage: The aliveStatusCodes only includes 200 and 206, but some documentation sites return 301/302 redirects as valid responses

✅ Overall Assessment

This is a solid implementation that will help maintain documentation quality. The changes are well-thought-out, fixing existing broken links while preventing future issues. The workflow configuration is sensible with good defaults.

Recommendation: Approve with minor suggestions - The PR can be merged as-is, but implementing the version pinning and path alignment suggestions would improve security and consistency.

Great work on implementing this automated link checking! This will significantly help prevent documentation decay.

Uses tcort/github-action-markdown-link-check@a800ad5f (v1.1.0)
instead of mutable version tag to prevent supply chain attacks.
@claude
Copy link

claude bot commented Sep 22, 2025

Code Review for PR #1800: Add automated markdown link checking GitHub Action

Overall Assessment ✅

This is a well-implemented solution that addresses the broken documentation links issue mentioned in #1799. The implementation follows GitHub Actions best practices and includes thoughtful configuration.

Strengths 👍

  1. Good security practices: Uses pinned action version with SHA hash (tcort/github-action-markdown-link-check@a800ad5)
  2. Comprehensive triggers: Covers push, PR, scheduled runs, and manual dispatch
  3. Smart configuration: Properly ignores localhost/mailto links, handles GitHub relative URLs, and includes retry logic for rate limiting
  4. Documentation fixes: Corrects multiple broken links found in the codebase (changing .js to .ts extensions, fixing paths, etc.)
  5. Proper file formatting: Both new files have trailing newlines as required by CLAUDE.md

Code Quality ✨

  • Clean, readable YAML configuration
  • Well-commented cron schedule
  • Appropriate timeout and retry settings
  • Good use of GitHub Actions path filters to only run when relevant files change

Performance Considerations ⚡

  • Using quiet mode to reduce log verbosity
  • Only checking docs/ folder to avoid unnecessary processing
  • Smart path filters prevent unnecessary workflow runs
  • Weekly schedule is reasonable for catching external link rot

Security 🔒

  • Action is pinned to specific commit SHA (excellent practice)
  • No exposed secrets or sensitive data
  • Read-only operation with no repository modifications
  • Uses official GitHub checkout action v4

Suggestions for Improvement 💡

  1. Consider adding workflow status badge to README to show link check status
  2. Document the workflow in contributor guidelines so maintainers know about this automated check
  3. Consider caching for external link checks to speed up runs on frequently checked URLs
  4. Add failure notifications - Consider adding a step to notify maintainers when scheduled runs fail

Test Coverage

The workflow itself serves as continuous testing for documentation links. No additional tests needed for this infrastructure change.

Minor Notes 📝

  • The Gemfile.lock version bump (16.0.1.rc.0 → 16.0.1.rc.2) appears unrelated to this PR's main purpose but is harmless
  • All documentation updates correctly fix broken links and outdated references

Verdict ✅

This PR is ready to merge. It provides valuable automation for maintaining documentation quality and prevents future broken links. The implementation is solid, secure, and follows best practices.

ihabadham and others added 3 commits September 22, 2025 17:56
…e bot-blocked domains

- Add NPM domains (npmjs.org/com) to ignore list due to 403 bot protection
- Add hichee.com to ignore list due to Cloudflare bot blocking
- Keep c9users.io as example placeholder URL to ignore

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

Co-Authored-By: Claude <noreply@anthropic.com>
- Change all http://reactrails.com URLs to https://reactrails.com
- Site automatically redirects HTTP to HTTPS anyway, but HTTPS is cleaner
- No functionality change, just avoiding unnecessary redirect

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

Co-Authored-By: Claude <noreply@anthropic.com>
- Replace dead chlg.co domain with official Git coding standards URL
- Fix broken anchor #missing-routes-file-error in troubleshooting guide
- Update broken shakacode.com link to point to local documentation
- Add bundle-splitting-hello-world.png image for lightweight bundle example
- Add outdated/historical links to ignore list (webpacker configs from old tutorial)

Fixes 5 out of 6 broken links. Only remaining issues are intentionally preserved
historical content in outdated documentation.

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

Co-Authored-By: Claude <noreply@anthropic.com>
Copy link
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: 4

🧹 Nitpick comments (4)
.github/workflows/check-documentation-links.yml (4)

6-10: Tighten path filters to only run when docs/*.md changes (and ensure nested files match).

Current pattern may match more than intended and can be ambiguous. Since the job scans only docs/, filter to docs/**/*.md for both push and PR.

   push:
     branches: [master]
     paths:
-      - '**.md'
+      - 'docs/**/*.md'
       - '.github/workflows/check-documentation-links.yml'
       - '.lycheeignore'
       - 'lychee.toml'
   pull_request:
     paths:
-      - '**.md'
+      - 'docs/**/*.md'
       - '.github/workflows/check-documentation-links.yml'
       - '.lycheeignore'
       - 'lychee.toml'

If you do intend to trigger on any Markdown change repo‑wide, keep the broader filter but prefer the explicit pattern:

-      - '**.md'
+      - '**/*.md'

Also applies to: 13-16


24-24: Bound job time with an explicit timeout.

Prevents hung link checks from consuming runner minutes.

   check-links:
     runs-on: ubuntu-latest
+    timeout-minutes: 20

33-34: Improve cache key to reuse across commits and bust on config changes.

Keying on SHA defeats reuse; include OS and hash of lychee config instead, with a sensible restore key.

-          key: cache-links-${{ github.sha }}
-          restore-keys: cache-links-
+          key: cache-links-${{ runner.os }}-${{ hashFiles('lychee.toml', '.lycheeignore') }}
+          restore-keys: |
+            cache-links-${{ runner.os }}-
+            cache-links-

39-45: Optional: make logs quieter and runs steadier.

If logs are noisy or rate‑limits bite, consider adding:

  • --no-progress to reduce log spam
  • --max-concurrency 4 to ease rate limiting (unless already set in lychee.toml)
           args: >-
             --config lychee.toml
             --base .
             --cache
             --max-cache-age 1d
+            --no-progress
             docs/
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between c671785 and 526ecc9.

📒 Files selected for processing (3)
  • .github/workflows/check-documentation-links.yml (1 hunks)
  • .lycheeignore (1 hunks)
  • lychee.toml (1 hunks)
✅ Files skipped from review due to trivial changes (2)
  • .lycheeignore
  • lychee.toml
⏰ 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). (8)
  • GitHub Check: dummy-app-integration-tests (3.4, 22)
  • GitHub Check: dummy-app-integration-tests (3.2, 20)
  • GitHub Check: rspec-package-tests (3.4, minimum)
  • GitHub Check: rspec-package-tests (3.4, latest)
  • GitHub Check: rspec-package-tests (3.2, minimum)
  • GitHub Check: rspec-package-tests (3.2, latest)
  • GitHub Check: markdown-link-check
  • GitHub Check: build
🔇 Additional comments (1)
.github/workflows/check-documentation-links.yml (1)

1-47: Overall: solid, useful workflow.

Nice addition: correct triggers, weekly schedule, caching, and scoping to docs/ with Lychee config. With the security hardening and small tweaks above, this is ready.

@ihabadham ihabadham force-pushed the add-markdown-link-checker branch from 526ecc9 to c671785 Compare September 22, 2025 16:55
"pattern": "^https://hichee\\.com"
},
{
"pattern": "^https://github\\.com/shakacode/react-webpack-rails-tutorial/blob/master/config/webpacker\\.yml$"
Copy link
Collaborator

Choose a reason for hiding this comment

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

Why do you make the tool ignore URLs that point to the "react-webpack-rails-tutorial" repo?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

This change is only for the webpacker.yml file, because it's not in the current master branch of react-webpack-rails-tutorial, so it will cause a 404 error when the checker runs. We should keep it for people upgrading, so I'm ignoring it to avoid triggering the checker workflow. Am I missing something?

Copy link
Collaborator

Choose a reason for hiding this comment

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

You can update links to refer for files from the commit at which these files are created

# Upgrading rails/webpacker v3.5 to v4 (Outdated)

The following steps can be followed to update a Webpacker v3.5 app to v4.
_Note: This document is outdated. The configuration files referenced below were removed from React on Rails. For current configuration, see the [install generator templates](https://github.com/shakacode/react_on_rails/tree/master/lib/generators/react_on_rails/templates) or consider upgrading to [Shakapacker](https://github.com/shakacode/shakapacker)._
Copy link
Collaborator

Choose a reason for hiding this comment

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

I don't understand this line. Can it be clearer?

1. Merge changes from the new default [.babelrc](https://github.com/shakacode/react_on_rails/tree/master/lib/install/config/.babelrc) to your `/.babelrc`. If you are using React, you need to add `"@babel/preset-react"`, to the list of `presets`.
1. Copy the file [.browserslistrc](https://github.com/shakacode/react_on_rails/tree/master/lib/install/config/.browserslistrc) to `/`.
1. Merge any differences between [config/webpacker.yml](https://github.com/shakacode/react_on_rails/tree/master/lib/install/config/webpacker.yml) and your `/config/webpacker.yml`.
1. Merge changes from the new default `.babelrc` to your `/.babelrc`. If you are using React, you need to add `"@babel/preset-react"`, to the list of `presets`.
Copy link
Collaborator

Choose a reason for hiding this comment

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

Can you leave links to the files you are mentioning? If the links you have removed are outdated, can you put links to the new files?

Copy link
Collaborator

Choose a reason for hiding this comment

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

If you mean copying these files from this directory, leave links for files inside this directory
https://github.com/shakacode/react_on_rails/tree/master/lib/generators/react_on_rails/templates/redux/base/app/javascript/bundles/HelloWorld

Copy link
Contributor Author

Choose a reason for hiding this comment

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

can you put links to the new files?

we don't have new files that are equivalent to the files here, they're similar, but will cause confusion. I'm considering leaving the broken links as is, and just make the file as outdated and what they should do instead.

Copy link
Collaborator

@AbanoubGhadban AbanoubGhadban left a comment

Choose a reason for hiding this comment

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

Good check added, I just left some tiny comments

@claude
Copy link

claude bot commented Sep 22, 2025

Code Review for PR #1800: Add automated markdown link checking GitHub Action

Summary

This PR adds valuable automated link checking functionality to prevent broken documentation links. The implementation is clean, well-configured, and addresses the issue raised by Justin regarding 404 detection.

✅ Strengths

1. GitHub Actions Workflow

  • Properly configured triggers (push, PR, schedule, manual)
  • Efficient path filtering to only run on relevant changes
  • Uses a specific commit SHA for the action (security best practice)
  • Appropriate scheduling for weekly checks to catch external link rot

2. Configuration

  • Comprehensive ignore patterns for localhost, internal test URLs
  • Smart replacement patterns for GitHub relative links
  • Proper HTTP headers for GitHub API rate limiting
  • Reasonable timeout and retry settings

3. Documentation Updates

  • Fixes multiple broken or incorrect URLs (e.g., www.reactrails.com → reactrails.com)
  • Updates outdated file paths (.js → .ts extensions)
  • Properly marks outdated content with clear notices
  • Updates links to current React documentation

🔍 Observations & Suggestions

1. Pinned Action Version
Good practice using commit SHA (a800ad5f...) instead of tag. Consider documenting why v1.1.0 specifically was chosen for future maintainers.

2. Ignore Patterns
The configuration correctly ignores:

  • Development URLs (localhost, c9users)
  • NPM links (potential rate limiting issues)
  • Specific outdated example files

Consider adding a comment in the config file explaining why certain URLs are ignored (e.g., "hichee.com - historical reference, no longer active").

3. Documentation Quality
The updates improve accuracy by:

  • Correcting React documentation links to new react.dev domain
  • Fixing typo in Shakapacker GitHub URL
  • Updating file references to reflect TypeScript migration

4. Test Coverage
The workflow lacks explicit test coverage. Consider adding a test markdown file with known good/bad links to validate the checker works as expected.

⚠️ Minor Issues

  1. Gemfile.lock change: The version bump from 16.0.1.rc.0 to 16.0.1.rc.2 appears unrelated to link checking. This should likely be in a separate commit or PR.

  2. Missing CHANGELOG update: The PR checklist indicates CHANGELOG wasn't updated. Consider adding an entry under a "Development" or "Tooling" section.

  3. Binary file addition: The bundle-splitting-hello-world.png image was added but its purpose in link checking context is unclear. Verify this is intentional.

🔒 Security Review

  • No security concerns identified
  • Action uses specific commit SHA (good practice)
  • No credentials or sensitive data exposed
  • Workflow has minimal permissions

🚀 Performance Considerations

  • Path filtering prevents unnecessary runs
  • 20-second timeout is reasonable for link checking
  • Weekly schedule prevents excessive API calls
  • Retry logic handles transient failures well

📋 Recommendations

  1. Add workflow documentation: Consider adding a comment in the workflow file explaining the purpose and maintenance notes.

  2. Monitor initial runs: Watch the first few scheduled runs to ensure ignore patterns are sufficient and timeout settings are appropriate.

  3. Consider caching: For frequently checked external URLs, consider if the action supports caching to reduce redundant checks.

  4. Badge addition: Consider adding a "docs: passing" badge to the README to show documentation health status.

✅ Approval

Overall, this is a well-implemented addition that will help maintain documentation quality. The link checker is properly configured and the documentation updates are accurate and helpful.

Recommended for merge after:

  1. Separating or explaining the Gemfile.lock version change
  2. Considering a CHANGELOG entry
  3. Verifying the PNG file addition is intentional

Great work on improving the project's documentation reliability! 🎉

@claude
Copy link

claude bot commented Sep 23, 2025

Code Review for PR #1800: Add automated markdown link checking GitHub Action

Thank you for implementing this automated markdown link checking solution! This is a valuable addition that will help maintain documentation quality. Here is my comprehensive review:

Strengths

  1. Well-configured workflow triggers: The combination of push/PR triggers for markdown changes, weekly scheduled runs, and manual workflow dispatch provides excellent coverage.

  2. Thoughtful ignore patterns: Good selection of patterns to ignore (localhost, mailto, npmjs.com) and specific problematic links that may be temporarily unavailable.

  3. Robust retry mechanism: Configuration includes retry on 429 (rate limiting), retry count of 3, and 30s fallback delay - excellent for handling transient failures.

  4. Documentation improvements: The PR also fixes numerous broken links and updates outdated references throughout the documentation.

🔍 Suggestions for Improvement

1. Performance & Resource Usage

The workflow checks ALL markdown files in docs/ on every run. Consider:

  • Using check-modified-files-only: "yes" for PR events to speed up checks
  • Keeping full scans only for scheduled runs and manual triggers

2. Missing Pattern Coverage

Add these patterns to ignorePatterns:

{
  "pattern": "^#"
},
{
  "pattern": "^https://github\\.com/.*#L[0-9]+"
}

This handles anchor links and GitHub line number references.

3. Security Consideration

The workflow uses a pinned commit SHA for the action, which is great for security. However, consider adding:

permissions:
  contents: read
  pull-requests: write

This follows the principle of least privilege.

4. Error Reporting Enhancement

Consider adding a step to create an issue or notify maintainers when the scheduled run finds broken links:

- name: Create issue on failure
  if: failure() && github.event_name == "schedule"
  uses: actions/github-script@v7
  with:
    script: |
      // Create issue with broken links report

5. Configuration Documentation

Add a comment header to .github/markdown-link-check-config.json explaining:

  • Why certain patterns are ignored
  • How to add new exceptions
  • Link to the markdown-link-check documentation

⚠️ Potential Issues

  1. Test Coverage: The NEWS.md link change from www.reactrails.com to reactrails.com might redirect. Verify both work correctly.

  2. Image File: The PR adds docs/images/bundle-splitting-hello-world.png but it appears to be a binary placeholder (0 additions/deletions). Ensure this image is properly committed if needed.

  3. Outdated Guide Note: Good addition of the outdated notice to the Webpacker v3-v4 upgrade guide, but consider moving it to an outdated/ directory for clarity.

📋 Testing Recommendations

Before merging:

  1. Manually trigger the workflow to verify it catches known broken links
  2. Test with a PR that intentionally includes a broken link to ensure it fails appropriately
  3. Verify the weekly schedule syntax works as expected

Overall Assessment

This is a well-implemented solution that addresses the need for automated link checking. The configuration is thoughtful and the documentation updates are valuable. With the minor improvements suggested above, this will be an excellent addition to the CI/CD pipeline.

Recommendation: Approve with minor suggestions

The PR effectively implements the requested 404 detection tool and goes beyond by also fixing existing broken links. Great work @ihabadham!

@claude
Copy link

claude bot commented Sep 23, 2025

Code Review Summary

This PR successfully implements automated markdown link checking - a valuable addition for maintaining documentation quality.

Strengths

• Well-configured GitHub Actions workflow with appropriate triggers
• Smart filtering patterns for localhost, mailto, and problematic URLs
• Resilient configuration with retry logic and rate limit handling
• Proactive fixes for existing broken links in documentation
• Proper security with commit hash pinning

Suggestions for Improvement

  1. CHANGELOG Update Required - Add entry noting the new automated link checking feature

  2. Additional Ignore Patterns - Consider adding patterns for anchor links and example.com

  3. Workflow Optimization - Add concurrency settings to prevent duplicate runs

  4. Error Reporting - Consider verbose mode for scheduled runs to aid debugging

  5. Minor Issues - The bundle-splitting-hello-world.png and Gemfile.lock changes appear unrelated to this PR

Security Review

All security best practices are followed - action properly pinned, no sensitive data exposed, appropriate permissions.

Recommendation

Approve with minor suggestions - The implementation is solid and production-ready. Please update the CHANGELOG before merging. Other suggestions can be addressed in follow-up PRs.

@claude
Copy link

claude bot commented Sep 23, 2025

Code Review for PR #1800: Add automated markdown link checking GitHub Action

Summary

This PR adds valuable automated link checking for markdown documentation to prevent broken links. The implementation is well-structured and follows GitHub Actions best practices.

✅ Strengths

  1. Comprehensive Configuration: The markdown-link-check-config.json includes appropriate ignore patterns for localhost, temporary URLs, and development-specific addresses.

  2. Smart Scheduling: The workflow runs on relevant events (push/PR for markdown changes) and includes a weekly schedule to catch external link rot.

  3. Proper HTTP Headers: Correctly configured headers for GitHub API to avoid rate limiting issues.

  4. Documentation Updates: The PR properly updates outdated documentation links, migrating from HTTP to HTTPS and fixing broken references.

  5. Version Pinning: The action is properly pinned to a specific commit hash (a800ad5f1c35bf61987946fd31c15726a1c9f2ba) for security.

🔍 Suggestions for Improvement

  1. Consider Adding More Status Codes: While 200 and 206 are included in aliveStatusCodes, consider adding 301 and 308 for permanent redirects that should be updated.

  2. Timeout Configuration: The 20s timeout might be insufficient for slower external sites. Consider increasing to 30s to reduce false positives.

  3. Documentation: Consider adding a comment in the workflow file explaining why certain patterns are ignored (e.g., why hichee.com is ignored).

  4. Error Reporting: The workflow uses quiet mode which might hide useful debugging information. Consider using verbose mode for scheduled runs to catch intermittent issues.

📝 Minor Issues

  1. Inconsistent URL Format: Some documentation fixes use https://reactrails.com while others use https://www.reactrails.com. Consider standardizing.

  2. Missing CHANGELOG Update: Per the PR checklist, the CHANGELOG should be updated to document this new CI feature.

🔒 Security Considerations

  • ✅ Action is pinned to specific commit
  • ✅ No sensitive data exposure
  • ✅ Proper permission scoping (read-only operations)

🚀 Performance

  • The check is appropriately scoped to only the docs/ folder
  • Running only when markdown files change minimizes unnecessary CI runs
  • Retry logic with backoff helps handle transient network issues

✅ Overall Assessment

This is a well-implemented feature that will significantly improve documentation quality. The automated checks will prevent broken links from being merged and the weekly schedule will catch external link rot.

Recommendation: Approve with minor suggestions above, particularly updating the CHANGELOG as mentioned in the PR checklist.

Great work on implementing this automated quality check! 🎉

@claude
Copy link

claude bot commented Sep 23, 2025

Code Review: PR #1800 - Add automated markdown link checking GitHub Action

Overall Assessment

This PR successfully implements automated markdown link checking to prevent broken documentation links. The implementation is well-structured and follows GitHub Actions best practices.

Strengths

  1. Well-configured link checker:

    • Comprehensive ignore patterns for localhost, mailto, and known problematic URLs
    • Smart replacement patterns for relative GitHub links
    • Proper retry logic with rate limiting handling
    • Appropriate timeout and alive status codes configuration
  2. Thoughtful workflow triggers:

    • Runs on markdown file changes (push/PR)
    • Weekly scheduled runs to catch external link rot
    • Manual dispatch option for on-demand checking
    • Properly scoped to only run when needed
  3. Documentation improvements:

    • Fixed multiple broken links (HTTP to HTTPS)
    • Updated outdated file paths and references
    • Added deprecation notice for outdated upgrade guide
    • Corrected contributor links
  4. Security considerations:

    • Uses pinned action version with SHA hash
    • No exposure of sensitive data
    • Read-only operation

Suggestions for Improvement

  1. Configuration documentation: Consider adding a comment block at the top of .github/markdown-link-check-config.json explaining:

    • Why certain patterns are ignored
    • When to update the configuration
    • Link to the action documentation
  2. Error handling: The workflow could benefit from:

    • Optional continue-on-error for scheduled runs (to avoid blocking CI on external link failures)
    • Separate job for external vs internal link checking
    • Issue creation on scheduled run failures
  3. Performance optimization: Consider:

    • Caching for frequently checked external URLs
    • Parallel checking if the action supports it
    • Exclusion of archived documentation from scheduled runs

Minor Issues

  1. Ignored patterns specificity: Some patterns like https://hichee.com and https://your-shared-addr.c9users.io might be too specific. Consider documenting why these are excluded or making them more generic if they represent categories of URLs.

  2. Missing CHANGELOG update: The PR checklist indicates the CHANGELOG has not been updated yet. This feature addition should be documented.

Test Coverage

While this is a CI/CD addition that does not require traditional unit tests, consider:

  • Running the workflow manually once before merging to verify it works correctly
  • Documenting expected behavior for different failure scenarios

Additional Recommendations

  1. Monitoring: Consider adding a badge to the README showing the link check status
  2. Gradual rollout: You might want to start with continue-on-error: true for a few weeks to identify and fix all issues before making it a required check
  3. Exclusions file: For large-scale exclusions, consider moving patterns to a separate file for better maintainability

Verdict

APPROVED with minor suggestions - This is a valuable addition that will significantly improve documentation quality. The implementation is solid, following best practices for GitHub Actions and link validation. Once the CHANGELOG is updated and you have considered the suggestions above, this is ready to merge.

Great work on improving the documentation maintenance process!

@claude
Copy link

claude bot commented Sep 23, 2025

Code Review: Automated Markdown Link Checking

Thank you for implementing this important feature to prevent broken documentation links! This is a valuable addition that addresses the issue raised about the 404 RSC documentation link. Here's my comprehensive review:

Strengths

  1. Well-structured implementation: The workflow is properly configured with appropriate triggers (push, PR, schedule, and manual dispatch).

  2. Smart configuration choices:

    • Ignoring localhost and mailto links is sensible
    • The replacement pattern for GitHub relative links is clever
    • Rate limiting handling with retries prevents CI failures
    • Weekly scheduled runs will catch external link rot
  3. Documentation improvements: Great job fixing existing broken links and updating outdated URLs to HTTPS.

  4. Action version pinning: Using a commit SHA (a800ad5...) instead of a tag provides better security against supply chain attacks.

🔍 Issues & Suggestions

1. Configuration File - Consider More Robust Patterns

The ignore patterns for specific GitHub URLs might become outdated as the repository evolves:

{
  "pattern": "^https://github\\.com/shakacode/react-webpack-rails-tutorial/blob/master/config/webpacker\\.yml$"
}

Consider using more flexible patterns or documenting why these specific files are excluded.

2. Performance Consideration

The workflow runs on all markdown files in the docs/ folder. As documentation grows, consider:

  • Adding a file count limit or
  • Implementing parallel checking for large documentation sets

3. Missing Error Handling Documentation

The workflow should document what happens when links fail. Consider adding:

  • A comment in the workflow file explaining failure behavior
  • Whether the workflow blocks merging on link failures

4. Security Headers Configuration

The custom headers for GitHub might need adjustment if GitHub changes their bot detection:

"headers": {
  "Accept": "text/html"
}

Monitor for potential false positives.

📝 Minor Improvements

  1. Workflow naming: Consider adding a more descriptive job name instead of just markdown-link-check

  2. Timeout configuration: 20 seconds might be aggressive for slow external sites. Consider increasing to 30s.

  3. Add workflow status badge: Consider adding a badge to the README showing the link check status.

🐛 Potential Issues

  1. Fragment identifiers: The configuration doesn't explicitly handle URL fragments (#anchors). Verify these are checked correctly.

  2. Rate limiting on scheduled runs: Weekly runs checking all external links simultaneously might trigger rate limits on some services.

Testing Recommendations

Before merging:

  1. Test with a deliberately broken link to ensure the workflow fails appropriately
  2. Verify the workflow handles private repositories correctly (if any docs link to private repos)
  3. Test the manual workflow dispatch to ensure it works as expected

📈 Overall Assessment

This is a solid implementation that will significantly improve documentation quality. The changes follow best practices for GitHub Actions, and the configuration is thoughtful. With the minor adjustments suggested above, this will be an excellent addition to the CI/CD pipeline.

Recommendation: ✅ Approve with minor suggestions

Great work on this implementation! The proactive approach to documentation quality is commendable. 🎉

@claude
Copy link

claude bot commented Sep 23, 2025

Code Review for PR #1800: Add automated markdown link checking GitHub Action

Overall Assessment

This PR effectively implements automated markdown link checking to prevent documentation rot and broken links. The implementation is well-thought-out with appropriate configuration for rate limiting, retries, and relevant ignore patterns. The concurrent fix of existing broken links demonstrates the immediate value of this addition.

✅ Strengths

  1. Comprehensive Trigger Strategy: The workflow runs on relevant file changes, scheduled weekly checks, and manual dispatch - excellent coverage for catching link rot.

  2. Smart Configuration:

    • Proper ignore patterns for localhost, mailto, and development URLs
    • Rate limit handling with retries and delays
    • GitHub-specific headers for API compatibility
    • Replacement pattern for relative links
  3. Pinned Action Version: Using a commit SHA (a800ad5f1c35bf61987946fd31c15726a1c9f2ba) instead of a tag provides better security against supply chain attacks.

  4. Documentation Fixes: The PR proactively fixes 20+ broken links, updating them to use HTTPS and correcting outdated paths.

🔧 Suggestions for Improvement

  1. Missing Workflow Permissions: Consider adding explicit permissions to the workflow for better security:

    permissions:
      contents: read
  2. Consider Caching: For faster runs, consider caching the link check results between runs when checking unchanged files.

  3. Notification Strategy: Consider adding a notification mechanism (like creating an issue) when the scheduled run finds broken links, so maintainers are alerted.

  4. Config Documentation: Add comments in the config JSON explaining why certain URLs are ignored (especially the hichee.com and specific tutorial repo files).

⚠️ Potential Issues

  1. False Positives: The npmjs.org ignore pattern might hide genuinely broken package links. Consider being more selective about which npm URLs to ignore.

  2. Performance: Checking all docs on every markdown change could slow down CI for large documentation changes. The current scope (docs/ folder only) helps mitigate this.

  3. Rate Limiting: While retry logic is present, parallel PR checks might still hit GitHub rate limits during busy periods.

📝 Minor Notes

  • The Gemfile.lock change (version bump) appears unrelated to the link checking feature
  • The "Outdated" note added to the Webpacker v3 to v4 upgrade guide is helpful context
  • Good catch on fixing the broken image reference that was removed from the repo

✅ Recommendation

Approved with suggestions - This is a valuable addition that will help maintain documentation quality. The implementation is solid, and the suggestions above are enhancements rather than critical issues. Great work on proactively fixing the existing broken links!

@claude
Copy link

claude bot commented Sep 23, 2025

Code Review for PR #1800: Add automated markdown link checking GitHub Action

Summary

This PR adds valuable automated documentation link checking that will prevent broken links in the documentation. The implementation is well-structured and includes comprehensive link fixes across the documentation.

Strengths

Proactive documentation maintenance: Weekly scheduled runs will catch external link rot
Good configuration choices: Using lychee (modern and fast) instead of the older markdown-link-check
Comprehensive link fixes: Fixed numerous outdated links across documentation
Smart filtering: Appropriately ignores localhost, mailto, and other non-checkable links
Performance optimizations: Includes caching and retry logic for rate-limited resources

Areas for Improvement

🔒 Security

  • Pin action versions to SHA: Currently using tags (v4, v0.16.0) which can be moved. Pin to specific commit SHAs for supply chain security
  • Add explicit permissions: Add minimal permissions block to the workflow (contents: read)
  • Consider token usage: Pass GITHUB_TOKEN to reduce rate limiting on GitHub links

⚡ Performance

  • Optimize PR checks: Consider checking only modified files in PRs to speed up CI
  • Improve cache key: Current SHA-based key defeats cache reuse. Use config file hashes instead
  • Add job timeout: Prevent hung runs from consuming runner minutes unnecessarily

🛠️ Configuration

  • Path filters: Since only docs/ is checked, consider filtering triggers to 'docs/**/*.md'
  • Branch references: Avoid hardcoding 'master' - use repository.default_branch where possible
  • Add broader localhost patterns: Include 127.0.0.1, 0.0.0.0, ::1

Minor Issues

  • One remaining broken link: docs/javascript/images.md:34 uses '/tree/' instead of '/blob/' in GitHub URL
  • Consider adding User-Agent header for sites that block bots
  • Document the 1-day cache age choice

Testing Recommendations

  1. Test the workflow with a known broken link to verify it fails appropriately
  2. Verify the weekly schedule triggers correctly
  3. Test manual workflow dispatch functionality
  4. Confirm caching improves subsequent run times

Conclusion

This is a valuable addition that will significantly improve documentation quality. With the security hardening suggestions and minor optimizations above, this will be production-ready. The proactive approach to documentation maintenance aligns well with the project's quality standards outlined in CLAUDE.md.

Recommendation: Approve with minor changes for security hardening (action pinning, permissions).

@claude
Copy link

claude bot commented Sep 23, 2025

Code Review for PR #1800: Add automated markdown link checking GitHub Action

Great work on implementing automated markdown link checking! This will significantly improve documentation quality and prevent broken links from reaching production. Here's my detailed review:

Strengths

  1. Well-configured workflow triggers: The combination of push/PR triggers for markdown changes, weekly scheduled runs, and manual dispatch provides comprehensive coverage
  2. Smart ignore patterns: Appropriately ignores localhost, mailto, and temporary/example URLs
  3. Robust retry logic: Implements retry on 429 (rate limiting) with configurable delays, which is essential for GitHub API calls
  4. Proper GitHub API headers: Sets Accept headers for GitHub URLs to avoid authentication issues
  5. Focused scope: Only checks docs/ folder, avoiding unnecessary checks on other markdown files
  6. Good documentation updates: Fixed numerous outdated links to use HTTPS and updated to modern React documentation

🎯 Code Quality & Best Practices

The implementation follows GitHub Actions best practices:

  • Uses pinned action version with commit hash for security
  • Appropriate timeout and retry settings
  • Clean YAML structure with clear commenting via cron schedule

⚠️ Suggestions for Improvement

  1. Consider adding file exclusions: Some documentation might intentionally reference deprecated/archived resources. Consider adding a way to exclude specific files or lines from checking.

  2. Add failure notifications: Consider adding Slack/email notifications for scheduled runs that fail, so broken external links are caught promptly.

  3. Performance optimization: The 20s timeout per link might be too generous. Consider reducing to 10s for faster feedback on large documentation sets.

  4. Add success/failure badge: Consider adding a badge to the README showing the link check status.

🔒 Security Considerations

  • ✅ Action is pinned to specific commit hash (good practice)
  • ✅ No secrets or sensitive data exposed
  • ✅ Read-only operations

📊 Performance Impact

  • Minimal CI runtime impact as it only runs on markdown changes
  • Weekly scheduled runs won't affect PR/push workflows

Test Coverage

The PR demonstrates the checker working by fixing 20+ broken links, effectively serving as its own test.

📝 Minor Issues

  1. The Gemfile.lock change (version bump) seems unrelated to the markdown link checking feature. Was this intentional?

  2. Consider documenting the link checker in the contributor guide so developers know:

    • How to run it locally before committing
    • How to handle false positives
    • How to add exclusions if needed

🎉 Overall Assessment

This is a valuable addition to the project that will prevent documentation decay. The implementation is solid, follows best practices, and includes thoughtful configuration for common edge cases. The fact that it already caught and fixed numerous broken links proves its immediate value.

Recommendation: Approved

The PR is ready to merge. The suggestions above are nice-to-haves that could be addressed in follow-up PRs if desired.

Great job on improving the documentation quality infrastructure! 🚀

@claude
Copy link

claude bot commented Sep 23, 2025

Code Review: Add automated markdown link checking GitHub Action

✅ Overall Assessment

This is a well-implemented addition that addresses the issue of broken documentation links. The implementation is thorough and follows GitHub Actions best practices.

👍 Strengths

  1. Comprehensive Configuration: The markdown link checker config properly handles:

    • Localhost URLs (development environments)
    • GitHub-specific headers for better reliability
    • Retry logic for transient failures (rate limiting, temporary outages)
    • Proper timeout settings (20s with 3 retries)
  2. Smart Triggering Strategy:

    • Runs on relevant file changes (markdown files and config)
    • Weekly scheduled runs to catch external link rot
    • Manual dispatch for on-demand checking
    • Correctly targets the docs/ folder specifically
  3. Pinned Action Version: Using a commit hash instead of a tag is a security best practice

  4. Fixed Documentation Links: The PR also fixes numerous broken links discovered during implementation, which provides immediate value

🔍 Areas for Consideration

  1. Performance Impact:

    • Consider adding concurrency limits to prevent multiple workflow runs from overwhelming external sites
    • The 20s timeout with 3 retries could lead to long workflow times if many links fail
  2. False Positives Handling:

    • The ignore patterns for npmjs.org, hichee.com, and specific GitHub tutorial links suggest these may be unstable or require auth
    • Consider documenting why these specific patterns are ignored for future maintainers
  3. Security Considerations:

    • ✅ Action is pinned to specific commit (good)
    • ✅ No secrets or sensitive data exposed
    • Consider adding permissions block to the workflow for least-privilege principle

💡 Suggestions for Enhancement

  1. Add workflow permissions for security (contents: read, pull-requests: write)
  2. Consider adding concurrency control to prevent resource waste
  3. Document why certain URLs are ignored in the config file
  4. Ensure workflow documentation is added to contributor guidelines

📋 Checklist Compliance

  • ✅ No Ruby code changes, so RuboCop compliance N/A
  • ✅ All modified files appear to have proper newlines
  • ✅ Changes are focused and don't include unnecessary modifications
  • ✅ CI is passing successfully

🚀 Recommendation

APPROVED - This is a valuable addition that will help maintain documentation quality. The implementation is solid, and the suggested improvements are minor enhancements rather than blockers.

@claude
Copy link

claude bot commented Sep 23, 2025

Code Review for PR #1800: Add automated markdown link checking

✅ Overall Assessment

This PR successfully implements automated markdown link checking to prevent broken documentation links, addressing the issue mentioned in PR #1799. The implementation is well-structured and production-ready.

🎯 Strengths

  1. Comprehensive Configuration

    • Properly ignores localhost, mailto, and specific problematic URLs
    • Smart replacement patterns for GitHub relative links
    • Custom headers for GitHub API to prevent rate limiting
    • Retry logic with fallback delays for resilience
    • Appropriate 20-second timeout
  2. Well-Designed Workflow

    • Triggers on markdown file changes (efficient)
    • Weekly schedule catches external link rot
    • Manual dispatch for on-demand checks
    • Correctly targets docs/ folder
  3. Production Quality

    • Uses pinned action version for stability
    • Proper error handling with retryOn429
    • Appropriate verbosity settings

🔍 Suggestions for Improvement

  1. Add Concurrency Control to prevent multiple simultaneous runs:

    concurrency:
      group: ${{ github.workflow }}-${{ github.ref }}
      cancel-in-progress: true
  2. Extend Coverage - Consider checking:

    • Root README.md
    • CHANGELOG.md
    • CONTRIBUTING.md
  3. Add Status Badge to README:

    [![Check Markdown Links](https://github.com/shakacode/react_on_rails/workflows/Check%20Markdown%20Links/badge.svg)](https://github.com/shakacode/react_on_rails/actions/workflows/check-markdown-links.yml)
  4. Additional Status Codes - Consider adding to aliveStatusCodes:

    • 301, 302 (for redirects)
    • 403 (some GitHub pages return this)

⚠️ Minor Issues

  1. CHANGELOG Update Missing - Per PR checklist, please update CHANGELOG.md
  2. Unrelated Gemfile.lock Change - Version bump (16.0.1.rc.0 → 16.0.1.rc.2) seems unintentional

📊 Test Coverage

Not applicable - this is a CI/CD workflow addition

🔒 Security

No security concerns - workflow uses appropriate permissions and doesn't expose sensitive data

✨ Performance

The workflow is optimized:

  • Only runs when relevant files change
  • Focused on docs/ folder to minimize scan time
  • Retry logic prevents transient failures

✅ Approval Status

Approved with minor suggestions. This is a valuable addition that will help maintain documentation quality. The implementation follows GitHub Actions best practices and directly addresses the broken links issue.

Great work implementing this automated quality check! 🚀


Review conducted per CLAUDE.md guidelines focusing on code quality, potential issues, and best practices.

@justin808 justin808 merged commit ce57aed into master Sep 24, 2025
16 of 17 checks passed
@justin808 justin808 deleted the add-markdown-link-checker branch September 24, 2025 00:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants