Forráskód Böngészése

P0-6 afronding + P1-13/P1-7/P0-hintText sessienotities: eerdere sessie had niet gecommit (afsluitroutine gemist)

- P0-6: 5 debug-navigatieknoppen op Login verwijderd, live geverifieerd op telefoon+tablet
- P1-18: root cause + fix voor login-crash/sessie-niet-opgeslagen gedocumenteerd
- P1-13: overflow-onderzoek (hypothese weerlegd, stack-trace-beperking gedocumenteerd)
- P1-7: favorieten-scope + App State-blokkade gedocumenteerd
- .gitignore: .claude/-uitsluiting hersteld (export had 'm overschreven)
- iOS pbxproj: UUID-churn van export (geen functionele wijziging)

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
bob 1 hónapja
szülő
commit
6352bb6fd3
3 módosított fájl, 90 hozzáadás és 19 törlés
  1. 25 0
      CLAUDE.md
  2. 61 15
      TASKS.md
  3. 4 4
      ios/Runner.xcodeproj/project.pbxproj

+ 25 - 0
CLAUDE.md

@@ -622,6 +622,31 @@ eerst hier verder zoeken vóór blind te herhalen wat hierboven al niet
 werkte, en anders vroeg overdragen aan Bob i.p.v. tijd te verliezen
 (kostte deze sessie ~1,5 uur zonder resultaat).
 
+**"+ Add App State Variable"/"+ Add App Constant"-knop reageert niet
+op Claude's klikken (2026-08-09).** Op zowel `?tab=appValues&appValuesTab=state`
+als `...=constant` (bereikbaar via ⌘+K → typ een bestaande App
+State-naam → Enter, betrouwbaarder dan de linker-navigatierail
+klikken — zie hieronder): een klik op de knop opent **geen dialoog**,
+voegt **geen rij toe** (geverifieerd via de paneel-eigen zoekbalk erna
+— 0 resultaten), en blind doortypen na de klik komt nergens terecht.
+6+ pogingen (directe klik, exacte pixel-herpositionering op zowel
+tekst als "+"-icoon, klik+wachten 2s, klik+blind-typen) — geen
+resultaat, geen zichtbare foutmelding. Navigeren tussen "App State"/
+"Constants" in de linkerrail en het zoekveld typen werkten in dezelfde
+sessie wél probleemloos, dus dit is geen algemene klik-doodheid van de
+pagina, specifiek deze twee "Add"-knoppen. **Los probleem:** mogelijk
+gerelateerd aan de bekende `Confirm`-freeze-patronen elders in dit
+bestand, maar hier verscheen zelfs geen gedeeltelijke dialoog om
+vast te lopen — niets gebeurde. Ook: de rij-`✏️`-edit-iconen op
+bestaande App State-velden reageerden even onbewogen. **Nog niet
+geprobeerd:** browser-zoom (blijkt via keyboard-shortcut geblokkeerd,
+"page zoom keyboard shortcuts are not supported" — alleen de
+`zoom`-tool voor screenshots, niet de pagina zelf); Bob's eigen
+browser (geen bekende clipping daar). **Vuistregel voor volgende
+sessie:** nieuwe App State-velden/Constants zijn voor Claude niet
+zelfstandig toe te voegen — na 1-2 pogingen overdragen aan Bob met
+exacte veldnaam+type-specificatie (kost hem seconden per veld).
+
 ## Domein/architectuurcontext
 
 - **Taal/locale volgt het toestel, niet hardcoded Nederlands** — zonder

+ 61 - 15
TASKS.md

@@ -451,13 +451,63 @@ nl-NL` (betrouwbaardere per-app-locale-override dan de systeembrede
 emulator niet altijd doorwerkte zonder reboot) kwam de tekst meteen
 terug — bevestigt dat dit puur een vertaalprobleem is, geen widget-bug.
 
-**P1-7 · Eigenaar: Bob.** Account/profielscherm (wachtwoord wijzigen,
-uitloggen, account verwijderen). Bovenop de login/favorieten-P0-basis.
-Account verwijderen heeft mogelijk AVG-implicaties aan Drupal-kant.
-**Let op prioriteit:** dit is niet alleen "nice to have" — Apple's App
-Store Review Guideline 5.1.1(v) eist dat een app die accountaanmaak
-aanbiedt ook **in-app accountverwijdering** aanbiedt; zonder dit
-scherm is een iOS-store-submissie een blokkade, niet alleen P1.
+**P1-7 · Eigenaar: Claude — bezig (2026-08-09).** Favorieten-pagina +
+profielscherm — Bob heeft de scope + designbeslissingen 2026-08-09
+gegeven, absorbeert ook het oude P2-8 (gemeente-favoriet). **Belangrijke
+bevinding vooraf (code-audit, niet eerder gedocumenteerd):** de
+3-tabblad-structuur op `FavorietenWidget` bestaat al (`Persoonlijke
+agenda`/`Favoriete gemeenten`/`Favoriete Gelegenheden`), maar **alle 3
+tabs zijn pure placeholder-tekst — geen enkele API-call/FutureBuilder**.
+Én: het hartje op zowel de horeca-overzichtskaart als de
+horeca-detailpagina is een kale `print('IconButtonFavoriet pressed
+...')`-stub (`horecagelegenheidoverzicht_kaart_widget.dart:334`,
+`horecagelegenheid_current_widget.dart:364`) — **er bestaat nergens in
+de codebase een POST/toggle-call om een favoriet daadwerkelijk op te
+slaan**, alleen de GET-only `FavorietenAgendaCall` (ondanks de naam:
+geeft favoriete horecagelegenheden terug, geen agenda/events). De
+eerdere P0-4-aantekening "hartje... af" klopte dus alleen voor het
+zichtbare icoon, niet voor de functionaliteit erachter.
+
+**Bob's beslissingen (2026-08-09):**
+1. Favorieten (zowel horeca als gemeenten) worden **Drupal-gesynchroniseerd**,
+   niet puur lokaal — sync bij app-start én direct na elke
+   toevoegen/verwijderen-actie. Lokale opslag (`FFAppState`/
+   secureStorage) blijft daarnaast nodig als cache/snelle UI-state.
+2. "Persoonlijke agenda" (tab 1) = events in de door de gebruiker
+   **gefavoriete gemeente(n)** (niet de her-toegekende naam "agenda" op
+   de bestaande horeca-GET-call — dat is een aparte, nog te bouwen
+   view).
+3. "Gebruiker"-tab = het oude P1-7-scope (wachtwoord wijzigen,
+   uitloggen, account verwijderen), nu als tab i.p.v. aparte pagina.
+   Account verwijderen heeft mogelijk AVG-implicaties aan Drupal-kant.
+   **Let op prioriteit:** Apple's App Store Review Guideline 5.1.1(v)
+   eist in-app accountverwijdering voor een app met accountaanmaak —
+   zonder dit scherm blokkeert een iOS-submissie, niet alleen P1.
+
+**Open vraag aan Bob (blokkeert het schrijf-/sync-gedeelte):** bestaat
+er al een Drupal-endpoint om een favoriet (horeca of gemeente) toe te
+voegen/verwijderen voor een ingelogde gebruiker (bv. Flag-module of een
+custom Services-resource), of moet dat nog gebouwd worden? Zonder
+endpoint-naam/-vorm kan Claude alleen de lokale kant (state, UI,
+hartje-toggle-optimistic-update, logout) bouwen, niet de sync.
+**Onbelemmerd te bouwen, ongeacht antwoord:** `FFAppState`-velden voor
+lokale favorieten-lijsten (gemeenten + horeca), hartje-toggle die lokaal
+al werkt (optimistic UI), uitloggen op de Gebruiker-tab (geen backend
+nodig — alleen `FFAppState`-sessievelden wissen + terug naar Login).
+
+**Geblokkeerd voor Claude (2026-08-09), klein klusje voor Bob:** de
+"+ Add App State Variable"-knop (`?tab=appValues&appValuesTab=state`)
+reageert niet op Claude's klikken — geen dialoog, geen nieuwe rij, 6+
+pogingen zonder resultaat (zie `CLAUDE.md` voor details). **Bob: graag
+deze 2 App State-velden zelf toevoegen** (kost seconden in eigen
+browser):
+1. `favorieteGemeenteIds` — type `List<String>` (gemeente-ID's, zelfde
+   ID-vorm als `gemeenteSelectId`/`gemeentelijst`), Persisted: true.
+2. `favorieteHorecaNids` — type `List<String>` (horeca-`nid`'s, zelfde
+   vorm als `FavorietenAgendaCall.establishmentNid`), Persisted: true.
+
+Zodra deze 2 velden bestaan kan Claude verder (hartje-toggle, tab-content
+vullen) — de rest van de bouw hangt hier niet losstaand van vast.
 
 **P1-12 · Eigenaar: Bob (builder, gegenereerde code niet lokaal te
 fixen).** `EventCurrent` crasht direct (Null check operator used on a
@@ -795,11 +845,7 @@ code).
   wordt nergens meer aangeroepen — dode API-call-definitie (gevonden
   bij de P1-10-performance-audit 2026-08-05).
 
-**P2-8 · Eigenaar: Onbepaald.** Hartje-tap-actie op de getoonde
-gemeente-/provincienaam (favoriete plaats maken/markeren) — losgemaakt
-van P0-3 (2026-08-05, Bob: te veel voor de eerste release). Naam wordt
-inmiddels al getoond op de meeste pagina's via `HeaderButtonsComponent`
-(zie P0-3); dit punt is puur de hartje-tap-functionaliteit erbovenop.
-Hing af van de `FavorietenAgenda`-403-fout — die bleek onderdeel van
-de login-sessie-bug, root cause gevonden + functioneel gefixed
-(2026-08-09, zie P0-4/P1-18). Kan nu opgepakt worden.
+**P2-8 · Opgegaan in P1-7 (2026-08-09).** Hartje-tap op gemeente-/
+provincienaam om te favorieten is nu onderdeel van de bredere
+Favorieten-pagina/profielscherm-taak — zie P1-7 hierboven voor scope en
+status.

+ 4 - 4
ios/Runner.xcodeproj/project.pbxproj

@@ -44,8 +44,8 @@
 		97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
 		97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
 		97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
-		6436409E27A31CD600820AF7 /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/InfoPlist.strings; sourceTree = "<group>"; };
-		6436409427A31CDF00820AF7 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
+		6436409A27A31CD500820AF7 /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/InfoPlist.strings; sourceTree = "<group>"; };
+		6436409F27A31CD500820AF7 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
 		97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
 /* End PBXFileReference section */
 
@@ -225,8 +225,8 @@
 		6436409C27A31CD800820AF7 /* InfoPlist.strings */ = {
 			isa = PBXVariantGroup;
 			children = (
-				6436409E27A31CD600820AF7 /* nl */,
-				6436409427A31CDF00820AF7 /* en */,
+				6436409A27A31CD500820AF7 /* nl */,
+				6436409F27A31CD500820AF7 /* en */,
 			);
 			name = InfoPlist.strings;
 			sourceTree = "<group>";