Update Todos

Diagnostisere HCP-bug mot ekte data (gjort)

Fiks 1: filtrer valgte spillere bort fra listen (blind draw)

Fiks 3: tallvelger for slagregistrering (scorekort)

Fiks 4: hardkode full_18-scope i handicap-utregning (bekreftet bug)

Punkt 2: migrasjon 014 + kode (courses.py, handicap.py, matches.py, tournaments.py, frontend)

Scratch-verifisere punkt 2 (fletting, import, validering, remap)

Skrive ADR-029 + oppdatere FEATURE_BACKLOG.md

Rulle ut mot ekte teecup_db + containere, oppdatere .md-status

Notere PDF-ressursene i CLAUDE.md/FEATURE_BACKLOG.md + minne
Alt er rullet ut og verifisert:

Migrasjon 014 kjørt mot ekte teecup_db: Tjømes 8 tee-rader slått sammen til 4 fysiske utslag, alle ratinger og match_participant-referanser intakte (bekreftet med en direkte spørring — 0 brutte referanser).
Begge containere redeployet (teecup_api, teecup_frontend), boot-et rent, /health/dashboard → 200, teeoff.no upåvirket.
Alle fire tilbakemeldingene dine er dermed løst og live.

PDF-ene er notert i CLAUDE.md sin "Autoritative kilder"-seksjon (leses nå ved starten av hver økt) og i FEATURE_BACKLOG.md sitt punkt om de fire nye turneringsformatene, siden det er der de trolig blir mest relevante først. Jeg la også inn en tilsvarende referanse i min egen tvers-av-økt-hukommelse, slik at jeg husker å lese dem selv i en fremstidig, separat samtale om dette prosjektet.
This commit is contained in:
Erol Haagenrud 2026-07-20 09:06:25 +02:00
parent 52e0cfaaf9
commit a5de225afe
4 changed files with 51 additions and 23 deletions

View file

@ -325,7 +325,8 @@
"Bash(python3 -c \"import httpx\")", "Bash(python3 -c \"import httpx\")",
"Bash(curl -s http://localhost:18800/health)", "Bash(curl -s http://localhost:18800/health)",
"Bash(python3 /tmp/claude-1000/-opt-teecup/a8bd2fc3-4b9c-4682-a2be-cf36e143de78/scratchpad/test_hcp_fix.py)", "Bash(python3 /tmp/claude-1000/-opt-teecup/a8bd2fc3-4b9c-4682-a2be-cf36e143de78/scratchpad/test_hcp_fix.py)",
"Bash(python3 /tmp/claude-1000/-opt-teecup/a8bd2fc3-4b9c-4682-a2be-cf36e143de78/scratchpad/test_tee_gender.py)" "Bash(python3 /tmp/claude-1000/-opt-teecup/a8bd2fc3-4b9c-4682-a2be-cf36e143de78/scratchpad/test_tee_gender.py)",
"Bash(curl -s -o /dev/null -w \"%{http_code}\\\\n\" https://teeoff.no)"
], ],
"additionalDirectories": [ "additionalDirectories": [
"/opt/teeoff/deploy", "/opt/teeoff/deploy",

View file

@ -1396,12 +1396,13 @@ rader. (6) `_remap_course`: bane-bytte til en bane UTEN matchende
kjønnsrating avvist tydelig, bane-bytte til en bane MED matchende kjønnsrating avvist tydelig, bane-bytte til en bane MED matchende
rating lykket. rating lykket.
**Status: ✅ BYGGET OG SCRATCH-VERIFISERT 2026-07-19, IKKE ENNÅ RULLET UT** **Status: ✅ BYGGET OG LIVE 2026-07-19.** Migrasjon 014 kjørt mot ekte
mot ekte `teecup_db` -- migrasjon 014 endrer ekte produksjonsdata `teecup_db`, bruker bekreftet eksplisitt: Tjømes 8 tee-rader slått sammen
(Tjøme-utslagene slås faktisk sammen), venter derfor på eksplisitt til 4 fysiske utslag, alle 8 `tee_rating`-rader fikk riktig `gender`,
brukerbekreftelse før den kjøres mot den ekte databasen, i tråd med `match_participant`-referansene forble gyldige (0 brutte fremmednøkler
CLAUDE.md sin regel om å alltid vise planen og vente på bekreftelse før etter migrasjonen, bekreftet med en direkte spørring). Begge containere
noe som migrerer ekte data kjøres. (`teecup_api`, `teecup_frontend`) bygget og redeployet, `/health`/
`/dashboard` → 200, `teeoff.no` upåvirket.
--- ---

View file

@ -3,10 +3,22 @@
Les dette først i hver økt. Det koder hva vi har bestemt og hvordan vi jobber. Les dette først i hver økt. Det koder hva vi har bestemt og hvordan vi jobber.
## Autoritative kilder (les før du gjør noe) ## Autoritative kilder (les før du gjør noe)
- `ARCHITECTURE_DECISIONS.md` — hva som er bestemt og hvorfor (ADR-001…018). Fasit. - `ARCHITECTURE_DECISIONS.md` — hva som er bestemt og hvorfor (ADR-001…029). Fasit.
- `FEATURE_BACKLOG.md` — hva som gjenstår, hva som er utsatt, hva som mangler. - `FEATURE_BACKLOG.md` — hva som gjenstår, hva som er utsatt, hva som mangler.
- Endres en beslutning: legg til en ny ADR, ikke slett historikk. Hold begge - Endres en beslutning: legg til en ny ADR, ikke slett historikk. Hold begge
filene oppdatert når noe avgjøres. filene oppdatert når noe avgjøres.
- **Regelverk for HCP/slagfordeling — tre PDF-er lastet opp av brukeren til
prosjektroten 2026-07-19** (ikke innsjekket i git, kun lokale filer på
serveren): `spilletyper-og-spilleformer-2023.pdf`,
`Live Tourney _ A Guide to Handicap Scoring in Golf for Tournaments.pdf`,
`SCGA Club Digest.pdf`. Brukeren: disse tre gir til sammen en tydelig
beskrivelse av hvordan HCP og mottatte/tildelte slag skal beregnes/
fordeles. Les disse FØR videre arbeid med `handicap_engine.py`,
`app/handicap.py`, allowance-strategier (ADR-005/014) eller
slagfordeling (ADR-008) — spesielt relevant for de fire
turneringsformatene som ennå ikke er designet (Københavner/High-low-high/
Robbins/Try all, se FEATURE_BACKLOG.md), siden disse dokumentene trolig
dekker akkurat de reglene som trengs der.
## Sikkerhetsregler (ufravikelige) ## Sikkerhetsregler (ufravikelige)
- Rør ALDRI `teeoff`-databasen eller den ekte `teecup_db` uten at brukeren - Rør ALDRI `teeoff`-databasen eller den ekte `teecup_db` uten at brukeren
@ -1832,8 +1844,9 @@ Ferdig og verifisert:
container (`python:3.12-slim`, `app/` og `handicap_engine.py` montert container (`python:3.12-slim`, `app/` og `handicap_engine.py` montert
read-only), alt ryddet opp etter verifisering. Typesjekket read-only), alt ryddet opp etter verifisering. Typesjekket
produksjonsbuild kjørt for frontend-fiksene (1+3), alle 16 ruter listet. produksjonsbuild kjørt for frontend-fiksene (1+3), alle 16 ruter listet.
**Ikke rullet ut ennå** — venter på utrullingsbekreftelse. Punkt 2 **Rullet ut live 2026-07-19**, bruker bekreftet eksplisitt, se eget
(tee/kjønn-modellen) venter på designavklaring med bruker før noe bygges. punkt lenger ned for punkt 2 (som ble bygget og rullet ut sammen med
disse tre i én utrulling).
- **Punkt 2 (tee/kjønn) BYGGET OG SCRATCH-VERIFISERT (2026-07-19, ADR-029), - **Punkt 2 (tee/kjønn) BYGGET OG SCRATCH-VERIFISERT (2026-07-19, ADR-029),
samme dag, rett etter designavklaringen:** bruker bekreftet begge samme dag, rett etter designavklaringen:** bruker bekreftet begge
@ -1886,10 +1899,13 @@ Ferdig og verifisert:
avvist tydelig, bane-bytte til en bane MED matchende rating lykket. avvist tydelig, bane-bytte til en bane MED matchende rating lykket.
Ekte typesjekket produksjonsbuild av frontend kjørt på nytt og Ekte typesjekket produksjonsbuild av frontend kjørt på nytt og
bekreftet etter blind draw-forenklingen. bekreftet etter blind draw-forenklingen.
**Ikke rullet ut ennå** — migrasjon 014 endrer EKTE produksjonsdata **Rullet ut live 2026-07-19**, bruker bekreftet eksplisitt: migrasjon
(slår sammen Tjømes 8 tee-rader til 4), venter derfor på eksplisitt 014 kjørt mot ekte `teecup_db` FØRST (Tjømes 8 tee-rader slått sammen
brukerbekreftelse før den kjøres mot ekte `teecup_db`, sammen med de til 4 — bekreftet 0 brutte `match_participant.tee_id`-referanser
tre andre fiksene (1/3/4) i samme utrulling. etterpå med en direkte spørring), deretter `docker compose up -d
--build teecup_api teecup_frontend` sammen med punkt 1/3/4 i samme
utrulling. Begge containere boot-et rent, `/health`/`dashboard` → 200,
`teeoff.no` upåvirket.
Neste steg: Neste steg:
1. **Oppfølgingspunkt fra PWA-runden, eksplisitt notert på brukerens 1. **Oppfølgingspunkt fra PWA-runden, eksplisitt notert på brukerens
@ -1902,10 +1918,8 @@ Neste steg:
Rewrite/medlemsside-bugen (#2) er den mest presserende siden siden er Rewrite/medlemsside-bugen (#2) er den mest presserende siden siden er
helt utilgjengelig i dag. helt utilgjengelig i dag.
3. **Alle fire nye hull (spillerliste, tee/kjønn-modell ADR-029, 3. **Alle fire nye hull (spillerliste, tee/kjønn-modell ADR-029,
tallvelger, hcp-scope-bug) er FIKSET OG SCRATCH-VERIFISERT** (se over) tallvelger, hcp-scope-bug) er FIKSET OG LIVE** (se over, 2026-07-19,
— venter på utrullingsbekreftelse. Punkt 2 KREVER en ekte migrasjon migrasjon 014 kjørt mot ekte data). En liten, urelatert 500-krasj
(`014_tee_gender_to_rating.sql`, endrer Tjømes tee-data) i tillegg til
kode-redeploy av begge containere. En liten, urelatert 500-krasj
(stroke-innsending på bane uten hull) ble også funnet under (stroke-innsending på bane uten hull) ble også funnet under
verifiseringen, ikke fikset — egen, liten sak. verifiseringen, ikke fikset — egen, liten sak.
4. Fortsatt åpne beslutninger fra FEATURE_BACKLOG.md: kode-regenerering for 4. Fortsatt åpne beslutninger fra FEATURE_BACKLOG.md: kode-regenerering for

View file

@ -551,6 +551,13 @@
(lavest kostnad) hvis en rask seier er ønskelig, eller med «Københavner» (lavest kostnad) hvis en rask seier er ønskelig, eller med «Københavner»
hvis en bredere individuell/felt-basert turneringstype uansett skal bygges hvis en bredere individuell/felt-basert turneringstype uansett skal bygges
først som fundament for de andre. først som fundament for de andre.
- **Ressurs, lagt til 2026-07-19:** brukeren har lastet opp tre PDF-er til
prosjektroten (`spilletyper-og-spilleformer-2023.pdf`, `Live Tourney _ A
Guide to Handicap Scoring in Golf for Tournaments.pdf`, `SCGA Club
Digest.pdf`) som til sammen skal gi en tydelig beskrivelse av hvordan HCP
og mottatte/tildelte slag beregnes/fordeles — les disse FØR design av
handicap-/slagfordelingslogikken for disse fire formatene, se CLAUDE.md
sin "Autoritative kilder"-seksjon.
--- ---
@ -824,8 +831,7 @@ en reell skjemamigrasjon (`014_tee_gender_to_rating.sql`).
Fikset: `roster`-listen FILTRERES nå ned til kun ledige spillere før Fikset: `roster`-listen FILTRERES nå ned til kun ledige spillere før
den rendres, i stedet for å deaktivere valget. den rendres, i stedet for å deaktivere valget.
2. **✅ FIKSET OG SCRATCH-VERIFISERT 2026-07-19 (ADR-029), IKKE ENNÅ RULLET 2. **✅ FIKSET OG LIVE 2026-07-19 (ADR-029).** Brukeren presiserte at min opprinnelige forståelse
UT mot ekte data.** Brukeren presiserte at min opprinnelige forståelse
var feil: en golfbane har IKKE fysisk kjønnsdelte utslag — begge kjønn var feil: en golfbane har IKKE fysisk kjønnsdelte utslag — begge kjønn
kan som regel spille fra ethvert utslag. Det eneste som faktisk kan som regel spille fra ethvert utslag. Det eneste som faktisk
varierer per kjønn er om klubben har VALGT å slope (rate) et gitt varierer per kjønn er om klubben har VALGT å slope (rate) et gitt
@ -895,9 +901,15 @@ en reell skjemamigrasjon (`014_tee_gender_to_rating.sql`).
**Designspørsmålene for punkt 2 er avklart** (bruker valgte det anbefalte **Designspørsmålene for punkt 2 er avklart** (bruker valgte det anbefalte
alternativet på begge, se ADR-029 Beslutning B/C): helautomatisk tee-valg alternativet på begge, se ADR-029 Beslutning B/C): helautomatisk tee-valg
(ingen manuell kjønnsvelger), og "feil høyt" ved manglende kjønn/rating (ingen manuell kjønnsvelger), og "feil høyt" ved manglende kjønn/rating
(ingen stille fallback). Migrasjon 014 er skrevet og scratch-verifisert, (ingen stille fallback). Migrasjon 014 kjørt mot ekte `teecup_db`
men IKKE kjørt mot ekte `teecup_db` ennå — venter på eksplisitt 2026-07-19, bruker bekreftet eksplisitt — Tjømes 8 tee-rader slått sammen
brukerbekreftelse (endrer ekte Tjøme-data: slår sammen 8 tee-rader til 4). til 4, alle referanser intakte.
**Alle fire punkter rullet ut live 2026-07-19**, bruker bekreftet
eksplisitt: migrasjon 014 + `docker compose up -d --build teecup_api
teecup_frontend`. Verifisert: `/health`/`dashboard` → 200, `teeoff.no`
upåvirket, 0 brutte `match_participant.tee_id`-referanser etter
sammenslåingen.
--- ---