Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
1971 commits
Select commit Hold shift + click to select a range
5977992
chore(deps): nc-vue 1.0.0-beta.162 + version bump (visual-audit fix r…
rubenvdlinde Jul 9, 2026
63033d6
Merge remote-tracking branch 'origin/development' into feat/cases-fol…
rubenvdlinde Jul 9, 2026
ffae191
Merge pull request 'feat(cases): case-type folder sidebar; drop Manif…
Jul 9, 2026
4e3da76
Merge branch 'development' into feat/cases-folder-nav
Jul 9, 2026
d35ff05
Merge pull request 'procest: merge feat/cases-folder-nav into develop…
Jul 9, 2026
2990469
fix(detail-pages): split multi-entry KPI stats-blocks into individual…
rubenvdlinde Jul 9, 2026
693fc0e
fix(detail-pages): split multi-entry KPI stats-blocks into individual…
rubenvdlinde Jul 9, 2026
9734e39
sync development
rubenvdlinde Jul 9, 2026
6a3bd20
Merge pull request 'chore(preserve): procest dashboard-widgets WIP to…
Jul 9, 2026
9cdaecd
Merge branch 'development' into feat/detail-pages-2026-07-07
Jul 9, 2026
2ff3d66
Merge pull request 'feat: purposeful per-schema detail pages (widgets…
Jul 9, 2026
ad977df
chore: pin @conduction/nextcloud-vue 1.0.0-beta.164
rubenvdlinde Jul 9, 2026
890ecf2
Case handling frontend advances to the newest component set (#181)
rubenvdlinde Jul 9, 2026
382e953
feat(demo): English German-federal case-type demo + UX fixes
rubenvdlinde Jul 9, 2026
80a76d6
refactor(leges): retire the municipal-fee engine; fees are Pipelinq p…
rubenvdlinde Jul 9, 2026
9415153
docs(adr-003): record wave 2-4 decisions — no migration, parafering→D…
rubenvdlinde Jul 10, 2026
37345d5
fix(demo): working Cases map (points+areas) + dashboard KPI CSS + laz…
rubenvdlinde Jul 10, 2026
9f356b3
feat(casetypes+docs): real Case Types page + case/map getting-started…
rubenvdlinde Jul 10, 2026
6e12222
docs(adr-003): casetransfer (cross-org handover) stays; no transfer-d…
rubenvdlinde Jul 10, 2026
0c63dec
Merge pull request 'Retire the municipal-fee (leges) engine — fees be…
Jul 10, 2026
79224e5
docs(adr-003): whole besluitvorming/decision subsystem → Decidesk (cr…
rubenvdlinde Jul 10, 2026
da77ae4
fix(demo): English chrome + working standalone Cases-on-map page
rubenvdlinde Jul 10, 2026
5deea32
fix(settings): Tenants list shows real fields (was UUID + blank headers)
rubenvdlinde Jul 10, 2026
08603ec
docs(tutorial): add folder-filter + case-history screenshots to 'hand…
rubenvdlinde Jul 10, 2026
8b7d82b
docs(tutorial): Share cases with another organisation (federation)
rubenvdlinde Jul 10, 2026
8ec7e79
chore(release): bump version to 0.2.47
rubenvdlinde Jul 10, 2026
8a1800a
feat(case): surface decidesk decisions on the case (ADR-066 rollout e…
rubenvdlinde Jul 10, 2026
378517f
Merge remote-tracking branch 'origin/development' into feat/cases-fol…
rubenvdlinde Jul 10, 2026
336c412
chore(release): bump version to 0.3.1
rubenvdlinde Jul 10, 2026
e4de1ec
feat(nav): split Cases into CasesGroup + All-cases entry; restore Dut…
rubenvdlinde Jul 10, 2026
16634ac
Merge pull request 'feat(demo): German-federal demo curation, English…
Jul 10, 2026
aef2a72
Case handling library pinned to the cross-register foundation build (…
rubenvdlinde Jul 10, 2026
43a175a
Merge refactor/retire-leges (consolidation 2026-07-10)
rubenvdlinde Jul 10, 2026
dac1311
Merge feat/case-type-navigation (consolidation 2026-07-10)
rubenvdlinde Jul 10, 2026
a319309
fix(icon): carry the white fill on the <svg> element, not inner nodes
rubenvdlinde Jul 10, 2026
8f44a59
Merge feat/move-portals-to-portaliq (consolidation 2026-07-10)
rubenvdlinde Jul 10, 2026
acac1ed
Merge fix/adr062-kpi-split (consolidation 2026-07-10)
rubenvdlinde Jul 10, 2026
1e38da1
Merge fix/dashboard-header-sw-and-status-aggregation (consolidation 2…
rubenvdlinde Jul 10, 2026
c81987e
Merge procest-reapply-work (consolidation 2026-07-10)
rubenvdlinde Jul 10, 2026
a41274b
Merge pull request 'fix(img): procest app.svg fill hoisted to the svg…
Jul 10, 2026
f15df82
build: bump @nextcloud/dialogs to v6 + alias its stylesheet subpath (…
rubenvdlinde Jul 11, 2026
f96485d
test: fix pre-existing red CI (l10n drift + PHPUnit unit) (#188)
rubenvdlinde Jul 11, 2026
2685e91
feat(cases): direct Cases nav + resolve reference-column labels + dia…
rubenvdlinde Jul 12, 2026
e260776
Merge remote-tracking branch 'origin/development' into feat/cases-fol…
rubenvdlinde Jul 12, 2026
9b18768
Merge pull request 'feat(cases): direct Cases nav + resolve reference…
Jul 12, 2026
01d33e2
feat(cases): working map view — basemap switcher, map controls, fill-…
rubenvdlinde Jul 12, 2026
b652d48
Merge pull request 'feat(cases): working map view — CSP tile allowlis…
Jul 12, 2026
314d17d
feat(map): allow the Nominatim geocoder in the CSP for the location w…
rubenvdlinde Jul 12, 2026
fe66d5b
Merge pull request (#190) feat(map): allow the Nominatim geocoder in …
Jul 12, 2026
41cf642
chore(vue): pick up beta.190 (published CSS entry was incomplete) (#191)
rubenvdlinde Jul 12, 2026
951edf8
feat(search): surface cases in NC unified search via the OR search leaf
rubenvdlinde Jul 12, 2026
9959452
Merge pull request 'feat(search): cases in NC unified search via the …
Jul 12, 2026
2bb8754
feat(export): case-list CSV/Excel export via the OR export leaf
rubenvdlinde Jul 12, 2026
29ebf10
Merge pull request 'feat(export): Cases page Export menu backed by th…
Jul 12, 2026
dc2ee23
feat(zgw): publish OpenAPI specs + discovery endpoint for the ZGW sur…
rubenvdlinde Jul 12, 2026
d8a03ff
Merge pull request 'feat(zgw): machine-readable OpenAPI publication w…
Jul 12, 2026
07f4e8f
feat(board): bulk status transitions with per-case guards and preview
rubenvdlinde Jul 12, 2026
7e13cc9
Merge pull request 'feat(board): column-scoped bulk status transition…
Jul 12, 2026
f664550
feat(ai): real audit log querying, CSV export, and oversight UI
rubenvdlinde Jul 12, 2026
949daed
Merge pull request 'feat(ai): audit log querying, export, and oversig…
Jul 12, 2026
b5e0f79
fix(repair): stop boot-time seed/repair steps 500-ing and RBAC-denyin…
rubenvdlinde Jul 13, 2026
dd46f8d
Merge pull request 'fix(procest): stop boot repair/seed steps 500-ing…
Jul 13, 2026
1f85885
feat(case-types): duplicate case type into a new draft + draft-only g…
rubenvdlinde Jul 13, 2026
9ffc151
Merge pull request 'feat(case-types): duplicate zaaktype into new dra…
Jul 13, 2026
4dfabf1
feat(werkvoorraad): intelligent work-queue urgency scoring + coordina…
rubenvdlinde Jul 13, 2026
b4b5880
Merge remote-tracking branch 'origin/development' into wip/werkvoorra…
rubenvdlinde Jul 13, 2026
e127987
docs(research): full market-feature workup — 108 features mapped to p…
rubenvdlinde Jul 13, 2026
3446016
Merge pull request 'docs(research): market-feature workup 2026-07 — 1…
Jul 13, 2026
10ad7a1
fix(openregister): repair 13 dead ObjectService::findAll() calls (Ten…
rubenvdlinde Jul 13, 2026
05029b4
Merge pull request 'fix(procest): 13 dead ObjectService::findAll() ca…
Jul 13, 2026
7b52f1b
feat(beschikking): wire LibreSign as a concrete digital-signing adapter
rubenvdlinde Jul 13, 2026
1942bf9
Merge remote-tracking branch 'origin/development' into wip/libresign-…
rubenvdlinde Jul 13, 2026
0be3358
Merge pull request 'feat(beschikking): wire LibreSign as a concrete d…
Jul 13, 2026
1943ae0
feat(woo): publish WOO decisions through OpenCatalogi
rubenvdlinde Jul 13, 2026
9c16e4c
Merge pull request 'feat(woo): publish WOO decisions through OpenCata…
Jul 13, 2026
a2428e2
docs(openspec): add procest-mcp-adoption ff change (ADR-063)
rubenvdlinde Jul 13, 2026
4f1e5b7
Merge pull request 'procest: ADR-063 MCP adoption spec — 13 of 155 sc…
Jul 13, 2026
147f85b
feat(reports): add IV3 (Informatie voor Derden) case cost reporting
rubenvdlinde Jul 13, 2026
827c5b5
Merge remote-tracking branch 'origin/development' into wip/iv3-case-c…
rubenvdlinde Jul 13, 2026
624c5d1
Merge pull request 'feat(reports): IV3 (Informatie voor Derden) per-t…
Jul 13, 2026
ae204f5
Merge remote-tracking branch 'origin/development' into wip/werkvoorra…
rubenvdlinde Jul 13, 2026
e01c42c
Merge pull request 'feat(werkvoorraad): intelligent work-queue urgenc…
Jul 13, 2026
406fae3
feat(external): add BAG (Basisregistratie Adressen en Gebouwen) adapter
rubenvdlinde Jul 13, 2026
10d6e2c
Merge remote-tracking branch 'origin/development' into wip/bag-regist…
rubenvdlinde Jul 13, 2026
8439aa5
Merge pull request 'procest: BAG register adapter — authoritative add…
Jul 13, 2026
395674e
feat(workflow-editor): finish visual editor integration — validation,…
rubenvdlinde Jul 13, 2026
a165a71
Merge remote-tracking branch 'origin/development' into wip/workflow-e…
rubenvdlinde Jul 13, 2026
a9bdb4f
Merge pull request 'feat(workflow-editor): finish visual editor integ…
Jul 13, 2026
dcc7e17
docs(openspec): archive workflow-editor-integration change
rubenvdlinde Jul 13, 2026
a2739a6
Merge pull request 'docs(openspec): archive workflow-editor-integrati…
Jul 13, 2026
c224a47
feat(process-mining): bottleneck report over case statusRecord history
rubenvdlinde Jul 14, 2026
083bcfd
docs(openspec): archive process-mining-bottlenecks change
rubenvdlinde Jul 14, 2026
3bfe072
Merge pull request 'feat(process-mining): bottleneck report over case…
Jul 14, 2026
2bf0f2c
feat(bag-location-save-validation): enforce location source=bag save-…
rubenvdlinde Jul 14, 2026
6a16359
docs(openspec): archive bag-location-save-validation change
rubenvdlinde Jul 14, 2026
696a353
Merge remote-tracking branch 'origin/development' into wip/bag-locati…
rubenvdlinde Jul 14, 2026
57a2f71
Merge pull request 'feat(bag-location-save-validation): enforce locat…
Jul 14, 2026
4236e19
feat(ncvue-w2-leaves-adoption): wire multi-column sort, mentions, sav…
rubenvdlinde Jul 14, 2026
74f4934
docs(openspec): archive ncvue-w2-leaves-adoption change
rubenvdlinde Jul 14, 2026
bde2c53
Merge remote-tracking branch 'origin/development' into wip/ncvue-w2-l…
rubenvdlinde Jul 14, 2026
d826a1f
Merge pull request 'feat(ncvue-w2-leaves-adoption): wire multi-column…
Jul 14, 2026
53c4acd
feat(iv3-taakveld-2023-refinement): ship official 2023 BBV/Iv3 Wmo/Je…
rubenvdlinde Jul 14, 2026
2458db2
Merge remote-tracking branch 'origin/development' into wip/iv3-taakve…
rubenvdlinde Jul 14, 2026
890e2c2
Merge pull request 'feat(iv3-taakveld-2023-refinement): ship official…
Jul 14, 2026
8ea45f3
fix(tests): fail fast on dangling vendor/nextcloud/ocp/OCP symlink
rubenvdlinde Jul 14, 2026
edc9a36
Merge pull request 'fix(tests): dangling vendor/nextcloud/ocp symlink…
Jul 14, 2026
13dc511
feat(subsidie-settlement-case-costs): auto-populate case.kosten from …
rubenvdlinde Jul 14, 2026
6f954da
Merge remote-tracking branch 'origin/development' into wip/subsidie-s…
rubenvdlinde Jul 14, 2026
78ccbb2
Merge pull request 'feat(subsidie-settlement-case-costs): auto-popula…
Jul 14, 2026
bd8bf3e
feat(case-assistant-via-hermiq): case-assistant chat panel delegating…
rubenvdlinde Jul 14, 2026
75f47f7
Merge remote-tracking branch 'origin/development' into wip/case-assis…
rubenvdlinde Jul 14, 2026
b2012ba
Merge pull request 'feat(case-assistant-via-hermiq): case-assistant c…
Jul 14, 2026
9e72720
feat(brk-woz-register-adapters): authoritative BRK parcel + WOZ valua…
rubenvdlinde Jul 15, 2026
fac9bc1
Merge pull request 'feat: BRK parcel + WOZ valuation register adapter…
Jul 15, 2026
3f19e6f
feat(dmn): DMN decision-table engine, REST + workflow hook, editor UI
rubenvdlinde Jul 15, 2026
853ab51
Merge remote-tracking branch 'origin/development' into wip/dmn-decisi…
rubenvdlinde Jul 15, 2026
c7f8505
Merge pull request 'feat(dmn): decision-table engine, REST evaluate +…
Jul 15, 2026
5aa6572
docs(dmn): archive dmn-decision-tables change, sync canonical spec
rubenvdlinde Jul 15, 2026
56e3212
Merge pull request 'docs(dmn): archive dmn-decision-tables + sync can…
Jul 15, 2026
0a13339
feat(cmmn): adaptive case handling (CMMN) alongside the BPMN workflow…
rubenvdlinde Jul 15, 2026
0e5d7f7
Merge remote-tracking branch 'origin/development' into wip/cmmn-adapt…
rubenvdlinde Jul 15, 2026
362b0ee
Merge pull request 'feat(cmmn): adaptive case handling (CMMN) — a sec…
Jul 15, 2026
f30afa0
feat(live-updates): wire nc-vue beta.212 subscriptions into workflow …
rubenvdlinde Jul 15, 2026
8385905
Merge pull request 'Workflow board goes realtime: nc-vue beta.212 liv…
Jul 15, 2026
9f0ba28
chore(deps): move nextcloud-vue lock to 1.0.0-beta.213
rubenvdlinde Jul 16, 2026
eeba95e
Merge pull request 'chore(deps): shared library refresh for live boar…
Jul 16, 2026
2cb42b5
docs(authz-bypass-fixes): OpenSpec change — verify-first verdicts for…
juanclaude-conduction Jul 16, 2026
6a1e552
fix(advice): close the LIVE IDOR on transitionStatus (procest#17 was …
juanclaude-conduction Jul 16, 2026
3c74ab4
fix(woo): close the fail-open per-case guard on 5 NoAdminRequired end…
juanclaude-conduction Jul 16, 2026
d8d7376
feat(federation): federated case collaboration over OpenRegister's OC…
rubenvdlinde Jul 16, 2026
6b29a89
feat(woo): LLM-assisted redaction proposals via Hermiq — rules-floor,…
rubenvdlinde Jul 16, 2026
e9b934b
Merge remote-tracking branch 'origin/development' into wip/woo-llm-an…
rubenvdlinde Jul 16, 2026
dbf3320
fix(mandaat): belangenconflict check fails closed and stops trusting …
juanclaude-conduction Jul 16, 2026
e29f76f
Merge pull request 'Federated case collaboration: cross-org case shar…
Jul 16, 2026
2a575e1
Merge remote-tracking branch 'origin/development' into wip/woo-llm-an…
rubenvdlinde Jul 16, 2026
d046091
Merge pull request 'feat(woo): LLM-assisted redaction proposals via H…
Jul 16, 2026
c9e6150
docs(authz-bypass-fixes): retarget @spec to canonical specs/, archive…
juanclaude-conduction Jul 16, 2026
31e5d8f
Merge remote-tracking branch 'origin/development' into wip/authz-bypa…
juanclaude-conduction Jul 16, 2026
277f311
Merge pull request 'procest: authz-bypass-fixes (apply)' (#226) from …
Jul 16, 2026
0934fad
wip: preserve work (pc reset 2026-07-16) — NOT tested, NOT ready to m…
juanclaude-conduction Jul 16, 2026
985f0fd
fix(compliance): emit() writes a real OR hash-chained audit row; atte…
rubenvdlinde Jul 16, 2026
6a27c7f
fix(spec): repoint broken @spec anchors to canonical specs
rubenvdlinde Jul 16, 2026
930b3e3
test(compliance): prove emit() writes a durable audit row + attestati…
rubenvdlinde Jul 16, 2026
ac7b882
fix(bezwaar): null-safe AWB 7:10 deadline + de-drift the calculation …
rubenvdlinde Jul 16, 2026
bb67dc6
docs(openspec): spec-anchor-repair change (proposal/design/tasks/resi…
rubenvdlinde Jul 16, 2026
6055e18
docs(spec): downgrade subsidieverlening-keten done -> partial (proces…
rubenvdlinde Jul 16, 2026
630d9a3
chore(spec): anchor new @spec tags at canonical openspec/specs paths
rubenvdlinde Jul 16, 2026
194c2ec
docs(opsx): add compliance-and-tenant-fixes change artifacts
rubenvdlinde Jul 16, 2026
2e96ec6
Merge pull request 'procest: spec-anchor-repair (apply) — 573 anchors…
Jul 16, 2026
ebb65bc
chore(spec): add @spec anchors to the 7 methods changed here (gate-16)
rubenvdlinde Jul 16, 2026
e7d5a3c
Merge remote-tracking branch 'origin/development' into wip/compliance…
rubenvdlinde Jul 16, 2026
fc24022
Merge pull request 'procest: compliance-and-tenant-fixes (apply)' (#2…
Jul 16, 2026
ef923a0
docs(opsx): archive compliance-and-tenant-fixes
rubenvdlinde Jul 16, 2026
af9010d
chore(openspec): archive spec-anchor-repair change
rubenvdlinde Jul 16, 2026
c19dfe1
Merge pull request 'procest: archive compliance-and-tenant-fixes' (#2…
Jul 16, 2026
0f920a2
Merge pull request 'procest: archive the spec-anchor-repair change' (…
Jul 16, 2026
10f2cb7
perf(repair): stop forcing the register import — bypassed OR's fast-skip
rubenvdlinde Jul 17, 2026
86e9a39
feat(vue3): procest is 230/230 compile-clean on Vue 3
rubenvdlinde Jul 18, 2026
dacf547
feat(vue3): procest builds + boots on Vue 3; live test localizes CnAp…
rubenvdlinde Jul 18, 2026
ced8345
feat(vue3): procest Dashboard fully renders + interactive on Vue 3 (l…
rubenvdlinde Jul 18, 2026
3643a0a
feat(vue3): configureCompat COMPONENT_V_MODEL:false — unblocks all in…
rubenvdlinde Jul 19, 2026
68a784c
feat(vue3): app-side v-model unification codemod (217 tags, 68 files)
rubenvdlinde Jul 19, 2026
15fd774
refactor(vue3): app-side compat-construct removal ($set/.sync/.native)
rubenvdlinde Jul 19, 2026
8e5d23b
feat(vue3): procest OFF @vue/compat — pure Vue 3 (task 6.1 complete f…
rubenvdlinde Jul 19, 2026
0c82f16
test(e2e): Vue-3-compat harness fixes for the live-NC suite
rubenvdlinde Jul 19, 2026
a42653e
test(e2e): align workflow specs with procest's actual case behavior
rubenvdlinde Jul 20, 2026
c5feea3
test(e2e): reach relocated Workflow Board + open the collapsed CaseDe…
rubenvdlinde Jul 20, 2026
67f661a
fix(cases): wire the orphaned CaseEmailTab into the CaseDetail sideba…
rubenvdlinde Jul 22, 2026
c89eb12
Merge pull request 'perf(repair): stop forcing the register import' (…
Jul 22, 2026
0a88e01
test(e2e): make case specs respect archival + lifecycle (drop test-in…
rubenvdlinde Jul 22, 2026
0d51b79
build(vue3): depend on the published @conduction/nextcloud-vue@^2.0.1…
rubenvdlinde Jul 22, 2026
f0ef9f2
Merge pull request #676 from ConductionNL/feat/vue-3
rubenvdlinde Jul 22, 2026
4066095
Merge remote-tracking branch 'gh/development' into _sync
rubenvdlinde Jul 23, 2026
b013210
i18n(schema): author procest property titles in English + NL l10n
rubenvdlinde Jul 25, 2026
96a41db
Merge pull request #679 from ConductionNL/wip/schema-titles-en
rubenvdlinde Jul 25, 2026
b4b7697
chore(deps): @conduction/nextcloud-vue 2.0.6 (vue3) — activate schema…
rubenvdlinde Jul 26, 2026
9bedab4
Merge pull request #680 from ConductionNL/wip/ncvue-2.0.6
rubenvdlinde Jul 26, 2026
9ca12af
i18n(schema): author procest schema-level titles in English + NL l10n
rubenvdlinde Jul 26, 2026
7830c63
Merge pull request #681 from ConductionNL/wip/schema-level-titles
rubenvdlinde Jul 26, 2026
360e9e0
i18n(l10n): complete en/nl runtime translation coverage
rubenvdlinde Jul 26, 2026
3e21084
Merge pull request #682 from ConductionNL/wip/l10n-coverage
rubenvdlinde Jul 26, 2026
2b6663a
chore(deps): bump @conduction/nextcloud-vue to ^2.0.7 (settings-widge…
rubenvdlinde Jul 27, 2026
dca1587
ci(l10n): gate PRs on en.json translation coverage
rubenvdlinde Jul 28, 2026
e4360ad
Merge pull request #684 from ConductionNL/wip/l10n-ci
rubenvdlinde Jul 28, 2026
9826e98
i18n(labels): author status/type labels in English source + NL l10n
rubenvdlinde Jul 29, 2026
9c15d96
Merge pull request #685 from ConductionNL/wip/label-english-source
rubenvdlinde Jul 29, 2026
cf3ee93
i18n(l10n): author Dutch-source UI literals in English + NL l10n
rubenvdlinde Jul 30, 2026
ae73d2f
Merge pull request #686 from ConductionNL/wip/l10n-english-source
rubenvdlinde Jul 30, 2026
5c24219
feat(icons): adopt the ADR-077 semantic icon vocabulary (#687)
rubenvdlinde Jul 30, 2026
fda665c
feat(icons): extend ADR-077 to page, widget and action icons (#688)
rubenvdlinde Jul 30, 2026
2cc8ba1
perf(events): declare bezwaar listeners' schema interest at registrat…
rubenvdlinde Aug 1, 2026
6ff599b
fix(events): resolve the schema SLUG listeners compare against (#690)…
rubenvdlinde Aug 1, 2026
85fc5ee
chore(deps,ci): drop the proprietary vue3-apexcharts and revive Code …
rubenvdlinde Aug 1, 2026
d8fc894
fix(archival): place the Awb legal hold that has never once been plac…
rubenvdlinde Aug 2, 2026
a5ed756
fix(archival): backfill the Awb legal holds the dead listener never p…
rubenvdlinde Aug 2, 2026
f0a39a7
fix(archival): an open beroep never placed a legal hold (#697)
rubenvdlinde Aug 2, 2026
b0df94f
fix(tests): OCP\Files\IRootFolder was unmockable — 19 errors from a s…
rubenvdlinde Aug 2, 2026
36b9481
chore(deps): nc-vue 2.1.0-vue3.16 + declare terser-webpack-plugin (#699)
rubenvdlinde Aug 2, 2026
638491d
fix(tests): the Vitest suite has been dead since the Vue 3 migration
rubenvdlinde Aug 2, 2026
c8de4df
docs(tests): correct a false claim about VTU v2 mounting options
rubenvdlinde Aug 2, 2026
d7ff404
Merge pull request #700 from ConductionNL/fix/vitest-harness-vue3
rubenvdlinde Aug 2, 2026
0e9f652
fix(ci): make composer check:strict able to fail (#701)
rubenvdlinde Aug 2, 2026
2fcefce
fix(quality): PHPStan 139 → 7 in check:strict, no baseline and no sup…
rubenvdlinde Aug 3, 2026
f495549
refactor(quality): PHPMD 1084 → 682 — MissingImport to zero, no basel…
rubenvdlinde Aug 3, 2026
b56ec1d
fix(quality): phpmd DevelopmentCodeFragment could never fire on names…
rubenvdlinde Aug 3, 2026
30c314f
chore(security): refresh roave/security-advisories guard (2026-03-02 …
rubenvdlinde Aug 3, 2026
9c67773
ci: give every eligible job a measured timeout-minutes (#706)
rubenvdlinde Aug 3, 2026
cd8cb0f
fix(quality): clear all 7 phpstan errors and 108 phpmd findings on de…
rubenvdlinde Aug 3, 2026
5840fa1
fix(quality): clear procest's mechanical phpmd debt — 574 → 175 (#708)
rubenvdlinde Aug 3, 2026
a623f25
chore(deps): upgrade @conduction/nextcloud-vue to 3.0.0-vue3.4 (#710)
rubenvdlinde Aug 3, 2026
c227a47
fix(quality): clear procest phpmd architectural debt — batch 1 (175 →…
rubenvdlinde Aug 3, 2026
70e1e06
fix(quality): procest phpmd architectural debt — batch 2 (161 → 25) (…
rubenvdlinde Aug 4, 2026
7d4d3c7
fix(quality): empty procest's phpstan baseline — 10 dead injected dep…
rubenvdlinde Aug 4, 2026
18a999e
fix(quality): decompose the Case/Consultation service cluster (6 phpm…
rubenvdlinde Aug 4, 2026
5a0f1e7
fix(quality): decompose the parafering / tenant / role service cluste…
rubenvdlinde Aug 4, 2026
24b79f7
fix(quality): decompose Application bootstrap, Stuf and the oversized…
rubenvdlinde Aug 4, 2026
53670a0
ci(e2e): turn on the E2E Tests (Playwright) job (#709)
rubenvdlinde Aug 4, 2026
8a6f707
test(phpunit): make the PHPUnit suite green in CI — 223 risky tests →…
rubenvdlinde Aug 4, 2026
6d650be
fix(apphost): stop cross-app OpenRegister references from 500ing ever…
rubenvdlinde Aug 4, 2026
509daf7
refactor(settings): stop folding a fragment digest into the import ve…
rubenvdlinde Aug 4, 2026
9dac25d
chore(ci): remove dead Forgejo/Codeberg CI residue (#724)
rubenvdlinde Aug 4, 2026
773a8bf
refactor(ai): extract AiAuditService from AiService — clears the last…
rubenvdlinde Aug 4, 2026
3105070
ci: align workflows with fleet standard (ConductionNL/.github) (#691)
remko48 Aug 4, 2026
0c6d87b
refactor(settings): extract readEffectiveConfiguration() from loadCon…
rubenvdlinde Aug 4, 2026
e979664
fix(composer): make test:unit/test:all a real gate (#723)
rubenvdlinde Aug 4, 2026
a47d95e
chore(coverage): recompute the baseline — coverage improved past it (…
rubenvdlinde Aug 4, 2026
5b3c39b
chore(deps): @conduction/nextcloud-vue 3.0.0-vue3.6
Aug 4, 2026
a4ce27e
Merge pull request #727 from ConductionNL/chore/ncvue-vue3.6
rubenvdlinde Aug 4, 2026
19324df
ci(quality): enable the Code Quality gates this repo was silently ski…
rubenvdlinde Aug 4, 2026
d33aa12
chore(deps): move to @conduction/nextcloud-vue 2.2.0-vue3.1 (#730)
rubenvdlinde Aug 5, 2026
2c21530
fix(dashboard): calendar-aligned range presets, and the real caseType…
rubenvdlinde Aug 5, 2026
a401ced
chore(deps): move to @conduction/nextcloud-vue 2.2.0-vue3.3 (#736)
rubenvdlinde Aug 5, 2026
7bf109e
ci(procest): enable SBOM — the ELSPROBLEMS blocker is stale (#738)
rubenvdlinde Aug 5, 2026
0053e9f
ci(quality): move the hydra-gates pin v1.0.1 -> v1.3.0 (#741)
rubenvdlinde Aug 5, 2026
f6c896e
fix(offline): planned inspections had no checklist template ref; add …
rubenvdlinde Aug 5, 2026
f54e4f3
chore(license): normalise licence declarations to EUPL-1.2 (#742)
rubenvdlinde Aug 5, 2026
39ded06
feat(iv3): retire the IV3 cost report to Shillinq, keep the classific…
rubenvdlinde Aug 6, 2026
728c0e4
fix(phpmd): scope the lib/Migration UnusedFormalParameter exclusion t…
rubenvdlinde Aug 6, 2026
cd1748a
chore(ci): move hydra-gates-ref v1.3.0 -> v1.4.0 (#745)
rubenvdlinde Aug 6, 2026
b1a728e
ci(quality): give main/development push runs their own concurrency la…
rubenvdlinde Aug 6, 2026
9176dde
ci(quality): move hydra-gates-ref to v1.5.0, the pin the floating wor…
rubenvdlinde Aug 6, 2026
48ab1d3
fix(ci): compare the coverage ratchet against the measured merge base…
rubenvdlinde Aug 6, 2026
ae45b66
chore(ci): stop pinning hydra-gates — track the package at @main (#748)
rubenvdlinde Aug 6, 2026
0acb51d
fix(apphost): register OpenRegister's autoloader before referencing A…
rubenvdlinde Aug 6, 2026
4daa8c7
ci: publish an installable build of development (#754)
rubenvdlinde Aug 6, 2026
c53119b
chore(coverage): raise the baseline to 29.69%, banking the StufMessag…
rubenvdlinde Aug 6, 2026
809d41b
fix(security): PHP_CodeSniffer 3.13.5 -> 3.13.6 (CVE-2026-67434, OS c…
rubenvdlinde Aug 6, 2026
11f7fa0
chore(deps): clear all critical + high npm advisories and CVE-2026-67…
rubenvdlinde Aug 6, 2026
769e1bf
test(e2e): prove the AppHost aliases actually resolve in a browser (#…
rubenvdlinde Aug 6, 2026
ce9e28e
chore(deps): axe-core is a testing library — move it to devDependenci…
rubenvdlinde Aug 6, 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
  •  
  •  
  •  
The diff you're trying to view is too large. We only load the first 3000 changed files.
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