Version pinning

The platform's rule is "no version mismatches, ever" (ADR 0027 §6) — enforced by construction, not convention: every surface an agent touches reports the same fingerprint, and a client below the floor is refused with instructions, never served stale answers.

/v1/meta

GET https://api.mozaik-dev.com/v1/meta (meta.get, public) publishes the build identity:

One CI pipeline publishes the CLI, deploys the API and builds these docs from the same commit, so meta.buildId and the docs agree by construction. CLI: meta.

X-Mozaik-Client and 426

The CLI and Dev MCP send X-Mozaik-Client: mozaik-cli/<version> on every request. A version below minCli is answered HTTP 426 client_too_old with the exact upgrade command; an X-Mozaik-Project-Format above the platform's is 426 project_format_unsupported. The refusal is uniform across surfaces:

Clients that do not identify as our CLI (third-party MCP clients, curl, the admin panel) are never refused for lacking a version header — the floor guards our own pinned tooling, not the open API.

The project pin

A store project (open) pins everything it depends on:

Proposals record the registry_hash they were recorded under; the review UI shows a "Platform güncellendi" badge when the platform moved after recording.

Upgrading

upgrade is the single, explicit move: re-pin the project to the current platform build (package.json, .mcp.json, lock) and regenerate what the format needs. Nothing self-updates: there is no background CLI update, no auto pull --force, no server-side migration of your tree. When you see a 426, the loop is: npm i -g @mozaik/climozaik upgrade → continue where you left off.

Generated from the live platform registries at build time — reference pages cannot go stale. Markdown variant: /agents-versioning.md