> ## Documentation Index
> Fetch the complete documentation index at: https://docs.vimaspatial.tech/llms.txt
> Use this file to discover all available pages before exploring further.

# CI/CD

> How Vima keeps docs, MCP, and production health from drifting.

## Workflows

| Workflow                 | Purpose                                                 |
| ------------------------ | ------------------------------------------------------- |
| `backend-tests.yml`      | backend pytest                                          |
| `mcp-tests.yml`          | MCP package tests plus Compose/Caddy validation         |
| `docs-drift.yml`         | Fails when API/MCP/CLI changes without docs updates     |
| `sync-mintlify-docs.yml` | Pushes docs changes to `stephenhungg/vima-docs` on main |
| `deploy.yml`             | rsync + Docker Compose deploy to Vultr                  |
| `health-canary.yml`      | public production probes every 30 minutes               |

## Docs Drift

`scripts/check_docs_drift.py` watches:

* `backend/api.py`
* `packages/vima-agent/**`
* `packages/vima-mcp/**`
* `infra/Caddyfile`
* `infra/docker-compose.yml`
* `infra/Dockerfile.mcp`

If any of those change, the same diff must also touch one of:

* `docs/**`
* `docs.json`
* `README.md`
* `infra/README.md`
* `frontend/app/page.tsx`

This is deliberately deterministic. Agent-written auto-commits can come later;
for the demo window, docs drift detection is safer.

## Mintlify sync

Mintlify deploys from `stephenhungg/vima-docs`. When docs or public interface
files change on `main`, `sync-mintlify-docs.yml` copies `docs.json`, `docs/*.mdx`,
the Agent Docs Audit prompt, and the favicon into that repo and pushes a
`sync vima docs` commit.

The workflow needs `VIMA_DOCS_SYNC_TOKEN`, a GitHub token with write access to
`stephenhungg/vima-docs`.

## Canary

The public canary probes:

```text theme={"dark"}
/
/api/health
/api/cii/summary
/mcp/health
```

That catches Caddy, TLS, backend, and MCP regressions from outside the box.
