Conversation
Zensical reads mkdocs.yml directly, so most of the setup carries over unchanged (macros via main.py, the analytics template override, custom CSS, !ENV, deployment). Three gaps needed real changes: - literate-nav is not supported yet: replace _navigation.md with an explicit nav in mkdocs.yml. The CLI reference pages are generated by apppack docgen and not committed, so their nav entries are generated too (scripts/generate_cli_nav.py, run by make cli-docs and CI). - validation.links.absolute_links is ignored: convert the six absolute .md links to relative links so they resolve in the built site. - exclude_docs is ignored: the nav file would leak into the build and search index; the explicit nav removes the need for it. The rendered navigation was verified to be identical to the current production site. Dependencies are reduced to just zensical; the emoji extension moves to the zensical.extensions namespace.
blsmth
left a comment
There was a problem hiding this comment.
Built this against main with CLI 4.8.2 and probed the branch rather than reading the diff. It holds up — merging, with follow-ups below.
Verified: 112 pages, identical set to main, nav label-for-label identical, all 6 link conversions at the correct depth, macro/analytics/canonical/admonitions/tabs/emoji/CSS all match.
One correction: validation isn't ignored. config.py:616-651 maps not_found and anchors to zensical's own checks, both defaulting to True — I planted a bad anchor and got a warning. Link checking is actually broader than before; only the absolute_links rewrite is unsupported, which is why the 6 conversions were needed. Worth fixing in the description. (Same for macros — it works without mkdocs-macros-plugin via a built-in shim.)
Follow-ups I'll take:
cli-docsas a prereq ofbuild/run— on a fresh clonemake buildexits 0 and renders 84 CLI nav entries as raw.mdhrefs against pages that don't exist. Nav isn't validated, so no warnings.--strictonmake build— needs #1 first, or it fails a fresh clone for the wrong reason.- Nav-omission check in CI — orphan pages build silently now that literate-nav's globs are gone. Passes 112/112 today.
- Nits:
python3bypasses the venv; missingencoding="utf-8"; unknown plugins fail silently, which is what made literate-nav break quietly.
Non-blocking: the committed CLI nav block will dirty mkdocs.yml for anyone running make cli-docs with a newer CLI. CI regenerates so prod is safe — intentional, or would a gitignored include be cleaner?
Nice cleanup on the dependency tree, and thanks for diffing the nav against production.
Switches the docs build from Material for MkDocs to Zensical (v0.0.57), the successor project from the same team.
What carries over unchanged
Zensical reads
mkdocs.ymldirectly, so most of the setup just works:macrosplugin, including our customapppack_version()macro frommain.pytheme_overrides/main.htmlanalytics block (Plausible + Crisp)!ENVforSITE_URLpublic/, so the S3 + CloudFront flow is untouchedWhat needed real changes
src/_navigation.mdwith an explicitnav:inmkdocs.yml. The CLI reference pages are generated byapppack docgenand gitignored, so their nav entries are generated alongside them:scripts/generate_cli_nav.pyrewrites a marked block inmkdocs.yml, wired intomake cli-docs(which CI now calls).validation.links.absolute_links: relative_to_docsis ignored — absolute.mdlinks would ship as literal broken hrefs. Converted the six affected links to relative links.exclude_docsis ignored — the nav file leaked into the build and search index; the explicit nav removes the need for it.Also: dependencies reduced to just
zensical; the emoji extension moves from thematerial.extensionsto thezensical.extensionsnamespace.Verification
zensicalzensical servesmoke-tested (note: its port flag is-a localhost:PORT, not--port)Caveat
Zensical is pre-1.0 and moving quickly; the lockfile pins 0.0.57. Expect the occasional adjustment on future upgrades until 1.0.