Add OpenSpec changes: extend-schemas-in-register-service + validate-self-folder-access (anonymisation scaffolding)#1427
Conversation
Add design, tasks, delta spec and canonical spec for the @self.folder access-control hardening. Tracks GitHub issue #1342.
|
🟡 Missing PR description This PR makes non-trivial changes (12 files, +1260 lines) but has no description. Please add a description covering:
A reviewer cannot confidently verify intent against the diff without this context. |
Quality Report — ConductionNL/openregister @
|
| Check | PHP | Vue | Security | License | Tests |
|---|---|---|---|---|---|
| lint | ✅ | ||||
| phpcs | ✅ | ||||
| phpmd | ✅ | ||||
| psalm | ✅ | ||||
| phpstan | ✅ | ||||
| phpmetrics | ✅ | ||||
| eslint | ✅ | ||||
| stylelint | ✅ | ||||
| composer | ❌ | ✅ 147/147 | |||
| npm | ✅ | ✅ 598/598 | |||
| PHPUnit | ⏭️ | ||||
| Newman | ⏭️ | ||||
| Playwright | ⏭️ |
Quality workflow — 2026-05-05 08:37 UTC
Download the full PDF report from the workflow artifacts.
|
[extend-schemas] Tegenspraak over Drie documenten in dezelfde change spreken elkaar tegen:
Niet blocking, maar lijkt me iets om vóór implementatie eenduidig te krijgen — anders krijgt de uitvoerder twee tegenstrijdige instructies. Welke is de bedoeling: behouden (design + spec) of strippen (proposal)? |
|
[cross-cutting] Inconsistente artefactstructuur tussen de twee changes — opzettelijk?
Niet blocking, maar: is |
|
[extend-schemas] HTTP-response shape change voor orphan IDs — staat niet in proposal.md
In Niet blocking — design en spec dekken het — maar voor reviewers die alleen de proposal lezen is dit een verrassing. Eén regel onder "What Changes" of "Impact" zou helpen? |
|
[beide changes] Open Questions — al beantwoord, of bewust open gehouden? Beide design.md's hebben een Open Questions-sectie die de spec minder definitief maakt:
Niet blocking, maar: zijn deze bewust open gelaten voor de implementator om te beslissen, of ben je vergeten ze door te halen toen het antwoord vorm kreeg? |
|
[extend-schemas] Acceptance criterion 7.3 verifieert een non-event — bedoeling?
Omdat DocuDesk in deze change niet wordt aangepast (expliciet non-goal), is "dropdown blijft leeg" per definitie waar — er is geen kanaal waardoor het wel zou kunnen werken. De intentie snap ik (sanity check dat de fix niet per ongeluk doorheen lekt), maar dit is eerder iets voor de DocuDesk follow-up PR dan een acceptance criterion voor deze change. Niet blocking — overwegen om weg te halen of te herformuleren? |
WilcoLouwerse
left a comment
There was a problem hiding this comment.
Inline findings for PR #1427 — Thorough review.
🔴 Blocker — PR title says "anonymisation project" but ships zero anonymisation contentThe PR title is "Add specs for the anonymisation project". A full-text search across the 1332-line diff for The newly-added PR description clarifies what the changes are (extending schemas + folder access control) but doesn't bridge them back to the "anonymisation project" framing in the title. Impact: Reviewers and stakeholders sourced into this PR by the title (security officers, DPOs, the anonymisation-project sponsor) will not find what they were looking for. Cross-references from other tickets / Specter outputs / project trackers that point at "PR 1427 — anonymisation specs" become misleading. If the changes here are scaffolding for a later anonymisation change, that intent is invisible in the artefacts. A reviewer cannot evaluate "does this serve the anonymisation project?" because the proposals don't claim that lineage. Suggested fix: Either (a) rename the PR title to honestly reflect the contents — e.g. "Add OpenSpec changes for register |
WilcoLouwerse
left a comment
There was a problem hiding this comment.
3 blockers require fixes before merge — canonical spec landed before archive, plan.json shipped at proposal time, and PR title says "anonymisation" but ships none. Both proposals are well-reasoned (especially the validate-self-folder-access design narrative) — the issues are workflow-packaging and missing definitions (default-deny invariant, "self" definition, wire-format breaking change, DocuDesk cross-repo link); 7 🟡 concerns + 3 🟢 minors detailed inline. Note: quality / Security (composer) and quality / Integration Tests (Newman) show as failing on this commit but are unrelated to this docs-only PR.
Blockers: - Delete openspec/specs/self-folder-access-control/spec.md (canonical spec lands via /opsx:archive, not at proposal time) - Delete plan.json for both changes (generated by /opsx:plan-to-issues post-approval; tracking issues #1428 and #1342 already exist) Reformatting: - Convert both tasks.md files to flat checkbox-tree format per OpenSpec convention (parent + nested checkboxes) - Drop hardcoded line numbers across proposals/designs extend-schemas-in-register-service: - Resolve 'properties' stripping contradiction in proposal/design/spec (the serializer preserves; consumer-side stripping stays in consumer) - Add wire-format breaking-change note for orphan-ID retention (proposal What Changes + design risk row) - Add N+1 schema-lookup risk row (preserved pre-existing; batched lookup deferred to follow-up) - Add anonymisation-lineage paragraph + DocuDesk follow-up note - Drop the 'DocuDesk dropdown stays empty' non-event criterion (7.3) - Drop bare '## Requirements' header - Convert Open Questions to Resolved Questions validate-self-folder-access: - Add Default-deny invariant requirement to spec - Add explicit 'Definition of self' requirement (IUser arg → session user → deny when neither present) - Scope rate-limiting/alerting on probing bursts as out-of-scope follow-up (this change provides the audit input only) - Fix ADR-014 reference → ADR-007 (Security and Auth) - Add anonymisation-lineage paragraph - Convert Open Questions to Resolved Questions + Deferred section
Addressed in b684e6cThanks both for the careful read. Net: −1020 / +185 lines, all in Blockers
Concerns (Wilco)
Concerns (Mark)
Minors (Wilco)
Quality CIThe two failing checks ( |
|
✅ Resolved in b684e6c — PR title renamed to "Add OpenSpec changes: extend-schemas-in-register-service + validate-self-folder-access (anonymisation scaffolding)" and both proposals now carry an |
WilcoLouwerse
left a comment
There was a problem hiding this comment.
All 12 inline findings + the PR-title finding cleanly resolved in b684e6c3 — premature artefacts removed, default-deny invariant + "self" definition added, breaking-change framing upgraded, and the Anonymisation lineage paragraphs make the title/content alignment honest. Zero new findings; both proposals are merge-ready.
Adding specifications for two issues:
These specifications are primarily for fixing functionality to enable extending schema's within a register when requested, and update the behaviour of openregister regarding connecting folders to an object.
These issues address functionality that will later be needed in the Anonymisation project (Docudesk), for connecting dossiers to custom folders in the Nextcloud file system, and fixing the functionality of Docudesk to choose proper schemas in the app settings.