## Summary
**Bug Fixes**
- **Briefing discuss**: Fetch full article content via trafilatura instead of using cached RSS snippet — fixes wrong-article discussions
- **Chat from-article**: Same full-article fetch fix for Android News screen discuss path
- **Push notifications**: VAPID key stored as PEM but pywebpush expects base64url DER — fixed format; added admin "Regenerate VAPID Keys" button in Settings → Notifications
- **Title generation**: Rewrote to only use user messages — eliminates tool-call JSON, system prompt fragments, and special token leakage from titles
- **Project inference**: Reinforced "never infer project names" in system prompt (tool description alone wasn't sufficient)
- **Voice mic button**: Now visible on HTTP with graceful error toast; was hidden because `navigator.mediaDevices` is undefined on non-HTTPS
**Features**
- **STT context**: Pass last assistant message as Whisper `initial_prompt` to reduce mishearings (e.g. "gold" → "cold")
- **Voice in ChatInputBar**: Click-to-toggle mic with silence detection integrated directly into chat input; VoiceOverlay removed
- **Voice status reactivity**: Re-checks voice availability on tab visibility change and after saving voice admin settings
- **Background model**: Default bumped from qwen2.5:0.5b to qwen2.5:3b for reliable title/summary generation
## Test Plan
- [ ] Click Discuss on a briefing article — verify correct article is summarised
- [ ] Regenerate VAPID keys in Settings → Notifications, re-enable, verify push works
- [ ] Create a task via chat — verify no project is inferred
- [ ] Check chat titles are clean (no JSON fragments or special tokens)
- [ ] Mic icon visible in chat input bar; click to record, auto-stops on silence
- [ ] On HTTP: mic shows, clicking gives "requires HTTPS" toast
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Summary
Bug Fixes
navigator.mediaDevicesis undefined on non-HTTPSFeatures
initial_promptto reduce mishearings (e.g. "gold" → "cold")Test Plan
🤖 Generated with Claude Code