ci: validate every internal anchor in the built site - #38
Conversation
|
Warning Review limit reached
Next review available in: 6 minutes Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Plus Run ID: ⛔ Files ignored due to path filters (1)
📒 Files selected for processing (2)
Comment |
2195201 to
9d59b2b
Compare
|
@coderabbitai review |
|
9d59b2b to
ca5a0c3
Compare
Code review — 4 personasScope: The review changed what this PR claims more than what it does. Three The premise was wrong, then wrong in the other directionThe original comment said against That looked like grounds to drop this step, and I filed <a href="user-guide/dashboard/#raw-html-no-such-anchor">raw</a>[abs](/user-guide/dashboard/#abs-no-such-anchor)
Both repos have zero links of either form today, so the extra coverage is real "1905 anchor links" is not a coverage figureClassifying what the checker counts: 1890 same-page fragments, 15 cross-page. Fixed
Not fixed, and whyThe dependency sits in Nothing makes this block a merge (testing, 0.90, pre-existing).
CoverageThe failing path has never run in CI — only locally, reproduced independently by Pre-existing, unrelated, worth knowing: VerdictReady with a decision. Nothing here is broken — CI is green, the step catches |
Anchors are generated from heading text, so editing a heading silently breaks
every link pointing at it — including links on pages nobody touched. This adds
check-anchorsto the existing build job, fromhalos-org/docs-tools pinned to
v0.1.0inpyproject.toml, so the same command runs here and on a laptop.print_page/is excluded. It is the single-page export frommkdocs-print-site-plugin, which rewrites every fragment into ids of its own.
Measured on this branch: all 690 links the exclusion drops are page-local
fragments of that one generated page, so no authored link is silenced, and the
36 content pages are clean either way.
What this catches, and what it does not
mkdocs 1.6 has
validation.links.anchors, which this repo does not enable. Itis worth knowing where the two differ before deciding this step earns its place.
validation.links.anchorscheck-anchors<a href>Both were measured on this branch. Renaming
## Certificate warningingetting-started/first-boot.mdis caught by both, and mkdocs gives the bettermessage — it names
user-guide/troubleshooting.mdand the source link, wherethe checker names
user-guide/troubleshooting/index.html. But a raw<a href="user-guide/dashboard/#no-such-anchor">and a root-absolute[abs](/user-guide/dashboard/#no-such-anchor)both pass mkdocs with--strictand
anchors: warn, and both fail here.This repo currently has zero of either form, so today the extra coverage is real
but unexercised. Tracked as
halos-org/docs-tools#13,
which also covers the checker's docstring still claiming mkdocs validates
nothing.
On the numbers
The step reports "Checked 1905 anchor links across 36 pages". That is not a
coverage figure: 1890 of the 1905 are same-page fragments — Material's heading
permalinks, page table of contents and sidebar navigation, generated from the
headings they point at and therefore unable to break independently. 15 are
cross-page, and those are what the step protects.