Vue-subset HTML wire authoring

core_write_view_html accepts familiar Vue-shaped markup, but it does not run Vue or JavaScript. The rule is deliberately strict: an attribute is adopted iff it lowers to a declared AppDSL carrier with no execution. Call core_get_view_html_catalog first; it is the live vocabulary and includes the normalization table and schema-derived component properties.

Structural and reactive forms

Only the item alias is accepted for repeaters. A query-backed repeater needs a stable key; index identity is intentionally unavailable. Nested repeater expressions are compiled in the existing row scope.

Schema-derived component properties

Prefer the catalog projection over raw JSON. Scalar properties become attributes, arrays/objects become generated v-* child elements, and reserved wrapper names are exposed as spec-*. For example:
These forms and view_html export address the same canonical spec paths. Authoring the same path twice—such as raw spec plus the corresponding child element—is rejected rather than resolved by precedence.

Dialogs, popovers, title, and invokers

Native platform spellings lower to existing overlay and interaction carriers:
open supplies the resolver’s initial value. title on ordinary elements is preserved in the wrapper title carrier and rendered as a native hover tooltip. Targets resolve across the whole submitted fragment and multiple invokers may share one overlay. An overlay without v-model:open uses its own local.open.<element-id> resolver and works with its built-in trigger/editor affordance. An external invoker cannot write another element’s local resolver, so the compiler blocks that combination and asks for an explicit declared state.* or param.* binding. State variables must already exist in AppDSL state.

Diagnostics and canonical export

Blocking findings include a stable code, source path, and actionable Vue-shaped suggestion. Advisories describe deterministic normalization. Canonical export may prefer when, key, and schema-derived property spellings even when the input used their Vue aliases; byte-for-byte HTML round-trip is not promised, but the typed AppDSL meaning is. The compiler’s normalized output rewrites projectable raw specs to props/children, and htmlwire.ExportPlan provides the same AppDSL-to-wire projection for stored plans. Recompiling either form is spec-identical across every semantic kind; click assignments also export back to @click when the interaction is exactly one declared assignment. On core_read_scope, whole-view and #element: reads expose this projection as metadata.view_html; metadata.view_html_export_error explains any older stored carrier that cannot be represented without semantic loss.