Commit graph

192 commits

Author SHA1 Message Date
885dcac4e5 Slag-for-slag GPS-avstandsmåling for org-turneringer (ADR-103)
Ny tournament_round_shot-tabell (org-scopet RLS, FK-et til
tournament_round_participant + hole_number siden tournament_round_hole
kanskje ikke finnes ennå). ShotMeasurementSheet/MapPointPicker gjenbrukt
uendret; ShotMeasurementEntry generalisert fra en lokal round-detail.tsx-
funksjon til en delt, URL-parameterisert komponent. Deling går til den
rundespesifikke kommentartråden (ADR-102) i stedet for Banter Board.
Autorisasjon speiler update_hole (self/org-admin), strengere enn ADR-102s
kommentar-nivå.

Migrasjon 091 IKKE kjørt mot ekte teecup_db ennå -- venter på
brukerbekreftelse før utrulling.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-22 07:16:14 +02:00
d8d1cf39ae Rundespesifikk kommentartråd for org-turneringer (ADR-102)
Ekte parallell til frittstående runders RoundMessages (ADR-044), ikke
en utvidelse av Banter Board (ADR-025) -- ny org-scopet (RLS)
tournament_round_message-tabell, én tråd per turneringsrunde. Reaksjoner
og trådede kommentarer med via eksisterende PostEngagement-komponent
uendret; @-tagging og sanntid bevisst utenfor v1 (se ADR-102).

Migrasjon 090 IKKE kjørt mot ekte teecup_db ennå -- venter på
brukerbekreftelse før utrulling.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-22 06:39:44 +02:00
dcc2a9275c Hull-for-hull-utvidelse i den autentiserte leaderboard-fanen (ADR-101)
Klikk på en spiller i slagspill/netto/Stableford-leaderboardet
ekspanderer nå raden til Ut/Inn-tabeller med hull-for-hull-score, portert
fra det tilsvarende mønsteret på den offentlige "Følg live"-siden. Nytt
lite, isolert backend-endepunkt (tournament_participant_id-nøkkede
hull), ingen migrasjon. StrokePlayLeaderboard sin LeaderboardRow-type
er uendret -- nytt valgfritt prop-sett på komponenten selv.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-22 05:26:46 +02:00
707df01e2a Kjedet flerspiller-scoring i ScoreTab (ADR-100) -- steg 2 av parity-planen
Hull-først kortliste + kjedet flerspiller-veiviser (V0-skall, ekte
skjemakomponenter fra HoleStatsSheet/TournamentScoringWizard). Ingen
backend-endring. Tre reelle bugs funnet og rettet i scratch: standardhull-
valg racet mot ufullstendig data, auto-hopp uteble for spiller 2+ pga.
stale state ved spillerbytte, DSQ'et spiller blokkerte "hull ferdig"
permanent.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-21 23:00:22 +02:00
4587503d03 Flight/gruppe-scoping i ScoreTab (ADR-099) -- steg 1 av parity-planen
ScoreTab viste hele turneringsfeltet i stedet for brukerens egen
utslagsgruppe. Defaulter nå til egen flight med "vis hele feltet"-
veksling og fallback når gruppe mangler. is_self beregnes server-side
(aldri rå user_id). Lukker et reelt RLS-hull på tournament_round_group
funnet underveis (migrasjon 089).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-21 21:46:38 +02:00
dd974678fa Skjul HCP på offentlig leaderboard for rene bruttoslagspill-turneringer
Bruker: "når det er brutto som er hovedkonkurransen trenger vi ikke se
hcp i leaderboarden" -- HCP er kun meningsfullt der den faktisk brukes
til slagfordeling (netto/stableford/Københavner/BBB), ikke ren brutto/
eclectic-gross. PublicTournamentInfo += scoring_method (manglet før),
leaderboard-raden skjuler nå HCP-teksten når turneringens scoring_method
er stroke_gross eller eclectic_gross. Verifisert mot ekte Klubbmesterskap
2026 (bekreftet stroke_gross) i scratch før utrulling.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-21 20:20:22 +02:00
3a9ae02841 Rett Thru-kolonnens vertikale justering i offentlig leaderboard
Bruker rapporterte fra ekte mobilbruk (teecup.golf, live): THRU-etiketten
sto lavere enn I DAG/TOTAL. Thru-verdien manglet samme min-h-10 som
ScoreShape (brukt av I dag/Total) gir de andre kolonnene -- hele
Thru-kolonnen ble dermed lavere og sentrerte etiketten ut av linje.
Verifisert rettet i scratch før utrulling.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-21 20:14:48 +02:00
b8e7d1d004 Rett navn-avkorting på smale mobilskjermer i offentlig leaderboard
Funnet under scratch-verifisering (360px viewport): spillernavn ble kuttet
med "..." ("Erol Haag..."), under lesbarhetsbarren (CLAUDE.md, ufravikelig
tilgjengelighetsregel). Navnet får nå bryte til ny linje i stedet for å
avkortes -- undertittelen (HCP/klasse) beholder truncate siden den er
mindre kritisk. Strammet også inn radens gap/padding på de minste
skjermene for å gi navnekolonnen mer plass. Verifisert på nytt mot 360px
med et bevisst langt testnavn, bekreftet OK.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-21 20:08:11 +02:00
9fad4b3f38 Offentlig "Følg live" for individuelle turneringer: V0-UI + full kobling
Fullfører ADR-098. Ny components/public-individual-live.tsx (V0-bygget,
presentasjonslaget uendret fra eksporten) koblet til de ekte endepunktene
fra forrige commit. Rettet en reell modellmismatch underveis: V0-mock-en
modellerte hver runde som sitt eget separate leaderboard, den ekte
backend-beregningen er ett samlet, kumulativt turnering-leaderboard --
rundevelgeren styrer nå kun hvilken rundes hull-for-hull som lastes.

Ny offentlig GET .../rounds/{round_id}/participants/{tournament_participant_id}
/holes for hull-for-hull-utvidelsen (egen rute, ikke gjenbruk av
frittstående-runders tilsvarende -- ulik datamodell).

app/t/[id]/live/page.tsx avgjør nå format SERVER-side før noe rendres,
unngår klient-side-feilklassen fra forrige commit helt for denne siden.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-21 19:50:35 +02:00
f207be374f Offentlig "Følg live" for individuelle turneringer: backend + Program-fiks
Org-individuelle turneringer manglet en fungerende offentlig tilskuerside
helt (bevisst utsatt i FEATURE_BACKLOG.md 2026-08-14, "hvis/når etterspurt"
-- nå etterspurt). Denne runden bygger backend-grunnmuren:

- PublicTournamentInfo += format_type (manglet, landingssiden kunne ikke
  skille format offentlig).
- Ny GET /public/tournaments/{id}/rounds -- rundeliste med utledet status
  (ikke startet/pågår/fullført).
- Ny GET /public/tournaments/{id}/individual-leaderboard -- gjenbruker
  _compute_individual_standings uendret, fjerner kun player_id, inkluderer
  HCP (bruker bekreftet eksplisitt).
- Sanntid: broadcast_live_update() koblet inn i _recompute_round_score,
  gjenbruker samme WebSocket-kanal Cup-siden allerede bruker (ADR-027-
  mønsteret), ingen ny WS-infrastruktur.
- public-tournament.tsx sin "Program"-seksjon viser nå rundeliste for
  individuelle turneringer i stedet for en alltid-tom Cup-økt-liste.

Selve "Følg live"-sidens UI (V0) og /t/[id]/live sin format-forgrening
gjenstår -- egen commit når V0-eksporten er klar.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-21 19:44:13 +02:00
f9ae32f4e1 Kopierbar offentlig lenke + trygg fallback for ikke-innlogget besøkende
Organisator delte ved et uhell sin egen admin-URL (/tournaments/{id}?org=...)
i stedet for den ekte offentlige (/t/{id}) -- lenken fantes fra før, men var
kun ren, ikke-kopierbar tekst. tournament-presentation.tsx fikk en ekte
kopier-knapp.

Reell, uavhengig bug: tournament-router.tsx falt ubetinget tilbake til
Cup-format-adminskjermen ved ENHVER feil i formatoppslaget, inkl. 401 for en
ikke-innlogget besøkende -- viste et ødelagt lag-oppsett-skjermbilde for en
individuell turnering. Skiller nå 401 fra andre feil og sender videre til
den ekte offentlige siden i stedet.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-21 19:44:02 +02:00
1e3ffe634b Ærlig feilmelding for ugyldig kilde-data ved baneimport (EXTERNAL_DATA_INVALID)
Rotårsak for "banen er allerede importert"-forvirringen rundt Tjøme-baner:
teeoffs egen hull-data hadde en duplisert hcp-indeks (13 to ganger, 14
manglet). Manglende validering lot dette komme gjennom og feile stille på
en UNIQUE-constraint, oversatt til den misvisende DUPLICATE-meldingen.
Legger til eksplisitt 1-18-validering før lagring, med en ærlig feilkode/
-melding, i både teeoff- og GolfAPI-import-stiene og alle fire frontend-
kallstedene.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-21 17:11:41 +02:00
546900c2d6 Før endringer i turneringsoppsettet
Some checks failed
Backend-tester / test (push) Successful in 1m8s
Frontend-tester / test (push) Failing after 20s
2026-08-21 13:54:01 +02:00
9f81797324 Shotgun-start: frontend (individuell + Cup-format)
Løpende/Shotgun-veksler i rundens gruppeoppsett og øktoppsett, per-
gruppe/per-match starthull-felt i shotgun-modus. Fant og rettet en
reell bug underveis: begge skjermene hadde en hardkodet sequence-sort
som stille overstyrte backendens starthull-sortering for shotgun.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-21 08:59:54 +02:00
e940e932c1 Score-fanen: flytende knapp ved mange hindringer, hindringsrekkefølge, kartretning
- Flytende "Registrer score" trigges nå av faktisk synlighet til
  side-flyt-knappen, ikke av om banekartet er utvidet -- en lang
  hindringsliste alene (uten utvidet kart) kunne dytte knappen ut av
  syne uten at den flytende versjonen noensinne dukket opp.
- Hindringslisten sortert fra fjernest (øverst) til nærmest (nederst),
  matcher loddrett telefon-holdning med green øverst/utslag nederst.
  Bakkant brukt som sorteringsnøkkel der en finnes.
- Kartretning ved slagmåling følger nå ekte utslag->green-geometri
  (green opp/utslag ned) når begge er kjent, vinner over den eldre
  forrige-slag-gjetningen.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-21 08:05:14 +02:00
a0163eaa16 Ny runde-veiviseren: tre fikser (overleggsmeny, HCP-overstyring, statistikk-default)
- "Administrer runde"-dialogen lukker seg nå automatisk ved navigasjon
  til "Spillere og runde" (var stående åpen ved samme-rute-navigasjon).
- HCP kan nå overstyres for en kontokoblet medspiller fra første stund
  i veiviseren, ikke bare senere via "Runde og runde". Backend sitt
  add_participant æret aldri en eksplisitt overstyring for user_id,
  ulikt PATCH-endepunktet (ADR-038-avvik, nå rettet).
- Standard statistikknivå for en NY medspiller er nå "Kun slag" i
  stedet for å arve scoreførerens eget valg.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-21 08:05:05 +02:00
6603e94fd3 Sorterbare kolonner i Spillere-tabellen (turneringsoppsett)
Klikk header sykler stigende/synkende/opprinnelig rekkefølge for
Spiller/Hcp/Klasse/Statistikknivå/Status/Kjønn/Alder. Runde-kolonnene
og handlingskolonnen forblir usorterbare. V0-mønster integrert.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-21 08:04:57 +02:00
544c952cab Kaskader cut-resultatet til alle senere runder (ADR-095)
Overlevere auto-legges til runder etter cut (tee kopiert fra cut-runden),
kuttede spilleres rundedeltakelse fjernes -- med mindre de allerede har
scorer der, da beskyttes dataene av eksisterende cut-sperre i stedet.
Bruker bekreftet eksplisitt: kaskade til ALLE runder, ikke bare neste.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-21 08:04:53 +02:00
dbb589d9f6 Fiks scroll ved automatisk hull-fremgang (samme header-høyde-fiks som #142)
scrollToHolePanel() brukte samme flawed scroll-mt-28-mønster som
scrollToPlayerList() hadde i #142 -- byttet til samme getHeaderHeight()-
baserte manuelle scroll. Denne kalles fra BÅDE manuell Forrige/Neste OG
automatisk hull-fremgang etter siste spillers siste steg. Kunne IKKE
klikkes gjennom og verifiseres presist denne runden -- scratch-
nettleserøkten hard-reloadet uforklarlig på ethvert router.replace-kall,
også mot den ekte /my-rounds/[id]-ruta. Notert ærlig som et
verifiseringsgap i CHANGELOG.md #143, ikke skjult. Ikke rullet ut ennå.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-20 09:28:06 +02:00
116600cd3c Fiks scroll-til-spillerliste for godt: mål header-høyden live, ikke hardkodet
Presis scratch-måling avdekket at den hardkodede 112px-antagelsen (arvet
fra scroll-mt-28) var feil -- ekte headerhøyde var 141.5px for en runde
med bane+utslag+dato+klokkeslett samtidig, siden headeren pakkes til
flere linjer avhengig av innhold. Ny getHeaderHeight() måler live i
stedet for å gjette. scrollToPlayerList() erstatter scrollIntoView med
manuell beregning; playerListReached bruker samme terskel (delt
SCROLL_GAP_PX-konstant) -- måtte rettes en gang til underveis da de to
brukte ulike terskler. Se CHANGELOG.md #142. Ikke rullet ut ennå.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-20 08:57:22 +02:00
76b306cb29 Skjul flytende "Registrer score" når spillerlisten er nådd/passert
Ny playerListReached-tilstand skjuler den flytende knappen (og dens
spacer) fra #140 så snart spillerlisten når headerens høyde -- forblir
skjult resten av veien nedover, dukker opp igjen kun ved scroll tilbake
opp forbi listen. Første forsøk med IntersectionObserver+rootMargin var
feil (fyrer ikke på interne terskler mens allerede overlappende) -- byttet
til en scroll/resize-lytter med direkte getBoundingClientRect-sjekk. Se
CHANGELOG.md #141. Ikke rullet ut ennå.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-20 08:45:54 +02:00
ee31b2d00b Flytende "Registrer score" når banekartet er utvidet
V0-eksport integrert: RegisterScoreButton gjenbrukt i normal flyt
(kollapset) og som fixed bottom-pinnet knapp (utvidet), med gradient-
scrim, skygge, safe-area-inset-bottom, og aria-hidden/pointer-events-none
korrekt håndtert når skjult. Se CHANGELOG.md #140. Ikke rullet ut ennå.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-20 08:25:11 +02:00
7426984e67 Fiks "Registrer score"-hoppet: landet bak sticky headeren pga. for lav scroll-mt
playerListRef brukte scroll-mt-4, mens holePanelRef (samme sticky-header-
problem, hull-til-hull-navigasjon) allerede riktig bruker scroll-mt-28.
Samme verdi nå begge steder. Se CHANGELOG.md #139. Ikke rullet ut ennå.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-20 08:12:27 +02:00
c949259c77 Score-fanen: kutt hele main-toppaddingen, forrige reduksjon var for liten til å merkes
Bruker viste et nytt skjermbilde fra live etter forrige fiks -- ingen
synlig forskjell. pt-3/pt-4 kuttet bare 12px av en 44-52px kombinert
avstand, for lite til å merkes på en full mobilskjerm. main sin
toppadding er nå pt-0 -- eneste luft mot headeren er nå seksjonenes egne
mt-5/mb-5, samme rytme som resten av siden. Se CHANGELOG.md #136.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-20 08:00:47 +02:00
a52ff91ff1 Flytt "Mer" inn i navnereden, "Mål et slag" inn i "Mer" -- kun scorekortførers eget kort
V0-eksport integrert: PlayerCardMore utvidet med scoreButton/measureShot-
props, navnereden er nå en ikke-knapp wrapper med score-knappen og en
kompakt "Mer"-pille som søsken (unngår button-i-button). "Mål et slag" er
ikke lenger en egen rad -- ligger nå i "Mer"-panelet, og er (som
historikk) begrenset til player.isSelf; var tidligere synlig for alle
spilleres kort. Se CHANGELOG.md #138. Ikke rullet ut ennå.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-20 07:48:27 +02:00
f10121beaf Score-fanen: mindre luft under headeren + skjul passerte hindringer i avstandsmåleren
To brukerpåpekte funn: (1) unødvendig stort tomrom mellom RoundHeader og
hull-navigatoren når ingen varsel-banner vises -- main sin toppadding
stablet seg oppå seksjonens egen mt-5 i stedet for å erstatte den.
(2) hindringer skal kun vises når de fortsatt ligger mellom spiller og
green -- passerte hindringer var unødvendig støy. Se CHANGELOG.md
#136/#137 for detalj og verifisering. Punkt 2 ikke rullet ut ennå.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-20 07:26:29 +02:00
49530ffd40 Tone ned Historikk/Avslutt/Send scorekort bak "Mer" på spillerkortene (Score-fanen)
V0-eksport (etter Claude-skrevet prompt) integrert som ny PlayerCardMore-
wrapper -- eier kun vis/skjul, de ekte HoleHistoryPanel/
ParticipantCompletionActions sendes inn uendret. Kun PlayerHoleCards
(Score-fanen) berørt, ikke PlayerList (administrasjonsvisningen). Se
CHANGELOG.md #135 for full detalj og verifisering. Ikke rullet ut ennå.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-20 06:57:41 +02:00
2e4cb9733c Score-fanen: fjern Deg-badge, begrens historikk til eget kort, fiks kompakt hindrings-ikoner, fjern duplikat manage-knapp
Fire brukerpåpekte oppfølgingsfunn rett etter forrige runde (#133):
Deg-badgen på spillerkort er unødvendig, historikk-panelet viste seg
feilaktig på medspilleres kort, kompakt avstandsmåler falt tilbake til
en generisk varseltrekant i stedet for ekte hindrings-ikoner, og den
nye Spillere-og-runde-vekslen duplikerte RoundHeader sin Administrer-
knapp. Se CHANGELOG.md #134 for full detalj og verifisering.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-20 06:51:19 +02:00
05599aafe6 Fiks skjult score-registrering og doble Score-faner på rundens Score-fane
Avstandsmåleren fylte hele mobilskjermen uten å antyde at score-
registrering fantes lenger ned (funnet via brukers skjermbilde). Viser nå
kompakt som standard med en "Vis banekart"-utvidelse og en alltid synlig
"Registrer score"-snarvei. Den separate, duplikate "Score"-pillefanen inni
round-detail.tsx (visuelt identisk med RoundHeader sin egen Score/
Scorekort/Leaderboard-rad) er erstattet med én tydelig annerledes
veksle-knapp -- fikser samtidig et reelt navigasjonshull der det ikke
fantes noen vei tilbake til Score fra en ekstern "?tab=manage"-lenke.
2026-08-20 05:54:20 +02:00
724983fe03 Fiks utslagsvalg i spillertabellen: select forsvinner aldri lenger
Funnet via brukers skjermopptak av forsøk på å endre én spillers
utslag -- en ikke-tilordnet rad viste kun en død strek, ingen
interaktiv kontroll, og et feilklikk på den tette avkrysningsboksen
satt brukeren fast. Utslagsvelgeren vises nå alltid; å velge et
utslag tilordner raden automatisk. Boks og select har også fått
tydelig mer avstand for å redusere feilklikk.
2026-08-19 17:37:26 +02:00
7d5726cf4d Fiks utslag-endring/bulk-tilordning + kommuniser frosset HCP-snapshot tydeligere
To reelle bugs i rundedeltakelse: enkelt-rad utslagsendring sendte feil
ID-type til backend (traff alltid 404, stille), og "Velg alle" hoppet
over allerede-tilordnede deltakere slik at et valgt standardutslag
aldri slo inn for dem. Begge rettet. I tillegg: ny hjelpetekst i
Spillere-steget og et nytt FAQ-spørsmål forklarer at turnering-HCP er
en bevisst frosset kopi av spillerpoolen (ADR-090), ikke en bug.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-19 10:27:25 +02:00
95b05ab7f5 Bytt spillerpool-tabellens zebra-stripe fra grønntonet token til nøytral grå
bg-muted er grønntonet i denne paletten (klubbhus-fargene) -- brukeren
presiserte "Lyse GRÅ striper, ikke lyse grønne". Løst med translucent
svart/hvitt-overlegg (bærer ingen fargetone) i stedet for en fargtonet
token, fungerer automatisk riktig i begge temaer.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-19 10:04:36 +02:00
48f238d158 Fiks HCP-komma app-bredt, utdatert deltakertabell, zebra-striper i spillerpool
HCP: type="number" blokkerte komma-tegnet i nettleseren før JS-parsingen
noensinne så det; byttet til text+inputMode=decimal og lagt til manglende
.replace(",",".") i tre lagre-stier. Deltakertabell: "Rediger i
spillerpoolen" er en full sidenavigasjon, bfcache kunne gjenopprette
turneringssiden i utdatert tilstand -- løst med stille bakgrunns-refresh
ved visibilitychange/pageshow. Spillerpool: zebra-striper lagt tilbake
oppå rutenett-stilen fra forrige runde.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-19 09:50:56 +02:00
7632f53702 Rutenett-stil for spillerpool-tabellen, ingen sidescroll på bred skjerm (tillegg til ADR-094)
EditTable (player-import-view.tsx) får samme grid-stil som
spillertabellen, med individuell kolonnebredde per felt slik at alle
13 spillerpool-felt får plass uten sidescroll. mode.kind==="roster"-
grenen bevart ved manuell fletting siden V0-eksporten var en eldre
snapshot uten den varianten.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-19 09:35:37 +02:00
072638dc37 Gjør spillertabellen mer regneark-aktig, fyll full bredde (tillegg til ADR-094)
Bruker sammenlignet med et regneark og påpekte unødvendig sidescroll
på bred skjerm -- tettet opp med rutenett-stil og en colgroup som lar
rundekolonnene fylle resten av bredden. Samme props-kontrakt.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-19 08:37:15 +02:00
5355aba75d Ekte i18n (next-intl) + hjelpeside/FAQ + Spillere-tabellen slått videre sammen (ADR-094)
Grunnmur for oversettelse (cookie-basert, ingen URL-endring), ny
/hjelp-side med oversikt+FAQ på norsk og engelsk, og Deltakere+
Rundedeltakelse slått sammen til én bred tabell i Spillere-steget.
Resten av appens ~2200 strenger og 479 backend-feilkoder er bevisst
utsatt til senere, avgrensede runder -- se FEATURE_BACKLOG.md.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-19 07:54:07 +02:00
5daf2a764a Rundedeltakelse som bulk-tabell i Spillere-steget (ADR-093)
Oppfølger til ADR-092: fant og fikset misvisende "alle er gruppert"-
tekst i Utslagsgrupper-panelet (viste seg egentlig å bety "ingen
deltakere i runden ennå"). Egentlig årsak: å tilordne en deltaker til
en runde var kun mulig ett om gangen, gjemt bak et rundekort. Ny
bulk-tabell i "Spillere" (V0-generert) med sjekkbokser per runde,
kjønn/alder/utslagssted redigerbart samme sted. Nytt PATCH-endepunkt
for å endre utslagssted uten å miste gruppemedlemskap.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-19 06:21:58 +02:00
1867c65143 Turneringsoppsett som steg-wizard (ADR-092)
Oppsett-fanen var én lang stablet side med alle kort etter hverandre.
Omgjort til 6 klikkbare steg med fri navigasjon, strukturelt inspirert
av Golf GameBooks steg-navigasjon (ikke visuelt -- egne clubhouse-
tokens). Grupper og startliste er det eneste genuint nye steget,
løfter Utslagsgrupper ut av å være gjemt inni hver enkelt runde.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-18 20:18:47 +02:00
396fe40b7c Manuell deltakerstatus (DSQ/RTD/DNF/DNS) + spillerpool-kobling (ADR-091)
Ny status-kolonne på tournament_participant, overstyrer leaderboardets
total og blokkerer score i alle runder. Ny direkte lenke fra
turneringens Deltakere-liste til riktig rad i org-spillerpoolen.
Migrasjon 087 lagt til, men IKKE anvendt mot ekte teecup_db ennå.
2026-08-18 18:06:49 +02:00
50e0ba902b Forklar Cut sitt "Antall som går videre"-felt med inline hjelpetekst
Bruker spurte hva feltet betyr -- oppførselen (topp N og delt plass) var
allerede riktig, bare uforklart der blikket lander.
2026-08-18 17:38:56 +02:00
0c864f0705 Omspill-tiebreak for vinneren + direkte HCP-retting per deltaker (ADR-090)
'playoff' som ny tiebreak_winner_method-verdi -- rangeres som 'none'
(appen kan ikke avgjøre et omspill selv), men regelen vises proaktivt i
Oppsett og som banner på leaderboardet. HCP: la til handicap_index_
snapshot i TournamentParticipantUpdate + inline redigering i
Deltakere-lista, uten å røre allerede frosne runde-verdier. Migrasjon
086 lagt til, men IKKE anvendt mot ekte teecup_db ennå.
2026-08-18 17:29:59 +02:00
c5ab6a18f2 Integrer TournamentSettingsCard (V0-eksport) i Oppsett-fanen
Navn/datoer/synlighet/beskrivelse/påmelding -- rent innbytte mot
props-kontrakten. Fant og fikset samme tidssone-bugklasse som ADR-088
proaktivt denne gangen (mønstergjenkjenning) før den nådde en nettleser.
2026-08-18 17:00:44 +02:00
300cb8aeaf Tiebreak ved likt resultat: countback eller laveste HCP (ADR-089)
Organisator velger metode fritt i Oppsett, uavhengig for vinner og
resten av feltet. Countback er kaskaderende siste 9->6->3->1 hull i
siste runde. Påvirker aldri Cut-grensen -- strukturelt håndhevet, ikke
bare avtalt ved konvensjon. Migrasjon 085 lagt til, men IKKE anvendt mot
ekte teecup_db ennå -- venter på bekreftelse.
2026-08-18 16:29:10 +02:00
9a9fcc84c0 Utslagsgrupper for individuelle turneringer: hvem spiller med hvem (ADR-088)
Tradisjonelt utslag (samme starthull, staggerte klokkeslett med fast
intervall), manuell gruppesammensetning med et forslag å justere, fast
gruppestørrelse. Fire ekte bugs funnet og fikset før utrulling via egen
scratch-verifisering (FK-korrupsjon, str/datetime-mismatch, tidssone,
React state). Migrasjon 084 lagt til, men IKKE anvendt mot ekte
teecup_db ennå -- venter på bekreftelse.
2026-08-18 15:43:39 +02:00
19c527f834 Cut i individuelle turneringer: topp N og delt plass (ADR-087)
Manuelt anvendt (organisator trykker "Anvend cut"), etter et valgt
rundenummer. Kuttede spillere blokkeres fra scoring i senere runder og
vises i egen seksjon på leaderboardet. Migrasjon 083 lagt til, men IKKE
anvendt mot ekte teecup_db ennå -- venter på bekreftelse.
2026-08-18 15:07:21 +02:00
accf5efd41 Spør organisator om merge/overskriv/dobbel ved e-postløs spillerimport
create_players_bulk matchet kun på e-post -- rader uten e-post ble alltid
satt inn på nytt selv om en identisk spiller allerede fantes (ni ekte
dubletter funnet i produksjon). Bulk-endepunktet tar nå et eksplisitt
match_player_id/duplicate_action per rad; frontend oppdager mulige
duplikater (navnetreff, ingen e-post) og spør organisator eksplisitt før
lagring, i stedet for å gjette.
2026-08-18 14:44:42 +02:00
54795065ef Nøytral "ikke startet"-rad + tee-tid/starthull i leaderboardet
Deltakere som ikke har spilt noe ennå fikk feilaktig totalLabel "E"/"0 p"
(til forveksling likt en ekte, jevn score) og en tallfestet sisteplass.
Vises nå nøytralt: total/posisjon null/None, og runde-nivåets tee-tid/
starthull (hvis satt) i stedet for score-cellen.
2026-08-18 14:23:03 +02:00
985dada178 V0-redesign av StrokePlayLeaderboard integrert
Rent innbytte -- identisk props-kontrakt. Løser bredde/autoscroll-bugene
fra forrige runde mer robust (ekte ResizeObserver-måling i stedet for en
brytningspunkt-antakelse), autostarter rulling for ubetjent
kiosk-visning, og legger til dempet visning for WD/DQ/DNS/NR/CUT-rader.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-18 13:49:12 +02:00
eeb7e9fb29 Leaderboard: fyller full bredde + autoscroll fungerer på storskjerm
StrokePlayLeaderboard var bygget for å skalere opp på lg:-brytningspunkt,
men satt inni en delt max-w-4xl-wrapper som aldri lot den. Samme
brytningspunkt fjernet skrolle-taket helt, så autoscroll-tickeren fikk
aldri noe å bevege for et stort felt. Begge rettet -- ren visuell polish
kommer i en oppfølgende V0-redesign av samme komponent.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-18 13:18:04 +02:00
207750acba Slett en hel turnering, permanent (ADR-086)
Nytt DELETE /orgs/{id}/tournaments/{id}, kun org-eier/admin. Eksplisitt
riktig-rekkefølge-sletting (ikke naiv kaskade) siden to RESTRICT-FK-er
sitter midt inni kaskade-grafen for begge turneringsformater -- verifisert
med fire nye backend-tester mot ekte populerte data. Søppelbøtte-ikon i
begge turnering-headerne med sterk confirm()-tekst.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-18 12:59:37 +02:00