Skip to content

[EPIC] LiveCap v1.2 — STT quality, coaching polish, release readiness #107

Description

@realproject7

Vision

v1 (MVP, #1) and v1.1 (meeting intelligence, #76) are shipped and merged. This EPIC covers the gap between "feature-complete" and "a product the operator trusts in real meetings": STT accuracy/calibration on the production model, coaching latency + persistence, local-engine verification, design-system debt, and everything that can be prepped before the Apple-signing operator gate (#14).

Source: handoff audit 2026-07-05 — every item below was verified against current main (fa26d60) with file:line evidence before ticketing.

Problem inventory (why these tickets)

  1. STT floors are tuned for the wrong model. CONFIDENCE_FLOOR=0.5 / AUTO_DETECT_CONFIDENCE_FLOOR=0.6 (crates/livecap-core/src/whisper/engine.rs:35,48) are hardcoded consts seeded against tiny, but production default is small (crates/livecap-core/src/model.rs:22). No per-model table, no runtime override — live tuning requires recompiles.
  2. STT live behavior (STT: whisper emits phantom captions on silence/ambient noise #92/STT: wrong source-language detection (English transcribed as Chinese) #93/Session start: choose spoken (source) language + target language #94) was never verified end-to-end with real varied audio; only say TTS and the tiny-model integration tests.
  3. No user-facing model choice. AppSettings has no STT model field; better models (medium / large-v3-turbo) exist in MODEL_NAMES but are unreachable.
  4. Coaching is slow by construction: coachUtterances loops serially, one CLI turn per utterance through a shared turn mutex (packages/engine/src/extras-pipeline.ts:219-228) — ~30 s for 10 utterances.
  5. Coaching rewrites are not persisted: archive CaptionEntry has no coaching fields (packages/archive/src/types.ts:8-21); the Dashboard coaching tab can only show "before" text (src/dashboard.ts:310-334).
  6. Local Qwen tier never ran for real: code-complete and e2e-tested only against a fake llama-server (packages/engine/test/local-llm-engine.e2e.test.ts). Real download → real server → real quality unverified.
  7. Dev-verify loop is painfully slow: capture-visible is env-only (needs LSEnvironment inject + re-sign), and every ad-hoc re-sign resets TCC → an operator SecurityAgent click per rebuild.
  8. Design-token debt: 3× #0d0f12, #1a1205, #7ad17a + ~45 raw rgba(255,255,255,…) literals in src/styles.css with no CI guard.
  9. Release pipeline doesn't exist yet — nothing in CI for signing/notarization/DMG; all of it except credentials can be prepped ahead of gate [GATE] Domain, signing, notarization, first release #14.

Tickets & order

# Ticket Route Status Depends on
#108 Dev-verify ergonomics: dev-flags file + stable dev signing identity claude ✅ merged (PR #119; TCC-persist AC pending operator session) — (do first)
#109 STT: per-model confidence-floor table + env override quadwork ✅ merged (PR #120)
#110 Settings: whisper model selection + download-on-switch claude ✅ merged (PR #127) #109
#111 STT live verification & floor calibration (real audio) claude (PO) open #108 #109
#112 Engine: batch coaching rewrites (latency) quadwork ✅ merged (PR #121)
#113 Archive: persist coaching rewrites (+ round-trip, amend) quadwork ✅ merged (PR #122)
#114 UI: save coaching on generate + Dashboard renders rewrites claude ✅ merged (PR #124) #113
#115 Verify: local Qwen engine end-to-end on device claude (PO) open
#116 Design: tokens + CI raw-color guard quadwork ✅ merged (PR #123)
#117 Release prep: signing/notarization/DMG pipeline claude (PO) ✅ merged + dry-run verified (PR #125, #130)
#118 Engine: BYO API key tier backlog unscheduled
#129 release.yml: fix DMG collect path claude (PO) ✅ merged (PR #130) #117
#131 Dashboard: search sessions (title/summary/board/transcript) quadwork ✅ merged (PR #133)
#132 [R&D] Alternative STT engines feasibility backlog post-MVP (after #111)

Dispatch order: #108 first (unblocks all device verification) · QuadWork VPS stream: #109#112#113#116 (one ticket per batch) · local/PO stream: #110#111, #114 (after #113), #115, #117 · gate #14 stays open, operator-owned.

Engineering policy

Same binding rules as #1: no mock/stub/TODO in app code (CI gate), tests first, branch task/<issue>-<slug>, PR Fixes #<issue>, CI green, never log caption content.

Metadata

Metadata

Assignees

No one assigned

    Labels

    epicTop-level epic

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions