# Voice First / Executive Board — Review Report **Audience:** Ingo Wagner **Branch:** `antigravity-handoff/project-timeline` @ `8d0b8e3` (PRs #33–#40 merged + follow-up fixes) **Date:** 2026-09-19 (Europe/Vienna) **Verifier host:** evOo Linux box (Tailscale `grokbot-box`). Ingo’s Mac was **not** SSH-reachable from this host (no key / Tailscale SSH off). ## Definition of done checklist | # | Criterion | Result | Evidence | |---|-----------|--------|----------| | 1 | Dev stack healthy: API `:3100/health` + web `:5173` | **BLOCKED (Mac)** | Mac mini / MacBook Air online on Tailscale; ports 3100/5173 not exposed; SSH `Permission denied (publickey)`. Could not restart `pnpm dev` on `/Users/ingowagner/evOo`. | | 2 | Executive Board: user VOICE FIRST turn → UX Designer replies with concept thoughts + ≥1 question; no raw `handoff_to_bot` JSON; no bounce to Boss | **PASS (unit / code)** · **UNVERIFIED (live)** | PRs #39–#40 + `bot-reply-sanitize`, `prose-handoff-recovery`, `group-handoff` workshop instructions. 56 focused tests green. Live group chat not exercised (no Mac API). | | 3 | Transcript: no tool JSON blobs / no `assistant:` role leaks | **PASS (unit)** · **UNVERIFIED (live)** | `sanitizeBotReplyText` strips prose tool JSON + role prefix; `speechFromBlocks` skips tool-activity + unspeakable blobs (regression fixed after merge). | | 4 | Voice Mode (CallView) UX Designer: invite before mic when owning work; after outgoing handoff mic stays closed + transfer line | **PASS (code + unit)** · **UNVERIFIED (live)** | CallView rebuilt: `speakUserTurnInvitation` / `handleSpeechIdle` / `shouldSpeakOpeningInvitation`; `parkAfterHandoff` + `voiceHandoffTransferLine`; mount no longer auto-opens mic. | ## What was done on this pass 1. Merged open PR heads **#33–#40** into `antigravity-handoff/project-timeline` and **pushed** to origin. 2. Fixed merge regression in `packages/core/src/speech-text.ts`: `speechFromBlocks` again drops tool-activity chips and unspeakable tool JSON (test was failing after `-X theirs` merge). 3. Fixed merge regression in `apps/web/src/pages/CallView.tsx`: invitation-before-mic restored; outgoing handoff keeps mic closed and speaks transfer line. 4. Focused vitest: **56 passed** (`call-view-voice`, `voice-handoff`, `speech-text`, `bot-reply-sanitize`, `prose-handoff-recovery`). ## Remaining gaps (for Ingo’s Mac) 1. **SSH / Tailscale SSH** from agent hosts to `macbook-air-von-ingo` / `mac-mini-von-ingo` so localhost verify can run without manual UI. 2. On Mac repo path `/Users/ingowagner/evOo`: ```bash git fetch origin && git checkout antigravity-handoff/project-timeline && git pull pnpm install && pnpm dev # ensure :3100 + :5173 ``` 3. Live Executive Board check (RPC/DB preferred): - Find Executive Board `chat_groups` id. - Post a fresh user turn about **VOICE FIRST AI Talks**. - Confirm UX Designer message: concept prose + question; no `handoff_to_bot` JSON; Boss not re-tasked with the same work. 4. Open Voice Mode on UX Designer: hear invite before mic; after a specialist handoff, mic stays closed with transfer caption. ## Sample expected UX Designer reply shape (sanitized) > I’ve been thinking about VOICE FIRST AI Talks as a short, spoken workshop: one specialist owns the lane, invites you before the mic opens, and never dumps the same task back upstairs. For the first talk, I’d keep it to three beats — hook, one demo, one ask. > **Which audience should we design for first — founders, designers, or internal execs?** ## Group id tested *None live — Mac localhost unreachable.* After Mac verify, record `chat_groups.id` here. ## Branch / PR notes - Timeline branch now contains merges of `cursor/voice-mic-energy-2d2c` … `cursor/handoff-prose-sanitize-d1d4` plus commits: - `fix(core): drop tool-activity and unspeakable blobs from speechFromBlocks` - `fix(web): restore invite-before-mic and keep handoff mic closed` - Draft PRs #33–#40 can be closed or marked superseded once this branch is the review source of truth.