You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
OpenBuilt currently hand-rolls its own app shell — src/App.vue (NcContent + MainMenu.vue + vue-router + router-view) and a bespoke src/router/index.js. Per ADR-024 new apps should adopt at least Tier 1 from inception: a src/manifest.json rendered by CnAppRoot / CnPageRenderer / useAppManifest, with a small src/customComponents.js registry for the views that don't map to a built-in page type. decidesk is the Tier-4 reference (decidesk/src/{manifest.json,customComponents.js,App.vue,main.js}).
Converting OpenBuilt's shell:
Aligns the app builder with the same manifest system it generates for virtual apps (eats its own dog food).
Backend is already largely declarative: lib/Settings/openbuilt_register.json uses x-openregister-lifecycle (ADR-031); ApplicationsController (runtime manifest API / listMine / clone / diff / export) is genuinely needed; ApplicationVersionSnapshotListener / DeepLinkRegistrationListener are documented ADR-031 §Exceptions(1) fallbacks. This issue is about the frontend shell.
Do this via the opsx flow (opsx-new openbuilt-adopt-manifest → opsx-ff → opsx-apply → opsx-verify), not ad-hoc, so it carries ADR-022/024/032 in the loop.
Why
OpenBuilt currently hand-rolls its own app shell —
src/App.vue(NcContent+MainMenu.vue+vue-router+router-view) and a bespokesrc/router/index.js. Per ADR-024 new apps should adopt at least Tier 1 from inception: asrc/manifest.jsonrendered byCnAppRoot/CnPageRenderer/useAppManifest, with a smallsrc/customComponents.jsregistry for the views that don't map to a built-in page type.decideskis the Tier-4 reference (decidesk/src/{manifest.json,customComponents.js,App.vue,main.js}).Converting OpenBuilt's shell:
ApplicationEditor.vueshell that is structurally incompatible with the merged list-view + Editor/History/Diff-tabs + RBAC-gated shell — once the shell isCnAppRoot+manifest, their competing shells are moot and feat(openspec): openbuilt-page-editor — visual manifest designer (chain spec #5) #4'sPageDesigner.vue+ sub-editors / spec(openbuilt-templates-marketplace): starter template gallery + clone-from-template (#8/9) #8's templates gallery becomecustomComponentsentries /type: custompages.Plan (mirror
decidesk)src/manifest.json—{$schema, version, dependencies:["openregister"], menu[], pages[]}. Pages (alltype: "custom"— they are tooling UIs, not generic register CRUD):Dashboard/→DashboardViewVirtualApps/applications(+VirtualAppDetail/applications/:slug) →ApplicationsViewSchemas/builder/:slug/schemas(+SchemaDetail/builder/:slug/schemas/:schemaId) →SchemaDesignerViewTemplates/templates→TemplatesView(from spec(openbuilt-templates-marketplace): starter template gallery + clone-from-template (#8/9) #8)Exports/exports→ExportJobsViewBuilderHost/builder/:slug/:pathMatch(.*)?→BuilderHostView(declare last — wildcard)section:settings). Admin settings stay server-side (AdminSettings.php); no in-app admin route (ADR-004 / hydra-gate-admin-router).src/customComponents.js—{ DashboardView, ApplicationsView, SchemaDesignerView, TemplatesView, ExportJobsView, BuilderHostView }mapping to the existingsrc/views/*.vue(renamed/wrapped as needed). feat(openspec): openbuilt-page-editor — visual manifest designer (chain spec #5) #4'sPageDesigner.vuebecomes a "Design" tab insideApplicationsView(or its owntype:custompage); feat(openspec): openbuilt-page-editor — visual manifest designer (chain spec #5) #4's sub-editors live incomponents/page-editor/.src/App.vue— thin wrapper:<CnAppRoot :manifest :custom-components :page-types app-id="openbuilt" :translate :permissions>. Deletenavigation/MainMenu.vue.src/main.js— buildvue-routerconfig frommanifest.pages(decidesk'sroutesFromManifest),registerIcons(),registerTranslations(), fire-and-forgetloadTranslations, mountApp.vuewithmanifest/customComponents/pageTypesprops.src/router/index.js(routes now derived from the manifest).Reconciliation tasks folded in
PageDesigner.vue+ sub-editors), wire as a "Design" tab inApplicationsView. Drop feat(openspec): openbuilt-page-editor — visual manifest designer (chain spec #5) #4's competing shell + store refactor.cloneFromTemplatecontroller + the templates gallery view, add as theTemplatespage. (controller side already partly merged via the rebase.)Notes
lib/Settings/openbuilt_register.jsonusesx-openregister-lifecycle(ADR-031);ApplicationsController(runtime manifest API / listMine / clone / diff / export) is genuinely needed;ApplicationVersionSnapshotListener/DeepLinkRegistrationListenerare documented ADR-031 §Exceptions(1) fallbacks. This issue is about the frontend shell.opsx-new openbuilt-adopt-manifest→opsx-ff→opsx-apply→opsx-verify), not ad-hoc, so it carries ADR-022/024/032 in the loop.