Skip to content

Feat/documentation channels - #48

Merged
kieronlanning merged 4 commits into
mainfrom
feat/documentation-channels
Nov 3, 2026
Merged

kieronlanning merged 4 commits into
mainfrom
feat/documentation-channels

Conversation

@kieronlanning

Copy link
Copy Markdown
Contributor

No description provided.

Aggregate each project's documentation from up to two git refs (ADR 0009):
a `live` channel for the latest non-prerelease release, served at the
canonical /docs/<id>/ URLs, and a `prerelease` channel served at
/docs/<id>/prerelease/.

- manifest `docs.channels` with ref tokens (`default`, `latest-stable`,
  `latest-prerelease`, or an explicit branch/tag) and optional per-channel
  layout overrides; omitted `channels` keeps the single-channel behaviour
- docs cache schema 2 (`projects[].channels[]`); the mirror gains a channel
  directory for non-default channels and every consumer walks it
- sidebar groups per channel, in-page switcher and prerelease notice;
  tag-pinned pages link to the file at that tag and are not flagged stale
- promotion is automatic: a prerelease channel is withheld once a stable
  GitHub release or NuGet version catches up with the prerelease line, and
  returns by itself with the next prerelease
- retired channel URLs redirect to the live page with the same slug
  (static meta refresh, canonical, noindex, kept out of the sitemap,
  discover.json, llms bundles and the search index)
- catalogue guard: channel blockers/advisories, plus doc mirror and
  discovery checks that understand channel directories
- ZodSharp: live documentation pinned to v2.4.2, prerelease from main
main already carries the documentation-channel work (PR #47); this merge keeps the branch's Agent Skills changes (ADR 0010) on top of it and resolves the add/add conflicts in AGENTS.md, README.md, src/scripts/data-sync.ts and src/src/lib/manifest/schema.ts by keeping both sides.
The release index is memoized, and `just data-sync` populates it inside the
release fetch itself: `fetchReleaseData` resolves the project list through
`loadProjects`, which snapshots `repos` before the freshly fetched cache is
written. In a clean checkout (CI) that snapshot is the committed fixture, so the
docs mirror was aggregated from fixture versions while `just check-projects`
read the new cache: ZodSharp publishes 2.4.2 while the mirror still believed
2.1.0, so the (correctly withheld) prerelease channel was reported as a missing
channel and failed the build.

Writes now go through `publishReleaseData`, which writes the cache and refreshes
the memo together, and `resetReleaseIndex` exposes the invalidation the runtime
needs. A unit test pins the memo contract and fails if a script writes the cache
directly again.
@kieronlanning
kieronlanning merged commit 46fdb0e into main Nov 3, 2026
1 check passed
@kieronlanning
kieronlanning deleted the feat/documentation-channels branch November 3, 2026 14:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant