Repository navigation
feat(call-log): a call can be recorded without any body, and a BRP relation read is (decision 229) - #2669
Merged
Conversation
…lation read is (decision 229) CallService::call takes withholdBodies, a per-call option set in code. The record names the source, the asking user, the moment and the outcome, and holds no request body, response body, headers, query or replay request, also inside an open investigation window. BrpRelationReader reads through it. The BRP element numbers in brp-relations-read are checked against an autorisatietabel RvIG publishes and now carry the full rubric numbers.
rubenvdlinde
requested review from
Rem-Dam,
WilcoLouwerse,
bbrands02 and
rjzondervan
as code owners
October 12, 2026 16:40
Contributor
Quality Report — ConductionNL/integriq @
|
| Check | PHP | Vue | Security | License | Tests |
|---|---|---|---|---|---|
| lint | ✅ | ||||
| phpcs | ✅ | ||||
| phpmd | ✅ | ||||
| psalm | ✅ | ||||
| phpstan | ✅ | ||||
| phpmetrics | ✅ | ||||
| eslint | ✅ | ||||
| stylelint | ✅ | ||||
| build | ✅ | ||||
| build | ✅ | ||||
| check-specs | ✅ | ||||
| test-l10n | ✅ | ||||
| format | ✅ | ||||
| check-schema-l10n | ✅ | ||||
| check-l10n-js | ✅ | ||||
| composer | ✅ | ✅ 143/143 | |||
| npm | ✅ | ✅ 647/647 | |||
| app:check-code | ⏭️ | ||||
| info.xml | ✅ | ||||
| REUSE | ❌ | ||||
| lockfile sync | ✅ | ||||
| PHPUnit | ✅ 5474/5474 · 1 skipped | ||||
| Newman | ✅ 130/130 | ||||
| Playwright | ⏭️ deferred: E2E runs locally and on the promotion path only. This pull request targets development, so the suite is asked once per promotion into beta and main rather than once per push per open pull request. Run it locally with npx playwright test, or from the Actions tab on a branch with no open pull request into development. |
||||
| Hydra gates | ✅ | ||||
| Hydra gates (axe) | ✅ |
Quality workflow — 2026-10-12 16:47 UTC
Download the full PDF report from the workflow artifacts.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What this does
Decision 229 (Ruben, 12 Oct): a BRP relation read leaves a call log record without bodies. A municipality must be able to show who consulted the BRP. This follows #2667, where the read stayed out of the call log completely.
CallService::calltakeswithholdBodies. It is an option on the one call, set in code by the caller. There is no app setting, source field or request key that switches it off.logBody.RegistrySourceGateway::readUnrecorded()is nowreadWithoutBodies().BrpRelationReaderreads through it, so a relation read shows on the source's call log page.How it is tested
CallServiceWithheldBodiesTest: the source has an open investigation window and carries a number in its request body and its query. The stored record is encoded as one string and searched for the asked number, the answered number and the wordburgerservicenummer. A success, a failure, a buffered record,logBodyon the same call and the trace step all hold nothing. A control test makes the same call without the option and finds both numbers, so the search can fail.BrpRelationReadCallLogTest: the real reader over the real gateway over the real call service. Only the HTTP client, the object store and the session are doubles. The answer is the mock answer the seeded source ships. Exactly one row is written, tocall_log. It names the user and the source, and the string search finds none of the numbers in the shipped answer, on an answered read and on a refused one.PropertySourceResolver. A test asserts that no class on the read's path (reader, gateway, call service, body policy) is handed the resolver, a cache or a cache factory, with the resolver itself as the control.BodyCapturePolicytakesIUserSession). A test asserts both types, because a missing session would write the record without a user, in silence.What an administrator sees
Limits to know
userIdalready existed oncall_log. This is its first writer, and only on a record that withholds its bodies.The BRP authorisation text, corrected
#2667 named the BRP elements from memory. They are checked now against an autorisatietabel RvIG publishes (https://publicaties.rvig.nl/media/13550/download, read 12 October 2026). It lists Burgerservicenummer as 02.01.20 under category 02 Ouder1, 03.01.20 under category 03 Ouder2, 05.01.20 under category 05 Huwelijk/geregistreerd partnerschap and 09.01.20 under category 09 Kind. The numbers in #2667 were right.
openspec/changes/brp-relations-read/proposal.mdand the body of #2667 now carry the full rubric numbers and the source. The municipality's own autorisatiebesluit stays the authority on what it may ask.Verified
refactor/r2/logs/c1-red.log(exit 2, 6 errors, the option did not exist; the control passed).c1-green3.log):tests/Unit/PropertySource,tests/Unit/Outbound, the threeCallServicetest files.composer check:strict, run stage by stage in the foreground because no build slot came free in 12 minutes (c1-strict.log): check:no-legacy-types, check:routes, lint, phpcs, phpmd and phpstan exit 0 each. psalm exit 0. The full PHPUnit suite exits 2: 5,475 tests, 11 errors, all intests/Unit/AppInfoand all the sameTypeErrorattests/Helpers/AppContainerInjection.php:93, known on origin/development on this machine since 11 October and untouched by this pull request. CI read once on e89c3f2: 39 pass, 8 skipping, 0 fail.Not verified
openspec/changes/call-log-without-bodies/tasks.md: one relation read on an instance, then open the source's call log page and check the row.Rollout
Nothing to do on upgrade. Dossiq's check (ConductionNL/dossiq#3844) calls
BrpRelationReader::readby name and needs no change. After both are on an instance, do the live pass above.