Skip to content

fix(lychee): drop the redundant example-domain exclude and add check-links - #772

Merged
kyle-sexton merged 1 commit into
mainfrom
lychee-exclude-retest
Oct 11, 2026
Merged

kyle-sexton merged 1 commit into
mainfrom
lychee-exclude-retest

Conversation

@kyle-sexton

Copy link
Copy Markdown
Contributor

No related issue: follow-up from the lychee online sweep requested by the repository owner.

Summary

Retest of the shared lychee.toml URL excludes after the GitHub-runner online run in claude-code-plugins. One exclude is dropped as redundant; every other exclude stays, because no runner evidence that it passes was obtainable. The README's manual online command now tells standards to skip its own fixtures, and the naming vocabulary gains check-links for the online link-check workflow.

Fix

  • lychee.toml: remove '^https?://example\.(com|org)'. lychee 0.24.2 excludes example.com/.org/.net by default: a config-free lychee --dump --verbose over example.com, www.example.com, example.org and example.net URLs marks all four [excluded], while example.community stays checked (the removed regex would also have hidden that host).
  • components/lychee/lychee.test.sh and fixtures/good/Exclusions.md: two placeholder URLs and three assertions prove the default still excludes them and the config carries no example-domain entry, so a lychee upgrade that changes the default fails the test.
  • components/lychee/README.md: the manual online command notes --exclude-path '(^|/)components/lychee/fixtures/' for standards itself. The fixtures hold placeholder URLs and intentionally broken links that the offline harness reads; a shared exclude_path would reach every consumer, so the exclusion stays on the standards-only command.
  • components/github-actions-conventions/vocabulary.json: add maintenance function check-links (claude-code-plugins maintenance-check-links-online.yml, #7124 there). No existing maintenance function fits: audit-link-check-excludes audits only the private-repo exclude list, while this workflow checks every Markdown link with the network on.

Excludes kept, with why:

  • iso.org 78907 and the two medium.com entries: the claude-code-plugins runner run got 403 from other iso.org and medium.com pages, so the workstation pass recorded in the research does not carry over.
  • docs.genius.com, cursor.com, lib.rs, ntia.gov, w3.org, x.com, LinkedIn, bsky.app, ACM, dev.mysql.com, help.miro.com, isdown.app, npmjs: their URLs are excluded in every run, so no runner result exists, and running a hand-picked URL list on a runner was out of scope for this sweep. Each still carries its recorded verification.

No shared exclude added: the row G logs propose none, and every new exception in claude-code-plugins is cited only there.

Verification

  • bash components/lychee/lychee.test.sh: 101 PASS, 0 FAIL.
  • bash components/lychee/private-repo-inventory.test.sh: 34 PASS.
  • npm run test:github-actions-conventions: pass; npm run lint:github-actions-conventions: 0 findings.
  • Online lychee 0.24.2 over standards' tracked Markdown with the fixtures path excluded, no token: 945 links, 0 errors except five man7.org timeouts (host refusing connections today; a rendering fetch returns the pages, transient outage, no exception) and one gnu.org 429 (answers 429 to the lychee User-Agent intermittently; passed on the runner and on retry in other rows).

Related

🤖 Generated with Claude Code

…links

lychee excludes example.com/.org/.net by default, so the shared
exclude is dead weight; the test now proves the default holds and
the config carries no entry. The README's online command tells
standards to skip its own fixtures, which are test data. The naming
vocabulary gains the maintenance function check-links for the online
link-check workflow.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 11, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-11T16:57:47.663836Z a344685 PR opened
ℹ️ 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" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@claude

claude Bot commented Oct 11, 2026 •

Copy link
Copy Markdown

Claude finished @kyle-sexton's task in 1m 6s —— View job


Security review — /review:security-review

  • Gather context (PR diff, changed files)
  • Review changed files for security-relevant issues
  • Check for instruction-surface deletions (CLAUDE.md/AGENTS.md/rules)
  • Post final findings

No security issues found.

This PR touches only link-checker configuration and test data:

  • lychee.toml — drops a redundant example\.(com|org) exclude regex now that lychee's own default covers those hosts. The old regex had no trailing anchor, so it also incidentally hid example.community; removing it actually tightens link checking (that host is now checked again) rather than loosening anything.
  • components/lychee/README.md — documents a manual, developer-run --exclude-path flag for the standards repo's own test fixtures. Not executed by CI, no injection surface.
  • components/lychee/fixtures/good/Exclusions.md and components/lychee/lychee.test.sh — add placeholder test fixtures/assertions; static strings matched with grep -cF, no untrusted input, no shell injection surface.
  • components/github-actions-conventions/vocabulary.json — adds one static vocabulary entry (check-links) to a linter-enforced allowlist; plain data, no code execution path.

No .github/workflows files, secrets, auth, or trust boundaries are touched. No CLAUDE.md/AGENTS.md/rules/skill/agent/hook files were deleted, narrowed, or softened, so the instruction-surface-deletion lens doesn't apply here.
· Branch: lychee-exclude-retest

@claude

claude Bot commented Oct 11, 2026 •

Copy link
Copy Markdown

Claude finished @kyle-sexton's task in 7m 11s —— View job


Code review complete

  • Gather context (PR diff, changed files)
  • Review changed files against CLAUDE.md / REVIEW.md criteria
  • Adversarially verify candidate findings
  • Post findings / summary

No findings meet this lane's high-signal bar (nothing a careful senior reviewer would block on).

What I checked:

  • lychee.toml — the removed example\.(com|org) exclude has no other literal example\. occurrence left in the file (confirmed by direct read), so the new assert_eq 'config carries no example-domain exclude' '0' "$(grep -cF 'example\.' "$config")" regression guard in lychee.test.sh is sound and won't false-pass.
  • lychee.test.sh — the two new assert_not_contains assertions for example.com/example.org follow the exact idiom already used for every other exclude in this file (--dump output absence proves exclusion); argument order and quoting match the harness's label haystack needle signature.
  • components/github-actions-conventions/vocabulary.json — check-links is schema-valid (check is a listed verb), alphabetically placed under the maintenance stage, and its purpose text correctly cross-references the real audit-link-check-excludes entry. Marking it "in-use" without a matching workflow file in this repo is consistent with existing entries (e.g. reconcile-pr-creation-policy also has no workflow under this repo's .github/workflows/) — vocabulary.json is shared org-wide, and the referenced maintenance-check-links-online.yml lives in claude-code-plugins. The pre-existing check-links job id example in the README/naming-lint fixtures is a different namespace (job ids aren't stage-registered) and doesn't collide.
  • components/lychee/fixtures/good/Exclusions.md and components/lychee/README.md — new prose and fixture lines are internally consistent with the rest of each file.

Not independently verified: the underlying factual claim that lychee 0.24.2 excludes example.com/.org/.net by default (lychee isn't installed in this review sandbox, so I couldn't run lychee --dump). This is the author's claimed verification, not something I confirmed myself — but it's self-checking: if the claim is wrong, the new assert_not_contains assertions in lychee.test.sh fail CI rather than silently passing.

A second independent pass (separate agent, same diff) corroborated these conclusions and found nothing additional.

@github-actions

Copy link
Copy Markdown

claude-security-review has reviewed this pull request through a344685; a later push is reviewed from there.

@github-actions

Copy link
Copy Markdown

claude-review has reviewed this pull request through a344685; a later push is reviewed from there.

@kyle-sexton
kyle-sexton merged commit ef79dad into main Oct 11, 2026
22 checks passed
@kyle-sexton
kyle-sexton deleted the lychee-exclude-retest branch October 11, 2026 17:10
kyle-sexton added a commit that referenced this pull request Oct 11, 2026
…hosts (#775)

No related issue: follow-up to #772 from the lychee online sweep,
approved by the repository owner.

## Summary

A GitHub-runner retest of the shared URL excludes (temporary probe step
in claude-code-plugins run
[38163276512](https://github.com/melodic-software/claude-code-plugins/actions/runs/38163276512),
removed before merge) passed six of them, so they go. Two hosts that
answer a runner's burst with 429 get per-host pacing instead of an
accepted 429.

## Fix

- Dropped (passed lychee 0.24.2 on the runner): the NTIA SBOM report
(the old TLS-trust-store exclude), help.miro.com 31624028247058,
isdown.app/status/anthropic, w3.org WorkingWithTimeZones, host-wide
linkedin.com (its one cited post passed), host-wide x.com (status posts
passed; a made-up status answered 404).
- x.com narrowed: profiles answer 403 to the runner (`x.com/KentBeck`),
so profiles stay excluded with the untested article and terms pages;
status posts are checked again.
- Kept with reasons restated: bsky.app (200 for a made-up post on the
runner too, so a pass proves nothing), the two Medium articles, npmjs,
dev.mysql.com, ACM, ISO, docs.genius.com, cursor.com, lib.rs (all 403 on
the runner).
- `[hosts."testing.googleblog.com"]` and `[hosts."jackrighteous.com"]`:
`concurrency = 1`, `request_interval = "2s"`, the per-host keys in
lychee v0.24.2's `lychee.example.toml` (`[hosts."blog.example.com"]`,
`concurrency`, `request_interval`). The no-`accept` rule stands.
- `lychee.test.sh` and `fixtures/good/Exclusions.md`: the dropped URLs
are now asserted to be checked; x.com profile and article URLs asserted
excluded, a status URL asserted checked.

## Verification

- `bash components/lychee/lychee.test.sh`: 102 PASS, 0 FAIL (the config
with `[hosts]` tables loads in every lychee call there).
- Runner probe results: 11 passes (the 7 URLs behind the six dropped
excludes, 3 bsky.app URLs including a made-up post, and a made-up
claude.ai path), 14 x 403, 1 x 404 (a made-up x.com status).

## Related

- #772, melodic-software/claude-code-plugins#7199 and #7222.

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

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
kyle-sexton added a commit that referenced this pull request Oct 11, 2026
…acing (#776)

No related issue: follow-up to #775 from the lychee online sweep,
approved by the repository owner.

## Summary

Restore the exact help.miro.com exclude that #775 dropped, and delete
the two `[hosts]` pacing tables #775 added, since they did not stop the
429s they were meant to.

## Fix

- `lychee.toml`:
`^https?://help\.miro\.com/hc/en-us/articles/31624028247058/?([?#].*)?$`
is back, with its reason. It passed one GitHub-runner retest, then
answered 403 to lychee on a runner in claude-code-plugins online run
[38171979835](https://github.com/melodic-software/claude-code-plugins/actions/runs/38171979835),
so one pass was not enough evidence to drop it. A workstation gets 200
with lychee's User-Agent.
- `lychee.toml`: deleted `[hosts."testing.googleblog.com"]` and
`[hosts."jackrighteous.com"]`. With them synced, claude-code-plugins run
[38170376310](https://github.com/melodic-software/claude-code-plugins/actions/runs/38170376310)
still got 429 from both hosts. claude-code-plugins#7222 now carries
exact-URL `.lycheeignore` entries for the four cited pages, so the
tables are unused config.
- `components/lychee/lychee.test.sh` and `fixtures/good/Exclusions.md`:
the miro article is asserted excluded, and a sibling article
(`/articles/example`) is asserted still checked; it leaves the
runner-passing list.

## Verification

- `bash components/lychee/lychee.test.sh`: 105 PASS, 0 FAIL.
- `bash components/lychee/private-repo-inventory.test.sh`: 34 PASS.

## Related

- #775, #772, melodic-software/claude-code-plugins#7222.

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

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.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.

1 participant