Skip to content

feat: Tier-4 shell — manifest.json + CnAppRoot (closes #17)#20

Merged
rubenvdlinde merged 1 commit into
developmentfrom
feature/adopt-manifest-shell
May 12, 2026
Merged

feat: Tier-4 shell — manifest.json + CnAppRoot (closes #17)#20
rubenvdlinde merged 1 commit into
developmentfrom
feature/adopt-manifest-shell

Conversation

@rubenvdlinde
Copy link
Copy Markdown
Contributor

Closes #17.

What

OpenBuilt's own app shell becomes manifest-driven (ADR-024 Tier-1+) — the same CnAppRoot / CnPageRenderer system it drives for the virtual apps it builds, instead of the hand-rolled NcContent + MainMenu.vue + vue-router chrome.

  • src/manifest.jsonmenu (Dashboard / Virtual apps / Schemas / Exports / Documentation) + pages. OpenBuilt's pages are tooling UIs, not generic register CRUD, so each is type: "custom" resolving a view via customComponents: Dashboard, the virtual-app manager (ApplicationEditor — list + detail + Editor/History/Diff tabs + RBAC modal + export), the schema designer (/builder/:slug/schemas[/:schemaId] plus a paramless /schemas shortcut), the export-jobs list, the BuilderHost. dependencies: ["openregister"] drives CnAppRoot's dependency-check phase.
  • src/customComponents.js — registry mapping the five custom pages → src/views/*.vue.
  • src/App.vue — thin CnAppRoot wrapper; the old "OpenRegister is required" empty state moves to the #dependency-missing slot.
  • src/main.js — builds the vue-router config from manifest.pages (routesFromManifest), registerIcons() / registerTranslations(), fire-and-forget loadTranslations, mounts App.vue. Deletes src/router/index.js and src/navigation/MainMenu.vue.
  • SchemaDesigner.appSlug falls back to hello-world for the paramless /schemas shortcut.
  • tests/vitest/manifest.spec.js — structural checks (menu→page, custom-page→customComponent, no dead registry entries). Stub extended with the manifest-renderer family.

Verification

Dev container: /apps/openbuilt/, /applications, /schemas, /exports all render through CnPageRenderer with the manifest-driven CnAppNav sidebar (screenshots in the issue). 84 Vitest tests pass; eslint src clean; production build OK. PHPUnit/Newman CI reds are pre-existing (#11).

Follow-ups

OpenBuilt now eats its own dog food: instead of a hand-rolled NcContent +
MainMenu.vue + vue-router shell, it declares src/manifest.json and mounts
@conduction/nextcloud-vue's CnAppRoot — the same renderer it drives for
the virtual apps it builds (ADR-024).

- src/manifest.json: menu (Dashboard / Virtual apps / Schemas / Exports /
  Documentation) + pages. OpenBuilt's pages are tooling UIs, not generic
  register CRUD, so each is type:"custom" and resolves a view via
  customComponents — Dashboard, the virtual-app manager (list + detail +
  Editor/History/Diff tabs), the schema designer (/builder/:slug/schemas
  + a paramless /schemas shortcut defaulting to the hello-world seed), the
  export-jobs list, and the BuilderHost virtual-app host. dependencies:
  ["openregister"] drives CnAppRoot's dependency-check phase (the old
  "OpenRegister is required" empty state moves to the #dependency-missing
  slot).
- src/customComponents.js: the registry mapping the five custom pages to
  src/views/*.vue.
- src/App.vue: thin CnAppRoot wrapper (manifest / customComponents /
  pageTypes / translate / permissions) — no more bespoke chrome.
- src/main.js: builds the vue-router config from manifest.pages
  (routesFromManifest), registerIcons() / registerTranslations(),
  fire-and-forget loadTranslations, mounts App.vue. Deletes
  src/router/index.js and src/navigation/MainMenu.vue.
- SchemaDesigner.appSlug now falls back to 'hello-world' for the paramless
  /schemas shortcut.
- tests/vitest/manifest.spec.js: structural manifest checks (menu→page,
  custom-page→customComponent, no dead registry entries). Stub extended
  with the manifest-renderer family. 84 Vitest tests pass.

Verified in the dev container: /apps/openbuilt/, /applications, /schemas,
/exports all render through CnPageRenderer with the manifest-driven
CnAppNav. Supersedes the competing editor shells in #4/#8 (their
PageDesigner / templates-gallery become customComponents in a follow-up).
@rubenvdlinde rubenvdlinde merged commit 6d7ebdb into development May 12, 2026
31 of 45 checks passed
@rubenvdlinde rubenvdlinde deleted the feature/adopt-manifest-shell branch May 12, 2026 09:19
@github-actions
Copy link
Copy Markdown
Contributor

Quality Report — ConductionNL/openbuilt @ 4b36f40

Check PHP Vue Security License Tests
lint
phpcs
phpmd
psalm
phpstan
phpmetrics
eslint
stylelint
composer ✅ 100/100
npm ✅ 430/430
PHPUnit
Newman
Playwright ⏭️

Coverage: 0% (0/19 statements)


Quality workflow — 2026-05-12 09:21 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