linnet/frontend
pyr0ball b92285b4b3 feat: tier-aware sessions, session pinning, translation, audio settings, voice status
Backend:
- tiers.py: real license validation via Heimdall (self-hosted key or cloud user_id),
  30-min cache, BYOK exception for translation
- session_store.py: create_session() accepts tier/user_id/window_ms/transcribe_lang/
  num_speakers; tier-aware _should_reap() (Free: reap on subscriber leave, Paid: activity TTL);
  auto-snapshot paid sessions with history on reap; voice-ready probe on session start
- services/translator.py: DeepL-backed label translation, CF-managed and BYOK key paths,
  per-session label cache
- models/session.py, scene_event.py, service_event.py: new event types and session fields
- api/snapshots.py: GET /sessions/history + POST /session/resume (Paid tier only)
- api/dev.py: dev-only /dev/voice/stop|start|restart proxy to cf-orch agent
- migrations/002_session_snapshots.sql: session_snapshots table

Frontend:
- ComposeBar.vue: pre-session settings panel (window, language, speakers, Elcor toggle)
  with slide transition; passes options to startSession()
- stores/settings.ts: persistent user preferences (localStorage), survives page reload
- stores/session.ts: voiceReady/voiceError/voiceWarning states; SceneEvent/AccentEvent/
  ServiceEvent types; TTL timers for environ/queue badges; startSession() accepts opts
- composables/useToneStream.ts: handlers for scene-event, accent-event, service-event SSE
- NowPanel.vue: diarization speaker identity badge, acoustic scene badge, privacy risk indicator
- HistoryStrip.vue: per-speaker colour chips in history strip
- components/DevPanel.vue: dev-only cf-voice stop/restart controls + thread view toggle
- App.vue: DevPanel in footer (DEV only), threadView flag switches v0.1.x/v0.2.x preview

Tests:
- tests/test_pinning.py: 20 tests covering tier-aware reaping, snapshot creation,
  and translator behaviour
- tests/test_tiers.py: 17 tests covering key validation, cloud resolution,
  caching, require_paid() gate, BYOK exception
- All 72 tests passing
2026-06-24 15:25:46 -07:00
..
public feat: Notation v0.1.x scaffold — full backend + frontend + tests 2026-04-06 18:23:52 -07:00
src feat: tier-aware sessions, session pinning, translation, audio settings, voice status 2026-06-24 15:25:46 -07:00
index.html feat: Notation v0.1.x scaffold — full backend + frontend + tests 2026-04-06 18:23:52 -07:00
package-lock.json fix: mobile tab timeout — idle session reaper + wake lock + visibility reconnect 2026-04-11 09:42:42 -07:00
package.json feat: Notation v0.1.x scaffold — full backend + frontend + tests 2026-04-06 18:23:52 -07:00
uno.config.ts feat: Notation v0.1.x scaffold — full backend + frontend + tests 2026-04-06 18:23:52 -07:00
vite.config.ts feat: tier-aware sessions, session pinning, translation, audio settings, voice status 2026-06-24 15:25:46 -07:00