Vexa v0.12.3 — the first release to pass a live human witness. Same delivery machinery as
0.12.1, now with a batch of real features and the witness fixes that batch's own release pass
surfaced. Proven on what we name; the gaps are named too.
Witnessed value
A human joined a real Google Meet on a fresh self-host deploy of these published images, admitted
the bot, and spoke — and the live transcript rendered in the terminal, speaker-attributed, and
sustained through continuous speech (local CPU whisper). That is the core promise, witnessed —
not inferred from green CI. (Owner witness, 2026-07-13.)
What's in it
- Setup wizard now ends with a working bot (#504) — the documented UI STT path actually spawns
a transcribing bot; the top fresh-install complaint (#502). - Gateway edge protection (#555) — per-IP throttle, auto-ban, static blocklist; on by default
with generous limits. Opt out withGUARD_ENABLED=false. - Install runs the artifacts we proved (#569/#572) —
make allnow pulls the published,
release-validated images (services, workers, agent, bot) instead of building from source; no more
local build shadowing a published:v012.make devis the from-source contributor path. - Apple Silicon (#558) — arm64 images published (best-effort; not yet CI-validated — see below).
- Governance made real (#559/#563) — the validation ladder, the per-PR autonomous value leg
(pr-value), and the two human choke points (merge card + release witness). This release is the
first run of that witness in anger.
The witness fixes (this batch's release pass caught its own bugs)
- #586 — live transcript stream was blank on lite: agent-api couldn't reach meeting-api to
authorize the SSE feed (missingVEXA_MEETING_API_URL). Fixed; and CPU STT default →small. - #587 — REST transcript timestamps were corrupted to the year 2083 (double-counted epoch).
- #588 —
validate-litenow guards the #586 class: it subscribes to the live stream as the
owner and fails if it 403s. The machine now catches what the human caught here. - #590 — the bot build no longer hard-fails when HuggingFace rate-limits CI; it retries then
degrades gracefully (the diarization model is fetched at runtime instead).
Validated on — coverage statement (proven on what we name)
Machine legs, all green against the published :v0.12.3 images (run):
- Google Meet — WORKS, witnessed. Join → capture → CPU STT → speaker-attributed live transcript,
rendered end to end by a human. Deployment: lite (self-host compose). - Every documented install path — compose · lite · Kubernetes/helm come up and pass the product
FSM; 0.10 API backward-compat green; real bot spawn green; every image proven to match its name. - Fresh machine — these images were pulled onto a from-nothing cloud VM and the digest verified
against Docker Hub (the install-truth path, #572).
Honestly unclaimed / experimental — do not rely on these yet
- Jitsi (#543) — EXPERIMENTAL. The join path works, but the bot gets stuck at admission on real
rooms and never becomes visible/transcribes. Tracked in #592. Ships as experimental. - Microsoft Teams — KNOWN BROKEN. The bot joins and is admitted, then self-leaves within ~0.1s
(a post-admission fault evicts it) — no transcript. Tracked in #593. - Autonomous audio→words proof — not yet a CI leg (#560); transcription correctness is
witness-proven this release, not machine-proven. - arm64 — published best-effort; no CI leg executes an arm64 image yet.
- Hosted STT under load — the internal fallback token is capacity-saturated (ops item); this
release's transcript was witnessed on self-hosted CPU whisper.
Pointers
:v012 moves to v0.12.3 on all images. :latest unchanged. vexaai/vexa-bot:{dev,latest}
untouched (0.10 line). v0.12.2 was validated and promoted internally but failed its witness and
was never released — v0.12.3 supersedes it.