Del C (ADR-068, migrasjon 072, siste del av den tredelte utvidelsen som
startet med Flaggturnering GPS/kart, se ADR-066/067): nytt format
eclectic_gross/eclectic_net/eclectic_stableford -- beste resultat per
hull på tvers av en turnerings egne runder, krever samme bane (avvist
tydelig ved rundeopprettelse ellers). Regnes ut ved lesing, ingen nye
tabeller. Bevisst avvik fra opprinnelig plan: integrert som en ny gren
i eksisterende individual-leaderboard-endepunkt fremfor et nytt eget
endepunkt -- se ADR-068 for begrunnelsen.
Tre ikke-relaterte, brukerrapporterte UI-rettelser tatt med i samme
runde: avstandsindikatoren brukte "grønn"/"Midt" i stedet for riktige
golf-uttrykk "green"/"senter", og "Oppdateres live"-badgen fjernet.
"Antall hull"-bryteren i Ny runde-veiviseren fikk samme grønne
aksent-valgt-stil som resten av samme skjerm (delt Segmented-primitiv).
Se ARCHITECTURE_DECISIONS.md (ADR-068) og CHANGELOG.md (punkt 84) for
full begrunnelse og verifiseringslogg.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Del A (ADR-066, migrasjon 069/070, allerede rullet ut mot teecup_db):
"Plant flagget" via GPS, med en interaktiv "Hullet du ut?"-bekreftelse
før posisjonen registreres, pluss full runde 2+-scoreføring for
spillere som fullfører 18 hull med slag igjen. Ny, isolert overflow-
tabell (rører ikke delt round_hole/tournament_round_hole). Bygget for
både frittstående runder og org-individuelle turneringer. UI-sheeten
er en Claude-skrevet V0-eksport (zip 11).
Del B (ADR-067, migrasjon 071, klar for utrulling): av/på-bryter
(standard AV) for en satellittkartoversikt over ALLE deltakeres
plantede flagg, lap 1 skilt fra lap 2+ med farge+tekstbadge. Frittstående
runder får full tilskuerstøtte (/watch/[id]); org-individuelle
turneringer er bevisst avgrenset til medlemmer/deltakere, siden ingen
offentlig spectator-side finnes for det turneringsformatet ennå.
Se ARCHITECTURE_DECISIONS.md (ADR-066/067) og CHANGELOG.md (punkt 82/83)
for full begrunnelse og verifiseringslogg.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Full gjennomgang av hele filen (4457 linjer) etter brukerspørsmål om
alt arbeid faktisk var dokumentert. Internasjonale baner, individuelle
turneringer sin rulle-ut, PWA-ikon, push-varsler, dashboard-forslaget
og Flaggturnering sin GPS-kobling var alle markert "ikke bygget" selv
om de er levert og live — hver rettet med et eksplisitt
RETTELSE-avsnitt, historikken beholdt uendret under. Ren
dokumentasjonsendring, ingen kode rørt.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Bygget om fra en enkel slag/netto-liste til samme Ut/Inn-blokk-oppsett
med fargede score-merker, fairway/GIR/innspill-glyffer og total-tiles
som selve appens Scorekort-side, etter to runder brukerfeedback
(først "all statistikk", deretter et skjermbilde av ønsket visuell
match). Fant og fikset underveis at round.played_at kun er en dato
(ikke klokkeslett) og en relatert type-bug i spilletid-utregningen.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Player.completed lagt til, delt ParticipantCompletionActions-komponent
i både Score-fanens PlayerHoleCards og "Spillere og runde"-fanens
PlayerList. allHolesEnteredForEveryone og ScoringWizard-samlebåndet
tar nå hensyn til individuelt fullførte spillere.
Nettleserverifisert lys+mørk mot ekte teecup.golf (test-runde slettet
etterpå). tsc/vitest rent.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Backend (ADR-065): round_participant.completed_at (migrasjon 066),
flight-styrt PATCH-tilgang, scorekort-e-post til gjest/lenket bruker
ved individuell fullføring og ved rundefullføring, samt et nytt
on-demand send-scorecard-endepunkt som virker uansett fullføringsstatus.
Frontend-UI kommer i egen runde.
Nye baner Larvik (Seasidebanen) og Nesbyen (manuelt GPS-registrert,
124 punkter) importert til produksjon. Fant og fikset en reell
GolfAPI-datakvalitetsbug underveis: tomme strenger i stedet for
null/fraværende på course rating/slope for begge kjønn (migrasjon
067/068, defensiv parsing + import-endepunkter).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Brukerrapport om høyt batteriforbruk. To justeringer i
hole-target-distance.tsx: maximumAge 1000ms -> 4000ms (umerkelig ved
gangfart, sjeldnere GPS-fix), og watchPosition pauses helt når
fanen/appen ikke er synlig (document.visibilitychange), gjenopptas
automatisk. enableHighAccuracy uendret -- lav nøyaktighet ville gjort
front/midt/bak-tallene meningsløse.
Verifisert i nettleser: clearWatch bekreftet kalt ved backgrounding,
watchPosition bekreftet kalt på nytt ved retur, ingen konsollfeil.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Brukeren viste et skjermbilde fra ekte produksjon: indikatoren satt i
scoreførings-veiviseren (feil øyeblikk -- åpnes ETTER hullet er
spilt), skulle vært i hoved-hull-visningen (PlayerHoleCards, rett
under hull-navigatoren) med mer bredde enn kompaktvarianten.
HoleTargetDistance sin egen rad-wrapper fjernet -- kalleren styrer nå
plassering/bredde. Verifisert på nytt i scratch (lys+mørk, ingen
konsollfeil) og rullet ut.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Søk-og-koble-UI-en for GolfAPI (ADR-064) var kun koblet inn i "endre
bane"-skjemaet, ikke i /my-rounds/new (components/ny-runde/) -- den
faktiske primære inngangen. Lagt til der (international-search-
delstilstand + InternationalSearch-komponent).
Fant og fikset en reell 500-feil under verifisering: GET
/personal-courses/{personal_course_id} var registrert før den nye,
mer spesifikke GET /personal-courses/international-search -- FastAPI
matcher ruter i registreringsrekkefølge, så den generiske ruten fanget
"international-search" som en ugyldig UUID. Flyttet de nye
endepunktene foran.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Ny tredje banekilde (ADR-064) for baner utenfor TeeOffs dekning: delt
GolfAPI-cache (migrasjon 065), import til både org-turneringer og
frittstående runder, target-points-endepunkt, og en rangefinder-
visning i scorekortet (V0-generert target-distance.tsx + hånd-koblet
GPS/Haversine-wrapper). Fant og fikset at TEECUP_GOLFAPI_TOKEN aldri
ble videreført til teecup_api-containeren i docker-compose.yml.
I samme runde: y-akse-benevnelser og verdi i begge ender på
statistikk-trendgrafene (rounds-stats-summary.tsx).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Oppdaterer status fra "sendt som V0-prompt, ikke bygget" til
selv-implementert (bruker gikk tom for V0-credits) og
scratch-verifisert i nettleser.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Migrasjon 064 (round_message_tag/round_message_comment_tag), nytt
GET /rounds/{id}/taggable-people-endepunkt, validering (kun faktiske
relasjoner er taggbare, ugyldige tags forkastes stille), varsling ved
gyldig tag. Se ADR-063/CHANGELOG punkt 72. 8 nye pytest-tester, 31/31
grønt. Frontend (autocomplete + rendering) sendes som eget V0-prompt --
ikke deployet ennå, migrasjon venter til frontend-delen er klar.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Fire rettet direkte (reelle logikkfeil/tekstvalg): round-card.tsx sin
"Hull"-celle viste alltid planlagt antall, aldri faktisk spilt for
tidlig avsluttede runder; putt-avstand-etiketter gjort konsekvente
("X-Ym" i stedet for blandet "<Xm ... 8m+"); "Se feed" presisert til
"Se venneaktivitet"; @-tagging av medspillere vurdert og bevisst utsatt.
Fire sendt via V0 (reelt interaksjonsdesign), diffet mot live-treet før
integrering: ny-runde steg 2 sin rekkefølge (Antall hull/Avanserte HCP
flyttet før formatrutenettet), "detaljer"-steget delt i seksjoner med
et nytt scroll-hint, Anywayslag unifisert til samme +/--mønster som
Chip/Bunker/Straffeslag, netto par-markør + egen Putter-aksent.
Se ADR-062/CHANGELOG punkt 71 for full detalj. tsc rent, full
scratch-stack browserverifisert (lys+mørk, mobil viewport) før
utrulling.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Fortsetter robusthetslinjen: frontend-tester var eksplisitt utenfor
omfang i ADR-058/060. 30 nye tester: lib/geo.ts (GPS-avstand/retning,
fasit-forankret), lib/offline-queue.ts (regresjonsvern for
resourceKey-fiksen fra forrige runde), lib/ny-runde/formats.ts
(fullstendighetssjekk på tvers av format-listene). Egen, lettvekts
Forgejo Actions-workflow (ingen Docker-utenfor-Docker nødvendig).
To reelle funn underveis: prosjektet bruker pnpm ikke npm (et første
forsøk med npm feilet, ingen skade); pnpm-workspace.yaml var arvet-
ignorert fra V0-malen men har nå reelt CI-relevant innhold
(allowBuilds: sharp), rettet før det kunne feile CI stille. Se
ADR-061/CHANGELOG punkt 70.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Fortsetter robusthetslinjen fra ADR-057: hole_score/match_hole_result
(scoring.py) hadde ingen samtidighetsvern, ren siste-skriving-vinner --
den siste dokumenterte, kjente svakheten fra den opprinnelige
"harde kjerner"-vurderingen. Samme version-kolonne-mønster, tilpasset
UPSERT (INSERT ... ON CONFLICT DO UPDATE ... WHERE) i stedet for ren
UPDATE. Offline-kø-kjedingen generalisert til å nøkle på ressurs
(resourceKey), ikke bare URL -- nødvendig siden disse to endepunktene
deler samme URL for alle hull i en match. Se ADR-060/CHANGELOG punkt 69.
23/23 backend-tester grønne, tsc rent. Migrasjon 063 kjørt mot ekte
teecup_db, teecup_api/teecup_frontend rebygget, ingen konsollfeil.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Empirisk push viste at repoet ikke hadde noen aktiv runner (jobb ble
stående som "Waiting"). Satt opp act_runner lokalt på serveren
(Docker-utenfor-Docker, docker.sock automount) siden
run_backend_tests.sh er avhengig av teeoff_db/teeoff_default som kun
finnes her. Kjører nå som egen tjeneste i docker-compose.yml. Se
ADR-059 og CHANGELOG punkt 68.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Svarer på det største enkeltfunnet i investor-statusrapporten (nesten
ingen automatisert testdekning utenfor HCP-motoren). 17 nye
integrasjonstester mot en automatisk opprettet/migrert/nedrevet
scratch-database (scripts/run_backend_tests.sh), som kaller de faktiske
router-/auth-funksjonene direkte -- ikke en SQL-gjenimplementering. Se
ADR-058 og CHANGELOG punkt 67 for full detalj.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
1. WHS Rule 3.1b — ferdig, testet (117/117), rullet ut... nei, venter fortsatt (se under).
2. round.tee_name_snapshot-synk — ferdig, scratch-verifisert.
3. Optimistisk versjonssjekk for samtidig hull-redigering — ferdig bygget, og jeg fant og rettet en reell UX-bug underveis (en fullskjerm-feilvisning i stedet for en liten banner) som ellers ville gjort funksjonen verre enn ingenting.
Alt er dokumentert i ADR-056/057 og CHANGELOG punkt 65–66.
Deploy — rekkefølgen har betydning (migrasjonen må kjøre først, siden ny kode leser version-kolonnen):
# 1. Migrasjon mot ekte teecup_db
docker exec teeoff_db psql -U teeoff_admin -d teecup_db -f /opt/teecup/062_round_hole_version.sql
# 2. Backend
docker compose build teecup_api
docker compose up -d teecup_api
# 3. Frontend
docker compose build teecup_frontend
docker compose up -d teecup_frontend
Og fortsatt uavklart fra tidligere: datakorreksjonen for din spesifikke runde
UPDATE round SET tee_name_snapshot = '55'
WHERE id = '520f9681-6e7f-49bf-8504-9ab223874285';
Kontoen til Fredrik Mathisen (fødselsdato under 13 år, ingen tilknyttet aktivitet) er slettet fra ekte teecup_db, og e-posten med forklaring ble sendt til fredrik.f.mathisen@gmail.com før slettingen ble bekreftet fullført.
PWA-installasjonstekst — skiller nå Safari/Chrome på iOS, ikke lenger feilaktig Safari-only.
Beskrivelsestekst — "golfklubber" fjernet, nytt punkt om at turneringsadmin/-presentasjon fungerer godt på PC.
Dette krever både teecup_api og teecup_frontend (ingen migrasjon).
Velger du kart, vises utslagspunktet som en fast oransje referansemarkør, og kartet zoomer/panorerer automatisk slik at både din posisjon og utslagspunktet er synlige med det samme. Du trykker der ballen ligger — markøren blir grønn for å skille den fra referansen.
Punkt 39-45: dashbord+BottomNav-reskin, ny-runde-veiviser + offisiell-
banesøk-produksjonsbug, /logg-inn som ekte innloggingsside, rundedeling-
kategoriregel-fiks (ADR-036 E), og slag-for-slag-avstandsmåling
inngangspunkt 1. Se de fem foregående commitene for koden.
Kommandoer jeg vil kjøre mot ekte teecup_db/teecup_api/teecup_frontend:
psql migrasjon 058_round_messages.sql mot ekte teecup_db (ny round_message-tabell, ingen endring i eksisterende tabeller).
docker compose up -d --build teecup_api teecup_frontend (begge containere, siden dette er backend+frontend sammen).
Etterpå: bekreft round_message-tabellen finnes, /health//my-rounds/new//my-feed → 200 over https, teeoff.no upåvirket.
Fullført:
TeeCup-beskrivelse for logo — levert tidligere.
Migrasjon 056 (scramble_solo) — kjørt og live.
Matchspill-varianten (scramble_solo_match, migrasjon 057) — bygget, verifisert, live.
Kritisk bug funnet og rettet: lagspillere kunne ikke registrere score i det hele tatt for scramble_solo-formatene (evig spinner, ingen feilmelding) — var allerede live og ødelagt for ekte lagspillere. Rettet for begge varianter, rullet ut.
"Bruk som mal for egen bane" — vises nå kun i "Opprett ny bane"-flyten (ny lenke "Basér på en eksisterende bane i stedet"), ikke i det vanlige søket.
Alt er rullet ut live på teecup.golf, verifisert i nettleser mot isolerte scratch-miljøer (ryddet opp etterpå), og dokumentert i CHANGELOG.md (punkt 22–24) og FEATURE_BACKLOG.md.
Modalen ("Administrer runde", tilgjengelig fra alle tre rundefanene) hadde en
egen, uavhengig "Fullfør runde"-vei som aldri sjekket setup_complete og
lukket dialogen umiddelbart uten å vente på fetch-svaret -- så en ufullstendig
formatoppsett (f.eks. Københavner med for få spillere) så ut til å fullføres,
men gjorde det aldri, uten noen feilmelding. Backend-valideringen var korrekt
fra før; kun frontend fulgte aldri opp svaret.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Ny funksjon (ADR-043, migrasjon 055): organisatorer kan opprette en
Order of Merit, lenke individuelle turneringer til den, og få en
sesong-sammenlagt rangering regnet ut ved lesing -- fem resultattyper
(poeng etter plassering, Stableford-, brutto- og nettoscore-sum,
pengeliste), sum/snitt-aggregering, med valgfri behold-N-beste,
minimum antall resultater og aldersgrense. Motor i handicap_engine.py
(9 nye enhetstester), ny app/routers/order_of_merit.py, og to nye
håndkodede frontend-sider under /organizations/[id]/order-of-merit.
Eclectic-aggregering og lag-OOM sin faktiske resultatberegning er
bevisst ikke bygget denne runden (skjema/CRUD for lag finnes, men
leaderboardet avviser kind='team' med en tydelig feilmelding).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Klasser vises nå etter bane-/rundeoppsett (var meningsløst å velge
standardutslag før banen fantes). TeeOff-import koblet inn i
individuelle turneringer. Ny mal-basert baneoppretting i
turneringsmodulen (fra bunnen av / TeeOff / offentlig custom-bane),
med personal_course gjenbrukt som et delt, plattform-omfattende
bane-bibliotek på tvers av org- og single-runde-modulen (ADR-042,
migrasjon 054).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Fullfører dokumentasjonen for den nye slagspill-resultattavlen (POS/
PLAYER/TODAY/THRU/TOTAL/R1-Rn), rullet ut 2026-08-04: V0-integrering
(zip 29), Golfscore-språk-fiksen for rundekolonnenes eksakt-par-tilfelle,
og den reelle til-par-rangeringsbugen funnet og rettet under
scratch-verifisering.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Fullfører dokumentasjonen for klasse-funksjonen (migrasjon 053, rullet
ut 2026-08-04): ny ADR-041 med de fire load-bærende beslutningene
(fritt navngitte klasser, delt tabell mellom turneringstyper,
standardutslag som frontend-bekvemmelighet, egen resultatliste kun i
individuelle turneringer), pluss fulle bygge-/verifiseringsoppføringer
i CHANGELOG.md og FEATURE_BACKLOG.md.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Backend for dette (hero_image_key, sponsor-CRUD, visibility/description/
registrering) har vært klart og live siden ADR-018 (2026-07-18), men ingen
organisator-skjerm satte noensinne disse feltene - alt var 100% API-only.
Ny tournament-presentation.tsx dekker begge turneringstyper (delt
tournament-tabell, ikke format_type-spesifikt): full side for
lagturneringer (ny rute), embeddet som fjerde fane for individuelle
turneringer. Lagt til i alle fire eksisterende nav-rader.
To små backend-tillegg uten migrasjon: hero_image_url/logo_url som
beregnede felt (samme mønster som avatar_url), og en DELETE-endepunkt for
hero-bilde (fantes fra før kun opplasting).
Fant og rettet en ekte mobil-layoutbug under scratch-verifisering:
sponsor-raden klemte navnet til nesten ingenting på 390px viewport -
samme klasse trunkeringsdefekt som leaderboard-omskrivingen tidligere
denne uken, men på et annet sted.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Begge filer påstod at frontend for de åtte nye turneringsformatene
(Chapman/Nassau/Kobenhavner/BBB/Flag/Shamble/Money Ball/High-low-high)
fortsatt manglet. Bekreftet direkte mot koden at dette er feil - frontend
for formatvalg og resultatvisninger finnes i alle tre hjem (frittstående
runder, org-lag, org-individuell), bygget i sesjonene mellom 2026-07-30
og 2026-08-02, bare aldri dokumentert som ferdig. Lagt til rettelser
(ikke slettet historikk) i begge filer, med konkrete filhenvisninger.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Brukeren testet en Slagspill-runde etter forrige leaderboard-utrulling og
så ingen visuell endring - forrige runde hadde gjenbrukt gamle håndkodede
komponenter for individuell/to-sidet visning i stedet for å implementere
V0s tegning fullt ut. Skrev om round-leaderboard.tsx fra bunnen mot V0s
faktiske komponenter, portet manuelt mot ekte API-data. Fant og rettet fem
reelle bugs underveis (courseHcp-matte, manglende hcpIndex, ødelagt
TeamFlightBoard-pille, CSS-trunkering i SideName, feil kildetekst for
matchoverskrift).
Fikset også: "Spillere og runde"-snarveien som ikke virket fra Score-fanen
(useEffect manglet på searchParams-endring), play-format-bryteren i
Rediger runde-panelet utvidet fra 3 til 16 formater, 8 nye statistikkrader
i scorekortet (Fairway/Putt/GIR/Innspill/Chip/Bunker/Straffeslag/Anyway).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>