spec(leaf): mount(el,props) escape hatch — cross-Vue-major leaf render (fixes #44 systemically)#2127
Open
rubenvdlinde wants to merge 1 commit into
Open
spec(leaf): mount(el,props) escape hatch — cross-Vue-major leaf render (fixes #44 systemically)#2127rubenvdlinde wants to merge 1 commit into
rubenvdlinde wants to merge 1 commit into
Conversation
fixes #44 systemically)
Contributor
Quality Report — ConductionNL/openregister @
|
| Check | PHP | Vue | Security | License | Tests |
|---|---|---|---|---|---|
| lint | ✅ | ||||
| phpcs | ✅ | ||||
| phpmd | ✅ | ||||
| psalm | ✅ | ||||
| phpstan | ✅ | ||||
| phpmetrics | ✅ | ||||
| eslint | ✅ | ||||
| stylelint | ✅ | ||||
| composer | ✅ | ✅ 174/174 | |||
| npm | ✅ | ✅ 555/555 | |||
| PHPUnit | ❌ | ||||
| Newman | ❌ | ||||
| Playwright | ⏭️ |
Quality workflow — 2026-07-25 21:05 UTC
Download the full PDF report from the workflow artifacts.
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.
What
OpenSpec change proposal (spec only — no implementation) for a
mount(el, props)/unmount(el)render escape hatch on the cross-app leaf registry, so a sibling app's render-surface leaf renders on an OpenRegister host object page even when host and leaf are on different Vue majors. Resolves hermiq#44 systemically and unblocks the hermiq, decidesk, and openconnector leaves.Problem (confirmed live — hermiq#44)
ADR-019 leaf rendering passes a sibling app's SFC to the host's dynamic-component renderer. It works only when host and leaf share a Vue major. Host (OpenBuild/OR via
@conduction/nextcloud-vuev1) = Vue 2.7; hermiq/decidesk/openconnector leaves = Vue 3. A Vue-3-compiled SFC crashes under the Vue-2.7 renderer (blank body,undefineddata reads). Only built-ins render, because the host swaps them to its own local SFC (LIB_INTEGRATION_COMPONENTS, openregister#1958). A bespoke cross-major component has no local twin, so it hits the raw cross-Vue trap.Design
A render-surface leaf MAY supply
mount(el, props)+unmount(el)(renderMode: 'mount') instead of the SFCtab/widget. The host renders a bare container element; the leaf instantiates its own framework (createApp(...).mount(el)) inside it and tears down onunmount. The DOM element is the neutral hand-off — each side runs its own Vue. Host consumers (CnObjectSidebar/CnDetailPage/CnDashboardPage) grow the mount lifecycle (mount on show, unmount on hide/teardown, re-mount on object change, error isolation).LeafDescriptor.renderModecarries the mode to discovery + parity. The SFC path stays the default for same-major/built-in leaves (backward compatible). Command boundary is unchanged (ADR-041); ADR-066 (render-and-read boundary) is amended with the mount clause.Deliverable
openspec/changes/leaf-mount-render-escape-hatch/—proposal.md,design.md(mount contract, host lifecycle, renderMode metadata, gate-24 parity implication, ADR-066 amendment text, leaf migration list),specs/leaf-mount-render/spec.md(6 normative requirements),tasks.md(split by repo).openspec validate --strictclean.Proposal only — do NOT merge. For human review.