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å.
'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å.
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.
name/start_date/end_date manglet helt fra TournamentUpdate. Påmeldings-/
synlighetsfeltene var allerede fullt fungerende på backend (ekte
selvregistrerings-logikk), men uten UI noe sted -- V0-prompt skrevet for
en ny TournamentSettingsCard, ikke bygget ennå.
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.
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.
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.
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.
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.
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>
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>
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>
Ny /organizations/[id]/players-rute gjenbruker spillerimport-tabellen
(ADR-082) uendret, men med ny orkestrering: laster eksisterende
spillere og lagrer med ekte PATCH per endret felt, ikke det
fyll-tomme-felt-eneste bulk-importendepunktet (som aldri overskriver
et allerede satt navn/HCP -- ubrukelig for reell redigering).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Massimport av spillere (ADR-082), kontosammenslåing del 2 (ADR-080) og
avstandsmåling/rangefinder-tråden (ADR-048/064/065/081/083/084) er alle
ferdig bygget og live, men filen sa fortsatt "påbegynt"/"ikke designet"
for dem. Oppdaget ved gjennomgang av backlogen på brukerens forespørsel.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
currentHole levde kun i React-state, seedet fra round.start_hole ved
hver mount -- en refresh mistet valget og hoppet alltid tilbake til
starthullet. Fikset med samme URL-parameter-mønster tab-valget
allerede bruker: ny setHoleAndUrl() holder state og ?hole=N i sync
via router.replace (ikke push, for å unngå å fylle historikken med
ett tilbake-steg per hull).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Fant en andre, atskilt kopi av Tjømes koordinatdata (den org-tilknyttede
"official" banen brukt av turneringer/lag-matchplay) som forrige rundes
reimport ikke traff. Samme datasett satt inn der også -- ren datafiks,
ingen kodeendring.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Hindringslisten manglet eksplisitt nærmest-spilleren-først-sortering --
fikset. Kryssjekk mot kildedata avdekket 12 kjente side_fairway-feil,
løst via full reimport av Tjømes 194 koordinatpunkter fra et nytt,
standardisert CSV-format (kjørt separat mot ekte teecup_db, ikke del
av denne commiten). To nye hindringstyper (fairway/stone_fence) med
egne ikoner.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Siste klassifiserte hindringstype uten eget ikon. Ren frontend-endring
-- road fantes allerede som domeneverdi og ekte data, bare usynlig i
diagrammet inntil nå.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Ny migrasjon 081 legger til creek i det delte course_poi_type-domenet.
Kobler inn brukerens nye bekk-ikon i diagrammet og reklassifiserer de
8 kjente Tjøme-bekk-punktene (hull 2/3/11/12) fra water til creek,
identifisert via samme koordinat-regneark som ga hazard_group-dataen
i forrige runde.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Ett-ikon-overlapp-fiks i midtbanen (green-ikonet manglet reservert
plass), bak-green-rendering (hindringer bak selve greenen vises nå over
green-ikonet i stedet for klemt inn i vanlig-sonen), fem nye
hindringsikoner, og en omskrevet liste (én rad per hindring, med
bane/posisjon-info).
Setter i tillegg ekte hazard_group-verdier på Tjømes koordinatdata,
utledet fra klubbens eget koordinat-regneark (som viste seg å ha en
egen gruppenummer-kolonne) i stedet for en heuristikk -- løser
definitivt de flerbunker-hullene forrige runde bevisst lot stå
uklassifisert.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Migrasjon 080 kjørt mot ekte teecup_db og teecup_api/teecup_frontend
redeployet, begge med brukerens eksplisitte bekreftelse i samme økt.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Erstatter ADR-083 sin kontinuerlige crossMeters-forskyvning, som ga for
liten synlig venstre/høyre-forskjell på ekte banedata (Tjøme hull 18).
Baner velges nå kategorisk via side_fairway; green/tee/spiller alltid
på senterakse. Ny hazard_group-kolonne (migrasjon 080, ikke rullet ut
mot ekte DB ennå) lar to punkter eksplisitt pares til én carry-hindring
(forkant+bakkant) uten å risikere å slå sammen to atskilte hindringer
på samme side.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
docker compose build/up teecup_frontend 2026-08-17 etter bekreftelse
fra bruker, ingen migrasjon.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Integrerer V0-eksporten for hole-diagram-view.tsx. Traff props-
kontrakten i prompten eksakt -- ingen integreringsjustering nødvendig,
tsc rent på første forsøk. Egne tillegg fra V0 utover prompten: full
aria-label-oppsummering av hele diagrammet for skjermlesere, lett
kollisjons-unngåelse for nære hindringsetiketter.
Re-verifisert i scratch mot samme kjente syntetiske geometri som den
midlertidige hånd-kodede versjonen -- identiske tall/posisjoner.
Lys+mørk bekreftet.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Fikser to ting rapportert fra ekte produksjonsskjermbilde: (1) kun
nærmeste hindring ble vist -- target-distance.tsx viser nå ALLE
hindringer, sortert nærmest først, uavhengig av om et diagram kan
tegnes. (2) Nytt hull-diagram (hole-diagram-view.tsx) plasserer
hindringer og spiller i 2D langs en fast tee->green-akse, tee nederst/
green øverst konsistent uansett gangretning.
Ny geometri-modul frontend/lib/hole-geometry.ts (projectOntoAxis,
bygget på eksisterende haversineMeters/bearingDegrees) med 10
enhetstester som beviser matematikken riktig før noe visuelt ble
bygget. Verifisert i scratch mot presist kjente syntetiske koordinater
-- alle tall og posisjoner stemte eksakt med håndregnede fasitverdier.
Midlertidig hånd-kodet visning, venter på V0-eksport for den polerte
versjonen (samme mønster som FlagPlantSheet/PlayerImportPanel). Ingen
migrasjon, ingen backend-endring.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
docker compose build/up 2026-08-17 etter bekreftelse fra bruker, ingen
migrasjon. Oppdaterer "Rullet ut: ikke ennå"-placeholderne.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Integrerer V0-eksporten (tee-cup-login-screen.zip) for spillerimport-
panelet. Splittet i player-import-view.tsx (V0, ren kontrollert visning)
+ player-import-panel.tsx (orkestrering, uendret ekstern kontrakt) --
samme mønster som FlagPlantSheet.
Fant og fikset en reell integreringsfeil i scratch: V0s kjønn-nedtrekk
bruker female/male/other, rå CSV-tekst ("m"/"f") ble kopiert inn
uendret og ville stille mistet data ved lagring -- fikset med egen
verdinormalisering ved kolonnetilknytningen. æøå-kolonnegjetting-
begrensningen fra forrige commit fikset samtidig.
Ny STÅENDE regel lagt til CLAUDE.md underveis: turneringsoppsett
designes stor skjerm først (organisatoren sitter foran en PC), ikke
mobil-først -- V0-prompten oppdatert og kjørt på nytt med dette kravet
før eksporten som integreres her.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Organisatoren sitter som regel foran en PC ved oppsett (lag/tropper/
spillerimport/runder/klasser), ikke på mobil på banen -- gjelder kun
oppsett-/administrasjonsskjermer, ikke spillerens skjermer under selve
rundens gang (scorekort/rangefinder/leaderboard), som forblir mobil-
først. Samme STÅENDE ufravikelig-mønster som tilgjengelighets- og
navneformat-reglene over.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Ny POST /orgs/{id}/players/bulk (samme e-post-match-dedup-mønster som
selvregistreringens ADR-017 Beslutning B, utvidet til alle felt).
CSV parses klient-side (papaparse), enkel kolonnegjetting, redigerbar
forhåndsvisning før lagring. Dekker både lagturneringer (lagtildeling)
og individuelle turneringer (klassetilknytning) i samme flyt -- begge
steg samlet (org-pool + turneringspåmelding).
Midlertidig hånd-kodet UI (player-import-panel.tsx) bygget for å bevise
hele kjeden ende-til-ende -- venter på V0-eksport for den polerte
visningen før samlet utrulling, samme rekkefølge som FlagPlantSheet.
5 nye backend-tester (111/111 totalt), tsc rent, 45/45 vitest, full
scratch-verifisert i begge turneringsformater.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Tre nye seksjoner: (1) sammenligning av NGF sitt offisielle
spilleform-dokument mot faktisk bygde formater, med konkret gap-liste,
(2) plan-skisse for en manuell koordinat-editor (gjenbruker MapPointPicker
+ eksisterende PUT-endepunkt fra ADR-081), (3) spiller-CSV-import
markert påbegynt.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Migrasjon 079 kjørt og teecup_api/teecup_frontend rullet ut 2026-08-17
etter bekreftelse fra bruker. Tjømes offisielle bane fylt med de 180
feltbefarte koordinatene fra forrige runde.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Rangefinder-funksjonalitet fantes til nå kun for GolfAPI-importerte
personlige baner. Offisielle teeoff-koblede baner (org-turneringer OG
frittstående runder spilt på en ekte teeoff-bane) hadde aldri noen
koordinatkilde. Ny migrasjon 079: delte domener (course_poi_type/
location/side) for å unngå duplisert CHECK-vedlikehold på tvers av
tabeller, ny global tabell teeoff_course_coordinate.
Ny delt modul app/target_points.py + resolve_match_course_key() i
hole_history.py (tredje søster til de to eksisterende bane-bro-
funksjonene) -- alle tre kallesteder (frittstående runder, individuell
org-turnering, lag-matchplay) bruker nå samme CourseKey-abstraksjon.
rounds.py sitt eksisterende endepunkt refaktorert til samme mønster --
sideeffekt: frittstående runder på en ekte teeoff-bane får nå også
rangefinder (var alltid tom liste før).
Ny skrive-vei i courses.py (PUT/GET .../coordinates) -- generell,
gjenbrukbar mulighet for å legge inn koordinater på enhver offisiell
bane, ikke en engangsfiks. HoleTargetDistance generalisert (roundId ->
baseUrl) og wiret inn i begge org-turnering-scoringsflytene.
11 nye tester (106/106 backend totalt), full scratch-verifisert
ende-til-ende i nettleser i alle tre flyter inkl. lys/mørk og
selvskjuling, regresjonssjekk av eksisterende GolfAPI-rangefinder
bekreftet uendret oppførsel.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Bruker lastet opp mer presise, feltbefarte koordinater for Tjøme
Golfklubb (180 punkter) til erstatning for GolfAPI.io sin automatiske
cache (167 punkter). Ny poi_type "landmark" (samme mønster som
rock/layup i migrasjon 067) for en fysisk bjelle uten annen match.
Kun tredjeparts-cache i teecup_db berørt, ingen kodeendring.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Migrasjon 077 kjørt og teecup_api/teecup_frontend rullet ut 2026-08-17
etter bekreftelse fra bruker. Oppdaterer "Rullet ut: ikke ennå"-
placeholderne fra forrige commit.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Selvbetjent sammenslåing av to TeeCup-kontoer: keeper (initiativtaker)
ber om sammenslåing, bekreftelseslenke sendt til taperens e-post beviser
eierskap, taperens data (org-medlemskap/spillerkoblinger/runder/venner)
flyttes over og taperens konto slettes. Ny migrasjon 077 (account_merge_
token, ikke kjørt mot ekte teecup_db ennå), ny app/account_merge.py
(N+1-transaksjoner per RLS-grensen, fullt konfliktkart), nye endepunkter
i app/routers/account_merge.py, ny frontend-seksjon i kontoinnstillinger
+ egen bekreftelsesside.
Fant og fikset en reell RLS-relatert bug via testsuiten før produksjon:
seks RLS-beskyttede tabeller var feilaktig plassert i den globale
"trygt å re-peke"-løkken, forårsaket et krasj pga. en Postgres GUC-kvirk
på pooled forbindelser. Se ADR-080 for full begrunnelse.
12 nye tester (95/95 backend totalt), full scratch-verifisert
ende-til-ende inkl. lys/mørk, ekte teecup_db urørt.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Begge sto merket som gjenstående/ikke bygget, men er ferdig og live:
Order of Merit sine tre gjenstår-punkter (ADR-074/075/076) og per-hull-
historikk (ADR-072, utvidet ADR-079).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Historikk-panelet flyttet ut av selve slagvinduet/-arket i begge flyter:
inn i PlayerHoleCards-kortet (frittstående runder), som nytt "overview"-
steg med auto-hopp når tomt (org-turneringer). Klikk åpner nå en ny delt
full-historikk-skjerm (hole-history-detail.tsx) med aggregerte tall og en
score-fordeling som fargede stolper -- samme CategoryBar-mønster som
round-stats.tsx, ingen ny graf-avhengighet. Ingen backend-endring.
tsc + 45/45 vitest, scratch-verifisert i begge flyter inkl. kombinert
historikk på tvers av runde-/turneringstyper og auto-hopp for hull uten
historikk (lys+mørk). Rullet ut.
Med dette er alle tre forbedringene i score-registreringen (ADR-077/078/079)
fullført.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Splittet ScoringWizard sitt "details"-steg i "direction"/"holeDetails",
og bygget om HoleStatsSheet (org-turneringer) fra én lang skjerm til
tilsvarende steg-flyt -- samme opplevelse i begge scoringsflyter, uten å
røre HoleStatsSheet sin egen (bevisst annerledes) lagringsmodell.
Visuell polering via V0: de fire tellerne fikk et 2x2-rutenett av
flis-kort i stedet for en 1-kolonne-stabel. Stepper-komponenten er delt
mellom begge flyter, så endringen gjelder automatisk begge steder.
tsc + 45/45 vitest, scratch-verifisert i begge flyter (lys+mørk). Rullet ut.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Kontekst-raden i ScoringWizard (alle spillerne, aktiv fremhevet) var
bevisst ikke-interaktiv ved bygging. Trygt å gjøre interaktiv nå: hvert
felt lagres allerede for seg med en gang (PATCH per felt), så bytte
spiller midt i et steg gir ingen datatap. Løser at man måtte fullføre
hele samlebånd-flyten for å rette opp en tidligere spillers feil.
tsc + 45/45 vitest, scratch-verifisert i nettleser (lys+mørk). Rullet ut.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>