Punkt 3 i scoring-paritet-gap-listen: GET /rounds/stats/summary leste
tidligere kun frittstående runder. Ny _fetch_tournament_stats_rows()
speiler hole_history.py sin N+1-per-org-henting og blander resultatet
inn i samme by_round/stat_level_by_round/played_at_by_round-dict-er som
personlige rader -- ingen endring i selve aggregeringslogikken
(_resolve_stats_window/_build_round_series/_summarize_rounds er allerede
generiske). Kilde-antall vises separat i UI (samme presedens som
hole_history.py sin times_personal/times_tournament).
5 nye pytest-tester + full regresjon (193/193), tsc rent, full-stack
scratch-verifisert.
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>
Brukeren påpekte (med rette) at det glidende 3-runde-snittet i "Utvikling"
bare gjentok stolpediagrammet med én runde forsinkelse -- for få punkter
til at det smoothet noe reelt. Foreslo tre alternativer via
AskUserQuestion (lineær regresjon / eksponentielt glidende snitt /
kumulativt løpende snitt); brukeren valgte lineær regresjon.
Lineær regresjon (minste kvadraters metode) gir en rett linje --
stigningstallet leses direkte som "endring per runde" og vises nå i
bildeteksten (f.eks. "+7 pp per runde"). Visuelt en helt annen form enn
stolpene (rett strek vs. hakkete stolper), som løser selve klagen.
Bruker ba samtidig om trend på ALLE variabler, ikke bare snitt til par.
Lagt til stolpe+trend for: Fairwaytreff, Greentreff (GIR), Putt/18,
Én-putt, Chip/runde, Bunkerslag/runde, Straffeslag/runde, Anywayslag/
runde -- hver plassert i det eksisterende kortet for akkurat den
metrikken. Scrambling/sand save er unntaket (brukervalg via
AskUserQuestion): for få kvalifiserte hull per runde (0-2) til at et
per-runde-tall er meningsfullt, vises i stedet som én kumulativ linje
("raten din til og med hver runde"), ingen stolper.
Backend: RoundStatsSummary sitt gamle round_series-felt (kun snitt til
par) erstattet av et nytt round_series på RoundStatsWindowSummary-nivå,
med per-runde-tall for alle variabler pluss kumulativ scrambling/sand
save. Fanget og rettet en enhets-bug selv under scratch-verifisering:
scrambling/sand save ble først bygget som 0-1-brøker (kopiert fra en
boolsk 1.0/0.0-sjekk) i stedet for samme 0-100-skala som resten av
API-et -- rettet før commit.
Verifisert: tsc --noEmit rent, 45/45 vitest, 31/31 backend-tester. Full
scratch-stack med åtte syntetiske runder (bevisst støyende fremgang, for
å faktisk se at regresjonslinjen skiller seg fra stolpene) browser-
verifisert lys+mørk: regresjonslinje bekreftet rett og visuelt distinkt
fra stolpene på alle variabler, riktig fortegn/farge på stigningstall,
ingen dobbel enhet i bildetekstene, kumulative linjer for scrambling/
sand save konvergerer som forventet. Ingen konsollfeil. teecup_db urørt.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Tre brukertilbakemeldinger etter gjennomgang av statistikksidene:
1. round-stats.tsx: trekkspillseksjonene starter nå ekspandert (reverserer
en tidligere beslutning fra 2026-07-25 om å vise dem sammenslått).
2. Dashbordets "HCP nå" viser nå computed_handicap_index ("spilt til"-HCP,
beregnet fra faktiske runder) i stedet for det manuelt satte tallet i
profilen -- historikk-sparklinen filtreres til samme kilde (source=
"computed"), så den ikke lenger blander manuelle og beregnede punkter.
3. /my-rounds/stats:
- Alle "vs. forrige periode"-deltaer (pil+tall+pp) er nå synlig
selvforklarende -- teksten fantes tidligere kun som skjermleser-tekst,
seende brukere så bare et ikon og et tall uten kontekst.
- Greentreff (GIR) og Innspill splittet i to kort (GIR er en beregnet
andel, Innspill er en retningsbeskrivelse -- samme prinsipp som
round-stats.tsx sin eksisterende splitt). Utslag flyttet først.
Redning og "Til par: med vs. uten" flyttet ned under Annet.
- Ny stolpegraf med glidende snitt-trendlinje (snitt til par per runde,
eldste til venstre) -- tidligere bevisst utsatt pga. for lite
rundehistorikk (se CHANGELOG 2026-07-28), bygget nå. Backend:
RoundStatsSummary fikk et nytt round_series-felt (kronologisk
snitt-til-par per runde i valgt vindu).
Verifisert: tsc --noEmit rent, 45/45 vitest, 31/31 backend-tester (inkl.
det nye round_series-feltet via en scratch-DB-kjøring). Full scratch-
stack med seks syntetiske runder (varierende dato/resultat) browser-
verifisert lys+mørk: HCP-bytte bekreftet (computed 5,3 vist i stedet for
manuelt satt 15,0), ny kortrekkefølge, splittet GIR/Innspill, synlige
delta-bildetekster, graf med trendlinje. Ingen konsollfeil. teecup_db
urørt.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Dashbordets egne JSX re-stylet til --clubhouse-*/--tee*/--cup*-tokens
(V0, egen parallell utforskning ved siden av Forest Green) -- delte
komponenter som RoundCard/TournamentCard urørt. Den gamle, lokale
BottomTabBar erstattet med components/teecup/bottom-nav.tsx (egen
V0-prompt, usePathname()-drevet aktiv-fane), koblet inn på alle syv
sider som viser den. To reelle bugs funnet og rettet under
scratch-verifisering: aktiv-fane-sammenligning som feilaktig strippet
#hash (ga to samtidig aktive faner), og manglende fane-gruppering for
my-friends/my-feed/my-notifications (løst med en matchPaths-mekanisme).
Se CHANGELOG.md punkt 39-40 for full verifiseringsdetalj.
Hullet lukket: hele WHS-HCP-motoren fantes og var testet, men ble aldri kalt — score_differential ble lagret per runde, men ingen indeks ble noensinne regnet ut. Nå har du:
To atskilte tall: manuelt satt HCP (uendret bruk) og et nytt, automatisk beregnet «faktisk HCP» (beste 8-av-≤20 nyeste tellende runder, WHS Rule 5.2, med Low-HCP-cap).
«Bruk som mitt HCP»-knapp på /account for å eksplisitt overføre.
Eksklusjon per deltaker — hver innlogget spiller (ikke bare eieren) styrer selv om egen deltakelse skal telle, uansett fullført-status.
Selvdeklarert spilleform (slagspill/matchspill) — matchspill forhåndsforeslår (ikke tvinger) eksklusjon, begrunnet i WHS sin «most likely score»-regel som TeeCup ikke kan garantere presist.
Verifisert med 111/111 scratch-sjekker (inkl. håndregnet WHS-matte) og en ekte nettleser-gjennomgang av hele flyten. Migrasjon 030 kjørt mot ekte teecup_db, begge containere redeployet, alt grønt, teeoff.no upåvirket.
Gjenstår (dokumentert i CLAUDE.md/FEATURE_BACKLOG.md, ikke bygget nå): offline-kø for frittstående runder, Stableford, rundedeling/visibility, flere flighter i én runde.
GIR question answered, not a gap: score − putts ≤ par − 2 is already the general formula, already ported to the new endpoint — it's not case-by-case, it works for every combination. The one real limit: it needs putts, so strokes_only rounds can't get a reliable GIR (score alone almost never proves it — a chipped-in birdie and a real GIR+1-putt look identical).
Miss direction — added fairway left/right and green long/short/left/right as pooled distribution bars on the aggregate stats page, using the same fields the per-round page already tracks.
Time-window picker — Siste runde / 5 / 10 / Denne måneden / I år / Siste år / Alltid, filters the whole page.
"vs. forrige periode" deltas — added, per your ask. One rule for every window type: "previous" = the same length (rounds or days) immediately before the current window's start, so there's no special-casing per calendar type. Colored by direction (green = improvement, orange = worse) except on the miss-direction numbers, which have no "better" side.
Verified with standalone logic tests against hand-computed scenarios, a full app import check, a clean typecheck, and live in the browser (clicked through windows, confirmed real numbers and a correct empty-previous case since your account only has 2 completed rounds so far).
"Kommende runder" → "Runder" on the dashboard.
Tjøme course-name duplicate fixed in the real database (one round's stale course_name_snapshot corrected) — all three of your rounds now group under one "Tjøme Golfklubb" entry.
Two new colors, per your request for two: lifted the already-validated --chart-3 (blue → --info) and --chart-4 (gold → --gold) into core design tokens. First real uses: a blue "Hcp spilt til X" badge on round cards, and a gold "Personlig rekord" badge on your best completed round.
Clicking a course under "Spilte baner" now opens a new page listing every round played there (/my-rounds/course/[name]) — caught and fixed a real double-encoding bug here via an actual browser screenshot before shipping.
Aggregated statistics, clickable from the dashboard's "Statistikk" section (/my-rounds/stats): rounds completed, avg to-par, putts/18 holes (implementing your padding rule exactly — unplayed holes count as 2 putts, only for rounds where putt-tracking was on), fairway%, GIR%, one-putt%, scrambling%, sand save%, and chip/bunker/penalty/anywayslag averages per round.
Everything is typechecked, the putts-padding logic is verified against a hand-computed synthetic dataset, and all new screens were checked live in the browser with no console errors.