> ## 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.

# Status

> Where we are — honestly.

<Note>This page is the honest, current state — updated as we go, never aspirational.</Note>

## What 0.12 is

0.12 is a **complete refactoring of the 0.10 line into software of the same shape** — the same
services, the same wire surface (`api.v1` sealed hash-equal to 0.10.x's OpenAPI) — rebuilt so
that **every service is a modular monolith**.

The rule underneath everything: **a module owns exactly one concern, and is the single source
of truth for that concern.** Larger structures are built from modules — capture bricks compose
into the meeting bot, modules compose into services, services compose into deployments.

Modules join only through **contracts**: defined once, rarely changed, and **sealed** — a
sha256 per contract in `contracts.seal.json`, enforced in CI. If a seal breaks, we know;
a contract can never drift silently.

Why this shape:

* **Test in isolation.** Because a module's concern is exact and singular, it is tested fully
  in isolation against fixtures — and debugged the same way, by manipulating the fixtures.
* **Test at any scale.** A chain of modules joined by sealed contracts tests in integration
  with the same fixtures — so a bug is reproduced and debugged at exactly the scale it lives at.
* **AI-native by construction.** Every unit ships three things: the running code, the
  adversarial code (tests that harness it), and the data (goldens that validate the module or
  contract). All ports are deterministic for deterministic input, so the verify loop is simple
  enough for an agent to own.
* **Fixtures come from reality.** We collect them from real meetings — real audio, speaker
  activations, and environment metadata — and replay them through the system, so the whole
  stack is harnessed against the real world largely autonomously.

The full map — module tree, the sealed contract registry (owner → consumers), and the four
eval levels — is [Modules & Seams](/architecture/modules).

**Proven in production (pre-existing Vexa):** the [Runtime](/core/runtime) (meeting bots are browser
workloads), transcription → `transcript.v1`, redis [streaming](/architecture/streaming).

**Built & proven live — the dispatch core (M1):** a [`unit.v1` dispatch](/concepts) runs in a
**runtime-spawned, isolated container** (the generic-agent worker), over a **bind-mounted
[workspace](/concepts#workspace)**, carrying a **per-dispatch signed [identity](/architecture/identity-and-trust)
token**, streaming UnitEvents on `unit:<id>:out` → SSE. The **in-process path is retired** (agents never
run in the control plane). **Chat memory is durable** — session + transcript are saved in the workspace,
so a fresh container resumes the conversation. Verified end-to-end on docker and through the terminal
chat. See [Execution](/architecture/execution).

**Designed & frozen (this site):** the [seven primitives](/concepts), the
[identity layer](/architecture/identity-and-trust) (kagenti-aligned), the
[governance model](/architecture/governance).

**Sound and kept:** the terminal workbench + surfaces, the generic event ingress, the generic tool
mechanism, the redis scheduler.

**Next:** finish M1 — the bucket-backed (minio) [workspace](/concepts#workspace) store + warm-reuse
(`touch` / idle-enforcer). Then M2 — the [live meeting](/how-to/live-copilot) dispatch.

## Delivery tracker

<Note>
  The live pickup queue is the [Vexa Roadmap board](https://github.com/orgs/Vexa-ai/projects/2)
  (grouped by contributor lane) with milestone [`v0.12.x`](https://github.com/Vexa-ai/vexa/milestones)
  as the version gate. How to claim and deliver: [the delivery constitution](/governance/delivery#the-roadmap).
</Note>

The planned features, the [modules](/architecture/modules) each touches, and status. The
core features are **⬜ planned**; planned meetings, auto-join, and ICS calendar sync are **✅ done**
(OAuth calendars are **deferred**). See [Identity](/core/identity) for the auth and
encryption detail.

| Feature                                                                                                                                 | Status      | Module(s) it touches                                        |
| --------------------------------------------------------------------------------------------------------------------------------------- | ----------- | ----------------------------------------------------------- |
| **Auth spine** — opaque token → `User` → scoped access end-to-end                                                                       | ⬜ planned   | core/identity (admin-api), core/gateway                     |
| **Owner-check adoption** — wire `OwnerOnlyPolicy` / `can_access` onto every meeting path (chat · stream · start · process)              | ⬜ planned   | core/agent, core/meetings, core/identity                    |
| **Real meetings list** — the live, persisted list of a user's meetings on the surface                                                   | ⬜ planned   | core/meetings (meeting-api), core/gateway, clients/terminal |
| **Routines: scheduled meetings** — a `routine.v1` / `schedule.v1` job that joins on a cron                                              | ⬜ planned   | core/runtime (scheduler), core/agent, core/meetings         |
| **Docs ↔ meetings binding** — bind a workspace doc to a meeting (capture → governed action)                                             | ⬜ planned   | core/agent (workspace.v1), core/meetings, clients/terminal  |
| **WebSocket coverage** — the `/ws` multiplex fanning transcripts · bot status · chat                                                    | ⬜ planned   | core/gateway (ws.v1), core/meetings, clients/terminal       |
| **Bucket encryption** — per-workspace envelope encryption; keys brokered, decrypted only in-container                                   | ⬜ planned   | core/identity, core/agent (workspace.v1), core/runtime      |
| **Transcript encryption** — encrypt transcripts at rest in the meetings database (the SSOT); protect the redis carrier (auth/TLS/ACLs)  | ⬜ planned   | core/meetings, core/identity                                |
| **User-token encryption** — store API tokens hashed/encrypted at rest, not cleartext                                                    | ⬜ planned   | core/identity (admin-api)                                   |
| **Planned meetings + auto-join** — plan ahead (`POST /meetings`), one record plan→transcript, the bot joins scheduled meetings at start | ✅ done      | core/meetings, core/gateway, clients/terminal               |
| **Calendar sync** — secret-ICS import → planned meetings, auto-join by default                                                          | ✅ done      | core/meetings, core/identity, clients/terminal              |
| **Calendar (OAuth)** — Google/Microsoft OAuth calendars (two-way, invite-aware)                                                         | 🟦 deferred | core/identity, core/meetings                                |

## Capability truth table

Where each partially-landed capability actually stands, layer by layer — verified against the tree
(route tables, module code, tests), not planning docs. "Module-tested" means unit/seam tests with fake
transports pass in CI; it is **not** an end-to-end claim.

| Capability                                          | Bot / module                                                                              | Service API                                                                                                                                                                                                                                           | Terminal UI                                                             | Honest note                                                                                                                                                                                                                                                                                                                                                               |
| --------------------------------------------------- | ----------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Bot browser view** (watch the bot's browser live) | n/a                                                                                       | ❌ none                                                                                                                                                                                                                                                | ❌ none                                                                  | Not a product feature today. noVNC/x11vnc is baked into the bot image and the lite supervisor **for operator debugging only** (localhost-bound).                                                                                                                                                                                                                          |
| **Voice agent — TTS speak**                         | ✅ implemented + proven live (acts.v1 `speak` → TTS → virtual mic; June full-cycle matrix) | ❌ not wired — the gateway mounts `POST …/speak` per the sealed `api.v1` but the open-core meeting-api has no route behind it → `404`; nothing publishes the speak act. **Prepared: [#514](https://github.com/Vexa-ai/vexa/issues/514)**               | ❌ none                                                                  | Contract-sealed and module-tested (mock-bot speak-ack gate), **not user-reachable**. Also flagged in the [Meetings API](/api/meetings) and the [changelog](/changelog).                                                                                                                                                                                                   |
| **Recording playback**                              | ✅ capture + chunking proven (acquire)                                                     | ✅ live + module-tested — `GET /recordings`, `/{id}`, `/{id}/master`, `…/raw` through the gateway                                                                                                                                                      | ❌ no player — retrieval is API/curl only ([how-to](/how-to/recordings)) | The full live loop (in-meeting capture → object storage → playback) has **not** been validated end-to-end. Retrieval durability is prepared as [#509](https://github.com/Vexa-ai/vexa/issues/509); the E2E playback proof is a declared roadmap-board direction.                                                                                                          |
| **User webhooks** (your URL, signed events)         | —                                                                                         | ✅ built + module-tested — self-serve config (URL/secret/events, secret-masked) and the `webhook.v1` HMAC delivery module with retry queue                                                                                                             | ❌ no settings UI                                                        | **Never fired against a real external receiver** — module tests use an in-memory transport. Treat as untested until a live delivery is proven. Exactly-once emission and outage-durable retry are prepared as [#519](https://github.com/Vexa-ai/vexa/issues/519)/[#520](https://github.com/Vexa-ai/vexa/issues/520), whose acceptance tables carry the live-receiver leg. |
| **Service webhooks** (in-stack lifecycle callbacks) | —                                                                                         | ✅ wired (`/bots/internal/callback/lifecycle`, `/runtime/callback`) + seam-tested                                                                                                                                                                      | n/a                                                                     | Internal plumbing; exercised implicitly by live bot runs, no dedicated E2E harness.                                                                                                                                                                                                                                                                                       |
| **MCP server**                                      | —                                                                                         | 🟡 ported 0.10.6 meeting-control server runs as its own compose service, module-tested, and is **fronted by the gateway at `/mcp`** — `POST` buffered, `GET` (the SSE stream) relayed unbuffered ([#795](https://github.com/Vexa-ai/vexa/issues/795)) | n/a                                                                     | The forward is module-tested (streamed relay, verbatim status, typed 502/504) but the transport has **not** been proven against a real MCP client end-to-end.                                                                                                                                                                                                             |

## 0.10.x features not (yet) in 0.12

The wire contract is sealed hash-equal to 0.10.x's OpenAPI 1.5.0, but a sealed endpoint is not
automatically a wired capability. What 0.10.x users had that 0.12 does not ship today — the
[changelog parity section](/changelog#parity-with-the-010x-line) is the source of truth, with
per-row verification notes:

| 0.10.x capability                                                       | 0.12 status                                                                                                                                                                                                                                                                                                    |
| ----------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Mid-call bot config (`PUT …/config`)                                    | contract-sealed, not wired — `404` · prepared: [#516](https://github.com/Vexa-ai/vexa/issues/516)                                                                                                                                                                                                              |
| Voice agent / TTS speak (`POST …/speak`)                                | contract-sealed, not wired — `404` · prepared: [#514](https://github.com/Vexa-ai/vexa/issues/514)                                                                                                                                                                                                              |
| Interactive bots beyond speak (in-meeting chat · screen share · avatar) | contract-sealed, not mounted — Teams chat read/write is ready as [#500](https://github.com/Vexa-ai/vexa/issues/500); screen share · avatar planned back in 0.12.x                                                                                                                                              |
| Transcript public share links                                           | contract-sealed, not mounted (was dashboard-coupled) — declared on the roadmap board; the sealed-vs-served reconcile is [#541](https://github.com/Vexa-ai/vexa/issues/541)                                                                                                                                     |
| Meeting participants endpoint (`GET …/participants`)                    | post-seal — next `api.v1` revision · accepted: [#451](https://github.com/Vexa-ai/vexa/issues/451)                                                                                                                                                                                                              |
| `discord` ingest platform                                               | post-seal — next `api.v1` revision · community adapter accepted: [#463](https://github.com/Vexa-ai/vexa/issues/463)                                                                                                                                                                                            |
| Zoom authorized join (OBF/ZAK tokens, native SDK)                       | not carried — 0.12 joins Zoom via web client only; declared on the roadmap board (Zoom lane, with [#515](https://github.com/Vexa-ai/vexa/issues/515)/[#518](https://github.com/Vexa-ai/vexa/issues/518)/[#538](https://github.com/Vexa-ai/vexa/issues/538)/[#539](https://github.com/Vexa-ai/vexa/issues/539)) |
| Segment-latency env knobs                                               | partial — programmatic config exists, no env wiring · prepared: [#535](https://github.com/Vexa-ai/vexa/issues/535)                                                                                                                                                                                             |
| Swagger auth-scheme fixes                                               | not carried — and not cosmetic: all 61 secured operations reference a scheme that doesn't exist, so Swagger auth and generated clients fail · prepared: [#531](https://github.com/Vexa-ai/vexa/issues/531)                                                                                                     |
