feat: PWA service worker + offline caching for classifier models
feat: conversation thread UI — per-speaker annotation stream
feat: speaker diarization via pyannote.audio (cf_voice.context)
feat: ToneEvent annotation overlay UI (mobile-first)
feat: annotation history panel with confidence threshold filter
feat: tone classifier pipeline — YAMNet AME + wav2vec2 via cf_voice.context
feat: cf_voice blocking dependency — track circuitforge-core#TBD
feat: local STT integration via cf_voice.io (whisper.cpp)
chore: repo scaffold for Notation milestone
Translation BYOK: assisted setup flow for self-hosters using their own DeepL account
Voice accessibility: wire falcon phone workflows through linnet
Voice accessibility: wire ibis phone workflows through linnet
Voice accessibility: wire harrier phone workflows through linnet
linnet — Real-time tone annotation for ND/autistic users (Elcor mode)
Announce adaptive service identity when bridging to live human agent
Per-user LLM config: expose in Settings UI + cloud admin tooling
Implemented. Three parts:
- company_research.py now accepts config_path and uses the per-user llm.yaml when present (same pattern as cover_letter). Key gotcha: must call scripts/llm_router.py…
Per-user LLM config: expose in Settings UI + cloud admin tooling
[Vue] Interview Prep: Practice Q&A (mock interview) and Call Notes missing
Implemented. InterviewPrepView has a new Practice Q&A tab with chat bubble UI. POSTs to existing /api/jobs/{id}/qa/suggest endpoint, seeds from persisted Q&A history on load, appends new exchanges…
[Vue] Interviews: rejected jobs analytics section missing