Browse Source

Staande regel: Claude verwijdert niets + P0-12/P2-6 concreter gemaakt

CLAUDE.md: opruimen/weggooien is altijd Bob-werk — geen componenten of
pagina's uit de builder, geen git rm, ook niet bij aantoonbaar dode code.
Claude levert hooguit de geverifieerde lijst.

P2-7 dienovereenkomstig op Bob's naam gezet.

P0-12: exacte plek van het gemeentehartje erbij (Row op regel 337 van
select_state_drop_down_component, i18n-sleutel nosgkxy0, flag/unflag-
endpoints), plus twee nieuwe bevindingen: het label is statisch — het
zegt ook "Toevoegen favoriet" als het hartje juist verwijdert — en er
staat geen Visibility-conditie op die Row.

P2-6: afgesproken dat het widget-invoeg-experiment eerst op
HorecagelegenhedenOverzichtCopy gebeurt, niet op de live pagina en niet
op Copy2 (dat is het vangnet).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
bob 1 week ago
parent
commit
bfe82935a1
2 changed files with 57 additions and 5 deletions
  1. 9 0
      CLAUDE.md
  2. 48 5
      TASKS.md

+ 9 - 0
CLAUDE.md

@@ -2560,6 +2560,15 @@ exacte veldnaam+type-specificatie (kost hem seconden per veld).
 
 ## Samenwerken met Bob
 
+- **⚠️ Claude verwijdert NOOIT iets — staande regel, Bob expliciet
+  2026-09-04.** Geen componenten of pagina's weggooien in de builder,
+  geen `git rm`, geen bestanden verwijderen, ook niet als ze aantoonbaar
+  dood zijn én Claude ze zelf als dood heeft geïnventariseerd. Opruimwerk
+  hoort **altijd** op Bob's naam in `TASKS.md`; Claude levert hooguit de
+  geverifieerde lijst + de reden per regel. Dit geldt ook wanneer Bob in
+  een eerder bericht van dezelfde sessie "ja" zei tegen iets anders —
+  toestemming voor bouwen is geen toestemming voor weggooien.
+
 - Bob is de enige developer/eigenaar, werkt vaak **zelf gelijktijdig**
   in dezelfde builder-sessie. Neem niet aan dat elke wijziging van jou
   komt.

+ 48 - 5
TASKS.md

@@ -920,6 +920,36 @@ meer geïmporteerd, dus vrij om weg te gooien, zie P2-7.
    dat je die gemeente **donderdags in de agendamail** krijgt.
    Geverifieerd met `grep`: geen enkele treffer op "agendamail" /
    "donderdag" in `lib/`. Dat verband is dus nergens zichtbaar.
+   *(Claude heeft de homepage van uitgaanskrant.com opgehaald en
+   doorzocht op "agendamail"/"donderdag"/"nieuwsbrief" — 0 treffers, de
+   zin staat blijkbaar op een dieper liggende pagina of achter login.
+   **Bob moet de exacte zin aanleveren**, die verzint Claude niet.)*
+
+**Exacte plek en stand (Claude, 2026-09-04, verse export):**
+`lib/selecteer_plaats/select_state_drop_down_component/select_state_drop_down_component_widget.dart`
+— de `Row` op regel **337**, direct ónder de gemeente-dropdown, met twee
+kinderen: een `Text` (regel 341, i18n-sleutel **`nosgkxy0`** =
+"Toevoegen favoriet") en een `Builder` (regel 358) die op
+`FFAppState().favorieteGemeenteIds.contains(gemeenteSelectId)` wisselt
+tussen een gevuld en een outline hartje. Beide takken doen een
+`drupalRequest POST` naar
+`/nl/flutterdrup/favorieten/flag.json` resp. `unflag.json` met
+`{"entity_id": <gemeenteSelectId>, "entity_type": "taxonomy_term"}`.
+Het component zit op de pagina `Selectprovinciegemeente`.
+
+**Twee dingen die daarbij opvielen en niet in de oorspronkelijke
+taakomschrijving stonden:**
+- **Het label is statisch.** De `Text` staat búiten de `Builder`, dus er
+  staat óók "Toevoegen favoriet" wanneer de gemeente al favoriet ís en
+  het hartje bij tikken juist *verwijdert*. Dat is precies het soort
+  dubbelzinnigheid dat P0-12 wilde oplossen. Wil je het echt netjes:
+  het label mee laten wisselen ("Gemeente volgen" / "Je volgt deze
+  gemeente"), wat betekent dat de `Text` de `Builder` in moet.
+- **Er staat geen enkele Visibility-conditie op die `Row`.** Hij is dus
+  ook zichtbaar vóórdat er een gemeente gekozen is (`gemeenteSelectId`
+  nog leeg) en zonder ingelogd te zijn — een tik verstuurt dan een
+  `flag.json`-POST met een lege `entity_id` en lege sessiewaarden.
+  Nog niet live nagespeeld, dus niet bevestigd wat de server dan doet.
 
 ## Minor — non-blockers (launch mag hier niet op wachten)
 
@@ -1056,7 +1086,7 @@ parameter op `HorecagelegenheidoverzichtCall` (voorheen
 '17967'` i.p.v. de crashende `horcat ??= null!;`. Uit deze lijst
 verwijderd.)*
 
-**P1-5 · Eigenaar: Bob.** "Thuis bezorgen" koppelen aan een echt
+**P1-5 · Eigenaar: Bob — bezig (sessie 2026-09-04a, Drupal/infra-blok, Claude regisseert).** "Thuis bezorgen" koppelen aan een echt
 leverbaar-veld per horecagelegenheid. Wacht op Bob: eerst het
 API-endpoint aan Drupal-kant configureren. Daarna tonen/verbergen op
 basis van het echte veld i.p.v. de huidige dode tap.
@@ -1234,7 +1264,7 @@ bewust uitgelaten, zie P2-10). Bevestigd via verse export:
 in `pubspec.yaml`, Firebase-init in `main.dart`. Uit deze lijst
 verwijderd.)*
 
-**P1-30 · Eigenaar: Bob (Cloudflare/infra-niveau, geen Claude-taak).**
+**P1-30 · Eigenaar: Bob — bezig (sessie 2026-09-04a, Drupal/infra-blok). (Cloudflare/infra-niveau, geen Claude-taak.)**
 API-misbruik beperken voor de publieke Drupal-backend. **Besproken
 2026-08-25 (chat, n.a.v. FlutterFlow's App Check-toggle):**
 - **Firebase App Check overgeslagen** — beschermt alleen Firebase-
@@ -2034,7 +2064,7 @@ via verse export: alle 4 IconButtons in
 `header_buttons_component_widget.dart` gebruiken nu identiek
 `fillColor: Color(0xFFB50808)`. Uit deze lijst verwijderd.)*
 
-**P1-29 · Eigenaar: Bob (Drupal-content, geen Claude-taak — vermoedelijk
+**P1-29 · Eigenaar: Bob — bezig (sessie 2026-09-04a, Drupal/infra-blok). (Drupal-content, geen Claude-taak — vermoedelijk
 al gefixt voor nieuwe content, oude content mogelijk permanent
 beschadigd).** Her-bevestigd 2026-08-20 (Claude, look&feel-review, live
 op zowel `emulator-5554` als `emulator-5556`): letterlijke `?`-tekens
@@ -2084,7 +2114,7 @@ in Drupal, geen uitputtende audit.
 
 ## P2 — features & concept, na livegang
 
-**P2-1 · Eigenaar: Bob — testen in de API, komt terug.** Datum-filter:
+**P2-1 · Eigenaar: Bob — bezig (sessie 2026-09-04a, Drupal/infra-blok; testen in de API).** Datum-filter:
 Vandaag / Dit weekend / Deze week.
 
 **P2-2 · Eigenaar: Onbepaald, bewust v2 (herbevestigd 2026-08-25 door
@@ -2371,6 +2401,17 @@ Claude, code-only op een verse `flutterflow export-code`. Uitkomst:**
   helemaal niet aangeraakt**: 6 intacte tabs, 0 `fetchAlleHorecagelegenheden`-
   aanroepen, 0 `TextFormField`s, en zijn model heeft géén `alleXxx`/
   `zoekterm`-velden. Daar moet stap 1/2 dus nog volledig gebeuren.
+- **Afspraak met Bob (2026-09-04): eerst op een kopie testen, niet op de
+  live pagina.** Gebruik **`HorecagelegenhedenOverzichtCopy`** als
+  proefkonijn — dat is de wegwerp-kopie. Níet `Copy2`/`Copy2Copy`: dat is
+  de intacte momentopname waaruit het herstel van 2026-09-01 is afgeleid
+  en dus het vangnet als er weer iets sneuvelt. Volgorde: (a) op `Copy`
+  een `TextField` toevoegen aan de `Column` binnen één tab's `TabBar
+  Page` en met een verse export controleren of de bestaande
+  `StaggeredView`/kaartbindingen blijven staan; (b) pas als dat 2x
+  achtereen goed gaat, hetzelfde op de live pagina; (c) gaat het op
+  `Copy` al mis, dan is de bug gereproduceerd zonder schade en stopt het
+  daar — melden bij Bob i.p.v. doorproberen.
 - **Advies voor de volgende builder-sessie:** het herstel is af, dus
   stap 3/4/6 kan meteen. Als het toevoegen van widgets aan deze pagina
   opnieuw kapotgaat, is `Copy2` een kant-en-klaar alternatief om op
@@ -2409,7 +2450,9 @@ establishmentPlaats` resp. `EvenementCall.eventAdres/eventPlaats`),
 horeca-blok bij stadsactiviteiten op `EventCurrent`) blijft bewust
 liggen tot Bob erop terugkomt — geen eigen taak-ID.)*
 
-**P2-7 · Eigenaar: Bob.** Opschonen:
+**P2-7 · Eigenaar: Bob — Claude gooit hier niets weg (Bob expliciet,
+2026-09-04).** Claude mag deze lijst wél verifiëren en actueel houden;
+het daadwerkelijke verwijderen doet Bob zelf. Opschonen:
 
 **⚠️ Verse, complete inventarisatie 2026-09-04 (Claude, code-only op een
 verse export in de projectmap). Vervangt de losse, deels achterhaalde