Skip to content

feat(link-health): stdlib Python link checker as default (was lychee) - #24

Draft
jimcadden wants to merge 1 commit into
rossoctl:mainfrom
jimcadden:feat/stdlib-link-checker
Draft

jimcadden wants to merge 1 commit into
rossoctl:mainfrom
jimcadden:feat/stdlib-link-checker

Conversation

@jimcadden

Copy link
Copy Markdown
Contributor

Summary

Closes #3. Vendored side of the lychee → stdlib Python link checker switch, built from rossoctl/automation's feat/stdlib-link-checker branch (rossoctl/automation#123).

  • link-check.py joins the vendored engine set (scripts/vendor-engine.sh extras, with regression-test coverage: copy, stamp listing, missing-source failure).
  • Engine updates land with it: link-health-scanner.sh (LINK_CHECKER toggle, unchecked split/reporting, no auto-close of unchecked previously-broken links, shadow mode), extract-broken-links.sh (unchecked status token), automation-health-dashboard.sh (unchecked count + top-hosts rows), plus doc-drift-precheck/pr-review-fixer updates from automation main.
  • skills/link-health-scanner/SKILL.md rewritten for the python-default contract: prerequisites (python3 >= 3.8, lychee opt-in), LINK_CHECKER, the unchecked egress-refusal bucket (never opens or auto-closes issues), LINK_HEALTH_SHADOW_OUT shadow mode, and the .lychee.toml subset (exclude, exclude_path, accept).
  • skills/automation-health-dashboard/SKILL.md notes the new unchecked rows; CHANGELOG gets an Unreleased entry.

Why the vendored repoman-setup.sh header changed back

The doc-drift fixer's #22 edit documented set-requirements in the vendored copy's header — but vendored bytes must track the engine source, so this vendoring reverts it. The fix lands at the source in rossoctl/automation#141 (wording matches, so the next vendoring converges the copies byte-for-byte).

Validation

  • bash tests/test-vendor-engine.sh: all checks pass (28-file stamp, link-check.py copy + stamp listing).
  • python3 skills/repoman/scripts/link-check.py --help: runs from the vendored location.
  • Vendored bytes verified identical to the automation source (diff per file).
  • shellcheck --severity=warning clean on the changed tooling; bash -n clean.
  • Automation-side: 52 unit tests + link-health-unchecked e2e green on the source branch (feat(link-health): stdlib Python link checker as default (was lychee) automation#123).

Before merging

Assisted-By: Claude Code

Vendor the engine from rossoctl/automation (feat/stdlib-link-checker,
PR rossoctl/automation#123): link-check.py joins the vendored set
(scripts/vendor-engine.sh extras + regression-test coverage), and the
scanner, extractor, and automation-health dashboard updates land with
it. LINK_CHECKER=python is the default, so link-health needs only
python3/gh/jq/bash and runs on a basic agent image; egress-proxy
refusals are classified as unchecked and never open or auto-close
issues.

Rewrite the link-health-scanner SKILL.md for the python-default
contract (link checker selection, unchecked bucket, shadow mode,
.lychee.toml subset) and note the dashboard's unchecked rows.

The vendored repoman-setup.sh header reverts the doc-drift fixer's rossoctl#22
edit: vendored bytes must track the engine source, and the set-requirements
header fix lands at the source in rossoctl/automation#141 instead.

Closes rossoctl#3

Assisted-By: Claude (Anthropic AI) <noreply@anthropic.com>
Signed-off-by: Jim Cadden <jcadden@ibm.com>
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.

link-health: replace lychee with a stdlib Python link checker

1 participant