Dokumenter slagmåling-produksjonsbugfiksen i CHANGELOG.md

Punkt 49. Se forrige commit for koden.
This commit is contained in:
Erol Haagenrud 2026-08-08 15:06:59 +02:00
parent 8da2423942
commit d0167b3882

View file

@ -9285,3 +9285,50 @@ Neste steg:
Med dette er ADR-048 (slag-for-slag GPS-avstandsmåling) fullt bygget,
verifisert og live -- begge inngangspunkt, begge hull-eiertyper,
begge Mapbox-token-veier (kart-valg + delings-satellittbilde).
49. **PRODUKSJONSBUG: slagmåling ga alltid 0 meter, delinger forsvant
stille — 2026-08-08, brukerrapport rett etter punkt 48s utrulling.**
Brukeren: "den målte aldri mer enn 0 meter. Jeg så ingen bilder."
**Rotårsak 1 (selve 0-meter-buggen):** `shot-measurement-sheet.tsx`
sitt "end"-steg (ballens posisjon) avfyrte GPS-målingen AUTOMATISK i
et `useEffect` idet steget ble aktivt -- rett etter at startpunktet
var målt, med null tid for brukeren til faktisk å gå fra utslagsstedet
til ballen. Start- og sluttpunkt endte dermed på praktisk talt samme
sted, samme øyeblikk -- avstanden ble alltid ~0m, uavhengig av hvor
langt slaget faktisk var. Rettet ved å fjerne auto-avfyringen og
kreve et eksplisitt "Jeg er ved ballen nå"-trykk (samme mønster som
"Prøv igjen" ved feil, nå gjenbrukt for begge) -- brukeren går fysisk
til ballen FØR målingen skjer, i stedet for at appen antar de allerede
er der.
**Rotårsak 2 (stille tap, "ingen bilder"):** en konsekvens av
rotårsak 1 -- en 0m-avstand ble avvist av backendens
`distance_meters > 0`-validering (422), men `submitShot()` i
`round-detail.tsx` sin `ShotMeasurementEntry` gjorde da bare
`setOpen(false)` og returnerte -- INGEN feilmelding, arket lukket seg
stille som om alt var i orden. Brukeren fikk aldri vite at slaget
(og dermed en eventuell deling) aldri ble lagret. Rettet: `submitShot`
setter nå en `submitError`-state (parser backendens feilrespons,
som kan være enten appens vanlige `{detail:{message}}`-form ELLER
FastAPI/Pydantic sin rå valideringsform `{detail:[{msg,...}]}` --
bekreftet eksakt hvilken av de to ved å faktisk trigge en 422 mot
scratch-API-et: det er listeformen), viser feilen i arket
(`role="alert"`, ny `submitError`/`submitting`-prop på
`ShotMeasurementSheetProps`), og holder arket ÅPENT ved feil i stedet
for å anta suksess og lukke.
`tsc --noEmit` rent. **Scratch-verifisert i ekte nettleser** (nittende
scratch-miljø denne økten, samme migrasjon-002-forsiktighet,
`teecup_db` bekreftet uendret): CDP-automatiserte nettlesersesjoner
har `geolocation`-tillatelse permanent `denied` i dette miljøet (samme
begrensning som punkt 45-46), så `navigator.geolocation.
getCurrentPosition` ble midlertidig overstyrt via `evaluate_script`
for å drive den EKTE React-komponentens fulle flyt (ikke bare et
API-nivå-kall) -- bekreftet "Jeg er ved ballen nå"-knappen faktisk
vises i stedet for å auto-måle, at et ekte gap mellom start-/
sluttkoordinat ga "MÅLT LENGDE: 130 m" (ikke 0), at delingen faktisk
postet riktig tekst til `/rounds/{id}/messages`, OG (motsatt test,
identisk start-/sluttkoordinat) at en avvist 0m-innsending nå viser
feilmeldingen i arket i stedet for å lukke seg stille. Scratch-miljøet
ryddet opp fullstendig.