Skip to main content

Routine video release checklist

Release scope​

This release covers competition camera pairing, admin and D1 control, manual device recording, camera orientation controls and battery warnings, local-first storage, retryable uploads, staff playback and downloads, publication controls, plan-based retention, recovery tools, and published-video playback on the public leaderboard.

Use this checklist in the development environment before promoting the same build and backend configuration to production.

Environment readiness​

  • Confirm the mobile app and web app point to the intended Firebase environment.
  • Confirm camera, Firestore, storage, and notification permissions are available on test devices.
  • Confirm the video provider credentials, webhook endpoint, webhook signing secret, and private-playback signing key belong to the same environment.
  • Confirm the video account has capacity for new test assets.
  • Confirm Firestore rules and indexes are deployed.
  • Confirm the scheduled camera/video maintenance job is active.

Minimum device and browser matrix​

Test at least:

  • One current physical iPhone
  • One current physical Android device
  • Chrome desktop
  • Safari desktop or iPhone
  • An administrator or manager
  • An assigned D1 judge
  • A restricted staff user
  • A user from another tenant
  • An anonymous spectator

Use physical devices for camera, battery, storage, backgrounding, and network-interruption tests.

Core recording paths​

Complete one recording through each source:

  • Admin-controlled recording
  • D1-controlled recording
  • Manual device recording

For each recording, verify the competition, session, gymnast, apparatus, discipline, vault number, source, device, expiry, and score/routine link.

Command checks​

  • Start, pause, resume, stop, and cancel
  • Change gymnast before recording
  • Send the same command twice quickly
  • Send a command while the camera is offline
  • Reset a stuck camera state
  • Trigger Upload pending from the dashboard

The web and mobile states should converge without duplicate recordings or commands.

Connectivity and interruption checks​

  • Record with stable Wi-Fi.
  • Record while offline, then reconnect.
  • Disconnect during upload and retry.
  • Restart the app with a queued upload.
  • Open the recording queue with local, queued, and failed items; confirm context, recorded time, duration, size, attempt count, and errors remain accurate after restart.
  • Retry one failed recording and confirm only that item uploads. Retry all with multiple items and confirm completed items leave the pending list while failures remain with their local-copy message.
  • Open the recording queue while recording and confirm it remains readable while every upload action is disabled. Confirm no playback or deletion action is present.
  • Leave the app open and confirm the camera remains online.
  • Background the app and confirm the camera becomes offline.
  • Lock the screen or interrupt the camera and confirm the recording is preserved or clearly reported as stopped.

Device operation checks​

  • Open the bottom-right gymnast-rotation sheet in portrait and landscape, change the rotation and gymnast, dismiss it, and confirm the camera context updates without remounting the preview. For a numbered gymnast, confirm the same #number appears beside the name in the rotation list and live recording overlay; verify duplicate names remain distinguishable.
  • Open the gymnast-rotation sheet while recording and confirm the roster remains visible while all selection controls are disabled.
  • Exercise the 1×, 2×, and 3× framing presets before and during recording on iPhone and Android; confirm the preview and saved video respond, rotation preserves the selection, and reopening the camera resets it to 1×. On an ultrawide iPhone, confirm 0.5× appears, selects the ultrawide lens, and cannot switch to or from that physical lens during recording. Confirm 0.5× stays hidden when no ultrawide lens is reported.
  • Switch between 720p and 1080p in Operations on iPhone and Android. Confirm the record control is unavailable while the camera session reloads, the top badge updates, the choice persists after reopening the camera, the saved file has the expected dimensions, and the selector is disabled during recording.
  • With Automatic selected, rotate through portrait and both landscape directions before and during a recording.
  • Position the phone in each direction, select Lock current, try rotating while Operations is still open, then close and reopen the camera; confirm the sheet and camera remain in that exact direction throughout.
  • Leave the camera and confirm non-camera screens return to portrait.
  • Confirm orientation controls are disabled while recording.
  • While unplugged, verify the Operations warning below 20% and the viewport warning below 10%.
  • Enable Low Power Mode or Power Saver above 20% and confirm the Operations warning appears.
  • Confirm every battery warning remains informational and recording can still start, stop, and save locally.
  • Upload a recording for a numbered gymnast with a multi-word name and confirm the Mux asset title and downloaded MP4 use number - given name(s) surname initial - apparatus - competition - capture date - short ID, without the full surname. Repeat without a competition number and for Vault 1/2.

Video lifecycle checks​

Verify the expected actions and messaging for:

  • Local or queued
  • Uploading
  • Uploaded
  • Processing
  • Ready and staff-only
  • Published
  • Unpublished
  • Failed
  • Expired
  • Deleted

Use Refresh status for an uploaded or processing video. Confirm Download prepares an MP4 when needed.

Privacy and role checks​

  • Staff-only videos cannot be read or played anonymously.
  • Only authorised competition managers can publish, unpublish, delete, reset cameras, or run recovery cleanup.
  • Publishing requires the organiser consent confirmation.
  • Session-level public-video disablement blocks manual and automatic publication.
  • Published videos appear only beside the matching public score.
  • Unpublishing removes public playback immediately.
  • Another tenant cannot control cameras or read private videos.

Retention and cleanup checks​

  • Confirm the displayed retention and expiry match the tenant plan.
  • Confirm a plan change affects new recordings without shortening existing expiry.
  • Run Run recovery cleanup twice and confirm the second run is safe.
  • Confirm expired videos become unavailable publicly and are removed with their video assets.
  • Confirm a failed asset deletion leaves the record private for a later retry.

Release decision​

Do not promote when any of these blockers remain:

  • A local recording can be lost during a normal retry or restart.
  • An unauthorised user can control a camera or access a private video.
  • A published video is linked to the wrong gymnast, session, apparatus, or vault.
  • Duplicate uploads create multiple playable assets for one local recording.
  • An active foreground camera repeatedly becomes offline.
  • Webhook or status recovery cannot move a completed upload to ready playback.

Record non-blocking device limitations and operational workarounds in the release notes before production rollout.