refactor(manifest): the flow pages are an index and a flow - #471
Conversation
`flows` and `flow-detail` are deprecated aliases. `flows` predates named index sources: a flow lives in OpenRegister's native flow table rather than a register/schema pair, so an object-backed index had nothing to bind to and the list needed a page type of its own. `config.entitySource` closes that, so the list is an ordinary `index` and only the EDITOR still needs its own type, now named `flow`. Behaviour is unchanged - both aliases resolve to the same components. The list page's `_note` is updated in the same commit: it asserted the old rationale (that an index "cannot address" a flow), which this change disproves. `config.app` is untouched and is load-bearing: the editor stamps it on a flow created there and the index filters on it. Requires @conduction/nextcloud-vue 2.21, where a named source's columns and create button are actually read.
|
CI intentionally cancelled — this is not a failure, and not a verdict. This PR cannot merge until Its queued jobs were competing for org runners with Before merging: bump the dependency to |
Quality Report — ConductionNL/keepiq @
|
| 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 | ❌ | ||||
| Hydra gates | ❌ |
Quality workflow — 2026-08-27 21:09 UTC
Download the full PDF report from the workflow artifacts.
The flow pages need 2.21.0: earlier releases DECLARE a named index source's columns, create button and row actions without reading them, so the migrated page renders a columnless table with no working create action. The lock is the part that matters. CI installs with `npm ci`, which honours package-lock.json and ignores how permissive the caret is — bumping the range alone would change nothing about what actually installs.
Quality Report — ConductionNL/keepiq @
|
| 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 | ✅ | ||||
| Hydra gates | ✅ |
Quality workflow — 2026-08-28 08:07 UTC
Download the full PDF report from the workflow artifacts.
Quality Report — ConductionNL/keepiq @
|
| 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 | ✅ | ||||
| Hydra gates | ✅ |
Quality workflow — 2026-08-28 10:00 UTC
Download the full PDF report from the workflow artifacts.
Moves this app's flow pages off the two deprecated page types. Part of the fleet-wide sweep that
removes the last custom/aliased flow surfaces (
openregister#2937,dossiq#1402,integriq#1622).Flowstype: "flows"type: "index"+config.entitySource: "flows"FlowDetailtype: "flow-detail"type: "flow"Why
flowspredates named index sources. A flow lives in OpenRegister's native flow table rather than aregister/schema pair, so an object-backed index had nothing to bind to and a flow list needed a page
type of its own.
config.entitySourcecloses that gap: the index names the collection and loads it.So the list is now an ordinary index, and only the editor still needs a type of its own — now
called
flowrather thanflow-detail.Both old names still resolve as deprecated aliases, so this is not a fix for a broken page. It moves
the manifest onto the names that are not deprecated, and it is what lets those aliases eventually be
removed.
The
_noteis updated in the same commitThe list page's note asserted the old rationale — that a flow "cannot be addressed" by an index, or
that this had to be a custom page. This change disproves it. A note that survives the change it
describes is worse than no note: it is documentation that actively argues against the current code.
config.appis untouchedDeliberately. It is not a label — the editor stamps it onto a flow created there, and the index
filters on it. Verified before pushing that it is byte-identical to
development.Verification
Every app in this sweep was checked mechanically before push:
agree exactly — this caught two real bugs in the first attempt, where the naive edit matched a
different page's
configlinejsonschemaconfig.appunchanged, page count unchanged, noCnFlowsPagereference left in the notetests/**/*.{ts,js})Blocked on
@conduction/nextcloud-vue2.21 — 2.20 declares a named source's columns and create button butdoes not read them (
nextcloud-vue#810,#818). The dependency bump follows the release.ConductionNL/.github#602— hydra-gates validates against its own vendored schema copy, still at2.25.0, which has neither
flownorentitySource.