feat(manifest-v2): migrate to universal widget manifest#512
Merged
Conversation
First reference migration in Phase 1d of the v2 manifest rollout
(hydra ADR-036). Procest's 58-page v1 manifest is now a v2 manifest;
the unified widgets[] model + 5-kind component registry replace the
v1 split widgets[]+layout[], sidebarTabs[].widgets[], and the
customComponents map.
What changed
- @conduction/nextcloud-vue: ^1.0.0-beta.42 → ^1.0.0-beta.57 — first
beta containing the v2 schema, validator, renderer pipeline, and
manifest-migrate CLI
- commander@^12.1.0 added to devDependencies — required to run the
manifest-migrate CLI from node_modules (nc-vue ships it as a devDep,
so consumers need it to invoke the bin)
- src/manifest.json: full v2 transform via `npx manifest-migrate`
- $schema → v2 canonical URL
- 12 dashboard widgets merged with their layout into unified
widgets[] with grid coords inline
- 22 sidebar tab widgets across 17 detail pages lifted to
slot:"sidebar" with tabGroup metadata
- 10 action declarations gained explicit type:"handler" where it
was implicit
- 11 type:"custom" pages got accurate _note fields documenting why
decomposition wasn't feasible (genuine exceptions: bespoke
public views, lib-gap deferrals, migration-cost deferrals)
- All dataSource, @resolve:, and dynamicSource blocks carried
forward verbatim
- src/registry.js (new) — 13 kind:"page" entries covering the 11
custom pages plus 4 sidebar component tabs. Includes the same
entries previously in src/customComponents.js, restructured for
v2's discriminator. customComponents.js stays for the
voorstelReminder function (non-component, can't be a registry
entry) and during the transition.
- src/App.vue + src/main.js: registry prop wired into CnAppRoot
alongside the existing customComponents prop (v2 renderer emits
a one-shot deprecation warning when both are present and the
manifest is v2)
Verification
- npm run build: succeeds with 17 pre-existing warnings (0 errors)
- npm run lint: 14 pre-existing warnings (0 errors)
- v2 validator: {"valid": true, "errors": []}
Known gap
VisualWorkflowEditor (formerly registered as WorkflowTemplateEditor)
is intentionally NOT in registry — its @vue-flow runtime is Vue 3
only and breaks Vue 2 builds when imported. Page stays type:"custom"
with a _note explaining the deferral; consumers can re-register
later when the editor moves to a Vue-2-compatible flow library.
Widget keys audit-trail, data, metadata, related-index, action
appear in the v2 manifest but are NOT in nc-vue's exported
builtInWidgets registry. They render correctly today via the
detail/dashboard renderer's implicit built-ins, but strict registry
lookups would log a console.warn. Tracked as a follow-up against
nc-vue (registry-strict-lookup hardening + named-export
registration of these widgets).
Contributor
Quality Report — ConductionNL/procest @
|
| Check | PHP | Vue | Security | License | Tests |
|---|---|---|---|---|---|
| lint | ✅ | ||||
| phpcs | ✅ | ||||
| phpmd | ✅ | ||||
| psalm | ✅ | ||||
| phpstan | ✅ | ||||
| phpmetrics | ✅ | ||||
| eslint | ✅ | ||||
| stylelint | ✅ | ||||
| composer | ✅ | ✅ 100/100 | |||
| npm | ✅ | ✅ 426/426 | |||
| PHPUnit | ✅ | ||||
| Newman | ⏭️ | ||||
| Playwright | ⏭️ |
Coverage: 0% (0/81 statements)
Quality workflow — 2026-05-19 10:54 UTC
Download the full PDF report from the workflow artifacts.
This was referenced May 19, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
First reference migration of Phase 1d in the v2 manifest rollout. Procest's 58-page v1 manifest is now a v2 manifest — the largest in the fleet, used as the codemod stress test.
What changed
@conduction/nextcloud-vue:^1.0.0-beta.42→^1.0.0-beta.57— first beta with the v2 schema, validator, renderer pipeline, andmanifest-migrateCLIcommander@^12.1.0added to devDependencies (required to invoke the codemod bin fromnode_modules)src/manifest.json— full v2 transform vianpx manifest-migrate:$schema→ v2 canonical URLwidgets[]with grid coords inlineslot: "sidebar"withtabGroupmetadatatype: "handler"where implicittype: "custom"pages got accurate_notefields (bespoke public views, lib-gap deferrals, migration-cost deferrals — all legitimate)dataSource,@resolve:,dynamicSourcecarried forward verbatimsrc/registry.js(new) — 13kind: "page"entries (11 custom pages + 4 sidebar component tabs)src/App.vue+src/main.js—registryprop wired alongside existingcustomComponents; v2 renderer transparently picks the right oneVerification
npx manifest-migratecodemod: exit 0, schema-valid outputvalidateManifestV2(manifest)):{ valid: true, errors: [] }npm run build: succeeds with 17 pre-existing warnings (0 errors)npm run lint: 14 pre-existing warnings (0 errors)Known gaps (tracked as follow-ups)
VisualWorkflowEditornot in registry — its@vue-flowruntime is Vue 3 only and breaks Vue 2 builds. Page staystype: "custom"with a_noteexplaining the deferral. Re-register when a Vue-2-compatible flow library lands.audit-trail,data,metadata,related-index,actionappear in the v2 manifest but aren't in nc-vue's exportedbuiltInWidgetsregistry. They render correctly today via the detail/dashboard renderer's internal handling, but strict registry lookups would logconsole.warn. Tracked as a follow-up against nc-vue.Out of scope
src/customComponents.jsis preserved with itsvoorstelReminderfunction (non-component, can't be a registry entry) and as v1 backward-compat. Can be removed once procest fully moves to registry.Hydra labels
Not adding
ready-for-code-review/ready-for-security-review— Hydra is paused. Ready for manual review.Test plan
npx manifest-migrate --input src/manifest.json --validate-onlyreports v2-validtype: "custom"pages still resolve their components via the registry