v0.12.15

Vexa-ai/vexav0.12.15Jul 19, 2026by DmitriyG228

Upgrading?

AI Summary

The truthful-failure & reliability release ensures meetings tell the truth about how they ended, fixing never-joined bots and typed join-failure taxonomy.

Key Highlights

  • Never-joined bots resolve to `failed` instead of `completed`.
  • Typed join-failure taxonomy (permanent vs transient failures).
  • Config preflight catches STT misconfig.
  • Webhook delivery outcomes are reported.
  • Speaker name hints wired to transcriber.

New Features

  • Truthful failure states.
  • Typed join failures.
  • STT preflight checks.
  • Speaker name wiring (Teams/Zoom).

Full Release Notes

## v0.12.15 — the truthful-failure & reliability release

Absorbs the v0.12.13 and v0.12.14 candidate batches (tagged, validated, superseded before witness per the two-phase flow) — **27 accounted values**, storm-validated in production.

### Fixed — a meeting now tells the truth about how it ended
- **A bot that never joined is not a "completed" meeting (#807 / #824).** Never-admitted bots resolve `failed` / `join_failure`; over-capacity meetings whose bot pods never schedule reconcile `requested → failed` instead of hanging.
- **Typed join-failure taxonomy (#806 / #827).** Zoom/Teams admission verdicts are typed — permanent failures (denial, lobby-timeout, signed-out) stop being retried as if transient.
- **Config preflight catches STT misconfig where you set it (#511 / #823 / #832).** A wrong STT URL or an exhausted token now probes **RED** (the preflight transcribes real audio) instead of surfacing minutes later as an empty transcript.
- **`/bots/status` answers from the query, not the whole account (#803 / #825).** No more hauling every meeting's data blob into memory.
- **`browser_session` + unknown platforms refused typed at intake (#816 / #829).** A typed 422 before any DB write — no orphan meeting rows.
- **Every webhook delivery outcome is reported (#815 / #817).** Non-delivery was silent; now it's recorded.
- **POST /bots derives native_meeting_id or refuses typed 422 (#794).** No orphan meetings on malformed input.

### Wiring — segments carry who spoke
- **Teams speaker name hints wired to the transcriber (#498 / #789).**
- **Zoom `createZoomSpeakers` wired (#538 / #787).**
- (Value bullets corrected to wiring-accurate per #814.)

### Also in this release
- Configurable default bot name (#621) · authenticated session lifecycle (#724/#725 → #790) · record-always capture boundary (#830 → #831) · fail-fast control-plane reachability gate (#530 → #781) · probe `timeoutSeconds=5` across app services (#802 → #804) · deprecated 0.10 dashboard bounded off-by-default home (#813 → #828) · compose first-run `make all` BROWSER_IMAGE fix (#812 → #818) · shared-meetings UNION-split query + indexes (#800 → #801) · gmeet i18n-safe signed-out lobby detection (#788) · msteams leave fallbacks (#782) · adm-zip advisory closed (#793) · governance (#786, #799, #833).

### Witnessed
Signed receipt: `releases/v0.12.15/witness.json`. Witness basis: the **delivered production deployment** (helm rev 92) + a comprehensive **storm validation** (auth wall, tenant isolation, typed refusals, max-bots cap race-safety, capacity back-pressure, Redis/gateway chaos, over-capacity reconciliation) run on the same image. Prod value at scale: **8 completed meetings carrying the `segments_captured` transcript-delivery marker** since cutover.

Related Repositories