🤖 Generated by the Agentic Engineer
Evidence
The link checker reaches the public internet from a shared GitHub runner, and as a hard gate it
reddens pull requests for other people's transient network conditions. Measured across four
consecutive runs on #2776:
| Run |
Failing links |
| 3 |
https://fluxcd.io/ — connection reset |
| 4 |
none |
| 5 |
https://kubernetes.io/docs/reference/access-authn-authz/authentication/ and one more kubernetes.io path — connection errors |
Every one of those hosts answered 200 from a laptop within seconds of the failure. Run 4 added
--max-retries 5, --retry-wait-time 3 and --max-concurrency 8 and run 5 still flaked, so this is
not a tuning problem — it is what an internet-dependent check does on shared infrastructure.
#2776 therefore moves SPELL_LYCHEE into DISABLE_ERRORS_LINTERS: it keeps running and keeps
reporting every finding on every pull request, but does not fail the build.
Why not just ignore the hosts
Because the checker earns its keep. In this same pull request it found a genuinely dead link —
dexidp.io had moved a page under /docs/configuration/ — which was fixed rather than ignored. Adding
live sites to .lycheeignore would stop checking them for real, which is the opposite of what is
wanted.
What would make it gate again
Something that separates "this link is broken" from "this runner could not reach the internet just
now". Options worth weighing:
- lychee's cache (
--cache, with a max age) so a link verified recently is not re-fetched, which
cuts both flake and runtime;
- retrying only the failing set at the end of a run rather than inline;
- treating connection-class errors as warnings and status-code errors as failures, if lychee can
express that.
Acceptance criteria
Rough size: small. Blocked by #2776.
Evidence
The link checker reaches the public internet from a shared GitHub runner, and as a hard gate it
reddens pull requests for other people's transient network conditions. Measured across four
consecutive runs on #2776:
https://fluxcd.io/— connection resethttps://kubernetes.io/docs/reference/access-authn-authz/authentication/and one morekubernetes.iopath — connection errorsEvery one of those hosts answered 200 from a laptop within seconds of the failure. Run 4 added
--max-retries 5,--retry-wait-time 3and--max-concurrency 8and run 5 still flaked, so this isnot a tuning problem — it is what an internet-dependent check does on shared infrastructure.
#2776 therefore moves
SPELL_LYCHEEintoDISABLE_ERRORS_LINTERS: it keeps running and keepsreporting every finding on every pull request, but does not fail the build.
Why not just ignore the hosts
Because the checker earns its keep. In this same pull request it found a genuinely dead link —
dexidp.io had moved a page under
/docs/configuration/— which was fixed rather than ignored. Addinglive sites to
.lycheeignorewould stop checking them for real, which is the opposite of what iswanted.
What would make it gate again
Something that separates "this link is broken" from "this runner could not reach the internet just
now". Options worth weighing:
--cache, with a max age) so a link verified recently is not re-fetched, whichcuts both flake and runtime;
express that.
Acceptance criteria
SPELL_LYCHEEis removed fromDISABLE_ERRORS_LINTERS.Rough size: small. Blocked by #2776.