S-27 · ACL resolves its zaaktype by identificatie (not a pinned server-assigned URL) #113

Closed
opened 2026-07-22 09:24:16 +00:00 by not · 0 comments
Contributor

Triage: milestone set to Iteration 2 to keep it with #110/#111; re-triage freely.

Outcome: the ACL discovers its BIG zaaktype (and diploma informatieobjecttype) by resolving the stable business identificatie (BIG-REGISTRATIE / Diploma) against OpenZaak's Catalogi API, instead of being handed a pinned, server-assigned zaaktype URL via Acl__Defaults__ZaaktypeUrl. This removes the brittleness that forces every stack (CI + local) to seed-then-inject the URL out of band.

Why: the zaaktype UUID is assigned by OpenZaak at creation, so today the ACL cannot be configured until after a seed runs, and the URL must be captured and injected (verify-domain does this for CI; #110 adds a local-stack bootstrap to do it for make local). Resolving by identificatie is closer to how a real ZGW integration configures itself and lets bring-up work without capturing a server-assigned URL. This is the "better design" alternative deliberately split out of #110 (which fixes the local stack with an infra-only bootstrap).

Acceptance:

  • Scenario: resolve by identificatie — Given a published BIG-REGISTRATIE zaaktype in OpenZaak, When the ACL opens a zaak, Then it uses the zaaktype resolved by identificatie (no pinned URL configured).
  • Scenario: not-yet-published — When no published zaaktype matches, the ACL surfaces a clear, actionable error (and does not silently use a placeholder).
  • Resolution is cached/refreshed sensibly (decide: startup vs first-use vs TTL) — captured in the ADR.
  • ACL unit + integration tests cover resolution + the miss path; mutation ratchet stays green (CLAUDE.md §5).

Touches: services/acl (config → identificatie, a catalogi lookup in the gateway, AclDefaults), both compose files (drop the pinned-URL injection once resolution lands), infra/* verify scripts, docs.

Out of scope: the #110 local-stack bootstrap (ships independently); changing what the ACL writes to OpenZaak; portal/BFF changes.

ADR required: "ACL resolves its zaaktype by identificatie, not a pinned URL" — startup vs per-request resolution, caching, and the failure mode when unpublished.

Definition of Done

  • This linked Gitea issue exists and is on the right milestone.
  • Failing test written and committed first (test(scope): … (refs #NN)).
  • Implementation makes the test pass (feat(scope): … (refs #NN)).
  • Refactor commit follows if structure improved.
  • Conventional Commit messages referencing this issue.
  • All Gitea Actions CI jobs green (or make ci green while no runner exists).
  • docker compose up from a fresh clone reaches green health checks within 3 minutes.
  • Docs touched if behaviour, contracts, or operations changed.
  • ADR added in docs/architecture/ (required — see above).
  • Demo note appended to docs/demo-script.md if the slice is user-visible.
  • This issue closed by the merging PR (closes #NN).
> Triage: milestone set to Iteration 2 to keep it with #110/#111; re-triage freely. **Outcome:** the ACL discovers its BIG zaaktype (and diploma informatieobjecttype) by resolving the stable business **`identificatie`** (`BIG-REGISTRATIE` / `Diploma`) against OpenZaak's Catalogi API, instead of being handed a pinned, server-assigned zaaktype **URL** via `Acl__Defaults__ZaaktypeUrl`. This removes the brittleness that forces every stack (CI + local) to seed-then-inject the URL out of band. **Why:** the zaaktype UUID is assigned by OpenZaak at creation, so today the ACL cannot be configured until *after* a seed runs, and the URL must be captured and injected (verify-domain does this for CI; #110 adds a local-stack bootstrap to do it for `make local`). Resolving by `identificatie` is closer to how a real ZGW integration configures itself and lets bring-up work without capturing a server-assigned URL. This is the "better design" alternative deliberately split out of #110 (which fixes the local stack with an infra-only bootstrap). **Acceptance:** - `Scenario: resolve by identificatie` — Given a published `BIG-REGISTRATIE` zaaktype in OpenZaak, When the ACL opens a zaak, Then it uses the zaaktype resolved by identificatie (no pinned URL configured). - `Scenario: not-yet-published` — When no published zaaktype matches, the ACL surfaces a clear, actionable error (and does not silently use a placeholder). - Resolution is cached/refreshed sensibly (decide: startup vs first-use vs TTL) — captured in the ADR. - ACL unit + integration tests cover resolution + the miss path; mutation ratchet stays green (CLAUDE.md §5). **Touches:** `services/acl` (config → `identificatie`, a catalogi lookup in the gateway, `AclDefaults`), both compose files (drop the pinned-URL injection once resolution lands), `infra/*` verify scripts, docs. **Out of scope:** the #110 local-stack bootstrap (ships independently); changing what the ACL writes to OpenZaak; portal/BFF changes. **ADR required:** "ACL resolves its zaaktype by identificatie, not a pinned URL" — startup vs per-request resolution, caching, and the failure mode when unpublished. ## Definition of Done - [ ] This linked Gitea issue exists and is on the right milestone. - [ ] Failing test written and committed first (`test(scope): … (refs #NN)`). - [ ] Implementation makes the test pass (`feat(scope): … (refs #NN)`). - [ ] Refactor commit follows if structure improved. - [ ] Conventional Commit messages referencing this issue. - [ ] All Gitea Actions CI jobs green (or `make ci` green while no runner exists). - [ ] `docker compose up` from a fresh clone reaches green health checks within 3 minutes. - [ ] Docs touched if behaviour, contracts, or operations changed. - [ ] ADR added in `docs/architecture/` (required — see above). - [ ] Demo note appended to `docs/demo-script.md` if the slice is user-visible. - [ ] This issue closed by the merging PR (`closes #NN`).
not added this to the Iteration 2 — Flow Completeness milestone 2026-07-22 09:24:16 +00:00
not added the area:acltype:slice labels 2026-07-22 09:24:16 +00:00
not closed this issue 2026-07-22 14:49:27 +00:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: eho/register-referentie#113