fix(link-check): pin lychee v0.24.2 so --accept-timeouts is recognized - #52
Conversation
lychee-action v2.8.0 installs lychee v0.23.0 by default, which predates --accept-timeouts (added in lychee 0.24.0). The default args pass that flag, so every online link-check run died on a CLI usage error before checking a single link and filed the tracking issue. Pin lycheeVersion to v0.24.2, matching the lychee-offline lane. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017K9RRMdUKD7HLExmHwMXAe
|
Claude finished @kyle-sexton's task in 1m 24s —— View job PR Review
Verdict: LGTM. The fix is correct, well-scoped, and properly documented. What changed
Correctness
CLAUDE.md compliance
No concernsNo security, logic, or maintainability issues. The change is minimal and targeted. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 728d75e850
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
Review caught that lychee-action v2.8.0's installer expects the lychee binary at the archive root, while lychee >= 0.24 tarballs nest it in a subdirectory — the v0.24.2 pin alone would have failed at install time. Master's installer auto-detects the nested binary, so pin the action to master HEAD until the fix ships in a release. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017K9RRMdUKD7HLExmHwMXAe
|
Claude finished @kyle-sexton's task in 2m 27s —— View job PR Review
Verdict: Approve with one operational note. The second commit correctly addresses the Codex-raised archive layout concern. Both root causes are fixed; one risk is worth documenting before merge. What changed across both commits
The final state: CorrectnessBoth problems are accurately diagnosed and fixed together:
Security / CLAUDE.mdThe SHA itself is still pinned (content-addressed, immutable) — the security requirement is met. The deviation from the Operational risk: Dependabot may roll this back to v2.8.0
uses: lycheeverse/lychee-action@e7477775... # master (post-v2.8.0)it cannot parse The comment says "drop back to a release tag once one ships," which is the right long-term intent. Until then, one of these mitigations is worth adding: Option A — Add an explicit ignore to ignore:
- dependency-name: lycheeverse/lychee-action
update-types: ["version-update:semver-patch", "version-update:semver-minor", "version-update:semver-major"]Option B — Add a comment in the grouped Dependabot PR review process noting that lychee-action bumps should be rejected until the comment reads Either approach is acceptable; Option A makes the intent machine-readable and removes the review-time risk. Fix this → No other correctness, security, or maintainability issues found. |
|
Claude finished @kyle-sexton's task in 2m 1s —— View job PR Review
Verdict: LGTM. Both root causes are correctly fixed; the merge-from-main commit brings in no conflicts. One residual operational risk from the prior review remains open. Changes reviewed (commits
|
|
Status: branch updated past #53, all checks green, Codex thread addressed (lychee-action master installer handles the 0.24.x nested-tarball layout) and resolved, Cursor re-approved — mergeable (CLEAN). Ready for squash-merge. Downstream: kyle-sexton/dotfiles has a prepared caller-side PR (pin bump + private-repo lychee excludes, verified locally against lychee 0.24.2 with zero errors) waiting on this merge SHA to close kyle-sexton/dotfiles#92. Agent-side merge attempts here are permission-gated (no human approval on record), so this needs a human (or otherwise merge-authorized) actor. |
|
Claude finished @kyle-sexton's task in 1m 19s —— View job PR Review
Verdict: LGTM. The sync commit brings no conflicts; the fix is correct and complete. ScopeThis sync (commit Fix correctness
The inline comment is accurate: CLAUDE.md compliance
Residual risk: Dependabot rollback (still unmitigated)
Since the step comment explicitly says "drop back to a release tag once one ships," this ignore entry is strictly temporary. If the reviewer cadence is reliable enough to catch a Dependabot rollback, Option B (vigilance at review time) is workable. If you'd prefer machine-readable protection until a tagged release lands, the addition is: Fix this → # dependabot.yml — add under the github-actions update block
ignore:
- dependency-name: lycheeverse/lychee-action
update-types:
- version-update:semver-patch
- version-update:semver-minor
- version-update:semver-major
# Remove when the master SHA is replaced with a release tag.This is optional, not a blocker. No correctness, security, or maintainability issues found in the current diff. |
|
Claude finished @kyle-sexton's task in 0s —— View job I'll analyze this and get back to you. |
## Problem Both scheduled online link-check runs behind the rolling tracking issues did not fail on dead links — every one of this repo's 173 external links resolves (verified with a full-repo online lychee 0.24.2 run against `modules/lychee/lychee.toml`). The runs died before checking anything: `error: unexpected argument '--accept-timeouts' found`. The reusable ci-workflows `link-check.yml` passes default args that rely on `--accept-timeouts` (lychee ≥ 0.24) while leaving lychee-action at its default **lychee v0.23.0**, which also predates the `include_fragments = "full"` config form this repo's ruleset requires (module engine floor 0.24.2+). ## Change 1. **Fixture exclusion (this branch, ready):** the online lane also verifies local file links, so once the version is fixed it would flag `fixtures/lychee/bad/` on every scheduled run and re-open the tracking issue forever. The caller now overrides the called workflow's `args` to add `--exclude-path 'fixtures/[^/]+/bad'`, mirroring the offline lane's exclusion in `ci.yml` (`args` is a single input, so the defaults are restated). Verified locally: with the exclusion, a full online run reports 0 errors. 2. **Pin bump (pending, this PR stays draft until then):** the version fix itself lives in the reusable workflow — melodic-software/ci-workflows#52 (pins `lycheeVersion: v0.24.2` and moves lychee-action past v2.8.0 for the 0.24.x archive layout). That PR is green/CLEAN but not yet merged. Once it lands, this branch gets the repo-wide ci-workflows pin bump to the new SHA (per the convention from #44, which also refreshes the stale `# b6431a1` pin comments left by the Dependabot SHA-only bump) and the PR will be marked ready. ## Verification plan After merge: `workflow_dispatch` the link-check workflow and confirm a green end-to-end run. Closes #13 Closes #54 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_017K9RRMdUKD7HLExmHwMXAe Co-authored-by: Claude Fable 5 <noreply@anthropic.com>


Problem
Every run of the reusable online
link-checkworkflow has been failing before checking a single link:lychee-action v2.8.0 installs lychee v0.23.0 by default, but
--accept-timeoutswas only added in lychee 0.24.0 (lycheeverse/lychee#2063). Since the workflow's defaultargspass that flag, lychee exits with a CLI usage error, the action reports a non-zero exit code, and consumers file/refresh their "Link checker report" tracking issue on every scheduled run (e.g. melodic-software/.github#6) without any links actually being checked.Fix
Pin
lycheeVersion: v0.24.2on the lychee-action step — the same lychee version thelychee-offlinelane installs. A comment at the pin records that this site sits inside a workflow, sotool-version-drift-check(which reads action-input defaults) does not watch it; bump it together withlychee-offline'sversiondefault.Verification
--accept-timeoutsis accepted and the check runs end to end (0.23.0 rejects it; 0.24.0 release notes confirm the flag's introduction).lycheeVersion: v0.24.2to thelychee-v0.24.2release tag for modern versions, so the pinned value downloads correctly.actionlintandtyposclean on the changed file.Consumers pinned to an older SHA still carry the broken default and need a pin bump (melodic-software/.github follows in a separate PR closing its tracking issue).
🤖 Generated with Claude Code
https://claude.ai/code/session_017K9RRMdUKD7HLExmHwMXAe
Note
Low Risk
CI-only advisory link-check workflow; no application runtime, auth, or data-path changes.
Overview
Fixes the reusable link-check workflow so it can run at all instead of dying on a CLI error before checking links.
The lychee-action step moves from v2.8.0 to a master SHA (post-v2.8.0) so the installer works with lychee ≥ 0.24 tarballs and can install a binary that understands
--accept-timeouts, which the workflow’s defaultargsalready pass.lycheeVersion: v0.24.2is set explicitly to match the lychee-offline lane and keep runs deterministic; comments note bumping both together and that drift checks only watch the offline action default.Reviewed by Cursor Bugbot for commit 628a6b7. Bugbot is set up for automated code reviews on this repo. Configure here.