Ver código fonte

TASKS.md: P0-5 header-bijvangst afgerond (0 treffers meer, Drupal-hoofdpunt blijft open bij Bob); P1-15's 5 social-knoppen afgerond (incl. omgekeerde-operator-fix op urluk), 3 losse audit-plekken (Menukaart/2x Website) blijven open; verouderde pogingsgeschiedenis opgeruimd

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
bob 1 mês atrás
pai
commit
d2bed91207
1 arquivos alterados com 24 adições e 70 exclusões
  1. 24 70
      TASKS.md

+ 24 - 70
TASKS.md

@@ -366,26 +366,13 @@ P1-18) — Tab 3 haalt live data op via `FavorietenAgendaCall`. Uit deze
 lijst verwijderd.)*
 
 **P0-5 · Eigenaar: Bob.** Drupal: anonieme leestoegang onderzoeken
-voor browse-endpoints. Drupal-niveau, geen Claude-taak. **Bijvangst
-2026-08-12 (Claude, code-audit):** alle API-calls in `api_calls.dart`
-(o.a. `EstablishmentInfoCall`, `EstablishmentsCall`) sturen een
-**hardcoded Basic-Auth-header mee** (`Authorization: Basic
-Ym9iOnNlcmhpaQ==`, decodeert naar `bob:serhii`) — dit staat letterlijk
-in de gecompileerde APK en is dus met een gratis decompiler
-(bv. `jadx`) door iedereen uit te lezen. **Verduidelijkt door Bob
-(2026-08-12): dit account is alleen nodig voor de
-`devbob.uitgaanskrant.com`-omgeving (dev/staging zit achter een
-username/wachtwoord-poort) — tegen de productie-URL
-(`uitgaanskrant.com`, wat de app daadwerkelijk aanroept) doet de header
-niets schadelijks, geeft geen foutmelding, is dus effectief dood
-gewicht daar.** Praktisch gevolg: minder urgent dan eerder
-ingeschat (geen live-productie-credential-lek), maar nog steeds het
-opruimen waard — een onnodige hardcoded header die alsnog een
-dev-omgevingswachtwoord blootlegt zodra iemand de APK decompileert, en
-die zonder functie is zodra de app alleen tegen productie draait.
-**Vers herbevestigd 2026-08-13 (Claude, grep):** nog steeds 15
-treffers van deze exacte header in `api_calls.dart` — geen voortgang,
-taak blijft valide.
+voor browse-endpoints. Drupal-niveau, geen Claude-taak — nog open.
+*(Bijvangst afgerond 2026-08-14, live pair-sessie: de hardcoded
+Basic-Auth-header (`Authorization: Basic Ym9iOnNlcmhpaQ==`,
+decodeert naar `bob:serhii`, alleen nodig voor de
+`devbob.uitgaanskrant.com`-dev-omgeving) is nu uit alle 15 API-calls in
+`api_calls.dart` verwijderd via de Headers-tab per call — bevestigd via
+verse export: 0 treffers meer.)*
 
 *(P0-7 afgerond 2026-08-13 avond — Bob, Drupal-kant: de kapotte
 `flutterflowmobiel_establishment_info`-Views-`display` (`services_1`)
@@ -586,22 +573,30 @@ gezien de omvang hieronder (~45 treffers); pak het file-voor-file op.
   aanpassen lost daar de crash niet op, alleen de zichtbare tekst als
   hij (na de P1-15-fix) wél verborgen wordt.
 
-**P1-15 · Eigenaar: Bob (builder — Claude geblokkeerd, zie hieronder).** Kapotte zichtbaarheids-conditie op de social-/
-contact-knoppen laat de app **crashen** bij tikken (niet alleen lelijke
+**P1-15 · Eigenaar: Bob.** Kapotte zichtbaarheids-conditie op de social-/
+contact-knoppen liet de app **crashen** bij tikken (niet alleen lelijke
 tekst) — **vermoedelijke verklaring voor de herhaalde
 `Invalid argument(s): No host specified in URI`-excepties** die
 2026-08-07 in de live `flutter run`-log van de andere sessie
 verschenen (naast de al bekende P1-13-overflows, niet met elkaar
 verwarren — twee losse foutmeldingen in dezelfde log).
-- **Root cause bevestigd (code-niveau,
-  `lib/evenement/evenement_horecagelegenheid/evenement_horecagelegenheid_widget.dart`):**
-  de Facebook- (r. 812-829), Instagram- (879-896), Twitter- (~946-961),
-  Website- (1010-1027) en urluk-knop (1077-1094) zijn elk gewrapt in
+
+*(De oorspronkelijke 5 knoppen zijn afgerond 2026-08-14 — live
+pair-sessie, Bob builder, bevestigd via verse export: Facebook,
+Instagram, Twitter, Website en urluk op
+`evenement_horecagelegenheid_widget.dart` staan nu allemaal op
+`EstablishmentInfoCall.establishment<Veld>(...) != null && ... != ''`
+i.p.v. de kapotte `valueOrDefault`-conditie. Onderweg 1x dezelfde
+omgekeerde-operator-fout gevonden en gecorrigeerd op urluk als bij
+P0-8 die dag. **3 restpunten uit de bredere audit hieronder blijven
+open** — dit zijn andere bestanden/knoppen, niet meegenomen in deze
+ronde.)*
+- **Root cause (destijds, voor de context):**
   `if (valueOrDefault<String>(<veld>, '<placeholder>') != null &&
   valueOrDefault<String>(...) != '')`. Omdat `valueOrDefault` bij een
   lege/ontbrekende bron altijd de placeholder-tekst teruggeeft (nooit
-  `null`/`''`), is deze conditie **altijd waar** — de knop is dus altijd
-  zichtbaar én tikbaar, ook zonder échte link. Bij tikken roept
+  `null`/`''`), was deze conditie **altijd waar** — de knop dus altijd
+  zichtbaar én tikbaar, ook zonder échte link. Bij tikken riep
   `onTap` `launchURL(valueOrDefault<String>(...))` aan
   (`lib/flutter_flow/flutter_flow_util.dart:61`, `Uri.parse(url)` →
   `launchUrl(uri)`) met de kale placeholder-string (bv. `'facebook'`,
@@ -609,14 +604,7 @@ verwarren — twee losse foutmeldingen in dezelfde log).
   crash. Hetzelfde broken-guard-patroon staat ook op de Telefoon-tekst
   (r. 571-588) maar die crasht niet (geen `launchURL`, alleen
   `Text`) — daar is het wél puur het P1-6-cosmetica-probleem.
-- **Fix (builder):** op elk van de 5 knoppen de Visibility/If-conditie
-  **niet** tegen de `valueOrDefault`-uitkomst laten toetsen, maar tegen
-  het **rale API-veld zelf** (dezelfde JSON Path-expressie als de
-  Image-URL-fix in `CLAUDE.md`, operator **"Is Set"** i.p.v.
-  `!= null && != ''`) — zelfde patroon als het al gedocumenteerde
-  `CachedNetworkImage`-fix-recept. Zonder deze fix blijft ook een
-  betere Default-Value-tekst (P1-6) een tikbare crash-knop.
-- **Bredere codebase-audit afgerond (2026-08-13, Claude, `grep` op alle
+- **Nog open — 3 losse plekken uit de bredere audit (2026-08-13, Claude, `grep` op alle
   `launchURL(`-aanroepen buiten `lib/flutter_flow/`) — scope is groter
   dan de 5 al bekende knoppen, en erger op 2 nieuwe plekken (géén
   guard, zelfs niet de kapotte):**
@@ -675,40 +663,6 @@ verwarren — twee losse foutmeldingen in dezelfde log).
     Home-vervolgpagina) via `evenement_info_widget.dart:268` hierboven —
     dat verklaart het waargenomen symptoom net zo goed zonder een aparte
     Home-specifieke plek nodig te hebben. Niet verder gezocht.
-- **Poging door Claude (2026-08-09 avond), geblokkeerd op
-  Widget-Tree-coördinaten — geen wijziging aangebracht.** Component
-  `EvenementHorecagelegenheid` geopend, maar de 5 knoppen (diep genest
-  onder TabBar → TabBarPageInfo) bleken niet betrouwbaar te bereiken:
-  klik-coördinaten op een zichtbare tree-rij selecteerden herhaaldelijk
-  een andere rij, en de offset was **niet constant** (eerste meting
-  +42px, twee stappen later +21px) — dus geen vaste correctie toe te
-  passen zoals CLAUDE.md's kalibratietruc suggereert. De "Search for
-  widget..."-zoekbalk in het paneel pakte maar één keer focus (na een
-  klik op het "collapse"-icoontje ernaast), en zelfs toen gaf zoeken op
-  `Facebook` geen enkel resultaat (wijst erop dat de knoppen intern
-  niet zo genoemd zijn — zoek in de builder dus niet blind op die
-  letterlijke naam).
-- **Poging door Bob (2026-08-10 avond), alle 5 knoppen ingesteld —
-  bleek bij verse export toch niet toegepast.** Bob zette op alle 5
-  knoppen de conditie om (naar eigen zeggen), maar een export vlak
-  erna toonde voor in ieder geval de Facebook-knop nog exact het oude
-  patroon (`valueOrDefault<String>(EstablishmentInfoCall.establishmentFacebook(...), 'facebook') != null && ... != ''`,
-  regel 812 van `evenement_horecagelegenheid_widget.dart`) — dus de
-  edit hield niet vast, zelfde "ziet er goed uit in de builder maar
-  komt niet door" patroon als eerder bij P0-3 punt 1. **Nuttige
-  precisering deze sessie:** de Facebook-waarde komt hier niet via een
-  Component Parameter binnen, maar rechtstreeks uit een API-call die
-  dit component zelf al draait (`EstablishmentInfoCall.establishmentFacebook(columnEstablishmentInfoResponse.jsonBody)`)
-  — dus geen Component-Parameter-Default-Value-omweg nodig. Bind First
-  Value in de Visibility-conditie direct aan die API-call-respons (in
-  de builder waarschijnlijk zichtbaar als een bronnaam als
-  "columnEstablishmentInfoResponse"/"Establishment Info Response" →
-  veld "Facebook"), operator **"Is Set and Not Empty"**, zonder de
-  `valueOrDefault`-wrap. Bob gaat hier zelfstandig mee verder. **Tip
-  voor de volgende poging:** ná het instellen even wegnavigeren en de
-  conditie opnieuw openen om te bevestigen dat hij écht bewaard is,
-  vóórdat je naar de volgende knop gaat — dat had dit keer de vroege
-  ontdekking gescheeld.
 
 **P1-16 · Eigenaar: Bob (Firebase-koppeling is account-/builder-niveau,
 geen Claude-taak).** Geen crash-reporting/analytics (bv. Firebase