# Plan: naar TestFlight, en de testfeedback afmaken

> **Status:** ✅ Live (gebouwd, bereikbaar op genoemde route) · 🟡 Gedeeltelijk (werkt, met benoemd gat) · 🔧 In uitvoering · 📋 Gepland (met fase) · 💤 Bewust uitgesteld / non-goal

Peildatum **27 juli 2026**. Opdracht van de eigenaar: de app op TestFlight krijgen en
zo ver mogelijk afmaken met de bestaande testfeedback, **zonder nieuwe dingen erbij te
bouwen**. Dit document is het plan; de losse acties voor de eigenaar staan in
[../acties/index.html](../acties/index.html).

## De bevinding die dit plan bepaalt

**Acht van de twaalf tickets in Todo hebben hun fix al op `main`.** Ze staan in Todo
omdat ze na de deploy niet zijn doorgezet, of omdat een her-test tegen een **oudere
build** liep.

Het scherpste voorbeeld is TEN-131: de her-test van 26 juli zegt *"gaat de maand maar
tot 28 dagen"*, terwijl `fix/ten-131-dag-31` (`d91be0d1`) al op `main` staat en de
dag-kiezer inmiddels een dropdown 1..31 is
(`add_subscription_sheet.dart:397`). Dat is geen codeprobleem maar een
**sequentie**probleem: er is hertest zonder dat de fix op het toestel stond.

Gevolg voor de aanpak: de grootste stap vooruit is **een build op de testtoestellen en
een gestructureerde her-testronde** — niet meer code schrijven.

### Wat waar staat

| Ticket | Fix op `main`? | Wat het nodig heeft |
|---|---|---|
| TEN-43 | ✅ `a5650b41` + laag 2 | build + hertest |
| TEN-120 | ✅ `caeea4c7` + fase A/B | build + hertest, **en splitsen** (zie B3) |
| TEN-125 | ✅ `63f2b2fe` | build + hertest |
| TEN-130 | ✅ `e6182e50` | build + hertest |
| TEN-131 | ✅ `d91be0d1` | build + hertest |
| TEN-134 | ✅ `2a9df4bc` (defect-deel) | build + hertest; back-up 2.0 blijft apart |
| TEN-116 | ✅ fix staat er | 🚧 **her-test vraagt nieuw ontwerp** → parkeren |
| TEN-87 | 🟡 fase 1 gemerged | 🚧 Vermogen-programma → parkeren |
| TEN-111 | ❌ niets | 🚧 her-test vraagt een keuze per object → parkeren |
| TEN-118 | ❌ niets | 🚧 nieuwe functie (kosten bij vastgoed) → parkeren |
| TEN-135 | ❌ niets | 🚧 app-brede uitrol, opgegaan in TEN-138 → parkeren |
| TEN-99 | ❌ alleen ADR-0019 | ⚠️ **echt defect**, zie B4 |

## Spoor A — naar TestFlight

Het meeste hiervoor is al klaar: export-compliance bevestigd, privacy-manifest
ingevuld, buildscripts gemerged, distributiecertificaat veiliggesteld, Plus-grants
staan. Wat er nog ligt is vooral **jouw** werk, omdat het Apple-accountwerk is.

| # | Stap | Wie |
|---|---|---|
| A1 | Controleer of de **app-record in App Store Connect** bestaat voor `com.aquait.tendlo`. Zonder record is er niets om een build naartoe te uploaden. | eigenaar |
| A2 | **App Store Connect API-key** aanmaken (Users and Access → Integrations → App Store Connect API → sleutel genereren, `.p8` **eenmalig** downloaden). Daarmee kan ik vanaf de CLI uploaden, nu en bij elke volgende ronde. Alternatief zonder key: jij sleept de IPA in **Transporter**. | eigenaar |
| A3 | Store-IPA bouwen met `scripts/build-store-ipa.sh` + `scripts/verify-store-ipa.sh`. | ik |
| A4 | Uploaden. | ik (met A2) of eigenaar (Transporter) |
| A5 | **App Privacy-formulier** invullen in ASC, 1-op-1 gelijk aan `ios/Runner/PrivacyInfo.xcprivacy`: zes types, locatie **grof** en **niet gekoppeld**, niets voor tracking. Afwijken is een afwijzingsgrond. | eigenaar |
| A6 | Testers uitnodigen in TestFlight. | eigenaar |

**Zonder A1 en A2 valt dit spoor stil** — dat is de enige echte blokkade richting
TestFlight. Er is geen CI-uploadpad en dat is een bewuste keuze (het runbook legt uit
waarom: de CI is ubuntu-only en draagt niets bij aan het release-pad).

## Spoor B — testfeedback afmaken

### B1 · Build naar de testtoestellen 🔧

De release-build staat en is op **Robins toestel** geïnstalleerd. Nodig voor
**Rosanne, Laura en Sandra**: ontgrendeld, zelfde wifi, **Developer Mode aan**. Loes'
toestel is uit de lijst.

Let op: de build van 27 juli is gemaakt **vóór** de Sentry-DSN in het profiel stond,
dus die stuurt nog geen crashrapporten. De volgende build wel — dat is een reden om A3
en B1 in één keer te doen.

### B2 · Her-testronde op zes tickets 📋

Voor TEN-43, TEN-120, TEN-125, TEN-130, TEN-131 en TEN-134 staat de fix op `main`.
Zodra de build op de toestellen staat:

1. tickets naar **Testen** zetten (niet naar Done — dat doen de testers);
2. de hertestpagina bijwerken met een nieuwe golf, met per ticket wat er concreet
   geprobeerd moet worden;
3. de testers laten bevestigen.

Dit is de goedkoopste winst in het hele plan: zes tickets kunnen dicht zonder één
regel nieuwe code.

### B3 · TEN-120 splitsen ✂️

De eigenaar meldt op het ticket dat de ingest twee losse zaken in één ticket heeft
gepropt: (1) de vakantie-module toont alleen de huidige vakantie in de agenda, en (2)
vastgoed kan twee verhuurtypes hebben. Dat is administratief werk, geen bouwwerk — en
het voorkomt dat een hertest op de helft strandt.

### B4 · TEN-99 — het enige echte defect dat nog open staat ⚠️

*Deelmodel: een per-record scope-wijziging cascadeert niet naar container-kinderen
(`loan_parts` / `vehicle_items` / `savings_contributions`).*

Zet je een lening of voertuig op privé, dan volgen de onderdelen daarvan niet mee —
die blijven zichtbaar voor wie ze eerder mocht zien. Dat is een **zichtbaarheidsfout**,
dezelfde klasse als de panel-bevindingen van gisteren, en de enige in deze lijst die
niet over gemak maar over correctheid gaat. ADR-0019 is geschreven, de implementatie
niet.

Advies: **wel doen**, maar met de kanttekening dat dit een cascade over drie
tabellen is en dus middelgroot — geen half uur. Als het buiten de scope van "niets
nieuws" valt, hoor ik dat liever expliciet dan dat ik het stil laat liggen.

### B5 · Klein en mechanisch 🔧

Een integratietest tikt nog in een veld dat niet meer bestaat:
`integration_test/ten114_abonnement_formulier_ui_test.dart:115` zoekt een `TextField`
met label "Incassodag", terwijl dat sinds TEN-131 een dropdown 1..31 is. De aanpassing
is mechanisch; verifiëren vraagt de simulator.

## Wat er bewust NIET gebeurt 💤

Alles hieronder is gekozen richting, maar valt buiten "niets nieuws bijbouwen":

- **Datum- en tijdkiezer** — richting beslist (wielen, W3+W2, maandgrid erbij), maar
  ~18-23 dagen werk over 55 aanroepen. Vraag 6 (nachten of dagen) is beantwoord, dus
  dit kan wanneer je wil.
- **Vermogen** (TEN-87 / TEN-111 / TEN-118) — door de ontwerp-gate, zes open vragen.
- **AI-assistent** — geparkeerd als dossier op **TEN-143**, met de volledige stand van
  zaken en de varianten. Eerst samen sparren.
- **TEN-116 en TEN-111 her-tests** — beide vragen een nieuw ontwerp (een aparte
  maandlijst met swipe; een keuze per vastgoedobject). Die horen door de ontwerp-gate.
- **TEN-135 / TEN-138** — app-brede rij- en swipe-conventie.
- **TEN-140 / TEN-141 / TEN-142** — de permissie- en consent-tickets, eerst refinen.

## Voorgestelde volgorde

1. **A2** (jij: ASC-key) en **B1** (jij: toestellen klaar) — dit zijn de twee
   blokkades. Zolang die er zijn kan ik alleen voorbereiden.
2. **A3 + A4** store-IPA bouwen en uploaden, in dezelfde ronde als de build voor de
   toestellen zodat de Sentry-DSN meteen meegaat.
3. **B2** her-testronde op de zes tickets, hertestpagina bijwerken.
4. **B3** TEN-120 splitsen, **B5** de integratietest.
5. **A5 + A6** privacy-formulier en testers uitnodigen.
6. **B4** TEN-99, als je die binnen scope wil hebben.

---
*Bronnen: `git log main` per ticket; Linear-status van de TEN-tickets op 27-07; `docs/release/testflight-ios.md`; `docs/archive/sessions/besluitenlog-2026-07-26.md` en `-27.md`; `ios/Runner/PrivacyInfo.xcprivacy`; `add_subscription_sheet.dart:389-398`; `integration_test/ten114_abonnement_formulier_ui_test.dart:115`. Geverifieerd op 2026-07-27.*
