Adds app/api/main.py (create_app factory with health endpoint), utterances
router (GET /api/utterances with date/room/speaker/status filters, GET clip,
POST tag, POST dismiss), stub routers for speakers/rooms/search/rag, and
tests/routes/ with 6 passing TDD tests.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Implements process_utterance() with concurrent STT/embedding via asyncio.gather,
speaker matching with configurable thresholds, utterance DB write, and WAV clip save.
httpx imported lazily to keep the dev environment functional without full install.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
TDD: 3 tests covering silence passthrough, speech→silence segment emission,
and short-speech discard. Uses _speech_ms tracking (not total buffer length)
for accurate min_speech_ms enforcement. Silero VAD import is try/except'd
so tests run without torch via mocker.patch on vad_prob.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Implements pack/unpack_embedding, cosine_similarity, find_best_speaker_match
(max-per-speaker grouping, known/ambiguous/unknown thresholds), and embed_audio
with lazy resemblyzer import so tests run without the docker-only dependency.
10 tests passing.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
SQLite database layer with thread-local connections, WAL journal mode,
foreign key enforcement, and FTS5 full-text search on utterances via
content-table triggers. TDD: 5 tests written first, all passing.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>