WordloopWordloop
WorkMeeting RecordingTechnical Design DocMilestones11 Recording Hardening

App — Recording Hardening UI

MediaRecorder/OPFS capability gate before recording starts, multi-tab guard, no-audio warning banner, auto-stop countdown overlay, and the diagnostics panel.

App — Recording Hardening UI

Owner: App Engineer Domain: app Complexity: M Prerequisite: Core Recording Limits and ML Recording Health Signals slices merged

When this slice is complete, the App gates recording start on browser capability support, keeps the background tab's title and banner accurate, disables Start in a second tab when another tab already has an active recording, shows a no-audio warning banner, displays an auto-stop countdown overlay as the duration limit approaches, and renders a diagnostics panel listing recording lifecycle and health events.

Required Capabilities

  • Before recording starts, the App checks MediaRecorder / OPFS capability support and blocks unsupported browser/capability combinations with a clear fallback message.
  • While backgrounded, the tab's title and any in-app banner reflect the recording state.
  • GET /meetings?has_active_recording=true (or an equivalent signal) disables the Start control in a second tab while another tab has an active recording for the same user.
  • A no_audio_detected health signal renders a warning banner without implying the recording has stopped.
  • As the duration limit approaches, an auto-stop countdown overlay is shown.
  • A diagnostics panel lists recording lifecycle and health events from GET /meetings/{id}/recording/events.

Dependencies

  • Core Recording Limits slice and ML Recording Health Signals slice must be merged.

Test Cases

Test cases map to tests/bets/meeting-recording/test_milestone_11_recording_hardening.py. Run via ./dev test bet meeting-recording.

TestLocationAssertion
test_background_tab_behavior_is_visibletest_milestone_11 (App Vitest test_app_background_tab_title_and_state)The tab title/banner reflect the recording state while backgrounded.
test_no_audio_input_warns_or_auto_stopstest_milestone_11 (App Vitest test_app_no_audio_warning_banner)A no_audio_detected health event renders a warning banner.
test_recording_auto_stops_at_hard_limitstest_milestone_11 (App Vitest test_app_auto_stop_countdown_overlay)An auto-stop countdown overlay is shown as the duration limit approaches.
test_multi_tab_guard_blocks_conflicting_recording_controltest_milestone_11 (App Vitest test_app_multi_tab_guard_disables_start)The Start control is disabled in a second tab while another tab has an active recording.
test_unsupported_safari_or_opfs_capability_is_gatedtest_milestone_11 (App Vitest test_app_capability_gate_blocks_unsupported_browser)Unsupported capability combinations are gated before recording starts.
test_recording_diagnostics_capture_health_and_stop_reasonstest_milestone_11 (App Vitest test_app_recording_diagnostics_panel_lists_events)The diagnostics panel lists recording lifecycle and health events.

Completion Checklist

  • Code merged and deployed
  • Bet progress tests pass (./dev test bet meeting-recording)
  • Permanent service tests implemented per testing strategy
  • Code review completed
  • Testing review completed
  • System documentation updated (as applicable)

On this page