Sfoglia il codice sorgente

P1-13: deep-link+plaats-param reproductietruc gevonden, logcat/mkfifo/pty-pogingen gedocumenteerd (geen van alle succesvol voor verse stack trace)

- Overflow reproduceerbaar via uitgaanskrant://uitgaanskrant.com/horecagelegenhedenOverzicht?plaats=<gemeenteid>, omzeilt Home's eigen overflow (dump-slot-race opgelost)
- Maar: adb logcat vangt FlutterError.dumpErrorToConsole niet op (alleen live flutter run-attach/VM-service werkt)
- mkfifo-stdin-trick: geen TTY, R-toets komt nooit aan (bevestigd niet-werkend)
- script -qc (echte pty) + fifo: boot wel correct als TTY, maar run_in_background-sandbox ruimt de disown'de keepalive-writer op zodra het voorgrondcommando eindigt -> proces sterft binnen seconden (environment-beperking, niet Flutter-specifiek)

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
bob 1 mese fa
parent
commit
e0601e63be
1 ha cambiato i file con 129 aggiunte e 0 eliminazioni
  1. 129 0
      TASKS.md

+ 129 - 0
TASKS.md

@@ -607,6 +607,135 @@ P1-15 (niet dezelfde oorzaak als deze RenderFlex-overflow).
     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.
 
 **P1-9 · Eigenaar: Onbepaald.** Visuele polish (los, per pagina) —
 resterend na sessie 2026-08-06: