Sfoglia il codice sorgente

Afsluiting sessie 15 sep (avond): deploy-lijst PRIO 0 voor Bob, C14/8.3 op devbob geverifieerd; CLAUDE.md: Cloudflare-cache, zoek-filter, presave, tijdelijke uploads, plakwerk in brondata

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
bob 18 ore fa
parent
commit
5171a0a9f4
2 ha cambiato i file con 68 aggiunte e 2 eliminazioni
  1. 51 0
      CLAUDE.md
  2. 17 2
      TASKS.md

+ 51 - 0
CLAUDE.md

@@ -3415,6 +3415,57 @@ aantal round trips bij infinite scroll voor 0,01 s. Staat sinds die datum op
 `defaults['filter_groups']` op FALSE — **de pager erven ze wél**, dus dit is
 één wijziging op de Master voor alle zeven.
 
+**Cloudflare cachet sinds 2026-09-15 zes publieke endpoints 5 minuten aan de
+edge — reken daarmee bij élke meting én bij elke Drupal-deploy.** Rule
+"FlutterFlow publieke endpoints": `GET` zonder `SESS`-cookie op
+`flutterflowmobiel1.json`, `flutterflow_events.json`,
+`flutterflowmobiel_establishment_info.json`,
+`flutterflowmobiel_establishment_events.json`, `plaatsen.json` en
+`plaatsen_bij_gemeente.json`; Edge TTL 300 s, "Ignore cache-control" (de origin
+stuurt `no-store`). Gemeten: MISS 1,2 s → HIT 0,06–0,09 s. Drie gevolgen:
+- Een `_cb=`-cache-buster omzeilt Cloudflare **én** Drupal's page cache. Een
+  `_cb`-test bewijst dus dat de code klopt, maar zegt niets over wat de app
+  ziet — die krijgt tot 5 min het oude antwoord. Na een deploy: `cc all` **en**
+  de rule purgen.
+- `flutterflowmobiel_establishments.json` hoort er bewust **niet** in (filtert
+  per gebruiker op favorieten). Zet nooit een endpoint in de lijst dat een
+  sessie-afhankelijk antwoord geeft.
+- Basic-Auth-requests worden gewoon meegecachet (HIT gezien met `-u`), dus de
+  cache is gedeeld over alle bezoekers — precies de bedoeling voor deze data.
+
+**`flutterflowmobiel1` accepteert (na deploy van 2026-09-15) ook `zoek=`:** een
+hoofdletterongevoelige `LIKE` op `node.title`, gebouwd in
+`custom_views_query_alter()` naast `datum_van`/`datum_tot`, dus geldig op alle
+zeven displays. Op devbob geverifieerd (jazz → 3, qqqzzz → 0, apostrof veilig).
+Client-side zoeken op Home kan niet: de tabs zijn gepagineerd.
+
+**Een event zonder `plaats` is bijna altijd een kopieermoment-probleem, geen
+kapotte presave.** `custom_node_presave()` kopieert plaats/geo/adres van de
+horecagelegenheid **op het moment dat het event wordt opgeslagen**. Had de zaak
+toen nog geen `field_hor_municipality_town`, dan blijft het event leeg totdat
+het opnieuw wordt opgeslagen (`node_save()` via drush volstaat). Nagemeten
+2026-09-15: 14 willekeurige recente events en 50/50 op `services_1` hadden
+allemaal een plaats — ga dus niet in de module zoeken. De view leest `plaats`
+via `taxonomy_index`, en die wordt alleen voor **gepubliceerde** nodes gevuld.
+
+**Uploads via `bestand_upload/upload` zijn sinds 2026-09-15 tijdelijk
+(`status = 0`).** `file_save_data()` zet standaard `FILE_STATUS_PERMANENT`; de
+resource zet hem daarna terug op 0. `file_field_presave()` maakt het bestand
+permanent zodra `node_save()` het aan een veld hangt; `system_cron` verwijdert
+de rest na 6 uur (`DRUPAL_MAXIMUM_TEMP_FILE_AGE`). Een gebruiker die 6+ uur
+tussen uploaden en indienen laat, verliest dus zijn foto — bewust geaccepteerd.
+Let bij grote foto's op: de app stuurt base64 in een JSON-body (5 MB foto ≈
+7 MB POST), dus `post_max_size` moet daar boven zitten, en de mediakiezer in
+FlutterFlow kan met *Max Width/Height* vooraf verkleinen.
+
+**"Woorden plakken aan elkaar" in een omschrijving zit in de OPGESLAGEN body,
+niet in Views of `_custom_clean_html()`.** Bevestigd 2026-09-15: de rauwe body
+van nid 222090 bevat al `<p>Onderdeel vanElectronic` — er is geen tag die een
+spatie had kunnen worden. Het "Onderdeel van"+serienaam-patroon komt uit de
+importer; Bob's besluit: laten zitten. Diagnosestap die dit in één keer
+uitwijst: haal de node via `flutterflow_events.json?nid=…` op (die display
+maakt `body` niet schoon) en kijk of het plakwerk daar al in de HTML staat.
+
 **Views is niet de performance-bottleneck — gemeten 2026-09-14, voordat je een
 custom-module-endpoint bouwt om Views te vervangen.** 3x per endpoint met
 cache-buster op productie: een **custom** Services-resource die twaalf

+ 17 - 2
TASKS.md

@@ -113,7 +113,7 @@ builder aangeraakt**. Afgeronde punten verwijderen; per punt export-verifiëren.
   → staat nu op de P2-7-lijst.
 - **C13** Bronkeuze-sheet ("Choose Source / Gallery / Camera") + 46 velden →
   P1-17 bij livegang.
-- **C14 · ✅ GEMETEN 2026-09-15: uploads zijn PERMANENT (status 1).** Bob's
+- **C14 · ✅ FIX STAAT OP DEVBOB (Bob, 2026-09-15 23:10) — nog deployen + 9 wezen opruimen, zie PRIO 0.** Meting eerder die avond: uploads waren PERMANENT (status 1). Bob's
   query toonde 9 losse fids (5495517, 5495904–5495906, 5495993–5495997, 27 aug
   – 2 sep, testuploads zonder node) allemaal met `status = 1`, dus die blijven
   eeuwig staan. **Fix (Bob, `_custom_bestand_upload()` in
@@ -176,9 +176,23 @@ staat nu op **spacing 8 / runSpacing 8**.
 *Alles hieronder heeft jou nodig. De prio zegt hoe hard Claude erop wacht, niet
 hoe belangrijk het voor de app is.*
 
+**🔴 PRIO 0 — drie wijzigingen staan op devbob en moeten nog naar productie
+(sessie 2026-09-15 avond, alle drie door Claude op devbob geverifieerd):**
+- `custom.module`: het **`zoek`-blok** in `custom_views_query_alter()` (PRIO 1.2
+  hieronder) én `'inhoud'` in `$fields_to_clean` van het
+  `flutterflowmobiel1`/`services_1`-blok (P2-27b-bijvangst; devbob geeft nu 0
+  van 25 records met regeleindes, productie nog 145 van 200).
+- `custom.evenementen_aanmaken.inc`: `_custom_bestand_upload()` zet het bestand
+  nu op `status = 0` na `file_save_data()` (P2-29 C14).
+Na deploy: `drush @uitgaanskrant.com cc all` én de Cloudflare-rule "FlutterFlow
+publieke endpoints" purgen (5 min edge-cache, zie CLAUDE.md). Daarna de 9
+wees-fids opruimen met het `php-eval`-commando uit de chat van 15 sep (staat ook
+bij P2-29 C14). Meld het, dan meet Claude productie na en bouwt de app-kant van
+P2-26.
+
 **🔴 PRIO 1 — hier loopt Claude op vast, twee van de vier 🚀-taken staan stil**
 
-1. **Twee exposed datumfilters op `flutterflowmobiel1`** (voor P2-1):
+1. ~~Twee exposed datumfilters op `flutterflowmobiel1`~~ ✅ gedaan (P2-1 is af). Oud:
    één *Is greater than or equal to* met identifier **`datum_van`**, één
    *Is less than or equal to* met identifier **`datum_tot`**, beide op
    `field_date_value`. Let op: "Is between" geeft één identifier met
@@ -284,6 +298,7 @@ de bron en zijn met tag-vervanging niet te raken.
 - ~~Fix aan de bron (importer)~~ en ~~bestaande nodes repareren~~ — **Bob
   2026-09-15: maakt niet uit / doen we niet.** Alleen de bijvangst hieronder
   blijft: `'inhoud'` toevoegen aan `$fields_to_clean` in het **eerste** blok van
+  — **✅ op devbob gedaan (Bob 23:10, Claude nagemeten: 0/25 met regeleindes), nog deployen** —
   `custom_services_request_postprocess_alter()` — de `if` op
   `$args[0] == 'flutterflowmobiel1' && $args[1] == 'services_1'` (de
   commentaarkop erboven zegt misleidend "establishment-info").