feat(acl): resolve the zaaktype by identificatie, not a pinned URL (S-27, closes #113) #118

Merged
not merged 5 commits from feat/113-acl-zaaktype-by-identificatie into main 2026-07-22 14:49:27 +00:00
5 Commits
Author SHA1 Message Date
notandClaude Opus 4.8 f363cb1663 fix(acceptance): implement the resolve API in the in-memory ZGW gateway (refs #113)
CI / frontend (pull_request) Successful in 2m35s
CI / lint (pull_request) Successful in 1m20s
CI / build (pull_request) Successful in 1m1s
CI / unit (pull_request) Successful in 1m10s
CI / mutation (pull_request) Successful in 5m50s
CI / verify-stack (pull_request) Successful in 8m17s
The acceptance InMemoryZaakGateway now implements IZaakGateway's new
Resolve{Zaaktype,Informatieobjecttype}UrlAsync, and the "een zaak openen" step
configures the ACL by identificatie + points the fake's resolved zaaktype at the
scenario URL — the Release build (which compiles tests/acceptance) failed without
this. All 17 acceptance + 54 ACL unit tests green.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-22 16:10:30 +02:00
notandClaude Opus 4.8 2fe187cbdd test(acl): cover the resolve null/error paths to hold the mutation ratchet (refs #113)
CI / lint (pull_request) Successful in 1m20s
CI / build (pull_request) Failing after 54s
CI / unit (pull_request) Failing after 1m3s
CI / frontend (pull_request) Successful in 2m32s
CI / mutation (pull_request) Successful in 5m39s
CI / verify-stack (pull_request) Successful in 8m11s
Kills the survivors the new resolution code introduced: null Results (no "results"
in the response) must throw "none found" not NRE; a non-success catalogi response
must surface an error naming the resource. ACL mutation score 93.89% (break 90%).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-22 16:03:56 +02:00
notandClaude Opus 4.8 734dfb21dd refactor(infra): drop zaaktype/informatieobjecttype URL injection; add ADR-0021 (refs #113)
The ACL now discovers those URLs itself (S-27), so no stack captures/injects them:
docker-compose.yml/.local.yml carry ZaaktypeIdentificatie/InformatieobjecttypeOmschrijving
instead of placeholder URLs, run-domain-check.sh + local-seed stop emitting the URLs, and
the local acl.env shrinks to the OpenZaak base URL. That base URL injection stays: OpenZaak
rejects a single-label host on zaak-create (confirmed), so the ACL is still pointed at the
container IP. ADR-0021 + demo-script note.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-22 15:57:10 +02:00
notandClaude Opus 4.8 24c7ebe8cb test(acl): live integration tests for catalogus resolution by business key (refs #113)
Assert the gateway resolves the published BIG-REGISTRATIE zaaktype + Diploma
informatieobjecttype against a real seeded OpenZaak, and that an unknown
identificatie throws a clear error.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-22 15:57:10 +02:00
notandClaude Opus 4.8 0ba410ad78 feat(acl): resolve zaaktype + informatieobjecttype by business key, not a pinned URL (refs #113)
The ACL now discovers its BIG zaaktype (by identificatie) and diploma
informatieobjecttype (by omschrijving) from OpenZaak's Catalogi API, instead of
being handed server-assigned URLs in config. A CachedZaaktypeCatalog resolves
lazily on first use and caches (success only, so a pre-publish miss is retried);
AclDefaults now carries ZaaktypeIdentificatie/InformatieobjecttypeOmschrijving.
Clear errors replace the opaque placeholder-URL 400. Unit tests cover the
resolver (resolve/cache/retry-on-failure) and the gateway lookups (match/miss).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-22 15:39:01 +02:00