Formål: Vedvarende scope-board for Fase 3 / MVP-lukning.
Brug denne issue som overblik over aktive/lukkede delopgaver og scope-beslutninger.
Arkitekt opdaterer status/risici her, og scheduler linker nye delopgaver til denne.
PO-prioritet #129 er aktivt prioriteret nu og omsat til konkrete release-nære gameplay-opgaver for FupogFakta.
Bindende målarkitektur: gameplay/UI på både host- og player-sider holdes som SPA (single-page application) med state-flow og navigation uden multi-page hop.
Fokus: hurtigst muligt dokumenteret spilbar version via staging-smoke med #129-adfærden verificeret i praksis.
#59 forbliver post-MVP (needs-approval) og er uden for aktivt scope.
Formål: Vedvarende scope-board for Fase 3 / MVP-lukning.
Brug denne issue som overblik over aktive/lukkede delopgaver og scope-beslutninger.
Arkitekt opdaterer status/risici her, og scheduler linker nye delopgaver til denne.
Definition of done for Fase 3 (gameplay-kernen):
- guess submit ✅
- score calculate ✅
- reveal/scoreboard ✅
- next-round transition ✅
- final leaderboard/slutresultat ✅
MVP-status (arkitektvurdering, 2026-03-01 06:55 UTC):
- PO-prioritet #129 er aktivt prioriteret nu og omsat til konkrete release-nære gameplay-opgaver for FupogFakta.
- Bindende målarkitektur: gameplay/UI på både host- og player-sider holdes som **SPA** (single-page application) med state-flow og navigation uden multi-page hop.
- Fokus: hurtigst muligt dokumenteret spilbar version via staging-smoke med #129-adfærden verificeret i praksis.
- #59 forbliver post-MVP (`needs-approval`) og er uden for aktivt scope.
Topprioriterede gameplay-opgaver (release-nære, 1-3):
1) #129 gameplay-verifikation: lobby -> join -> start (FupogFakta, staging, via #90)
- Acceptance-kriterier:
- 3 spillere kan joine samme session i staging.
- Sessionkode virker med mixed-case + leading/trailing whitespace (trim + uppercase fra #129).
- Host kan starte spil uden blocker/UI-lock.
- Host/player-flow gennemføres i SPA-view uden hard reload eller side-hop.
- Evidens logges i #90 (trin + resultat + tidspunkt).
- Afgrænsning:
- Ingen ny feature-kode; kun release-readiness verifikation.
2) #129 gameplay-verifikation: 1 fuld runde til scoreboard (FupogFakta, staging, via #90)
- Acceptance-kriterier:
- Flow kan gennemføres med 3 spillere: prompt/fakta -> guess -> reveal -> score.
- Scoreboard vises for alle deltagere uden state-desync.
- State transitions sker i SPA-stateflow (ingen multi-page navigation i host/player gameplay-loop).
- Ingen regressionsfejl i submit/reveal-score kæden.
- Evidens logges i #90 med pass/fail og kort fejlnotat ved fail.
- Afgrænsning:
- Ingen balance/polish-opgaver i denne iteration.
3) #129 gameplay-verifikation: næste-runde + afslutning/final leaderboard sanity (via #90)
- Acceptance-kriterier:
- Host kan gå til næste runde efter første scoreboard uden fastlåst state.
- Spillet kan afsluttes til final leaderboard uden blocker.
- Navigation mellem runder/slutvisning forbliver i SPA (ingen route-hop til separate sider).
- Go/no-go input til release-vindue dokumenteres i #90.
- Afgrænsning:
- Ingen post-MVP udvidelser (profiler/historik/persistence).
Aktiv delopgave:
- #90 (staging deploy + smoke sign-off) — samlet release-readiness blocker.
Levende epic-board:
- ✅ Gameplay core: lukket
- 🔄 #129 omsat til release-nær gameplay-verifikation via #90 (topprioritet)
- ⛔ Post-MVP scope: #59 forbliver needs-approval
- 🧪 Smoke-evidens er påkrævet før “MVP done”
Statusopdatering: Delopgave #18 er nu løst via merged PR #19 (guardrail-afstemning af spillerantal). Åbne styringsissues for Fase 3: #16 (board) og #17 (beslutningskilde).
Statusopdatering: Delopgave #18 er nu løst via merged PR #19 (guardrail-afstemning af spillerantal). Åbne styringsissues for Fase 3: #16 (board) og #17 (beslutningskilde).
Statusopdatering (scheduler): Fase 3 DoD i #16 er nu opfyldt i main.
Opfyldt:
guess submit
score calculate
reveal/scoreboard
next-round transition
final leaderboard/slutresultat
Verifikation: ingen åbne PRs/review-fund ved denne kørsel, og branch-state er ren (kun main + release/v0.1.0).
Derfor lukkes #16 som completed. Beslutningsafklaringer holdes fortsat i #17.
Statusopdatering (scheduler): Fase 3 DoD i #16 er nu opfyldt i main.
Opfyldt:
- guess submit
- score calculate
- reveal/scoreboard
- next-round transition
- final leaderboard/slutresultat
Verifikation: ingen åbne PRs/review-fund ved denne kørsel, og branch-state er ren (kun main + release/v0.1.0).
Derfor lukkes #16 som completed. Beslutningsafklaringer holdes fortsat i #17.
Ingen ny scoped implementeringsopgave i denne iteration => no-op.
Scheduler-sync (cron):
- Auth preflight (DEV) er OK.
- Åbne PRs: 0 (ingen review-kommentarer at fixe først).
- #16 bruges fortsat som Fase 3 scope-board iht. flow.
- #17 forbliver beslutningsanker for afklaringer.
- Ingen ny scoped implementeringsopgave i denne iteration => no-op.
Scheduler check-in: preflight DEV OK. Ingen åbne PR-reviewkommentarer at fixe først. Fase 3 DoD-punkterne i #16 er allerede leveret/lukkede (#7, #9, #14, #18), og der er ingen ny åben scoped delopgave under #16 i denne iteration. #17 fortsætter som beslutningsanker.
Scheduler check-in: preflight DEV OK. Ingen åbne PR-reviewkommentarer at fixe først. Fase 3 DoD-punkterne i #16 er allerede leveret/lukkede (#7, #9, #14, #18), og der er ingen ny åben scoped delopgave under #16 i denne iteration. #17 fortsætter som beslutningsanker.
Scheduler-iteration: prioriterede review-fund først på åben PR #25. Blocker-fix var allerede pushed (deploy-script curl bruger nu ${ARCHIVE_URL}), CI var grøn, så flow blev fuldført via officiel review-approval + integrator-merge.
Status nu: open_prs=0. Scope-board #16 og beslutningsanker #17 forbliver aktive som styringskilder.
Scheduler-iteration: prioriterede review-fund først på åben PR #25. Blocker-fix var allerede pushed (deploy-script curl bruger nu `${ARCHIVE_URL}`), CI var grøn, så flow blev fuldført via officiel review-approval + integrator-merge.
Status nu: `open_prs=0`. Scope-board #16 og beslutningsanker #17 forbliver aktive som styringskilder.
Scheduler-status (automatisk): auth-preflight DEV er OK, open PRs=0 (ingen review-kommentarer at fixe først), og scope-ankre #16/#17 er fortsat open. Ingen ny scoped Fase 3-opgave fundet i denne iteration, så ingen branch/PR oprettet (no-op).
Scheduler-status (automatisk): auth-preflight DEV er OK, open PRs=0 (ingen review-kommentarer at fixe først), og scope-ankre #16/#17 er fortsat open. Ingen ny scoped Fase 3-opgave fundet i denne iteration, så ingen branch/PR oprettet (no-op).
Aktuel execution-state: open PRs = 0, open issue #16/#17 = true.
Seneste flow ser konsistent ud med Udv -> branch -> PR -> review -> merge (PR #25 lukket som merged efter review/integration).
Ingen tydelige tegn på at runners taler forbi hinanden i denne iteration.
Næste skridt: afvent ny scoped Fase 3-opgave; ved tvivl om scope/guardrail logges beslutningsspørgsmål direkte i #17.
Architect status-sync (2026-02-27 20:04 UTC)
- Gitea/wiki-first governance fastholdt: #16 = løbende fase/scope-board, #17 = beslutningsanker ved scope-tvivl.
- Aktuel execution-state: open PRs = 0, open issue #16/#17 = true.
- Seneste flow ser konsistent ud med Udv -> branch -> PR -> review -> merge (PR #25 lukket som merged efter review/integration).
- Ingen tydelige tegn på at runners taler forbi hinanden i denne iteration.
Næste skridt: afvent ny scoped Fase 3-opgave; ved tvivl om scope/guardrail logges beslutningsspørgsmål direkte i #17.
Ingen ny scoped Fase 3-delopgave fundet i denne iteration -> no-op.
Næste iteration tager ny opgave fra #16 eller beslutningsafklaring fra #17.
Scheduler status (2026-02-27 20:18 UTC)
- Auth preflight (DEV): OK
- Open PRs: 0 (ingen review-kommentarer at fixe først)
- Scope-kilder verificeret: #16 open, #17 open
- Ingen ny scoped Fase 3-delopgave fundet i denne iteration -> no-op.
Næste iteration tager ny opgave fra #16 eller beslutningsafklaring fra #17.
Næste handling: Ingen ny scoped Fase 3-delopgave er registreret i åbne issues/PRs; afventer konkret delopgave/afklaring via #16/#17.
Scheduler status (automatisk, 2026-02-27 20:28 UTC)
- Auth-preflight (DEV): OK
- Open PRs: 0
- Review-fix first check: ingen åbne review-kommentarer
- Scope-kilder: #16 open, #17 open
- Næste handling: Ingen ny scoped Fase 3-delopgave er registreret i åbne issues/PRs; afventer konkret delopgave/afklaring via #16/#17.
PO har godkendt at starte MVP web-UI-sporet. Ny scoped issue: "MVP UI: Host + Player web screens (templates)" (need-to-have, ui). Scheduler må tage den næste.
PO har godkendt at starte MVP web-UI-sporet. Ny scoped issue: "MVP UI: Host + Player web screens (templates)" (need-to-have, ui). Scheduler må tage den næste.
Start scoped issue for WS event-kontrakt + minimal acceptance-tests, linket til #16.
Hold #17 uændret som beslutningsanker, medmindre PO ønsker at ændre guardrails.
Architect sync (wiki/Gitea-first) — levende epic-board update.
Status snapshot:
- #16 og #17 er begge åbne og fungerer som styringsankre (aligned).
- Aktiv need-to-have i flight: #35 via PR #36 (player session token på lie-submit).
- Ingen runner-misalignment detekteret i denne iteration.
Fase 3 resterende kernearbejde (inden for eksisterende core-praksis):
1) Need-to-have: merge + verificér #36 (token-validering) for at lukke spoofing-risiko.
2) Need-to-have: ensret server-side faseguards på alle gameplay-endpoints (samme fejlkontrakt/idempotensmønster).
3) Need-to-have: WebSocket-event-kontrakt for MVP UI (state transitions: lobby -> lie -> guess -> reveal -> finished).
4) Nice-to-have: kort API-fejlkatalog i wiki (forudsigelig UX og lettere fejlsøgning i runner-flows).
Anbefalet næste prioritet efter #36:
- Start scoped issue for WS event-kontrakt + minimal acceptance-tests, linket til #16.
- Hold #17 uændret som beslutningsanker, medmindre PO ønsker at ændre guardrails.
Scheduler-status: PR #36 er reviewet+merged (session-token sikkerhedsfix). Næste need-to-have scoped UI-opgave taget via issue #37; PR #38 er oprettet, official approved, afventer required CI checks før merge.
Scheduler-status: PR #36 er reviewet+merged (session-token sikkerhedsfix). Næste need-to-have scoped UI-opgave taget via issue #37; PR #38 er oprettet, official approved, afventer required CI checks før merge.
Scheduler 23:00 UTC: PR-first check gav ingen åbne PR-reviewfund. Tog næste need-to-have UI-opgave via #43 (klikbart svarvalg-only ved guess submit). Leveret i PR #44, reviewed/approved og merged til main under gates. Scope ankre #16/#17 fastholdt.
Scheduler 23:00 UTC: PR-first check gav ingen åbne PR-reviewfund. Tog næste need-to-have UI-opgave via #43 (klikbart svarvalg-only ved guess submit). Leveret i PR #44, reviewed/approved og merged til `main` under gates. Scope ankre #16/#17 fastholdt.
Fase 3 gameplay ser leveret end-to-end på trunk (ingen åbne PRs/blokeringer lige nu).
#16 holdes som levende board for næste core-praksis forbedringer (ikke TODO-first).
#17 forbliver beslutningsanker for guardrails/PO-afklaringer.
Arkitektvurdering af hvad platformen stadig mangler inden for eksisterende MVP-core:
Robusthed i gameplay-flow (need-to-have):
Ens faseguards + idempotens på alle host/player transitions (start/submit/mix/guess/score/finish).
Reconnect-konsistens (need-to-have):
Garantér at alle spillere ser samme state efter refresh/rejoin (svarrækkefølge, aktiv fase, leaderboard).
Driftnær quality-hygiejne (need-to-have):
Ryd stale backlog-punkter der peger på lukkede PR/branches, så board afspejler faktisk sandhed i Gitea.
Productization inden for nuværende grundlag (nice-to-have):
Kort, stabilt API-fejlkatalog + state-contract i wiki for host/player UI.
Runner-misalignment check:
Ingen akut misalignment detekteret i denne iteration (board-ankre #16/#17 er åbne og i brug).
Architect sync (wiki/Gitea-first, levende epic-board):
Statusbillede nu:
- Fase 3 gameplay ser leveret end-to-end på trunk (ingen åbne PRs/blokeringer lige nu).
- #16 holdes som levende board for næste *core-praksis* forbedringer (ikke TODO-first).
- #17 forbliver beslutningsanker for guardrails/PO-afklaringer.
Arkitektvurdering af hvad platformen stadig mangler inden for eksisterende MVP-core:
1) Robusthed i gameplay-flow (need-to-have):
- Ens faseguards + idempotens på alle host/player transitions (start/submit/mix/guess/score/finish).
2) Reconnect-konsistens (need-to-have):
- Garantér at alle spillere ser samme state efter refresh/rejoin (svarrækkefølge, aktiv fase, leaderboard).
3) Driftnær quality-hygiejne (need-to-have):
- Ryd stale backlog-punkter der peger på lukkede PR/branches, så board afspejler faktisk sandhed i Gitea.
4) Productization inden for nuværende grundlag (nice-to-have):
- Kort, stabilt API-fejlkatalog + state-contract i wiki for host/player UI.
Runner-misalignment check:
- Ingen akut misalignment detekteret i denne iteration (board-ankre #16/#17 er åbne og i brug).
Scheduler-status: ingen åbne PR-reviewkommentarer. Næste need-to-have scoped UI-opgave taget via #49 og leveret i PR #50. Afventer review/checks jf. flow.
Scheduler-status: ingen åbne PR-reviewkommentarer. Næste need-to-have scoped UI-opgave taget via #49 og leveret i PR #50. Afventer review/checks jf. flow.
Scheduler-status: PR #50 merged og issue #49 lukket. Næste need-to-have UI-opgave er taget via #51 og leveret i PR #52 (approved). Afventer kun pending required check på pull_request-context før merge.
Scheduler-status: PR #50 merged og issue #49 lukket. Næste need-to-have UI-opgave er taget via #51 og leveret i PR #52 (approved). Afventer kun pending required check på pull_request-context før merge.
Scheduler-status: flow fulgt (preflight OK, PR-first check uden review-fund). Næste need-to-have UI-opgave blev taget som #53 og leveret via PR #54 (reviewed + merged til main). Slutstatus: open_prs=0, #53 lukket.
Scheduler-status: flow fulgt (preflight OK, PR-first check uden review-fund). Næste need-to-have UI-opgave blev taget som #53 og leveret via PR #54 (reviewed + merged til main). Slutstatus: open_prs=0, #53 lukket.
Scheduler-status: ingen åbne PR-reviewfund ved start, så næste need-to-have scoped UI-opgave blev taget via #55. Leveret i branch feature/ui-submit-context-guard, PR #56 oprettet, reviewet og merged til main under gates. Issue #55 er nu lukket; open_prs=0. Scope-ankre #16/#17 fortsat aktive.
Scheduler-status: ingen åbne PR-reviewfund ved start, så næste need-to-have scoped UI-opgave blev taget via #55. Leveret i branch `feature/ui-submit-context-guard`, PR #56 oprettet, reviewet og merged til `main` under gates. Issue #55 er nu lukket; open_prs=0. Scope-ankre #16/#17 fortsat aktive.
Åbne scope-issues under Fase 3: #57 (min-3 spiller guardrail i host-UI)
Arkitektvurdering (inden for MVP-core):
Need-to-have (nu): få #58 helt i mål og verificér at start-knap er hårdt blokeret ved <3 spillere både i UI + backend-flow.
Need-to-have (næste): ensret faseguards/idempotens på alle write-endpoints, så retries ikke kan dobbelt-indsende under netværksstøj.
Need-to-have (næste): tydelig reconnect-konsistens i UI-state (host + spiller), så klienter rehydreres korrekt efter refresh/tab-skift.
Nice-to-have (stadig core-nært): kort wiki-side med state/event-kontrakt (hvilke transitions/fejl UI skal håndtere).
Jeg holder #16 opdateret løbende efter hver betydende ændring i PR/issue-landskabet.
Arkitekt-sync (cron): #16 holdes som levende epic-board ✅
Aktuel state:
- Open PRs: 1 (#58)
- Åbne scope-issues under Fase 3: #57 (min-3 spiller guardrail i host-UI)
Arkitektvurdering (inden for MVP-core):
1) **Need-to-have (nu):** få #58 helt i mål og verificér at start-knap er hårdt blokeret ved `<3` spillere både i UI + backend-flow.
2) **Need-to-have (næste):** ensret faseguards/idempotens på alle write-endpoints, så retries ikke kan dobbelt-indsende under netværksstøj.
3) **Need-to-have (næste):** tydelig reconnect-konsistens i UI-state (host + spiller), så klienter rehydreres korrekt efter refresh/tab-skift.
4) **Nice-to-have (stadig core-nært):** kort wiki-side med state/event-kontrakt (hvilke transitions/fejl UI skal håndtere).
Jeg holder #16 opdateret løbende efter hver betydende ændring i PR/issue-landskabet.
Åbne scope-issues under Fase 3: #57 (min-3 spiller guardrail i host-UI)
Arkitektvurdering (inden for MVP-core):
Need-to-have (nu): få #58 helt i mål og verificér at start-knap er hårdt blokeret ved <3 spillere både i UI + backend-flow.
Need-to-have (næste): ensret faseguards/idempotens på alle write-endpoints, så retries ikke kan dobbelt-indsende under netværksstøj.
Need-to-have (næste): tydelig reconnect-konsistens i UI-state (host + spiller), så klienter rehydreres korrekt efter refresh/tab-skift.
Nice-to-have (stadig core-nært): kort wiki-side med state/event-kontrakt (hvilke transitions/fejl UI skal håndtere).
Jeg holder #16 opdateret løbende efter hver betydende ændring i PR/issue-landskabet.
Arkitekt-sync (cron): #16 holdes som levende epic-board ✅
Aktuel state:
- Open PRs: 1 (#58)
- Åbne scope-issues under Fase 3: #57 (min-3 spiller guardrail i host-UI)
Arkitektvurdering (inden for MVP-core):
1) **Need-to-have (nu):** få #58 helt i mål og verificér at start-knap er hårdt blokeret ved `<3` spillere både i UI + backend-flow.
2) **Need-to-have (næste):** ensret faseguards/idempotens på alle write-endpoints, så retries ikke kan dobbelt-indsende under netværksstøj.
3) **Need-to-have (næste):** tydelig reconnect-konsistens i UI-state (host + spiller), så klienter rehydreres korrekt efter refresh/tab-skift.
4) **Nice-to-have (stadig core-nært):** kort wiki-side med state/event-kontrakt (hvilke transitions/fejl UI skal håndtere).
Jeg holder #16 opdateret løbende efter hver betydende ændring i PR/issue-landskabet.
Åbne scope-issues under Fase 3: #57 (min-3 spiller guardrail i host-UI)
Arkitektvurdering (inden for MVP-core):
Need-to-have (nu): få #58 helt i mål og verificér at start-knap er hårdt blokeret ved <3 spillere både i UI + backend-flow.
Need-to-have (næste): ensret faseguards/idempotens på alle write-endpoints, så retries ikke kan dobbelt-indsende under netværksstøj.
Need-to-have (næste): tydelig reconnect-konsistens i UI-state (host + spiller), så klienter rehydreres korrekt efter refresh/tab-skift.
Nice-to-have (stadig core-nært): kort wiki-side med state/event-kontrakt (hvilke transitions/fejl UI skal håndtere).
Jeg holder #16 opdateret løbende efter hver betydende ændring i PR/issue-landskabet.
Arkitekt-sync (cron): #16 holdes som levende epic-board ✅
Aktuel state:
- Open PRs: 1 (#58)
- Åbne scope-issues under Fase 3: #57 (min-3 spiller guardrail i host-UI)
Arkitektvurdering (inden for MVP-core):
1) **Need-to-have (nu):** få #58 helt i mål og verificér at start-knap er hårdt blokeret ved `<3` spillere både i UI + backend-flow.
2) **Need-to-have (næste):** ensret faseguards/idempotens på alle write-endpoints, så retries ikke kan dobbelt-indsende under netværksstøj.
3) **Need-to-have (næste):** tydelig reconnect-konsistens i UI-state (host + spiller), så klienter rehydreres korrekt efter refresh/tab-skift.
4) **Nice-to-have (stadig core-nært):** kort wiki-side med state/event-kontrakt (hvilke transitions/fejl UI skal håndtere).
Jeg holder #16 opdateret løbende efter hver betydende ændring i PR/issue-landskabet.
Scheduler-status: PR #58 er merged og issue #57 er lukket. Næste need-to-have scoped UI-opgave er oprettet som #60 (reconnect-konsistens for host+spiller) under #16/#17.
Scheduler-status: PR #58 er merged og issue #57 er lukket. Næste need-to-have scoped UI-opgave er oprettet som #60 (reconnect-konsistens for host+spiller) under #16/#17.
Scheduler-status: #60 (MVP UI reconnect-konsistens) er nu leveret via PR #61 og merged til main under grøn CI + official review.
Resultat: host/spiller rehydrerer kontekst efter refresh, og submit-state/phase hentes automatisk via session detail.
Scheduler-status: #60 (MVP UI reconnect-konsistens) er nu leveret via PR #61 og merged til `main` under grøn CI + official review.
Resultat: host/spiller rehydrerer kontekst efter refresh, og submit-state/phase hentes automatisk via session detail.
Scheduler-status: PR #65 (UI robust join-state guard) er merged til main under grøn CI + official review. Issue #64 er lukket via Closes #64. Flow fulgt: Udv -> branch -> PR -> review -> merge.
Scheduler-status: PR #65 (UI robust join-state guard) er merged til `main` under grøn CI + official review. Issue #64 er lukket via `Closes #64`. Flow fulgt: Udv -> branch -> PR -> review -> merge.
Scheduler-status: ingen åbne review-fund ved start, så næste need-to-have scoped UI-opgave blev oprettet som #68 (fasebaserede host-action guards). Implementeret på branch feature/ui-host-phase-action-guards-68, PR #69 oprettet og official review=APPROVED. CI-contexts står p.t. pending i API, så merge afventer grønne required checks.
Scheduler-status: ingen åbne review-fund ved start, så næste need-to-have scoped UI-opgave blev oprettet som #68 (fasebaserede host-action guards). Implementeret på branch `feature/ui-host-phase-action-guards-68`, PR #69 oprettet og official review=APPROVED. CI-contexts står p.t. pending i API, så merge afventer grønne required checks.
PR #69 (fasebaserede host-action guards) er stadig åben.
CI er grøn (success), review er registreret, men mergeable=false lige nu.
Når #69 er merged, kan issue #68 lukkes som leveret.
Opdateret MVP-core vurdering (inden for eksisterende praksis):
Faseguards/idempotens: næsten i mål; mangler primært konsekvent adfærd i edge-cases ved hurtige klik/retries.
Reconnect-konsistens: UI-flow er forbedret, men vi bør sikre én entydig state-kontrakt (server truth først, UI som refleks).
Host/spiller handlingssymmetri: guard-mønsteret bør være ens på tværs af alle submit/action-knapper.
Wiki-kontrakt (kort): minimal state/event-kontrakt for lobby bør være explicit for at undgå regressions i næste iterationer.
Board-praksis fastholdt: #16 bruges som levende epic-board; #17 bruges kun til beslutningsankre/guardrails.
Arkitekt-sync (2026-02-28 01:24 UTC)
Status på aktiv kerneopgave:
- PR #69 (fasebaserede host-action guards) er stadig åben.
- CI er grøn (`success`), review er registreret, men `mergeable=false` lige nu.
- Når #69 er merged, kan issue #68 lukkes som leveret.
Opdateret MVP-core vurdering (inden for eksisterende praksis):
1) Faseguards/idempotens: næsten i mål; mangler primært konsekvent adfærd i edge-cases ved hurtige klik/retries.
2) Reconnect-konsistens: UI-flow er forbedret, men vi bør sikre én entydig state-kontrakt (server truth først, UI som refleks).
3) Host/spiller handlingssymmetri: guard-mønsteret bør være ens på tværs af alle submit/action-knapper.
4) Wiki-kontrakt (kort): minimal state/event-kontrakt for `lobby` bør være explicit for at undgå regressions i næste iterationer.
Board-praksis fastholdt: #16 bruges som levende epic-board; #17 bruges kun til beslutningsankre/guardrails.
Scheduler-status: PR #69 er nu merged til main under grøn CI + review.
Næste need-to-have UI-opgave er oprettet som #70 (scope via #16/#17): lås kategori-valg i hostpanelet udenfor lobby-fasen.
Scheduler-status: PR #69 er nu merged til `main` under grøn CI + review.
Næste need-to-have UI-opgave er oprettet som #70 (scope via #16/#17): lås kategori-valg i hostpanelet udenfor lobby-fasen.
Scheduler-status: issue #72 (need-to-have UI) er leveret via PR #73 (reviewet + merged til main). Spillerpanelet har nu fasebaseret lock af lie/guess-kontroller samt tydelig fase-status. #16/#17 fortsætter som styringsankre.
Scheduler-status: issue #72 (need-to-have UI) er leveret via PR #73 (reviewet + merged til `main`). Spillerpanelet har nu fasebaseret lock af lie/guess-kontroller samt tydelig fase-status. #16/#17 fortsætter som styringsankre.
Scheduler-status: issue #74 (need-to-have UI) er leveret via PR #75 og merged til main under grøn CI + official review. Hostpanelet låser nu round question-id feltet efter fase/kontekst med tydelig guard-hint. #16/#17 forbliver aktive styringsankre.
Scheduler-status: issue #74 (need-to-have UI) er leveret via PR #75 og merged til `main` under grøn CI + official review. Hostpanelet låser nu round question-id feltet efter fase/kontekst med tydelig guard-hint. #16/#17 forbliver aktive styringsankre.
Scheduler-status: auth-preflight OK. Review-fund/open PR blev håndteret først (PR #77 merged). Derefter næste need-to-have scoped UI-opgave oprettet og leveret: issue #78 -> PR #79 (auto-refresh toggle i host UI) merged til main under review + grøn CI. Slutstatus: open_prs=0, styringsankre #16/#17 fortsat åbne.
Scheduler-status: auth-preflight OK. Review-fund/open PR blev håndteret først (PR #77 merged). Derefter næste need-to-have scoped UI-opgave oprettet og leveret: issue #78 -> PR #79 (auto-refresh toggle i host UI) merged til main under review + grøn CI. Slutstatus: open_prs=0, styringsankre #16/#17 fortsat åbne.
Arkitektvurdering (inden for eksisterende MVP core-praksis):
Core-funktionalitet er i praksis leveret end-to-end (host/player flow + faseguards + submit/reconnect-forbedringer).
Næste core-fokus bør være driftsrobusthed frem for ny featurebredde:
fastholde idempotens i host-handlinger ved gentagne klik/refresh
ensartede fejlbeskeder for ugyldig fase/token/round-state
kort, vedligeholdt wiki-kontrakt for state/event-overgange (så UI/BE holdes synkront)
Board-hygiejne: fortsæt med #16/#17 som eneste styringsankre; ny implementering åbnes kun når den tydeligt styrker MVP-driftsstabilitet.
Runner-misalignment check: ingen detekteret i denne iteration.
Arkitekt-iteration (2026-02-28T02:26:34+00:00) — #16 som levende epic-board
Status snapshot:
- open PRs: 0
- #16: open
- #17: open
- Åbne issues: #16, #17, #59
Arkitektvurdering (inden for eksisterende MVP core-praksis):
1) Core-funktionalitet er i praksis leveret end-to-end (host/player flow + faseguards + submit/reconnect-forbedringer).
2) Næste core-fokus bør være driftsrobusthed frem for ny featurebredde:
- fastholde idempotens i host-handlinger ved gentagne klik/refresh
- ensartede fejlbeskeder for ugyldig fase/token/round-state
- kort, vedligeholdt wiki-kontrakt for state/event-overgange (så UI/BE holdes synkront)
3) Board-hygiejne: fortsæt med #16/#17 som eneste styringsankre; ny implementering åbnes kun når den tydeligt styrker MVP-driftsstabilitet.
Runner-misalignment check: ingen detekteret i denne iteration.
Scheduler-status: auth-preflight (DEV) OK. Ingen åbne review-fund ved start. Næste scoped need-to-have UI-opgave blev oprettet som #80 og leveret via PR #81 (official review=APPROVED, CI grøn, merged til main). UI viser nu ensartede fejl-hints for phase/token/round-state i både host- og player-panel, og nulstiller til "Ingen fejl." ved succes. Slutstatus: open_prs=0, #16/#17 fortsat styringsankre.
Scheduler-status: auth-preflight (DEV) OK. Ingen åbne review-fund ved start. Næste scoped need-to-have UI-opgave blev oprettet som #80 og leveret via PR #81 (official review=APPROVED, CI grøn, merged til `main`). UI viser nu ensartede fejl-hints for phase/token/round-state i både host- og player-panel, og nulstiller til "Ingen fejl." ved succes. Slutstatus: open_prs=0, #16/#17 fortsat styringsankre.
Scheduler-status: auth-preflight (DEV) OK. Ingen åbne review-fund ved start. Næste need-to-have scoped UI-opgave blev oprettet som #82 og leveret via PR #83 (official review=APPROVED, required CI grøn, merged til main med branch-delete). Slutstatus: open_prs=0; #16/#17 fortsat aktive styringsankre.
Scheduler-status: auth-preflight (DEV) OK. Ingen åbne review-fund ved start. Næste need-to-have scoped UI-opgave blev oprettet som #82 og leveret via PR #83 (official review=APPROVED, required CI grøn, merged til main med branch-delete). Slutstatus: open_prs=0; #16/#17 fortsat aktive styringsankre.
Scheduler-status: PR #85 (feature/ui-host-inflight-guard-84) er merged til main efter review + grøn CI. Issue #84 er lukket via Closes #84. Aktuel state: open_prs=0, branches: main + release/v0.1.0.
Scheduler-status: PR #85 (`feature/ui-host-inflight-guard-84`) er merged til `main` efter review + grøn CI. Issue #84 er lukket via `Closes #84`. Aktuel state: `open_prs=0`, branches: `main` + `release/v0.1.0`.
Scheduler-status: auth-preflight (DEV) OK. Ingen review-fund ved start. Næste need-to-have scoped UI-opgave blev oprettet som #86 og leveret via PR #87 (official review=APPROVED, required CI grøn, merged til main med branch-delete). Slutstatus: open_prs=0; #16/#17 fortsat aktive styringsankre.
Scheduler-status: auth-preflight (DEV) OK. Ingen review-fund ved start. Næste need-to-have scoped UI-opgave blev oprettet som #86 og leveret via PR #87 (official review=APPROVED, required CI grøn, merged til main med branch-delete). Slutstatus: open_prs=0; #16/#17 fortsat aktive styringsankre.
Scheduler-status: auth-preflight (DEV) OK. Ingen åbne PR-review-fund ved start (open_prs=0). Næste need-to-have scoped UI-opgave blev oprettet som #88 og leveret via PR #89 (official review=APPROVED, required CI grøn, merged til main med branch-delete). Scope via #16/#17 fastholdt.
Scheduler-status: auth-preflight (DEV) OK. Ingen åbne PR-review-fund ved start (`open_prs=0`). Næste need-to-have scoped UI-opgave blev oprettet som #88 og leveret via PR #89 (official review=APPROVED, required CI grøn, merged til `main` med branch-delete). Scope via #16/#17 fastholdt.
Scheduler-status: auth-preflight (DEV) OK. Ingen åbne PR-review-fund ved start (open_prs=0). Næste need-to-have scoped UI-opgave blev oprettet som #91 og leveret via PR #92 (official review=APPROVED, required CI grøn, merged til main med branch-delete). Slutstatus: open_prs=0, styringsankre #16/#17 fortsat åbne.
Scheduler-status: auth-preflight (DEV) OK. Ingen åbne PR-review-fund ved start (`open_prs=0`). Næste need-to-have scoped UI-opgave blev oprettet som #91 og leveret via PR #92 (official review=APPROVED, required CI grøn, merged til `main` med branch-delete). Slutstatus: `open_prs=0`, styringsankre #16/#17 fortsat åbne.
Scheduler-status: auth-preflight OK, ingen åbne PR-review-fund. Tog næste scoped need-to-have UI-opgave #93, implementerede sessionDetail in-flight lock i playerpanelet, og merged via PR #94 under grøn CI + officiel review. Slutstatus: open_prs=0.
Scheduler-status: auth-preflight OK, ingen åbne PR-review-fund. Tog næste scoped need-to-have UI-opgave #93, implementerede sessionDetail in-flight lock i playerpanelet, og merged via PR #94 under grøn CI + officiel review. Slutstatus: `open_prs=0`.
Scheduler-status: auth-preflight (DEV) OK. Ingen åbne PR-review-fund ved start (open_prs=0). Tog næste scoped need-to-have UI-opgave som #95 og leverede via PR #96 (feature/ui-guess-submit-client-guard-95) til review.
Checks kørt: python manage.py test lobby.tests.UiScreenTests --verbosity 1✅
Scheduler-status: auth-preflight (DEV) OK. Ingen åbne PR-review-fund ved start (`open_prs=0`). Tog næste scoped need-to-have UI-opgave som #95 og leverede via PR #96 (`feature/ui-guess-submit-client-guard-95`) til review.
Checks kørt: `python manage.py test lobby.tests.UiScreenTests --verbosity 1` ✅
Scheduler-status: PR #96 (dobbelt guess-submit guard) er nu reviewet+merged. Ny scoped UI-opgave #97 er implementeret og merged via PR #98 (aktiv round-question guard i player-panelet). Open PRs=0.
Scheduler-status: PR #96 (dobbelt guess-submit guard) er nu reviewet+merged. Ny scoped UI-opgave #97 er implementeret og merged via PR #98 (aktiv round-question guard i player-panelet). Open PRs=0.
Scheduler-status: auth-preflight OK; ingen review-fund på åbne PRs. Næste need-to-have UI-opgave blev taget via #99 (round_question_id read-only i player UI) og merged gennem PR #100. Slutstatus: open_prs=0, branches=main+release/v0.1.0, #16/#17 fortsat styringsankre.
Scheduler-status: auth-preflight OK; ingen review-fund på åbne PRs. Næste need-to-have UI-opgave blev taget via #99 (round_question_id read-only i player UI) og merged gennem PR #100. Slutstatus: open_prs=0, branches=main+release/v0.1.0, #16/#17 fortsat styringsankre.
Scheduler-status: auth-preflight (DEV) OK. Ingen åbne review-kommentarer på PRs ved start. Næste scoped need-to-have UI-opgave blev taget som #101 (host session-status in-flight lock). Implementeret i branch feature/ui-host-session-detail-inflight-101 og sendt i PR #102. Lokal verifikation grøn: ruff check lobby + python manage.py test lobby -v 1 (42/42). PR #102 er official APPROVED, men merge afventer stadig required CI-checks (pending), så den står som aktiv merge-kandidat.
Scheduler-status: auth-preflight (DEV) OK. Ingen åbne review-kommentarer på PRs ved start. Næste scoped need-to-have UI-opgave blev taget som #101 (host session-status in-flight lock). Implementeret i branch `feature/ui-host-session-detail-inflight-101` og sendt i PR #102. Lokal verifikation grøn: `ruff check lobby` + `python manage.py test lobby -v 1` (42/42). PR #102 er official `APPROVED`, men merge afventer stadig required CI-checks (pending), så den står som aktiv merge-kandidat.
Scheduler-status: PR #104 (issue #103) er reviewet, CI grøn og merged til main med branch-delete. Flow overholdt: Udv -> branch -> PR -> review -> merge.
Scheduler-status: PR #104 (issue #103) er reviewet, CI grøn og merged til `main` med branch-delete. Flow overholdt: Udv -> branch -> PR -> review -> merge.
Scheduler-status: auth-preflight (DEV) OK. Ingen åbne PR-review-fund ved start (open_prs=0), så næste scoped need-to-have UI-opgave blev oprettet som #105 og leveret via PR #106.
Leveret i UI:
auto-refresh toggle i playerpanelet er nu disabled under aktiv sessionDetail
toggle kræver sessionkode
tydelig låsehint ved in-flight opdatering
Verifikation i CT132: ruff check lobby + python manage.py test lobby -v 1 (42/42) ✅.
PR #106 er reviewet (official APPROVED), required CI grøn, merged til main med branch-delete. Slutstatus: open_prs=0.
Scheduler-status: auth-preflight (DEV) OK. Ingen åbne PR-review-fund ved start (`open_prs=0`), så næste scoped need-to-have UI-opgave blev oprettet som #105 og leveret via PR #106.
Leveret i UI:
- auto-refresh toggle i playerpanelet er nu disabled under aktiv `sessionDetail`
- toggle kræver sessionkode
- tydelig låsehint ved in-flight opdatering
Verifikation i CT132: `ruff check lobby` + `python manage.py test lobby -v 1` (42/42) ✅.
PR #106 er reviewet (official APPROVED), required CI grøn, merged til `main` med branch-delete. Slutstatus: `open_prs=0`.
Scheduler-status: auth-preflight (DEV) OK. Ingen åbne PR-review-fund ved start (open_prs=0), så næste scoped need-to-have UI-opgave blev oprettet som #107 og implementeret i PR #108. PR #108 er reviewet (APPROVED), men merge afventer grøn required CI i denne iteration.
Scheduler-status: auth-preflight (DEV) OK. Ingen åbne PR-review-fund ved start (`open_prs=0`), så næste scoped need-to-have UI-opgave blev oprettet som #107 og implementeret i PR #108. PR #108 er reviewet (`APPROVED`), men merge afventer grøn required CI i denne iteration.
Arbejdet i #109/#110 er i samme eksisterende MVP-guardrail-spor (race-/state-sikkerhed i UI), altså ikke nyt produktscope.
Der er pt. 1 åben PR (#110) og ingen tegn på gate-bypass.
Primær afslutningskritisk rest er stadig #90 (deploy + smoke evidens).
Prioriteringsnote:
Når #110 er merged, bør scheduler/integrator holde fokus på #90 for at lukke MVP-readiness.
Hvis #90 fortsat står uden fremdrift efter flere iterationer, skal det flagges som runner-misalignment (scope-drift mod ekstra polish fremfor release-verifikation).
Arkitekt-sync (2026-02-28T05:27:35Z)
MVP-status (levende epic-board):
- Gameplay core: fortsat lukket ✅
- UI robusthed: udvidet med ny need-to-have guard i flight (#109 -> PR #110) 🔄
- Drift/release-readiness: fortsat åben via #90 (staging deploy + smoke sign-off) 🔄
Aktuel vurdering (inden for core-praksis):
- Arbejdet i #109/#110 er i samme eksisterende MVP-guardrail-spor (race-/state-sikkerhed i UI), altså ikke nyt produktscope.
- Der er pt. 1 åben PR (#110) og ingen tegn på gate-bypass.
- Primær afslutningskritisk rest er stadig #90 (deploy + smoke evidens).
Prioriteringsnote:
- Når #110 er merged, bør scheduler/integrator holde fokus på #90 for at lukke MVP-readiness.
- Hvis #90 fortsat står uden fremdrift efter flere iterationer, skal det flagges som runner-misalignment (scope-drift mod ekstra polish fremfor release-verifikation).
Scheduler-status: PR #110 merged (join-lock under session refresh). Ny need-to-have UI-opgave #111 oprettet og implementeret i PR #112 (sessionDetail lock under join). PR #112 er approved og afventer grøn required CI før merge.
Scheduler-status: PR #110 merged (join-lock under session refresh). Ny need-to-have UI-opgave #111 oprettet og implementeret i PR #112 (sessionDetail lock under join). PR #112 er approved og afventer grøn required CI før merge.
Scheduler-status: PR #114 (UI auto-refresh join-lock) er merged til main under grøn CI + official approval. Issue #113 er lukket via Closes #113. Ingen åbne PRs efter merge.
Scheduler-status: PR #114 (UI auto-refresh join-lock) er merged til `main` under grøn CI + official approval. Issue #113 er lukket via `Closes #113`. Ingen åbne PRs efter merge.
Næste åbne need-to-have i scoped board er fortsat #90 (release readiness: staging deploy + smoke sign-off).
Scheduler-opdatering (flow: Udv -> branch -> PR -> review -> merge):
- Oprettet og leveret UI need-to-have issue #115 (session-opdatering låses under aktiv lie/guess submit).
- PR #116 blev oprettet, reviewet (`APPROVED`) og merged til `main` med branch-delete.
- Resultat: ingen åbne PRs; #115 er lukket.
- Næste åbne need-to-have i scoped board er fortsat #90 (release readiness: staging deploy + smoke sign-off).
Scheduler-status: PR #118 merged (host auto-refresh-toggle lock). Ny need-to-have UI-opgave #119 oprettet og leveret via PR #120, som nu er merged til main under grøn CI + officiel approval.
Scheduler-status: PR #118 merged (host auto-refresh-toggle lock). Ny need-to-have UI-opgave #119 oprettet og leveret via PR #120, som nu er merged til `main` under grøn CI + officiel approval.
Slutstatus: `open_prs=0`, scope-ankre #16/#17 fortsat aktive.
Efterkontrol: open_prs=0, branches kun main + release/v0.1.0.
Styringsankre #16/#17 fortsat aktive; #90 (release readiness) står fortsat åben til devops/test-spor.
Scheduler status (FLOW fulgt): preflight OK, ingen åbne PR review-fund.
Leveret ny need-to-have UI-opgave i scope:
- #121 oprettet (host round question-id lock under session-opdatering)
- PR #122 oprettet, reviewet (APPROVED) og merged til `main` under grønne checks
- #121 lukket via `Closes #121`
Efterkontrol: `open_prs=0`, branches kun `main` + `release/v0.1.0`.
Styringsankre #16/#17 fortsat aktive; #90 (release readiness) står fortsat åben til devops/test-spor.
Styringsankre: #16 (epic-board) + #17 (beslutningsanker) er begge åbne
Åbne scoped spor: #90 (MVP release-readiness) og #59 (post-MVP, needs-approval)
Arkitektvurdering – hvad mangler for stabil MVP inden for nuværende core-praksis
Release-readiness skal lukkes først via #90 (staging deploy + smoke sign-off som gate)
Kontrakt-hygiejne i wiki: kort state/event-kontrakt for host/spiller-flows, så UI-guards og API-fejl er entydige
Driftsrobusthed over featurebredde: fasthold fokus på idempotens/locks/phase-guards frem for nyt scope
Potentiale (inden for eksisterende grundlag)
Platformen er tæt på en robust “MVP-by-default” execution model: deterministic flow, stærke merge-gates og UI-sikkerhedsnet.
Næste løft kommer primært af release-disciplin + tydelig drifts-/kontrakt-dokumentation, ikke ekstra features.
Runner-misalignment: ingen detekteret i denne iteration.
### Architect sync (2026-02-28 06:27 UTC)
Levende epic-board opdatering (Gitea/wiki-first):
**Aktuel state**
- `open_prs=0` (ingen merge-kandidater lige nu)
- Styringsankre: `#16` (epic-board) + `#17` (beslutningsanker) er begge åbne
- Åbne scoped spor: `#90` (MVP release-readiness) og `#59` (post-MVP, needs-approval)
**Arkitektvurdering – hvad mangler for stabil MVP inden for nuværende core-praksis**
1. **Release-readiness skal lukkes først** via `#90` (staging deploy + smoke sign-off som gate)
2. **Kontrakt-hygiejne i wiki**: kort state/event-kontrakt for host/spiller-flows, så UI-guards og API-fejl er entydige
3. **Driftsrobusthed over featurebredde**: fasthold fokus på idempotens/locks/phase-guards frem for nyt scope
**Potentiale (inden for eksisterende grundlag)**
- Platformen er tæt på en robust “MVP-by-default” execution model: deterministic flow, stærke merge-gates og UI-sikkerhedsnet.
- Næste løft kommer primært af release-disciplin + tydelig drifts-/kontrakt-dokumentation, ikke ekstra features.
Runner-misalignment: **ingen detekteret i denne iteration**.
Scheduler-status (FLOW fulgt): preflight OK, ingen review-fund på åbne PRs. Ny need-to-have UI-opgave #127 oprettet og leveret via PR #128 (reviewet + merged til main under grøn CI). Slutstatus: open_prs=0; #16/#17 fortsat aktive styringsankre.
Scheduler-status (FLOW fulgt): preflight OK, ingen review-fund på åbne PRs. Ny need-to-have UI-opgave #127 oprettet og leveret via PR #128 (reviewet + merged til `main` under grøn CI). Slutstatus: `open_prs=0`; #16/#17 fortsat aktive styringsankre.
Smoke (healthz + kerne-gameplay) dokumenteret PASS/FAIL i #90.
Ved FAIL: behold/åbn kun konkrete blocker-issues med reproducerbar fejl.
Afgrænsning: Kun drift/verifikation; ingen scope-udvidelse.
P2: Opryd release-spor-issues efter verifikation (#131/#130)
Hvorfor nu: Reducerer koordinationsstøj og gør boardet beslutningsklart.
Acceptance:
Hvis løst af #134 + verifikation: luk #131/#130 med reference til evidens.
Hvis ikke løst: opdater tydelig unblock-plan og behold som need-to-have.
Afgrænsning: Ingen nye aktive spor oprettes.
Gate-håndhævelse:
Value Gate: Kun #90/#133-relateret arbejde er aktivt nu.
Intake gate:#129 er parkeret som needs-approval indtil problem+værdi+hvorfor-nu er eksplicit dokumenteret.
Global WIP-cap (max 3): Aktive spor holdes til release/drift; ingen ekstra forbedringsspor aktiveres før #90 er afklaret.
Arkitekt-prioritering (2026-02-28, value-first, WIP-cap håndhævet)
Top 3 næste høj-værdi opgaver til dev/integrator:
1) **P1: Færdiggør PR #134 (MySQL-only staging deploy) for at lukke #133**
- **Hvorfor nu:** Direkte release-readiness impact; fjerner root cause bag staging deploy-fejl.
- **Acceptance:**
- PR #134 reviewes og merges med grønne checks.
- #133 lukkes med kort evidens (hvad blev ændret + hvorfor det løser staging-kravet).
- **Afgrænsning:** Ingen nye features/UI-forbedringer i samme PR.
2) **P1: Verificér release-readiness i #90 via staging deploy + smoke efter merge**
- **Hvorfor nu:** #90 er aktiv need-to-have blocker for MVP-done.
- **Acceptance:**
- Ny staging deploy mod `main` dokumenteret i #90.
- Smoke (`healthz` + kerne-gameplay) dokumenteret PASS/FAIL i #90.
- Ved FAIL: behold/åbn kun konkrete blocker-issues med reproducerbar fejl.
- **Afgrænsning:** Kun drift/verifikation; ingen scope-udvidelse.
3) **P2: Opryd release-spor-issues efter verifikation (#131/#130)**
- **Hvorfor nu:** Reducerer koordinationsstøj og gør boardet beslutningsklart.
- **Acceptance:**
- Hvis løst af #134 + verifikation: luk #131/#130 med reference til evidens.
- Hvis ikke løst: opdater tydelig unblock-plan og behold som need-to-have.
- **Afgrænsning:** Ingen nye aktive spor oprettes.
Gate-håndhævelse:
- **Value Gate:** Kun #90/#133-relateret arbejde er aktivt nu.
- **Intake gate:** #129 er parkeret som `needs-approval` indtil problem+værdi+hvorfor-nu er eksplicit dokumenteret.
- **Global WIP-cap (max 3):** Aktive spor holdes til release/drift; ingen ekstra forbedringsspor aktiveres før #90 er afklaret.
Architect-opdatering (2026-02-28 11:53 UTC) — design/prioritering til dev under aktivt release-spor.
**Gate-check**
- Value Gate: OK (alt nedenfor er direkte koblet til release-readiness #90 og staging/smoke blockers #131/#130/#133).
- Intake gate: OK for aktive issues (#90/#130/#131/#133 har problem + værdi + hvorfor-nu).
- Global WIP-cap: Håndhæv **1 aktivt spor nu** (release/drift). Ingen ny feature-polish før #90 er afklaret.
## Top 3 næste høj-værdi opgaver (til dev/devops flow)
1) **Konsolider staging-fix i én PR (stop overlap mellem #132 og #134)**
- Hvorfor: To åbne PRs løser samme release-blockerområde; giver review-friktion og merge-risiko.
- Acceptance:
- Én valgt “winning PR” med samlet løsning for MySQL-only + deploy ownership/gate.
- Den anden PR markeres superseded/lukkes med kort begrundelse.
- PR-body peger tydeligt på hvilke issues den lukker (#131/#133, evt. #130 indirekte).
- Afgrænsning:
- Ingen ny feature-funktionalitet.
- Kun staging deploy/database-gating relaterede ændringer.
2) **Få merged via normale gates + dokumentér merge-evidens i #90**
- Hvorfor: Release-readiness kræver verificerbar kæde (PR -> review -> merge).
- Acceptance:
- Valgt PR er reviewet og merged med grønne required checks.
- Kildebranch slettes efter merge (integrator-policy).
- #90 opdateres med kort status + reference til merged PR.
- Afgrænsning:
- Ingen bypass af review/CI.
- Ingen parallel opstart af nye improvements.
3) **Kør staging deploy + smoke og luk kun blockers ved evidens**
- Hvorfor: MVP-done afhænger af drift/verifikation, ikke mere kodeaktivitet.
- Acceptance:
- Deploy mod staging gennemført.
- Smoke-suite resultat dokumenteret (PASS/FAIL) i #90.
- Ved PASS: luk #130/#131/#133 med konkret evidens.
- Ved FAIL: opret maks én ny aktiv need-to-have blocker (hvis intake er komplet), resten som needs-approval/backlog.
- Afgrænsning:
- Ingen release-tag før faktisk deploy + changelog-krav er opfyldt.
- Ingen nye produktscope-issues.
**Stop/Pause (indtil #90 er grøn):**
- #129 forbliver `needs-approval` (ingen aktivering nu).
- #59 forbliver post-MVP `needs-approval`.
Tidligere deploy-race blev lukket via PR #142 (merged til main)
Konsekvens for top-prioriteter (ændret):
Luk #90 efter kort manager-bekræftelse i tråden (acceptkriterier er nu opfyldt af dokumenterede artifacts).
Flyt fokus fra drift-blocker til release-vindue go/no-go (ingen ny feature-polish før release-beslutning).
Hold post-MVP scope i needs-approval (fx #59) indtil release-beslutning er taget.
Scope-gate uændret:
#17 forbliver beslutningsanker; ingen udvidelse af produkt-scope i denne opdatering.
Arkitekt-opdatering (prioritetsskift pga. ny release-readiness evidens):
Ny verificeret status fra #90 (seneste artifact):
- Canonical staging deploy (`./infra/staging/deploy_staging.sh`) PASS
- Smoke-suite PASS uden manuel intervention
- Tidligere deploy-race blev lukket via PR #142 (merged til `main`)
Konsekvens for top-prioriteter (ændret):
1) **Luk #90** efter kort manager-bekræftelse i tråden (acceptkriterier er nu opfyldt af dokumenterede artifacts).
2) Flyt fokus fra drift-blocker til **release-vindue go/no-go** (ingen ny feature-polish før release-beslutning).
3) Hold post-MVP scope i `needs-approval` (fx #59) indtil release-beslutning er taget.
Scope-gate uændret:
- #17 forbliver beslutningsanker; ingen udvidelse af produkt-scope i denne opdatering.
Status update from scheduler: #90 is closed after canonical staging deploy+smoke PASS on main (SHA 6fd57d1714ee97c2f855e215e5df0728490df19a).\nEpic release-readiness track can be considered complete pending PO go/no-go decision.
Status update from scheduler: #90 is closed after canonical staging deploy+smoke PASS on `main` (SHA `6fd57d1714ee97c2f855e215e5df0728490df19a`).\nEpic release-readiness track can be considered complete pending PO go/no-go decision.
Arkitekt-opdatering (2026-02-28 21:47 UTC) — PO-prioritet omsat til release-nære gameplay-opgaver.
PO-signal: #129 er aktivt prioriteret nu som need-to-have retning (hurtigst mulig spilbar FupogFakta).
Top 1-3 release-nære gameplay-opgaver (konkret):
Lobby → Join → Start sanity i staging
Acceptance:
1 host + mindst 2 spillere kan joine samme session i staging.
Join med mixed-case + whitespace sessionkode virker robust (normaliseret adfærd fra #129).
Host kan starte spillet uden dead-end/fejlstate.
Afgrænsning:
Ingen nye features/UI-polish ud over flow-kritiske fejl.
Én fuld runde kan gennemføres til scoreboard
Acceptance:
Spørgsmål vises for alle deltagere.
Svar kan indsendes for aktive spillere.
Reveal + scoreberegning vises konsistent på scoreboard.
Afgrænsning:
Ingen persistens/analytics; kun runtime gameplay-loop.
Next-round + afslutning/leaderboard sanity
Acceptance:
Næste runde kan startes uden at spillere falder af.
Spil kan afsluttes med synlig final leaderboard/sluttilstand.
Ingen blocker-fejl i browser-konsol for core-flowet.
Afgrænsning:
Ingen konto/profil/historik.
Scope-lås:
#59 forbliver needs-approval/post-MVP (uden for aktivt scope).
Arbejde holdes til release-readiness for hurtigst mulig spilbar version.
Arkitekt-opdatering (2026-02-28 21:47 UTC) — PO-prioritet omsat til release-nære gameplay-opgaver.
PO-signal: #129 er aktivt prioriteret nu som need-to-have retning (hurtigst mulig spilbar FupogFakta).
Top 1-3 release-nære gameplay-opgaver (konkret):
1) **Lobby → Join → Start sanity i staging**
- Acceptance:
- 1 host + mindst 2 spillere kan joine samme session i staging.
- Join med mixed-case + whitespace sessionkode virker robust (normaliseret adfærd fra #129).
- Host kan starte spillet uden dead-end/fejlstate.
- Afgrænsning:
- Ingen nye features/UI-polish ud over flow-kritiske fejl.
2) **Én fuld runde kan gennemføres til scoreboard**
- Acceptance:
- Spørgsmål vises for alle deltagere.
- Svar kan indsendes for aktive spillere.
- Reveal + scoreberegning vises konsistent på scoreboard.
- Afgrænsning:
- Ingen persistens/analytics; kun runtime gameplay-loop.
3) **Next-round + afslutning/leaderboard sanity**
- Acceptance:
- Næste runde kan startes uden at spillere falder af.
- Spil kan afsluttes med synlig final leaderboard/sluttilstand.
- Ingen blocker-fejl i browser-konsol for core-flowet.
- Afgrænsning:
- Ingen konto/profil/historik.
Scope-lås:
- #59 forbliver `needs-approval`/post-MVP (uden for aktivt scope).
- Arbejde holdes til release-readiness for hurtigst mulig spilbar version.
Scope-refresh (2026-03-01, PO-prioritet fastholdt): #129 er aktiv prioritet og omsættes nu til konkrete release-nære gameplay-opgaver mod hurtigst mulig spilbar FupogFakta-version.
Host kan gå til næste runde efter scoreboard uden fastlåst state.
Match kan afsluttes til final leaderboard uden blocker i host/player panel.
Go/no-go input til næste release-vindue dokumenteres eksplicit.
Afgrænsning:
Ingen post-MVP udvidelser (profiler/historik/persistence).
Scope-note:
#59 forbliver uden for scope som needs-approval/post-MVP (ingen aktivering nu).
Tidligere release-readiness issue #90 er lukket; ovenstående er den aktuelle scope-anker prioritering.
Scope-refresh (2026-03-01, PO-prioritet fastholdt): #129 er aktiv prioritet og omsættes nu til konkrete release-nære gameplay-opgaver mod hurtigst mulig spilbar FupogFakta-version.
Top 1-3 gameplay-opgaver (release-nære):
1) E2E gameplay smoke: lobby -> join -> start -> 1 fuld runde -> final leaderboard (staging)
- Acceptance-kriterier:
- 3 spillere kan gennemføre hele flowet uden blocker.
- #129-adfærd verificeret: sessionkode accepterer mixed-case + leading/trailing whitespace (trim + uppercase) i både host/player flow.
- Evidens logges i issue-tråd med trin, tidspunkt, pass/fail.
- Afgrænsning:
- Ingen feature-kode; kun release-readiness verifikation af eksisterende flow.
2) Mid-round state consistency sanity (staging, 3 spillere)
- Acceptance-kriterier:
- Efter refresh/rejoin hos én spiller midt i runden er samme round-state synlig hos alle.
- Guess/reveal/scoreboard gennemføres uden desync eller dobbelt-submit artefakter.
- Evidens logges med kort repro + resultat.
- Afgrænsning:
- Ingen UX-polish eller nye produktfeatures; kun regressionscheck i core gameplay.
3) Next-round transition + game-end go/no-go check (staging)
- Acceptance-kriterier:
- Host kan gå til næste runde efter scoreboard uden fastlåst state.
- Match kan afsluttes til final leaderboard uden blocker i host/player panel.
- Go/no-go input til næste release-vindue dokumenteres eksplicit.
- Afgrænsning:
- Ingen post-MVP udvidelser (profiler/historik/persistence).
Scope-note:
- #59 forbliver uden for scope som needs-approval/post-MVP (ingen aktivering nu).
- Tidligere release-readiness issue #90 er lukket; ovenstående er den aktuelle scope-anker prioritering.
PO-prioritet opdateret (source-of-truth): #129 er aktivt prioriteret som release-nær gameplay-retning for hurtigst mulig spilbar FupogFakta.
Top 1-3 konkrete gameplay-opgaver (release-nære):
E2E runde-loop er fuldt spilbar (host→spiller→svar→facit→score)
Acceptance:
3-5 spillere kan joine med gyldig kode og starte spil uden manual workaround.
En hel runde kan gennemføres med synlig overgang mellem spørgsmål, svarfase, facit og opdateret score.
Ved rundeslut vises konsistent scoreliste for alle klienter (samme rækkefølge/tal).
Afgrænsning:
Ingen ny profilhistorik/persistence.
Ingen polish-animationer ud over nødvendig state-feedback.
Gameplay-state synkronisering ved reconnect/refresh under aktiv runde
Acceptance:
Hvis en spiller refresher/forbindelsen ryger midt i runden, lander spilleren tilbage i korrekt fase inden for få sekunder.
Ingen duplikerede svar/points ved reconnect.
Host-panel forbliver autoritativt og kan fortsætte runden uden hard reset.
Afgrænsning:
Kun aktiv session; ingen tværsessions-gendannelse.
Ingen nye admin-værktøjer ud over nødvendigt fejlguard.
Match-afslutning + klar ‘spil igen’ baseline
Acceptance:
Når sidste runde er slut, vises entydig vinder/slutstilling for alle.
Host kan starte en ny matchrunde fra afslutningsskærm uden at genoprette hele sessionen manuelt.
Ny match nulstiller kun match-state (ikke behov for persistent profil-data).
Afgrænsning:
Ingen global ranking/profilhistorik.
Ingen post-game analytics i MVP.
Scope-guardrail:#59 forbliver uden for scope (needs-approval/post-MVP) og må ikke aktiveres i denne release-push.
PO-prioritet opdateret (source-of-truth): #129 er aktivt prioriteret som *release-nær gameplay-retning* for hurtigst mulig spilbar FupogFakta.
**Top 1-3 konkrete gameplay-opgaver (release-nære):**
1) **E2E runde-loop er fuldt spilbar (host→spiller→svar→facit→score)**
- Acceptance:
- 3-5 spillere kan joine med gyldig kode og starte spil uden manual workaround.
- En hel runde kan gennemføres med synlig overgang mellem spørgsmål, svarfase, facit og opdateret score.
- Ved rundeslut vises konsistent scoreliste for alle klienter (samme rækkefølge/tal).
- Afgrænsning:
- Ingen ny profilhistorik/persistence.
- Ingen polish-animationer ud over nødvendig state-feedback.
2) **Gameplay-state synkronisering ved reconnect/refresh under aktiv runde**
- Acceptance:
- Hvis en spiller refresher/forbindelsen ryger midt i runden, lander spilleren tilbage i korrekt fase inden for få sekunder.
- Ingen duplikerede svar/points ved reconnect.
- Host-panel forbliver autoritativt og kan fortsætte runden uden hard reset.
- Afgrænsning:
- Kun aktiv session; ingen tværsessions-gendannelse.
- Ingen nye admin-værktøjer ud over nødvendigt fejlguard.
3) **Match-afslutning + klar ‘spil igen’ baseline**
- Acceptance:
- Når sidste runde er slut, vises entydig vinder/slutstilling for alle.
- Host kan starte en ny matchrunde fra afslutningsskærm uden at genoprette hele sessionen manuelt.
- Ny match nulstiller kun match-state (ikke behov for persistent profil-data).
- Afgrænsning:
- Ingen global ranking/profilhistorik.
- Ingen post-game analytics i MVP.
**Scope-guardrail:** #59 forbliver uden for scope (`needs-approval`/post-MVP) og må ikke aktiveres i denne release-push.
Scope: fra opret/join → løgnfase → gætfase → points → næste runde.
Acceptance-kriterier:
Deterministisk smoke-test der kan køres på staging uden manuel indgriben.
Verificerer at runden kan gennemføres uden dead-end i UI/API-flow.
Fejl giver tydelig root-cause i test-output (hvilket trin fejlede).
Afgrænsning: ingen ny gameplay-feature; kun verifikation af eksisterende core-flow.
Server-side fasegates + idempotens på host-actions (autoritet på backend)
Scope: backend skal afvise fase-ulovlige handlinger, selv hvis klienten bypasses.
Acceptance-kriterier:
API returnerer konsistent 4xx + klar fejltekst ved ugyldig fase/duplikat-kald.
Nøgleaktioner (fx reveal/mix/calc/next/finish) kan ikke dobbelt-eksekveres ved retry/dobbeltklik.
Regression-test dækker mindst én negativ case pr. kritisk host-action.
Afgrænsning: ingen UI-polish; fokus på gameplay-integritet og driftsrobusthed.
Reconnect-robusthed midt i aktiv runde (host + spiller)
Scope: refresh/rejoin må ikke ødelægge aktiv fase eller skabe stale submit-state.
Acceptance-kriterier:
Host kan genindlæse og fortsætte runden uden tab af styring.
Spiller kan genindlæse og modtage korrekt aktiv fase + round-kontekst før submit.
Ingen ulovlig submit accepteres efter reconnect ved stale klientstate.
Afgrænsning: ingen persistente profiler/historik; kun aktiv sessions robusthed.
Scope-afgrænsning (PO-beslutning fastholdt)
#59 forbliver out-of-scope for MVP med needs-approval/post-MVP.
Nye tasks i denne fase skal direkte øge "hurtigst muligt spilbar" release-readiness.
PO-prioritering sync: #129 er aktivt prioriteret nu og omsat til release-nær gameplay-plan for **FupogFakta** (hurtigst muligt spilbar version).
**Top 3 konkrete gameplay-opgaver (release-nære)**
1) **End-to-end "spilbar runde" smoke-flow (host + 3 spillere)**
- Scope: fra opret/join → løgnfase → gætfase → points → næste runde.
- Acceptance-kriterier:
- Deterministisk smoke-test der kan køres på staging uden manuel indgriben.
- Verificerer at runden kan gennemføres uden dead-end i UI/API-flow.
- Fejl giver tydelig root-cause i test-output (hvilket trin fejlede).
- Afgrænsning: ingen ny gameplay-feature; kun verifikation af eksisterende core-flow.
2) **Server-side fasegates + idempotens på host-actions (autoritet på backend)**
- Scope: backend skal afvise fase-ulovlige handlinger, selv hvis klienten bypasses.
- Acceptance-kriterier:
- API returnerer konsistent 4xx + klar fejltekst ved ugyldig fase/duplikat-kald.
- Nøgleaktioner (fx reveal/mix/calc/next/finish) kan ikke dobbelt-eksekveres ved retry/dobbeltklik.
- Regression-test dækker mindst én negativ case pr. kritisk host-action.
- Afgrænsning: ingen UI-polish; fokus på gameplay-integritet og driftsrobusthed.
3) **Reconnect-robusthed midt i aktiv runde (host + spiller)**
- Scope: refresh/rejoin må ikke ødelægge aktiv fase eller skabe stale submit-state.
- Acceptance-kriterier:
- Host kan genindlæse og fortsætte runden uden tab af styring.
- Spiller kan genindlæse og modtage korrekt aktiv fase + round-kontekst før submit.
- Ingen ulovlig submit accepteres efter reconnect ved stale klientstate.
- Afgrænsning: ingen persistente profiler/historik; kun aktiv sessions robusthed.
**Scope-afgrænsning (PO-beslutning fastholdt)**
- #59 forbliver **out-of-scope for MVP** med `needs-approval`/post-MVP.
- Nye tasks i denne fase skal direkte øge "hurtigst muligt spilbar" release-readiness.
Næste-runde + afslutning/final leaderboard sanity (forankret i #90)
Acceptance:
Host kan gå til næste runde efter første scoreboard uden fastlåst state.
Spil kan afsluttes til final leaderboard uden blocker.
Go/no-go input til release-vindue dokumenteres i #90.
Afgrænsning:
Ingen post-MVP udvidelser.
Scope-lås:
#59 forbliver uden for scope (needs-approval/post-MVP) og må ikke aktiveres før separat PO-go efter dokumenteret MVP release-readiness.
Arkitekt-opdatering (2026-03-01 05:35 UTC) – PO-prioritet justeret til release-nær gameplay-udførelse.
Top 1-3 konkrete opgaver (FupogFakta, hurtigst muligt spilbar version):
1) Lobby → join → start sanity i staging (forankret i #90)
- Acceptance:
- 3 spillere kan joine samme session.
- Sessionkode accepterer mixed-case + leading/trailing whitespace (trim + uppercase-adfærd fra #129).
- Host kan starte spil uden blocker.
- Evidens (trin + tidspunkt + resultat) logges i #90.
- Afgrænsning:
- Ingen ny feature-kode; kun release-readiness verifikation.
2) 1 fuld gameplay-runde til scoreboard i staging (forankret i #90)
- Acceptance:
- Flow gennemføres end-to-end: prompt/fakta → guess-submit → reveal → score.
- Scoreboard vises for alle uden state-desync.
- Pass/fail + kort fejlbeskrivelse logges i #90.
- Afgrænsning:
- Ingen balance/UI-polish i denne iteration.
3) Næste-runde + afslutning/final leaderboard sanity (forankret i #90)
- Acceptance:
- Host kan gå til næste runde efter første scoreboard uden fastlåst state.
- Spil kan afsluttes til final leaderboard uden blocker.
- Go/no-go input til release-vindue dokumenteres i #90.
- Afgrænsning:
- Ingen post-MVP udvidelser.
Scope-lås:
- #59 forbliver uden for scope (needs-approval/post-MVP) og må ikke aktiveres før separat PO-go efter dokumenteret MVP release-readiness.
Host kan drive én komplet runde fra spørgsmålsvisning til scoreboard.
Player-sider bevarer session-state gennem hele runden uden multi-page navigation.
Scoreboard viser konsistent resultat for alle tilsluttede clients.
Afgrænsning:
Ingen ny game mode; ingen UI-polish uden blocker-effekt.
Næste runde + afslutning/final leaderboard sanity
Acceptance:
Next-round transition virker deterministisk fra scoreboard.
Spillet kan afsluttes til final leaderboard i samme SPA-flow.
Ingen dead-end states der kræver manuel refresh.
Afgrænsning:
Ingen post-MVP persistens/fremtidige meta-features.
Scopegrænse (bindende):#59 forbliver needs-approval/post-MVP og er ikke aktiv execution i denne release-nære fase.
Scope-sync (2026-03-01 07:27 UTC) — PO-direktiv fastholdt, konkretiseret til release-nær execution.
**Bindende arkitektur:** gameplay/UI kører som **SPA** på både host- og player-sider (state-flow + navigation uden multi-page hop).
**Top 1-3 konkrete gameplay-opgaver (hurtigst mulig spilbar FupogFakta):**
1) **#144: Lobby -> join -> start smoke (staging) med #129-adfærd**
- Acceptance:
- 3 spillere kan joine samme session.
- Sessionkode accepterer mixed-case + leading/trailing whitespace (normaliseret input).
- Start game overgår til aktiv runde uden side-reload eller route-hop ud af SPA.
- Afgrænsning:
- Kun FupogFakta core-flow; ingen nye lobby-features/profiler.
2) **Én fuld runde: spørgsmål -> svar -> reveal -> scoreboard (SPA stateflow)**
- Acceptance:
- Host kan drive én komplet runde fra spørgsmålsvisning til scoreboard.
- Player-sider bevarer session-state gennem hele runden uden multi-page navigation.
- Scoreboard viser konsistent resultat for alle tilsluttede clients.
- Afgrænsning:
- Ingen ny game mode; ingen UI-polish uden blocker-effekt.
3) **Næste runde + afslutning/final leaderboard sanity**
- Acceptance:
- Next-round transition virker deterministisk fra scoreboard.
- Spillet kan afsluttes til final leaderboard i samme SPA-flow.
- Ingen dead-end states der kræver manuel refresh.
- Afgrænsning:
- Ingen post-MVP persistens/fremtidige meta-features.
**Scopegrænse (bindende):** #59 forbliver `needs-approval`/post-MVP og er ikke aktiv execution i denne release-nære fase.
PO-direktiv (ny retning): Vi starter SPA-migrationsspor for FupogFakta UI.
Foreløbig framework-retning: Angular-first (app-lignende struktur og tydelig routing/state), med React som fallback hvis der opstår konkrete leverance-hindringer.
Krav:
Hold backend-kontrakter stabile (Django JSON endpoints som primær API).
Plan i 3 trin: foundation -> gameplay MVP flow -> gradvis cutover via feature-flag.
Små PRs, men med tydelig samlet migrationsplan.
Staging-verifikation er gate før cutover.
Lokal referenceplan er skrevet i workspace: WPP_SPA_PLAN.md
PO-direktiv (ny retning): Vi starter SPA-migrationsspor for FupogFakta UI.
Foreløbig framework-retning: **Angular-first** (app-lignende struktur og tydelig routing/state), med React som fallback hvis der opstår konkrete leverance-hindringer.
Krav:
1) Hold backend-kontrakter stabile (Django JSON endpoints som primær API).
2) Plan i 3 trin: foundation -> gameplay MVP flow -> gradvis cutover via feature-flag.
3) Små PRs, men med tydelig samlet migrationsplan.
4) Staging-verifikation er gate før cutover.
Lokal referenceplan er skrevet i workspace: `WPP_SPA_PLAN.md`
PO-opdatering: Ny aktiv need-to-have i18n-opgave ##175. Krav: delt i18n mellem frontend/backend og engelsk default i eksisterende hardcoded tekster. Prioritér i aktiv READY-kø.
PO-opdatering: Ny aktiv need-to-have i18n-opgave ##175. Krav: delt i18n mellem frontend/backend og engelsk default i eksisterende hardcoded tekster. Prioritér i aktiv READY-kø.
Telefon/klient-interface skal være meget simpelt: få felter, tydelige handlinger, lav visuel kompleksitet.
Ingen tung/fancy UI på telefon-klienten; fokus er hurtig input + tydelig status.
Lyd må ikke afspilles på telefon-klienten. Lyd afspilles kun på den primære enhed (host/primær skærm).
Acceptance fremover skal derfor inkludere: client_has_no_audio_output=true og simpel mobile UX-godkendelse.
PO-præcisering (bindende):
1) Telefon/klient-interface skal være **meget simpelt**: få felter, tydelige handlinger, lav visuel kompleksitet.
2) Ingen tung/fancy UI på telefon-klienten; fokus er hurtig input + tydelig status.
3) **Lyd må ikke afspilles på telefon-klienten**. Lyd afspilles kun på den primære enhed (host/primær skærm).
4) Acceptance fremover skal derfor inkludere: `client_has_no_audio_output=true` og simpel mobile UX-godkendelse.
Alle opgaver er små og PR-egnede uden backend-kontraktbrud.
Ingen feature-kode; kun prioritering/scope.
SPA-migrationsspor er aktivt (PO-direktiv), med **Angular-first** for host+player UI; React kun fallback ved dokumenteret leveranceblokering.
Prioriteret READY-kø (foundation -> gameplay MVP -> cutover):
1. #191 `[READY][SPA][P12]` Foundation hardening: Angular route/session guards for host+player entry (**need-to-have**)
2. #186 `[READY][SPA][P9]` Angular API-contract guard: typed client + response mappers (**need-to-have**)
3. #180 `[READY][SPA][P8]` Gameplay MVP-del 3: next-round + final leaderboard (**need-to-have**)
4. #187 `[READY][SPA][P10]` Gameplay MVP-del 4: reconnect/loading/error states (**nice-to-have**, men vigtig før cutover)
5. #188 `[READY][SPA][P11]` Cutover hardening: static asset versioning + rollback playbook (**nice-to-have/release-approved**)
Noter:
- READY-kø er nu fyldt til min. 5 konkrete opgaver.
- Alle opgaver er små og PR-egnede uden backend-kontraktbrud.
- Ingen feature-kode; kun prioritering/scope.
SPA-migrationsspor prioritering opdateret (PO-direktiv bindende): Angular-first for host+player UI; React er kun fallback ved dokumenteret leveranceblokering.
Nyt verificerbart signal siden sidste scope-sync: PR #194 er åbnet for P8 (next-round + final leaderboard).
READY-prioritet (foundation -> gameplay MVP -> cutover), små uafhængige PR-bidder:
#191[P12] Foundation hardening: route/session guards (need-to-have)
Hvorfor nu: stabiliserer entry/rehydration før flere gameplay-state overgange.
PR-størrelse: isoleret frontend foundation (guards/resolvers/bootstrap), ingen gameplaylogik.
#223 — Telefon-klient guard: ingen lyd på secondary device.
Prioritet: #175-sporet først, derefter #223 (kan tages parallelt hvis ingen konflikt). Framework guardrail: Angular-first for host+player; React kun ved dokumenteret leveranceblokering.
Overlappende READY-issues (#220/#221) er lukket som superseded for at reducere planstøj.
PO-direktiver indarbejdet (MVP/release-often, Angular-first, #175 aktiv need-to-have, telefon uden lyd).
**READY-sekvens mod trunk/release (små uafhængige PR-bidder):**
1. #225 — #175-A backend i18n baseline (resolver + fallback da/en).
2. #226 — #175-B shared key-map/locale-kontrakt (allerede lukket, bruges som reference/artifact).
3. #227 — #175-C Angular host/player integration + cleanup af hardcoded kerneflow-tekster.
4. #223 — Telefon-klient guard: ingen lyd på secondary device.
**Prioritet:** #175-sporet først, derefter #223 (kan tages parallelt hvis ingen konflikt).
**Framework guardrail:** Angular-first for host+player; React kun ved dokumenteret leveranceblokering.
Overlappende READY-issues (#220/#221) er lukket som superseded for at reducere planstøj.
Denne skal bruges som reference for at målrette FupOgFakta/WPP mod et tydeligt canonical round loop:
prompt
fup-svar
mix
gæt
reveal
score
næste runde / afslutning
Brug #287 som source-of-truth for videre architect/dev/review-opdeling på gameplay-sporet.
Ny styrende gameplay-issue oprettet: #287.
Denne skal bruges som reference for at målrette FupOgFakta/WPP mod et tydeligt canonical round loop:
- prompt
- fup-svar
- mix
- gæt
- reveal
- score
- næste runde / afslutning
Brug #287 som source-of-truth for videre architect/dev/review-opdeling på gameplay-sporet.
Scope-board note: game-cartridge separation is now tracked explicitly in #311 and its child tasks. Treat the current lobby-owns-FupOgFakta-flow drift as in-scope technical correction for Fase 3, not optional cleanup.
Scope-board note: game-cartridge separation is now tracked explicitly in #311 and its child tasks. Treat the current `lobby`-owns-FupOgFakta-flow drift as in-scope technical correction for Fase 3, not optional cleanup.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Formål: Vedvarende scope-board for Fase 3 / MVP-lukning.
Brug denne issue som overblik over aktive/lukkede delopgaver og scope-beslutninger.
Arkitekt opdaterer status/risici her, og scheduler linker nye delopgaver til denne.
Definition of done for Fase 3 (gameplay-kernen):
MVP-status (arkitektvurdering, 2026-03-01 06:55 UTC):
needs-approval) og er uden for aktivt scope.Topprioriterede gameplay-opgaver (release-nære, 1-3):
Aktiv delopgave:
Levende epic-board:
Statusopdatering: Delopgave #18 er nu løst via merged PR #19 (guardrail-afstemning af spillerantal). Åbne styringsissues for Fase 3: #16 (board) og #17 (beslutningskilde).
Statusopdatering (scheduler): Fase 3 DoD i #16 er nu opfyldt i main.
Opfyldt:
Verifikation: ingen åbne PRs/review-fund ved denne kørsel, og branch-state er ren (kun main + release/v0.1.0).
Derfor lukkes #16 som completed. Beslutningsafklaringer holdes fortsat i #17.
Architect-runner governance sync (cron):
Formål: undgå at runners taler forbi hinanden om, hvor scope/status skal vedligeholdes.
Statusopdatering (scheduler):
python manage.py test lobby.tests(32 tests) ✅DoD-punkter i denne EPIC vurderes opfyldt. Lukker issue #16 som færdig.
Scope guardrails fortsat i #17.
Scheduler-sync (cron):
Scheduler check-in: preflight DEV OK. Ingen åbne PR-reviewkommentarer at fixe først. Fase 3 DoD-punkterne i #16 er allerede leveret/lukkede (#7, #9, #14, #18), og der er ingen ny åben scoped delopgave under #16 i denne iteration. #17 fortsætter som beslutningsanker.
Architect status-sync 2026-02-27 19:04 UTC
Flow-anker: vi holder governance på
Udv -> branch -> PR -> review -> merge.Scope-board/anker-check:
Ingen runner-misalignment detekteret i denne iteration.
Scheduler status-sync (2026-02-27 19:25 UTC)
Scheduler-iteration: prioriterede review-fund først på åben PR #25. Blocker-fix var allerede pushed (deploy-script curl bruger nu
${ARCHIVE_URL}), CI var grøn, så flow blev fuldført via officiel review-approval + integrator-merge.Status nu:
open_prs=0. Scope-board #16 og beslutningsanker #17 forbliver aktive som styringskilder.Scheduler-status (automatisk): auth-preflight DEV er OK, open PRs=0 (ingen review-kommentarer at fixe først), og scope-ankre #16/#17 er fortsat open. Ingen ny scoped Fase 3-opgave fundet i denne iteration, så ingen branch/PR oprettet (no-op).
Architect status-sync (2026-02-27 20:04 UTC)
Næste skridt: afvent ny scoped Fase 3-opgave; ved tvivl om scope/guardrail logges beslutningsspørgsmål direkte i #17.
Scheduler status (2026-02-27 20:18 UTC)
Næste iteration tager ny opgave fra #16 eller beslutningsafklaring fra #17.
Scheduler status (automatisk, 2026-02-27 20:28 UTC)
Scheduler-status (flow fulgt):
mainunder gates.Scope-kilder fastholdt: #16 (fase-board) + #17 (beslutningsafklaring).
PO har godkendt at starte MVP web-UI-sporet. Ny scoped issue: "MVP UI: Host + Player web screens (templates)" (need-to-have, ui). Scheduler må tage den næste.
Scheduler-status (flow fulgt):\n\n- Auth-preflight (DEV): ok=true\n- PR-first: ingen åbne PR-reviewkommentarer at fixe først.\n- Scope via #16/#17: ny UI-opgave er allerede leveret/merged (issue #30 + PR #31).\n- Næste need-to-have issue taget: #22 (smoke test-suite).\n- Leveret via PR #32: staging smoke-suite + gameplay smoke command (
manage.py smoke_staging) inkl. auto-oprettelse afsmoke-failissue ved fejl.\n- Review + merge gennemført under gates; #22 er lukket.\n\nAktuel state: open_prs=0, branches=main+release.Architect sync (wiki/Gitea-first) — levende epic-board update.
Status snapshot:
Fase 3 resterende kernearbejde (inden for eksisterende core-praksis):
Anbefalet næste prioritet efter #36:
Scheduler-status: PR #36 er reviewet+merged (session-token sikkerhedsfix). Næste need-to-have scoped UI-opgave taget via issue #37; PR #38 er oprettet, official approved, afventer required CI checks før merge.
Scheduler-status (flow fulgt):
mainunder grønne checks.open_prs=0, issue #41 lukket, branches kunmain+release/v0.1.0.Scheduler 23:00 UTC: PR-first check gav ingen åbne PR-reviewfund. Tog næste need-to-have UI-opgave via #43 (klikbart svarvalg-only ved guess submit). Leveret i PR #44, reviewed/approved og merged til
mainunder gates. Scope ankre #16/#17 fastholdt.Architect sync (wiki/Gitea-first, levende epic-board):
Statusbillede nu:
Arkitektvurdering af hvad platformen stadig mangler inden for eksisterende MVP-core:
Runner-misalignment check:
Scheduler-status: ingen åbne PR-reviewkommentarer. Næste need-to-have scoped UI-opgave taget via #49 og leveret i PR #50. Afventer review/checks jf. flow.
Scheduler-status: PR #50 merged og issue #49 lukket. Næste need-to-have UI-opgave er taget via #51 og leveret i PR #52 (approved). Afventer kun pending required check på pull_request-context før merge.
Scheduler-status: flow fulgt (preflight OK, PR-first check uden review-fund). Næste need-to-have UI-opgave blev taget som #53 og leveret via PR #54 (reviewed + merged til main). Slutstatus: open_prs=0, #53 lukket.
Scheduler-status: ingen åbne PR-reviewfund ved start, så næste need-to-have scoped UI-opgave blev taget via #55. Leveret i branch
feature/ui-submit-context-guard, PR #56 oprettet, reviewet og merged tilmainunder gates. Issue #55 er nu lukket; open_prs=0. Scope-ankre #16/#17 fortsat aktive.Arkitekt-sync (cron): #16 holdes som levende epic-board ✅
Aktuel state:
Arkitektvurdering (inden for MVP-core):
<3spillere både i UI + backend-flow.Jeg holder #16 opdateret løbende efter hver betydende ændring i PR/issue-landskabet.
Arkitekt-sync (cron): #16 holdes som levende epic-board ✅
Aktuel state:
Arkitektvurdering (inden for MVP-core):
<3spillere både i UI + backend-flow.Jeg holder #16 opdateret løbende efter hver betydende ændring i PR/issue-landskabet.
test comment architect sync
Arkitekt-sync (cron): #16 holdes som levende epic-board ✅
Aktuel state:
Arkitektvurdering (inden for MVP-core):
<3spillere både i UI + backend-flow.Jeg holder #16 opdateret løbende efter hver betydende ændring i PR/issue-landskabet.
Scheduler-status: PR #58 er merged og issue #57 er lukket. Næste need-to-have scoped UI-opgave er oprettet som #60 (reconnect-konsistens for host+spiller) under #16/#17.
Scheduler-status: #60 (MVP UI reconnect-konsistens) er nu leveret via PR #61 og merged til
mainunder grøn CI + official review.Resultat: host/spiller rehydrerer kontekst efter refresh, og submit-state/phase hentes automatisk via session detail.
Scheduler-status: PR #65 (UI robust join-state guard) er merged til
mainunder grøn CI + official review. Issue #64 er lukket viaCloses #64. Flow fulgt: Udv -> branch -> PR -> review -> merge.Scheduler-status: ingen åbne review-fund ved start, så næste need-to-have scoped UI-opgave blev oprettet som #68 (fasebaserede host-action guards). Implementeret på branch
feature/ui-host-phase-action-guards-68, PR #69 oprettet og official review=APPROVED. CI-contexts står p.t. pending i API, så merge afventer grønne required checks.Arkitekt-sync (2026-02-28 01:24 UTC)
Status på aktiv kerneopgave:
success), review er registreret, menmergeable=falselige nu.Opdateret MVP-core vurdering (inden for eksisterende praksis):
lobbybør være explicit for at undgå regressions i næste iterationer.Board-praksis fastholdt: #16 bruges som levende epic-board; #17 bruges kun til beslutningsankre/guardrails.
Scheduler-status: PR #69 er nu merged til
mainunder grøn CI + review.Næste need-to-have UI-opgave er oprettet som #70 (scope via #16/#17): lås kategori-valg i hostpanelet udenfor lobby-fasen.
Scheduler status: #70 er leveret via PR #71 (reviewet + merged). Host UI låser nu kategori-valg udenfor lobby-fasen. Ingen åbne PRs efter merge; #16/#17 forbliver aktive styringsankre.
Scheduler-status: issue #72 (need-to-have UI) er leveret via PR #73 (reviewet + merged til
main). Spillerpanelet har nu fasebaseret lock af lie/guess-kontroller samt tydelig fase-status. #16/#17 fortsætter som styringsankre.Scheduler-status: issue #74 (need-to-have UI) er leveret via PR #75 og merged til
mainunder grøn CI + official review. Hostpanelet låser nu round question-id feltet efter fase/kontekst med tydelig guard-hint. #16/#17 forbliver aktive styringsankre.Scheduler-status: auth-preflight OK. Review-fund/open PR blev håndteret først (PR #77 merged). Derefter næste need-to-have scoped UI-opgave oprettet og leveret: issue #78 -> PR #79 (auto-refresh toggle i host UI) merged til main under review + grøn CI. Slutstatus: open_prs=0, styringsankre #16/#17 fortsat åbne.
Arkitekt-iteration (2026-02-28T02:26:34+00:00) — #16 som levende epic-board
Status snapshot:
Arkitektvurdering (inden for eksisterende MVP core-praksis):
Runner-misalignment check: ingen detekteret i denne iteration.
Scheduler-status: auth-preflight (DEV) OK. Ingen åbne review-fund ved start. Næste scoped need-to-have UI-opgave blev oprettet som #80 og leveret via PR #81 (official review=APPROVED, CI grøn, merged til
main). UI viser nu ensartede fejl-hints for phase/token/round-state i både host- og player-panel, og nulstiller til "Ingen fejl." ved succes. Slutstatus: open_prs=0, #16/#17 fortsat styringsankre.Scheduler-status: auth-preflight (DEV) OK. Ingen åbne review-fund ved start. Næste need-to-have scoped UI-opgave blev oprettet som #82 og leveret via PR #83 (official review=APPROVED, required CI grøn, merged til main med branch-delete). Slutstatus: open_prs=0; #16/#17 fortsat aktive styringsankre.
Scheduler-status: PR #85 (
feature/ui-host-inflight-guard-84) er merged tilmainefter review + grøn CI. Issue #84 er lukket viaCloses #84. Aktuel state:open_prs=0, branches:main+release/v0.1.0.Scheduler-status: auth-preflight (DEV) OK. Ingen review-fund ved start. Næste need-to-have scoped UI-opgave blev oprettet som #86 og leveret via PR #87 (official review=APPROVED, required CI grøn, merged til main med branch-delete). Slutstatus: open_prs=0; #16/#17 fortsat aktive styringsankre.
Scheduler-status: auth-preflight (DEV) OK. Ingen åbne PR-review-fund ved start (
open_prs=0). Næste need-to-have scoped UI-opgave blev oprettet som #88 og leveret via PR #89 (official review=APPROVED, required CI grøn, merged tilmainmed branch-delete). Scope via #16/#17 fastholdt.Scheduler-status: auth-preflight (DEV) OK. Ingen åbne PR-review-fund ved start (
open_prs=0). Næste need-to-have scoped UI-opgave blev oprettet som #91 og leveret via PR #92 (official review=APPROVED, required CI grøn, merged tilmainmed branch-delete). Slutstatus:open_prs=0, styringsankre #16/#17 fortsat åbne.Scheduler-status: auth-preflight OK, ingen åbne PR-review-fund. Tog næste scoped need-to-have UI-opgave #93, implementerede sessionDetail in-flight lock i playerpanelet, og merged via PR #94 under grøn CI + officiel review. Slutstatus:
open_prs=0.Scheduler-status: auth-preflight (DEV) OK. Ingen åbne PR-review-fund ved start (
open_prs=0). Tog næste scoped need-to-have UI-opgave som #95 og leverede via PR #96 (feature/ui-guess-submit-client-guard-95) til review.Checks kørt:
python manage.py test lobby.tests.UiScreenTests --verbosity 1✅Scheduler-status: PR #96 (dobbelt guess-submit guard) er nu reviewet+merged. Ny scoped UI-opgave #97 er implementeret og merged via PR #98 (aktiv round-question guard i player-panelet). Open PRs=0.
Scheduler-status: auth-preflight OK; ingen review-fund på åbne PRs. Næste need-to-have UI-opgave blev taget via #99 (round_question_id read-only i player UI) og merged gennem PR #100. Slutstatus: open_prs=0, branches=main+release/v0.1.0, #16/#17 fortsat styringsankre.
Scheduler-status: auth-preflight (DEV) OK. Ingen åbne review-kommentarer på PRs ved start. Næste scoped need-to-have UI-opgave blev taget som #101 (host session-status in-flight lock). Implementeret i branch
feature/ui-host-session-detail-inflight-101og sendt i PR #102. Lokal verifikation grøn:ruff check lobby+python manage.py test lobby -v 1(42/42). PR #102 er officialAPPROVED, men merge afventer stadig required CI-checks (pending), så den står som aktiv merge-kandidat.Scheduler-status: PR #104 (issue #103) er reviewet, CI grøn og merged til
mainmed branch-delete. Flow overholdt: Udv -> branch -> PR -> review -> merge.Scheduler-status: auth-preflight (DEV) OK. Ingen åbne PR-review-fund ved start (
open_prs=0), så næste scoped need-to-have UI-opgave blev oprettet som #105 og leveret via PR #106.Leveret i UI:
sessionDetailVerifikation i CT132:
ruff check lobby+python manage.py test lobby -v 1(42/42) ✅.PR #106 er reviewet (official APPROVED), required CI grøn, merged til
mainmed branch-delete. Slutstatus:open_prs=0.Scheduler-status: auth-preflight (DEV) OK. Ingen åbne PR-review-fund ved start (
open_prs=0), så næste scoped need-to-have UI-opgave blev oprettet som #107 og implementeret i PR #108. PR #108 er reviewet (APPROVED), men merge afventer grøn required CI i denne iteration.Arkitekt-sync (2026-02-28T05:27:35Z)
MVP-status (levende epic-board):
Aktuel vurdering (inden for core-praksis):
Prioriteringsnote:
Scheduler-status: PR #110 merged (join-lock under session refresh). Ny need-to-have UI-opgave #111 oprettet og implementeret i PR #112 (sessionDetail lock under join). PR #112 er approved og afventer grøn required CI før merge.
Scheduler-status: PR #114 (UI auto-refresh join-lock) er merged til
mainunder grøn CI + official approval. Issue #113 er lukket viaCloses #113. Ingen åbne PRs efter merge.Scheduler-opdatering (flow: Udv -> branch -> PR -> review -> merge):
APPROVED) og merged tilmainmed branch-delete.Scheduler-status: PR #118 merged (host auto-refresh-toggle lock). Ny need-to-have UI-opgave #119 oprettet og leveret via PR #120, som nu er merged til
mainunder grøn CI + officiel approval.Slutstatus:
open_prs=0, scope-ankre #16/#17 fortsat aktive.Scheduler status (FLOW fulgt): preflight OK, ingen åbne PR review-fund.
Leveret ny need-to-have UI-opgave i scope:
mainunder grønne checksCloses #121Efterkontrol:
open_prs=0, branches kunmain+release/v0.1.0.Styringsankre #16/#17 fortsat aktive; #90 (release readiness) står fortsat åben til devops/test-spor.
Architect sync (2026-02-28 06:27 UTC)
Levende epic-board opdatering (Gitea/wiki-first):
Aktuel state
open_prs=0(ingen merge-kandidater lige nu)#16(epic-board) +#17(beslutningsanker) er begge åbne#90(MVP release-readiness) og#59(post-MVP, needs-approval)Arkitektvurdering – hvad mangler for stabil MVP inden for nuværende core-praksis
#90(staging deploy + smoke sign-off som gate)Potentiale (inden for eksisterende grundlag)
Runner-misalignment: ingen detekteret i denne iteration.
Scheduler-status (FLOW fulgt): preflight OK, ingen review-fund på åbne PRs. Ny need-to-have UI-opgave #127 oprettet og leveret via PR #128 (reviewet + merged til
mainunder grøn CI). Slutstatus:open_prs=0; #16/#17 fortsat aktive styringsankre.Arkitekt-prioritering (2026-02-28, value-first, WIP-cap håndhævet)
Top 3 næste høj-værdi opgaver til dev/integrator:
P1: Færdiggør PR #134 (MySQL-only staging deploy) for at lukke #133
P1: Verificér release-readiness i #90 via staging deploy + smoke efter merge
maindokumenteret i #90.healthz+ kerne-gameplay) dokumenteret PASS/FAIL i #90.P2: Opryd release-spor-issues efter verifikation (#131/#130)
Gate-håndhævelse:
needs-approvalindtil problem+værdi+hvorfor-nu er eksplicit dokumenteret.Architect-opdatering (2026-02-28 11:53 UTC) — design/prioritering til dev under aktivt release-spor.
Gate-check
Top 3 næste høj-værdi opgaver (til dev/devops flow)
Konsolider staging-fix i én PR (stop overlap mellem #132 og #134)
Få merged via normale gates + dokumentér merge-evidens i #90
Kør staging deploy + smoke og luk kun blockers ved evidens
Stop/Pause (indtil #90 er grøn):
needs-approval(ingen aktivering nu).needs-approval.Arkitekt-opdatering (prioritetsskift pga. ny release-readiness evidens):
Ny verificeret status fra #90 (seneste artifact):
./infra/staging/deploy_staging.sh) PASSmain)Konsekvens for top-prioriteter (ændret):
needs-approval(fx #59) indtil release-beslutning er taget.Scope-gate uændret:
Status update from scheduler: #90 is closed after canonical staging deploy+smoke PASS on
main(SHA6fd57d1714ee97c2f855e215e5df0728490df19a).\nEpic release-readiness track can be considered complete pending PO go/no-go decision.Arkitekt-opdatering (2026-02-28 21:47 UTC) — PO-prioritet omsat til release-nære gameplay-opgaver.
PO-signal: #129 er aktivt prioriteret nu som need-to-have retning (hurtigst mulig spilbar FupogFakta).
Top 1-3 release-nære gameplay-opgaver (konkret):
Scope-lås:
needs-approval/post-MVP (uden for aktivt scope).Scope-refresh (2026-03-01, PO-prioritet fastholdt): #129 er aktiv prioritet og omsættes nu til konkrete release-nære gameplay-opgaver mod hurtigst mulig spilbar FupogFakta-version.
Top 1-3 gameplay-opgaver (release-nære):
Scope-note:
PO-prioritet opdateret (source-of-truth): #129 er aktivt prioriteret som release-nær gameplay-retning for hurtigst mulig spilbar FupogFakta.
Top 1-3 konkrete gameplay-opgaver (release-nære):
E2E runde-loop er fuldt spilbar (host→spiller→svar→facit→score)
Gameplay-state synkronisering ved reconnect/refresh under aktiv runde
Match-afslutning + klar ‘spil igen’ baseline
Scope-guardrail: #59 forbliver uden for scope (
needs-approval/post-MVP) og må ikke aktiveres i denne release-push.PO-prioritering sync: #129 er aktivt prioriteret nu og omsat til release-nær gameplay-plan for FupogFakta (hurtigst muligt spilbar version).
Top 3 konkrete gameplay-opgaver (release-nære)
Scope-afgrænsning (PO-beslutning fastholdt)
needs-approval/post-MVP.Arkitekt-opdatering (2026-03-01 05:35 UTC) – PO-prioritet justeret til release-nær gameplay-udførelse.
Top 1-3 konkrete opgaver (FupogFakta, hurtigst muligt spilbar version):
Scope-lås:
Produktivitets-gate aktiveret: execution-opgave oprettet som #144. Plan-churn på hold indtil PR+artifact.
Scope-sync (2026-03-01 07:27 UTC) — PO-direktiv fastholdt, konkretiseret til release-nær execution.
Bindende arkitektur: gameplay/UI kører som SPA på både host- og player-sider (state-flow + navigation uden multi-page hop).
Top 1-3 konkrete gameplay-opgaver (hurtigst mulig spilbar FupogFakta):
Scopegrænse (bindende): #59 forbliver
needs-approval/post-MVP og er ikke aktiv execution i denne release-nære fase.PO-direktiv (ny retning): Vi starter SPA-migrationsspor for FupogFakta UI.
Foreløbig framework-retning: Angular-first (app-lignende struktur og tydelig routing/state), med React som fallback hvis der opstår konkrete leverance-hindringer.
Krav:
Lokal referenceplan er skrevet i workspace:
WPP_SPA_PLAN.mdSPA-migrationsspor prioritering opdateret jf. PO-direktiv (Angular-first; React kun ved dokumenteret leveranceblokering):
READY-kø (ordnet, PR-egnede små bidder)
USE_SPA_UImed sikker fallback (Cutover prep)Rationale: rækkefølgen følger foundation -> gameplay MVP flow -> cutover, med cutover-forberedelse før endelig dekommissionering af legacy UI.
PO-direktiv indarbejdet: SPA-migrationsspor kører Angular-first (React kun ved dokumenteret blokering).
Prioriteret READY-kø (small, PR-egnede bidder):
Foundation
Gameplay MVP flow
4. #169 Lobby join + start round i SPA-flow
5. #161 Gameplay phase state-machine skeleton (lie/guess/reveal/scoreboard)
6. #150 Non-blocking loading skeletons (in progress via PR #167)
Cutover
7. #162 USE_SPA_UI feature-flag + smoke artefact update
Note: #159 og #161 er opjusteret til
need-to-havefor at holde MVP-sporet ubrudt.SPA-migrationsspor prioriteret (Angular-first, React kun ved dokumenteret leveranceblokering):
READY-prioritet nu (små, uafhængige PR-bidder):
Bemærk:
PO-opdatering: Ny aktiv need-to-have i18n-opgave ##175. Krav: delt i18n mellem frontend/backend og engelsk default i eksisterende hardcoded tekster. Prioritér i aktiv READY-kø.
PO-præcisering (bindende):
client_has_no_audio_output=trueog simpel mobile UX-godkendelse.SPA-migrationsspor (Angular-first) er aktivt. Opdateret READY-prioritet i små, uafhængige PR-bidder:
#168 (P2 Foundation) — Angular API-client lag (health + session read)
#169 (P4 Gameplay MVP del 1) — lobby join + start round i SPA
#161 (P5 Gameplay skeleton) — fase-state-machine (lie/guess/reveal/scoreboard)
#172 (P7 Gameplay MVP del 2) — lie->guess->reveal->scoreboard wired i Angular
#162 (P6 Cutover) — USE_SPA_UI feature-flag + smoke artefakt
Framework-retning fastholdes: Angular-first for host+player UI. React kun fallback ved dokumenteret leveranceblokering.
SPA-migrationsspor (Angular-first) READY-prioritering opdateret. Foreslået eksekveringsrækkefølge:
React er kun fallback ved dokumenteret leveranceblokering.
SPA-migrationsspor er aktivt (PO-direktiv), med Angular-first for host+player UI; React kun fallback ved dokumenteret leveranceblokering.
Prioriteret READY-kø (foundation -> gameplay MVP -> cutover):
[READY][SPA][P12]Foundation hardening: Angular route/session guards for host+player entry (need-to-have)[READY][SPA][P9]Angular API-contract guard: typed client + response mappers (need-to-have)[READY][SPA][P8]Gameplay MVP-del 3: next-round + final leaderboard (need-to-have)[READY][SPA][P10]Gameplay MVP-del 4: reconnect/loading/error states (nice-to-have, men vigtig før cutover)[READY][SPA][P11]Cutover hardening: static asset versioning + rollback playbook (nice-to-have/release-approved)Noter:
SPA-migrationsspor prioritering opdateret (PO-direktiv bindende): Angular-first for host+player UI; React er kun fallback ved dokumenteret leveranceblokering.
Nyt verificerbart signal siden sidste scope-sync: PR #194 er åbnet for P8 (next-round + final leaderboard).
READY-prioritet (foundation -> gameplay MVP -> cutover), små uafhængige PR-bidder:
[P12] Foundation hardening: route/session guards(need-to-have)[P9] API-contract guard: typed client + mappers(need-to-have)[P8] Next-round + final leaderboard(need-to-have, in-flight)[P10] Reconnect/loading/error states(reprioriteret til need-to-have)[P11] Cutover hardening: asset versioning + rollback(nice-to-have, cutover-forberedelse)Bemærk:
PO-direktiv indarbejdet (MVP/release-often):
READY-kø opdateret med små PR-egnede bidder: #220, #221, #222, #223, #224.
Sekvens mod trunk/release: backend baseline -> shared key-map -> Angular host/player integration -> telefon audio guard.
PO-direktiver indarbejdet (MVP/release-often, Angular-first, #175 aktiv need-to-have, telefon uden lyd).
READY-sekvens mod trunk/release (små uafhængige PR-bidder):
Prioritet: #175-sporet først, derefter #223 (kan tages parallelt hvis ingen konflikt).
Framework guardrail: Angular-first for host+player; React kun ved dokumenteret leveranceblokering.
Overlappende READY-issues (#220/#221) er lukket som superseded for at reducere planstøj.
PO-direktiver indarbejdet (MVP/release-often, Angular-first, #175 need-to-have, phone/client no-audio).
Opdateret execution-sekvens (små PR-egnede bidder):
Bemærk: ingen åbne PRs pt., så næste step er execution via READY-kø i rækkefølge ovenfor.
Arkitekt-prioritering (MVP, release-often / trunk-småbidder) opdateret jf. PO-direktiver:
Sekvensmål: få #175 lukket i små uafhængige PR’er med hyppige mergepunkter til main; ingen feature-udvidelse før need-to-have #175 er leveret.
Ny styrende gameplay-issue oprettet: #287.
Denne skal bruges som reference for at målrette FupOgFakta/WPP mod et tydeligt canonical round loop:
Brug #287 som source-of-truth for videre architect/dev/review-opdeling på gameplay-sporet.
Scope-board note: game-cartridge separation is now tracked explicitly in #311 and its child tasks. Treat the current
lobby-owns-FupOgFakta-flow drift as in-scope technical correction for Fase 3, not optional cleanup.