feat(infra): wire OpenZaak → Open Notificaties notifications (closes #56) #57
Reference in New Issue
Block a user
Delete Branch "feat/56-nrc-notification-wiring"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
What & why
S-01-c — the OpenZaak → Open Notificaties (NRC) notification wiring deferred by S-01 (#2). With this, a zaak created in OpenZaak is published to NRC and fanned out to subscribers — the upstream half of the event path the Event Subscriber (#7) will consume.
Closes #56
How it works (ADR-0007)
zgw_consumersnrcservice +notifications_config(viasetup_configuration), authenticating as the existingbig-reference-seedclient.NOTIFICATIONS_DISABLEDstaystruefor OpenZaak-only bring-ups (so the ACL integration test doesn't 500 against an absent NRC) and is setfalseby the full/local stacks andmake stack-up.acservice +autorisaties_apidelegation to OpenZaak's Autorisaties API, and thezakenkanaal.nrc-initnow runssetup_configuration(data delivered via therr-nrc-configvolume, like OpenZaak).nrc-beat) added to every stack: NRC writes aScheduledNotificationon publish and a periodicexecute_notificationstask drains it for delivery. The lean S-01 stack dropped beat, so notifications were accepted but never delivered — this was the key missing piece.Verification
make verify-notifications(+ anotificationsCI job): brings the stack up, seeds a published BIG zaaktype, registers an abonnement to a webhook sink, creates a zaak, and asserts the sink receives thezaken/createnotification — all from containers inside the compose network (runner-safe, per ADR-0006). Verified green locally.Two non-obvious findings (documented in gitea-actions-gotchas.md §6)
URLValidator) — the harness reaches services and registers the callback by container IP.no-auth-on-callback-url) unless it returns 401 without the configuredAuthorization; the sink enforces a bearer token.Definition of Done
make verify-notifications+ CI job).refs #56).notificationsjob;compose-smokestill green (full stack health unaffected — smoke creates no zaken).docker compose up(full + local twin) brings the stack up healthy with notifications enabled.Notes for reviewers
openzaak/opennotificaties), full (infra/docker-compose.yml), and local-bind-mount (docker-compose.local.yml) composes.notificationsCI job needs egress toselectielijst.openzaak.nl(the published zaaktype the check creates a zaak against — same dependency as the ACL integration job, ADR-0006).zakenkanaal.Also: consolidated the live-stack CI checks (Closes #58)
On the single self-hosted runner, jobs run sequentially, so each
make-up of OpenZaak was paid once per job. This PR also replaces theintegration+notifications+compose-smokejobs with oneverify-stackjob that boots the full stack once and runs clearly-named steps: health (verify-up) → ACL ↔ OpenZaak (verify-acl) → OpenZaak → NRC (verify-nrc) → teardown. The check logic moved into stack-agnostic runners (run-acl-integration.sh,run-notification-check.sh); the localmake integration/make verify-notificationskeep working by delegating to them. Verified locally viamake verify.