Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help


id: ADR-0036 title: Publish the documentation as an mdBook on GitHub Pages status: accepted date: 2026-09-13 deciders: [paul-heyse] level: decision principles: [DM-55, DM-49] blueprint: [§0.1, §0.3] review: not-required: a documentation-tooling decision; neither review raised a finding against it evidence: Proposed supersedes: [] superseded-by: null revisit: The Python package grows a public surface that needs generated API documentation (register row R-14), or the book outgrows a single SUMMARY.md verification: docs / build (adr.py index --check, mdbook build docs, lychee --offline); docs / deploy on main


ADR-0036: Publish the documentation as an mdBook on GitHub Pages

Context

The repository’s authority lives in Markdown: the blueprint, the charter, the reviews, the capability maps, the decision records. A reader needs one navigable surface, and the ADR index has to be generated rather than hand-maintained.

Scope

Binds the documentation tool, the site source layout and the build gate. Rust API documentation is cargo doc and is copied in when the artifact exists; Python API documentation is deferred.

Drivers

The source is already Markdown; the book must build without the Rust extension so docs / build stays cheap; internal links must be checked, because a docs site with broken links is worse than a directory listing.

Options

mdBook — selected: Markdown in place, SUMMARY.md as the one navigation authority, a cargo binstall-able pinned binary. MkDocs or Sphinx — rejected: a Python environment on the docs path for a project whose docs are not Python. A directory of files on GitHub — rejected: no link checking and no generated index.

Outcome

mdBook with docs/book.toml (src = ".") and docs/SUMMARY.md, deployed to GitHub Pages from main. The ADR block in SUMMARY.md is generated by scripts/adr.py index between <!-- adr:begin --> and <!-- adr:end -->.

Consequences

Every document that should be readable must be listed in SUMMARY.md; docs/generated/ is committed so the book never needs the extension module built.

Compensating controls

docs / build runs adr.py index --check before mdbook build, so a stale index fails the PR rather than the deploy; lychee --offline checks internal links.

Confirmation

docs / deploy uses actions/deploy-pages from main only; the built book is gitignored.

Pros and cons

mdBook’s single SUMMARY.md is a bottleneck for a large site; it is also the reason nothing can be published unlisted.

More information

Blueprint §0.1, §0.3 (reading guide); docs/book.toml; docs/SUMMARY.md; register row R-14.

Status history

  • 2026-09-13 — accepted with the repository-seeding pull request (backfilled from blueprint revision 3).