You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
# ZAD Update: 29 mei t/m 11 juni 2026 — nieuwe release
1
+
# ZAD Update: 29 mei t/m 11 juni 2026 — nieuwe release, sneller en eerlijker
2
2
3
3
## Tijdsbeeld
4
4
5
-
Een intensieve periode, afgesloten met een release op 10 juni waarin een flinke stapel stabiliteits- en snelheidsverbeteringen tegelijk live is gegaan. De rode draad van deze weken: het platform sneller én eerlijker maken. Sneller door deployments echt parallel af te handelen; eerlijker door processen die stilletjes faalden of stilletjes "succes" rapporteerden hardop te laten zeggen wat er aan de hand is.
5
+
Een intensieve periode, afgesloten met een flinke release waarin een stapel stabiliteits- en snelheidsverbeteringen tegelijk live is gegaan. De rode draad: het platform **sneller én eerlijker** maken. Sneller door minder dubbel werk en meer ademruimte voor ArgoCD en de reconciliation; eerlijker door processen die stilletjes faalden — of stilletjes "succes" rapporteerden — hardop te laten zeggen wat er werkelijk gebeurt. Een groot deel kwam voort uit het systematisch naluisteren van de productielogs.
6
6
7
-
## De release (10 juni)
7
+
## Wat gebruikers hiervan merken
8
+
9
+
-**Geen valse 401's meer tijdens updates.** Een portaal-opslag kon de API-key van een project kortstondig vergiftigen, waardoor CI-deploys ~een minuut lang ten onrechte 401 kregen met een misleidende "controleer je ZAD_API_KEY". Dat is verholpen — deploys tijdens een gelijktijdige edit lopen niet meer stuk.
10
+
-**Snellere en stabielere reacties.** Deployments worden nu echt parallel afgehandeld, ArgoCD rendert manifests tot ~25× sneller, en de reconciliation doet veel minder dubbel werk. Een refresh van twintig deployments duurt geen uur meer.
11
+
-**Minder push-/rebase-conflicten.** Versleutelde bestanden werden bij elke verwerking opnieuw gecodeerd (AGE en SOPS zijn niet-deterministisch), waardoor gelijktijdige runs voortdurend op elkaars git-pushes botsten en moesten rebasen. Door alleen nog te (her)coderen en te schrijven wanneer er écht iets verandert, daalt die churn — en dus het aantal rebase-conflicten — drastisch.
12
+
-**Eerlijkere meldingen.** Geslaagde acties die als "vastgelopen" of als "fout" werden gerapporteerd, en geslaagde klonen die een ERROR logden, vertellen nu de waarheid. Minder ruis, minder vals alarm.
13
+
14
+
## De release
15
+
16
+
### Sneller en meer ademruimte
8
17
9
-
-**AGE-hercodering gestopt.** Elke verwerking hercodeerde encrypted configuratieblokken opnieuw (AGE is niet-deterministisch) → permanente git-churn en pushconflicten tussen gelijktijdige runs. Ongewijzigde inhoud behoudt nu de bestaande ciphertext.
10
18
-**Parallelle deployments.** Een refresh met N deployments wachtte serieel per applicatie; twintig stuks kon een uur duren. De waits draaien nu concurrent (wandkloktijd ≈ traagste deployment). Taak-concurrency 4→12, ArgoCD-controller meegeschaald (processors 5→20/10, geheugen 4→8Gi).
11
-
-**Keycloak-credentials direct gepersisteerd.**een eerste deploy die ná het aanmaken van het realm faalde, legde configuratie niet vast. Hierdoor liepen vervolgstappen vast door duplicatie meldingen. Het credentialblok wordt nu direct na aanmaak gecommit.
12
-
-**Eerlijke verwijdering (#123).**Deletes verifiëren het resultaat nu tegen de Kubernetes-API en rapporteren deelfouten als fouten — geen stille "succes"-meldingen meer terwijl resources achterblijven. (Bestaande wees-resources ruimt de orphan-sweep hieronder op.)
13
-
-**Wizard-fixes.** Leeggemaakte velden kwamen terug met hun oude waarde in de samenvatting; user-env-vars verschenen als rauw AGE-blok i.p.v. ontsleuteld. Beide opgelost.
14
-
-**Verder:** redeploy bij domein-goedkeuring beperkt tot de getroffen deployments (#122), schema-healing voor verouderde component-catalogi (#120), ErrImageNeverPull-detectie (#119), rig-db naar 2Gi/2 CPU, voorberekende billing-metric voor de kostenpagina, en een CMP-renderoptimalisatie die niet langer de hele monorepo per render streamt (de ~27s streaming-overhead per koude render verdwijnt).
19
+
-**ArgoCD-renders ~25× sneller.**De manifest-generatie streamde per render de hele monorepo naar de plugin (~27s koude-render-overhead). Door alleen de relevante paden te streamen verdwijnt die overhead; renders draaien nu in ~1s i.p.v. ~28s — in productie bevestigd.
20
+
-**Einde aan de kloon-storm.**Bij elke reconcile en elke herstart kloonde het platform de databases van PR-previews telkens opnieuw — volledige kopieën — omdat de "klaar"-status en het generatienummer wél in het geheugen werden gezet, maar nooit naar het projectbestand werden weggeschreven vóór de commit. Gevolg: onnodig zware reconciles, stapels dubbele databases op rig-db en extra git-commits die meededen aan de rebase-conflicten. De status wordt nu vóór de commit gepersisteerd; een preview wordt nog één keer gekloond en daarna nooit meer onnodig. Dit geeft de reconciliation én rig-db flink lucht.
21
+
22
+
### Minder churn op versleutelde bestanden
15
23
16
-
## De tweede release (11 juni)
24
+
-**AGE- en SOPS-hercodering gestopt bij ongewijzigde inhoud.** Elke verwerking hercodeerde encrypted configuratieblokken (AGE) en secret-bestanden (SOPS) opnieuw, ook als de inhoud niet veranderde — permanente git-churn en pushconflicten tussen gelijktijdige runs. Ongewijzigde plaintext behoudt nu de bestaande ciphertext. In productie bevestigd: het overgrote deel van de secrets wordt overgeslagen i.p.v. herschreven.
17
25
18
-
Vandaag volgt een tweede release met fixes die grotendeels voortkwamen uit het naluisteren van de logs na de release van 10 juni:
26
+
### Eerlijker: minder valse fouten en stille mislukkingen
19
27
20
-
-**API-key-authenticatie gerepareerd.** Een opslag-actie in het portaal kon de in-memory API-key van een project tijdelijk vervangen door de versleutelde variant, waardoor CI-deploys van dat project zo'n een minuut lang 401 kregen met een misleidende "controleer je ZAD_API_KEY"-melding. De key wordt bij herregistratie nu ontsleuteld, en een mislukte ontsleuteling kan een werkende key niet meer overschrijven.
21
-
-**Taaklogboek vertelt weer de waarheid.** Geslaagde achtergrondtaken doken twee uur later op als "stuck RUNNING" (een administratie-desync, geen echt probleem) — opgelost. De wijzigingsanalyse logt deploymentnamen in plaats van interne paden en zegt er expliciet bij wanneer een eenmalige schema-migratie de oorzaak van een grote diff is. Commit-messages van image-bumps benoemen weer welke component naar welke image ging.
22
-
-**Orphan-sweep, rapport-eerst.** Read-only inventarisatie van databases, Keycloak-realms/-clients en MinIO-buckets met classificatie (expected/system/kandidaat/onbekend). Opruimen kan uitsluitend via expliciete bevestiging, met server-side hervalidatie en de normale grace-periode. Gevalideerd tegen de echte productie-inventaris.
23
-
-**Dagelijkse backup-retentiesweep.** Snapshot-restanten van verwijderde deployments (vooral gesloten PR-previews) bleven voorheen voor altijd staan; die worden nu dagelijks opgeruimd.
24
-
-**SOPS-hercodering gestopt bij ongewijzigde secrets.** Zelfde principe als de AGE-fix van 10 juni, nu ook voor SOPS-bestanden: ongewijzigde plaintext behoudt de bestaande ciphertext, dus minder git-churn.
28
+
-**API-key-authenticatie gerepareerd.** Een opslag in het portaal kon de in-memory API-key tijdelijk vervangen door de versleutelde variant, waardoor CI-deploys ~een minuut lang 401 kregen. De key wordt bij herregistratie nu ontsleuteld, en een mislukte ontsleuteling kan een werkende key niet meer overschrijven.
29
+
-**Taaklogboek vertelt weer de waarheid.** Geslaagde achtergrondtaken doken twee uur later op als "stuck RUNNING" (administratie-desync, geen echt probleem) — opgelost. De wijzigingsanalyse logt deploymentnamen i.p.v. interne paden en meldt expliciet wanneer een eenmalige schema-migratie de oorzaak van een grote diff is. Image-bump-commits benoemen weer welke component naar welke image ging.
30
+
-**Eerlijke kloon-logging.** Elke geslaagde kloon logde een misleidende `Target schema not created`-ERROR plus een `leftover from failed clone`-WARNING, terwijl de kloon gewoon slaagde. De logs vertellen nu de waarheid; alleen een werkelijk lege bron geeft nog een fout. In productie bevestigd: nul valse meldingen.
31
+
-**Leesbare kubectl-logs.** Het nietszeggende `Running kubectl command` is vervangen door "operation X (project Y)", bijv. `kubectl get secret (project rig-prd-wies)` — duidelijk wát er voor welk project gebeurt, zonder argumenten of secrets in de log.
32
+
-**Eerlijke verwijdering (#123).** Deletes verifiëren het resultaat nu tegen de Kubernetes-API en rapporteren deelfouten als fouten — geen stille "succes"-meldingen meer terwijl resources achterblijven.
33
+
34
+
### Opruimen en beheer
35
+
36
+
-**Orphan-sweep, rapport-eerst.** Read-only inventarisatie van databases, Keycloak-realms/-clients en MinIO-buckets met classificatie. Opruimen kan uitsluitend via expliciete bevestiging, met server-side hervalidatie en de normale grace-periode. Gevalideerd tegen de echte productie-inventaris.
37
+
-**Dagelijkse backup-retentiesweep.** Snapshot-restanten van verwijderde deployments (vooral gesloten PR-previews) bleven voorheen voor altijd staan; die worden nu dagelijks opgeruimd (standaard in dry-run tot review).
25
38
-**Backup-schema niet meer meegekloond.** Een nieuwe deployment die configuratie van een bestaande kloont, erfde stilzwijgend ook het backupschema. Backups zijn nu een expliciete keuze per deployment.
26
-
-**Domeinvalidatie op de API-route.** De domeinregels van de wizard gelden nu ook bij directe API-upserts (geen dot-formaat URL op een dash-only domein). Daarnaast resolvet de clusterstandaard niet langer naar een verkeerd nice-URL-domein, wat onterechte domeinaanvragen in projectbestanden veroorzaakte.
39
+
40
+
### Fixes in het portaal en de API
41
+
42
+
-**Verwijderknop gerepareerd (CSRF).** Een project, deployment of component verwijderen faalde stil met "Onbekende fout": de knop stuurde geen CSRF-token mee, dus de aanvraag werd met 403 geweigerd vóór er iets gebeurde (zelfde klasse als #71). Opgelost, met een regressie-test die afdwingt dat élke front-end-`fetch` die schrijft een CSRF-token meestuurt.
43
+
-**Domeinvalidatie op de API-route.** De domeinregels van de wizard gelden nu ook bij directe API-upserts (geen dot-formaat URL op een dash-only domein). De clusterstandaard resolvet niet langer naar een verkeerd nice-URL-domein, wat onterechte domeinaanvragen in projectbestanden veroorzaakte.
44
+
-**Wizard-fixes.** Leeggemaakte velden kwamen terug met hun oude waarde in de samenvatting; user-env-vars verschenen als rauw AGE-blok i.p.v. ontsleuteld. Beide opgelost.
45
+
-**Keycloak-credentials direct gepersisteerd.** Een eerste deploy die ná het aanmaken van het realm faalde, legde configuratie niet vast, waardoor vervolgstappen vastliepen op duplicatiemeldingen. Het credentialblok wordt nu direct na aanmaak gecommit.
46
+
-**Verder:** redeploy bij domein-goedkeuring beperkt tot de getroffen deployments (#122), schema-healing voor verouderde component-catalogi (#120), ErrImageNeverPull-detectie (#119), rig-db naar 2Gi/2 CPU en een voorberekende billing-metric voor de kostenpagina.
27
47
28
48
## Eerlijkheid over twee tegenvallers
29
49
@@ -34,15 +54,17 @@ Vandaag volgt een tweede release met fixes die grotendeels voortkwamen uit het n
34
54
35
55
-**TemplateResponse-migratie** (57 aanroepen) zodat de starlette-securityupgrade alsnog kan landen.
36
56
-**Per-component NetworkPolicies**, getest op een afdwingende CNI, ter vervanging van de tijdelijke allow-all.
57
+
-**Slimmere takenqueue** (#127): overbodige, opeenvolgende reconcile-jobs voor hetzelfde project/deployment samenvoegen i.p.v. allemaal uitvoeren — minder dubbel werk, nog minder churn.
37
58
-**PgBouncer connection-pooling** (opt-in) voor projecten met veel databaseconnecties.
38
59
-**OTP voor Keycloak-admin-login** (#103) — van het strategiebord naar een branch.
39
-
- De eerste gecontroleerde opruimronde van de PR-preview-restanten, nu de orphan-sweep meegaat in deze release.
60
+
- De eerste gecontroleerde opruimronde van de PR-preview-restanten, nu de orphan-sweep meegaat.
40
61
41
62
## Voor de toekomst
42
63
43
-
De strategische kaartjes van vorige update blijven actueel:
64
+
De strategische kaartjes blijven actueel:
44
65
45
-
-**#98 + #92** CI/CD-pipeline voor OPI: image-build en release via CI, deploys op gepinde digest
46
-
-**#110** End-to-end Playwright-tests voor wizard-flows
66
+
-**#98 + #92** CI/CD-pipeline voor OPI: image-build en release via CI, deploys op gepinde digest.
67
+
-**#110** End-to-end Playwright-tests voor wizard-flows.
47
68
-**#94 + #95 + #96** CI secret-scanning plus branch-protection op `main`.
69
+
-**#129** Logvolume terugbrengen (OPI draait op DEBUG) + een leesbaar taakoverzicht voor mensen.
48
70
- Service-level observability en alerts op de platformservices zelf.
0 commit comments