The new gateway landed at 77.6%, dragging the ACL score under its 90 break
threshold. The gaps were all real behaviour nobody was asserting: a failed or
empty read being mistaken for "nothing there yet" and followed by a blind
write, a `results`-less response taking down the resolve with an
ArgumentNullException, the CRS headers going to Objecttypen (which is not a geo
API), and the write body being sent chunked. ACL score 86.63% → 92.08%.
Counting the `versions` URLs assumed a contiguous, all-published list. Read the
objecttype's versions collection instead and take the highest one whose status
is `published`, so a draft version — whose schema is still being shaped — is
never written against.
Ports and failing tests for the Objecten hop, ahead of the implementation:
- IRegisterRecordGateway + RegisterRecord — the Application-side port; the
record mirrors the objecttype schema registered in S-18c (ADR-0027).
- AclService takes the port but does not yet call it, so the approval test
fails on an empty upsert list.
- ObjectenGateway is a shell throwing NotImplementedException; its tests pin
the contract: resolve the objecttype by name, search by data attribute,
POST when absent / PATCH when present, static Token auth per API, the CRS
headers the geo API requires, and a surfaced error body.
Also splits S-19 (#20) into #149/#150 in BACKLOG.md — the approval-side write
and the projection re-sourcing are independently deployable (CLAUDE.md §13).