Ver código fonte

TASKS.md/CLAUDE.md: P1-24 root cause gevonden, P1-25 onderzoek + AVD-crash-recept

P1-24: definitief root cause (leeg logo-veld op Drupal-nid 214339,
2 widgets met onvoldoende guard) -- niet gelinkt aan P0-9 zoals eerder
gedacht, live herbevestigd na de P0-9-fix dat de exceptie nog optreedt.
Exacte fix-locaties gedocumenteerd, nog niet gebouwd.

P1-25: onderzoek gestart maar niet afgerond -- Home's Uitgaan-tab
reageerde niet meer op scroll, kort daarna crashte emulator-5554 zelf
(SEGV, geheugenpiek 20GB). Mogelijk verband met P1-24's image-decode-
burst, niet bevestigd.

CLAUDE.md: nieuw diagnoserecept voor AVD-crashes (journalctl --user -u
android-emulator*.service) + een adb logcat-buffer-valkuil die een
misleidend "live activiteit"-beeld gaf zonder eerst adb logcat -c.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
bob 3 semanas atrás
pai
commit
f20f6993ac
2 arquivos alterados com 116 adições e 62 exclusões
  1. 19 0
      CLAUDE.md
  2. 97 62
      TASKS.md

+ 19 - 0
CLAUDE.md

@@ -298,6 +298,25 @@ export PATH="/home/bob/fvm/bin:$HOME/.pub-cache/bin:$PATH" && /home/bob/Projects
   crash van de app zelf. Bouw bij dit toestel bewust een korte
   `sleep`/wachttijd tussen opeenvolgende input-acties in i.p.v. ze
   direct na elkaar te vuren.
+- **AVD crasht/valt soms zelf uit (los van de app) — diagnose via
+  `journalctl --user -u android-emulator.service` (telefoon) of
+  `...-tablet.service` (tablet), niet via `adb logcat`.** Bevestigd
+  2026-08-21: `emulator-5554` crashte zelfstandig tijdens een sessie
+  (`systemctl --user status` toonde `code=dumped, signal=SEGV`, met
+  een geheugenpiek naar 20GB vlak ervoor) — de service zelf (en dus
+  `journalctl`) overleeft zo'n crash en laat de stacktrace/reden zien;
+  het device verdwijnt gewoon uit `adb devices` zonder verdere uitleg.
+  `systemctl --user show <service> -p NRestarts` laat zien of
+  systemd 'm al automatisch herstart heeft (`Restart=on-failure` staat
+  aan, dus meestal komt-ie vanzelf terug op een `active running` na
+  10-30s). **Valkuil bij het meten van "gebeurt dit nu live?" via
+  `adb logcat`:** zonder eerst `adb logcat -c` (buffer legen) dumpt
+  een nieuwe `adb logcat`-aanroep eerst de **hele bestaande ring
+  buffer** in een korte burst (kan makkelijk 20.000+ regels/paar
+  seconden zijn, inclusief oude boot-logs) vóórdat 'm daadwerkelijke
+  live regels toont — een `timeout 3s adb logcat | wc -l` op een
+  ongeleegde buffer geeft dus een compleet misleidend "er gebeurt hier
+  van alles"-beeld. Altijd `adb logcat -c` vóór een korte live-meting.
 - Een `EXCEPTION CAUGHT BY RENDERING LIBRARY`/crash tijdens de run is
   niet per se een regressie van je eigen wijziging — check eerst de
   stack trace op bestandsnaam. `lib/kanweg/` is Bob's eigen

+ 97 - 62
TASKS.md

@@ -1,26 +1,43 @@
 # Uitgaanskrant — takenlijst
 
-**Deze sessie (2026-08-21, sessie 42, ~1-2u builder-werk via gedeelde
-Chrome-browserautomatisering, na expliciete toestemming in de chat):**
-drie taken afgerond/bijgewerkt. (1) **P1-27** — Home-pagina TabBar
-"Tab Bar Scrollable" aan, bevestigd via verse export. (2) **P2-11** —
-categorie-tag-kleur van bordeauxrood naar het groen van
-uitgaanskrant.com (`#09B34A`) op de 2 bevestigde plekken
-(`TagCategorieComponent` + `HorecagelegenheidoverzichtKaart`),
-bevestigd via verse export + `flutter analyze` (geen nieuwe fouten).
-(3) **Concurrency-vondst bij sessiestart:** een andere/concurrente
-sessie (commit `d8bbba4`, waarschijnlijk Bob) had ondertussen zowel
-**P1-26** (gemeente-hartje op `HeaderButtonsComponent`) als **P0-9**
-(Home's kapotte Drupal-`display_3` → app-side workaround naar
-`services_3`) al afgerond — beide bevestigd in code/via curl en
-`TASKS.md` bijgewerkt (was nog stale, zie het "Nog open"-punt bij P1-7
-Tab 2 dat P1-26 als blocker noemde). **Niet gedaan deze sessie:** een
-live herverificatie van P1-24/P1-25 na de P0-9-fix — geen van beide
-lokale AVD's (`emulator-5554`/`5556`) bleek bereikbaar via `adb`
-ondanks dat de systemd-services "active running" tonen (alleen Bob's
-fysieke toestel meldde zich na een adb-server-restart); niet verder
-uitgezocht binnen de sessietijd, blijft open voor een volgende sessie
-met werkende emulator-toegang.
+**Deze sessie (2026-08-21, sessie 42, ~1-2u builder-werk +
+live-emulatoronderzoek via gedeelde Chrome-browserautomatisering +
+`mcp__android__*`, na expliciete toestemming in de chat):** twee
+builder-taken afgerond, plus stale-documentatie gecorrigeerd, plus
+nieuw onderzoek naar P1-24/P1-25.
+1. **P1-27** — Home-pagina TabBar "Tab Bar Scrollable" aan.
+2. **P2-11** — categorie-tag-kleur van bordeauxrood naar het groen van
+   uitgaanskrant.com (`#09B34A`) op de 2 bevestigde plekken
+   (`TagCategorieComponent` + `HorecagelegenheidoverzichtKaart`).
+   Beide eerst geverifieerd via losse `/tmp`-exports, **later alsnog
+   een echte `flutterflow export-code` in de projectrepo zelf gedaan**
+   (was aanvankelijk vergeten) + gecommit/gepusht (`7dd0707`) — pas
+   toen bleek via een live app-launch dat de fixes ook echt zichtbaar
+   waren (tags groen, tab-labels voluit).
+3. **Concurrency-vondst bij sessiestart:** een andere/concurrente
+   sessie (commit `d8bbba4`, waarschijnlijk Bob) had ondertussen zowel
+   **P1-26** (gemeente-hartje op `HeaderButtonsComponent`) als **P0-9**
+   (Home's kapotte Drupal-`display_3` → app-side workaround naar
+   `services_3`) al afgerond — beide bevestigd in code/via curl en
+   `TASKS.md` bijgewerkt (was nog stale).
+4. **P1-24/P1-25-herverificatie na Bob's hulp** (hij startte
+   `emulator-5554` en wees op zijn fysieke `K7V8DYTSMVTW6XBI`, zie ook
+   zijn losse vraag over `emulator-5556`'s incidentele crashes):
+   **P1-24's root cause definitief gevonden** (leeg `logo`-veld op
+   Drupal-content nid 214339, 2 widgets met een guard die niet ver
+   genoeg gaat — zie P1-24 hieronder, **niet** gelinkt aan P0-9 zoals
+   eerder gedacht). **P1-25 bleef onderzoek-technisch steken**: Home's
+   "Uitgaan"-tab reageerde niet meer op scroll-swipes (drie
+   verschillende methodes geprobeerd, geen effect), en vlak
+   daarna **crashte `emulator-5554` zelf** (systemd: `signal=SEGV`,
+   geheugenpiek 20GB) — mogelijk gerelateerd aan P1-24's
+   image-decode-burst, niet bevestigd. **Nieuw diagnoserecept
+   toegevoegd aan `CLAUDE.md`** (AVD-crash-diagnose via `journalctl
+   --user -u android-emulator*.service`, en een `adb logcat`-buffer-
+   valkuil die een misleidend "er gebeurt hier van alles"-beeld gaf).
+   Geen tijd meer gehad om `emulator-5554` na de crash opnieuw te
+   proberen of `emulator-5556`/het fysieke toestel in te zetten voor
+   P1-25 — blijft open voor een volgende sessie.
 
 **Vorige sessie (2026-08-20, laat, look&feel-review mobiel+tablet,
 code-only + live emulators `emulator-5554`/`emulator-5556`, geen
@@ -888,52 +905,70 @@ losse P1-taak; de resterende mysterie-crash staat nu apart als
   `launchURL()` aan met de kale placeholder-string als URL (geen geldig
   schema/host → crash).
 
-**P1-24 · Eigenaar: Onbepaald.** Onverklaarde `Invalid argument(s): No
-host specified in URI`-excepties — **zelfde foutmelding als het net
-afgeronde P1-15**, maar blijken **niet** door die fix verklaard: live
-herbevestigd 2026-08-15 (Claude, verse `ff-run-fvm.sh`-launch,
-emulator-5554) dat deze exceptie **6x achter elkaar direct bij Home's
-allereerste launch verschijnt, vóór enige gebruikersinteractie** —
-dus niet vanuit een `onTap`-knop-tik zoals bij alle bekende P1-15-
-plekken. **Sterke verdachte gevonden (2026-08-15, Claude, puur via
-`curl` op de API, geen emulator nodig):** zie de nieuwe **P0-9**
-hieronder — een van Home's category-secties (`display_id=display_3`)
-geeft een kapotte Drupal-Views-response terug
-(`["Display display_3 on view flutterflowmobiel1 could not be found"]`,
-een array met 1 losse string i.p.v. de verwachte lijst objecten).
-`HomeUitgaantabelKaartComponentWidget` (die deze sectie rendert, zie
-`home_uitgaantabel_kaart_component_widget.dart:132`) verwacht overal
-JSON-objecten met velden als `.logo`/`.categorie` — wat er precies
-gebeurt als `getJsonField` op een los string-element in de array
-losgelaten wordt (mogelijk een intern type-mismatch die zich uit als
-een kapotte/host-loze URI ergens verderop in de widget-boom) is nog
-niet 100% hard bevestigd met een stack trace, maar de timing (meteen
-bij Home's launch, geen tap nodig) en de aanwezigheid van precies 1
-kapotte Drupal-view op exact dezelfde pagina maken dit de meest
-waarschijnlijke oorzaak. **Volgende stap zodra P0-9 (Drupal-kant)
-gefixt is: opnieuw live testen of deze exceptie dan ook verdwijnt** —
-zo niet, dan alsnog het FIFO/`R`-recept of een gerichte `--route`-launch
-gebruiken om een verse volledige dump te vangen (de
-single-dump-per-proces-beperking uit `CLAUDE.md` verbruikte de
-stack trace deze sessie aan de ongerelateerde overflow van P1-25).
+**P1-24 · Eigenaar: Onbepaald.** **Root cause definitief gevonden
+2026-08-21 (Claude, sessie 42, na de P0-9-fix live herbevestigd) — de
+P0-9-link uit de oude analyse hieronder klopte niet.** Live op verse
+`flutter run -d emulator-5554` (dus mét `services_3`-fix) trad de
+exceptie nog steeds meteen op:
+```
+EXCEPTION CAUGHT BY IMAGE RESOURCE SERVICE
+ArgumentError: Invalid argument(s): No host specified in URI
+Image provider: CachedNetworkImageProvider("", scale: 1.0)
+```
+— een lege string, niet een kapotte URL. **Bevestigd via curl op
+`services_1`/`services_3` (Home-slider resp. Uitgaan-tab):** content-item
+**nid 214339 "RUE. Mini Zomerfestival 2 (The Action)"** heeft een
+daadwerkelijk **leeg `logo`-veld** in Drupal, en verschijnt in meerdere
+Home-secties tegelijk. Dit raakt **twee** widgets, allebei met een
+onvoldoende/ontbrekende guard (zelfde bekende `CachedNetworkImage`-patroon
+uit `CLAUDE.md`, maar dit keer met een guard die net niet ver genoeg gaat):
+1. [p_uitgaan_slider_kaart_component_widget.dart:147-148](lib/uitgaanspaginas/p_uitgaan_slider_kaart_component/p_uitgaan_slider_kaart_component_widget.dart:147) —
+   `Image.network(widget!.logo!, ...)`, **helemaal geen guard** (niet
+   eens een null-check).
+2. [home_uitgaantabel_kaart_component_widget.dart:246-259](lib/uitgaanspaginas/home_uitgaantabel_kaart_component/home_uitgaantabel_kaart_component_widget.dart:246) —
+   guard is `if (getJsonField(evenementenItem, r'''$.logo''') != null)`,
+   **checkt alleen op `null`, niet op lege string** — bij een leeg
+   (maar aanwezig) veld faalt de guard niet, en `CachedNetworkImage`
+   krijgt alsnog `''`.
+**Fix:** beide guards uitbreiden naar "Is Set and Not Empty"
+(zelfde recept als elders in `CLAUDE.md` — bij widget 2 de conditie
+aanvullen met een lege-string-check, bij widget 1 een nieuwe
+ConditionalBuilder/guard toevoegen, eventueel met de "image not
+supported"-Icon-ELSE-tak zoals het bestaande patroon). **Impact
+lager dan gedacht:** de app crasht hier niet hard op — Flutter's
+Image Resource Service vangt de exceptie zelf op en toont een
+fallback-icoon (het zwarte grijns-icoon zichtbaar op de "OOK
+LEUK"-kaart in de Home-carousel) i.p.v. de app te laten crashen. Wel
+een echte visuele bug (fout icoon i.p.v. foto) en genereert bij elke
+page-load een burst van ~40-65 "Failed to decode image"-regels in
+logcat (native `ImageDecoder`-fouten, niet zomaar onschuldig — zie de
+kanttekening bij P1-25 hieronder). **Nog niet gebouwd** — mechanische
+fix, klaar voor een volgende builder-sessie.
 
 **P1-25 · Eigenaar: Onbepaald.** Nieuwe RenderFlex-overflow gevonden
 2026-08-15 (Claude, live launch emulator-5554): "A RenderFlex
 overflowed by 129 pixels on the bottom", `Column`, in
 `lib/uitgaanspaginas/home_uitgaantabel_kaart_component/home_uitgaantabel_kaart_component_widget.dart:359`.
-Geen directe visuele crash op het eerste scherm (Home bleef verder
-bruikbaar), maar wel een echte layout-fout op de al vaker aangepaste
-`HomeUitgaantabelKaartComponent` (zie P1-19 — dat loste een ander,
-kale-Row-zonder-Wrap-probleem in hetzelfde bestand op, dit is een
-nieuw/apart punt). **Mogelijk dezelfde oorzaak als P1-24 hierboven**
-(de kapotte `display_3`-Drupal-view, zie het nieuwe **P0-9** —
-dit component rendert die sectie, en 1 array-element dat een losse
-string is i.p.v. een object past bij zowel een layout- als een
-URI-fout) — eerst P0-9 fixen en herlive-testen vóórdat hier los
-verder gezocht wordt. Nog geen stack trace met widget-boom-context
-gevangen (zelfde single-dump-beperking als P1-24 hierboven) — bij
-onderzoek eerst een hot-restart vlak vóór het tonen van deze
-component om een verse volledige dump te krijgen.
+**Onderzoek 2026-08-21 (Claude, sessie 42) niet afgerond — geen
+stack trace gevangen, wel een verontrustende bijvangst.** Na de
+P0-9-fix kon Home's "Uitgaan"-tab op emulator-5554 niet meer verder
+gescrold worden (swipe via zowel `mcp__android__swipe` als een kale
+`adb shell input swipe` had zichtbaar **geen enkel effect**, drie
+pogingen), dus P1-25's kaart (verderop in de lijst) kon niet bereikt
+worden om een verse dump te vangen. **Vlak daarna crashte
+`emulator-5554` zelf** (systemd: `Main process exited, code=dumped,
+signal=SEGV`, geheugen piekte naar **20GB** vlak vóór de crash — zie
+`journalctl --user -u android-emulator.service`). Volgorde: launch →
+(swipe werkt niet) → burst van tientallen "Failed to decode
+image"-fouten (zie P1-24) → emulator-crash. **Mogelijk verband tussen
+P1-24's herhaalde mislukte image-decodes en deze geheugenpiek/crash
+is niet bevestigd** (kan ook toeval/emulator-instabiliteit zijn, zie
+Bob's eigen ervaring dat deze AVD's af en toe uitvallen), maar de
+timing is verdacht genoeg om te vermelden. **Volgende stap:** eerst
+P1-24 fixen (goedkoop, mechanisch), daarna dit opnieuw proberen — als
+de scroll dan wél werkt en de emulator stabiel blijft, bevestigt dat
+het verband; zo niet, dan is P1-25 nog steeds een apart, ongevonden
+probleem.
 
 **P1-16 · Eigenaar: Bob (Firebase-koppeling is account-/builder-niveau,
 geen Claude-taak).** Geen crash-reporting/analytics (bv. Firebase