Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
404 commits
Select commit Hold shift + click to select a range
1ea0ca8
Merge pull request #29 from ConductionNL/feature/dashboard
rubenvdlinde Mar 23, 2026
4dae180
Merge remote-tracking branch 'origin/development' into feature/openre…
rubenvdlinde Mar 23, 2026
ea69abd
Merge pull request #31 from ConductionNL/feature/openregister-integra…
rubenvdlinde Mar 23, 2026
8d0dbde
Merge remote-tracking branch 'origin/development' into feature/case-m…
rubenvdlinde Mar 23, 2026
8e3058e
Merge pull request #32 from ConductionNL/feature/case-management
rubenvdlinde Mar 23, 2026
710dae7
Merge remote-tracking branch 'origin/development' into feature/zaak-i…
rubenvdlinde Mar 23, 2026
fa6b4c3
Merge pull request #34 from ConductionNL/feature/zaak-intake-flow
rubenvdlinde Mar 23, 2026
f92efb4
Merge pull request #35 from ConductionNL/feature/task-management
rubenvdlinde Mar 23, 2026
8cd7e65
Merge remote-tracking branch 'origin/development' into feature/case-d…
rubenvdlinde Mar 23, 2026
7f7bc43
Merge pull request #37 from ConductionNL/feature/case-dashboard-view
rubenvdlinde Mar 23, 2026
b89e90a
Merge remote-tracking branch 'origin/development' into feature/roles-…
rubenvdlinde Mar 23, 2026
f4644e3
Merge pull request #38 from ConductionNL/feature/roles-decisions
rubenvdlinde Mar 23, 2026
e150cd5
Merge remote-tracking branch 'origin/development' into feature/werkvo…
rubenvdlinde Mar 23, 2026
f2cb20a
Merge pull request #40 from ConductionNL/feature/werkvoorraad
rubenvdlinde Mar 23, 2026
ef1ff19
Merge remote-tracking branch 'origin/development' into feature/case-t…
rubenvdlinde Mar 23, 2026
1edc144
Merge pull request #41 from ConductionNL/feature/case-types
rubenvdlinde Mar 23, 2026
1790b4d
Merge pull request #43 from ConductionNL/feature/my-work
rubenvdlinde Mar 23, 2026
fc44cd6
Merge remote-tracking branch 'origin/development' into feature/zaakty…
rubenvdlinde Mar 23, 2026
449f4c0
Merge pull request #44 from ConductionNL/feature/zaaktype-configuratie
rubenvdlinde Mar 23, 2026
881b873
docs: Rewrite feature overview README with full standards references …
rubenvdlinde Mar 23, 2026
362dab3
chore: Remove duplicate feature doc rules — handled globally by opsx:…
rubenvdlinde Mar 23, 2026
871c3a4
feat: Add Playwright E2E tests and LLM test flows
rubenvdlinde Mar 23, 2026
6b1c690
test: Add case detail form tests with all sections and fields
rubenvdlinde Mar 24, 2026
612685b
fix: Store syntax error and deep link registration
rubenvdlinde Mar 24, 2026
b0f8fa6
ci: Enable Playwright spec-to-test coverage reporting (threshold 75%)
rubenvdlinde Mar 24, 2026
e0576d4
fix: Add translated sidebar titles for case and task detail views
rubenvdlinde Mar 24, 2026
403e612
docs(procest): add OpenSpec artifacts for start-case-widget [#105]
rubenvdlinde Mar 24, 2026
784fadb
feat(procest): add Start Case dashboard widget [#105]
rubenvdlinde Mar 24, 2026
b294ac9
chore(procest): archive start-case-widget change [#105]
rubenvdlinde Mar 24, 2026
4a374b5
test: Enrich Playwright tests for all Procest pages
rubenvdlinde Mar 24, 2026
4599b9b
docs(procest): plan.json, issues, and feature docs for start-case-wid…
rubenvdlinde Mar 24, 2026
02f7dd9
Merge pull request #104 from ConductionNL/fix/store-syntax-and-deeplinks
rubenvdlinde Mar 24, 2026
413155e
Merge pull request #106 from ConductionNL/feature/105/start-case-widget
rubenvdlinde Mar 24, 2026
99c0a3e
chore: add missing test/build artifact entries to .gitignore
rubenvdlinde Apr 9, 2026
368fd2f
fix: resolve merge conflict markers in .gitignore
rubenvdlinde Apr 9, 2026
275caa5
adr: push 2 architecture decisions from Specter
Apr 16, 2026
1930ee6
feat: Add OpenSpec change advice-management from Specter
Apr 16, 2026
fd8e7db
feat: Add OpenSpec change advice-management from Specter
Apr 16, 2026
06c7966
chore: add hydra.json for advice-management
Apr 16, 2026
2c6be3e
chore: build result (#134)
rubenvdlinde Apr 16, 2026
dbeb34b
chore: build result (#135)
rubenvdlinde Apr 16, 2026
53bbac7
chore: build result (#136)
rubenvdlinde Apr 16, 2026
4dcf3c4
chore: review round 1 results (#168)
rubenvdlinde Apr 16, 2026
6dc2b21
chore: review round 2 results (#168)
rubenvdlinde Apr 16, 2026
320e0c4
chore: build result (#142)
rubenvdlinde Apr 16, 2026
5e7774e
chore: build result (#152)
rubenvdlinde Apr 16, 2026
976ac3e
chore: build result (#154)
rubenvdlinde Apr 16, 2026
d3ea690
chore: remove duplicate adr-adr-*.md files (double prefix bug)
rubenvdlinde Apr 17, 2026
d7ab4e6
Merge pull request #223 from ConductionNL/spec/advice-management
rubenvdlinde Apr 18, 2026
a5361fe
chore: build result (#123)
rubenvdlinde Apr 18, 2026
0be6c2f
chore: build result (#135)
rubenvdlinde Apr 18, 2026
473748d
chore: build result (#137)
rubenvdlinde Apr 18, 2026
3993bf2
chore: build result (#141)
rubenvdlinde Apr 18, 2026
30c2fcd
chore: build result (#157)
rubenvdlinde Apr 18, 2026
139d793
chore: build result (#175)
rubenvdlinde Apr 18, 2026
7c0c54f
chore: build result (#179)
rubenvdlinde Apr 18, 2026
0e9d812
chore: build result (#205)
rubenvdlinde Apr 18, 2026
50db73f
chore: build result (#180)
rubenvdlinde Apr 18, 2026
b878cd7
chore: build result (#135)
rubenvdlinde Apr 18, 2026
b37d8fc
chore: build result (#136)
rubenvdlinde Apr 18, 2026
407eba9
chore: build result (#123)
rubenvdlinde Apr 18, 2026
88b9fd4
chore: build result (#137)
rubenvdlinde Apr 18, 2026
84cfae9
chore: build result (#141)
rubenvdlinde Apr 18, 2026
dd43e77
chore: build result (#175)
rubenvdlinde Apr 18, 2026
9654121
chore: build result (#179)
rubenvdlinde Apr 18, 2026
3e5858b
chore: build result (#212)
rubenvdlinde Apr 18, 2026
6c6dcb6
chore: build result (#206)
rubenvdlinde Apr 18, 2026
198266d
chore: build result (#215)
rubenvdlinde Apr 18, 2026
ef665f2
chore: build result (#213)
rubenvdlinde Apr 18, 2026
2fd7738
test(zrc-009): fix Vertrouwelijkheidaanduiding tests so named-args re…
rubenvdlinde Apr 18, 2026
9da72f1
Merge pull request #255 from ConductionNL/fix/zgw-zrc-vertrouwelijkhe…
rubenvdlinde Apr 18, 2026
4a7c08b
test: fix pre-existing broken unit tests (ObjectService named-arg stubs)
rubenvdlinde Apr 18, 2026
46663a4
Merge origin/development into fix/broken-tests-pre-existing
rubenvdlinde Apr 18, 2026
d683577
Merge pull request #256 from ConductionNL/fix/broken-tests-pre-existing
rubenvdlinde Apr 18, 2026
3f18624
chore: build result (#157)
rubenvdlinde Apr 19, 2026
ef6630c
chore: drop stale .claude/openspec/architecture/ — org ADRs live in h…
rubenvdlinde Apr 19, 2026
6105c95
chore: applier verdict (#253)
rubenvdlinde Apr 19, 2026
3b4cd48
chore(quality): phpcbf + email typo
rubenvdlinde Apr 20, 2026
820948c
feat(phpcs): SpecTag sniff
rubenvdlinde Apr 20, 2026
00ac01f
chore(quality): drive procest to 0 phpcs + phpstan + psalm; baseline …
rubenvdlinde Apr 20, 2026
f5b013f
chore: build result (#123)
rubenvdlinde Apr 20, 2026
ad65f5f
chore: build result (#157)
rubenvdlinde Apr 20, 2026
4c079b5
chore: build result (#179)
rubenvdlinde Apr 20, 2026
cf4b5c8
chore: build result (#137)
rubenvdlinde Apr 20, 2026
4d8e31a
chore: build result (#180)
rubenvdlinde Apr 20, 2026
c500950
chore: build result (#206)
rubenvdlinde Apr 20, 2026
d11311c
chore: build result (#205)
rubenvdlinde Apr 20, 2026
040a224
chore: build result (#212)
rubenvdlinde Apr 21, 2026
e5e3f0f
chore: build result (#213)
rubenvdlinde Apr 21, 2026
92bbc78
chore: build result (#215)
rubenvdlinde Apr 21, 2026
c20fa31
feat: Add OpenSpec change parafeerroute-engine from Specter
Apr 23, 2026
99fb48c
feat: Add OpenSpec change parafeerroute-engine from Specter
Apr 23, 2026
578e695
chore: add hydra.json for parafeerroute-engine
Apr 23, 2026
66871b1
chore: link issue to hydra.json for parafeerroute-engine
Apr 23, 2026
a4fb760
feat: Add OpenSpec change parafering-actions from Specter
Apr 23, 2026
561d243
feat: Add OpenSpec change parafering-actions from Specter
Apr 23, 2026
9f9320f
chore: add hydra.json for parafering-actions
Apr 23, 2026
998390b
chore: link issue to hydra.json for parafering-actions
Apr 23, 2026
09eb3b2
feat: Add OpenSpec change parafering-dashboard from Specter
Apr 23, 2026
7e33a03
feat: Add OpenSpec change parafering-dashboard from Specter
Apr 23, 2026
04fbbfd
chore: add hydra.json for parafering-dashboard
Apr 23, 2026
6620e65
chore: link issue to hydra.json for parafering-dashboard
Apr 23, 2026
db3d9f3
chore: build result (#290)
rubenvdlinde Apr 23, 2026
7281289
chore: build result (#137)
rubenvdlinde Apr 23, 2026
824a51b
chore: build result (#274)
rubenvdlinde Apr 23, 2026
a22ece1
chore: build result (#290)
rubenvdlinde Apr 23, 2026
45106c5
chore: build result (#137)
rubenvdlinde Apr 23, 2026
5bfa812
chore: build result (#274)
rubenvdlinde Apr 23, 2026
f2f232e
chore: build result (#290)
rubenvdlinde Apr 23, 2026
2d68e8c
chore: build result (#137)
rubenvdlinde Apr 23, 2026
de9d220
chore: build result (#274)
rubenvdlinde Apr 23, 2026
0c253bd
chore: build result (#290)
rubenvdlinde Apr 23, 2026
633a9dc
chore: build result (#290)
rubenvdlinde Apr 23, 2026
e8ce254
chore: build result (#274)
rubenvdlinde Apr 23, 2026
6057fa3
chore: build result (#274)
rubenvdlinde Apr 23, 2026
01a2caa
chore: build result (#290)
rubenvdlinde Apr 23, 2026
c1f3192
docs(adr): foundation cleanup — adr-000 non-ADR header reframe (#309)
rubenvdlinde May 3, 2026
22af812
chore: add .github/CODEOWNERS for auto-review-request (#310)
rubenvdlinde May 3, 2026
dd66de4
feat(openspec): procest-adopt-or-abstractions — heaviest spec rewrite…
rubenvdlinde May 3, 2026
462da39
chore: add SPDX-License-Identifier + SPDX-FileCopyrightText to lib/ (…
rubenvdlinde May 3, 2026
0353b49
chore: bump @conduction/nextcloud-vue to ^0.1.0-beta.17 (#313)
rubenvdlinde May 3, 2026
28ac1c1
feat(openspec): procest-legacy-quality-cleanup tracking change (#314)
rubenvdlinde May 3, 2026
c3f5814
perf: split shared Vue/@nextcloud/vue chunks across widget entry-poin…
rubenvdlinde May 5, 2026
67d16ae
feat(docs): adopt @conduction/docusaurus-preset + move to procest.con…
rubenvdlinde May 7, 2026
0b84b97
Merge pull request #316 from ConductionNL/feature/conduction-nl-migra…
rubenvdlinde May 7, 2026
8cf4e3e
feat(docs): cobalt hero on landing (preset 1.5.1) (#317)
rubenvdlinde May 7, 2026
fb23b06
feat: server-side dashboard KPI aggregation (#318)
rubenvdlinde May 9, 2026
75e65c4
chore(deps): bump @conduction/nextcloud-vue to 1.0.0-beta.6 (#319)
rubenvdlinde May 9, 2026
be596db
feat(spec): procest-manifest-v1 — JSON manifest renderer migration
rubenvdlinde May 9, 2026
fe2949d
feat(shell): adopt CnAppRoot + delete obsolete per-page views
rubenvdlinde May 9, 2026
a1fdd42
chore(deps): bump @conduction/nextcloud-vue to 1.0.0-beta.12 + en_US …
rubenvdlinde May 9, 2026
5db3089
Merge pull request #320 from ConductionNL/feature/procest-manifest-v1
rubenvdlinde May 10, 2026
95a4bc1
docs(openspec): procest-store-migration change — drop phantom store c…
rubenvdlinde May 10, 2026
4e94a35
fix(store): replace phantom calls in sub-stores with canonical lib API
rubenvdlinde May 10, 2026
ed17486
fix(views): replace phantom store calls in map and voorstel views
rubenvdlinde May 10, 2026
c937529
Merge pull request #321 from ConductionNL/feature/procest-store-migra…
rubenvdlinde May 10, 2026
0484921
chore: drop App.vue OR-availability guard (use CnAppRoot default) (#322)
rubenvdlinde May 10, 2026
d886c62
chore: add @nextcloud/* peer deps + .npmrc to fix dev baseline (#324)
rubenvdlinde May 10, 2026
7bc6fa4
chore(openspec): remove decidesk spec leaks (p2-minutes-and-decisions…
rubenvdlinde May 11, 2026
5f2e860
feat(werkvoorraad): apply spec — add missing i18n strings (#329)
rubenvdlinde May 11, 2026
2be5e5a
feat(dashboard): apply spec — Cases by Type widget + widget route fix…
rubenvdlinde May 11, 2026
7471fea
feat(parafering-actions): apply spec (partial — gates + i18n deferred…
rubenvdlinde May 11, 2026
f4504c2
feat(parafeerroute-engine): apply spec (partial — gates + i18n deferr…
rubenvdlinde May 11, 2026
79f627c
feat(zaaktype-configuratie): apply spec (no-op — already implemented …
rubenvdlinde May 11, 2026
a0a9238
feat(admin-settings): apply spec — integrate Results, Roles, Properti…
rubenvdlinde May 11, 2026
12e40bc
feat(zaak-intake-flow): apply spec (#335)
rubenvdlinde May 11, 2026
5852872
feat(mobiel-inspectie): apply spec (#336)
rubenvdlinde May 11, 2026
3cd1b6a
feat(stuf-support): apply spec (#337)
rubenvdlinde May 11, 2026
14fd0e1
feat(unit-test-coverage-75): apply spec (#339)
rubenvdlinde May 11, 2026
8aabab7
feat(procest-store-migration): apply spec (#340)
rubenvdlinde May 11, 2026
4e4df6d
feat(legesberekening): register leges API routes (#338)
rubenvdlinde May 11, 2026
acbea9b
feat(multi-tenant-saas): apply spec (#341)
rubenvdlinde May 11, 2026
6c58eca
feat(procest-adopt-or-abstractions): apply spec (#342)
rubenvdlinde May 11, 2026
a005327
feat(base-register-seed-data): apply spec (#344)
rubenvdlinde May 11, 2026
d23f63a
feat(bw-parafering): apply spec (#345)
rubenvdlinde May 11, 2026
8a5d1e7
feat(case-definition-portability): apply spec (#346)
rubenvdlinde May 11, 2026
22ca3d4
feat(ai-assisted-processing): apply spec (#348)
rubenvdlinde May 11, 2026
71a52e9
chore(openspec): generate workflow-definition-model spec (#347)
rubenvdlinde May 11, 2026
8f02b50
feat(appointment-scheduling): apply spec (#349)
rubenvdlinde May 11, 2026
5e48b39
feat(advice-management): apply spec (#351)
rubenvdlinde May 11, 2026
525f3a8
chore(openspec): generate status-transition-engine spec (#352)
rubenvdlinde May 11, 2026
340c734
chore(openspec): generate role-based-step-routing spec (#353)
rubenvdlinde May 11, 2026
677186e
feat(case-sharing-collaboration): apply spec (#350)
rubenvdlinde May 11, 2026
d0d7264
chore(openspec): generate zgw-api-mapping spec (#354)
rubenvdlinde May 11, 2026
aa80a32
chore(openspec): generate process-step-configuration spec (#355)
rubenvdlinde May 11, 2026
ece3342
chore(openspec): generate visual-workflow-editor spec (#356)
rubenvdlinde May 11, 2026
f03e988
chore(openspec): complete artifacts for roles-decisions + 3 governanc…
rubenvdlinde May 11, 2026
a601748
chore(openspec): complete specs/<cap>/spec.md for 5 procest case chan…
rubenvdlinde May 11, 2026
ab87421
chore(openspec): generate automatic-actions spec (#359)
rubenvdlinde May 11, 2026
3275432
chore(openspec): complete artifacts for vth-module + woo-case-type + …
rubenvdlinde May 11, 2026
29603ec
chore(openspec): complete artifacts for 3 integration changes (email/…
rubenvdlinde May 11, 2026
c007575
chore(openspec): generate voorstel-management spec (#362)
rubenvdlinde May 11, 2026
bddb990
chore(openspec): generate bezwaar-hearing spec (#364)
rubenvdlinde May 11, 2026
b6ad778
chore(openspec): generate beroep-escalation spec (#363)
rubenvdlinde May 11, 2026
967d4bc
chore(openspec): generate enforcement-lhs spec (#365)
rubenvdlinde May 11, 2026
9e3d5c1
chore(openspec): generate bezwaar-advisory-committee spec (#366)
rubenvdlinde May 11, 2026
7e7077c
chore(openspec): generate case-location spec (#367)
rubenvdlinde May 11, 2026
ca691cf
chore(openspec): generate vth-workflow-templates spec (#368)
rubenvdlinde May 11, 2026
d4e3f01
chore(openspec): generate bezwaar-lifecycle spec (#369)
rubenvdlinde May 11, 2026
60c6af2
chore(openspec): generate bezwaar-decision spec (#370)
rubenvdlinde May 11, 2026
d83deb2
chore(openspec): generate case-map-overview spec (#371)
rubenvdlinde May 11, 2026
a3f8cb9
chore(openspec): generate inspection-checklists spec (#372)
rubenvdlinde May 11, 2026
1e02eea
refactor(legesberekening): adopt manifest pattern — schema CRUD via m…
rubenvdlinde May 11, 2026
55cb304
refactor(advice-management): adopt manifest pattern — advice CRUD via…
rubenvdlinde May 11, 2026
8b412f0
refactor(multi-tenant-saas): adopt manifest pattern — tenant CRUD via…
rubenvdlinde May 11, 2026
f5a9450
refactor(parafeerroute): adopt manifest pattern — delete bespoke CRUD…
rubenvdlinde May 11, 2026
39ceef0
refactor(case-sharing-collaboration): adopt manifest pattern — CRUD v…
rubenvdlinde May 11, 2026
3ca7b0d
chore(openspec): generate map-component spec (#378)
rubenvdlinde May 11, 2026
29b23b6
chore(openspec): generate pdok-integration spec (#379)
rubenvdlinde May 11, 2026
84c3d8a
chore(openspec): generate wms-wfs-layers spec (#380)
rubenvdlinde May 11, 2026
d8a30a1
feat(process-step-configuration): apply spec (#381)
rubenvdlinde May 11, 2026
9ae3d54
feat(workflow-definition-model): apply spec (#382)
rubenvdlinde May 11, 2026
3dfe711
chore(openspec): generate parafering-audit-trail spec (#383)
rubenvdlinde May 11, 2026
018ad7c
feat(visual-workflow-editor): apply spec (#384)
rubenvdlinde May 11, 2026
cb98339
feat(role-based-step-routing): apply spec (#385)
rubenvdlinde May 11, 2026
ee6196c
feat(automatic-actions): apply spec (#386)
rubenvdlinde May 11, 2026
f8b8689
feat(status-transition-engine): apply spec (#387)
rubenvdlinde May 11, 2026
0add5de
feat(map-component): apply spec (#388)
rubenvdlinde May 11, 2026
9159c53
feat(case-map-overview): apply spec (#389)
rubenvdlinde May 11, 2026
43d1c5c
feat(pdok-integration): apply spec (#390)
rubenvdlinde May 11, 2026
4c545dd
feat(enforcement-lhs): apply spec (#391)
rubenvdlinde May 11, 2026
144297f
feat(vth-workflow-templates): apply spec (#392)
rubenvdlinde May 11, 2026
ce8039b
feat(inspection-checklists): apply spec (#393)
rubenvdlinde May 11, 2026
959e9e7
feat(bezwaar-lifecycle): apply spec (#394)
rubenvdlinde May 11, 2026
c8880e0
feat(case-location): apply spec (#395)
rubenvdlinde May 11, 2026
7ac5a98
feat(parafering-audit-trail): apply spec (#396)
rubenvdlinde May 11, 2026
b0997de
feat(bezwaar-advisory-committee): apply spec (#397)
rubenvdlinde May 11, 2026
021cd29
feat(bezwaar-hearing): apply spec (partial recovery) (#398)
rubenvdlinde May 11, 2026
25388c4
feat(beroep-escalation): apply spec (partial recovery) (#399)
rubenvdlinde May 11, 2026
af5c54d
feat(bezwaar-decision): apply spec (#400)
rubenvdlinde May 11, 2026
cadb834
feat(wms-wfs-layers): apply spec (#401)
rubenvdlinde May 11, 2026
fadb2ee
chore(openspec): mark applied + archive clean changes + cleanup dupli…
rubenvdlinde May 11, 2026
3262392
chore(openspec): normalize spec format + archive newly-clean changes …
rubenvdlinde May 11, 2026
c64365b
chore(phpcs): auto-fix 602 PHPCS violations in lib/ via phpcbf
rubenvdlinde May 12, 2026
23419be
fix(phpcs): clear remaining manual PHPCS errors (named args, inline-i…
rubenvdlinde May 12, 2026
c6a4029
chore(quality): fix eslint + stylelint + build to clear procest CI gates
rubenvdlinde May 12, 2026
4a2770c
feat: adopt the Features & Roadmap menu
rubenvdlinde May 12, 2026
2947c92
fix: load shared splitChunks bundles in page templates; add missing c…
rubenvdlinde May 12, 2026
ac4abd9
chore: refresh package-lock.json for the @conduction/nextcloud-vue ^1…
rubenvdlinde May 12, 2026
13c81c2
fix(tests): load Nextcloud base.php before the OC/Doctrine stubs
rubenvdlinde May 12, 2026
92b7921
test: declare coverage for classes exercised via inheritance/collabor…
rubenvdlinde May 12, 2026
affb0b5
fix(e2e): navigate via /index.php paths so routes resolve under php -S
rubenvdlinde May 12, 2026
cf6606b
fix(e2e): scope settings-button locator; revert partial case/voorstel…
rubenvdlinde May 12, 2026
2dc2038
fix: drop broken parafeeractie seed objects; tighten Work Queue / Set…
rubenvdlinde May 12, 2026
af4c9d0
fix(e2e): take first match for the 'Actions' button (page + row actio…
rubenvdlinde May 12, 2026
d12d258
fix(e2e): use role=tab for My Work filter tabs; correct Tasks search …
rubenvdlinde May 12, 2026
25dfed3
fix(e2e): root navigations need trailing slash; scope New Case modal …
rubenvdlinde May 12, 2026
b5a886c
feat(mcp-tools): ProcestToolProvider — AI companion MCP tools (MVP sk…
rubenvdlinde May 12, 2026
3a4d8b4
fix(e2e): revert trailing-slash navigation (php -S 404s on it); reach…
rubenvdlinde May 12, 2026
09893e1
Merge remote-tracking branch 'origin/development' into chore/phpcbf-e…
rubenvdlinde May 12, 2026
0dc88c8
Merge pull request #421 from ConductionNL/chore/phpcbf-eslint-styleli…
rubenvdlinde May 12, 2026
5c98df5
test(e2e): write Playwright artifacts where the shared workflow uploa…
rubenvdlinde May 12, 2026
4e81547
Merge pull request #424 from ConductionNL/chore/playwright-artifact-p…
rubenvdlinde May 12, 2026
34f14d6
fix: route procest API calls through generateUrl() so they work witho…
rubenvdlinde May 12, 2026
a911aa3
Merge pull request #425 from ConductionNL/chore/procest-api-url-fix
rubenvdlinde May 12, 2026
4864b41
chore: remove orphaned settings views (UserSettings.vue, PartnerAdmin…
rubenvdlinde May 12, 2026
d515e4e
test(e2e): fixme the dashboard-header + Cases create-form tests under…
rubenvdlinde May 12, 2026
cfa9b28
Merge pull request #428 from ConductionNL/chore/fixme-degraded-e2e
rubenvdlinde May 12, 2026
ec112ec
feat(manifest): convert the Voorstellen list page to declarative type…
rubenvdlinde May 12, 2026
d221dc7
chore(deps): bump @conduction/nextcloud-vue to ^1.0.0-beta.40
rubenvdlinde May 12, 2026
bce785f
Merge pull request #430 from ConductionNL/chore/bump-nc-vue-beta40
rubenvdlinde May 12, 2026
a00c997
docs(journeydoc): bootstrap capture-driven user documentation (#423)
rubenvdlinde May 12, 2026
d0e0225
chore(docs): bump @conduction/docusaurus-preset to 1.5.1 in lockfile …
rubenvdlinde May 12, 2026
2dea17a
Merge branch 'feat/voorstellen-manifest-index' into development
rubenvdlinde May 12, 2026
47fe380
Merge branch 'chore/trim-orphan-views' into development
rubenvdlinde May 12, 2026
4b75647
Merge branch 'feature/adopt-features-roadmap-menu' into development
rubenvdlinde May 12, 2026
e8fa060
fix(docs): MDX-safe TODO placeholders in journeydoc tutorial skeleton…
rubenvdlinde May 12, 2026
c8ff743
fix(quality): clear phpcs errors (inline-if, named args, doc comments…
rubenvdlinde May 12, 2026
529e41e
Merge origin/development (journeydoc MDX fix #432) into development c…
rubenvdlinde May 12, 2026
84dcaa7
chore(docs): bump @conduction/docusaurus-preset to 2.6.1 (#433)
rubenvdlinde May 12, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
221 changes: 221 additions & 0 deletions .claude/openspec/architecture/adr-001-data-layer.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,221 @@
- ALL domain data → OpenRegister objects. NO custom Entity/Mapper for domain data.
- App config → `IAppConfig`. NOT OpenRegister.
- Cross-entity references: OpenRegister relations (register+schema+objectId). NO foreign keys.
MUST NOT store foreign keys or embed full objects.

### Schema standards

- Schemas: PascalCase, schema.org vocabulary, explicit types + required flags + description field.
- MUST NOT invent custom property names when a schema.org equivalent exists.
- Contact schemas MUST align with vCard properties (fn, email, tel, adr).
- Dutch government fields SHOULD use a mapping layer translating between international standards
and Dutch specs — do not hardcode Dutch field names as primary.
- Schema changes that remove or rename properties are BREAKING. Adding optional properties is non-breaking.

### Register templates

- Location: `lib/Settings/{app}_register.json` (OpenAPI 3.0 + `x-openregister` extensions).
- Three template categories:
- **App configuration** — define data models (schemas/registers/views/mappings).
Mark with `x-openregister.type: "application"`.
- **Mock data** — fictional but realistic seed data for dev/test.
Mark with `x-openregister.type: "mock"`.
- **Government standards** — aligned to Dutch API specs (BAG, BRP, KVK, DSO).
- Import mechanism: `ConfigurationService::importFromApp(appId, data, version, force)` →
`ImportHandler::importFromApp()`. Called from repair step or `SettingsLoadService`.
- Idempotency: re-importing with `force: false` MUST NOT create duplicates. Match by slug
using `ObjectService::searchObjects` with `_rbac: false` and `_multitenancy: false`.
Use `version_compare` for skip logic.

### Seed data

Apps that store data in OpenRegister are empty on first install. An empty app cannot be
meaningfully tested — there are no objects to view, search, filter, or interact with.
This blocks both automated browser testing and manual QA. The Loadable Register Template
pattern (see Register templates above) already supports seed data via `components.objects[]`
with the `@self` envelope.

**Requirements:**

- Every app using OpenRegister MUST include 3-5 realistic objects per schema in
`lib/Settings/{app}_register.json`.
- Use `@self` envelope: `{ "@self": { "register": ..., "schema": ..., "slug": ... }, ...properties }`.
Register/schema MUST match keys; slug is unique human-readable identifier for matching.
- Use general organisation data (municipality, consultancy, travel agency, non-profit) —
NOT context-specific. Varied, realistic field values.
- Mock data quality: real Dutch street names, valid postcodes (`[1-9][0-9]{3}[A-Z]{2}`),
correct municipality/KVK codes, BSNs that pass 11-proef. Fictional but distinguishable from real.
- Cross-register consistency: BRP→BAG, KVK→BAG, DSO→BAG references must be valid.
- Loaded on install alongside schemas via same `importFromApp()` pipeline.
- MUST be idempotent — re-importing skips existing objects matched by slug.

**In OpenSpec artifacts:**

- **In design.md**: MUST include a Seed Data section when change introduces/modifies schemas —
define seed objects per schema with concrete field values and related items (files, notes, tasks, contacts).
- **In tasks.md**: MUST include a seed data generation task when change introduces/modifies schemas.

**Exceptions** (no seed data required):

- **nldesign** — has no OpenRegister schemas.
- **ExApp sidecar wrappers** (openklant, opentalk, openzaak, valtimo, n8n-nextcloud) — proxy
external services and do not use OpenRegister.
- **nextcloud-vue** — shared library, no seed data applicable.
- Changes that only modify frontend components or non-schema backend logic (e.g., settings,
permissions) do not require seed data.

**Limitations:** OpenRegister's `ImportHandler` currently supports only flat seed objects.
Related items (files, notes, tasks, contacts) linked through the relation system are tracked
on the product roadmap. Until then, seed data is limited to object properties defined in schemas.

### Deduplication check

- Before proposing new capability: search `openspec/specs/` and `openregister/lib/Service/` for overlap
with ObjectService, RegisterService, SchemaService, ConfigurationService, and shared Vue components.
- If similar capability exists: MUST reference it and explain why new code is needed rather than extending.
- Proposals duplicating existing functionality without justification MUST be rejected.
- **In design.md**: MUST include a "Reuse Analysis" section listing existing OpenRegister services leveraged.
- **In tasks.md**: MUST include a "Deduplication Check" task verifying no overlap — document findings
even if "no overlap found".

### Schema migrations

- Breaking schema changes → new migration in repair step. NEVER modify existing migrations.

### OpenRegister + @conduction/nextcloud-vue — DO NOT REBUILD

The platform provides 258+ backend methods and 69+ frontend components. Apps ONLY build
custom logic for domain-specific business rules. Everything below is provided for FREE.

**CRUD & Data Management** (use ObjectService + CnIndexPage + CnDetailPage):
- Single & bulk create, read, update, delete — `ObjectService.saveObject()`, `deleteObject()`
- List with pagination, sorting, filtering — `ObjectService.findAll()` + `CnDataTable`
- Schema-driven forms — `CnFormDialog` (auto-generates from schema) or `CnAdvancedFormDialog`
- Detail views — `CnDetailPage` with `CnDetailGrid`, `CnDetailCard` sections
- Record merging/deduplication — `ObjectService.mergeObjects()`
- Object locking — `ObjectService.lockObject()` / `unlockObject()`

**Import & Export** (use ImportService/ExportService + CnMassImportDialog/CnMassExportDialog):
- CSV, Excel, JSON import with intelligent field mapping — `ImportService`
- CSV, Excel, JSON export with column selection — `ExportService`
- Bulk import with validation and progress — `CnMassImportDialog`
- Filtered export with format picker — `CnMassExportDialog`
- NO custom import dialogs, parsers, upload handlers, or export controllers

**Search & Discovery** (use IndexService + CnFilterBar + CnFacetSidebar):
- Full-text search with field weighting — `IndexService`
- Faceted navigation with counts — `FacetBuilder` + `CnFacetSidebar`
- Semantic search with embeddings — `VectorizationService`
- Hybrid search (keyword + semantic) — automatic
- Search analytics — `SearchTrailService` (popular terms, activity)
- NO custom search endpoints, query builders, or search pages

**File Management** (use FileService + CnObjectSidebar):
- Upload (single/multipart), download, share links — `FileService`
- File tagging, public/private toggle — `FileService`
- Bulk download as ZIP — `createObjectFilesZip()`
- Text extraction from PDFs/Office docs — `TextExtractionService`
- File tab in object sidebar — `CnObjectSidebar` → `CnFilesTab`
- NO custom file upload components, file controllers, or download handlers

**Audit & Compliance** (use AuditTrailService + CnObjectSidebar):
- Full change tracking with before/after snapshots — automatic
- Audit trail tab — `CnObjectSidebar` → `CnAuditTrailTab`
- GDPR data subject access requests — `inzageverzoek()`, `verwerkingsregister()`
- Audit export and analytics — `AuditTrailController`
- NO custom audit logging, change tracking, or compliance controllers

**Dashboard & Analytics** (use CnDashboardPage + CnChartWidget + CnStatsBlock):
- Drag-drop widget dashboard — `CnDashboardPage` with GridStack
- KPI cards — `CnKpiGrid`, `CnStatsBlock`, `CnStatsPanel`
- Charts (line/bar/pie/donut) — `CnChartWidget` (ApexCharts)
- Data tables as widgets — `CnTableWidget`
- Editable data grids — `CnObjectDataWidget`
- NO custom dashboard layouts, chart components, or KPI cards

**Forms & Dialogs** (use CnFormDialog + schema-driven generation):
- Auto-generated create/edit forms — `CnFormDialog` reads schema → generates fields
- JSON/metadata editing — `CnAdvancedFormDialog` with Properties/Data/Metadata tabs
- Schema editor — `CnSchemaFormDialog`
- Delete/Copy/Mass operations — `CnDeleteDialog`, `CnCopyDialog`, `CnMassDeleteDialog`
- NO custom form components, validation logic, or dialog wrappers

**Navigation & Pagination** (use CnPagination + CnActionsBar + useListView):
- Pagination control with size selector — `CnPagination`
- Action bar (add, search, toggle views) — `CnActionsBar`
- List state management — `useListView` composable (handles search, filter, sort, page)
- Detail state management — `useDetailView` composable
- NO custom pagination logic, debounced search, or list state management

**Authorization & RBAC** (use AuthorizationService + PropertyRbacHandler):
- Role-based access control — `AuthorizationService`
- Field-level permissions — `PropertyRbacHandler`
- Object-level restrictions — `PermissionHandler`
- Authorization audit — `AuthorizationAuditService`
- NO custom permission checks, role systems, or access control middleware

**Webhooks & Events** (use WebhookService):
- Create, test, retry webhooks — `WebhookService`
- CloudEvents format — automatic
- Event subscriptions — selective per schema/action
- NO custom webhook controllers or event dispatchers

**Notifications & Activity** (use NotificationService + ActivityService):
- Nextcloud notifications — `NotificationService`
- Activity feed — `ActivityService`
- Calendar events — `CalendarEventService`
- Deck/Kanban cards — `DeckCardService`

**Store & State** (use createObjectStore + plugins):
- Object stores — `createObjectStore(name)` generates Pinia CRUD store
- Store plugins: `auditTrails`, `files`, `lifecycle`, `relations`, `search`, `selection`
- Column/field/filter generation from schema — `columnsFromSchema()`, `fieldsFromSchema()`
- NO custom Pinia stores for CRUD, Vuex, or manual API call management

**Chat & AI** (use ChatService):
- Multi-turn conversation — `ChatService`
- RAG-based knowledge retrieval — `ContextRetrievalHandler`
- LLM response generation — `ResponseGenerationHandler`

**Data Retention & Archival** (use ArchivalService):
- Legal hold — `LegalHoldService`
- Destruction schedules — `DestructionService`
- Retention policies — `RetentionService`

**Semantic & Hybrid Search** (use SolrController + SettingsController):
- Semantic search via vector embeddings — `SettingsController.semanticSearch()`
- Hybrid search (keyword + semantic combined) — `SolrController.hybridSearch()`
- Vector embedding generation — `VectorizationService`
- NO custom search algorithms — configure via OpenRegister settings

**GraphQL API** (use GraphQLController):
- Query objects across schemas via GraphQL — `GraphQLController.execute()`
- Alternative to REST for complex cross-entity queries

**Organization / Multi-Tenancy** (use OrganisationController):
- Organization CRUD — `OrganisationController`
- Tenant-scoped data isolation — automatic via `TenantLifecycleService`
- NO custom multi-tenancy logic

**Task & Workflow Management** (use TasksController + WorkflowEngineController):
- Task creation and tracking — `TasksController`
- Workflow orchestration — `WorkflowEngineRegistry`
- Scheduled workflows — `ScheduledWorkflowController`
- NO custom task/workflow systems

**Text Extraction** (use FileTextController):
- Extract text from PDFs and Office docs — `TextExtractionService`
- Entity recognition (PII detection) — `EntityRecognitionHandler`
- Content anonymization — automatic

**Timeline & Stages** (use CnTimelineStages):
- Workflow progression visualization — `CnTimelineStages` component
- Stage tracking with status colors

### What apps SHOULD build (custom business logic only):
- External API integrations (SAP, Peppol, TenderNed, etc.)
- PDF/document generation with business-specific templates
- Workflow triggers and business rules specific to the domain
- Notification dispatch with app-specific event types
- Custom settings pages with app-specific configuration
- Background jobs for domain-specific processing
6 changes: 6 additions & 0 deletions .claude/openspec/architecture/adr-002-api.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
- URL pattern: `/index.php/apps/{app}/api/{resource}` — lowercase plural, hyphens.
- Methods: GET=read, POST=create, PUT=update, DELETE=remove. No custom methods.
- Pagination: support `_page` + `_limit`. Response includes `total`, `page`, `pages`.
- Errors: appropriate HTTP status + `message` field. NO stack traces in responses.
- Auth: Nextcloud built-in only. NO custom login/session/token flows.
- Public endpoints: annotate `#[PublicPage]` + `#[NoCSRFRequired]`. Register CORS OPTIONS route.
14 changes: 14 additions & 0 deletions .claude/openspec/architecture/adr-003-backend.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
- **Controller → Service → Mapper** (strict 3-layer). Controllers NEVER call mappers directly.
- Controllers: thin (<10 lines/method). Routing + validation + response only.
- Services: ALL business logic. Stateless — no instance state between requests.
- Mappers: DB CRUD only. No business logic.
- DI: constructor injection with `private readonly`. NO `\OC::$server` or static locators.
- Entity setters: POSITIONAL args only. `$e->setName('val')` — NEVER `$e->setName(name: 'val')`.
(`__call` passes `['name' => val]` but `setter()` uses `$args[0]`.)
- Routes: `appinfo/routes.php`. Specific routes BEFORE wildcard `{slug}` routes.
- Config: `IAppConfig` with sensitive flag for secrets. NEVER read DB directly.
- Lifecycle: schema init via repair steps (`IRepairStep`), background via job queue, events via dispatcher.
- **Spec traceability**: every class and public method MUST have `@spec` PHPDoc tag(s) linking to
the OpenSpec change that caused it: `@spec openspec/changes/{name}/tasks.md#task-N`.
Multiple `@spec` tags allowed (code touched by multiple changes). File-level `@spec` in header docblock.
This enables: code → docblock → spec traceability alongside code → git blame → commit → issue → spec.
Loading
Loading