feat(docs): check external links on a schedule, and fix the nine that were dead - #44
Merged
Conversation
… were dead The neptune.ai breakage in #39 was found by a reader, not by the repository. A course is mostly links to other people's work, and nothing here noticed when one of them rotted. A full lychee run over the README and every chapter found nine genuinely dead links besides the neptune ones: - three of this project's own MLOps Community articles, which moved to /blog/<slug> when that site restructured - Microsoft Learn's VS Code module, VS Code Live Share, Jupyter Book's cell hiding page, ZenML's starter guide, the OpenRAIL announcement, and Marquez, all moved or renamed - Censius, whose TLS handshake now fails outright; the two explainability definitions it backed now point at Molnar's Interpretable Machine Learning `check:links` is deliberately NOT part of `check`. The first run reported 63 failures against 706 unique URLs, and only 9 were real: 37 were HTTP 429 and 14 were bot-blocking 403s from hosts that serve a reader fine. A gate that cries wolf 85% of the time teaches people to ignore it. It runs monthly and on demand from links.yml instead, with a .lycheeignore for the hosts that refuse scanners and 429 accepted as proof a host is alive rather than evidence it is broken. The whole set now reports 0 errors.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Follow-up to #43.
Why
#39 was a reader telling us a link was dead. A course is mostly links to other people's work, and nothing in this repository noticed when one rotted. So I ran the check we did not have.
A full
lycheesweep over the README and every chapter found nine genuinely dead links beyond the neptune ones — including three of this project's own MLOps Community articles.What was dead
mlops.community/<slug>/blog/<slug>docs.microsoft.com/.../use-vscodecode.visualstudio.com/learn/collaboration/live-sharevisualstudio.microsoft.comjupyterbook.org/interactive/hiding.htmldocs.zenml.io/user-guide/...user-guide→user-guideslicenses.ai/blog/.../bigscience-open-rail-m-licensemarquezproject.github.iomarquezproject.aicensius.ai(2 links)Why
check:linksis not incheckThe first run reported 63 failures against 706 unique URLs, and only 9 were real: 37 were HTTP 429 and 14 were bot-blocking 403s from hosts that serve a reader perfectly well. Putting that in the commit gate would teach everyone to ignore a red check — the opposite of what a gate is for.
So it runs monthly and on demand from
links.yml, with:.lycheeignorefor hosts that refuse scanners (Medium, Read the Docs, Reddit, LinkedIn) and for illustrativelocalhostURLs in the prose;--accept 200..=299,429, because a host that rate-limits a scanner is a host that is up — treating that as a failure reports the opposite of what the check exists to find.Test plan
mise run check:links— 0 errors across 706 unique links (was 63).mise run all— exit 0.zizmorclean on the new workflow.