Browse Source

TASKS.md: P1-8 afgerond (live emulator-check), nieuwe crash P1-12 (EventCurrent horecaid! zonder deep-link-param), P1-1#4 live bevestigd, P2-7 EventWidget-route bevestigd orphan

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
bob 1 tháng trước cách đây
mục cha
commit
9fb28f6192
1 tập tin đã thay đổi với 44 bổ sung26 xóa
  1. 44 26
      TASKS.md

+ 44 - 26
TASKS.md

@@ -53,10 +53,17 @@ tijd stoppen goed te doen.
   - De audit-/verificatiestappen die dit bestand al vaak gebruikt om "open"
     vs "al gefixt" te bevestigen (`git log -S"..."`, gerichte `grep`) — zie
     de vuistregel hierboven over verouderde taakstatus.
-  - **P1-8, laatste bullet** hieronder (live emulator-check dat een
-    ongeldige `nid` niet crasht) — app draaien, navigeren, logs/scherm
-    checken. Geen builder-bewerking, laag risico, duidelijk
-    slagingscriterium.
+  - Live emulator-checks (app draaien, deep link/navigatie, scherm/
+    logs checken) — geen builder-bewerking. **Kanttekening
+    (2026-08-05): de eerder als "laag risico, duidelijk
+    slagingscriterium" ingeschatte P1-8-check bleek bij uitvoering
+    juist 2 échte crashes op te leveren** (zie P1-1 punt 4 en de
+    nieuwe P1-12) — het navigeren/screenshotten zelf is Haiku-geschikt,
+    maar de opvolging (stacktrace naar exacte broncoderegel herleiden,
+    onderscheid maken tussen "al bekend probleem" en "nieuwe bug",
+    inschatten of normaal gebruik geraakt wordt) vroeg meer redeneerwerk
+    dan verwacht — bij een crash-bevinding op zo'n check de opvolging
+    liever alsnog met Sonnet doen.
 - **Niet Haiku-geschikt** (Sonnet aanhouden): elke taak die een
   builder-widget/-property wijzigt (vrijwel alle overige P1/P2-taken), en
   taken die ontwerpkeuze/afweging vragen zoals P1-9 en de P2-features
@@ -156,7 +163,11 @@ Carousel-widgets zonder deze fix — allemaal read-only bevestigd
    P0-1 kan hier nog optreden zonder enige vangnet.
 3. `EvenementComponent` → Carousel (foto-carousel van één evenement)
 4. `horecagelegenheidCurrent` → Carousel (foto-carousel van één
-   horecagelegenheid)
+   horecagelegenheid) — **live bevestigd 2026-08-05 (Claude, emulator,
+   deep link `?nid=999999999`, niet-bestaand item):** exact het
+   verwachte `RangeError (length): Invalid value: Valid value range is
+   empty: 0` op-scherm, 3x. Bevestigt dat dit al een échte crash is,
+   niet alleen een theoretisch risico.
 - **Waarom bij Bob i.p.v. Claude:** de "Show Empty List Widget"-
   checkbox is **structureel onbereikbaar via Claude's
   browser-automation-viewport** (bevestigd op alle 4 hierboven, zie
@@ -241,26 +252,26 @@ gezien de omvang hieronder (~45 treffers); pak het file-voor-file op.
 uitloggen, account verwijderen). Bovenop de login/favorieten-P0-basis.
 Account verwijderen heeft mogelijk AVG-implicaties aan Drupal-kant.
 
-**P1-8 · Eigenaar: Onbepaald.** Toegankelijkheid, restpunt:
-- ~~Login-pagina: 2 icon-only knoppen zonder tooltip~~ **opgelost
-  2026-08-05 (Claude, builder):** hele `TextField` (niet alleen het
-  icoon) gewrapt in Tooltip via rechtsklik → Wrap Widget (Ctrl+B) →
-  spraakwolkje-icoon, i.p.v. het icoon zelf (dat zit als `suffixIcon`
-  embedded, geen losse wrapbare tree-node — zie `CLAUDE.md`). Message:
-  "Veld wissen" (UsernameField) / "Wachtwoord tonen/verbergen"
-  (PasswordField). Geverifieerd via gegenereerde code (`AlignedTooltip`
-  met correcte tekst, geen restanten). **Val op tijdens het typen:** het
-  Message-tekstveld toont een vaste "Message..."-prefix; direct typen
-  zonder eerst Ctrl+A liet die prefix in de opgeslagen tekst staan
-  (bv. "Message...Veld wissen" i.p.v. "Veld wissen") — bevestigd via
-  Developer Menu → View Code. Altijd Ctrl+A vóór het typen in dit
-  veld, en achteraf via View Code controleren.
-- Optioneel, laag risico **(Haiku-geschikt, zie Modelkeuze hierboven)**:
-  live in de emulator/app verifiëren dat een ongeldige/verlopen `nid` op
-  `horecagelegenheidCurrent`/`eventCurrent` geen crash geeft — code-niveau
-  al gecheckt en geruststellend (consequent `?.toList() ?? []`/
-  `valueOrDefault<...>` rond `jsonBody`-velden, i.t.t. de lijstpagina's uit
-  P1-1), alleen nog niet live getest.
+**P1-12 · Eigenaar: Bob (builder, gegenereerde code niet lokaal te
+fixen).** `EventCurrent` crasht direct (Null check operator used on a
+null value) op een deep link met wél `nid` maar zonder `horecaid`
+query-param. **Gevonden 2026-08-05 (Claude), live bevestigd op
+emulator** via `adb shell am start -d
+"uitgaanskrant://uitgaanskrant.com/eventCurrent?nid=999999999"`
+(bewust zonder `horecaid`). Root cause:
+`event_current_widget.dart:808`, `establishmentID: widget!.horecaid!`
+— geen fallback. Alle **in-app** navigatie naar `EventCurrent` stuurt
+`nid`+`horecaid` altijd samen mee (gecheckt, alle `pushNamed`-aanroepen
+vullen beide), dus dit raakt geen normaal gebruik — wel elke
+deep link/gedeelde link/push-notificatie die ooit alleen `nid`
+meegeeft (bv. een toekomstige "deel-knop", zie P2-4). Fix: in de
+builder op `EventCurrent` → widget-tree → de
+`EvenementHorecagelegenheidWidget`-instantie → `establishmentID`-param
+een Default Variable Value/`valueOrDefault` toevoegen i.p.v. de kale
+`!`, zelfde patroon als P1-6. (Losstaand: de bekende Carousel-
+RangeError op deze en de `horecagelegenheidCurrent`-pagina bij een
+niet-bestaande `nid` is al gedekt door P1-1 punt 4 — live bevestigd,
+zie daar.)
 
 **P1-9 · Eigenaar: Onbepaald.** Visuele polish (los, per pagina):
 Uitgaan-pagina (typografie/contrast/spacing), Event-pagina,
@@ -397,7 +408,14 @@ code).
 - Dubbele Provincie/Gemeente-blok in het menu opruimen (12 menu-items
   waar 6 zouden volstaan).
 - `EventWidget`-route: heraansluiten of definitief schrappen (losse
-  orphan-route).
+  orphan-route). **Bevestigd orphan 2026-08-05 (Claude, grep):** route
+  staat correct geregistreerd (`nav.dart`, pad `/event`, param `nid`)
+  en geëxporteerd (`index.dart`), maar **geen enkele `pushNamed`/
+  navigatie-aanroep in de hele codebase gaat er ooit naartoe** —
+  `EventCurrent` (pad `/eventCurrent`) is overal de daadwerkelijk
+  gebruikte event-detailpagina. Alleen bereikbaar via een handmatige
+  directe URL. Beslissing (verwijderen uit `nav.dart`+`index.dart`, of
+  alsnog ergens aan koppelen) ligt bij Bob.
 - `EstablishmentsNewCall` (`lib/backend/api_requests/api_calls.dart:845`)
   wordt nergens meer aangeroepen — dode API-call-definitie (gevonden
   bij de P1-10-performance-audit 2026-08-05).