Skip to content

Docs: pages under docs/migration/ fall out of the docs pipeline #1674

Description

@quietbits

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.

Activity

  1. self-assigned this
    on Aug 20, 2026
  2. moved this to Backlog (Not Ready) in DevXon Aug 20, 2026
  3. moved this from Backlog (Not Ready) to Todo (Ready for Dev) in DevXon Aug 20, 2026
  4. roebee commented on Aug 23, 2026

    @roebee

    Two questions:

    1. The body's fix hardcodes docs/migration/ in three places. The "Worth considering" section derives sections from the disk instead. Which is the target?
    2. If derived: how is sidebar order defined (folder name sort)? And how are the llms.txt groups named?
    3. Confirm this lands as one PR (the body says the parts must land together).
  5. quietbits commented on Aug 24, 2026

    @quietbits
    ContributorAuthor

    @roebee , we have most of the docs pipeline set up, and this would follow conventions we already have.

  6. moved this from Todo (Ready for Dev) to Done in DevXon Sep 18, 2026
  7. added a commit that references this issue on Sep 25, 2026
    3033dbc
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

  • Status
    Done

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions