-
Mahmoud Aglan authored
One idempotent migration for every hosting package: stages carry their own rounds, teams, team matches and stage entries, playable brackets, check-in, waitlist, registration forms and answers, prize categories and a prize hold, presentation (media, sponsors, ad slots, announcements), disputes, certificates, notices, forbidden pairs, tournament columns on the backgammon, domino and ludo tables, and club and lobby groups. Two storage buckets: tournament-media (public) and tournament-uploads (private). The 21 tournament tables keep RLS on with the service role only: anon and authenticated hold no grant at all (they read nothing there today; RLS had no policy for them). el3ab_tournaments and el3ab_tournament_rounds keep the read policies Realtime needs. Applied to production on 2026-10-26 after a backup in /root/backups/2026-10-27-hosting-schema/, then run a second time: the schema dumps before and after the second run are identical, and the 9 tournaments, 16 registrations and 39 rounds are unchanged (the 4 legacy string pairings hold objects, so none was unwrapped). A commented rollback block is at the end of the file, tested inside BEGIN/ROLLBACK on production. Departures from the spec, each recorded in docs/tournament-hosting-contract.md: 'unpaired' rounds stay legal only for the old Swiss service, a team event must have a team size, dispute_window_minutes gets a column, groups get kind and tournament_id. Co-Authored-By:Claude Opus 5.5 <noreply@anthropic.com>
873278e4