Skip to content

Diagnostics — ROZ code reference ​

Every diagnostic Rozie emits carries a stable ROZxxx code. The registry spans the whole toolchain: compile-time errors and warnings from the core compiler, build-tool plugin and CLI failures, and runtime warnings from the helper packages. A reported problem shows the code alongside its message; compile-time diagnostics add a source-located code frame (for example ROZ204: …). This page is the lookup table: search for the code you hit in your terminal and land on its severity and cause.

The codes are public API — a code string never renumbers across versions. (The internal member name shown in muted text next to each code may be renamed for clarity, but the ROZxxx string is the contract.)

How to read this page ​

This entire reference is generated at docs-build time by scanning the compiler's own diagnostic registry (packages/core/src/diagnostics/codes.ts). It can never drift from the compiler — every code the compiler knows about appears below, grouped into the same clusters the source file uses.

  • Code — the stable ROZxxx string, with the internal member name in muted text.
  • Severity — error halts compilation; warning is advisory; info is a non-actionable FYI. Two status tokens mark codes that never fire: reserved is a code allocated in the registry but not emitted anywhere in the toolchain, and retired is a code that once fired but no longer does (code strings are public API and never renumber, so both stay listed).
  • Cause — a one-line summary drawn directly from the registry comment. Where a comment is absent, this is -. Nothing here is invented; the page surfaces only what the source documents.

For the human-readable narrative behind many of these — $model write rules, r-match error boundaries, $classSelector validation, listener-element rules — see Features & design choices.

SFC envelope (Plan 02) — ROZ001..ROZ009 ​

CodeSeverityCause
ROZ001 MISSING_ROZIE_ENVELOPEerrorthe .rozie file has no <rozie> root element wrapping its blocks.
ROZ002 MULTIPLE_ROZIE_ENVELOPESerrormore than one <rozie> root, or a <rozie> nested inside another envelope.
ROZ003 UNKNOWN_TOP_LEVEL_BLOCKerrora tag at envelope top level is not a recognized block (<props> <data> <script> <listeners> <template> <style> <components> <types> <emits>).
ROZ004 DUPLICATE_BLOCKerrorthe same block name appears more than once inside one <rozie> (each block is allowed at most once).
ROZ005 PREMATURE_BLOCK_CLOSEerrorliteral `</script>` (or other block close sequence) inside the block's own body ended the block early; escape it as `<\/script>`
ROZ006 RAWTEXT_TAG_IN_OPAQUE_BLOCKretirednever emitted: an interim pre-release check for `<script`/`<style`/`<title`/`<textarea` text inside a <types>/<emits>/<props>/<data>/<listeners>/<components> body.

Block parse — declarative <props>/<data>/<listeners> (Plan 03) — ROZ010..ROZ029 ​

CodeSeverityCause
ROZ010 INVALID_DECLARATIVE_EXPRESSIONerrora <props>/<data>/<components> body fails to parse as a single JS expression.
ROZ011 NOT_OBJECT_LITERALerrora <props>/<data>/<components> body parses but is not an object literal — it lowered to an array or some other expression type.
ROZ012 LISTENER_KEY_NOT_STRINGretiredDORMANT since Phase 19 (was error): a <listeners> object-literal key was not a string; the object-walk that emitted this was replaced by the <listener> element form
ROZ013 LISTENER_VALUE_NOT_OBJECTretiredDORMANT since Phase 19 (was error): a <listeners> object-literal value was not an object; replaced by the <listener> element form
ROZ014 REQUIRED_PROP_HAS_DEFAULTwarningA `<props>` entry declared `required: true` also carries a `default:` — the default can never fire (a required prop is always passed), so Rozie drops the default.
ROZ015 LISTENER_ELEMENT_NO_EVENTerrora <listener> element carries zero @event attributes — it wires nothing; the tag is skipped
ROZ016 LISTENERS_UNEXPECTED_ELEMENTerrora non-<listener> element appears inside <listeners>; only <listener> elements are allowed (split out of ROZ015, WR-01)
ROZ017 LISTENER_ELEMENT_UNTERMINATEDerrorPhase 19 (code-review WR-01): a `<listener>` element is left unterminated — no self-closing `/>` and no closing tag.
ROZ018 INVALID_PROP_DOCS_SHAPEwarninga <props> `docs:` key is malformed (non-object, wrong-typed description/deprecated/example, or unknown sub-key); the bad docs/sub-key is dropped and no JSDoc is emitted.
ROZ019 TYPES_BLOCK_DISALLOWED_STATEMENTerrorthe <types> block holds a statement that is not type-only (runtime code, a value import, enum, declare const, …); only `import type`, interface, type, and export of those are allowed, so hoisting <types> into every target can never change runtime behaviour.
ROZ020 TYPES_BLOCK_PARSE_ERRORerrorthe <types> block is not valid TypeScript.
ROZ021 INVALID_EMIT_DECLerroran <emits> entry is not `{}` / `{ payload?: '<TS type>', docs?: {...} }`, or uses a computed/spread key, an unknown sub-key, a duplicate event name, or a repeated `payload`/`docs` sub-key.
ROZ022 INVALID_AUTHORED_TYPEerroran author-written type string (an <emits> payload, a :param-types value, or an $expose signature) is not a single valid TypeScript type.
ROZ023 INVALID_EMIT_DOCS_SHAPEwarningan <emits> `docs:` is malformed (same shape as <props> docs: { description?, deprecated?, example? }); the bad docs/sub-key is dropped.
ROZ024 TYPES_SCRIPT_IMPORT_CONFLICTerrora <types> import binds a local name that a <script> import already binds to a DIFFERENT source or imported name; both land in one module scope on every target.
ROZ025 TYPES_NAME_COLLISIONerrora <types> name (declaration, import or export alias) collides with a name the compiled module already binds: a name the compiler generates on some target (`<Name>Props`, `<Name>Handle`, `Rozie<Name>EventMap`, the component name, Svelte's `Props`, Solid's `JSX`, a slot context interface such as `RowCtx`/`RowSlotCtx`/`RozieRowSlotCtx`); a name the emitters import — a `<components>` local name, the `<Local>Handle` React/Solid import for it, or any framework / `@rozie/runtime-*` import (`ReactNode`, `Fragment`, `Snippet`, `TemplateRef`, `Show`, `LitElement`, …), reserved on every target even when the import is conditional (an export alias binds no local, so only generated names apply to it); or a top-level <script> declaration that shares the module scope (an import vs any declaration; a type vs a class/interface/type/enum/import).

Script parse (Plan 03) — ROZ030..ROZ049 ​

CodeSeverityCause
ROZ030 SCRIPT_PARSE_ERRORerrorrecoverable <script> syntax error(s) Babel collected under errorRecovery (one diagnostic per lifted error).
ROZ031 SCRIPT_UNRECOVERABLEerrorthe <script> block failed to parse at all (Babel threw); caught and collected, not re-thrown.
ROZ032 SCRIPT_UNRECOGNIZED_LANGerror<script lang="..."> value unrecognized; only ts/typescript enable the TypeScript parser plugin

Template parse (Plan 03) — ROZ050..ROZ069 ​

CodeSeverityCause
ROZ050 TEMPLATE_UNCLOSED_ELEMENTerrora <template> element is left open (a mismatched close tag, or elements still on the stack at input end).
ROZ051 TEMPLATE_MALFORMED_MUSTACHEerroran unmatched {{ with no closing }} in the same text run.

Modifier grammar (Plan 04) — ROZ070..ROZ079 ​

CodeSeverityCause
ROZ070 MODIFIER_GRAMMAR_ERRORerrora malformed @event.modifier(args) chain the modifier grammar could not parse.

Style parse (Plan 03) — ROZ080..ROZ089 ​

CodeSeverityCause
ROZ080 STYLE_PARSE_ERRORerrorPostCSS threw parsing the <style> body, or an inline :style / style string literal.
ROZ081 STYLE_MIXED_ROOT_SELECTORerrora comma-separated selector list mixes :root with other selectors (like ':root, .foo {}'); split the unscoped :root rule from the scoped rules.
ROZ082 STYLE_PORTAL_INVALID_NESTINGerror@portal nested inside @media (or any non-@portal at-rule) — invalid per Spike 004 locked decision #2
ROZ083 STYLE_IMPORTANT_DROPPED_IN_STYLE_OBJECTwarningSpike 004 (string-form `:style` lowering, quick-task 260520-8iu): a string-literal `:style` carries `!important` AND the target's object-form lowering (React/Solid) silently drops it — per Spike 004 locked decision #7 this is a WARN.
ROZ084 STYLE_PORTAL_SELECTOR_PARSE_ERRORerror@portal block has empty/malformed prelude or unparseable inner content
ROZ085 STYLE_MISSING_SASSerrorPhase 10: `<style lang="scss">` was used but the optional `sass` (dart-sass) peer dependency is not installed.
ROZ086 STYLE_SCSS_COMPILE_ERRORerrordart-sass threw on invalid SCSS; the exception is collected (D-08) and parseStyle returns node null
ROZ087 STYLE_UNRECOGNIZED_LANGerrorPhase 10 (D-02): a `<style lang>` value that is neither `scss` nor `css` (nor absent).
ROZ088 STYLE_SCOPED_RULE_TARGETS_PORTAL_CONTENTwarningPhase 38 (D-01..D-05): a plain SCOPED <style> rule whose subject class/tag is used EXCLUSIVELY inside portal-slot fill content (a `<template #body>` / `#node` / `<slot portal>` fill, incl.

Phase 79 producer-side dynamic slot names (R7/R13) — ROZ090..ROZ095 ​

CodeSeverityCause
ROZ090 SLOT_NAME_STATIC_AND_BOUNDerrora <slot> carries both a static name= attribute and a bound :name — the two cannot both define the slot's name (R7a)
ROZ091 SLOT_NAME_PARAM_ON_DYNAMIC_SLOTerrora <slot> with a bound :name also declares a scope param whose key is 'name'; :name is reserved on <slot> as of Phase 79 and can no longer be a scope-param key (R7b)
ROZ092 SLOT_DYNAMIC_NAME_ON_PORTALerrora bound :name on a portal slot; portalKey() needs a compile-time string for the $portals.<key> closure key (R7c)
ROZ093 SLOT_FAMILY_PREFIX_DUPLICATEerrortwo producer <slot>s derive an identical namePrefix, so a consumer fill matching that prefix has no unique family to resolve to (R7d)
ROZ094 SLOT_DYNAMIC_NAME_NO_PREFIXwarninga bound :name yields no static leading prefix (bare identifier, call expression, or a template literal with an empty first quasi); legal, but consumer params degrade and no ROZ947 can fire (R7e)
ROZ095 SLOT_RECORD_PROP_NAME_RESERVEDerrora <props> key equals its target's slot-record property name (slots/snippets/templates/rozieSlots); the emitted component would declare the identifier twice (R13)
ROZ096 SLOT_DYNAMIC_NAME_PARSE_ERRORerrora <slot>'s bound :name value failed to parse as a JavaScript expression; never silently falls back to an `undefined` identifier (T-79-12)
ROZ097 PROP_DOCS_EXAMPLE_UNSUPPORTED_CONSTRUCTerrora prop's `docs.example` contains a construct `renderExampleMarkup` cannot render (a slot fill, mustache interpolation, a non-model r-* directive, a bare or modifier-chained model/event directive, or malformed markup); the classifier's reason string names the specific construct (Phase 81 Plan 03, R3/SPEC D-04)
ROZ098 ATTR_FALLTHROUGH_GATED_ROOTwarninginheritAttrs !== false and no element can receive the synthesized $attrs spread.
ROZ099 LISTENER_FALLTHROUGH_GATED_ROOTwarningD-17 twin of ROZ098: inheritListeners !== false and the same gated-root shape, independent of ROZ098 exactly as ROZ973 is independent of ROZ970

Semantic-binding errors (Phase 2 Plan 02) — ROZ100..ROZ199 ​

CodeSeverityCause
ROZ100 UNKNOWN_PROPS_REFerrorSEM-01: $props.foo where foo not declared
ROZ101 UNKNOWN_DATA_REFerrorSEM-01: $data.foo where foo not declared
ROZ102 UNKNOWN_REFS_REFerrorSEM-01: $refs.foo where no template ref="foo"
ROZ103 UNKNOWN_SLOTS_REFerrorSEM-01: $slots.foo where no <slot name="foo">
ROZ104 LIFECYCLE_OUTSIDE_SCRIPTerror$onMount/$onUnmount/$onUpdate called outside <script> block / Program top level
ROZ105 ASYNC_ONMOUNT_RETURNwarningD-19 edge case: $onMount(async () => …) Promise return cannot be cleanup
ROZ106 COMPUTED_MAGIC_ACCESSerror$props['foo'] — magic accessors require static keys
ROZ107 CONDITIONAL_CLEANUP_RETURNwarning$onMount(() => { return condition ? cleanA : cleanB }) — conditional cleanup shape
ROZ108 NON_FUNCTION_CLEANUP_RETURNwarning$onMount(() => { return nonFnValue }) — return value is not a function
ROZ109 WATCH_INVALID_ARGSwarning$watch requires (getterFn, callbackFn); skipping malformed call.
ROZ110 UNKNOWN_MODIFIERerror.escspe (typo) — name not registered in ModifierRegistry
ROZ111 MODIFIER_ARITY_MISMATCHerror.debounce() (missing required ms arg)
ROZ112 MODIFIER_ARG_SHAPEerror.outside('not-a-ref') — refExpr expected, got literal
ROZ113 UNKNOWN_MODEL_REFerror$model.bogus — 'bogus' is not a declared prop
ROZ114 UNSUPPORTED_LISTENER_TARGETerrorPhase 19 (D-04/D-06): a `<listener :target="...">` whose target is neither `window` nor `document` (nor omitted → `$el`).
ROZ115 EXPOSE_ARG_NOT_OBJECTerror$expose(x) — argument is not an object literal
ROZ116 EXPOSE_SPREAD_PROPERTYerror$expose({ ...o }) — a property is a spread
ROZ117 EXPOSE_COMPUTED_KEYerror$expose({ [k]: v }) — a property has a computed key
ROZ118 EXPOSE_VALUE_NOT_FUNCTIONerror$expose({ a: 1 }) / { a: notInScope } / { a: someComputed } — value is not an in-scope <script> function nor an inline arrow/function
ROZ119 EXPOSE_DUPLICATE_CALLerrortwo top-level $expose(...) calls — only one is allowed
ROZ120 EXPOSE_NOT_TOP_LEVELerror$expose(...) called inside a nested function (not <script> Program top level)
ROZ121 EXPOSE_EVENT_NAME_COLLISIONerror$expose({ open }) where 'open' is an emitted event, or (on class-based targets) a same-named declared prop — field/method name clash
ROZ122 EMIT_EMPTY_EVENT_NAMEerror$emit('') / $emit(' ') — empty/whitespace-only string-literal event name
ROZ123 REFS_READ_BEFORE_MOUNTerror$refs.x read in a $computed body / $watch getter / template binding|interpolation|r-if|r-show|r-for-iterable — evaluated before mount
ROZ124 EXPOSE_CVA_NAME_COLLISIONerror$expose({ writeValue }) (or registerOnChange/registerOnTouched/setDisabledState) on a single-model CVA-receiving Angular component — collides with the auto-emitted ControlValueAccessor method
ROZ125 CVA_MULTI_MODEL_NO_ACCESSORinfo≥2 model:true props — no single-control ControlValueAccessor auto-emitted on the Angular target
ROZ126 CVA_NO_DISABLED_PROPinfosingle-model CVA component with no `disabled` prop — setDisabledState is a no-op on the Angular target
ROZ127 SLOT_PROP_NAME_COLLISIONerror<slot name="X"> where X equals a declared <props> key; Svelte 5 collapses snippets+props into one namespace, so the names cannot coexist
ROZ128 STYLE_GLOBAL_PSEUDO_FORBIDDENerror:global(...) used in <style>; works only on Vue/Svelte, silently dead on React/Solid/Lit.
ROZ129 INVALID_PROVIDE_KEYerror$provide(key, …) key is not a string literal.
ROZ130 INVALID_INJECT_KEYerror$inject(key, …) key is not a string literal.
ROZ131 PROVIDE_NOT_STATEMENTerror$provide(...) used in expression position (must be a top-level statement).
ROZ132 INJECT_UNBOUNDerror$inject(...) not bound to a `const x = $inject(...)`.
ROZ133 PROVIDE_MISSING_VALUEerror$provide(key) called with no value (or a non-expression second argument); $provide(key, value) requires a value.
ROZ134 INJECT_MIXED_DECLARATIONerror$inject(...) shares a `const` declaration with other declarators; it must be the sole declarator (const x = $inject('k')).
ROZ135 STRUCTURED_CLONE_REACTIVEwarningstructuredClone($props/$data/$model.x) throws on Vue reactive()/Svelte $state proxies; use $clone(x).
ROZ136 CLONE_BAD_ARITYerror$clone(value) requires exactly one non-spread argument; the per-target lowering cannot interpret any other arity.
ROZ137 EXPOSE_RESERVED_MEMBERwarningan $expose verb shadows an inherited Object.prototype member (Angular+Lit) or HTMLElement/Element/Node member (Lit); suffix-rename it (e.g.
ROZ138 REACT_STALE_READwarningread of $data/$model/$props.x dominated by an earlier write to the same key in one function body; React setState is async so the read binds the pre-write value.
ROZ139 PARTIAL_INLINE_COLLISIONerroran inlined .rzts/.rzjs declaration name collides with a host binding or an already-inlined partial name; rename one.
ROZ140 PARTIAL_INLINE_CYCLEerrora .rzts/.rzjs script partial (transitively) imports itself; the cycle is broken and reported instead of overflowing the stack.
ROZ141 PARTIAL_UNSUPPORTED_IMPORT_FORMerrora .rzts/.rzjs partial imported via a default or namespace import; only named imports have an inlinable surface.
ROZ142 PUBLIC_CONTRACT_NAME_COLLISIONerrora public-contract identifier (prop/slot/emit/$expose verb/provide-inject key) collides with a per-target reserved name; it cannot be auto-renamed.
ROZ143 EVENT_HANDLER_NOT_EXPRESSIONerrora template @event handler's text failed to parse as a single expression (dominant cause: a statement-body handler, e.g.
ROZ145 EMIT_MULTIPLE_POSITIONAL_ARGSerrora `$emit` call with 2+ positional payload args.
ROZ146 MEMO_MISUSEerror`$memo(...)` was not a well-formed top-level `const X = $memo(fnArrow, keyFnArrow)` call (exactly two arrow-function args).
ROZ147 LIT_INHERITED_PROPERTY_PROP_NAMEwarning(suppressible) — a <props> key collides with an inherited HTMLElement/Element/Node PROPERTY name that becomes a Lit class field, shadowing the base-class property.
ROZ148 PROP_EMIT_CALLBACK_NAME_COLLISIONerrora <props> key equal to the on<Pascal> callback field React/Solid synthesize for a declared emit; both fields land on one props interface with different types (TS2300).
ROZ149 PORTAL_CALL_BEFORE_MOUNTerror$portals.<name> evaluated during setup/render (script Program top level, a $computed body, a $watch GETTER, or a template binding/directive/r-for-iterable/interpolation) — the portal anchor does not exist yet, so the call can only ever return an inert { update(){}, dispose(){} } handle.
ROZ150 SETUP_ONCE_PROP_READwarning(suppressible) — setup-once <script> code (no enclosing function) reads $props.<x>/$model.<x>; on Angular (and Lit, for a top-level declaration initializer) that runs before consumer-bound inputs arrive, so it sees the default.
ROZ151 EMIT_UNDECLAREDerror<emits> is present and a $emit('x') (in <script>, <template> or <listeners>) names an event it does not declare; <emits> is the complete list.
ROZ152 EMIT_DECLARED_UNUSEDwarning<emits> declares an event that no $emit call ever fires.
ROZ153 SLOT_PARAM_TYPES_UNKNOWN_KEYerrora <slot :param-types> key is not a param the slot passes (via :params or a scoped attribute).
ROZ154 SLOT_PARAM_TYPES_INVALIDerror<slot :param-types> must be an object literal whose values are string literals holding TypeScript types, e.g.
ROZ155 EXPOSE_SIGNATURE_UNKNOWN_VERBerroran $expose signature key (second argument) names a verb that the first argument does not expose.
ROZ156 EXPOSE_SIGNATURES_INVALIDerrorthe $expose second argument must be an object literal mapping exposed verbs to string-literal TypeScript function types, e.g.
ROZ157 EMIT_PAYLOAD_ARITYwarningwith <emits> present, a $emit call's argument count disagrees with the declaration: arguments passed to an event declared without a payload, no argument for an event that declares one, or more than one payload argument.
ROZ158 REMOVED_MEMBER_REFERENCEDerrorthe component itself uses a member it declares removed: $emit('x') of an <emits> tombstone, or a $props.x / $model.x read or write of a <props> tombstone.
ROZ159 REMOVED_MEMBER_INVALIDerrora removed-member tombstone is malformed: it must be exactly `{ removed: '<non-empty message>' }` — no payload/docs (<emits>) or type/default/model/required/docs (<props>) alongside `removed`, and the message must be a non-empty string literal.

Compile-time correctness errors (Phase 2 Plan 02) — ROZ200..ROZ299 ​

CodeSeverityCause
ROZ200 WRITE_TO_NON_MODEL_PROPerrorSEM-02: $props.foo = … where foo lacks model: true (Phase 2 success criterion 2)
ROZ201 WRITE_TO_REFerror$refs.foo = … (refs are read-only DOM-element wrappers)
ROZ202 RESERVED_IDENTIFIER_COLLISIONerror<data> field or r-for loop var named $el / $props / $data / $refs / $slots / $emit / $event / $attrs / $listeners / $restoreFocus / $model / $expose / $provide / $inject / $clone / $slotted / $snapshot / $classSelector.
ROZ203 UPDATE_EXPRESSION_VALUE_CONSUMEDerrorexpression-context ++/-- on reactive state isn't lowerable
ROZ204 WRITE_TO_MODEL_PROP_VIA_PROPSerror$props.<modelProp> = … ; use $model.<x>
ROZ205 MODEL_ACCESS_NON_MODEL_PROPerror$model.<nonModelProp>
ROZ206 LISTENER_ELEMENT_MISPLACEDerrorPhase 19 (D-08): a `<listener>` element placed inside `<template>` instead of the `<listeners>` block.
ROZ207 DATA_NESTED_MUTATION_NOT_REACTIVEerroran in-place mutation of nested `$data` (member/index write, or a mutating array/Map/Set method).
ROZ208 DATA_INIT_SIGIL_NOT_LOWEREDerrora `$refs`/`$slots` member access inside a `<data>` initializer.
ROZ209 EMIT_NAME_INVALID_IDENTIFIERerroran `$emit` event name that is not `/^[a-zA-Z][a-zA-Z0-9_-]*$/` (e.g.
ROZ210 RESERVED_SLOT_NAMEerror<slot name="default"> collides with the unnamed-slot sentinel key the emitters use; rename the slot or drop the name attribute

Warnings (Phase 2 Plan 02) — ROZ300..ROZ399 ​

CodeSeverityCause
ROZ300 RFOR_MISSING_KEYwarningSEM-03: r-for without :key
ROZ301 RFOR_KEY_IS_LOOP_VARIABLEwarningSEM-03: :key="index" / :key="item" (loop var)
ROZ302 RFOR_KEY_IS_NON_PRIMITIVEwarning:key="someObj" (Pitfall 6 secondary case)
ROZ303 RIF_ACCESSIBILITY_PLACEHOLDERreservednot emitted in Phase 2 (deferred per A7)
ROZ304 TEMPLATE_FOR_EMPTY_BODYwarning`<template r-for>` with no children (empty loop body; produces no output, and broke React/Solid emit before the guard)

@rozie/unplugin configuration errors (Phase 3 D-52) — ROZ400..ROZ419 ​

CodeSeverityCause
ROZ400 UNPLUGIN_TARGET_REQUIREDerrorD-49: target option missing
ROZ401 UNPLUGIN_TARGET_UNKNOWNerrortarget value not in 'vue'|'react'|'svelte'|'angular'
ROZ402 UNPLUGIN_TARGET_NOT_YET_SUPPORTEDerrorPhase 3 only ships 'vue'; react/svelte/angular ROZ402 until later phases
ROZ403 UNPLUGIN_PEER_DEP_MISSINGreservednever emitted; allocated for: @rozie/runtime-vue or @vitejs/plugin-vue not resolvable (Pitfall 8)
ROZ404 UNPLUGIN_PLUGIN_CHAIN_MISORDERreservednever emitted; allocated for: detected vite-plugin-vue lacking; D-25 chain broken
ROZ405 UNPLUGIN_ANGULAR_OPTIONS_INVALIDerrorPhase 23 — malformed `angular` config shape (e.g.

@rozie/target-vue lowering errors (Phase 3 D-52) — ROZ420..ROZ449 ​

CodeSeverityCause
ROZ420 TARGET_VUE_RESERVEDerrorinternal-invariant placeholder; the Vue emitter reports this only on internal-invariant violation
ROZ421 TARGET_VUE_RHTML_WITH_CHILDRENerrorr-html via v-html cannot coexist with children; mirrors ROZ620/721

@rozie/unplugin Solid-branch + @rozie/target-solid errors (Phase 06.3 — D-140 amended) — ROZ810..ROZ812 ​

CodeSeverityCause
ROZ810 UNPLUGIN_SOLID_PEER_DEP_MISSINGerrorvite-plugin-solid not resolvable from cwd (D-139)
ROZ811 UNPLUGIN_SOLID_DEP_MISSINGerrorsolid-js (^1.8) not resolvable from cwd (D-139)

@rozie/runtime-solid warnings (Phase 06.3) — ROZ812 ​

CodeSeverityCause
ROZ812 RUNTIME_SOLID_CONTROLLABLE_MODE_FLIPwarningD-135 — createControllableSignal detected parent flipping controlled/uncontrolled mid-lifecycle

@rozie/target-solid lowering errors (Phase 07.1) — ROZ813..ROZ819 ​

CodeSeverityCause
ROZ813 TARGET_SOLID_RESERVEDerrorinternal-invariant placeholder; the Solid emitter raises this when a modifier has no solid() hook (a few reuse sites — r-html-with-children, the $el-listener fallback — emit at warning severity)

@rozie/unplugin React-branch configuration errors (Phase 4 D-63) — ROZ500..ROZ519 ​

CodeSeverityCause
ROZ500 UNPLUGIN_REACT_PEER_DEP_MISSINGerrorD-59: neither @vitejs/plugin-react nor @vitejs/plugin-react-swc installed (Pitfall 9)
ROZ501 UNPLUGIN_REACT_DEP_MISSINGerrorreact peer dep not resolvable
ROZ502 UNPLUGIN_REACT_PLUGIN_CHAIN_MISORDERerrordetected plugin-react/swc lacking; D-58 chain broken (no enforce: 'pre' on @rozie/unplugin)

@rozie/target-react lowering errors (Phase 4 D-63) — ROZ520..ROZ549 ​

CodeSeverityCause
ROZ520 TARGET_REACT_RHTML_WITH_CHILDRENwarningr-html with children — React's dangerouslySetInnerHTML can't coexist with children, children dropped (Pitfall 10); NOTE: also reused by React emit-path internal-invariant/modifier failures at error severity
ROZ521 TARGET_REACT_NESTED_STATE_MUTATIONwarningPitfall 7 — $data.foo.bar = 'x' nested member writes; v1 warns + leaves AST unchanged
ROZ522 TARGET_REACT_MODULE_LET_AUTO_HOISTEDinfoPitfall 3/8 — module-scoped `let X` referenced from LifecycleHook setup auto-hoisted to useRef
ROZ523 TARGET_REACT_MODULE_LET_UNHOISTABLEerrorPitfall 3/8 — module-scoped `let X` referenced too indirectly to safely auto-hoist; user must refactor
ROZ524 TARGET_REACT_SETTER_NAME_COLLISIONerrorPhase 07.7 — user-defined function `set<X>` collides with auto-generated useState/useControllableState setter `setX` for state/model prop X; emits "already declared" + infinite recursion when `$data.X = v` rewrites to `setX(v)` inside the same-named user wrapper

@rozie/runtime-react warnings (Phase 4 D-63) — ROZ550..ROZ579 ​

CodeSeverityCause
ROZ550 RUNTIME_REACT_CONTROLLABLE_MODE_FLIPwarningD-57 — useControllableState detected parent flipping controlled/uncontrolled mid-lifecycle

@rozie/unplugin Svelte-branch + @rozie/target-svelte errors (Phase 5) — ROZ600..ROZ649 ​

CodeSeverityCause
ROZ600 UNPLUGIN_SVELTE_PEER_DEP_MISSINGerror@sveltejs/vite-plugin-svelte not resolvable from cwd
ROZ601 UNPLUGIN_SVELTE_DEP_MISSINGerrorsvelte itself (^5) not resolvable from cwd
ROZ602 UNPLUGIN_SVELTE_PLUGIN_CHAIN_MISORDERreservedenforce:'pre' guarantees this; placeholder for future
ROZ620 TARGET_SVELTE_RHTML_WITH_CHILDRENerrorr-html with children; mirrors Vue/React Pitfall 10
ROZ621 TARGET_SVELTE_RESERVEDerrorinternal-invariant placeholder; mirrors TARGET_VUE_RESERVED (one reuse site — the $el-listener fallback — emits at warning severity)

@rozie/unplugin Angular-branch + @rozie/target-angular errors (Phase 5 D-72) — ROZ700..ROZ749 ​

CodeSeverityCause
ROZ700 UNPLUGIN_ANGULAR_PEER_DEP_MISSINGerror@analogjs/vite-plugin-angular not resolvable from cwd (D-72)
ROZ701 UNPLUGIN_ANGULAR_DEP_MISSINGerror@angular/core (^17) not resolvable
ROZ702 UNPLUGIN_ANGULAR_VITE_VERSION_TOO_LOWerroranalogjs requires Vite ^6 (RESEARCH OQ6)
ROZ703 UNPLUGIN_ANGULAR_PLUGIN_CHAIN_MISORDERreservednever emitted; enforce:'pre' guarantees this
ROZ720 TARGET_ANGULAR_RFOR_MISSING_KEYerrorAngular @for REQUIRES track expression (Pitfall 3); upgrades the ROZ300 r-for-missing-:key warning to an error on the Angular target
ROZ721 TARGET_ANGULAR_RHTML_WITH_CHILDRENerrorr-html via [innerHTML] cannot coexist with children
ROZ722 TARGET_ANGULAR_RESERVEDerrorinternal-invariant placeholder (one reuse site — the $el-listener fallback — emits at warning severity)
ROZ723 TARGET_ANGULAR_LOOP_GUARD_HOISTerroran early-return event modifier (.self / key-filter) inside an r-for loop references the loop variable — Angular hoists the guard to a class-field arrow that cannot capture loop-scoped bindings
ROZ724 TARGET_ANGULAR_DUPLICATE_STATIC_SLOT_KEYerrortwo static-literal slot fills on one producer tag resolve to the same key (Phase 80 D-08; Angular-emitter-local, not a core IR validation — the object/snippet fill shape used by React/Solid/Svelte/Vue/Lit makes this construct legal and unimplicated on those targets)

@rozie/runtime-angular warnings (Phase 80, opening the band reserved by Phase 5) — ROZ750..ROZ799 ​

CodeSeverityCause
ROZ750 RUNTIME_ANGULAR_DUPLICATE_SLOT_KEY_WARNINGwarningngDevMode-guarded dev-mode runtime duplicate keyed-fill collision; last fill (in content-query/document order) wins (Phase 80 D-08)

Phase 6 (ROZ800..ROZ899) — D-96 sub-ranges ​

CodeSeverityCause
ROZ800 COMPILE_INVALID_TARGETerrorunknown target token in opts.target
ROZ801 COMPILE_INVALID_OPT_COMBOreserveddisallowed opts combination

@rozie/babel-plugin (Plan 06-04) — ROZ820..ROZ829 ​

CodeSeverityCause
ROZ820 BABEL_PLUGIN_INVALID_TARGETerrormissing or invalid `target` option (vue|react|svelte|angular required)
ROZ821 BABEL_PLUGIN_NO_FILENAMEerrorcannot resolve relative .rozie path without state.filename / file.opts.filename
ROZ822 BABEL_PLUGIN_COMPILE_ERRORerrorcompile() returned severity:'error' diagnostics during sibling write
ROZ823 BABEL_PLUGIN_SIBLING_WRITE_FAILerrorfs writeFileSync failed when emitting sibling .{ext}/.d.ts/.module.css/.global.css

@rozie/unplugin Lit-branch + @rozie/target-lit + @rozie/runtime-lit (Phase 06.4 — D-LIT-19 Option A) — ROZ830..ROZ849 ​

CodeSeverityCause
ROZ830 UNPLUGIN_LIT_PEER_DEP_MISSINGerrorlit (^3.2) not resolvable from cwd
ROZ831 UNPLUGIN_LIT_SIGNALS_PEER_DEP_MISSINGerror@lit-labs/preact-signals (^1) not resolvable from cwd

@rozie/target-lit lowering errors (Phase 07.1) — ROZ832..ROZ839 ​

CodeSeverityCause
ROZ832 TARGET_LIT_RESERVEDerrorinternal-invariant placeholder; the Lit emitter raises this when a modifier has no lit() hook (one reuse site emits at warning severity)
ROZ833 TARGET_LIT_RHTML_WITH_CHILDRENerrorr-html via unsafeHTML cannot coexist with children; mirrors ROZ620/721
ROZ840 RUNTIME_LIT_CONTROLLABLE_MODE_FLIPwarningcreateLitControllableProperty parent-flip warning (D-LIT-10)

@rozie/cli argv parsing + filesystem errors (Plan 06-03) — ROZ850..ROZ879 ​

CodeSeverityCause
ROZ850 CLI_INVALID_TARGETerrorunknown --target token (commander InvalidArgumentError)
ROZ851 CLI_MISSING_INPUTerrorno .rozie files matched after expandInputs
ROZ852 CLI_OUT_REQUIREDerror--out required for multiple inputs or multiple targets
ROZ853 CLI_NULL_BYTE_INPUTerrornull-byte injection in input arg (carries forward unplugin/transform.ts:235-237)
ROZ854 CLI_NON_ROZIE_INPUTerrorfile input that doesn't end with .rozie
ROZ855 CLI_REACT_REQUIRES_OUT_DIRerrortarget=react with no --out — sidecars (.d.ts/.module.css/.global.css) cannot stream to stdout

Phase 06.1 source-map composition (D-111) — ROZ900..ROZ919 ​

CodeSeverityCause
ROZ900 SOURCEMAP_COMPOSE_FAILEDreservednever emitted; allocated for: composeMaps() threw or returned null
ROZ901 SOURCEMAP_CHILD_MAP_MALFORMEDreservednever emitted; allocated for: child map missing required Source Map v3 fields
ROZ902 SOURCEMAP_OFFSET_OUT_OF_RANGEreservednever emitted; allocated for: ChildMap.outputOffset exceeds shellMs output length
ROZ903 SOURCEMAP_REMAPPING_THREWreservednever emitted; allocated for: @ampproject/remapping internal error
ROZ910 SOURCEMAP_AST_NODE_MISSING_LOCreservednever emitted; allocated for: synthesized AST node lacks loc; falls back to nearest segment (D-104/D-106)
ROZ911 SOURCEMAP_PARSER_OFFSET_INVALIDreservednever emitted; allocated for: @babel/parser startLine/startColumn validation failed

Phase 06.2 component composition (D-123 sub-allocation) — ROZ920..ROZ939 ​

CodeSeverityCause
ROZ920 UNKNOWN_COMPONENTerrorPascalCase tag matches neither outer name nor <components> entry
ROZ921 NON_ROZIE_IMPORT_PATHerror<components> entry value is not a `.rozie` string literal
ROZ922 LOWERCASE_LIKELY_TYPOwarning<counter> when Counter is declared
ROZ923 DUPLICATE_COMPONENT_IMPORT_PATHwarningtwo <components> entries point at the same .rozie path
ROZ924 UNUSED_COMPONENT_ENTRYwarningdeclared <components> entry never used in template
ROZ925 ESCAPE_HATCH_REACT_SUSPENSEerror<Suspense> — use React directly
ROZ926 ESCAPE_HATCH_VUE_TELEPORTerror<Teleport> — use Vue directly
ROZ927 ESCAPE_HATCH_NG_CONTAINERerror<ng-container> — use Angular directly
ROZ928 ESCAPE_HATCH_SVELTE_FRAGMENTerror<svelte:fragment> — use Svelte directly

Phase 07.2 consumer-side slot fills (D-08 sub-allocation) — ROZ940..ROZ959 ​

CodeSeverityCause
ROZ940 DUPLICATE_DEFAULT_FILLerrorlocked in SPEC.md R3; loose children + explicit <template #default>
ROZ941 UNKNOWN_SLOT_NAMEwarningconsumer fills a slot the producer doesn't declare (typo catch)
ROZ942 DUPLICATE_NAMED_FILLerrortwo sibling <template #header> directives
ROZ943 REPROJECTION_UNDECLARED_WRAPPER_SLOTerrorwrapper forwards a slot it doesn't itself declare
ROZ944 REPROJECTION_UNDECLARED_INNER_SLOTwarningwrapper forwards into a slot the inner producer doesn't declare
ROZ945 CROSS_PACKAGE_LOOKUP_FAILEDerrornpm/relative resolution of a <components> importPath returns null
ROZ946 DYNAMIC_NAME_EXPRESSION_INVALIDerror`<template #[expr]>` bracketed text fails to parse as a JS expression
ROZ947 SCOPED_PARAM_MISMATCHerrorD-09 — consumer destructures a param the producer SlotDecl.params doesn't declare
ROZ948 SCOPED_PARAMS_ALL_DROPPEDwarningscoped-params destructure had properties but none resolved to simple bindings (e.g.

Phase 07.3 consumer-side two-way binding — ROZ949..ROZ951 ​

CodeSeverityCause
ROZ949 TWO_WAY_PROP_NOT_MODELerrorr-model:prop= where producer prop lacks model:true (dual-frame: consumer site + producer decl)
ROZ950 TWO_WAY_ARG_OR_TARGET_INVALIDerrorr-model: with empty arg (`r-model:=`), OR applied to non-component HTML tag (`<div r-model:foo=`)
ROZ951 TWO_WAY_LHS_NOT_WRITABLEerrorRHS not a writable lvalue per 07.3-CONTEXT D-03 permissive rule (literal/ternary/call/$computed)
ROZ952 TWO_WAY_DIRECTIVE_TYPOerrorcolon-form directive `r-<base>:<arg>` whose `<base>` is a Levenshtein near-miss of `model` (e.g.

Phase 11 r-match construct — ROZ953..ROZ959 ​

CodeSeverityCause
ROZ953 MATCH_EMPTY_DISCRIMINANTerrorr-match host with no value (`<template r-match>` / `<template r-match="">`)
ROZ954 MATCH_STRAY_CHILDerrorr-match host child that is neither r-case nor r-default
ROZ955 MATCH_CASE_NO_VALUEerrorvalueless r-case (hint: did you mean r-default?)
ROZ956 MATCH_CASE_WITH_FORerrorr-case + r-for on the same element
ROZ957 MATCH_DEFAULT_NOT_LASTerrorr-default is not the last branch of the match
ROZ958 MATCH_MULTIPLE_DEFAULTerrormore than one r-default in a single r-match
ROZ959 MATCH_DUPLICATE_CASEwarningduplicate literal r-case value (first occurrence wins, like `switch`)

Phase 12 r-model modifiers — ROZ960..ROZ964 ​

CodeSeverityCause
ROZ960 RMODEL_UNKNOWN_MODIFIERerrorunknown r-model modifier (did-you-mean among model modifiers)
ROZ961 RMODEL_EVENT_MODIFIER_MISUSEDerrora valid event modifier used on r-model
ROZ962 DIRECTIVE_TAKES_NO_MODIFIERSerrormodifier on r-if/r-for/r-show/r-html/r-text
ROZ963 RMODEL_BUILTIN_ON_TWO_WAYerrorbuilt-in r-model modifier on consumer-side r-model:propName
ROZ964 RMODEL_MODIFIER_NOT_APPLICABLEwarningvalue-transform modifier on a checkbox/radio r-model

Phase 13 $classSelector — ROZ965..ROZ967 ​

CodeSeverityCause
ROZ965 CLASS_SELECTOR_ARG_NOT_LITERALerrorR3: $classSelector argument is not a string literal
ROZ966 CLASS_SELECTOR_UNKNOWN_CLASSerrorR4: class not declared in the component's <style> scope; did-you-mean hint
ROZ967 CLASS_SELECTOR_INVALID_TOKENerrorR5: multi-token / dotted / combinator / `#` argument (fails the bare-class-token regex)
ROZ968 CLASS_SELECTOR_REACT_NO_SOURCEretired(Phase 25) — formerly fired when $classSelector was used in a React emit without opts.source.

Phase 14 attribute fallthrough — ROZ969..ROZ971 ​

CodeSeverityCause
ROZ969 R_BIND_COLON_FORMerrorR1: `r-bind:foo="x"` colon form is not supported (use the `:foo` shorthand or the bare-spread `r-bind="obj"`)
ROZ970 ATTR_FALLTHROUGH_MULTI_ROOTerrorR8: a multi-root template with auto-fallthrough enabled has no single root to receive inherited attributes
ROZ971 ATTR_DOUBLE_APPLYwarningR9: `$attrs` referenced (e.g.

Phase 15 listener fallthrough — ROZ972..ROZ974 ​

CodeSeverityCause
ROZ972 R_ON_COLON_FORMerrorR1: `r-on:click="x"` colon form is not supported (use the single-event `@click` syntax or the bare object-spread `r-on="{ click: fn }"`)
ROZ973 LISTENER_FALLTHROUGH_MULTI_ROOTerrorR8: a multi-root template with auto-listener-fallthrough enabled has no single root to receive inherited listeners (INDEPENDENT of ROZ970)
ROZ974 LISTENER_DOUBLE_APPLYwarningR9: `$listeners` referenced (e.g.

Phase 16 $restoreFocus — ROZ975..ROZ976 ​

CodeSeverityCause
ROZ975 RESTORE_FOCUS_NON_LITERAL_SELECTORerrorSPEC R9: $restoreFocus first arg is not a string literal
ROZ976 RESTORE_FOCUS_BAD_ARITYerrorSPEC R9: $restoreFocus called with wrong number of arguments

compile() empty-code guard — ROZ977 ​

CodeSeverityCause
ROZ977 COMPILE_EMPTY_CODE_NO_DIAGNOSTICSerrorinternal: compile() emit produced empty code with no error diagnostics (parser/lowerer/emitter internal failure)

Phase 26 bare-sigil rejection — ROZ978 ​

CodeSeverityCause
ROZ978 BARE_OBJECT_SIGILerrorbare $props/$data/$refs/$slots used as a whole-object value (not a member access).

Phase 37 $portals.default — ROZ979 ​

CodeSeverityCause
ROZ979 DEFAULT_PORTAL_NAME_RESERVEDerrora default portal slot (`<slot portal />`) and a slot `name="default"` both key `$portals.default`; "default" is the reserved default-portal key.
ROZ981 RUNTIME_ONLY_NAME_COLLISIONerrora runtime-only public-contract collision with no typecheck net (Svelte slot-param shadows an r-for loop var, or two emits normalize to one callback prop).

Phase 71 r-keynav — ROZ982..ROZ987 ​

CodeSeverityCause
ROZ982 KEYNAV_UNKNOWN_MODIFIERerrorunknown r-keynav modifier (did-you-mean among .vertical/.horizontal/.both/.loop/.typeahead/.skipdisabled/.grid)
ROZ983 KEYNAV_NO_ITEMSerrorr-keynav root has no associated r-keynav-item in the component
ROZ984 KEYNAV_ORPHAN_ITEMerrorr-keynav-item with no enclosing r-keynav root (ancestor-containment wording, reworded Phase 77 — see ROZ996)
ROZ985 KEYNAV_BAD_FOCUS_MODELerrormissing/unrecognized r-keynav focus-model argument (valid: tabindex, activedescendant)
ROZ986 KEYNAV_MULTIPLE_ROOTSretiredwas: more than one r-keynav root in one component (v1 = one group per component); superseded by containment-scoped multi-group + ROZ996 (Phase 77)
ROZ987 KEYNAV_SOURCE_UNRESOLVEDerrorr-keynav :source neither provided nor synthesizable from a co-located r-for

Phase 75 published-primitive manifest — ROZ988..ROZ989 ​

CodeSeverityCause
ROZ988 MANIFEST_SCHEMA_VERSION_MISMATCHerrorinstalled primitive manifest schemaVersion is not in the compiler's supported manifest schema versions 1–2 (SUPPORTED_MANIFEST_SCHEMA_VERSIONS; D-04).
ROZ989 MALFORMED_MANIFESTerrormanifest JSON is not an object, or is missing/mistyped a required field (props/slots/emits/expose/schemaVersion)

command-palette-portal-overlay phase — r-portal element directive — ROZ990..ROZ992 ​

CodeSeverityCause
ROZ990 PORTAL_DIRECTIVE_ON_SLOTerror`r-portal="expr"` used on a <slot> element; redirect to the boolean `portal` attribute (slot-content portalling is a distinct, orthogonal primitive)
ROZ991 PORTAL_DIRECTIVE_ON_COMPONENTerror`r-portal` used on a <components>-registered child component element; v1 only supports plain/host elements
ROZ992 PORTAL_DIRECTIVE_EMPTY_VALUEerror`r-portal` with an empty/missing value; a portal needs a container expression

Phase 77 r-keynav grid focus-model + multi-group — ROZ993..ROZ996 ​

CodeSeverityCause
ROZ993 KEYNAV_GRID_ORIENTATION_CONFLICTerror`.grid()` combined with `.vertical`/`.horizontal`/`.both` (grid owns both axes)
ROZ994 KEYNAV_GRID_LOOP_CONFLICTerror`.grid()` combined with `.loop` (boundary/@keynav-page events replace wrapping)
ROZ995 KEYNAV_GRID_BAD_COLUMNSerror`.grid` missing its argument, or the argument fails to parse as an expression (non-number literal, ref handle, or unparsable $-path)
ROZ996 KEYNAV_NESTED_ROOTSerroran r-keynav root found inside another r-keynav root's subtree; roots must be siblings/cousins, never ancestors of one another

quick 260812-i67 cross-target event-name contract — ROZ997..ROZ998 ​

CodeSeverityCause
ROZ997 EMIT_NAME_CANONICAL_COLLISIONerrora component declares two $emit names that collapse to the same canonical key by kebab/camel/snake equivalence (e.g.
ROZ998 UNMATCHED_COMPONENT_LISTENERwarninga component-tag listener names an event the RESOLVED callee does not declare (neither exact nor canonical) and that is not a native DOM event or a Rozie-synthetic runtime event; the hint carries a did-you-mean suggestion plus the callee's declared emit list.

Pre-1.0 — APIs may change between minor versions.