You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Part of the Documentation Site workstream (see the epic) · decided in ADR-0009 · specified in the roadmap. Depends on docs-s1; independent of docs-s2 in principle, but land it after.
Publishes the manual on the web, versioned, with a pipeline that works today when only dev/ exists and grows a version directory each time the maintainer tags a release.
Hard constraints — read first
Nothing in this sprint may create a tag or a release. The roadmap's release philosophy is explicit: only the maintainer publishes; automation and AI agents never tag. Workflows react to tags (on: push: tags:) and nothing more.
No tags exist in this repository after the roadmap reset. The pipeline must therefore be correct and demonstrable with dev/ alone — a version-selector that only works once two versions exist is not acceptable.
The maintainer owns every AWS action. This sprint delivers amplify.yml, the workflows, and a runbook. Do not attempt to create, configure, or authenticate an Amplify app, a domain, or any AWS resource. Do not add AWS credentials to the repo.
Site CI is Linux-only; the C++/CMake build stays Node-free.
Deliverables
1. build:web
Standard Starlight output with search (Pagefind) enabled, built with a configurable --base=/<segment>/ so the same source builds correctly under /dev/, /v0.1.0/, /latest/, or a scratch prefix.
2. Assembly workflows
GitHub Actions assembling the published tree:
/ → redirect to latest/ (or dev/ while no release exists)
/versions.json → the version list the dropdown reads
/dev/ → built from main
/vX.Y.Z/ → built from each release tag
/latest/ → copy of the highest semver version
main push → rebuild dev/.
Release tag push → build vX.Y.Z/, recompute latest/ as the highest semver (not "most recent tag"), regenerate the root redirect and versions.json.
The assembled tree lives on a publishing branch (docs-published). Assembly must be idempotent and must not lose existing version directories when only one is rebuilt.
The root redirect points at latest/ when a release exists and dev/ otherwise. Verify the no-release case works, since that is today's state.
3. Version dropdown
A small header control reading the root versions.json. Switching versions preserves the current page path when that path exists in the target version, and falls back to that version's landing page when it does not (a page added after v0.1.0 will not exist in v0.1.0 — do not produce a 404).
4. Dry-run path
A clearly-marked workflow_dispatch entry point taking a version input and writing to a scratch prefix, so the tag-driven flow is demonstrable and reviewable before any real tag exists. Label it unmistakably as a dry run in the workflow name and in its output, and make sure it cannot write over dev/, latest/, versions.json, or the root redirect.
5. amplify.yml + runbook
amplify.yml configured for serving the prebuilt branch — Amplify does not build from source (rejected in ADR-0009: tag-driven multi-version assembly is Actions territory, and building in Amplify would move build logic into a console UI).
A maintainer runbook in docs/ covering: creating the Amplify app against the prebuilt branch, the connection/permissions it needs, domain notes, the end-to-end flow from git push to a live page, how to verify a deploy, and what to do when an assembly run fails. Written for the maintainer to follow without reading the workflow YAML.
Acceptance
dev/ assembly runs green from main and produces a tree that serves correctly (root redirect → dev/, search working, base path correct).
The workflow_dispatch dry run demonstrates versioned assembly into a scratch prefix, including latest/ recomputation and versions.json regeneration, without touching the real tree.
The version dropdown reads versions.json, preserves the current path where it exists, and degrades to the landing page where it does not.
No workflow creates a tag or a release — state this explicitly in the PR and show it in the workflow triggers.
The runbook is complete enough that the maintainer can create the Amplify app from it alone.
C++ jobs untouched.
Out of scope — do not touch
Anything AWS-side: creating the Amplify app, domains, certificates, credentials.
Creating a tag, a release, or a version of RoadMaker.
The local reader build, packaging, or the Help-menu action (docs-s2).
The authoring guide and dependency cadence (docs-s4).
Page structure and tiering (docs-s1).
Analytics, comment systems, or any third-party script on the site.
Part of the Documentation Site workstream (see the epic) · decided in ADR-0009 · specified in the roadmap. Depends on
docs-s1; independent ofdocs-s2in principle, but land it after.Publishes the manual on the web, versioned, with a pipeline that works today when only
dev/exists and grows a version directory each time the maintainer tags a release.Hard constraints — read first
on: push: tags:) and nothing more.dev/alone — a version-selector that only works once two versions exist is not acceptable.amplify.yml, the workflows, and a runbook. Do not attempt to create, configure, or authenticate an Amplify app, a domain, or any AWS resource. Do not add AWS credentials to the repo.Deliverables
1.
build:webStandard Starlight output with search (Pagefind) enabled, built with a configurable
--base=/<segment>/so the same source builds correctly under/dev/,/v0.1.0/,/latest/, or a scratch prefix.2. Assembly workflows
GitHub Actions assembling the published tree:
mainpush → rebuilddev/.vX.Y.Z/, recomputelatest/as the highest semver (not "most recent tag"), regenerate the root redirect andversions.json.docs-published). Assembly must be idempotent and must not lose existing version directories when only one is rebuilt.latest/when a release exists anddev/otherwise. Verify the no-release case works, since that is today's state.3. Version dropdown
A small header control reading the root
versions.json. Switching versions preserves the current page path when that path exists in the target version, and falls back to that version's landing page when it does not (a page added after v0.1.0 will not exist in v0.1.0 — do not produce a 404).4. Dry-run path
A clearly-marked
workflow_dispatchentry point taking a version input and writing to a scratch prefix, so the tag-driven flow is demonstrable and reviewable before any real tag exists. Label it unmistakably as a dry run in the workflow name and in its output, and make sure it cannot write overdev/,latest/,versions.json, or the root redirect.5.
amplify.yml+ runbookamplify.ymlconfigured for serving the prebuilt branch — Amplify does not build from source (rejected in ADR-0009: tag-driven multi-version assembly is Actions territory, and building in Amplify would move build logic into a console UI).A maintainer runbook in
docs/covering: creating the Amplify app against the prebuilt branch, the connection/permissions it needs, domain notes, the end-to-end flow fromgit pushto a live page, how to verify a deploy, and what to do when an assembly run fails. Written for the maintainer to follow without reading the workflow YAML.Acceptance
dev/assembly runs green frommainand produces a tree that serves correctly (root redirect →dev/, search working, base path correct).workflow_dispatchdry run demonstrates versioned assembly into a scratch prefix, includinglatest/recomputation andversions.jsonregeneration, without touching the real tree.versions.json, preserves the current path where it exists, and degrades to the landing page where it does not.Out of scope — do not touch
docs-s2).docs-s4).docs-s1).Epic: #344