CHANGELOG/ADR-096/BACKLOG: logg for shotgun-start

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Erol Haagenrud 2026-08-21 08:59:58 +02:00
parent 9f81797324
commit 30d009b490
3 changed files with 214 additions and 2 deletions

View file

@ -9725,6 +9725,89 @@ faktisk radrekkefølge og `aria-sort`-tilstand for alle tre sykluser.
---
## ADR-096: Shotgun-start bygget -- reverserer/utvider migrasjon 084s bevisste "IKKE shotgun" (2026-08-21)
Migrasjon 084 (2026-08-18) valgte BEVISST bort shotgun-start for
utslagsgrupper, etter en tre-spørsmål-avklaring med bruker den gang:
"TRADISJONELT utslag (samme starthull for alle, allerede rundens eget
start_hole -- ingen endring der), staggerte klokkeslett PER GRUPPE med
fast intervall -- IKKE shotgun (ulike hull samtidig)." Samme
begrensning fantes uavhengig på Cup-/lagformatets side (`session`/
`match`) fra migrasjon 006 av, aldri eksplisitt vurdert der.
Bruker, i forbindelse med planlegging av utskriftsklare startlister:
"Det må komme frem om det er Shotgun eller løpende start, med hvilket
hull man starter på. Sorteringen av startlisten gjøres etter
utslagsform (løpende = tidspunkt, shotgun = starthull)." Presentert to
alternativer (ekte støtte vs. kun utskrift-deko) -- bruker valgte ekte
støtte: "Bygg ekte shotgun-støtte nå."
**Endres eksplisitt her, ikke slettet fra historikken**: migrasjon 084
sin begrunnelse for å utelate shotgun den gang (unødvendig kompleksitet
for et behov som ikke forelå ennå) er fortsatt gyldig SOM BESKRIVELSE AV
DA -- dette er en bevisst UTVIDELSE når et nytt, konkret behov (utskrift)
gjorde det nødvendig, ikke en korrigering av en feil beslutning.
**Migrasjon 088** (samme text+CHECK-mønster som migrasjon 087, ikke en
ny `CREATE TYPE ... AS ENUM`):
- `tournament_round.start_mode` / `session.start_mode` -- 'consecutive'
(standard, UENDRET oppførsel) / 'shotgun'.
- `tournament_round_group.start_hole` / `match.start_hole` -- valgfritt,
KUN meningsfullt når forelderen er 'shotgun'. `NULL` for en
'consecutive'-runde/økt, som fortsatt bruker den delte
`start_hole`/`tee_interval_minutes`-modellen (uendret siden migrasjon
040/006).
**Klokkeslett-beregning** (`_compute_group_tee_time` i
individual_tournaments.py, `_compute_tee_time` i matches.py -- begge
utvidet identisk): shotgun = ALLE grupper/matcher går ut på ETT felles
tidspunkt (`scheduled_at`, uansett `sequence`) -- intervallet er
meningsløst i denne modusen (ulikt HULL, ikke ulikt klokkeslett). En
eksplisitt per-gruppe/per-match `tee_time_override` vinner fortsatt over
begge modiene (uendret unntaksmekanisme).
**Visningsrekkefølge**: løpende sorteres etter klokkeslett (allerede =
sequence-rekkefølgen for 'consecutive', ingen endring), shotgun sorteres
etter STARTHULL i stedet (ikke tildelt = sist, aldri først). Håndhevet
BÅDE i backend (`_fetch_round_groups`/`fetch_matches`) OG i frontend --
fant og rettet en reell bug under scratch-verifisering: begge
frontend-skjermene (`round-groups-panel.tsx`, `session-blind-draw.tsx`)
hadde en HARDKODET `.sort((a, b) => a.sequence - b.sequence)` som
overstyrte backendens shotgun-sortering fullstendig, uansett hva
serveren faktisk sendte. Rettet til å sortere etter starthull når
shotgun, sequence ellers -- gjelder nå også LOKALE, ulagrede endringer
(et nettopp justert starthull flytter gruppen i visningen umiddelbart,
ikke først ved neste lagring/reload).
**Frontend:**
- `round-groups-panel.tsx` (individuell, hånd-kodet fra før -- samme
mønster videreført, ikke sendt via V0): Løpende/Shotgun-veksler,
intervall-feltet skjules i shotgun, hver gruppe får et eget
starthull-tallfelt i stedet.
- `tournament-program.tsx` sin `EditSessionForm` (Cup, V0-bygget fra
før): samme veksler-mønster, øktens eget "Starthull"-felt skjules i
shotgun (blir per-match i stedet), sesjonslisten viser en tydelig
"Shotgun"/"Løpende start"-merkelapp.
- `session-blind-draw.tsx` (Cup, blind draw-trekningen): "Legg til
match" spør om starthull når økten er shotgun, vist på matchkortet
(før OG etter avsløring) i stedet for utslagstid.
**Testet, ikke bare gjennomgått:** 5 nye backend-tester
(`test_round_groups.py` for individuell, `test_shotgun_start_cup.py` for
Cup) -- felles tidspunkt uansett sequence, riktig sortering etter
starthull, override vinner fortsatt, regresjonsvern for at
'consecutive' er helt uendret. Alle 163 backend-tester grønne mot
scratch-database. Frontend verifisert i egen `tmp-preview`-rute som
monterer den EKTE `RoundGroupsPanel` med en stateful `window.fetch`-mock
(speiler faktisk server-oppførsel, ikke bare statiske svar) -- bekreftet
at veksling til shotgun skjuler intervall-feltet og viser starthull-felt
per gruppe, at et lokalt satt starthull REORDNER visningen umiddelbart
(fanget nettopp sorterings-bug-en over), og at lagring+reload beholder
riktig rekkefølge. `tsc --noEmit` rent på hele frontend-prosjektet.
Scratch-ruten slettet etterpå, bekreftet med `git status --short`.
---
## Utviklingsplan (rekkefølge)
1. ✅ Land tenant-modell → **Organisasjon** (ADR-001/002/003)

View file

@ -13924,3 +13924,50 @@ Neste steg:
CHANGELOG), deretter `docker compose build teecup_api
teecup_frontend && up -d`, begge containere friske, rene logger.
Ingen migrasjon.
149. **Shotgun-start bygget, 2026-08-21 (ADR-096, migrasjon 088).**
Reverserer/utvider migrasjon 084 sitt bevisste "IKKE shotgun"-valg
fra 2026-08-18 -- oppdaget som et behov mens utskriftsklare
startlister ble planlagt: "Det må komme frem om det er Shotgun
eller løpende start, med hvilket hull man starter på. Sorteringen
av startlisten gjøres etter utslagsform." Bruker valgte ekte
støtte fremfor kun utskrift-deko.
Ny `start_mode` ('consecutive'/'shotgun') på BÅDE `tournament_round`
(individuell) og `session` (Cup) -- samme arkitektoniske hull fantes
uavhengig begge steder. Ny valgfri `start_hole`
`tournament_round_group`/`match`, kun meningsfull i shotgun.
Shotgun: alle grupper/matcher går ut på ETT felles tidspunkt
(intervallet meningsløst i denne modusen), sortert etter STARTHULL i
stedet for klokkeslett. 'consecutive' er uendret oppførsel, ingen
regresjon.
**Reell bug funnet OG rettet under scratch-verifisering:** begge
berørte frontend-skjermene (`round-groups-panel.tsx`,
`session-blind-draw.tsx`) hadde en hardkodet
`.sort((a,b) => a.sequence - b.sequence)` som stille overstyrte
backendens shotgun-sortering, uansett hva serveren faktisk sendte --
ville vist grupper/matcher i FEIL rekkefølge for enhver shotgun-runde
hvis den ikke var fanget opp. Rettet til å sortere etter starthull
når shotgun (inkludert LOKALE, ulagrede endringer -- en nettopp
justert starthull flytter gruppen i visningen umiddelbart).
Frontend: `round-groups-panel.tsx` (individuell, hånd-kodet fra
før) fikk en Løpende/Shotgun-veksler + per-gruppe starthull-felt.
`tournament-program.tsx` sin `EditSessionForm` (Cup) fikk samme
veksler + en tydelig modus-merkelapp i øktlisten.
`session-blind-draw.tsx` fikk et starthull-felt ved "Legg til
match" i shotgun-modus, vist på matchkortet både før og etter
avsløring.
**Testet, ikke bare gjennomgått:** 5 nye backend-tester (felles
tidspunkt uansett sequence, riktig starthull-sortering, override
vinner fortsatt, regresjonsvern for uendret 'consecutive'-
oppførsel) -- alle 163 backend-tester grønne mot scratch-database.
Frontend verifisert i en `tmp-preview`-rute som monterer den EKTE
`RoundGroupsPanel` med en STATEFUL `window.fetch`-mock (speiler
faktisk server-oppførsel) -- nettopp DENNE testingen fanget opp
sorterings-bug-en over. `tsc --noEmit` rent. Scratch-ruten slettet
etterpå, bekreftet med `git status --short`.
**Ikke rullet ut ennå.**

View file

@ -7,8 +7,9 @@
> Status-koder: ✅ ferdig · 🔨 pågår · 📋 planlagt/fanget · ❓ trenger beslutning
> · 🔀 endret fra opprinnelig råd · 💤 utsatt (bevisst)
>
> Sist oppdatert: 2026-08-20 (funksjonelle hull funnet under design-
> dokumentasjon-runden notert, se seksjonen nederst)
> Sist oppdatert: 2026-08-21 (funksjonelle hull funnet under utskrift-
> planlegging notert -- hullengde, turneringslogo, bracket-format
> utsatt, shotgun-start under bygging -- se de to nederste seksjonene)
---
@ -4776,3 +4777,84 @@ runder (sannsynligvis flere -- de spenner fra rene UX-forbedringer
til det som kan være en reell autorisasjons-/synlighets-beslutning
verdt en ADR, se rolletilpasning-punktet) -- ikke noe som bør fikses
alle på én gang.
## Funksjonelle hull funnet under "utskrift av turneringsdokumenter"-planlegging (2026-08-21) — 📋 delvis notert, delvis under bygging
**Kontekst:** bruker ba om V0-prompter for utskriftsklare startlister/
resultatlister/cart-tags/scorekort (PDF, A4/Letter + A3/A2 for Cup-
startlister). Undersøkt FØR promptene ble skrevet, for å unngå å designe
utskrift for felt/formater som ikke faktisk finnes ennå. Tre reelle hull
funnet; bruker har eksplisitt tatt stilling til alle tre (se hver):
- **Hullengde finnes ikke i datamodellen.** Verken `hole` (org-scopet,
brukt av turneringer), `personal_course_hole` eller
`golfapi_course_hole` har noen lengde-/avstandskolonne -- kun `par`
og `stroke_index`. Verken `golfapi_client.py` eller `teeoff_client.py`
henter/lagrer noe lengdefelt fra kildene i dag heller (uklart om
kildene faktisk TILBYR det uten videre, eller om det må legges inn
manuelt). Trengs for scorekort-utskrift (bruker: "Hullets lengde må
med"). **💤 Utsatt** -- mockes med plausible tall i selve V0-
utskriftsprompten (`v0-prompt-print-scorecard.md`), ekte
datamodell-utvidelse (ny kolonne + evt. import-kilde-sjekk) er en
egen, senere oppgave før feltet kan vise ekte tall.
- **Ingen dedikert turneringslogo finnes.** `tournament.hero_image_key`
(migrasjon 009) er et BREDT banner-bilde til presentasjonsfanen, ikke
egnet som en kompakt logo i en utskrift-topptekst. Sponsor-logoer
finnes (samme migrasjon) men er et annet konsept (sponsor, ikke
arrangør). Trengs på alle fire utskriftstyper (bruker: "Turneringslogo
(om den ikke eksisterer bruker vi TeeCup sin)"). **💤 Utsatt** --
mockes i V0-promptene, ekte `tournament.logo_key`-felt (+ fallback til
TeeCups egen logo) er en egen, senere oppgave.
- **128-spiller individuell utslagsturnering ("Sommercup"-stil,
single-elimination bracket) finnes ikke som turneringsform i det hele
tatt.** Appen har i dag KUN to-lag Ryder Cup-formatet (arkitektur-
invariant, CLAUDE.md: "v1 = nøyaktig to lag ... Match-modellen holdes
generell (to sider) så knockout/flere lag kan komme senere" -- aldri
bygget, kun forberedt for). Ingen runde-for-runde-parring/
vinner-videreføring-logikk finnes. **💤 Utsatt, bevisst.** Bruker
eksplisitt valgt: skip bracket-utskrift denne runden, kun de
formatene som faktisk finnes (individuell + to-lag Cup) dekkes av
utskriftsprompt-runden. Bracket-turneringsformen tas opp som egen,
betydelig oppgave (parring/videreføring/UI) FØR noen utskrift for
den designes.
- **Shotgun-start finnes ikke** (`tournament_round`/`tournament_round_
group` for individuelle turneringer, `session`/`match` for Cup-
format -- SAMME arkitektoniske begrensning begge steder: ett delt
starthull for HELE runden/økten, kun staggerte klokkeslett PER
gruppe/match, ingen forskjellig starthull per gruppe/match).
Individuell-siden ble dette BEVISST valgt bort i migrasjon 084
(2026-08-18, tre-spørsmål-avklaring med bruker den gang). Bruker denne
runden: "Det må komme frem om det er Shotgun eller løpende start...
Sorteringen av startlisten gjøres etter utslagsform." **✅ BYGGET
2026-08-21** (migrasjon 088, ADR-096) -- se ARCHITECTURE_DECISIONS.md
for full detalj, ikke gjentatt her.
## Idé, ikke spesifisert: påminnelser + tilbakemeldings-"kartotek" under en runde (2026-08-21) — 📋 fanget, ikke designet
Bruker: "Jeg vil brukeren skal få spørsmål om han vil bli påminnet
nødvendige ting som å huske å drikke (og spise), huske rutinene sine og
andre gode poenger gjennom golfrunden. Kanskje vi også skulle
implementert et kartotek med tilbakemeldinger av ymse slag som popper
opp når spilleren registerer en score på et hull eller etter en
fullført runde eller etter en turnering?" To atskilte idéer, ingen av
dem designet i detalj ennå:
1. **Under-runde-påminnelser** -- spørre brukeren (trolig ved
rundestart, eller i profil-/innstillinger) om de vil ha periodiske
varsler under en pågående runde for ting som lett glemmes: drikke
vann, spise, egne faste rutiner/sjekklister. Uavklart: varslings-
mekanisme (push-varsel? in-app-banner?), frekvens/trigger
(tidsintervall? etter hvert hull?), hvor dette konfigureres, om det
er en global brukerinnstilling eller per-runde-valg.
2. **Tilbakemeldings-"kartotek"** -- en samling ferdigskrevne
tips/tilbakemeldinger som kan poppe opp kontekstuelt: ved
score-registrering på et hull, etter fullført runde, eller etter
fullført turnering. Uavklart: hva slags innhold (motiverende?
teknisk/instruktivt? statistikk-baserte observasjoner om spillerens
eget spill?), triggerlogikk (tilfeldig? regelbasert ut fra
score/statistikk?), om det er redigerbart av organisator/klubb eller
fast levert av TeeCup.
**Neste steg:** begge idéene trenger en egen avklaringsrunde med bruker
FØR design/bygging -- ingen beslutninger tatt ennå, kun fanget opp her
for å ikke gå tapt.