# UI smoke (MVP) ## Forudsætning - Host er logget ind i Django. - Mindst én aktiv kategori med spørgsmål findes. ## Cutover-forudsætning (`USE_SPA_UI`) - `USE_SPA_UI=false` (default): brug legacy routes `/lobby/ui/host` + `/lobby/ui/player`. - `USE_SPA_UI=true`: host må gerne testes på SPA deep-link route `/lobby/ui/host/` (fx `/lobby/ui/host/guess`), player på `/lobby/ui/player`. ## Flow 1. Verificér cutover-route matcher valgt flag (legacy vs SPA shell). 2. Åbn host-siden og tryk Opret session. 3. Åbn player-siden i 3 faner/enheder. 4. Join alle spillere med sessionkode og nickname. 5. Host: vælg kategori, Start runde, Vis spørgsmål. 6. Spillere: brug round_question_id og submit løgn. 7. Host: Mix svar. 8. Spillere: submit gæt. 9. Host: Beregn score og Vis scoreboard. 10. Host: Næste runde eller Afslut spil. ## Smoke-gate (staging cutover) `USE_SPA_UI` må kun aktiveres i staging når følgende er opfyldt: - Cutover route sanity er PASS for både OFF (legacy) og ON (SPA shell). - Én fuld gameplay-runde til scoreboard er PASS. - Next-round/final leaderboard sanity er PASS. - Ingen nye blocker-regressioner i host/player kerneflow. ## Samme release-vindue: SPA OFF + ON verifikation Kør begge checks i samme release-vindue (samme deploy/artifact version): 1. **OFF-pass (legacy)** - `USE_SPA_UI=false` - Verificér legacy routes + fuld runde. 2. **ON-pass (SPA)** - `USE_SPA_UI=true` - Behold samme release artifact og kun toggl flag/version-token ved behov. - Verificér SPA shell routes + fuld runde. 3. Dokumentér begge pass i samme smoke-artifact med UTC timestamps og `WPP_SPA_ASSET_VERSION`. ## Rollback check points Skift straks tilbage til `USE_SPA_UI=false` hvis en gate fejler: 1. Verificér legacy routes (`/lobby/ui/host` + `/lobby/ui/player`) fungerer igen. 2. Log rollback trigger + kort repro i smoke artifact. 3. Opret/link blocker issue før nyt cutover-forsøg. Resultat: En fuld runde kan køres uden rå API-kald fra terminal.