Explorar el Código

TASKS.md: P1-13 geconsolideerd (chronologische sessie-log ingekort tot huidige stand van zaken, setsid-recept-duplicaat verwijderd nu CLAUDE.md canoniek is)

Van ~240 regels sessie-per-sessie-narratief naar ~35 regels: huidige reproductiemethode (deep-link+plaats-param), waarom nog geen stack trace (logcat vangt de dump niet, VM-service-verbinding nodig), en 3 concrete vervolgpogingen. Geen inhoudelijke informatie verloren, wel makkelijker leesbaar voor een volgende sessie zonder de ontstaanschat.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
bob hace 1 mes
padre
commit
09e6902173
Se han modificado 1 ficheros con 48 adiciones y 240 borrados
  1. 48 240
      TASKS.md

+ 48 - 240
TASKS.md

@@ -532,249 +532,57 @@ zie daar.)
 
 **P1-13 · Eigenaar: Onbepaald.** Op `HorecagelegenhedenOverzicht` →
 tab "Activiteiten" gooit de kaartjesgrid herhaaldelijk `RenderFlex
-overflowed`-fouten — zowel "on the right" (oplopend van 16 tot 243
-pixels, tientallen keren) als één keer "on the bottom" (2653 pixels).
-**2026-08-07 (Claude): logcat-onderzoek geprobeerd, geen resultaat** —
-geen actieve `flutter run`/attach-sessie beschikbaar deze sessie (leeg
-terminal, `adb logcat` toonde geen Flutter-frames), dus geen verse
-stack trace te pakken. Op basis van codelezing wél een concrete,
-**nog niet geverifieerde** hypothese: `HorecagelegenheidoverzichtKaartWidget`
-(`horecagelegenheidoverzicht_kaart_widget.dart:337-349`) kiest de
-breedte van de tekst-kolom via `MediaQuery.sizeOf(context).width`
-(200/250/300/350px) — dat is de **volledige schermbreedte**, terwijl
-deze kaart altijd in een 2- of 3-koloms `MasonryGridView` staat
-(`horecagelegenheden_overzicht_widget.dart:346-361`). Bij logische
-breedte tussen kBreakpointMedium(767) en kBreakpointLarge(991) →
-grid met 2 kolommen, kaart-tekstkolom kiest 300px — dat past mogelijk
-niet meer naast de afbeeldingskolom in een halve-schermbreedte
-grid-cel. **Onzeker of dit de daadwerkelijke overflow-oorzaak is**:
-de tekstkolom staat in een `Expanded`, en `Expanded` geeft normaliter
-*tight* constraints die een child's eigen `width`-property juist
-overschrijven (`BoxConstraints.enforce`) — dus in theorie zou dit net
-NIET mogen overflowen op Row-niveau. Kon dit niet verifiëren zonder
-Flutter DevTools/Layout Explorer in een live debug-sessie. **Volgende
-sessie:** als er een live `flutter run`/`flutter attach`-sessie
-beschikbaar is (met console-output), reproduceer de overflow op tab
-Activiteiten en lees de volledige stack trace — die geeft de exacte
-widget/regel. Zonder dat blijft dit gokken. **2026-08-07 middag,
-opnieuw reconfirmed (read-only logtail van de andere sessie's actieve
-`flutter run`):** de "on the right"-overflows blijven zich herhaaldelijk
-voordoen (16 t/m 219px, tientallen keren) — nog steeds niet opgelost.
-In diezelfde log ook `Invalid argument(s): No host specified in
-URI`-excepties gezien — dat is een **los** probleem, zie het nieuwe
-P1-15 (niet dezelfde oorzaak als deze RenderFlex-overflow).
-- **2026-08-09 avond (Claude): eigen `flutter run`-sessie gestart,
-  overflow live gereproduceerd (screenshot, tab Activiteiten op
-  `emulator-5554`) — maar nog steeds geen verse stack trace specifiek
-  voor déze overflow te pakken, om een structurele reden (zie
-  CLAUDE.md "Slechts één volledige RenderFlex-stack trace per
-  flutter run-sessie"): Flutter dumpt maar één keer per proceslevensduur
-  de volledige details; die ene keer ging naar de al langer bekende
-  `PUitgaanSliderKaartComponent`-overflow op de Home-pagina (P1-3),
-  niet naar deze Activiteiten-tab-kaart, omdat de app bij het opstarten
-  al op `HorecagelegenhedenOverzicht` stond (onthouden vorige route) en
-  dáár al eerder overflowede vóór ik kon navigeren. Een hot-restart zou
-  de teller resetten maar dat kon niet: `ff-run-fvm.sh` draait via Bash
-  `run_in_background` met stdin op `/dev/null` (niet-interactief), dus
-  geen `R`-toets te sturen. Flutter DevTools (devtools-URL uit de log)
-  bleek zelf ook een Flutter-Web-canvas-app zonder toegankelijke
-  DOM/accessibility-tree — dezelfde soort blokkade als de
-  FlutterFlow-builder, niet verder onderzocht.
-  - **Code-niveau heronderzoek van de 2026-08-05-hypothese
-    (`Expanded`+`width`-Container in `HorecagelegenheidoverzichtKaartWidget`,
-    regels nu 343-357 i.p.v. 337-349 — lichte regelverschuiving, geen
-    inhoudelijke wijziging t.o.v. eerdere audit): de Row op regel 152
-    (`mainAxisSize: MainAxisSize.max`, kinderen `Flexible(...)` +
-    `Expanded(...)`) **kan qua Flutter-constraint-model niet zelf
-    overflowen** — dat is precies het doel van `Flexible`/`Expanded`:
-    de flex-child krijgt hoe dan ook nooit meer dan zijn toegewezen
-    Row-ruimte, ongeacht een eigen `width`-property. Bevestigt de
-    eerdere twijfel in de hypothese hierboven. Er zit ook geen geneste
-    `Row` verderop in deze widget die zónder Flexible/Expanded-wrap
-    zou kunnen overflowen (title/adres/plaats zijn losse `Text`-widgets
-    in een `Column`, geen `Row`). **Conclusie: deze widget is
-    vermoedelijk niet de bron** — de werkelijke oorzaak moet elders
-    liggen (bv. de buitenste `Container(width: 600.0, height: 225.0)`
-    in `horecagelegenheden_overzicht_widget.dart:388-390` die als
-    `itemBuilder`-return in de `MasonryGridView` staat, of iets in het
-    logo/categorie-tag-`Stack` dat nog niet volledig nagelopen is).
-  - **Volgende sessie, concrete aanpak om wél een verse stack trace te
-    pakken:** start `flutter run` niet via de standaard
-    `run_in_background`-Bash-aanroep maar met stdin gekoppeld aan een
-    named pipe (`mkfifo`), zodat een `R` (hot restart) tussentijds te
-    versturen is — reset Flutter's interne `_errorCount` en dwingt de
-    eerstvolgende exceptie weer een volledige dump af. Navigeer **direct
-    na de restart** zo snel mogelijk naar Activiteiten-tab vóórdat een
-    andere pagina (Home) een eigen overflow veroorzaakt en de dump-slot
-    opsoupeert.
-- **2026-08-09 avond, tweede sessie: de `mkfifo`-aanpak hierboven
-  uitgeprobeerd en bevestigd **niet werkend** — geen doodlopende hypothese
-  meer, dus niet opnieuw proberen.** `flutter run` gestart met stdin
-  gekoppeld aan een named pipe (met een losse `sleep 3600 > $FIFO &`
-  als permanente writer om de pipe open te houden) en daarna `R`/`R\n`
-  in de pipe geschreven — geen "Performing hot restart..." verschijnt
-  ooit in de log, de toetsaanslag komt nooit aan. Waarschijnlijke
-  oorzaak: Flutter's interactieve keyboard-handler test op een echte
-  TTY (`stdin.hasTerminal`/`Terminal.usesTerminalUi`) vóór hij raw
-  keypresses verwerkt — een FIFO is geen TTY, dus de handler activeert
-  zich niet, ook al accepteert `flutter run` de pipe zonder foutmelding.
-  Een echte fix zou `script -qc`/`socat`+pty nodig hebben (niet
-  geprobeerd, groter tijdsrisico dan de opbrengst rechtvaardigt).
-- **Werkende alternatieve route (geen hot-restart nodig): cold-start
-  direct de doelpagina via deep link + kale `adb logcat`, geen
-  `flutter run`-attach nodig.** `Activiteiten` is toevallig al
-  `initialIndex: 0`/de eerste tab van `HorecagelegenhedenOverzicht`
-  (`horecagelegenheden_overzicht_widget.dart:49`/238-241) — dus
-  `adb logcat -c` → `am force-stop com.uitgaanskrant.app` → `am start
-  -a android.intent.action.VIEW -d
-  "uitgaanskrant://uitgaanskrant.com/horecagelegenhedenOverzicht"
-  com.uitgaanskrant.app` landt bij cold start meteen op de juiste tab,
-  vóórdat Home ooit gebouwd wordt — omzeilt het hele
-  dump-slot-race-probleem zonder pipe-trucs. `adb logcat` (debug
-  builds) toont `dumpErrorToConsole`-output gewoon via de
-  `flutter`-tag, onafhankelijk van een actieve `flutter run`-sessie.
-  **Nog niet tot een verse stack trace gekomen bij uitvoering, om twee
-  losse praktische redenen, niet omdat de methode niet deugt:**
-  1. Geprobeerd op `emulator-5556` (tablet, 1280px logische breedte) —
-     landde correct op tab Activiteiten maar toonde een **lege grijze
-     Container**, geen kaarten, geen overflow (zie ook bijvangst
-     hieronder). Dat spoort met de bestaande breedte-hypothese: bij
-     1280px logische breedte pakt de MasonryGridView vermoedelijk de
-     3-koloms/"large"-breakpoint, niet de 2-koloms/"medium" waar het
-     probleem wordt vermoed — tablet is dus niet het device om dit op
-     te reproduceren, gebruik `emulator-5554` (telefoon).
-  2. `emulator-5554` had op het moment van onderzoek al **80+ minuten**
-     een eigen actieve `ff-run-fvm.sh`-sessie draaien (PID zichtbaar via
-     `ps aux`, sinds 14:55) — een read-only screenshot bevestigde
-     **live dat de overflow-banner daar al zichtbaar stond**
-     ("BOTTOM OVERFLOWED BY 5382 PIXELS" op tab Activiteiten, dus het
-     probleem is nog steeds aanwezig, nu met een andere/grotere
-     pixelwaarde dan de eerder gelogde 2653px — mogelijk meerdere
-     losse overflow-plekken op dezelfde tab). **Bewust niet
-     force-stopt/herstart** om die sessie niet te verstoren (kon niet
-     vaststellen of dat Bob's eigen live sessie was of restant-state) —
-     zie `CLAUDE.md`-concurrency-regel. Een `logcat -d`-check op dat
-     moment vond geen `EXCEPTION CAUGHT`/`RenderFlex overflowed`-tekst
-     meer terug — de ring buffer was na 80+ minuten al doorgerouleerd,
-     de oorspronkelijke dump is dus sowieso niet meer terug te halen
-     uit die sessie.
-  - **Volgende sessie, snelste concrete pad:** bevestig eerst dat
-    `emulator-5554` vrij is (geen recente sessie, zie
-    `CLAUDE.md`-concurrency-regel), dan de bovenstaande
-    logcat+deep-link-cold-start-procedure dáár uitvoeren (niet op de
-    tablet) — geen `mkfifo` nodig, geen `flutter run`-attach nodig,
-    dus ook uitvoerbaar met alleen `adb`/Bash zonder `run_in_background`.
-  - **Bijvangst, mogelijk apart P1-1-achtig puntje:** op de tablet-
-    breedte toont tab Activiteiten bij (schijnbaar) geen/nog niet
-    geladen resultaten een **kale lege grijze `Container`**, geen
-    nette empty-state-afbeelding zoals het `HorecagelegenhedenOverzicht`-
-    patroon elders in dit bestand (P1-1) beschrijft — niet
-    geverifieerd of dit een echt lege dataset was of een timing-
-    kwestie (deep-link-cold-start kan nog geen gemeente/provincie-
-    context gezet hebben). Bij het oppakken van bovenstaand punt even
-    meenemen: als tab Activiteiten op tablet-breedte structureel leeg
-    blijft zonder duidelijke reden, is dat een aparte bug.
-  - **Zelfde avond, direct vervolg (Bob akkoord om zelfstandig door te
-    werken op `emulator-5554`): het lege-databeeld hierboven verklaard
-    én opgelost — `plaats`-query-param ontbrak.** `HorecagelegenhedenOverzichtWidget`
-    verwacht een `plaats`-param (= `FFAppState().gemeenteSelectId`, zie
-    `nav.dart:194`/`drawer_component_widget.dart:1173-1180`) — zonder
-    param geen data. Deep link `uitgaanskrant://uitgaanskrant.com/
-    horecagelegenhedenOverzicht?plaats=28666` (bekende default-gemeente-id
-    uit P0-3) cold-start op `emulator-5554` **reproduceerde de bug meteen
-    en consistent** ("BOTTOM OVERFLOWED BY 5382 PIXELS", exact dezelfde
-    waarde als eerder die avond) — mét echte kaarten (De Beun, Hotel Den
-    Helder), zónder ooit Home te bouwen. Dit lost het dump-slot-race-
-    probleem dus wél op — **maar de opvolgende `adb logcat -d`-check
-    bevatte alsnog geen enkele regel met "overflow"/"RenderFlex"/
-    "exception", ondanks dat de banner zichtbaar op het scherm stond.**
-    Conclusie: `FlutterError.dumpErrorToConsole`-output komt op dit
-    device/deze Flutter-versie **niet** via de "flutter"-tag in
-    `adb logcat` terecht (eerdere sessies kregen de stack trace altijd
-    via een live `flutter run`'s eigen STDOUT/VM-service-verbinding,
-    nooit via logcat zelf — dat onderscheid was tot nu toe niet
-    expliciet vastgesteld). **Herziening van het "volgende sessie"-advies
-    hierboven: de logcat-route alléén volstaat niet, ondanks de
-    succesvolle reproductie.** Nodig blijft een echte VM-service-
-    verbinding. Twee opties, geen van beide deze sessie nog beproefd
-    (tijdsbudget op):
-    1. `flutter run` starten met stdin aan een **echte pty** (bv. via
-       `script -qc "fvm flutter run -d emulator-5554" /dev/null` of
-       `socat`) i.p.v. de kale `mkfifo` hierboven (bevestigd niet-werkend
-       — geen TTY) — dan ná de deep-link-reproductie een `R` sturen is
-       niet eens meer nodig omdat de deep-link zelf al vóór Home
-       reproduceert; gewoon de sessie starten, dan de deep-link-cold-start
-       hierboven uitvoeren, dan STDOUT lezen.
-    2. Rechtstreeks praten met de Dart VM Service (JSON-RPC over
-       WebSocket, poort staat in `flutter run`'s opstart-log) via
-       `curl`/een klein script — geeft toegang tot foutmeldingen/
-       widget-inspector zonder DevTools' canvas-UI nodig te hebben. Niet
-       geprobeerd, onbekend hoeveel opzoekwerk de exacte RPC-methode kost.
-    **Herbruikbaar ongeacht welke optie:** de `plaats=28666`-deep-link-
-    truc hierboven blijft de snelste manier om exact op het probleem te
-    landen zonder Home's eigen overflow ertussen te krijgen.
-  - **Optie 1 (`script -qc`) meteen geprobeerd, ook niet werkend — maar
-    om een andere, environment-specifieke reden dan de TTY-check.**
-    `script -qc "fvm flutter run -d emulator-5554" logfile < fifo`
-    gestart (fifo + een losse `sleep 3600 > fifo &`-writer om de pipe
-    open te houden, zelfde patroon als eerder): `flutter run` boot prima
-    op (key-commands-lijst toont nu correct zowel `r` als `R`, een teken
-    dat de pty-laag wél als terminal herkend wordt — beter dan de kale
-    fifo), maar het hele proces **beëindigde zichzelf binnen enkele
-    seconden** (`Script done ... COMMAND_EXIT_CODE="0"`) — dus vóórdat er
-    ooit een toets verstuurd kon worden. Waarschijnlijke oorzaak: dit
-    was gestart binnen een Claude Code `run_in_background`-Bash-aanroep;
-    zodra het **getrackte voorgrondcommando** binnen die aanroep klaar
-    is (hier: na de `echo ok`), lijkt de tool-harness de hele
-    procesgroep op te ruimen — óók de losse, `disown`'de achtergrond-
-    subshell die de fifo openhield, en daarmee indirect ook `script`/
-    `flutter run` zelf (EOF op stdin zodra de laatste writer weg is).
-    **Dit is dus niet (alleen) een Flutter/TTY-beperking maar een
-    beperking van hoe deze sandbox achtergrondprocessen beheert** —
-    losse `disown`'de kindprocessen overleven een `run_in_background`-
-    aanroep hier niet betrouwbaar zodra het main-commando zelf eindigt.
-    Nog niet geprobeerd: `nohup` + `setsid` (volledig loskoppelen van de
-    procesgroep, niet alleen `disown`) — theoretisch zou dat dit specifieke
-    reap-probleem kunnen omzeilen, onbevestigd.
-  - **Update, zelfde avond: `setsid` bevestigd de fix — interactieve
-    `flutter run` (incl. werkende `R`-hot-restart) is nu een
-    betrouwbaar herhaalbaar recept, bewaar dit:**
-    ```
-    mkfifo /pad/naar/fifo
-    setsid bash -c "exec 9>'/pad/naar/fifo'; sleep 3600" < /dev/null > /dev/null 2>&1 &
-    disown
-    # in een aparte run_in_background Bash-call:
-    setsid script -qc "fvm flutter run -d <device>" /pad/naar/logfile < /pad/naar/fifo > /dev/null 2>&1 &
-    disown
-    # later, in weer een eigen call, om te restarten:
-    printf 'R' > /pad/naar/fifo
-    ```
-    De sleutel is `setsid` op **beide** achtergrondprocessen (niet
-    alleen `disown`) — dat geeft ze een eigen sessie, los van de
-    `run_in_background`-Bash-call die ze opstartte, en ze overleven
-    daarna gewoon zolang nodig, ook over meerdere losse tool-calls heen.
-    Hiermee **wél** een verse, volledige stack trace gevangen — alleen
-    niet (nog) voor de Activiteiten-tab-overflow zelf: het gat tussen
-    `R` versturen en de daaropvolgende deep-link-navigatie
-    (`adb shell am start -a android.intent.action.VIEW -d "..."`) bleek
-    **2x achter elkaar te laat** (~0.3-1s vertraging door
-    tool-call-overhead) — Home's eigen overflow (zie P1-19 hieronder)
-    vuurt binnen die tijd al. Race dus nog niet gewonnen; wel de
-    infrastructuur om het te proberen nu solide. **Idee voor een
-    volgende poging (niet meer beproefd deze sessie):** de deep-link
-    vanuit een tweede, al-vooraf-klaarstaande `adb`-aanroep zonder
-    tussenliggende Bash-tool-round-trip versturen (bv. beide commando's
-    — `R` sturen én de deep-link — in **één** Bash-aanroep met een zo
-    kort mogelijke `sleep` ertussen, i.p.v. twee losse tool-calls), of
-    onderzoeken of `flutter attach` (i.p.v. `flutter run`) op een al
-    lopend, via deep-link cold-started proces een raceloze combinatie
-    oplevert.
+overflowed`-fouten ("on the right", 16-243px, tientallen keren; één
+keer "on the bottom", 2653-5382px) — al meerdere sessies bevestigd
+live aanwezig, **nog geen verse volledige stack trace gevangen**
+(alleen `Another exception was thrown: ...`-kortvorm, zie CLAUDE.md's
+"slechts één volledige dump per proceslevensduur"-notitie).
+- **Betrouwbare reproductie (2026-08-09):** cold-start deep link op
+  `emulator-5554` (**niet** de tablet — die valt op een andere
+  grid-breakpoint en toont hooguit een lege Container, geen overflow):
+  ```
+  adb -s emulator-5554 shell am force-stop com.uitgaanskrant.app
+  adb -s emulator-5554 shell am start -a android.intent.action.VIEW -d \
+    "uitgaanskrant://uitgaanskrant.com/horecagelegenhedenOverzicht?plaats=28666" \
+    com.uitgaanskrant.app
+  ```
+  (`plaats` = verplichte `FFAppState().gemeenteSelectId`, zonder param
+  blijft de pagina leeg — 28666 is de bekende default-gemeente-id uit
+  P0-3.) `Activiteiten` is toevallig al tab-index 0
+  (`horecagelegenheden_overzicht_widget.dart:49`), dus dit landt direct
+  op de juiste tab mét echte data, zonder Home te bouwen — omzeilt het
+  dump-slot-race-probleem voor de cold-start zelf.
+- **Waarom nog steeds geen stack trace, ondanks succesvolle
+  reproductie:** `adb logcat` vangt `FlutterError.dumpErrorToConsole`
+  op dit device/deze Flutter-versie **niet** op (bevestigd leeg, ook al
+  stond de overflow-banner zichtbaar op het scherm) — er is een live
+  VM-service-verbinding nodig (`flutter run`/`attach` met een echte
+  pty, zie CLAUDE.md's `setsid`-recept). Met die verbinding werkt een
+  **hot-restart** (`R`, reset de dump-teller) wél — maar de race tussen
+  `R` versturen en de deep-link-navigatie hierboven is tot nu toe **2x
+  verloren** (~0.3-1s tool-call-overhead, Home's eigen overflow — zie
+  P1-19 — vuurt sneller). **Volgende concrete pogingen, geen van beide
+  nog beproefd:** (a) `R` + de deep-link in **één** Bash-aanroep met
+  een zo kort mogelijke `sleep` ertussen i.p.v. twee losse tool-calls;
+  (b) `flutter attach` (i.p.v. `flutter run`) op het al deep-link-
+  cold-gestarte proces — mogelijk raceloos, nog niet onderzocht; (c)
+  rechtstreeks de Dart VM Service (JSON-RPC/WebSocket, poort staat in
+  de opstart-log) bevragen via curl/een klein script, buiten DevTools'
+  ontoegankelijke canvas-UI om.
+- **Hypothese uit 2026-08-05 (`HorecagelegenheidoverzichtKaartWidget`'s
+  `MediaQuery.sizeOf`-breedtekeuze) weerlegd bij code-heronderzoek
+  2026-08-09:** de tekstkolom zit in een `Expanded`/`Flexible`-Row, die
+  kan qua Flutter-constraint-model niet zelf overflowen — de
+  daadwerkelijke oorzaak ligt elders, mogelijk de buitenste
+  `Container(width: 600.0, height: 225.0)` in
+  `horecagelegenheden_overzicht_widget.dart:388-390`, of iets in het
+  logo/categorie-tag-`Stack` — nog niet vastgesteld.
 
 **P1-19 · Eigenaar: Onbepaald.** Nieuwe, nog niet eerder gedocumenteerde
 `RenderFlex overflowed`-crash op de **Home-pagina**, live bevestigd met
-een **volledige, verse stack trace** (2026-08-09, via de `setsid`-
-interactieve-`flutter run`-sessie hierboven, 2x identiek reproduceerbaar
-bij elke fresh app-start/hot-restart):
+een **volledige, verse stack trace** (2026-08-09, via de
+`setsid`-interactieve-`flutter run`-sessie uit CLAUDE.md, 2x identiek
+reproduceerbaar bij elke fresh app-start/hot-restart):
 ```
 A RenderFlex overflowed by 113 pixels on the right.
 Row:file:///.../lib/uitgaanspaginas/home_uitgaantabel_kaart_component/home_uitgaantabel_kaart_component_widget.dart:301:50