Skip to content

feat(nav): a Flows surface in this app, on the shared page types - #753

Merged
rubenvdlinde merged 3 commits into
developmentfrom
feat/adr-110-flows-surface
Aug 27, 2026
Merged

feat(nav): a Flows surface in this app, on the shared page types#753
rubenvdlinde merged 3 commits into
developmentfrom
feat/adr-110-flows-surface

Conversation

@rubenvdlinde

Copy link
Copy Markdown
Contributor

ADR-110 Decision 4 — this app gets its own Flows surface.

A flow is app-specific: it operates on this app's objects. So the authoring surface belongs here, not 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.

What changed

Two manifest pages and one settings-foldout 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 to this app's <id>.

{ "id": "Flows", "route": "/flows", "type": "flows", "config": { "app": "<appid>" } },
{ "id": "FlowDetail", "route": "/flows/:id", "type": "flow-detail", "config": { "app": "<appid>" } }

Three apps adopted flows before those page types existed, each by copying ~270 lines of identical wrapper. All three copies carried the same dead @rowClick listener — CnIndexPage emits row-click, and Vue 3 does not convert a camelCase template listener, so clicking a row did nothing in any of them. The page type fixes that once.

The dependency bump is required, not incidental

type: "flows" is rejected by the compiled validator in earlier versions, and CI installs with npm ci — so the lock decides, not the ^2.x range. Some lockfile diffs are large because the lock was pinned several minors back and 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.

Verified before pushing

npm run check:manifest run locally in every app against the installed 2.19.0 — all pass. The manifest also validates both as source and after buildManifest, with the page scoped to this app's own <id> from appinfo/info.xml.

The manifest edit is a textual splice, not a reserialisation: a json.dump round-trip turned a 20-line addition into a 3,950-line diff in one app. Diffs here are additions only.

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.
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.
@github-actions

Copy link
Copy Markdown
Contributor

Quality Report — ConductionNL/stackiq @ 9f27b7f

Check PHP Vue Security License Tests
lint
phpcs
phpmd
psalm
phpstan
phpmetrics
eslint
stylelint
build
check-manifest
check-vue-demi
test-l10n
format
check-schema-l10n
composer ✅ 130/130
npm ✅ 720/720
app:check-code ⏭️
info.xml
REUSE
PHPUnit
Newman ⏭️
Playwright
Hydra gates

Quality workflow — 2026-08-27 01:28 UTC

Download the full PDF report from the workflow artifacts.

@github-actions

Copy link
Copy Markdown
Contributor

Quality Report — ConductionNL/stackiq @ 9f27b7f

Check PHP Vue Security License Tests
lint
phpcs
phpmd
psalm
phpstan
phpmetrics
eslint
stylelint
build
check-manifest
check-vue-demi
test-l10n
format
check-schema-l10n
composer ✅ 130/130
npm ✅ 720/720
app:check-code ⏭️
info.xml
REUSE
PHPUnit
Newman ⏭️
Playwright
Hydra gates

Quality workflow — 2026-08-27 01:37 UTC

Download the full PDF report from the workflow artifacts.

@github-actions

Copy link
Copy Markdown
Contributor

Quality Report — ConductionNL/stackiq @ 9f27b7f

Check PHP Vue Security License Tests
lint
phpcs
phpmd
psalm
phpstan
phpmetrics
eslint
stylelint
build
check-manifest
check-vue-demi
test-l10n
format
check-schema-l10n
composer ✅ 130/130
npm ✅ 720/720
app:check-code ⏭️
info.xml
REUSE
PHPUnit
Newman ⏭️
Playwright
Hydra gates

Quality workflow — 2026-08-27 02:14 UTC

Download the full PDF report from the workflow artifacts.

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.
@github-actions

Copy link
Copy Markdown
Contributor

Quality Report — ConductionNL/stackiq @ 291318f

Check PHP Vue Security License Tests
lint
phpcs
phpmd
psalm
phpstan
phpmetrics
eslint
stylelint
build
check-manifest
check-vue-demi
test-l10n
format
check-schema-l10n
composer ✅ 130/130
npm ✅ 720/720
app:check-code ⏭️
info.xml
REUSE
PHPUnit
Newman ⏭️
Playwright
Hydra gates

Quality workflow — 2026-08-27 02:38 UTC

Download the full PDF report from the workflow artifacts.

@rubenvdlinde
rubenvdlinde merged commit 4f5da03 into development Aug 27, 2026
86 checks passed
@rubenvdlinde
rubenvdlinde deleted the feat/adr-110-flows-surface branch August 27, 2026 02:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant