12. Versioning Policy
📋 Versioning Policy#
This framework and its repositories follow a consistent versioning scheme to ensure clarity and compatibility.
Format#
Versions use the format: v<framework_version>_<repository_version>
Both components follow Semantic Versioning (MAJOR.MINOR.PATCH):
- Framework version: Infrastructure and technical components
MAJOR: Breaking changes in framework architectureMINOR: Backward-compatible feature additions-
PATCH: Bug fixes or minor improvements -
Repository version: Tutorial content and structure
MAJOR: Breaking changes in tutorial content or structureMINOR: New tutorials or enhancementsPATCH: Minor corrections or fixes
Examples#
| Version | Meaning |
|---|---|
v1.0.0_1.0.0 |
Initial release |
v1.2.0_1.0.0 |
Framework upgraded, repository unchanged |
v1.2.0_1.1.0 |
Repository upgraded, framework unchanged |
v1.2.5_1.0.3 |
Framework at 1.2.5, repository at patch 1.0.3 |
Version Pin#
Each repo pins its framework version in .devcontainer/util/source_framework.sh:
That one line is the single selector: it decides which framework files the container pulls from the
cache and which mkdocs-base.yaml the docs workflow fetches. The Sync CLI manages the pin across
all repos via push-update.
Read the version from the repo, never from a document
Any version written into a page is stale the next release. To see what a repo actually pins:
Across the whole fleet,sync status shows the drift; the framework's own current version is its
latest git tag.
Vendored Front-End Assets#
Mermaid is vendored, not pulled from a CDN at page load. Material for MkDocs would
otherwise fetch https://unpkg.com/mermaid@11/dist/mermaid.min.js on every page view — a
floating major that can change under the sites without a commit anywhere.
| File | docs/javascripts/mermaid.min.js |
| Pinned version | 11.17.2 |
| Source | https://unpkg.com/mermaid@11.17.2/dist/mermaid.min.js |
| sha256 | 581ed7d74bd9048d0e3a91363927d72ef22942d7722546b27f7cc29e35390eb8 |
| Size | 3.5 MB raw (0.9 MB gzipped over the wire) |
Consuming repos do not commit the file. Their deploy-ghpages.yaml fetches it from this repo
at their pinned FRAMEWORK_VERSION, alongside mkdocs-base.yaml and docs/stylesheets/extra.css.
The pin therefore travels with the framework version — every repo on the same tag renders with
the same mermaid.
The pin does not update itself
There are no automatic security or bug fixes. A diagram written against mermaid syntax newer than the pin renders as an error box in the page; it does not fail the build.
Bumping the pin#
- Check what changed upstream: mermaid releases.
- Download and record the new hash:
- Update the version, source URL and sha256 in the
extra_javascriptcomment block ofmkdocs-base.yaml, and the table above. - Build and confirm a diagram still renders —
mkdocs buildsucceeding is not proof. Check that the page emits<pre class="mermaid">and that a diagram appears in the browser. Material puts the rendered SVG in a closed shadow root, sodocument.querySelector(".mermaid svg")finds nothing even when the diagram is fine. - Release a framework version and
sync push-update, so every repo moves to the same mermaid. Repos left on older tags keep the mermaid of the tag they are pinned to.
Staying inside mermaid 11.x is deliberate: Material 9.5.x asks for mermaid@11, so the pin
matches what it expects. A major bump needs a Material upgrade checked alongside it.
Tagging Workflow#
After syncing all repos to a framework version and merging PRs:
# Create combined tags on all repos
sync tag --framework-version <framework-version>
# Bump repo version and create GitHub Releases
sync tag --framework-version <framework-version> --bump patch --release
Benefits#
- Clarity: Immediate visibility of framework and repository versions
- Compatibility: Aligns with SemVer and tooling expectations
- Flexibility: Independent evolution of framework and repositories
- Automation: Sync CLI manages version bumps, tags, and releases across all repos