Skip to content

feat(flows): give the flow-detail canvas its sidebar - #492

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

feat(flows): give the flow-detail canvas its sidebar#492
rubenvdlinde merged 6 commits into
developmentfrom
feat/adr-110-flows-surface

Conversation

@rubenvdlinde

Copy link
Copy Markdown
Contributor

Commits

  • feat(flows): give the flow-detail canvas its sidebar
  • fix(icons): register Sitemap, or the Flows entry renders with no icon
  • test(router): classify the flow routes as vault-protected
  • build(deps): @conduction/nextcloud-vue 2.19.0 for the flows page types
  • feat(nav): a Flows surface in this app, on the shared page types

Notes

Committed and pushed from the local workspace; the working tree is clean.

🤖 Generated with Claude Code

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.
keepiq denies by default and asserts that every manifest page is explicitly
classified, so adding two pages without classifying them fails — which is the
test doing its job.

Flows and FlowDetail are PROTECTED, not public. A flow in this app can read and
write vault secrets, so the authoring surface must sit behind the lock exactly
as the secret list does: a locked vault that still lets someone edit the
automation over it is not locked.

656 unit tests green.
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.
The manifest _note claimed the controls rendered in the NC app sidebar,
but the sidebarComponent field it described did not exist. Every
#/flows/:id -- and #/flows/new, the same route with the literal id -- drew
a bare canvas: savable and runnable, but with no way to name, describe,
trigger or step-edit the flow, because those controls all live in
CnFlowSidebar. Mirrors pipelinq#1490. ADR-110 Decision 4.
The branch was 43 behind; that staleness -- not the change -- is what
failed CI. Development had since added the nl.json keys gate-102 wants and
the flows walkthrough stop gate-70 wants.

Development also moved on structurally: the deprecated `flows` page type
became an index over config.entitySource, and `flow-detail` was renamed
`flow`. Took development's shape and kept sidebarComponent on top, which
is the defect this branch fixes -- the _note already promised sidebar
controls that no field delivered.

Verified on the merged tree: hydra gates report zero failures.
@rubenvdlinde
rubenvdlinde merged commit 5258512 into development Aug 30, 2026
49 checks passed
@rubenvdlinde
rubenvdlinde deleted the feat/adr-110-flows-surface branch August 30, 2026 08:03
@github-actions

Copy link
Copy Markdown
Contributor

Quality Report — ConductionNL/keepiq @ 40d69d1

Check PHP Vue Security License Tests
lint
phpcs
phpmd
psalm
phpstan
phpmetrics
eslint
stylelint
build
check-manifest
test-l10n
format
check-l10n-js
check-schema-l10n
composer ✅ 111/111
npm ✅ 550/550
app:check-code ⏭️
info.xml
REUSE
PHPUnit
Newman
Playwright 🚨 NO VERDICT — enabled but never ran
Hydra gates

Quality workflow — 2026-08-30 08:09 UTC

Download the full PDF report from the workflow artifacts.

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