feat(calls): transcripts archive page + harden 1:1 toggle (LC-394) #408
Loading…
Reference in a new issue
No description provided.
Delete branch "feat/lc-394-transcript-archive"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Fixes LC-394 (follow-up to the LC-393 transcription epic). From testing: transcripts were hard to find ("I don't know where it saves"), and 1:1 call transcription seemed unreliable.
1. Transcripts archive (the main ask)
Transcripts were only reachable via the one-off "transcript saved" system message in the room - no list, no home. Added a
GET /transcriptsarchive listing every transcript the viewer can access (their DM calls + voice channels they belong to), newest first. Each row headlines the DM peer's name (or the voice-room name), with the start time, status (in progress / ended), segment count, and a link to the full transcript. A sidebar nav entry (next to Saved / Scheduled) makes it discoverable.Access: each candidate is gated with the same
is_room_accessiblecheck the single-transcript page uses (bounded scan of the most recent, then per-row access filter), so a transcript from a room you can't see never appears. The new testarchive_lists_only_accessible_transcriptsproves a member sees their transcript and a non-member does not.So: enclave/voice transcripts now have a visible home, and you can browse past calls.
2. 1:1 transcription robustness
Voice-channel transcription worked, but a 1:1 call showed no live transcription. The server + client paths are symmetric with the working voice path; the one 1:1-specific dependency was that the in-call toggle resolved its room only from the
window.__lcCallRoomglobal.call.jsnow also stampsdata-lc-roomon the toggle when a call goes active (cleared on end), sotranscribe.jsresolves the room the same bulletproof way the voice toggle does. This removes the timing/global dependency as a failure mode.Honest note: I couldn't reproduce the 1:1 failure in code (gate, broadcast, capture, and caption display all looked symmetric with voice, and DMs do populate
room_members), so this is a defensive hardening of the most likely cause rather than a confirmed single root cause. If 1:1 still shows nothing after this, the next thing to check is whether the deployed build is current and the browser console for a failed/call/{id}/transcript/start.Testing
tests/transcripts.rs-> 8 green (added the archive access test);just check,just test,just test-saasall exit 0;just build-cssregenerated.No operator action: no new env var, no migration. This is effectively the start of LC-393's Phase 4 (browse).