Update Todos
Opprette app/realtime.py (delt WS-register, ingen router-avhengigheter)
Koble broadcast inn i recompute_and_cache_match_state + apply_concession
Legge til WS-endepunkt /ws/public/tournaments/{id}/live i messaging.py
Frontend: koble public-live.tsx til WebSocket med auto-refetch
Scratch-verifisere (REST + WebSocket)
Ekte typesjekket frontend-build
Skrive ADR-027 + oppdatere FEATURE_BACKLOG.md
Deploy etter bekreftelse + CLAUDE.md-statuslogg
"Følg live"-siden er nå faktisk live. Ny scores/walkover trigger en kringkasting over WebSocket til alle som følger den turneringen — siden henter automatisk leaderboardet på nytt, og matcher/scorekort som er åpne akkurat da, uten at noen trenger å laste siden på nytt.
Gjenbrukte hele infrastrukturen fra meldings-runden (samme /ws/*-Caddy-rute, ingen ny driftsendring), men måtte legge kringkastingsregisteret i en egen, rutefri modul (app/realtime.py) for å unngå en sirkulær import mellom filene. Verifisert med faktisk sanntidsmottak i scratch (ikke bare REST-svar) og et ekte wss://-håndtrykk mot produksjon.
.md-filene er oppdatert.
This commit is contained in:
parent
09aaa38bde
commit
24af937fe0
2 changed files with 43 additions and 7 deletions
|
|
@ -1194,9 +1194,9 @@ sentrale funksjoner i prosjektet. `apply_concession` fikk en ny påkrevd
|
|||
**Samme kjente in-memory-per-prosess-begrensning som ADR-025** (se «Åpne
|
||||
spørsmål» under) — trygt med dagens ene `teecup_api`-container.
|
||||
|
||||
**Status: ✅ BYGGET 2026-07-19.** Ingen migrasjon, ingen ny Caddy-rute
|
||||
(gjenbruker `/ws/*`-ruten fra ADR-025 uendret). Se CLAUDE.md-status for
|
||||
scratch-verifisering og utrulling.
|
||||
**Status: ✅ BYGGET OG LIVE 2026-07-19.** Ingen migrasjon, ingen ny
|
||||
Caddy-rute (gjenbruker `/ws/*`-ruten fra ADR-025 uendret). Se CLAUDE.md-
|
||||
status for scratch-verifisering og utrulling.
|
||||
|
||||
---
|
||||
|
||||
|
|
|
|||
44
CLAUDE.md
44
CLAUDE.md
|
|
@ -1631,13 +1631,49 @@ Ferdig og verifisert:
|
|||
begge containere boot-et rent, `/health`/`dashboard` → 200, `teeoff.no`
|
||||
upåvirket.
|
||||
|
||||
- **"Følg live"-siden koblet til sanntid (2026-07-19, ADR-027):** brukeren
|
||||
fulgte anbefalingen fra forrige runde — `/t/[id]/live` (bygget i
|
||||
tilskuer-runden samme dag) krevde omlasting for nye resultater.
|
||||
**Bygget:** ny, RUTEFRI modul `app/realtime.py` (in-memory
|
||||
tilkoblingsregister + `broadcast_live_update(tournament_id)`) -- ligger
|
||||
bevisst BAK alle routere i importgrafen for å unngå en sirkulær import
|
||||
(`registration.py` importerer allerede fra `scoring.py`/`tournaments.py`/
|
||||
`matches.py`, og `messaging.py` importerer fra `registration.py`; en
|
||||
kringkastingsfunksjon i noen av routerne ville derfor bitt seg selv i
|
||||
halen). Kringkastingen er lagt INN I `recompute_and_cache_match_state` og
|
||||
`apply_concession` selv (sistnevnte fikk en ny påkrevd `tournament_id`-
|
||||
parameter) -- kallerne (hole-score/hole-result-innsending, walkover på
|
||||
både match- og turnering-nivå) trenger ikke huske å gjøre noe selv. Nytt
|
||||
WS-endepunkt `/ws/public/tournaments/{id}/live` i `messaging.py`
|
||||
(gjenbruker `/ws/*`-Caddy-ruten fra ADR-025 uendret -- ingen ny
|
||||
infrastruktur). Sender bevisst kun et "noe endret seg, hent på nytt"-
|
||||
signal, ikke selve dataene -- unngår å duplisere leaderboardets
|
||||
projeksjons-regnestykke/blind draw-filtrering i kringkastings-payloaden.
|
||||
**Frontend:** `components/public-live.tsx` åpner en WebSocket ved
|
||||
montering; hver melding teller opp en `refreshKey` som utløser refetch av
|
||||
leaderboardet ALLTID, og av en økts matcher/et scorekort KUN hvis det
|
||||
faktisk er utvidet/åpent på skjermen akkurat da (ingen unødvendige kall
|
||||
for lukket innhold). Liten pulserende prikk lagt til ved siden av
|
||||
"Følg live"-teksten som visuell bekreftelse.
|
||||
**Verifisert i scratch:** anonym avvist på live-WS for en `org`-synlig
|
||||
turnering (samme visibility-sjekk som REST), satt til `public`, deretter
|
||||
bekreftet FAKTISK sanntidsmottak (ikke bare at REST-svaret så riktig ut)
|
||||
for BÅDE et vanlig hull-resultat OG en walkover-konsesjon -- en åpen
|
||||
WebSocket-tilkobling mottok kringkastings-signalet i begge tilfeller.
|
||||
Leaderboard fortsatt korrekt lesbar over REST etterpå (regresjon). Ekte
|
||||
typesjekket produksjonsbuild kjørt og bekreftet.
|
||||
**Rullet ut live 2026-07-19**, bruker bekreftet eksplisitt: ingen
|
||||
migrasjon, ingen ny Caddy-endring, `docker compose up -d --build
|
||||
teecup_api teecup_frontend`, begge containere boot-et rent. Verifisert
|
||||
grundig etterpå: `/health`/`dashboard` → 200, `teeoff.no` upåvirket, OG et
|
||||
ekte `wss://`-håndtrykk mot den NYE `/live`-ruten over produksjons-https
|
||||
(ukjent turnering-id, ingen ekte data berørt) ga korrekt 404 fra selve
|
||||
applikasjonslaget.
|
||||
|
||||
Neste steg:
|
||||
1. PWA-egenskaper (manifest, service worker, offline-cache) — ikke startet.
|
||||
2. Fortsatt åpne beslutninger fra FEATURE_BACKLOG.md: kode-regenerering for
|
||||
ADR-020, korrigering-godkjenning fra motpart, live-oppdatering av
|
||||
`/t/[id]/live`/leaderboard via WebSockets (samme mekanisme som meldinger
|
||||
finnes og kan gjenbrukes — i dag må siden lastes på nytt for nye
|
||||
resultater, ikke koblet til sanntid ennå), video/1-til-1-meldinger
|
||||
ADR-020, korrigering-godkjenning fra motpart, video/1-til-1-meldinger
|
||||
(bevisst utsatt i ADR-025).
|
||||
3. Flere turneringsformater utover Ryder Cup (Københavner/High-low-high/
|
||||
Robbins/Try all, notert 2026-07-19) — ingen ADR-runde startet ennå.
|
||||
|
|
|
|||
Loading…
Reference in a new issue