Skip to content

refactor(manifest): the flow pages are an index and a flow - #775

Open
rubenvdlinde wants to merge 4 commits into
developmentfrom
feat/flow-pages-are-index-and-flow
Open

refactor(manifest): the flow pages are an index and a flow#775
rubenvdlinde wants to merge 4 commits into
developmentfrom
feat/flow-pages-are-index-and-flow

Conversation

@rubenvdlinde

Copy link
Copy Markdown
Contributor

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).

Page Before After
Flows type: "flows" type: "index" + config.entitySource: "flows"
FlowDetail type: "flow-detail" type: "flow"

Why

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 a flow list needed a page
type of its own. config.entitySource closes 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 flow rather than flow-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 _note is updated in the same commit

The 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.app is untouched

Deliberately. 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:

  • the text edit was compared against the same change applied structurally, and the two had to
    agree exactly — this caught two real bugs in the first attempt, where the naive edit matched a
    different page's config line
  • the result validates against the v2 manifest schema (2.26.0) with jsonschema
  • config.app unchanged, page count unchanged, no CnFlowsPage reference left in the note
  • no test in any of the 13 apps pins these page types (checked across all tests/**/*.{ts,js})

Blocked on

  • @conduction/nextcloud-vue 2.21 — 2.20 declares a named source's columns and create button but
    does 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 at
    2.25.0, which has neither flow nor entitySource.

`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.
@rubenvdlinde

Copy link
Copy Markdown
Contributor Author

CI intentionally cancelled — this is not a failure, and not a verdict.

This PR cannot merge until @conduction/nextcloud-vue 2.21 is published: 2.20 declares a named
source's columns, addLabel and rowActions without reading them, so on 2.20 this page renders a
columnless table with no working create button.

Its queued jobs were competing for org runners with nextcloud-vue#818 and #812 — the release that
unblocks it — which had sat with zero runners for three hours. Cancelling here is what lets that
release through.

Before merging: bump the dependency to ^2.21, then re-run CI. Do not read the cancelled run as
a pass or a fail — a cancelled check is neither, and there is no verdict on this commit yet.

@github-actions

Copy link
Copy Markdown
Contributor

Quality Report — ConductionNL/stackiq @ c2b0cb6

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
check-l10n-js
composer ✅ 130/130
npm ✅ 721/721
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.

… page type

check:manifest failed on this PR with

    [validate-manifest] schema.version: 2.25.0
    Ajv validation: FAIL
      - /pages/N/type must be equal to one of the allowed values (keyword=enum)

This PR declares a `type: "flow"` page. That type entered the manifest
schema at 2.26.0, which ships in @conduction/nextcloud-vue 2.20.1
(published today 20:33). The app locked 2.19.0, which carries schema
2.25.0 and has no `flow` in its enum.

Both files move. A caret alone changes nothing — package-lock.json is
what npm ci installs, and it pinned 2.19.0.

Verified by diffing this manifest's page types against each schema enum:
against 2.26.0 nothing is rejected; against 2.25.0 exactly the new type
is, which is the failure above.
@github-actions

Copy link
Copy Markdown
Contributor

Quality Report — ConductionNL/stackiq @ b143f1a

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
check-l10n-js
composer ✅ 130/130
npm ✅ 721/721
app:check-code ⏭️
info.xml
REUSE
PHPUnit
Newman ⏭️
Playwright
Hydra gates

Quality workflow — 2026-08-27 22:29 UTC

Download the full PDF report from the workflow artifacts.

Conduction Release Bot added 2 commits August 28, 2026 09:12
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.
nextcloud-vue 2.21 brings #806: a record whose schema has a same-schema DETAIL
page is edited there, not in a modal launched from the table — the modal renders
only the schema's flat scalars and cannot express a record whose related rows
live elsewhere. CnPageRenderer sets `editOpensDetail` from
`detailPageByRegisterSchema`.

Both edit blocks in this spec waited on a dialog that no longer opens from the
index. They now go through one helper that BRANCHES: dialog if it opens
directly, otherwise follow the navigation and click the detail page's header
Edit. Which route applies is a property of the schema, not of the test, so
branching is the accurate shape rather than a relaxed one — the helper still
returns a real, visible edit dialog and every assertion after it is unchanged.
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.

2 participants