QA release: backend 1.1.24, frontend 1.1.69

Images:
  revesoft/conference-backend:1.1.24   sha256:548ef5e8d3c5a1bcc57a557b79fcde5ca8338868f0a89b44e2291938c17d624c
  revesoft/conference-frontend:1.1.69  sha256:0663eb0d1fb8506b02842d08610bdcfa404756651260c20b03cf61c1534d26a3

Backend 1.1.23 was SKIPPED, not re-pushed: it is published but predates the
grandfathered-plans work, so overwriting it would have changed what that tag
means for anyone who already pulled it.

>>> THIS BACKEND RUNS A DATA MIGRATION ON STARTUP (V1.10.9) <<<
  * every ACTIVE subscription -> package 'grandfathered' (unlimited),
    open-ended, limits_snapshot cleared
  * meetings.max_participants raised to 1000 wherever it is lower
  Untouched: cancelled/suspended subscriptions, tenants with no subscription
  row, and subscription_overrides.
  Idempotent, exercised against MySQL 8.4 - but rolling the image back does
  NOT undo it. Back the database up first.

Also in the backend: companion sessions behind
conferencing.companion-session.enabled (default FALSE - leave it off until the
client side lands), REM-SW-52 chat restriction reaching the server, and the
participant cap raised (per-meeting default 1000, validation ceiling 5000).

Frontend 1.1.69: REM-SW-51 (no "ask to start" when the meeting forbids that
source), REM-SW-58 (phone video letterboxed instead of zoomed), one overflow
menu per Previous row, More-menu icon sizing, red muted-mic mark, admin rail
entry hidden, PMI on/off alignment, meeting-row avatar sizing, horizontal dots
in the participants panel header, non-host join button sized to match the
host's, and the legal pages naming REVE Meeting with support@revesoft.com.

Deploy:
  cd /usr/local/conferencing
  sudo bash setup.sh --upgrade --backend-tag 1.1.24 --frontend-tag 1.1.69

No .env, compose or host-nginx changes needed beyond the tags.
This tag has no release notes.