Update Todos
Diagnostisere de to feilmeldingene fra skjermbildene Flytte frontend-sidene fra /rounds/* til /my-rounds/* (kollisjon med API-proxyen) Oppdatere alle interne lenker/router-kall til nye stier Oppdatere next.config.mjs-kommentaren med denne lærdommen Typesjekket produksjonsbuild Rulle ut live etter bekreftelse Oppdatere statusdokumentasjon Ferdig og live. Oppsummert: Begge feilmeldingene skyldtes samme rot-årsak: /rounds var både frontend-sidens sti og backend-APIets ressursprefiks. Next.js sin rewrite-presedens ga to motsatte feil samtidig — listesiden/opprett-runde-kallet nådde aldri backend (fikk Next sin egen HTML tilbake i stedet for JSON), mens selve rundedetalj-siden var fullstendig uoppnåelig i motsatt retning. Fikset ved å flytte alle tre frontend-rutene til /my-rounds/*, uendret API på /rounds. Bekreftet med curl mot ekte produksjon både før og etter — nå fungerer alt som det skal. Det andre skjermbildets «55/50/44/32» var forøvrig ikke en bug, bare Tjøme Golfklubb sine ekte utslagsnavn i teeoff. Alt rullet ut, teeoff.no upåvirket, status dokumentert i CLAUDE.md/FEATURE_BACKLOG.md/ADR-033.
This commit is contained in:
parent
6e688c6440
commit
29a6b90127
4 changed files with 84 additions and 1 deletions
|
|
@ -367,7 +367,10 @@
|
||||||
"Bash(curl -s -D - https://teecup.teeoff.no/rounds -o /tmp/rounds_get.out)",
|
"Bash(curl -s -D - https://teecup.teeoff.no/rounds -o /tmp/rounds_get.out)",
|
||||||
"Bash(curl -s -D - https://teecup.teeoff.no/rounds/00000000-0000-0000-0000-000000000000 -o /tmp/rounds_id_get.out)",
|
"Bash(curl -s -D - https://teecup.teeoff.no/rounds/00000000-0000-0000-0000-000000000000 -o /tmp/rounds_id_get.out)",
|
||||||
"Bash(grep -n '\"/rounds\\\\|`/rounds\\\\|href=\"/rounds\\\\|href={`/rounds' components/own-rounds.tsx components/new-round.tsx components/round-detail.tsx components/round-card.tsx components/dashboard.tsx app/page.tsx)",
|
"Bash(grep -n '\"/rounds\\\\|`/rounds\\\\|href=\"/rounds\\\\|href={`/rounds' components/own-rounds.tsx components/new-round.tsx components/round-detail.tsx components/round-card.tsx components/dashboard.tsx app/page.tsx)",
|
||||||
"Bash(grep -n '\"/rounds\\\\|`/rounds\\\\|href=\"/rounds\\\\|href={`/rounds\\\\|router\\\\.\\\\\\(push\\\\|replace\\\\\\)\\(.*rounds' components/own-rounds.tsx components/new-round.tsx components/round-detail.tsx components/round-card.tsx components/dashboard.tsx)"
|
"Bash(grep -n '\"/rounds\\\\|`/rounds\\\\|href=\"/rounds\\\\|href={`/rounds\\\\|router\\\\.\\\\\\(push\\\\|replace\\\\\\)\\(.*rounds' components/own-rounds.tsx components/new-round.tsx components/round-detail.tsx components/round-card.tsx components/dashboard.tsx)",
|
||||||
|
"Bash(curl -s -o /dev/null -w \"my-rounds: %{http_code}\\\\n\" https://teecup.teeoff.no/my-rounds)",
|
||||||
|
"Bash(curl -s -o /dev/null -w \"my-rounds/new: %{http_code}\\\\n\" https://teecup.teeoff.no/my-rounds/new)",
|
||||||
|
"Bash(curl -s https://teecup.teeoff.no/rounds)"
|
||||||
],
|
],
|
||||||
"additionalDirectories": [
|
"additionalDirectories": [
|
||||||
"/opt/teeoff/deploy",
|
"/opt/teeoff/deploy",
|
||||||
|
|
|
||||||
|
|
@ -2015,6 +2015,57 @@ boot-et rent, `/health`/`/dashboard`/`/rounds`/`/rounds/new` → 200 over
|
||||||
ekte https, `teeoff.no` upåvirket. De tre V0-zip-ene slettet fra
|
ekte https, `teeoff.no` upåvirket. De tre V0-zip-ene slettet fra
|
||||||
prosjektroten etter fullført integrering.
|
prosjektroten etter fullført integrering.
|
||||||
|
|
||||||
|
**Reell produksjonsbug funnet OG FIKSET 2026-07-23, rapportert av bruker
|
||||||
|
med to skjermbilder (`/rounds` ga "Klarte ikke å hente rundene dine",
|
||||||
|
`/rounds/new` sitt siste steg ga "Klarte ikke å opprette runden"):**
|
||||||
|
rot-årsak var en EKSAKT navnekollisjon mellom frontend-sidens toppnivå-
|
||||||
|
prefiks (`/rounds`) og backend-APIets ressursprefiks (samme `/rounds`,
|
||||||
|
`app/routers/rounds.py`) -- en verre variant av den allerede dokumenterte
|
||||||
|
"afterFiles"-fellen fra ADR-016s medlemsside-hendelse, denne gangen
|
||||||
|
rammende BEGGE retninger samtidig:
|
||||||
|
- `/rounds` (eksakt sti): en STATISK frontend-side. Statiske sider
|
||||||
|
sjekkes FØR rewrites, så siden vant presedens -- klientens
|
||||||
|
`fetch("/rounds")`/`POST /rounds` traff ALDRI backend, fikk Next sin
|
||||||
|
egen HTML tilbake i stedet for JSON (stille `res.json()`-parsefeil,
|
||||||
|
fanget av try/catch, viste den generiske feilteksten).
|
||||||
|
- `/rounds/[id]` (DYNAMISK side): her sjekkes rewrites FØR dynamiske
|
||||||
|
sider, så rewrite-regelen vant presedens i stedet -- selve
|
||||||
|
rundedetalj-SIDEN var dermed fullstendig UOPPNÅELIG (ville vist rå
|
||||||
|
backend-JSON i stedet for UI-et), bekreftet direkte med `curl` FØR
|
||||||
|
fiksen (anonymt `GET /rounds/00000000-...` ga ekte backend-JSON i
|
||||||
|
stedet for Next sin HTML).
|
||||||
|
Det andre skjermbildets utslagsnavn "55/50/44/32" ble UNDERSØKT OG
|
||||||
|
BEKREFTET Å IKKE VÆRE EN BUG -- lest direkte fra ekte `teeoff_api` (`GET
|
||||||
|
tjome-golfklubb`): Tjøme Golfklubb sine faktiske utslagsnavn i teeoff ER
|
||||||
|
bokstavelig talt disse tallene (lengde i hundremeter, ikke fargenavn) --
|
||||||
|
data gjengitt korrekt, ingen kode-endring nødvendig for dette punktet.
|
||||||
|
**Fikset ved samme prinsipp som medlemsside-hendelsen: flytt siden, ikke
|
||||||
|
APIet.** Alle tre frontend-rutene flyttet til et helt nytt, ikke-
|
||||||
|
overlappende toppnivå-prefiks `/my-rounds/*` (`app/rounds/` →
|
||||||
|
`app/my-rounds/`), API-et (`/rounds/*`) uendret. Åtte interne
|
||||||
|
navigasjonsreferanser oppdatert på tvers av `round-card.tsx`/
|
||||||
|
`own-rounds.tsx`/`new-round.tsx`/`round-detail.tsx`/`dashboard.tsx` --
|
||||||
|
ekte `fetch()`-kall til API-et (samme filer) bevisst latt urørt, kun
|
||||||
|
`<Link href>`/`router.push`/`router.replace` endret. Utvidet
|
||||||
|
`next.config.mjs` sin allerede eksisterende advarselskommentar med denne
|
||||||
|
nye, verre varianten av samme fellesklasse, som en fremtidig påminnelse:
|
||||||
|
et rewrite-prefiks og en frontend-sides toppnivå-segment må ALDRI være
|
||||||
|
identisk streng.
|
||||||
|
**Verifisert presist FØR og ETTER utrulling** (ikke bare "bygget uten
|
||||||
|
feil"): et `curl` mot ekte produksjon FØR fiksen bekreftet nøyaktig
|
||||||
|
mekanismen i begge retninger (se over). Ekte typesjekket
|
||||||
|
produksjonsbuild etterpå viste selv at rutetreet nå lister `/my-rounds`,
|
||||||
|
`/my-rounds/[id]`, `/my-rounds/new` i stedet for de gamle `/rounds`-
|
||||||
|
rutene. **Rullet ut live 2026-07-23**, bruker bekreftet eksplisitt: kun
|
||||||
|
`teecup_frontend` (gjenskapte `teecup_api` som vanlig bivirkning, ingen
|
||||||
|
backend-kode rørt). Verifisert ETTERPÅ med et nytt sett `curl`-kall mot
|
||||||
|
ekte https: anonymt `GET /rounds` ga nå korrekt backend-JSON
|
||||||
|
(`NOT_AUTHENTICATED`, IKKE Next sin HTML som før), anonymt `GET
|
||||||
|
/rounds/<uuid>` fortsatt korrekt backend-JSON (uendret, som forventet),
|
||||||
|
og -- den avgjørende nye sjekken -- anonymt `GET /my-rounds/<uuid>` ga nå
|
||||||
|
faktisk `text/html` (selve React-siden, ikke lenger uoppnåelig).
|
||||||
|
`/dashboard`/`/my-rounds`/`/my-rounds/new` → 200, `teeoff.no` upåvirket.
|
||||||
|
|
||||||
**Motor-komponenten (punkt 1-11) er ✅ BYGGET OG TESTET 2026-07-22,**
|
**Motor-komponenten (punkt 1-11) er ✅ BYGGET OG TESTET 2026-07-22,**
|
||||||
som første, isolerte byggesteg (ren Python, ingen DB/API/frontend ennå —
|
som første, isolerte byggesteg (ren Python, ingen DB/API/frontend ennå —
|
||||||
matcher ADR-005s "test i isolasjon FØR resten"). Nye funksjoner i
|
matcher ADR-005s "test i isolasjon FØR resten"). Nye funksjoner i
|
||||||
|
|
|
||||||
21
CLAUDE.md
21
CLAUDE.md
|
|
@ -2421,6 +2421,27 @@ Neste steg:
|
||||||
også `teecup_api` som vanlig bivirkning), begge containere boot-et
|
også `teecup_api` som vanlig bivirkning), begge containere boot-et
|
||||||
rent, `/health`/`/dashboard`/`/rounds`/`/rounds/new` → 200, `teeoff.no`
|
rent, `/health`/`/dashboard`/`/rounds`/`/rounds/new` → 200, `teeoff.no`
|
||||||
upåvirket. V0-zip-ene slettet fra prosjektroten.
|
upåvirket. V0-zip-ene slettet fra prosjektroten.
|
||||||
|
**Reell produksjonsbug rapportert av bruker (2 skjermbilder) og
|
||||||
|
FIKSET samme dag:** `/rounds` var samtidig frontend-listesidens sti OG
|
||||||
|
backend-APIets ressursprefiks — en verre, begge-veier-variant av
|
||||||
|
ADR-016s medlemsside-felle. Statisk side vant over rewrite for det
|
||||||
|
eksakte `/rounds`-treffet (klientens `fetch("/rounds")`/`POST /rounds`
|
||||||
|
traff aldri backend, fikk Next sin egen HTML tilbake — derav "Klarte
|
||||||
|
ikke å hente rundene dine"/"Klarte ikke å opprette runden"), mens
|
||||||
|
rewriten vant over den DYNAMISKE `/rounds/[id]`-siden i motsatt
|
||||||
|
retning (selve rundedetalj-siden var dermed fullstendig uoppnåelig,
|
||||||
|
bekreftet direkte med `curl` før fiksen). Skjermbildets andre detalj —
|
||||||
|
utslagsnavn "55/50/44/32" — ble sjekket direkte mot ekte `teeoff_api`
|
||||||
|
og bekreftet Å IKKE VÆRE EN BUG (Tjøme Golfklubb sine faktiske
|
||||||
|
utslagsnavn, lengde i hundremeter). Fikset ved å flytte alle tre
|
||||||
|
frontend-rutene til et nytt, ikke-overlappende prefiks `/my-rounds/*`
|
||||||
|
— API-et uendret på `/rounds`. `next.config.mjs` sin advarsel utvidet
|
||||||
|
med denne nye varianten. Verifisert med `curl` mot ekte produksjon
|
||||||
|
BÅDE før og etter (anonymt `GET /rounds` → nå korrekt backend-JSON,
|
||||||
|
anonymt `GET /my-rounds/<uuid>` → nå korrekt `text/html`, altså
|
||||||
|
endelig oppnåelig). Rullet ut live 2026-07-23, bruker bekreftet
|
||||||
|
eksplisitt, kun `teecup_frontend` (+ vanlig `teecup_api`-bivirkning),
|
||||||
|
`teeoff.no` upåvirket. Full detalj i ADR-033.
|
||||||
4. **Del 1 (fri, ukrevd sekundær-e-post) er nå BYGGET OG LIVE** (2026-07-21,
|
4. **Del 1 (fri, ukrevd sekundær-e-post) er nå BYGGET OG LIVE** (2026-07-21,
|
||||||
se status over). **Del 2 (ekte konto-sammenslåing) fortsatt IKKE
|
se status over). **Del 2 (ekte konto-sammenslåing) fortsatt IKKE
|
||||||
designet:** hva skjer hvis den ønskede adressen ALLEREDE tilhører en
|
designet:** hva skjer hvis den ønskede adressen ALLEREDE tilhører en
|
||||||
|
|
|
||||||
|
|
@ -1397,6 +1397,14 @@ merge-før-PATCH beholdt, dev-forhåndsvisningskontroller fjernet). Ingen
|
||||||
backend-endring i denne del-runden. Rullet ut live, `teeoff.no`
|
backend-endring i denne del-runden. Rullet ut live, `teeoff.no`
|
||||||
upåvirket.
|
upåvirket.
|
||||||
|
|
||||||
|
**Reell produksjonsbug funnet og fikset 2026-07-23, samme dag, rapportert
|
||||||
|
av bruker med skjermbilder:** `/rounds` var samtidig frontend-side og
|
||||||
|
API-prefiks — samme fellesklasse som ADR-016s medlemsside-hendelse, men
|
||||||
|
rammet begge presedens-retninger samtidig (listesiden nådde aldri
|
||||||
|
backend, og rundedetalj-siden var helt uoppnåelig). Fikset ved å flytte
|
||||||
|
frontend til `/my-rounds/*`, API uendret. Se ADR-033 for full detalj,
|
||||||
|
inkl. `curl`-bevis før/etter.
|
||||||
|
|
||||||
**Notat fra bruker, IKKE designet/bygget ennå (fanget 2026-07-22):**
|
**Notat fra bruker, IKKE designet/bygget ennå (fanget 2026-07-22):**
|
||||||
brukeren har tenkt å ha med (a) måling av lengde på slag, og (b) å kunne
|
brukeren har tenkt å ha med (a) måling av lengde på slag, og (b) å kunne
|
||||||
få opplyst avstand til forskjellige steder på banen (typisk pin/hazard/
|
få opplyst avstand til forskjellige steder på banen (typisk pin/hazard/
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue