From 782bd3ffb0bef9649c8a93a674a5224cc3f71e64 Mon Sep 17 00:00:00 2001 From: Ruben van der Linde Date: Mon, 31 Aug 2026 12:45:36 +0200 Subject: [PATCH 1/4] fix(composer): declare ext-xsl so dependabot can resolve (#884) Dependabot cannot propose composer updates for this app. Its updater fails with: Your requirements could not be resolved to an installable set of packages. - edgedesign/phpqa[v1.27.0, ..., v1.27.2] require ext-xsl * -> it is missing from your system. config.platform pins php 8.3 so composer resolves against a known PHP version, but says nothing about extensions. edgedesign/phpqa requires ext-xsl and the resolving environment does not have it, so the resolve fails before any bump can be computed. CI is unaffected, which is why this went unnoticed: composer install replays the committed lock and never re-resolves, so the pipeline stays green while dependabot -- which does re-resolve -- fails every time. The shared quality.yml installs no xsl extension anywhere and never invokes phpqa. Declaring ext-xsl beside the php pin makes resolution assume exactly what the committed lockfile already assumes. Verified in a clean composer:2 container without --ignore-platform-reqs: the same file fails without this line and resolves (103 installs, lock written) with it. Co-authored-by: Conduction Release Bot --- composer.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/composer.json b/composer.json index 679e61ab..9e45b751 100644 --- a/composer.json +++ b/composer.json @@ -104,7 +104,8 @@ "optimize-autoloader": true, "sort-packages": true, "platform": { - "php": "8.3" + "php": "8.3", + "ext-xsl": "1" } } } From f39c42263dc261b8ed93b393e51550fd758a1e13 Mon Sep 17 00:00:00 2001 From: Ruben van der Linde Date: Mon, 31 Aug 2026 13:21:43 +0200 Subject: [PATCH 2/4] chore(deps): take @conduction/nextcloud-vue 2.27.2 (#889) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Levels this app with the fleet. 2.27.2 adds two fixes the earlier 2.27.0 pin does not carry: * headerless is no longer chromeless — a flat KPI card in a borderless wrapper had no card, border or background at all; * a stat `variant` paints from the `-text` tokens rather than the fill tokens, which failed WCAG AA at 1.08:1 as a foreground colour. The KPI colour cleanup converted hardcoded values to `variant`, so this is what makes those conversions contrast-safe. Lockfile only, and npm pruned nothing. --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5a6a86d2..29471790 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2198,9 +2198,9 @@ } }, "node_modules/@conduction/nextcloud-vue": { - "version": "2.27.0", - "resolved": "https://registry.npmjs.org/@conduction/nextcloud-vue/-/nextcloud-vue-2.27.0.tgz", - "integrity": "sha512-64IS6VrAp4c+Hr9AAS9/z6AzznmaPfbO4GrZtmOX57dLCpJORkn5M/wSKpAC6ZG+gUHTJeXDUiabut9bV0kRnQ==", + "version": "2.27.2", + "resolved": "https://registry.npmjs.org/@conduction/nextcloud-vue/-/nextcloud-vue-2.27.2.tgz", + "integrity": "sha512-FhDF3FvM+ee0Jx7z70Lki7o7Mm4DeX/GsOqHo33hOcdylzXR63UXLRbxKMedodEiIqgOFUAI6GTox735iyL8Dw==", "license": "EUPL-1.2", "dependencies": { "@ckpack/vue-color": "^1.6.0", From 3d4ba96fe7bbbcaa0c78551a1cb8ea3b1d83edbd Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 31 Aug 2026 16:04:31 +0200 Subject: [PATCH 3/4] chore(release): 0.1.151-unstable.20260831114910 (#891) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- appinfo/info.xml | 2 +- openapi.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/appinfo/info.xml b/appinfo/info.xml index 64eacc2f..791d7b87 100644 --- a/appinfo/info.xml +++ b/appinfo/info.xml @@ -50,7 +50,7 @@ Vrij en open source onder de EUPL-licentie. **Ondersteuning:** Voor ondersteuning, neem contact op via support@conduction.nl. Voor een Service Level Agreement (SLA), neem contact op via sales@conduction.nl. ]]> - 0.1.148-unstable.20260830155811 + 0.1.151-unstable.20260831114910 EUPL-1.2 Conduction Stackiq diff --git a/openapi.json b/openapi.json index bc84307e..1f78b8f8 100644 --- a/openapi.json +++ b/openapi.json @@ -2,7 +2,7 @@ "openapi": "3.0.3", "info": { "title": "stackiq", - "version": "0.1.148-unstable.20260830155811", + "version": "0.1.151-unstable.20260831114910", "description": "Stackiq", "license": { "name": "agpl" From 26d1854e85bd2a19f66577a72fd9522cf364d774 Mon Sep 17 00:00:00 2001 From: Ruben van der Linde Date: Mon, 31 Aug 2026 23:06:49 +0200 Subject: [PATCH 4/4] feat(dashboard): give stackiq the KPI tiles it never had (#892) Stackiq's dashboard was the one fleet dashboard with no KPI cards at all. Not a rendering fault: the page was type:"custom" rendering a 675-line hand-written view whose entire widget list was an info box and two object-statistics tables. The app's five manifest KPI widgets all sit on detail pages, never on the dashboard. The page is now type:"dashboard" with four declarative "stat" widgets -- Organisaties, Modules, Diensten, Contracten -- counted by OpenRegister through @resolve:voorzieningen_register, the same register/schema pairs every other page in this manifest already uses. The non-KPI content is preserved exactly. The info box and both tables move to src/components/CatalogPanels.vue (template restructured, script untouched) and mount as the "catalog-panels" widget. Worth knowing for the next app: 1. A dashboard widget TYPE resolves against the LIBRARY's widget catalog (registerDashboardWidget / getWidgetTypeEntry), not the app's registry prop and not the page's slots map -- both of those are for page components and slot overrides. An unregistered type renders "Widget not available" and logs nothing, so it looks exactly like a wiring mistake. 2. eslint-suppressions.json is keyed by FILE PATH. Renaming a suppressed file orphans its entries, and --prune-suppressions then deletes them, so every previously-suppressed error surfaces at once. The entry moved to the new path deliberately, minus two suppressions the rename genuinely fixed: vue/multi-word-component-names (Dashboard -> CatalogPanels) and an unused arg (route -> _route, docblock updated). Verified in the browser against the published @conduction/nextcloud-vue (USE_LOCAL_LIB=false): four cards render in the canonical horizontal white card, zero grey, no "Widget not available", the info box and both tables still render. The tiles read 0/0/0/0 and that is CORRECT -- the statistics tables beside them independently report Organization 0, Service 0, Contract 0 in this environment, so the tiles agree with the tables rather than reporting a confident zero on a failed fetch. eslint exits 0, matching the pre-change baseline; webpack compiles. --- eslint-suppressions.json | 18 +- .../CatalogPanels.vue} | 297 +++++++----------- src/customComponents.js | 5 - src/main.js | 18 ++ src/manifest.json | 147 ++++++++- src/registry.js | 6 - 6 files changed, 285 insertions(+), 206 deletions(-) rename src/{views/Dashboard.vue => components/CatalogPanels.vue} (71%) diff --git a/eslint-suppressions.json b/eslint-suppressions.json index 855f5d7d..ebf283eb 100644 --- a/eslint-suppressions.json +++ b/eslint-suppressions.json @@ -4,6 +4,11 @@ "count": 2 } }, + "src/components/CatalogPanels.vue": { + "no-console": { + "count": 10 + } + }, "src/components/CollapsibleSection.vue": { "vue/slot-name-casing": { "count": 1 @@ -431,17 +436,6 @@ "count": 2 } }, - "src/views/Dashboard.vue": { - "@typescript-eslint/no-unused-vars": { - "count": 1 - }, - "no-console": { - "count": 10 - }, - "vue/multi-word-component-names": { - "count": 1 - } - }, "src/views/KwetsbaarhedenView.vue": { "@typescript-eslint/no-unused-vars": { "count": 1 @@ -542,4 +536,4 @@ "count": 1 } } -} \ No newline at end of file +} diff --git a/src/views/Dashboard.vue b/src/components/CatalogPanels.vue similarity index 71% rename from src/views/Dashboard.vue rename to src/components/CatalogPanels.vue index 92e98de3..3b8c0095 100644 --- a/src/views/Dashboard.vue +++ b/src/components/CatalogPanels.vue @@ -1,153 +1,128 @@