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

# Architecture compliance (generated)

> Generated map: every modularity principle and the gate that enforces it.

> Generated by `scripts/arch-report.mjs`. The constitution promises every principle names the practice
> it comes from **and the gate that enforces it** ([Architecture](/governance/architecture) §2/§4, **P9**: an
> ungated rule is aspirational). This is that map, live — each modularity principle → its CI gate(s) →
> the current evidence. **P9 itself is the table**: every row is a green gate, not a README rule, so
> "fully modular" is a claim backed by mechanical evidence. Regenerate with `node scripts/arch-report.mjs`;
> `gate:arch-report` keeps it honest in CI.

| Principle | Rule                                                                                                                    | Gate(s)                                                        | Evidence                                                                                                                                                                | Status |
| --------- | ----------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------ |
| **P2**    | Couple only through contracts — no import reaches around a contract into a sibling module's internals (prod AND tests). | `gate:isolation` · `gate:isolation-py` · `gate:test-isolation` | 17 brick(s) checked; every Python sibling import is own-module, declared, or an allowed edge; no Python test imports a sibling module's internals (test lane gated, P2) | ✅      |
| **P3**    | Dependencies point inward to the kernel; the graph is acyclic (runtime depends on nothing above).                       | `gate:graph` · `gate:graph-py`                                 | acyclic + allowed-edges; Python cross-package edges acyclic + allow-listed                                                                                              | ✅      |
| **P4**    | Cross a process/network boundary → a sealed, versioned, golden-pinned schema.                                           | `gate:schema` · `gate:contract-version`                        | 24 contract(s) conform (goldens ≡ schema); 24 sealed contract(s) frozen                                                                                                 | ✅      |
| **P6**    | One public front door per module; internals are private.                                                                | `gate:exports`                                                 | 13 library package(s) lock their front door                                                                                                                             | ✅      |
| **P12**   | Every folder self-documents (README: concern · surface · deps).                                                         | `gate:readme`                                                  | 299 dirs each carry a README                                                                                                                                            | ✅      |
| **P23**   | One writer per data carrier; a reader never re-derives a producer's data (data-flow ownership, architecture.calm.json). | `gate:dataflow`                                                | 81 nodes · 52 edges · 11 carriers · complete + sealed (P23)                                                                                                             | ✅      |

**Modularity verdict: all gates green — the v0.12 backend is fully modular by the constitution's own definition.**

Per-service module structure (each a front-doored brick, independently testable): `meeting-api` =
`{lifecycle · bot_spawn · collector · recordings · webhooks · scheduling · sessions · obs}`; `runtime` =
the kernel (imports nothing above); `gateway`/`identity`/`agent-api` per their domains. The test lane is
gated too (`gate:test-isolation`) — a test cannot reach across a module boundary where prod imports can't.
