Skip to content

chore: migrate docs build from MkDocs to Zensical#330

Merged
Aureliolo merged 2 commits intomainfrom
chore/migrate-mkdocs-to-zensical
Mar 12, 2026
Merged

chore: migrate docs build from MkDocs to Zensical#330
Aureliolo merged 2 commits intomainfrom
chore/migrate-mkdocs-to-zensical

Conversation

@Aureliolo
Copy link
Copy Markdown
Owner

Summary

  • Replace mkdocs-material==9.7.5 with zensical==0.0.26 — MkDocs is unmaintained since Aug 2024, Material entered maintenance mode; Zensical is the designated successor by the same team (squidfunk)
  • Update CI workflows (pages.yml, pages-preview.yml) to use zensical build--strict deferred until zensical/backlog#72 ships
  • Update all documentation references across CLAUDE.md, README.md, decisions.md, scripts, configs, and skill files
  • No changes to mkdocs.yml (Zensical reads it natively), no content/markdown changes, no theme changes

Test plan

  • uv sync --group docs resolves cleanly (zensical installed, mkdocs-material removed)
  • uv run python scripts/export_openapi.py succeeds
  • uv run zensical build completes (12.86s, all pages generated)
  • _site/docs/index.html exists
  • _site/docs/api/core/index.html exists (mkdocstrings + griffe-pydantic output)
  • CI passes (ruff, mypy, pytest unaffected — no Python source changes)
  • Pages workflow builds successfully on merge

Review coverage

Pre-reviewed by 2 agents (comment-analyzer, docs-consistency). 5 findings total, 2 valid and implemented, 3 correctly dismissed.

Closes #329

MkDocs has been unmaintained since August 2024 and Material for MkDocs
entered maintenance mode. Zensical is the designated successor by the
same team (squidfunk), reads mkdocs.yml natively, and is a drop-in
replacement.

- Replace mkdocs-material==9.7.5 with zensical==0.0.26
- Update CI workflows to use `zensical build` (no --strict until
  zensical/backlog#72)
- Update all documentation references across 11 files
- mkdocstrings + griffe-pydantic unchanged (separate plugin ecosystem)

Closes #329
Pre-reviewed by 2 agents, 2 findings addressed:
- Remove stale "MkDocs" from custom_dir reference
- Add "(Zensical reads this natively)" to mkdocs.yml config line
Copilot AI review requested due to automatic review settings March 12, 2026 22:08
@github-actions
Copy link
Copy Markdown
Contributor

Dependency Review

✅ No vulnerabilities or license issues or OpenSSF Scorecard issues found.

OpenSSF Scorecard

PackageVersionScoreDetails
pip/deepmerge 2.0 UnknownUnknown
pip/zensical 0.0.26 UnknownUnknown

Scanned Files

  • uv.lock

@gemini-code-assist
Copy link
Copy Markdown
Contributor

Summary of Changes

Hello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request executes a strategic migration of the project's documentation build system from the currently unmaintained MkDocs to its designated successor, Zensical. This transition is crucial for ensuring the long-term stability and support of the documentation infrastructure. The changes primarily involve updating dependencies, build commands, and internal references, all while preserving the existing documentation content and structure.

Highlights

  • Documentation Build System Migration: Migrated the documentation build system from mkdocs-material to zensical (version 0.0.26), adopting the designated successor tool by the same team.
  • CI Workflow Updates: Updated CI workflows (pages.yml, pages-preview.yml) to utilize the zensical build command for documentation generation.
  • Documentation References Alignment: Revised all internal documentation references across CLAUDE.md, README.md, decisions.md, scripts, configuration files, and skill files to reflect the switch to Zensical.
  • Configuration and Content Compatibility: Ensured that no changes were required for mkdocs.yml, existing content, markdown files, or the theme, as Zensical natively reads MkDocs configurations and maintains theme compatibility.
Changelog
  • .claude/skills/review-dep-pr/SKILL.md
    • Updated the documentation dependency reference from MkDocs to Zensical.
    • Changed the documentation build command from mkdocs build to zensical build.
  • .dockerignore
    • Updated a comment to reflect the new documentation build tool.
  • .gitignore
    • Updated a comment to reflect the new documentation build tool.
  • CLAUDE.md
    • Updated the docs toolchain installation command comment.
    • Replaced mkdocs build and mkdocs serve commands with zensical build and zensical serve.
    • Updated documentation source and CI references to mention Zensical.
    • Updated documentation dependencies list to include zensical and remove mkdocs-material.
  • README.md
    • Updated the docs toolchain reference to Zensical.
  • docs/architecture/decisions.md
    • Updated the date for the documentation decision entry.
    • Revised the decision to use Zensical instead of MkDocs.
    • Updated the rationale to explain the migration due to MkDocs' unmaintained status and Zensical's role as its successor.
    • Updated alternatives to reflect the current state of documentation tools.
  • pyproject.toml
    • Replaced mkdocs-material with zensical in the docs dependency group.
  • scripts/export_openapi.py
    • Updated comments to refer to the new documentation build tool instead of MkDocs.
  • site/astro.config.mjs
    • Updated a comment regarding the documentation build output to mention Zensical.
  • uv.lock
    • Removed babel, backrefs, mkdocs-material, mkdocs-material-extensions, and paginate packages.
    • Added deepmerge as a new dependency.
    • Added zensical package and its associated dependencies.
    • Updated references to mkdocs-material with zensical in the dev and docs dependency groups.
Ignored Files
  • Ignored by pattern: .github/workflows/** (2)
    • .github/workflows/pages-preview.yml
    • .github/workflows/pages.yml
Activity
  • Pre-reviewed by 2 agents (comment-analyzer, docs-consistency).
  • 5 findings were identified in total.
  • 2 valid findings were implemented.
  • 3 findings were correctly dismissed.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for GitHub and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

@coderabbitai
Copy link
Copy Markdown

coderabbitai bot commented Mar 12, 2026

Caution

Review failed

Pull request was closed or merged during review

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: fcf5c8c6-527a-4f98-ad47-95371a74fa2d

📥 Commits

Reviewing files that changed from the base of the PR and between 9c1a3e1 and baa9f94.

⛔ Files ignored due to path filters (1)
  • uv.lock is excluded by !**/*.lock
📒 Files selected for processing (11)
  • .claude/skills/review-dep-pr/SKILL.md
  • .dockerignore
  • .github/workflows/pages-preview.yml
  • .github/workflows/pages.yml
  • .gitignore
  • CLAUDE.md
  • README.md
  • docs/architecture/decisions.md
  • pyproject.toml
  • scripts/export_openapi.py
  • site/astro.config.mjs
📜 Recent review details
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (4)
  • GitHub Check: Upload results
  • GitHub Check: Analyze (python)
  • GitHub Check: Greptile Review
  • GitHub Check: Test (Python 3.14)
🧰 Additional context used
📓 Path-based instructions (4)
**/*.py

📄 CodeRabbit inference engine (CLAUDE.md)

**/*.py: Do not use from __future__ import annotations — Python 3.14 has PEP 649 native lazy annotations
Use PEP 758 except syntax: except A, B: (no parentheses) — ruff enforces this on Python 3.14

Files:

  • scripts/export_openapi.py
scripts/**/*.py

📄 CodeRabbit inference engine (CLAUDE.md)

Scripts in scripts/ have relaxed ruff rules: print and deferred imports allowed

Files:

  • scripts/export_openapi.py
pyproject.toml

📄 CodeRabbit inference engine (CLAUDE.md)

pyproject.toml: All versions in pyproject.toml use pinned format: ==
Dependency groups: test (pytest + plugins), dev (includes test + ruff, mypy, pre-commit, commitizen); install with uv sync (installs everything; dev group is default)

Files:

  • pyproject.toml
.dockerignore

📄 CodeRabbit inference engine (CLAUDE.md)

Docker build context: single root .dockerignore (both images build with context: .)

Files:

  • .dockerignore
🧠 Learnings (9)
📓 Common learnings
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-12T21:59:28.508Z
Learning: MkDocs config: `mkdocs.yml` at repo root; CI: `.github/workflows/pages.yml` — exports OpenAPI schema, builds Astro landing + MkDocs docs, merges, deploys to GitHub Pages
📚 Learning: 2026-03-12T21:59:28.508Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-12T21:59:28.508Z
Learning: REST API reference in `docs/rest-api.md` links to standalone Scalar UI page at `docs/_generated/api-reference.html` (both generated by `scripts/export_openapi.py` in CI)

Applied to files:

  • scripts/export_openapi.py
  • CLAUDE.md
📚 Learning: 2026-03-12T21:59:28.508Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-12T21:59:28.508Z
Learning: MkDocs config: `mkdocs.yml` at repo root; CI: `.github/workflows/pages.yml` — exports OpenAPI schema, builds Astro landing + MkDocs docs, merges, deploys to GitHub Pages

Applied to files:

  • scripts/export_openapi.py
  • .gitignore
  • .github/workflows/pages.yml
  • site/astro.config.mjs
  • CLAUDE.md
  • .claude/skills/review-dep-pr/SKILL.md
  • .dockerignore
  • .github/workflows/pages-preview.yml
  • docs/architecture/decisions.md
📚 Learning: 2026-03-12T21:59:28.508Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-12T21:59:28.508Z
Learning: Library reference in `docs/api/` is auto-generated from docstrings via mkdocstrings + Griffe (AST-based, no imports)

Applied to files:

  • scripts/export_openapi.py
📚 Learning: 2026-03-12T21:59:28.508Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-12T21:59:28.508Z
Learning: Documentation source in `docs/` uses MkDocs markdown; design spec in `docs/design/` (7 pages: index, agents, organization, communication, engine, memory, operations); architecture in `docs/architecture/`, roadmap in `docs/roadmap/`, reference in `docs/reference/`

Applied to files:

  • .gitignore
  • CLAUDE.md
  • .dockerignore
  • docs/architecture/decisions.md
📚 Learning: 2026-03-12T21:59:28.508Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-12T21:59:28.508Z
Learning: Applies to pyproject.toml : Dependency groups: `test` (pytest + plugins), `dev` (includes test + ruff, mypy, pre-commit, commitizen); install with `uv sync` (installs everything; dev group is default)

Applied to files:

  • CLAUDE.md
  • README.md
📚 Learning: 2026-03-12T21:59:28.508Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-12T21:59:28.508Z
Learning: All Docker files in `docker/` — Dockerfiles, compose, `.env.example`; CI: `.github/workflows/docker.yml` — build → scan (Trivy/Grype) → push to GHCR + cosign sign; images only pushed after scans pass

Applied to files:

  • CLAUDE.md
  • README.md
📚 Learning: 2026-03-12T21:59:28.508Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-12T21:59:28.508Z
Learning: Custom MkDocs templates in `docs/overrides/` (custom_dir for optional theme/template overrides)

Applied to files:

  • .dockerignore
📚 Learning: 2026-03-12T21:59:28.508Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-12T21:59:28.508Z
Learning: Architecture decisions tracked in `docs/architecture/decisions.md` (decision log)

Applied to files:

  • docs/architecture/decisions.md
🪛 LanguageTool
CLAUDE.md

[uncategorized] ~59-~59: The official name of this software platform is spelled with a capital “H”.
Context: ...Zensical reads this natively) - CI: .github/workflows/pages.yml — exports OpenAPI ...

(GITHUB)

🔇 Additional comments (14)
site/astro.config.mjs (1)

9-10: Comment update is consistent with the docs-toolchain migration.

This is a clean, non-functional wording update and matches the Zensical CI flow.

.gitignore (1)

53-54: Ignore rule remains correct after the terminology rename.

Good update: behavior is unchanged and naming now reflects Zensical.

.dockerignore (1)

23-24: Looks good — comment rename is accurate and non-breaking.

The _site/ exclusion remains intact, so Docker context behavior is unchanged.

scripts/export_openapi.py (1)

7-11: Docstring update is correct and aligned with the new build command.

No logic change here; the wording now matches the Zensical migration.

pyproject.toml (1)

52-52: Dependency migration is correctly pinned and scoped.

zensical==0.0.26 in the docs group cleanly follows the repo’s pinning policy.

docs/architecture/decisions.md (1)

83-89: Decision-log update is coherent with the migration scope.

The rationale, alternatives, and --strict caveat are clearly documented.

.github/workflows/pages.yml (1)

35-35: Workflow migration to Zensical is consistent and safely merged with Astro output.

Build and merge steps are aligned, and the docs-route overwrite guard is still correctly enforced.

Also applies to: 51-55, 71-81

README.md (1)

84-84: 🧹 Nitpick | 🔵 Trivial

Remove the redundant second uv sync in Development quick start.

After Line 83, Line 84 adds an extra sync pass but does not add new deps in the default dev flow.

♻️ Suggested README tweak
 uv sync                  # install dev + test deps
-uv sync --group docs     # install docs toolchain (zensical)
+# docs toolchain (zensical) is included in the default dev sync

As per coding guidelines: "install with uv sync (installs everything; dev group is default)".

⛔ Skipped due to learnings
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-12T21:59:28.508Z
Learning: Applies to pyproject.toml : Dependency groups: `test` (pytest + plugins), `dev` (includes test + ruff, mypy, pre-commit, commitizen); install with `uv sync` (installs everything; dev group is default)
.github/workflows/pages-preview.yml (2)

115-118: Zensical build-step migration is correctly applied.

This preserves the intended behavior and documents the temporary --strict deferment clearly.


135-145: Output merge logic remains consistent after the tooling rename.

The Astro docs/ guard plus _site/docs/ expectation keeps the collision protection intact.

.claude/skills/review-dep-pr/SKILL.md (1)

161-182: Phase 4 guidance is correctly aligned to the Zensical migration.

The skip criteria and executable build command now match the current docs toolchain.

CLAUDE.md (3)

41-43: Quick-command updates are accurate for the new docs stack.

OpenAPI export sequencing and zensical build/serve commands are clearly documented.


48-62: Documentation section terminology is consistently migrated.

References to docs source, config, CI flow, and dependency group now align with Zensical usage.


183-183: CI docs pipeline description is correctly updated.

The Pages workflow summary now reflects Astro + Zensical build/deploy behavior.


📝 Walkthrough

Summary by CodeRabbit

  • Chores
    • Migrated documentation build system to a new toolchain, updating build commands and deployment workflows across project pipelines.
    • Updated project dependencies to support the new documentation build infrastructure and related tools.
    • Documentation configuration and scripts have been adjusted to align with the updated build process.

Walkthrough

This pull request migrates the documentation build system from MkDocs to Zensical across the entire codebase. It updates CI workflows, dependency declarations, configuration files, and documentation references to replace MkDocs commands with Zensical equivalents, while keeping existing mkdocs.yml configuration compatible.

Changes

Cohort / File(s) Summary
Workflow Configuration
.github/workflows/pages.yml, .github/workflows/pages-preview.yml
Build step renamed from "Build MkDocs" to "Build docs"; command changed from mkdocs build --strict to zensical build with a note to re-enable strict flag later. Error messages and step comments updated to reference Zensical.
Documentation & References
CLAUDE.md, README.md, docs/architecture/decisions.md, scripts/export_openapi.py
Updated all MkDocs-related terminology and command references to Zensical equivalents throughout documentation, quick start guides, and architecture decisions.
Project Configuration
pyproject.toml
Replaced mkdocs-material==9.7.5 with zensical==0.0.26 in the docs dependency group.
Build Skill Configuration
.claude/skills/review-dep-pr/SKILL.md
Phase 4 skip condition and build command updated from MkDocs to Zensical. Added pre-build safety checks: warns and skips if working tree is dirty, preserves original branch using trap, performs PR checkout only when tree is clean.
Ignore & Config Files
.dockerignore, .gitignore, site/astro.config.mjs
Updated inline comments and labels from MkDocs to Zensical in ignore files and Astro configuration.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~12 minutes

Possibly related PRs

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title 'chore: migrate docs build from MkDocs to Zensical' clearly and concisely summarizes the main change in the changeset, accurately reflecting the primary objective of replacing the documentation build tool.
Description check ✅ Passed The description is well-detailed and directly related to the changeset, explaining the rationale for migration, implementation details, testing performed, and what remains unchanged.
Linked Issues check ✅ Passed All coding requirements from issue #329 are met: mkdocs-material replaced with zensical in pyproject.toml, CI workflows updated to use zensical build without --strict, all documentation references updated across files, mkdocs.yml unchanged, mkdocstrings/griffe-pydantic preserved.
Out of Scope Changes check ✅ Passed All changes are within scope of issue #329; no zensical.toml creation, no mkdocs.yml restructuring, no content/theme changes, and no unrelated modifications detected.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
  • 📝 Generate docstrings (stacked PR)
  • 📝 Generate docstrings (commit on current branch)
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch chore/migrate-mkdocs-to-zensical
✨ Simplify code
  • Create PR with simplified code
  • Commit simplified code in branch chore/migrate-mkdocs-to-zensical
📝 Coding Plan
  • Generate coding plan for human review comments

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request correctly migrates the documentation build from MkDocs to Zensical. All dependency updates in pyproject.toml and uv.lock, along with the corresponding changes in documentation and scripts, are consistent with this goal. However, there appears to be a critical omission. The pull request description states that CI workflows (.github/workflows/pages.yml and .github/workflows/pages-preview.yml) are updated, but these files are not included in the diff. Without these changes, the CI build for documentation will likely fail as it would still be attempting to use the now-removed MkDocs. Please add the updated workflow files to this pull request to ensure the migration is complete and the CI pipeline remains functional.

Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Migrates the repository’s documentation build from MkDocs Material to Zensical while keeping the existing mkdocs.yml configuration and _site/docs output layout used by the Pages deployment pipeline.

Changes:

  • Swapped docs dependency from mkdocs-material==9.7.5 to zensical==0.0.26 (lockfile updated accordingly).
  • Updated GitHub Pages and PR preview workflows to run uv run zensical build (temporarily without --strict).
  • Updated internal docs/references (README/CLAUDE/decision log/skill docs, ignore-file comments) to reflect Zensical.

Reviewed changes

Copilot reviewed 10 out of 12 changed files in this pull request and generated no comments.

Show a summary per file
File Description
uv.lock Removes mkdocs-material and related deps; adds zensical and deepmerge; updates dependency groups.
pyproject.toml Replaces mkdocs-material with zensical in the docs dependency group.
.github/workflows/pages.yml Switches docs build step from mkdocs build --strict to zensical build for Pages deploy.
.github/workflows/pages-preview.yml Switches PR preview docs build step from mkdocs build --strict to zensical build.
mkdocs.yml (No change) Remains the single source of docs config; still sets site_dir: _site/docs.
scripts/export_openapi.py Updates docstring references from MkDocs build to Zensical build.
docs/architecture/decisions.md Updates decision log entry to reflect Zensical adoption and rationale.
README.md Updates local docs toolchain reference to Zensical.
CLAUDE.md Updates quick commands and documentation section to reference Zensical and new CI behavior.
site/astro.config.mjs Updates comment describing docs build output source (Zensical).
.gitignore Updates comment labeling _site/ as Zensical build output.
.dockerignore Updates comment labeling _site/ as Zensical build output.
.claude/skills/review-dep-pr/SKILL.md Updates docs dependency review workflow instructions to use zensical build.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@greptile-apps
Copy link
Copy Markdown

greptile-apps bot commented Mar 12, 2026

Greptile Summary

This PR migrates the docs build toolchain from mkdocs-material==9.7.5 to zensical==0.0.26 and updates every reference across CI workflows, developer docs, skill files, and config comments. No Python source, markdown content, or mkdocs.yml structure is changed — Zensical reads the existing config natively.

Key changes:

  • pyproject.toml: mkdocs-material swapped for zensical in the docs (and dev) dependency groups.
  • pages.yml / pages-preview.yml: uv run mkdocs build --strictuv run zensical build; --strict deliberately deferred to zensical/backlog#72 and flagged with TODO comments. This is the main regression — without --strict, broken internal links and unresolved mkdocstrings references will no longer fail CI.
  • uv.lock: Five packages removed (babel, backrefs, mkdocs-material, mkdocs-material-extensions, paginate); deepmerge and zensical added with pre-compiled platform wheels, resulting in a leaner transitive footprint.
  • mkdocs.yml (unchanged): The existing config includes !!python/name:material.extensions.emoji.twemoji and !!python/name:material.extensions.emoji.to_svg, which previously resolved via the mkdocs-material package. Since mkdocs-material is no longer a listed dependency (direct or transitive), this works only because Zensical ships the material namespace internally. The author confirms zensical build completes successfully locally, validating this assumption. It is worth noting that this creates an implicit coupling to Zensical's internal packaging of the Material theme — if a future Zensical release changes or removes this namespace, mkdocs.yml will need to be updated too.

Confidence Score: 4/5

  • Safe to merge — migration is clean and verified locally; the only regression (dropped --strict) is acknowledged, tracked, and does not affect runtime behavior.
  • The PR is well-scoped, consistently applied across all 12 files, and backed by a detailed test plan with a confirmed successful local build. The one structural risk is the temporary loss of --strict validation in CI (broken links and unresolved references will no longer fail the build), but this is explicitly documented with a TODO and a linked upstream issue. The zensical==0.0.26 pre-1.0 version warrants monitoring on future bumps but the exact pin makes the current state reproducible and stable.
  • .github/workflows/pages.yml and .github/workflows/pages-preview.yml — both intentionally drop --strict until Flag to fail the build on warnings zensical/backlog#72 ships; CI docs validation is reduced in the interim.

Important Files Changed

Filename Overview
pyproject.toml Clean swap of mkdocs-material==9.7.5 for zensical==0.0.26 in the docs dependency group; no changes to other groups or project configuration.
.github/workflows/pages.yml Replaces uv run mkdocs build --strict with uv run zensical build; drops --strict mode intentionally with a TODO comment pointing to zensical/backlog#72, reducing CI-level docs validation until that issue ships.
.github/workflows/pages-preview.yml Same --strict drop as pages.yml; all other step logic, merge strategy, preview banner injection, and Cloudflare deployment unchanged.
CLAUDE.md All MkDocs references consistently updated to Zensical (zensical build, zensical serve); note appended about --strict deferral; config section clarified that mkdocs.yml is still read by Zensical natively.
docs/architecture/decisions.md Decision log updated with accurate rationale for migration (MkDocs unmaintained, Material in maintenance mode, Zensical as designated successor); date bumped to 2026-03-12.
uv.lock Removes babel, backrefs, mkdocs-material, mkdocs-material-extensions, paginate; adds deepmerge and zensical==0.0.26 with pre-compiled platform wheels; lock is consistent with the pyproject.toml change.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    A[Push to main / PR opened] --> B[Checkout repo]
    B --> C[Set up Python 3.14]
    C --> D[Install uv]
    D --> E[uv sync --group docs --no-dev]
    E --> F[export_openapi.py\nGenerate openapi.json + Scalar HTML]
    F --> G[zensical build\nReads mkdocs.yml natively\nOutputs to _site/docs/]
    G --> H[Set up Node.js 22]
    H --> I[npm ci]
    I --> J[npm run build\nAstro → site/dist/]
    J --> K{site/dist/docs\nexists?}
    K -- Yes --> L[::error:: collision — exit 1]
    K -- No --> M[cp -r site/dist/. _site/\nMerge Astro root + Zensical /docs]
    M --> N{pages.yml\nor preview?}
    N -- pages.yml --> O[Upload GitHub Pages artifact\nDeploy to synthorg.io]
    N -- pages-preview.yml --> P[Inject preview banner\ninto all _site/*.html]
    P --> Q[Upload artifact\nDeploy to Cloudflare Pages\npr-N.synthorg-pr-preview.pages.dev]
Loading
Prompt To Fix All With AI
This is a comment left during a code review.
Path: pyproject.toml
Line: 52

Comment:
**Pre-1.0 version — expect frequent breaking changes**

`zensical==0.0.26` is a `0.0.x` pre-release package, which signals that its public API is not yet stable. Even minor patch bumps can carry breaking changes before a project reaches `1.0`. 

This is not a blocker — the pin is exact, the build is verified, and the migration rationale is sound. But it does mean Dependabot/Renovate bumps for this dep will need closer scrutiny than a typical mature package (the `review-dep-pr` skill helps here). Consider adding a comment inline or in the decision log noting the stability expectation so future reviewers know why extra care is warranted on updates.

How can I resolve this? If you propose a fix, please make it concise.

Last reviewed commit: baa9f94

]
docs = [
"mkdocs-material==9.7.5",
"zensical==0.0.26",
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pre-1.0 version — expect frequent breaking changes

zensical==0.0.26 is a 0.0.x pre-release package, which signals that its public API is not yet stable. Even minor patch bumps can carry breaking changes before a project reaches 1.0.

This is not a blocker — the pin is exact, the build is verified, and the migration rationale is sound. But it does mean Dependabot/Renovate bumps for this dep will need closer scrutiny than a typical mature package (the review-dep-pr skill helps here). Consider adding a comment inline or in the decision log noting the stability expectation so future reviewers know why extra care is warranted on updates.

Prompt To Fix With AI
This is a comment left during a code review.
Path: pyproject.toml
Line: 52

Comment:
**Pre-1.0 version — expect frequent breaking changes**

`zensical==0.0.26` is a `0.0.x` pre-release package, which signals that its public API is not yet stable. Even minor patch bumps can carry breaking changes before a project reaches `1.0`. 

This is not a blocker — the pin is exact, the build is verified, and the migration rationale is sound. But it does mean Dependabot/Renovate bumps for this dep will need closer scrutiny than a typical mature package (the `review-dep-pr` skill helps here). Consider adding a comment inline or in the decision log noting the stability expectation so future reviewers know why extra care is warranted on updates.

How can I resolve this? If you propose a fix, please make it concise.

Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!

@Aureliolo Aureliolo merged commit fa8bf1d into main Mar 12, 2026
19 of 20 checks passed
@Aureliolo Aureliolo deleted the chore/migrate-mkdocs-to-zensical branch March 12, 2026 22:11
@Aureliolo Aureliolo temporarily deployed to cloudflare-preview March 12, 2026 22:11 — with GitHub Actions Inactive
@codecov
Copy link
Copy Markdown

codecov bot commented Mar 12, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 93.75%. Comparing base (9c1a3e1) to head (baa9f94).
⚠️ Report is 1 commits behind head on main.
✅ All tests successful. No failed tests found.

Additional details and impacted files
@@           Coverage Diff           @@
##             main     #330   +/-   ##
=======================================
  Coverage   93.75%   93.75%           
=======================================
  Files         433      433           
  Lines       19831    19831           
  Branches     1911     1911           
=======================================
  Hits        18592    18592           
  Misses        957      957           
  Partials      282      282           

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

Aureliolo added a commit that referenced this pull request Mar 13, 2026
🤖 I have created a release *beep* *boop*
---


##
[0.1.3](v0.1.2...v0.1.3)
(2026-03-13)


### Features

* add Mem0 memory backend adapter
([#345](#345))
([2788db8](2788db8)),
closes [#206](#206)
* centralized single-writer TaskEngine with full CRUD API
([#328](#328))
([9c1a3e1](9c1a3e1))
* incremental AgentEngine → TaskEngine status sync
([#331](#331))
([7a68d34](7a68d34)),
closes [#323](#323)
* web dashboard pages — views, components, tests, and review fixes
([#354](#354))
([b165ec4](b165ec4))
* web dashboard with Vue 3 + PrimeVue + Tailwind CSS
([#347](#347))
([06416b1](06416b1))


### Bug Fixes

* harden coordination pipeline with validators, logging, and fail-fast
([#333](#333))
([2f10d49](2f10d49)),
closes [#205](#205)
* repo-wide security hardening from ZAP, Scorecard, and CodeQL audit
([#357](#357))
([27eb288](27eb288))


### CI/CD

* add pip-audit, hadolint, OSSF Scorecard, ZAP DAST, and pre-push hooks
([#350](#350))
([2802d20](2802d20))
* add workflow_dispatch trigger to PR Preview for Dependabot PRs
([#326](#326))
([4c7b6d9](4c7b6d9))
* bump astral-sh/setup-uv from 7.4.0 to 7.5.0 in the minor-and-patch
group ([#335](#335))
([98dd8ca](98dd8ca))


### Maintenance

* bump the minor-and-patch group across 1 directory with 3 updates
([#352](#352))
([031b1c9](031b1c9))
* **deps:** bump devalue from 5.6.3 to 5.6.4 in /site in the
npm_and_yarn group across 1 directory
([#324](#324))
([9a9c600](9a9c600))
* migrate docs build from MkDocs to Zensical
([#330](#330))
([fa8bf1d](fa8bf1d)),
closes [#329](#329)

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).
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.

Migrate docs build from MkDocs to Zensical

2 participants