---
title: Diagnostic reference
url: https://citry.dev/ide/diagnostics/
description: "Stable Citry diagnostic codes, messages, severities, and the tools that report them."
---
# Diagnostic reference

Citry-owned diagnostics use stable codes across the parser, `citry check`, the
language server, and editor formatting. The code identifies the condition even
when a message includes source-specific detail.

The entries below are rendered directly from the versioned
[`diagnostics/v1` catalog](https://github.com/citry-dev/citry/tree/main/packages/protocol/diagnostics/v1).
Changing a code, message template, or documentation link requires changing that
catalog and regenerating its language bindings.

The editor may display a source label such as `citry` next to the code. The
source identifies the reporting tool; the code identifies the condition.
Each entry's **Reported by** line names the commands, APIs, or editor feature
that can produce it.

<div class="diagnostic-catalog">
<section class="diagnostic-reference" aria-labelledby="citry.parse.syntax"><h2 id="citry.parse.syntax" class="toc-heading"><code>citry.parse.syntax</code></h2><p><strong>Invalid template syntax.</strong> The Citry parser could not parse the template at the reported source range.</p><p><strong>When this appears:</strong> Citry encounters malformed template markup, an incomplete expression, or another template grammar error.</p><p><strong>Default severity:</strong> <code>error</code>.</p><div class="diagnostic-example"><p><strong>Example: Unclosed element</strong></p><div class="highlight"><pre><code class="language-citry-html">&lt;section&gt;
  &lt;p&gt;Hello&lt;/p&gt;</code></pre></div></div><p><strong>Reported by:</strong> template parser APIs, <code>citry format</code>, <code>citry check</code>, <code>citry-lsp</code>.</p></section>
<section class="diagnostic-reference" aria-labelledby="citry.parse.value"><h2 id="citry.parse.value" class="toc-heading"><code>citry.parse.value</code></h2><p><strong>Invalid template value.</strong> The parser received a template value that cannot be represented by Citry&#39;s template model.</p><p><strong>When this appears:</strong> A parser API receives a value that it cannot convert into Citry template source or a supported template value.</p><p><strong>Default severity:</strong> <code>error</code>.</p><p><strong>Reported by:</strong> template parser APIs, <code>citry format</code>, <code>citry check</code>, <code>citry-lsp</code>.</p></section>
<section class="diagnostic-reference" aria-labelledby="citry.parse.configuration"><h2 id="citry.parse.configuration" class="toc-heading"><code>citry.parse.configuration</code></h2><p><strong>Template parser configuration failed.</strong> Project-specific parser configuration could not be constructed or applied.</p><p><strong>When this appears:</strong> Citry cannot build the parser rules required by the selected application or component registry.</p><p><strong>Default severity:</strong> <code>error</code>.</p><p><strong>Reported by:</strong> <code>citry check</code>, <code>citry-lsp</code>.</p></section>
<section class="diagnostic-reference" aria-labelledby="citry.template.unknown-variable"><h2 id="citry.template.unknown-variable" class="toc-heading"><code>citry.template.unknown-variable</code></h2><p><strong>Unknown template variable.</strong> A parser-proven root variable is not declared by every component that consumes the template.</p><p><strong>When this appears:</strong> A name used in an interpolation or Python-valued template attribute is absent from the proven template data, configured globals, and lint-only variables.</p><p><strong>Default severity:</strong> <code>error</code>. The application can configure this severity.</p><p><strong>Messages:</strong></p><ul class="diagnostic-messages"><li class="diagnostic-message"><p><strong>Closed template data:</strong></p><div class="highlight"><pre><code>Template variable &#39;{name}&#39; is not available in this template.</code></pre></div></li><li class="diagnostic-message"><p><strong>Template data allows extra names:</strong></p><div class="highlight"><pre><code>Template variable &#39;{name}&#39; is not declared. It may be supplied dynamically.</code></pre></div></li><li class="diagnostic-message"><p><strong>Template data could not be inspected:</strong></p><div class="highlight"><pre><code>Template variable &#39;{name}&#39; is not declared. Citry could not determine whether it is supplied dynamically.</code></pre></div></li></ul><div class="diagnostic-example"><p><strong>Example: Unknown name in an interpolation</strong></p><div class="highlight"><pre><code class="language-citry-html">&lt;p&gt;{{ missing_name }}&lt;/p&gt;</code></pre></div></div><div class="diagnostic-example"><p><strong>Example: Unknown name in a dynamic attribute</strong></p><div class="highlight"><pre><code class="language-citry-html">&lt;div c-title=&#34;missing_name&#34;&gt;&lt;/div&gt;</code></pre></div></div><p><strong>Reported by:</strong> <code>citry check</code>, <code>citry-lsp</code>.</p></section>
<section class="diagnostic-reference" aria-labelledby="citry.template.unknown-component"><h2 id="citry.template.unknown-component" class="toc-heading"><code>citry.template.unknown-component</code></h2><p><strong>Unknown component.</strong> A component tag is not registered in the selected Citry registry.</p><p><strong>When this appears:</strong> A template uses a component tag whose name is absent from the selected application or library registry.</p><p><strong>Default severity:</strong> <code>error</code>.</p><p><strong>Message:</strong></p><div class="highlight"><pre><code>Component &lt;{tag}&gt; is not registered.</code></pre></div><div class="diagnostic-example"><p><strong>Example: Unregistered component tag</strong></p><div class="highlight"><pre><code class="language-citry-html">&lt;c-missing-card /&gt;</code></pre></div></div><p><strong>Reported by:</strong> <code>citry check</code>, <code>citry-lsp</code>.</p></section>
<section class="diagnostic-reference" aria-labelledby="citry.js-data.unsupported-type"><h2 id="citry.js-data.unsupported-type" class="toc-heading"><code>citry.js-data.unsupported-type</code></h2><p><strong>JsData field is not a JSON type.</strong> A declared or inferred JsData value cannot be represented safely by Citry&#39;s JSON wire format.</p><p><strong>When this appears:</strong> A JsData field has a type that strict JSON serialization cannot carry, such as bytes, a set, a callable, or a date/time object without an explicit conversion.</p><p><strong>Default severity:</strong> <code>warning</code>.</p><p><strong>Message:</strong></p><div class="highlight"><pre><code>JsData field &#39;{name}&#39; is not a clean JSON value: {detail}. Browser tooling will treat its type as unknown.</code></pre></div><div class="diagnostic-example"><p><strong>Example: Unsupported set value</strong></p><div class="highlight"><pre><code class="language-citry">class Card(Component):
    class JsData:
        selected_ids: set[int]</code></pre></div></div><p><strong>Reported by:</strong> <code>citry check</code>, <code>citry-lsp</code>.</p></section>
<section class="diagnostic-reference" aria-labelledby="citry.alpine.unknown-variable"><h2 id="citry.alpine.unknown-variable" class="toc-heading"><code>citry.alpine.unknown-variable</code></h2><p><strong>Unknown Alpine variable.</strong> A free identifier in an Alpine expression is absent from the component&#39;s proven browser scope.</p><p><strong>When this appears:</strong> An Alpine expression references a root that is not supplied by JsData, x-data, an enclosing x-for, a proven $component scope write, an Alpine or Citry magic, a browser global, or configured lint-only Alpine variables.</p><p><strong>Default severity:</strong> <code>error</code>. The application can configure this severity.</p><p><strong>Message:</strong></p><div class="highlight"><pre><code>Alpine variable &#39;{name}&#39; is not available in this component.</code></pre></div><div class="diagnostic-example"><p><strong>Example: Unknown name in an Alpine expression</strong></p><div class="highlight"><pre><code class="language-citry-html">&lt;button :disabled=&#34;submitting1&#34;&gt;Save&lt;/button&gt;</code></pre></div></div><p><strong>Reported by:</strong> <code>citry check</code>, <code>citry-lsp</code>.</p></section>
<section class="diagnostic-reference" aria-labelledby="citry.csp.incompatible-browser-code"><h2 id="citry.csp.incompatible-browser-code" class="toc-heading"><code>citry.csp.incompatible-browser-code</code></h2><p><strong>Browser code is incompatible with strict CSP.</strong> An Alpine or Citry browser expression uses a host or source form unsupported by the pinned Alpine CSP evaluator.</p><p><strong>When this appears:</strong> The selected Citry application configures CSP warning or strict mode and a source-classifiable browser expression is incompatible with Alpine CSP 3.17.1.</p><p><strong>Default severity:</strong> <code>error</code>. The application can configure this severity.</p><p><strong>Message:</strong></p><div class="highlight"><pre><code>Alpine CSP 3.17.1 cannot evaluate {detail} here. Move complex logic to Component.js and call a scope method from the template.</code></pre></div><div class="diagnostic-example"><p><strong>Example: Move an arrow function into Component.js</strong></p><div class="highlight"><pre><code class="language-citry-html">&lt;button @click=&#34;items.map(item =&gt; item.id)&#34;&gt;Save&lt;/button&gt;</code></pre></div></div><p><strong>Reported by:</strong> <code>citry check</code>, <code>citry-lsp</code>.</p></section>
<section class="diagnostic-reference" aria-labelledby="citry.component-js.unknown-variable"><h2 id="citry.component-js.unknown-variable" class="toc-heading"><code>citry.component-js.unknown-variable</code></h2><p><strong>Unknown component JavaScript variable.</strong> A free identifier inside a $component initializer is absent from its lexical scope and configured globals.</p><p><strong>When this appears:</strong> A $component initializer references a name that was not declared locally, destructured from the callback context, supplied by the JavaScript or browser environment, or configured as a lint-only component JavaScript global.</p><p><strong>Default severity:</strong> <code>error</code>. The application can configure this severity.</p><p><strong>Message:</strong></p><div class="highlight"><pre><code>Component JavaScript variable &#39;{name}&#39; is not defined.</code></pre></div><div class="diagnostic-example"><p><strong>Example: Missing callback destructuring</strong></p><div class="highlight"><pre><code class="language-javascript">$component(({ data }) =&gt; {
  scope.ready = data.ready;
});</code></pre></div></div><p><strong>Reported by:</strong> <code>citry check</code>, <code>citry-lsp</code>.</p></section>
<section class="diagnostic-reference" aria-labelledby="citry.component-js.unknown-data-member"><h2 id="citry.component-js.unknown-data-member" class="toc-heading"><code>citry.component-js.unknown-data-member</code></h2><p><strong>Unknown component JavaScript data member.</strong> A callback accesses a data field that is absent from the component&#39;s known JavaScript data schema.</p><p><strong>When this appears:</strong> A static member access on the $component callback&#39;s data binding names a field absent from a closed JsData schema or a complete inferred js_data() return shape. Dynamic keys and unknown or open schemas are not checked.</p><p><strong>Default severity:</strong> <code>error</code>.</p><p><strong>Message:</strong></p><div class="highlight"><pre><code>JavaScript data field &#39;{name}&#39; is not available in this component.</code></pre></div><div class="diagnostic-example"><p><strong>Example: Unknown field in callback data</strong></p><div class="highlight"><pre><code class="language-javascript">$component(({ data }) =&gt; {
  console.log(data.missing_field);
});</code></pre></div></div><p><strong>Reported by:</strong> <code>citry check</code>, <code>citry-lsp</code>.</p></section>
<section class="diagnostic-reference" aria-labelledby="citry.browser.invalid-state-binding-target"><h2 id="citry.browser.invalid-state-binding-target" class="toc-heading"><code>citry.browser.invalid-state-binding-target</code></h2><p><strong>Invalid State binding target.</strong> A State binding is attached to an element or input type that cannot support it.</p><p><strong>When this appears:</strong> A statically known target cannot hold a bound value or support the requested binding direction or update event.</p><p><strong>Default severity:</strong> <code>error</code>.</p><div class="diagnostic-example"><p><strong>Example: Binding on a non-control element</strong></p><div class="highlight"><pre><code class="language-citry-html">&lt;head :c-query&gt;&lt;/head&gt;</code></pre></div></div><p><strong>Reported by:</strong> <code>citry check</code>, <code>citry-lsp</code>.</p></section>
<section class="diagnostic-reference" aria-labelledby="citry.browser.unknown-state-field"><h2 id="citry.browser.unknown-state-field" class="toc-heading"><code>citry.browser.unknown-state-field</code></h2><p><strong>Unknown State binding field.</strong> A State binding names a field that the owning component does not expose publicly.</p><p><strong>When this appears:</strong> A :c-* binding names a field absent from a known public State schema. Bindings with unknown component ownership or an unknown State schema are not checked.</p><p><strong>Default severity:</strong> <code>error</code>.</p><p><strong>Message:</strong></p><div class="highlight"><pre><code>State field &#39;{name}&#39; is not a public field of this component.</code></pre></div><div class="diagnostic-example"><p><strong>Example: Unknown field in a State binding</strong></p><div class="highlight"><pre><code class="language-citry-html">&lt;input :c-missing_field.debounce=&#34;refresh&#34;&gt;</code></pre></div></div><p><strong>Reported by:</strong> <code>citry check</code>, <code>citry-lsp</code>.</p></section>
<section class="diagnostic-reference" aria-labelledby="citry.browser.unknown-server-event"><h2 id="citry.browser.unknown-server-event" class="toc-heading"><code>citry.browser.unknown-server-event</code></h2><p><strong>Unknown server event.</strong> A literal browser event reference names no effective handler on the component that owns it.</p><p><strong>When this appears:</strong> An Alpine expression or component JavaScript calls sendEvent, $sendEvent, $loading, or $error with an unknown non-empty string literal, or a declarative @c-* binding names an unknown handler.</p><p><strong>Default severity:</strong> <code>error</code>.</p><p><strong>Message:</strong></p><div class="highlight"><pre><code>Server event &#39;{name}&#39; is not declared by this component.</code></pre></div><div class="diagnostic-example"><p><strong>Example: Unknown literal event</strong></p><div class="highlight"><pre><code class="language-citry-html">&lt;button @click=&#34;sendEvent(&#39;missing&#39;)&#34;&gt;Run&lt;/button&gt;</code></pre></div></div><div class="diagnostic-example"><p><strong>Example: Unknown declarative handler</strong></p><div class="highlight"><pre><code class="language-citry-html">&lt;button @c-click=&#34;missing&#34;&gt;Run&lt;/button&gt;</code></pre></div></div><div class="diagnostic-example"><p><strong>Example: Unknown loading handler</strong></p><div class="highlight"><pre><code class="language-citry-html">&lt;span x-show=&#34;$loading(&#39;missing&#39;)&#34;&gt;Saving&lt;/span&gt;</code></pre></div></div><p><strong>Reported by:</strong> <code>citry check</code>, <code>citry-lsp</code>.</p></section>
<section class="diagnostic-reference" aria-labelledby="citry.browser.unknown-component-prop"><h2 id="citry.browser.unknown-component-prop" class="toc-heading"><code>citry.browser.unknown-component-prop</code></h2><p><strong>Unknown client prop.</strong> A static $c-props object contains a key that the child component does not declare.</p><p><strong>When this appears:</strong> A statically resolved component receives a direct $c-props object key absent from its static $component({props}) declaration.</p><p><strong>Default severity:</strong> <code>error</code>.</p><p><strong>Message:</strong></p><div class="highlight"><pre><code>Client prop &#39;{name}&#39; is not declared by &lt;{tag}&gt;.</code></pre></div><div class="diagnostic-example"><p><strong>Example: Unknown client prop</strong></p><div class="highlight"><pre><code class="language-citry-html">&lt;c-card $c-props=&#34;{ missing: value }&#34; /&gt;</code></pre></div></div><p><strong>Reported by:</strong> <code>citry check</code>, <code>citry-lsp</code>.</p></section>
<section class="diagnostic-reference" aria-labelledby="citry.browser.missing-component-prop"><h2 id="citry.browser.missing-component-prop" class="toc-heading"><code>citry.browser.missing-component-prop</code></h2><p><strong>Missing required client prop.</strong> A static $c-props object omits a required prop declared by the child component.</p><p><strong>When this appears:</strong> A statically resolved component receives a direct $c-props object without a required static $component({props}) key and no dynamic spread can supply it.</p><p><strong>Default severity:</strong> <code>error</code>.</p><p><strong>Message:</strong></p><div class="highlight"><pre><code>Required client prop &#39;{name}&#39; is missing for &lt;{tag}&gt;.</code></pre></div><div class="diagnostic-example"><p><strong>Example: Missing required prop</strong></p><div class="highlight"><pre><code class="language-citry-html">&lt;c-card $c-props=&#34;{}&#34; /&gt;</code></pre></div></div><p><strong>Reported by:</strong> <code>citry check</code>, <code>citry-lsp</code>.</p></section>
<section class="diagnostic-reference" aria-labelledby="citry.browser.incompatible-component-prop"><h2 id="citry.browser.incompatible-component-prop" class="toc-heading"><code>citry.browser.incompatible-component-prop</code></h2><p><strong>Incompatible client prop.</strong> A static $c-props value has a proven type outside the child component&#39;s prop declaration.</p><p><strong>When this appears:</strong> Citry can prove both the authored value type and the static $component({props}) type, and the value cannot satisfy that prop.</p><p><strong>Default severity:</strong> <code>error</code>.</p><p><strong>Message:</strong></p><div class="highlight"><pre><code>Client prop &#39;{name}&#39; expects {expected}, but this value is {actual}.</code></pre></div><div class="diagnostic-example"><p><strong>Example: Wrong literal type</strong></p><div class="highlight"><pre><code class="language-citry-html">&lt;c-card $c-props=&#34;{ count: &#39;many&#39; }&#34; /&gt;</code></pre></div></div><p><strong>Reported by:</strong> <code>citry check</code>, <code>citry-lsp</code>.</p></section>
<section class="diagnostic-reference" aria-labelledby="citry.check.template-declaration"><h2 id="citry.check.template-declaration" class="toc-heading"><code>citry.check.template-declaration</code></h2><p><strong>Template declaration unavailable.</strong> The checker could not safely inspect or identify a component&#39;s template declaration.</p><p><strong>When this appears:</strong> The selected component&#39;s template or template_file declaration raises during inspection or cannot be identified safely.</p><p><strong>Default severity:</strong> <code>error</code>.</p><p><strong>Message:</strong></p><div class="highlight"><pre><code>Citry could not inspect this component&#39;s template declaration: {detail}</code></pre></div><p><strong>Reported by:</strong> <code>citry check</code>.</p></section>
<section class="diagnostic-reference" aria-labelledby="citry.check.template-language-unsupported"><h2 id="citry.check.template-language-unsupported" class="toc-heading"><code>citry.check.template-language-unsupported</code></h2><p><strong>Unsupported template language.</strong> The checker only analyzes native Citry templates and skipped a declaration with another language.</p><p><strong>When this appears:</strong> A component sets template_lang to a non-None value; citry check currently analyzes only native Citry templates.</p><p><strong>Default severity:</strong> <code>error</code>.</p><p><strong>Message:</strong></p><div class="highlight"><pre><code>Citry cannot check template_lang with a {type} value. This template was skipped.</code></pre></div><p><strong>Reported by:</strong> <code>citry check</code>.</p></section>
<section class="diagnostic-reference" aria-labelledby="citry.check.template-value-invalid"><h2 id="citry.check.template-value-invalid" class="toc-heading"><code>citry.check.template-value-invalid</code></h2><p><strong>Invalid template declaration value.</strong> A template or template_file declaration has a value type the checker cannot use.</p><p><strong>When this appears:</strong> Component.template is not a string, or Component.template_file is neither a string nor a pathlib.Path.</p><p><strong>Default severity:</strong> <code>error</code>.</p><p><strong>Messages:</strong></p><ul class="diagnostic-messages"><li class="diagnostic-message"><p><strong>Inline template:</strong></p><div class="highlight"><pre><code>Component.template must be a string. This template was skipped.</code></pre></div></li><li class="diagnostic-message"><p><strong>Template file:</strong></p><div class="highlight"><pre><code>Component.template_file must be a string or Path. This template was skipped.</code></pre></div></li></ul><div class="diagnostic-example"><p><strong>Example: Non-string inline template</strong></p><div class="highlight"><pre><code class="language-citry">class Card(Component):
    template = build_template()</code></pre></div></div><p><strong>Reported by:</strong> <code>citry check</code>.</p></section>
<section class="diagnostic-reference" aria-labelledby="citry.check.template-file-not-found"><h2 id="citry.check.template-file-not-found" class="toc-heading"><code>citry.check.template-file-not-found</code></h2><p><strong>Template file not found.</strong> No template file exists at any location resolved from template_file.</p><p><strong>When this appears:</strong> Component.template_file points to a path that does not exist in the component directory or any configured template directory.</p><p><strong>Default severity:</strong> <code>error</code>.</p><p><strong>Message:</strong></p><div class="highlight"><pre><code>Template file &#39;{path}&#39; was not found. Searched: {locations}.</code></pre></div><div class="diagnostic-example"><p><strong>Example: Missing template file</strong></p><div class="highlight"><pre><code class="language-citry">class Card(Component):
    template_file = &#34;missing.html&#34;</code></pre></div></div><p><strong>Reported by:</strong> <code>citry check</code>.</p></section>
<section class="diagnostic-reference" aria-labelledby="citry.check.template-file-unreadable"><h2 id="citry.check.template-file-unreadable" class="toc-heading"><code>citry.check.template-file-unreadable</code></h2><p><strong>Template file could not be read.</strong> The resolved template file could not be opened or decoded as UTF-8.</p><p><strong>When this appears:</strong> Citry resolves Component.template_file but cannot open the file or decode it as UTF-8.</p><p><strong>Default severity:</strong> <code>error</code>.</p><p><strong>Message:</strong></p><div class="highlight"><pre><code>Citry could not read this template file: {detail}</code></pre></div><p><strong>Reported by:</strong> <code>citry check</code>.</p></section>
<section class="diagnostic-reference" aria-labelledby="citry.check.template-namespace-unavailable"><h2 id="citry.check.template-namespace-unavailable" class="toc-heading"><code>citry.check.template-namespace-unavailable</code></h2><p><strong>Template variables unavailable.</strong> The checker could not determine the variables supplied to a component template.</p><p><strong>When this appears:</strong> citry check cannot inspect the component&#39;s declared or inferred template data namespace.</p><p><strong>Default severity:</strong> <code>error</code>.</p><p><strong>Message:</strong></p><div class="highlight"><pre><code>Citry could not inspect this template&#39;s variables: {detail}</code></pre></div><p><strong>Reported by:</strong> <code>citry check</code>.</p></section>
<section class="diagnostic-reference" aria-labelledby="citry.check.python-source-unreadable"><h2 id="citry.check.python-source-unreadable" class="toc-heading"><code>citry.check.python-source-unreadable</code></h2><p><strong>Python source could not be analyzed.</strong> Static checking could not read, decode, or parse a Python source file.</p><p><strong>When this appears:</strong> Static discovery reaches a Python file that cannot be read, decoded, or parsed.</p><p><strong>Default severity:</strong> <code>error</code>.</p><p><strong>Message:</strong></p><div class="highlight"><pre><code>Citry could not analyze this Python source: {detail}</code></pre></div><p><strong>Reported by:</strong> <code>citry check</code>.</p></section>
<section class="diagnostic-reference" aria-labelledby="citry.i18n.catalog-invalid"><h2 id="citry.i18n.catalog-invalid" class="toc-heading"><code>citry.i18n.catalog-invalid</code></h2><p><strong>Invalid Fluent catalog source.</strong> A Fluent source unit failed Citry&#39;s production parser or i18n contract checks.</p><p><strong>When this appears:</strong> A messages block or catalog file contains invalid Fluent syntax, an unsupported parameter type, or another source-level i18n error.</p><p><strong>Default severity:</strong> <code>error</code>.</p><p><strong>Reported by:</strong> <code>citry check</code>, <code>citry-lsp</code>.</p></section>
<section class="diagnostic-reference" aria-labelledby="citry.i18n.unknown-message"><h2 id="citry.i18n.unknown-message" class="toc-heading"><code>citry.i18n.unknown-message</code></h2><p><strong>Unknown i18n message.</strong> A literal translation key is absent from the checked project catalog.</p><p><strong>When this appears:</strong> A direct tr() call, &lt;c-trans&gt; tag, $c-tr binding, or bounded browser bind() call names a message value or attribute that no component or configured catalog package defines.</p><p><strong>Default severity:</strong> <code>error</code>.</p><p><strong>Reported by:</strong> <code>citry check</code>, <code>citry-lsp</code>.</p></section>
<section class="diagnostic-reference" aria-labelledby="citry.i18n.argument-invalid"><h2 id="citry.i18n.argument-invalid" class="toc-heading"><code>citry.i18n.argument-invalid</code></h2><p><strong>Invalid i18n argument.</strong> A translation binding, formatter, parser, or rich-message call does not match its checked contract.</p><p><strong>When this appears:</strong> A literal i18n call or $c-tr binding is malformed, has missing, unknown, or mistyped message inputs, uses an unknown named profile, or supplies the wrong &lt;c-trans&gt; values or fills.</p><p><strong>Default severity:</strong> <code>error</code>.</p><p><strong>Reported by:</strong> <code>citry check</code>, <code>citry-lsp</code>.</p></section>
<section class="diagnostic-reference" aria-labelledby="citry.i18n.cross-language-fallback"><h2 id="citry.i18n.cross-language-fallback" class="toc-heading"><code>citry.i18n.cross-language-fallback</code></h2><p><strong>Cross-language i18n fallback.</strong> A plain translated string falls back to a different language without a place to carry that language metadata.</p><p><strong>When this appears:</strong> A text-only translation can select a source or fallback locale whose canonical language tag differs from the requested locale.</p><p><strong>Default severity:</strong> <code>error</code>.</p><p><strong>Reported by:</strong> <code>citry check</code>.</p></section>
<section class="diagnostic-reference" aria-labelledby="citry.i18n.client-message-invalid"><h2 id="citry.i18n.client-message-invalid" class="toc-heading"><code>citry.i18n.client-message-invalid</code></h2><p><strong>Invalid client i18n message.</strong> A message declared for browser use is missing or lacks complete locale coverage.</p><p><strong>When this appears:</strong> Component.I18n.client_messages names an unknown output or an output that would fall back across languages in a client-enabled subtree.</p><p><strong>Default severity:</strong> <code>error</code>.</p><p><strong>Reported by:</strong> <code>citry check</code>.</p></section>
<section class="diagnostic-reference" aria-labelledby="citry.format.syntax"><h2 id="citry.format.syntax" class="toc-heading"><code>citry.format.syntax</code></h2><p><strong>Invalid template syntax.</strong> Formatting stopped because the template does not parse.</p><p><strong>When this appears:</strong> A format command receives a template with a Citry syntax error.</p><p><strong>Default severity:</strong> <code>error</code>.</p><p><strong>Reported by:</strong> <code>citry format</code>, <code>citry-lsp</code>, the Citry VS Code extension.</p></section>
<section class="diagnostic-reference" aria-labelledby="citry.format.suppression"><h2 id="citry.format.suppression" class="toc-heading"><code>citry.format.suppression</code></h2><p><strong>Invalid formatter directive.</strong> A fmt directive is unmatched or appears in a context where its requested scope is invalid.</p><p><strong>When this appears:</strong> A fmt:on, fmt:off, or fmt:skip directive has no valid matching scope at its authored position.</p><p><strong>Default severity:</strong> <code>error</code>.</p><div class="diagnostic-example"><p><strong>Example: Unmatched formatter enable directive</strong></p><div class="highlight"><pre><code class="language-citry-html">{# fmt: on #}
&lt;div&gt;&lt;/div&gt;</code></pre></div></div><p><strong>Reported by:</strong> <code>citry format</code>, <code>citry-lsp</code>, the Citry VS Code extension.</p></section>
<section class="diagnostic-reference" aria-labelledby="citry.format.invariant"><h2 id="citry.format.invariant" class="toc-heading"><code>citry.format.invariant</code></h2><p><strong>Formatter safety check failed.</strong> The formatter refused to write output after an internal span, structure, or idempotence check failed.</p><p><strong>When this appears:</strong> Formatting output fails one of Citry&#39;s safety checks, so Citry refuses to apply the edit.</p><p><strong>Default severity:</strong> <code>error</code>.</p><p><strong>Reported by:</strong> <code>citry format</code>, <code>citry-lsp</code>, the Citry VS Code extension.</p></section>
<section class="diagnostic-reference" aria-labelledby="citry.format.unsupported"><h2 id="citry.format.unsupported" class="toc-heading"><code>citry.format.unsupported</code></h2><p><strong>Formatting shape unsupported.</strong> The formatter conservatively declined a valid template shape it cannot yet rewrite safely.</p><p><strong>When this appears:</strong> The template is valid, but its source shape is outside the formatter&#39;s currently supported rewrite rules.</p><p><strong>Default severity:</strong> <code>error</code>.</p><p><strong>Reported by:</strong> <code>citry format</code>, <code>citry-lsp</code>, the Citry VS Code extension.</p></section>
<section class="diagnostic-reference" aria-labelledby="citry.format.provider-invalid"><h2 id="citry.format.provider-invalid" class="toc-heading"><code>citry.format.provider-invalid</code></h2><p><strong>Embedded formatter returned invalid output.</strong> A JavaScript or CSS formatter response failed Citry&#39;s source-bound validation.</p><p><strong>When this appears:</strong> A delegated JavaScript or CSS formatter returns an edit that does not match the requested embedded region.</p><p><strong>Default severity:</strong> <code>error</code>.</p><p><strong>Reported by:</strong> <code>citry format</code>, <code>citry-lsp</code>, the Citry VS Code extension.</p></section>
<section class="diagnostic-reference" aria-labelledby="citry.format.embedded-suppressed"><h2 id="citry.format.embedded-suppressed" class="toc-heading"><code>citry.format.embedded-suppressed</code></h2><p><strong>Embedded formatting suppressed.</strong> A fmt directive deliberately prevented formatting of a JavaScript or CSS region.</p><p><strong>When this appears:</strong> A fmt:off or fmt:skip directive covers an embedded JavaScript or CSS region.</p><p><strong>Default severity:</strong> <code>information</code>.</p><p><strong>Reported by:</strong> <code>citry format</code>, <code>citry-lsp</code>, the Citry VS Code extension.</p></section>
<section class="diagnostic-reference" aria-labelledby="citry.format.embedded-language-unsupported"><h2 id="citry.format.embedded-language-unsupported" class="toc-heading"><code>citry.format.embedded-language-unsupported</code></h2><p><strong>Embedded language unsupported.</strong> Citry recognized an embedded region but cannot delegate its declared language.</p><p><strong>When this appears:</strong> An embedded script or style region declares a language for which Citry has no formatter provider.</p><p><strong>Default severity:</strong> <code>warning</code>.</p><p><strong>Reported by:</strong> <code>citry format</code>, <code>citry-lsp</code>, the Citry VS Code extension.</p></section>
<section class="diagnostic-reference" aria-labelledby="citry.format.embedded-interpolation-unsupported"><h2 id="citry.format.embedded-interpolation-unsupported" class="toc-heading"><code>citry.format.embedded-interpolation-unsupported</code></h2><p><strong>Embedded interpolation unsupported.</strong> A JavaScript or CSS region contains Citry interpolation that cannot be safely delegated yet.</p><p><strong>When this appears:</strong> An embedded JavaScript or CSS region contains Citry interpolation, which cannot yet be mapped safely through an external formatter.</p><p><strong>Default severity:</strong> <code>warning</code>.</p><div class="diagnostic-example"><p><strong>Example: Citry interpolation inside JavaScript</strong></p><div class="highlight"><pre><code class="language-citry-html">&lt;script&gt;
  const title = &#34;{{ title }}&#34;;
&lt;/script&gt;</code></pre></div></div><p><strong>Reported by:</strong> <code>citry format</code>, <code>citry-lsp</code>, the Citry VS Code extension.</p></section>
<section class="diagnostic-reference" aria-labelledby="citry.format.provider-unavailable"><h2 id="citry.format.provider-unavailable" class="toc-heading"><code>citry.format.provider-unavailable</code></h2><p><strong>Embedded formatter unavailable.</strong> No JavaScript or CSS formatter returned a usable result for a delegated region.</p><p><strong>When this appears:</strong> Citry asks the editor to format embedded JavaScript or CSS, but no installed provider returns an edit.</p><p><strong>Default severity:</strong> <code>warning</code>.</p><p><strong>Reported by:</strong> <code>citry format</code>, <code>citry-lsp</code>, the Citry VS Code extension.</p></section>
<section class="diagnostic-reference" aria-labelledby="citry.format.host-syntax"><h2 id="citry.format.host-syntax" class="toc-heading"><code>citry.format.host-syntax</code></h2><p><strong>Invalid Python host syntax.</strong> A Python file containing component assets could not be parsed before formatting.</p><p><strong>When this appears:</strong> A format command targets a Python file whose current source has invalid Python syntax.</p><p><strong>Default severity:</strong> <code>error</code>.</p><p><strong>Reported by:</strong> <code>citry format</code>, <code>citry-lsp</code>, the Citry VS Code extension.</p></section>
<section class="diagnostic-reference" aria-labelledby="citry.format.ineligible"><h2 id="citry.format.ineligible" class="toc-heading"><code>citry.format.ineligible</code></h2><p><strong>Document is not eligible for formatting.</strong> The selected document, position, or asset is outside Citry&#39;s proven formatting scope.</p><p><strong>When this appears:</strong> Citry cannot prove that the selected document or cursor position belongs to a supported Citry template, script, or style region.</p><p><strong>Default severity:</strong> <code>error</code>.</p><p><strong>Reported by:</strong> <code>citry format</code>, <code>citry-lsp</code>, the Citry VS Code extension.</p></section>
<section class="diagnostic-reference" aria-labelledby="citry.format.stale-document"><h2 id="citry.format.stale-document" class="toc-heading"><code>citry.format.stale-document</code></h2><p><strong>Document changed during formatting.</strong> Formatting was discarded because its source-bound plan no longer matches the current document.</p><p><strong>When this appears:</strong> The document changes after Citry prepares a format plan but before the editor can apply it.</p><p><strong>Default severity:</strong> <code>error</code>.</p><p><strong>Reported by:</strong> <code>citry-lsp</code>, the Citry VS Code extension.</p></section>
<section class="diagnostic-reference" aria-labelledby="citry.format.cancelled"><h2 id="citry.format.cancelled" class="toc-heading"><code>citry.format.cancelled</code></h2><p><strong>Formatting cancelled.</strong> The editor cancelled a formatting operation before Citry could apply it.</p><p><strong>When this appears:</strong> The editor or user cancels a format request before Citry applies its edits.</p><p><strong>Default severity:</strong> <code>information</code>.</p><p><strong>Reported by:</strong> the Citry VS Code extension.</p></section>
<h2 id="provider-owned-diagnostics" class="toc-heading">Provider-owned diagnostics</h2>
<section class="diagnostic-reference"><h3><code>citry.python.*</code></h3><p><strong>Provider:</strong> ty. Python semantic diagnostics retained from the pinned ty analyzer. The suffix and message remain provider-owned.</p></section>
</div>