Problem
The docs pipeline hardcodes guides/ and reference/ in three places, so the three pages under docs/migration/ render at their URLs but are otherwise invisible:
- Navigation — the Starlight sidebar in
astro.config.mjs autogenerates only from .docs-build/guides and .docs-build/reference, so the pages appear in no menu.
- Agent bundles —
listGuideFiles() in scripts/build-llms.ts reads only docs/guides/, so they are absent from llms.txt and llms-full.txt.
- Link checking —
hrefToDocsRelPath() in scripts/doc-links.ts resolves only index.md, agents.md, guides/* and reference/*, returning null for anything else, which validateLinks treats as "not a doc page, skip". The pages are neither validated as link sources nor known as link targets, so "Link check passed" says nothing about them.
00-migration.md and 07-contract-auth.md both link into docs/migration/, so these are reachable and referenced pages that no part of the pipeline accounts for.
The link-checking gap is the one with teeth: five relative .md cross-links between the migration guides were resolving against their own page URL and 404ing on the published site, and no build step flagged it. Those links had the same defect at the pages' previous location, for the same reason.
Fix
Teach the three call sites about docs/migration/: a sidebar group, a listing function feeding the bundles, and migration/ in the link resolver.
These must land together. Adding migration/ to hrefToDocsRelPath() on its own breaks the build — the existing /migration/... links in 00-migration.md and 07-contract-auth.md then resolve to pages absent from the validator's known set, and both source files are strict, so it throws "broken internal link" errors. Verified by experiment.
Also widen the strict predicate in validateLinks to cover migration/, or these pages get warnings where guides get hard errors.
Worth considering
Rather than adding a third hardcoded prefix, the pipeline could derive its sections from what is actually on disk under docs/. That prevents the next new folder from repeating this, at the cost of making sidebar order and bundle grouping implicit.
Problem
The docs pipeline hardcodes
guides/andreference/in three places, so the three pages underdocs/migration/render at their URLs but are otherwise invisible:astro.config.mjsautogenerates only from.docs-build/guidesand.docs-build/reference, so the pages appear in no menu.listGuideFiles()inscripts/build-llms.tsreads onlydocs/guides/, so they are absent fromllms.txtandllms-full.txt.hrefToDocsRelPath()inscripts/doc-links.tsresolves onlyindex.md,agents.md,guides/*andreference/*, returningnullfor anything else, whichvalidateLinkstreats as "not a doc page, skip". The pages are neither validated as link sources nor known as link targets, so "Link check passed" says nothing about them.00-migration.mdand07-contract-auth.mdboth link intodocs/migration/, so these are reachable and referenced pages that no part of the pipeline accounts for.The link-checking gap is the one with teeth: five relative
.mdcross-links between the migration guides were resolving against their own page URL and 404ing on the published site, and no build step flagged it. Those links had the same defect at the pages' previous location, for the same reason.Fix
Teach the three call sites about
docs/migration/: a sidebar group, a listing function feeding the bundles, andmigration/in the link resolver.These must land together. Adding
migration/tohrefToDocsRelPath()on its own breaks the build — the existing/migration/...links in00-migration.mdand07-contract-auth.mdthen resolve to pages absent from the validator's known set, and both source files are strict, so it throws "broken internal link" errors. Verified by experiment.Also widen the
strictpredicate invalidateLinksto covermigration/, or these pages get warnings where guides get hard errors.Worth considering
Rather than adding a third hardcoded prefix, the pipeline could derive its sections from what is actually on disk under
docs/. That prevents the next new folder from repeating this, at the cost of making sidebar order and bundle grouping implicit.