The host-browser stack (make local) had drifted behind three slices, so a fresh bring-up couldn't complete the flow: registrations stuck at OpenZaakAanmaken, the behandel werkbak stayed empty, and the openbaar register showed nothing. The verify-* scripts do this setup for CI at test time; make local had no equivalent.
This makes the local stack self-seed at bring-up so it just works in a browser:
DMN — flowable-init now also deploys diploma-eligibility.dmn (was BPMN-only), so completing WachtOpDocumenten routes through the DMN to Beoordelen instead of 404ing.
Zaaktype + ACL — a local-seed one-shot publishes the BIG zaaktype (whose UUID is server-assigned, hence not static in the compose file) and writes the real URLs to seed-env:/acl.env; the ACL sources it on startup via an entrypoint override.
NRC abonnement — an nrc-subscribe one-shot registers the zaken subscription at the event-subscriber callback, so notifications reach the projection/openbaar register.
Both one-shots reach OpenZaak/NRC by container IP (a single-label host fails their Django URLValidator), mirroring the CI verify scripts. Design + trade-offs in ADR-0020.
Failing test committed before the implementation — test(infra): … adds infra/run-local-flow-check.sh / make verify-local; the three gaps' failures were observed live on a fresh make local (red), and the fix turns it green.
Implementation makes the test pass; docs commit follows.
Conventional Commits referencing the issue (refs #110).
CI green — running on the restored runner. Infra-only change; the CI verify-stack job uses docker-compose.yml (untouched). Also validated locally: make verify-local passes against a fresh make local (see below).
docker compose up from a fresh clone reaches green health checks — verified: make local healthy in ~2m20s, then make verify-local green.
Docs updated — ADR-0020 + demo-script note.
ADR added in docs/architecture/ — ADR-0020.
Demo note in docs/demo-script.md.
Notes for reviewers
Infra-only — no service code changes; the ACL image and the CI stack (docker-compose.yml) are untouched.
Verified end-to-end on a fresh stack (make local-down && make local && make verify-local):
>> 2. zaak opened (zaaktype seeded + wired)
>> 3. documents accepted 204 (DMN deployed)
>> 4. in the werkbak (DMN routing → Beoordelen)
>> 5. visible in the openbaar register (NRC abonnement)
OK — a fresh local stack completed the flow with no manual seeding
Follow-up: the cleaner design — ACL resolving its zaaktype by identificatie instead of a pinned server-assigned URL — is split out as S-27 (#113); landing it would remove the acl.env injection here. ADR-0020 records this.
The seed-env volume carries the generated acl.env from local-seed to the ACL; a down --volumes (as make local-down does) resets it cleanly.
## What & why
The host-browser stack (`make local`) had drifted behind three slices, so a fresh bring-up couldn't complete the flow: registrations stuck at `OpenZaakAanmaken`, the behandel werkbak stayed empty, and the openbaar register showed nothing. The `verify-*` scripts do this setup for CI at test time; `make local` had no equivalent.
This makes the local stack **self-seed at bring-up** so it just works in a browser:
- **DMN** — `flowable-init` now also deploys `diploma-eligibility.dmn` (was BPMN-only), so completing `WachtOpDocumenten` routes through the DMN to `Beoordelen` instead of 404ing.
- **Zaaktype + ACL** — a `local-seed` one-shot publishes the BIG zaaktype (whose UUID is server-assigned, hence not static in the compose file) and writes the real URLs to `seed-env:/acl.env`; the ACL sources it on startup via an entrypoint override.
- **NRC abonnement** — an `nrc-subscribe` one-shot registers the `zaken` subscription at the event-subscriber callback, so notifications reach the projection/openbaar register.
Both one-shots reach OpenZaak/NRC by **container IP** (a single-label host fails their Django URLValidator), mirroring the CI verify scripts. Design + trade-offs in **ADR-0020**.
Closes #110
## Definition of Done
- [x] Linked Gitea issue (#110).
- [x] Failing test committed before the implementation — `test(infra): …` adds `infra/run-local-flow-check.sh` / `make verify-local`; the three gaps' failures were observed live on a fresh `make local` (red), and the fix turns it green.
- [x] Implementation makes the test pass; docs commit follows.
- [x] Conventional Commits referencing the issue (`refs #110`).
- [ ] CI green — running on the restored runner. Infra-only change; the CI `verify-stack` job uses `docker-compose.yml` (untouched). Also validated locally: `make verify-local` passes against a fresh `make local` (see below).
- [x] `docker compose up` from a fresh clone reaches green health checks — verified: `make local` healthy in ~2m20s, then `make verify-local` green.
- [x] Docs updated — ADR-0020 + demo-script note.
- [x] ADR added in `docs/architecture/` — ADR-0020.
- [x] Demo note in `docs/demo-script.md`.
## Notes for reviewers
- **Infra-only** — no service code changes; the ACL image and the CI stack (`docker-compose.yml`) are untouched.
- **Verified end-to-end on a fresh stack** (`make local-down && make local && make verify-local`):
```
>> 2. zaak opened (zaaktype seeded + wired)
>> 3. documents accepted 204 (DMN deployed)
>> 4. in the werkbak (DMN routing → Beoordelen)
>> 5. visible in the openbaar register (NRC abonnement)
OK — a fresh local stack completed the flow with no manual seeding
```
- **Follow-up:** the cleaner design — ACL resolving its zaaktype by `identificatie` instead of a pinned server-assigned URL — is split out as **S-27 (#113)**; landing it would remove the `acl.env` injection here. ADR-0020 records this.
- The `seed-env` volume carries the generated `acl.env` from `local-seed` to the ACL; a `down --volumes` (as `make local-down` does) resets it cleanly.
Adds infra/run-local-flow-check.sh (+ `make verify-local`): submits a
registration against a fresh local stack and asserts it opens a zaak, reaches
the werkbak after documents, and appears in the openbaar register — all with no
manual seeding. Fails today (ACL points at a placeholder zaaktype; the DMN is
undeployed; no NRC abonnement is registered), covering the three S-B04 gaps.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
A fresh `make local` now completes the whole flow with no manual seeding, closing
the three S-B04 gaps in the host-browser stack:
- flowable-init also deploys diploma-eligibility.dmn (was BPMN-only), so completing
WachtOpDocumenten routes through the DMN to Beoordelen instead of 404ing.
- a local-seed one-shot seeds + publishes the BIG zaaktype (server-assigned URL) and
writes it to seed-env:/acl.env; the ACL sources it on startup (entrypoint override),
since the UUID isn't knowable at compose-write time.
- an nrc-subscribe one-shot registers the `zaken` abonnement at the event-subscriber
callback, so notifications reach the projection and the openbaar register.
Both one-shots reach OpenZaak/NRC by container IP (a single-label host fails their
Django URLValidator), mirroring the CI verify scripts. Asserted by `make verify-local`.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
What & why
The host-browser stack (
make local) had drifted behind three slices, so a fresh bring-up couldn't complete the flow: registrations stuck atOpenZaakAanmaken, the behandel werkbak stayed empty, and the openbaar register showed nothing. Theverify-*scripts do this setup for CI at test time;make localhad no equivalent.This makes the local stack self-seed at bring-up so it just works in a browser:
flowable-initnow also deploysdiploma-eligibility.dmn(was BPMN-only), so completingWachtOpDocumentenroutes through the DMN toBeoordeleninstead of 404ing.local-seedone-shot publishes the BIG zaaktype (whose UUID is server-assigned, hence not static in the compose file) and writes the real URLs toseed-env:/acl.env; the ACL sources it on startup via an entrypoint override.nrc-subscribeone-shot registers thezakensubscription at the event-subscriber callback, so notifications reach the projection/openbaar register.Both one-shots reach OpenZaak/NRC by container IP (a single-label host fails their Django URLValidator), mirroring the CI verify scripts. Design + trade-offs in ADR-0020.
Closes #110
Definition of Done
test(infra): …addsinfra/run-local-flow-check.sh/make verify-local; the three gaps' failures were observed live on a freshmake local(red), and the fix turns it green.refs #110).verify-stackjob usesdocker-compose.yml(untouched). Also validated locally:make verify-localpasses against a freshmake local(see below).docker compose upfrom a fresh clone reaches green health checks — verified:make localhealthy in ~2m20s, thenmake verify-localgreen.docs/architecture/— ADR-0020.docs/demo-script.md.Notes for reviewers
docker-compose.yml) are untouched.make local-down && make local && make verify-local):identificatieinstead of a pinned server-assigned URL — is split out as S-27 (#113); landing it would remove theacl.envinjection here. ADR-0020 records this.seed-envvolume carries the generatedacl.envfromlocal-seedto the ACL; adown --volumes(asmake local-downdoes) resets it cleanly.