From 523a5fd5212a7f150b76a9116d51753d40aa15a6 Mon Sep 17 00:00:00 2001 From: Ruben van der Linde Date: Thu, 27 Aug 2026 02:08:58 +0200 Subject: [PATCH 1/3] feat(nav): a Flows surface in this app, on the shared page types MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ADR-110 Decision 4. A flow is app-specific — it operates on this app's objects — so the authoring surface belongs here rather than behind a deep link to another app's list. The ENGINE stays single (ADR-065): these pages are a scoped view onto OpenRegister's one native flow store, not a per-app store. Two manifest pages and one settings entry, no component files: `type: "flows"` and `type: "flow-detail"` are shipped page types in @conduction/nextcloud-vue 2.19.0, scoped by `config.app`. Note the layout of the diff: entries are appended textually rather than by reserialising the manifest. A `json.dump` round-trip rewrote pipelinq's file as a 3,950-line diff for a 20-line addition — correct output, unreviewable change. --- src/manifest.json | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/manifest.json b/src/manifest.json index f5a4c304..c72c5a55 100644 --- a/src/manifest.json +++ b/src/manifest.json @@ -157,6 +157,14 @@ "route": "FeaturesRoadmap", "section": "footer", "order": 95 + }, + { + "id": "FlowsMenu", + "label": "Flows", + "icon": "Sitemap", + "route": "Flows", + "section": "settings", + "order": 96 } ], "pages": [ @@ -819,6 +827,22 @@ "config": { "documentationUrl": "https://stackiq.conduction.nl" } + }, + { + "id": "Flows", + "route": "/flows", + "type": "flows", + "title": "Flows", + "config": { "app": "stackiq" }, + "_note": "ADR-110 Decision 4: a flow is app-specific, so the authoring surface lives here rather than behind a deep link to another app's list. Rendered by the shared CnFlowsPage page type over OpenRegister's one native flow store (ADR-065), scoped to this app." + }, + { + "id": "FlowDetail", + "route": "/flows/:id", + "type": "flow-detail", + "title": "Flow", + "config": { "app": "stackiq" }, + "_note": "The shared CnFlowDetail canvas over the same single engine. Controls render in the NC app sidebar so the canvas keeps full width." } ] } From c34580f27fab51f0edeaee19097e14ca50997480 Mon Sep 17 00:00:00 2001 From: Ruben van der Linde Date: Thu, 27 Aug 2026 02:30:14 +0200 Subject: [PATCH 2/3] build(deps): @conduction/nextcloud-vue 2.19.0 for the flows page types MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Required by the manifest change: `type: "flows"` / `type: "flow-detail"` are rejected by the compiled validator in earlier versions, and CI installs with `npm ci` — so the LOCK is what decides, not the `^2.x` range. Several of these locks were pinned many minors back, which is why some lockfile diffs are large: npm restructures the nested tree (mostly @esbuild platform binaries under @nextcloud/vue) to satisfy 2.19.0's peers. No direct dependency other than @conduction/nextcloud-vue changes. --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 35338461..2d0febe2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,7 @@ "dependencies": { "@babel/core": "^7.29.0", "@codemirror/lang-json": "^6.0.0", - "@conduction/nextcloud-vue": "^2.3.0", + "@conduction/nextcloud-vue": "^2.19.0", "@nextcloud/auth": "^2.6.0", "@nextcloud/axios": "^2.5.0", "@nextcloud/capabilities": "^1.2.1", @@ -2192,9 +2192,9 @@ } }, "node_modules/@conduction/nextcloud-vue": { - "version": "2.15.0", - "resolved": "https://registry.npmjs.org/@conduction/nextcloud-vue/-/nextcloud-vue-2.15.0.tgz", - "integrity": "sha512-/CSsaMcprVMYEemvGGorEQgvDRefMi/EFLTpK35A1BqgBu/fP/nMN1V+5r+fPaylEc1LeSdCShKPYwU79rd1eQ==", + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/@conduction/nextcloud-vue/-/nextcloud-vue-2.19.0.tgz", + "integrity": "sha512-gSLl4RZ7hy1e2TBuzYZLiTLBMggRYgfuxFMva59JBhb1EP93GgvEd/HpQcg+zoBL9FJPgJw9ir2OGf9Tore7og==", "license": "EUPL-1.2", "dependencies": { "@ckpack/vue-color": "^1.6.0", diff --git a/package.json b/package.json index ff455368..0f9ba0d2 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,7 @@ "dependencies": { "@babel/core": "^7.29.0", "@codemirror/lang-json": "^6.0.0", - "@conduction/nextcloud-vue": "^2.3.0", + "@conduction/nextcloud-vue": "^2.19.0", "@nextcloud/auth": "^2.6.0", "@nextcloud/axios": "^2.5.0", "@nextcloud/capabilities": "^1.2.1", From c90501dc887a3abcf350c4be2ca437859718d98c Mon Sep 17 00:00:00 2001 From: Ruben van der Linde Date: Thu, 27 Aug 2026 04:18:16 +0200 Subject: [PATCH 3/3] fix(icons): register Sitemap, or the Flows entry renders with no icon MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit An icon name a manifest uses but src/icons.js does not register renders as NOTHING — not a fallback (ADR-077 rule 3). The Flows menu entry this PR adds uses `Sitemap`, and this app never registered it, so the entry would have shipped with an empty icon slot. Caught by gate-60 icon-vocabulary. I had checked `Sitemap` was registered in dossiq and carried the assumption to the fleet; each app keeps its own icons.js, and six of the twelve did not have it. The six failing gate runs were exactly those six apps. Both halves are required: the import alone is dead code, the registry entry alone does not resolve. --- src/icons.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/icons.js b/src/icons.js index ac8ced86..27f3f7d6 100644 --- a/src/icons.js +++ b/src/icons.js @@ -57,6 +57,7 @@ import ShieldAlertOutline from 'vue-material-design-icons/ShieldAlertOutline.vue import ShieldCheckOutline from 'vue-material-design-icons/ShieldCheckOutline.vue' import ShieldLockOutline from 'vue-material-design-icons/ShieldLockOutline.vue' import ShieldOutline from 'vue-material-design-icons/ShieldOutline.vue' +import Sitemap from 'vue-material-design-icons/Sitemap.vue' import SourceBranch from 'vue-material-design-icons/SourceBranch.vue' import Star from 'vue-material-design-icons/Star.vue' import ViewDashboardOutline from 'vue-material-design-icons/ViewDashboardOutline.vue' @@ -109,6 +110,7 @@ export default { ShieldCheckOutline, ShieldLockOutline, ShieldOutline, + Sitemap, SourceBranch, Star, ViewDashboardOutline,