docs: backfill the 2.1.0 docs version and guard release snapshots - #287
Merged
Conversation
The docs site serves the current package version live (lastVersion: current) and offers frozen snapshots of prior releases in the version dropdown. 2.1.0 was released without cutting a docs snapshot, so it never appeared in the dropdown; 2.1.1 then shipped as the live current version, leaving a gap. Freeze 2.1.0 from the current docs tree (its content is unchanged since the 2.1.0 release) with the standard docusaurus docs:version flow, including the generated Python and TypeScript API reference so the snapshot matches a real 2.1.x build. versions.json now lists 2.1.0 ahead of the legacy 2.0.0 suffix; the legacy generator preserves non-legacy versions at the front.
2.1.0 shipped without a frozen docs version because the release procedure never cut one, and nothing caught the gap. Close it from both ends. Add check:release-snapshots, wired into the docs workflow: it enumerates the released python/v* tags and fails if any (other than the live current package version) is absent from docs/versions.json and the legacy manifest. Document the missing step in RELEASING.md so each release freezes the outgoing docs version with docusaurus docs:version before the new version takes over as current.
nicklambourne
force-pushed
the
docs/backfill-2.1.0-and-guard
branch
from
August 17, 2026 13:19
620084a to
81510f3
Compare
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.
Why
The docs site serves the current package version live (
lastVersion: "current",labelled from
python/pyproject.toml) and lists every earlier release as afrozen snapshot in the version dropdown. Cutting those snapshots is a manual
docusaurus docs:versionstep — and nothing in the release procedure or CI everperformed it. So when 2.1.0 was released, no snapshot was frozen; 2.1.1
then shipped as the live current version, and 2.1.0 silently disappeared from the
dropdown (it was never in
docs/versions.json, and it is newer than the legacy2.0.0suffix the legacy porter manages).Part 1 — Backfill the 2.1.0 snapshot
2.1.0from the current docs tree (its content is unchanged since the2.1.0 release:
git diff --quiet python/v2.1.0 HEAD -- docs/docsis empty)using the standard
docusaurus docs:version 2.1.0flow.pnpm generateplus the typedoc build step), so the snapshot carries a real bilingual 2.1.x
reference — the generated pages are gitignored under
docs/docs/but arecommitted inside
versioned_docs/version-2.1.0/.docs/versions.jsonnow lists2.1.0ahead of the frozen legacy suffix. Thisis exactly the shape the legacy generator preserves:
write_registered_versionskeeps non-legacy versions at the front (
preserved + registered), so thesnapshot is stable under regeneration.
No legacy version, the legacy manifest, or any existing
versioned_docs/versioned_sidebarsentry was touched.Part 2 — Close the process gap
RELEASING.md— added a first step to the coordinated release procedure:freeze the outgoing docs version with
docusaurus docs:version <outgoing>before bumping, and explained the
lastVersion: currentmodel (the latestrelease is live; each release freezes the previous version).
docs/scripts/check_release_snapshots.mjs(new) +check:release-snapshotsscript, wired into
.github/workflows/docs.yml— enumerates the releasedpython/v*tags and fails if any, other than the current package version, ismissing from
docs/versions.jsonor the legacy manifest. Dependency-lightNode, matching the neighbouring
check:*.mjsscripts; the workflow alreadychecks out with
fetch-depth: 0so the tags are present.With 2.1.0 backfilled the guard passes (2.1.1 is the current live version, so
exempt); it fails loudly for any future release that forgets its snapshot.
Verification
pnpm --filter @slackblocks/docs buildsucceeds (Python + TS reference,Docusaurus build, TS API rendering, legacy fixture, legacy contract).
git diff --exit-code -- docs/legacy/manifest.json docs/versioned_docs docs/versioned_sidebars docs/static/img/legacyreturns 0.check:release-snapshotspasses now, and fails with exit 1 (naming2.1.0)when the version is removed from
versions.json.version-2.1.0snapshot, its sidebar, theversions.jsonline, and the Part 2 files.🤖 Generated with Claude Code