Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
583 commits
Select commit Hold shift + click to select a range
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
5ac928e
ci: disable SBOM until @conduction/nextcloud-vue dep declarations are…
rubenvdlinde May 13, 2026
04565f6
Merge pull request #435 from ConductionNL/chore/disable-sbom-pending-…
rubenvdlinde May 13, 2026
ececf56
fix(manifest): scope CaseShares to its route param (config.filter)
rubenvdlinde May 13, 2026
fa29f09
Merge pull request #436 from ConductionNL/feat/index-page-route-filters
rubenvdlinde May 13, 2026
0e5492d
docs: fill journeydoc tutorials (content + capture spec + screenshots…
rubenvdlinde May 13, 2026
cfa05ec
feat(manifest): re-add Voorstellen filter-tabs via config.quickFilters
rubenvdlinde May 13, 2026
374c123
Merge pull request #439 from ConductionNL/feat/voorstellen-quick-filt…
rubenvdlinde May 13, 2026
f86b16f
docs: align with canonical product-pages structure (#443)
rubenvdlinde May 13, 2026
bf0c02d
ci(docs): revert deploy source to documentation branch (docs CI separ…
rubenvdlinde May 13, 2026
9575b7a
fix(docs): move tutorials from docs/user-guide/ to canonical docs/tut…
rubenvdlinde May 13, 2026
f4a32bf
chore(security): require 24h cooldown on npm packages (#450)
rubenvdlinde May 17, 2026
5293658
spec(procurement): add procurement suite (8 specs consolidating 26 sp…
rubenvdlinde May 18, 2026
d1bcef0
Merge pull request #451 from ConductionNL/feat/specter-fleet-rollout
rubenvdlinde May 18, 2026
e561614
spec(procest): bring all changes under ADR-032 20-task cap (Wave 2)
rubenvdlinde May 18, 2026
d8b99f7
Merge pull request #452 from ConductionNL/feat/split-oversized-changes
rubenvdlinde May 18, 2026
8fa8d14
feat(docs): wire AI-crawler baseline (preset 3.4.0 + validator + llms…
rubenvdlinde May 18, 2026
1d938b8
feat(docs): per-app OG card + accurate llms.txt links (#473)
rubenvdlinde May 18, 2026
d5a80b4
chore(docs): use validator bin from preset 3.5.0 (#474)
rubenvdlinde May 18, 2026
e5cc34d
chore(docs): bump preset to ^3.6.0 + sync lockfile (#475)
rubenvdlinde May 18, 2026
ceb17e4
chore(deps): upgrade preset lockfile to 3.6.1 (unbreaks deploy) (#478)
rubenvdlinde May 18, 2026
23aaef0
chore(deps): preset lockfile 3.6.1 -> 3.6.2 (validator patch) (#480)
rubenvdlinde May 18, 2026
99efe3e
chore: build result (#459)
rubenvdlinde May 19, 2026
20fec4e
chore: build result (#462)
rubenvdlinde May 19, 2026
6ec9b8b
chore(deps): preset lockfile 3.6.2 -> 3.7.0 (sitemap lastmod auto-app…
rubenvdlinde May 19, 2026
a134a39
chore: build result (#456)
rubenvdlinde May 19, 2026
7166d86
ci(dependabot): target development branch (matches branching strategy…
rubenvdlinde May 19, 2026
14450e2
ci(quality): disable E2E pending nc-vue#242 fix (#500)
rubenvdlinde May 19, 2026
96e173e
chore: applier verdict (#482)
rubenvdlinde May 19, 2026
cdf1f1b
fix(#323): clear 6 mechanical ESLint source errors (#498)
rubenvdlinde May 19, 2026
22bd9cf
feat(pdok): replace pdokService.js with openconnector shim (#497)
rubenvdlinde May 19, 2026
e34236c
docs(audit): record parafering audit umbrella rule (no code migration…
rubenvdlinde May 19, 2026
8e370f0
docs(parafering): record OR ApprovalService migration plan (#494)
rubenvdlinde May 19, 2026
4bb420a
docs(status-engine): record per-schema lifecycle migration plan (#493)
rubenvdlinde May 19, 2026
5c0e6df
docs(rbac): record role-routing migration plan bound to parafering ap…
rubenvdlinde May 19, 2026
f0b0431
feat(schemas): adopt x-openregister-lifecycle on 7 procest schemas (A…
rubenvdlinde May 19, 2026
6e2ecf4
fix(procest): dashboard cleanup + header/PHPCS/i18n improvements (re-…
rubenvdlinde May 19, 2026
b3b0e82
chore(brand): align app-store hex to canonical cobalt #21468B (#488)
rubenvdlinde May 19, 2026
08b242e
chore(openspec): Chain task-management spec + add stubs for map/regis…
rubenvdlinde May 19, 2026
1ac7c58
chore: Harmonize .gitignore with shared Conduction template (#120)
rubenvdlinde May 19, 2026
a01e8f3
docs(openspec): Add 6 change proposals from gap analysis (#114)
rubenvdlinde May 19, 2026
5ba5281
chore(deps): preset lockfile 3.7.1 -> 3.8.0 (BreadcrumbList + TechArt…
rubenvdlinde May 19, 2026
2e71f66
chore: remove archived openspec proposals and update .gitignore (#118)
rubenvdlinde May 19, 2026
93c63b0
chore: review round 1 results (#482)
rubenvdlinde May 19, 2026
eea38da
chore: applier verdict (#482)
rubenvdlinde May 19, 2026
08e810d
chore(deps): preset lockfile 3.8.0 -> 3.9.0 (TechArticle gate) (#504)
rubenvdlinde May 19, 2026
3e8732a
fix(docs): descriptive homepage title (closes ConductionNL/.github#80)
rubenvdlinde May 19, 2026
94e6fcb
Merge pull request #506 from ConductionNL/seo/title-fix-80
rubenvdlinde May 19, 2026
ea12311
fix(docs): hand-written meta descriptions on homepage + intro (#81)
rubenvdlinde May 19, 2026
375b18e
Merge pull request #508 from ConductionNL/seo/meta-descriptions-81
rubenvdlinde May 19, 2026
d783b48
chore(docs): bump @conduction/docusaurus-preset to 3.10.0 (#79)
rubenvdlinde May 19, 2026
1f09adc
Merge pull request #510 from ConductionNL/chore/preset-3.10.0
rubenvdlinde May 19, 2026
979a0cc
feat(manifest-v2): migrate procest to universal widget manifest (#512)
rubenvdlinde May 19, 2026
c54c6ed
fix(l10n): repair corrupted en_US keys from bad t() extraction (#513)
rubenvdlinde May 19, 2026
844be71
chore: review round 1 results (#482)
rubenvdlinde May 20, 2026
564d92e
chore: applier verdict (#482)
rubenvdlinde May 20, 2026
73d24e8
feat(manifest-v2): flip 5 custom pages to typed primitives (refs #514…
rubenvdlinde May 20, 2026
5414955
adr: push 2 architecture decisions from Specter
May 20, 2026
9cdcdc4
feat(manifest-v2): flip FeaturesRoadmap to type:"roadmap", drop wrapp…
rubenvdlinde May 20, 2026
d65c994
feat(manifest-v2): drop broken WorkflowTemplateEditor, sharpen public…
rubenvdlinde May 20, 2026
adc890a
feat(tenant): adopt OR Organisation as tenant identity (closes #405) …
rubenvdlinde May 20, 2026
b3e9329
fix(eslint): collapse double blank lines in src/registry.js (#519)
rubenvdlinde May 20, 2026
afbf252
fix(procest): repair OR-API drift + dangling seed references (#530)
rubenvdlinde May 21, 2026
cb3a173
feat(openspec): Add vth-workflow-configuration change artifacts
May 21, 2026
a165f12
feat: Add OpenSpec change vth-workflow-configuration from Specter
May 21, 2026
823db7f
chore: add hydra.json for vth-workflow-configuration
May 21, 2026
e3d0b04
chore: link issue to hydra.json for vth-workflow-configuration
May 21, 2026
86aa445
chore(deps): bump @conduction/nextcloud-vue to ^1.0.0-beta.66 (#542)
rubenvdlinde May 21, 2026
d7217ac
chore: sync canonical root configs + mechanical phpmd cleanup (#544)
rubenvdlinde May 21, 2026
31ffdb4
feat: Add OpenSpec change archief-edepot-handover from Specter
May 22, 2026
07d7738
feat: Add OpenSpec change archief-edepot-handover from Specter
May 22, 2026
6b4c9ba
chore: add hydra.json for archief-edepot-handover
May 22, 2026
a47fa3d
chore: link issue to hydra.json for archief-edepot-handover
May 22, 2026
2de93b0
feat: Add OpenSpec change leges-heffingen from Specter
May 22, 2026
703095f
chore(deps): bump PHP requirement to ^8.3 (#555)
rubenvdlinde May 22, 2026
d9c43c4
feat: Add OpenSpec change leges-heffingen from Specter
May 22, 2026
afab289
chore: add hydra.json for leges-heffingen
May 22, 2026
ebf1e16
merge: spec/leges-heffingen into development
May 22, 2026
b6fe3e2
chore: link issue to hydra.json for leges-heffingen
May 22, 2026
3d4a5e6
spec: merge add-procest-procurement-suite
May 22, 2026
b953cf1
spec: merge admin-settings
May 22, 2026
31e181e
spec: merge archief-edepot-handover
May 22, 2026
efb896e
spec: merge beschikking-generatie
May 22, 2026
66bb282
spec: merge besluitvorming-workflow
May 22, 2026
b6cea55
spec: merge bezwaar-beroep-workflow
May 22, 2026
85e2f9a
spec: merge case-dashboard-view
May 22, 2026
b474d58
spec: merge case-email-integration
May 22, 2026
a491c9b
spec: merge case-management
May 22, 2026
d23f02c
spec: merge case-types
May 22, 2026
c3dc3e1
spec: merge complaint-management
May 22, 2026
2b856ca
spec: merge consultation-management
May 22, 2026
62bb9eb
spec: merge dashboard
May 22, 2026
505985f
spec: merge deelzaak-support
May 22, 2026
102519d
spec: merge docs-product-pages
May 22, 2026
3bc6af9
spec: merge docs-product-pages-conformance
May 22, 2026
068f88a
spec: merge document-zaakdossier
May 22, 2026
7c34e57
spec: merge doorlooptijd-dashboard
May 22, 2026
7a10d38
spec: merge dso-omgevingsloket
May 22, 2026
186025c
spec: merge gis-integration
May 22, 2026
1f19a5c
spec: merge kcc-klantcontact-integratie
May 22, 2026
03b5fbf
spec: merge kcc-werkplek-zaaksysteem-bridge
May 22, 2026
f18c7f5
spec: merge leges-heffingen
May 22, 2026
cde9caa
spec: merge leverancier-zaakportaal
May 22, 2026
9639e3b
spec: merge mandaat-matrix
May 22, 2026
de543e0
spec: merge method-decomposition
May 22, 2026
2784d61
spec: merge milestone-tracking
May 22, 2026
fa38a26
spec: merge mobiel-inspectie-offline
May 22, 2026
3ab6196
spec: merge my-work
May 22, 2026
2ec9b57
spec: merge open-raadsinformatie
May 22, 2026
f5850fc
spec: merge openregister-integration
May 22, 2026
44e802c
spec: merge procest-legacy-quality-cleanup
May 22, 2026
2d83a2c
spec: merge procest-store-migration
May 22, 2026
f7c5b54
spec: merge prometheus-metrics
May 22, 2026
9af25ad
spec: merge roles-decisions
May 22, 2026
0aec882
spec: merge sociaal-domein-zaaktypes
May 22, 2026
6bd2303
spec: merge subsidieverlening-keten
May 22, 2026
491723d
spec: merge task-management
May 22, 2026
3454823
spec: merge tenant-zaaksysteem-saas
May 22, 2026
dc3e2c1
spec: merge termijnbewaking-dwangsom-engine
May 22, 2026
fcd2167
spec: merge unit-test-coverage-75
May 22, 2026
c5e8a86
spec: merge vth-module
May 22, 2026
f5b28f0
spec: merge vth-workflow-configuration
May 22, 2026
b4365c8
spec: merge woo-case-type
May 22, 2026
fa7c9de
spec: merge workflow-engine-enhancement
May 22, 2026
d3de2f9
spec: merge zaakportaal-mijngemeente
May 22, 2026
3cbe9a1
docs(openspec): IA alignment refactor proposal for Procest (#559)
rubenvdlinde May 23, 2026
4d55a64
docs(architecture): add IA design rules ADR (#560)
rubenvdlinde May 23, 2026
5957f26
feat: Add OpenSpec change leverancier-zaakportaal from Specter
May 23, 2026
2fdea4d
feat: Add OpenSpec change leverancier-zaakportaal from Specter
May 23, 2026
e8cab8d
chore: link issue to hydra.json for leverancier-zaakportaal
May 23, 2026
b1d3a63
chore(deps): bump composer config.platform.php to 8.3 (#563)
rubenvdlinde May 23, 2026
aab755f
chore(info.xml): canonicalize PHP min, NC version range, licence spel…
rubenvdlinde May 23, 2026
560927e
chore(openspec): mark voorstel-management as moved into case-manageme…
rubenvdlinde May 24, 2026
0cf0e64
retrofit: annotate procest Bucket 1 (19 files / 5 capabilities) (#567)
rubenvdlinde May 24, 2026
1bf1a73
retrofit: reverse-spec signalering-widgets (3 REQs / 4 IWidget files)…
rubenvdlinde May 25, 2026
3f7cf4a
retrofit: reverse-spec dashboard (3 REQs / 4 files) (#573)
rubenvdlinde May 25, 2026
b343f9f
retrofit: reverse-spec case-types export/import (2 REQs / 3 files) (#…
rubenvdlinde May 25, 2026
9aa7262
retrofit: reverse-spec workflow-definition-model (3 REQs / 3 files) (…
rubenvdlinde May 25, 2026
1294cb0
retrofit: reverse-spec parafering-actions general controller (3 REQs …
rubenvdlinde May 25, 2026
a4f9dd3
retrofit: reverse-spec inspection-checklists execution surface (3 REQ…
rubenvdlinde May 25, 2026
72a7256
retrofit: reverse-spec bezwaar-lifecycle (3 REQs / 3 files) (#578)
rubenvdlinde May 25, 2026
891c726
retrofit: reverse-spec advice-management (3 REQs / 3 files) (#579)
rubenvdlinde May 25, 2026
35e6ae0
retrofit: reverse-spec wms-wfs-layers (2 REQs / 2 files) (#580)
rubenvdlinde May 25, 2026
66b81c2
retrofit: reverse-spec berichtenbox-integration (5 REQs / 5 files) (#…
rubenvdlinde May 25, 2026
4a5020a
retrofit: reverse-spec stuf-integration (5 REQs / 3 files) (#582)
rubenvdlinde May 25, 2026
2fc11b7
retrofit: reverse-spec leges-fees (5 REQs / 3 files) (#583)
rubenvdlinde May 25, 2026
c0b3a27
retrofit: reverse-spec consultation-management (5 REQs / 2 files) (#584)
rubenvdlinde May 25, 2026
a76f899
retrofit: reverse-spec milestone-tracking (5 REQs / 2 files) (#585)
rubenvdlinde May 25, 2026
44406f7
retrofit: reverse-spec template-library (4 REQs / 2 files) (#586)
rubenvdlinde May 25, 2026
b88a9d6
retrofit: reverse-spec multi-tenancy (5 REQs / 2 files) (#587)
rubenvdlinde May 25, 2026
3034caf
retrofit: reverse-spec ai-assistance (5 REQs / 2 files) (#588)
rubenvdlinde May 25, 2026
5d7fc54
retrofit: reverse-spec mcp-integration (5 REQs / 1 file) (#589)
rubenvdlinde May 25, 2026
2d698bb
retrofit: reverse-spec dso-omgevingsloket-client (3 REQs / 1 file) (#…
rubenvdlinde May 25, 2026
ad5222f
retrofit: reverse-spec ops-observability (3 REQs / 1 file) (#591)
rubenvdlinde May 25, 2026
247e61e
retrofit: reverse-spec map-component (2 REQs / 2 files) (#592)
rubenvdlinde May 25, 2026
9ff43e7
retrofit: reverse-spec pdok-integration (2 REQs / 2 files) (#593)
rubenvdlinde May 25, 2026
9680a9c
retrofit: reverse-spec admin-settings (2 REQs / 2 files) (#594)
rubenvdlinde May 25, 2026
df3798a
retrofit: reverse-spec procest-app-scaffold (2 REQs / 2 files) (#595)
rubenvdlinde May 25, 2026
1036ace
retrofit: reverse-spec case-location (2 REQs / 1 file) (#596)
rubenvdlinde May 25, 2026
f9b898c
retrofit: reverse-spec prometheus-metrics (1 REQ / 1 file) (#597)
rubenvdlinde May 25, 2026
858e2f2
retrofit: reverse-spec vth-workflow-templates (1 REQ / 1 file) (#598)
rubenvdlinde May 25, 2026
dd5f226
retrofit: reverse-spec process-step-configuration (1 REQ / 1 file) (#…
rubenvdlinde May 25, 2026
7ab0056
retrofit: reverse-spec appointment-booking (5 REQs / 8 files, new cap…
rubenvdlinde May 25, 2026
60324f9
retrofit: reverse-spec zgw-autorisaties-api (5 REQs / 16 methods) (#602)
rubenvdlinde May 25, 2026
5567ebb
retrofit: reverse-spec zgw-api-mapping (5 REQs / 13 methods clusters)…
rubenvdlinde May 25, 2026
d85acc1
retrofit: reverse-spec zgw-business-rules-compliance (5 REQs / 5 file…
rubenvdlinde May 25, 2026
1d5e747
retrofit: reverse-spec automatic-actions (5 REQs / 10 files) (#570)
rubenvdlinde May 25, 2026
bf0079c
retrofit: reverse-spec case-management sharing/transfer/email (5 REQs…
rubenvdlinde May 25, 2026
17fdaef
feat(gis): add WFS export endpoint for case locations (#483) (#604)
rubenvdlinde May 25, 2026
2891c79
chore(nav): adopt three-section nav model + bump nc-vue to beta.97 (#…
rubenvdlinde May 25, 2026
1da0094
feat(nav): add Features & roadmap page + bump nc-vue beta.101 (#606)
rubenvdlinde May 25, 2026
460e1a6
feat(preferences): generic per-user preferences endpoint (#607)
rubenvdlinde May 25, 2026
8ae855e
chore(case-email-integration): re-point to email leaf per ADR-022
rubenvdlinde May 25, 2026
490592c
Merge pull request #608 from ConductionNL/chore/intercept-case-email-…
rubenvdlinde May 25, 2026
12d522b
fix(ui): bump @nextcloud/vue to ^8.39.0 to fix nav corner sliver on N…
rubenvdlinde May 25, 2026
1fd8c0b
feat(notifications): notify assignee on case/task creation (#610)
rubenvdlinde May 25, 2026
6fdf3f0
chore(coverage): annotate all in-scope methods with @spec to close ga…
rubenvdlinde May 25, 2026
61bba61
chore(openspec): add ADR-022 leaf-migration specs for maps/calendar/s…
rubenvdlinde May 25, 2026
38b95bd
Merge pull request #612 from ConductionNL/chore/leaf-migration-specs
rubenvdlinde May 25, 2026
ebfde64
chore(composer): bump lock platform-overrides to PHP 8.3 to match con…
rubenvdlinde May 25, 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