[
  {
    "code": "ABANDONED_FLIGHTS",
    "kind": ["responsiveness"],
    "severity": ["warn"],
    "category": "responsiveness",
    "trigger": "One async source abandoned 3+ flights in 1s, each superseded before landing — the request-per-keystroke signature (attribution enabled)",
    "repair": "One async source started flight after flight and threw most of the answers away: `data.abandoned` flights in `data.windowMs` were each superseded by the next before landing.",
    "guideUrl": "https://v2.solidjs.com/reference/solid-js/diagnostics/abandoned-flights"
  },
  {
    "code": "ACTION_CALLED_IN_OWNED_SCOPE",
    "kind": ["write"],
    "severity": ["error"],
    "category": "write",
    "trigger": "`action()` invoked from a component body or computation",
    "repair": "An action was invoked during a component body or computation.",
    "guideUrl": "https://v2.solidjs.com/reference/solid-js/diagnostics/action-called-in-owned-scope"
  },
  {
    "code": "ASYNC_MEMO_ELEMENT",
    "kind": ["ssr"],
    "severity": ["error"],
    "category": "ssr",
    "trigger": "An async memo landed on rendered output (JSX, a boundary), which cannot serialize for hydration; the memo rejects (observe + dev; rejects in every tier)",
    "repair": "An async memo (or async iterable source) resolved, on the server, to rendered output — JSX, a component's result, a `<Loading>`/`<Errored>` boundary.",
    "guideUrl": "https://v2.solidjs.com/reference/solid-js/diagnostics/async-memo-element"
  },
  {
    "code": "ASYNC_OUTSIDE_LOADING_BOUNDARY",
    "kind": ["async"],
    "severity": ["warn"],
    "category": "async",
    "trigger": "Async computation outside Loading boundary (non-halting; root mount is deferred)",
    "repair": "On the client, an async value was read outside a Loading boundary during mounting.",
    "guideUrl": "https://v2.solidjs.com/reference/solid-js/diagnostics/async-outside-loading-boundary"
  },
  {
    "code": "ASYNC_STORE_SETTER",
    "kind": ["write"],
    "severity": ["error"],
    "category": "write",
    "trigger": "Store setter callback returned a Promise (setters are synchronous transactions)",
    "repair": "A store setter callback returned a Promise — `setStore(async d => …)`, or a sync arrow whose helper is async.",
    "guideUrl": "https://v2.solidjs.com/reference/solid-js/diagnostics/async-store-setter"
  },
  {
    "code": "ASYNC_WATERFALL",
    "kind": ["perf"],
    "severity": ["info", "warn"],
    "category": "perf",
    "trigger": "2+/3+ sequential async flights, origin-proven (attribution enabled)",
    "repair": "Async flights ran in sequence when they might have run in parallel: each named flight provably could not start until the previous one resolved, and each took real time (the per-link durations are in the message/data).",
    "guideUrl": "https://v2.solidjs.com/reference/solid-js/diagnostics/async-waterfall"
  },
  {
    "code": "CAUGHT_REACTIVE_READ",
    "kind": ["async"],
    "severity": ["warn"],
    "category": "async",
    "trigger": "A computation caught a reactive read's throw (not ready, or the source's error) and completed with a value: the load is masked or the error hidden; once per node",
    "repair": "A computation wrapped a reactive read in `try/catch` as it would an `await`, the read threw (not ready, or the source's error), the catch swallowed it, and the computation completed with a substitute value.",
    "guideUrl": "https://v2.solidjs.com/reference/solid-js/diagnostics/caught-reactive-read"
  },
  {
    "code": "CLEANUP_IN_FORBIDDEN_SCOPE",
    "kind": ["lifecycle"],
    "severity": ["error"],
    "category": "lifecycle",
    "trigger": "`onCleanup` inside trackedEffect/onSettled",
    "repair": "`onCleanup` inside `createTrackedEffect` or `onSettled` is not supported — return a cleanup function from the callback instead.",
    "guideUrl": "https://v2.solidjs.com/reference/solid-js/diagnostics/cleanup-in-forbidden-scope"
  },
  {
    "code": "DYNAMIC_ASYNC_COMPONENT",
    "kind": ["ssr"],
    "severity": ["error"],
    "category": "ssr",
    "trigger": "An async `dynamic()` source landed on a client component function, which cannot serialize for adoption; the memo rejects (observe + dev; rejects in every tier)",
    "repair": "An async `dynamic()` source resolved to a client component function.",
    "guideUrl": "https://v2.solidjs.com/reference/solid-js/diagnostics/dynamic-async-component"
  },
  {
    "code": "EFFECT_RELAY_TEAR",
    "kind": ["perf"],
    "severity": ["info", "warn"],
    "category": "perf",
    "trigger": "Reader ran twice for one root change because an effect relayed it; `warn` when derivable or repeated (attribution enabled)",
    "repair": "Derived state kept in sync by an effect: `createEffect(() => f(a()), v => setS(v))`.",
    "guideUrl": "https://v2.solidjs.com/reference/solid-js/diagnostics/effect-relay-tear"
  },
  {
    "code": "EFFECT_WRITES_OWN_SOURCE",
    "kind": ["perf"],
    "severity": ["info", "warn"],
    "category": "perf",
    "trigger": "Effect's write provably feeds back into its own inputs; `info` for multi-effect rings (attribution enabled)",
    "repair": "An effect re-ran because of a write it made itself: its callback wrote a value that its own inputs depend on (directly, or through the memos the message names), so the flush settled in two passes and the screen rendered the pre-write value in between.",
    "guideUrl": "https://v2.solidjs.com/reference/solid-js/diagnostics/effect-writes-own-source"
  },
  {
    "code": "FALLBACK_FLASH",
    "kind": ["responsiveness"],
    "severity": ["info"],
    "category": "responsiveness",
    "trigger": "A `Loading` fallback showed for under 150ms — feedback for a wait too short to need it (attribution enabled)",
    "repair": "A `Loading` fallback appeared and vanished inside 150ms (`data.shownMs`): the data was nearly there, and the spinner read as a flicker.",
    "guideUrl": "https://v2.solidjs.com/reference/solid-js/diagnostics/fallback-flash"
  },
  {
    "code": "FLUSH_IN_EFFECT_CALLBACK",
    "kind": ["lifecycle"],
    "severity": ["warn"],
    "category": "lifecycle",
    "trigger": "`flush()` from an effect callback (no-op; the drain is already running)",
    "repair": "`flush()` was called inside an effect callback, where it is a no-op (the flush running effects is already in progress).",
    "guideUrl": "https://v2.solidjs.com/reference/solid-js/diagnostics/flush-in-effect-callback"
  },
  {
    "code": "FRAME_MARKER_CORRUPTED",
    "kind": ["ssr"],
    "severity": ["error"],
    "category": "ssr",
    "trigger": "Frame slot range missing its end marker on the client — nesting or an HTML rewriter (observe + dev)",
    "repair": "(Client.) A frame's slot start marker has no end marker among its siblings: invalid HTML nesting split the range when the browser parsed it (a block element inside `<p>`, a `<tr>` outside a table), or a CDN/minifier stripped the comment.",
    "guideUrl": "https://v2.solidjs.com/reference/solid-js/diagnostics/frame-marker-corrupted"
  },
  {
    "code": "GRAPH_GROWTH",
    "kind": ["perf"],
    "severity": ["warn"],
    "category": "perf",
    "trigger": "The live graph and what outlived each navigation climbed at a route's settle on 3 visits to 1.25× — something each visit leaves behind (attribution enabled)",
    "repair": "The live graph, counted when each navigation settles, got bigger on every one of the last `data.history.length` visits to `data.route`, and so did the part of it that outlived each of those navigations (`data.survived`, beside `data.history`: what was alive as this or an earlier navigation began and still is) — something each visit creates is never disposed.",
    "guideUrl": "https://v2.solidjs.com/reference/solid-js/diagnostics/graph-growth"
  },
  {
    "code": "HEAD_TAG_INVALID",
    "kind": ["head"],
    "severity": ["warn"],
    "category": "head",
    "trigger": "`useHead` registration the render could not honor; `data.reason` names the rule (dev)",
    "repair": "A `useHead` registration the render could not honor; `data.reason` names the rule.",
    "guideUrl": "https://v2.solidjs.com/reference/solid-js/diagnostics/head-tag-invalid"
  },
  {
    "code": "HOT_SCOPE_FANOUT",
    "kind": ["perf"],
    "severity": ["warn"],
    "category": "perf",
    "trigger": "5+/50+/500+ scopes hot from one root cause (attribution enabled)",
    "repair": "Many scopes went hot from ONE root cause (named in the message) — the aggregate form of HOT_SCOPE_RERUNS, emitted so a single culprit doesn't produce one warning per victim.",
    "guideUrl": "https://v2.solidjs.com/reference/solid-js/diagnostics/hot-scope-fanout"
  },
  {
    "code": "HOT_SCOPE_RERUNS",
    "kind": ["perf"],
    "severity": ["warn"],
    "category": "perf",
    "trigger": "120+ re-runs of one scope in 1s (attribution enabled)",
    "repair": "A scope re-ran far more often than any UI cadence justifies — a hot signal (often per-frame or per-event) is leaking into it.",
    "guideUrl": "https://v2.solidjs.com/reference/solid-js/diagnostics/hot-scope-reruns"
  },
  {
    "code": "HOT_SCOPE_TIME",
    "kind": ["perf"],
    "severity": ["warn"],
    "category": "perf",
    "trigger": "8ms+ self-time in one scope in 1s (attribution enabled)",
    "repair": "A scope's summed compute time blew its per-window budget — a few-but-expensive scope that run counts miss.",
    "guideUrl": "https://v2.solidjs.com/reference/solid-js/diagnostics/hot-scope-time"
  },
  {
    "code": "HUGE_FAN_IN",
    "kind": ["graph"],
    "severity": ["warn"],
    "category": "graph",
    "trigger": "One recompute tracked 2000 sources (always on)",
    "repair": "The always-on backstop: one computation tracked 2000 or more sources in a single pass, so it re-runs when any of them change.",
    "guideUrl": "https://v2.solidjs.com/reference/solid-js/diagnostics/huge-fan-in"
  },
  {
    "code": "HUGE_FAN_OUT",
    "kind": ["graph"],
    "severity": ["warn"],
    "category": "graph",
    "trigger": "One change reached 2000 live subscribers (always on), or 250 — `fanOut` — on a stamped root write (attribution enabled)",
    "repair": "One value has very many subscribers, so a single change re-runs all of them (`data.count`).",
    "guideUrl": "https://v2.solidjs.com/reference/solid-js/diagnostics/huge-fan-out"
  },
  {
    "code": "IMMUTABLE_UPDATE_IN_STORE",
    "kind": ["perf"],
    "severity": ["warn"],
    "category": "perf",
    "trigger": "Store container replaced by a mostly-identical copy (attribution enabled)",
    "repair": "A store setter replaced a container with a fresh object/array whose leaves are mostly the same values: `draft.user = { ...draft.user, name }`, `draft.items = [...draft.items, x]`, `draft.items = draft.items.filter(…)`.",
    "guideUrl": "https://v2.solidjs.com/reference/solid-js/diagnostics/immutable-update-in-store"
  },
  {
    "code": "INVALID_AFFECTS_TARGET",
    "kind": ["write"],
    "severity": ["error"],
    "category": "write",
    "trigger": "`affects()` given a key path, or a key on an accessor",
    "repair": "`affects()` expects a Solid source accessor or store node, with at most one optional key (keys only valid on store targets).",
    "guideUrl": "https://v2.solidjs.com/reference/solid-js/diagnostics/invalid-affects-target"
  },
  {
    "code": "INVALID_REFRESH_TARGET",
    "kind": ["write"],
    "severity": ["error"],
    "category": "write",
    "trigger": "`refresh()` target is not a source accessor or refreshable store",
    "repair": "`refresh()` expects a Solid source accessor or refreshable store — not a wrapper function or a derived property read.",
    "guideUrl": "https://v2.solidjs.com/reference/solid-js/diagnostics/invalid-refresh-target"
  },
  {
    "code": "INVARIANT_VIOLATION",
    "kind": ["error"],
    "severity": ["error"],
    "category": "error",
    "trigger": "Internal consistency check failed (throws under `__TEST__`, reported in dev)",
    "repair": "The reactive system contradicted itself — an internal bug, not user error.",
    "guideUrl": "https://v2.solidjs.com/reference/solid-js/diagnostics/invariant-violation"
  },
  {
    "code": "LATE_HEADER_WRITE",
    "kind": ["head"],
    "severity": ["error"],
    "category": "head",
    "trigger": "Response header written after the head was sent; dropped (observe + dev; dev throws)",
    "repair": "A response header was written after the head was sent; the write was dropped (dev throws instead).",
    "guideUrl": "https://v2.solidjs.com/reference/solid-js/diagnostics/late-header-write"
  },
  {
    "code": "LAZY_ASSET_UNMAPPED",
    "kind": ["ssr"],
    "severity": ["warn"],
    "category": "ssr",
    "trigger": "`lazy()` component's client assets could not be resolved for the page (dev)",
    "repair": "A `lazy()` component's client chunk could not be resolved for the page (`data.reason`: the resolver threw, or the module has no `$$moduleUrl`), so it is not preloaded and loads late during hydration.",
    "guideUrl": "https://v2.solidjs.com/reference/solid-js/diagnostics/lazy-asset-unmapped"
  },
  {
    "code": "LOADING_ON_ACCESSOR",
    "kind": ["async"],
    "severity": ["warn"],
    "category": "async",
    "trigger": "`<Loading on>` received a function (an accessor) instead of the dependency's value; it is never called, so the boundary never re-arms",
    "repair": "A Loading boundary's `on` received a function, such as `on={route}` or `on={() => route()}`.",
    "guideUrl": "https://v2.solidjs.com/reference/solid-js/diagnostics/loading-on-accessor"
  },
  {
    "code": "LOADING_ON_OUTSIDE_HOLD",
    "kind": ["async"],
    "severity": ["warn"],
    "category": "async",
    "trigger": "`<Loading on>` changed but its data is also read outside the boundary and holds the frame: the fallback can never be seen",
    "repair": "`on` re-armed a Loading boundary, but a source it is waiting on is also read outside the boundary and holds the frame.",
    "guideUrl": "https://v2.solidjs.com/reference/solid-js/diagnostics/loading-on-outside-hold"
  },
  {
    "code": "LONG_HOLD",
    "kind": ["responsiveness"],
    "severity": ["info", "warn"],
    "category": "responsiveness",
    "trigger": "Acknowledged hold whose tail (last input → commit) ran 500ms+/1000ms+ (attribution enabled)",
    "repair": "The hold WAS acknowledged — an `isPending()` spinner, a `latest()` header, an optimistic value — and still ran on: the time from the user's last input to the commit (`data.tailMs`; `holdMs` is the whole wait when input kept arriving) reached `longHolds.infoMs` (default 500ms), `warn` from `longHolds.warnMs` (default 1000ms, where the user loses the thread).",
    "guideUrl": "https://v2.solidjs.com/reference/solid-js/diagnostics/long-hold"
  },
  {
    "code": "LOWERCASE_EVENT_ATTRIBUTE",
    "kind": ["render"],
    "severity": ["warn"],
    "category": "render",
    "trigger": "A function was set on a lowercase `on*` (or `on:`) attribute, which is not an event handler in 2.0; use `onXxx` (dev; client)",
    "repair": "A function was set on an attribute whose name starts with `on` but is not an event handler (`data.name`): a lowercase `onclick`, or a leftover 1.x `on:click` passed through a spread (on a native element it is a compile error).",
    "guideUrl": "https://v2.solidjs.com/reference/solid-js/diagnostics/lowercase-event-attribute"
  },
  {
    "code": "MISSING_EFFECT_FN",
    "kind": ["lifecycle"],
    "severity": ["error"],
    "category": "lifecycle",
    "trigger": "`createEffect` called without the effect function",
    "repair": "`createEffect(compute)` with a single argument is not supported.",
    "guideUrl": "https://v2.solidjs.com/reference/solid-js/diagnostics/missing-effect-fn"
  },
  {
    "code": "NO_OWNER_BOUNDARY",
    "kind": ["lifecycle"],
    "severity": ["warn"],
    "category": "lifecycle",
    "trigger": "Boundary created without owner",
    "repair": "A boundary was created outside any reactive context.",
    "guideUrl": "https://v2.solidjs.com/reference/solid-js/diagnostics/no-owner-boundary"
  },
  {
    "code": "NO_OWNER_CLEANUP",
    "kind": ["lifecycle"],
    "severity": ["warn"],
    "category": "lifecycle",
    "trigger": "`onCleanup` called without owner",
    "repair": "`onCleanup` was called outside a reactive context; the callback will never run.",
    "guideUrl": "https://v2.solidjs.com/reference/solid-js/diagnostics/no-owner-cleanup"
  },
  {
    "code": "NO_OWNER_EFFECT",
    "kind": ["lifecycle"],
    "severity": ["warn"],
    "category": "lifecycle",
    "trigger": "Effect created without reactive owner",
    "repair": "An effect was created outside any reactive context (no root, no component).",
    "guideUrl": "https://v2.solidjs.com/reference/solid-js/diagnostics/no-owner-effect"
  },
  {
    "code": "ON_FLUSH_IN_OWNED_SCOPE",
    "kind": ["lifecycle"],
    "severity": ["warn"],
    "category": "lifecycle",
    "trigger": "`onFlush` called in a component body or computation (meant for event handlers and effect callbacks)",
    "repair": "`onFlush` was called in a component body or a computation; it is meant for event handlers and effect callbacks.",
    "guideUrl": "https://v2.solidjs.com/reference/solid-js/diagnostics/on-flush-in-owned-scope"
  },
  {
    "code": "OPTIMISTIC_REVERTED",
    "kind": ["responsiveness"],
    "severity": ["info"],
    "category": "responsiveness",
    "trigger": "An optimistic value the screen showed was replaced by a different one — reverted at settle, or superseded by the truth (attribution enabled)",
    "repair": "An optimistic value the screen showed was replaced by a different one: the person saw the guess, then the correction.",
    "guideUrl": "https://v2.solidjs.com/reference/solid-js/diagnostics/optimistic-reverted"
  },
  {
    "code": "OPTIMISTIC_WRITE_BEFORE_LOAD",
    "kind": ["write"],
    "severity": ["error"],
    "category": "write",
    "trigger": "Optimistic write to a source whose first answer has not landed; no guess is made",
    "repair": "An optimistic setter ran before its source's first answer landed (`createOptimistic(async fn)`, or `createOptimisticStore(fn, seed)` whose derive has not landed — the seed does not count).",
    "guideUrl": "https://v2.solidjs.com/reference/solid-js/diagnostics/optimistic-write-before-load"
  },
  {
    "code": "PENDING_ASYNC_FORBIDDEN_SCOPE",
    "kind": ["async"],
    "severity": ["warn"],
    "category": "async",
    "trigger": "Pending async read in trackedEffect/onSettled",
    "repair": "A pending async value was read inside `createTrackedEffect` or `onSettled`, which cannot suspend — it throws.",
    "guideUrl": "https://v2.solidjs.com/reference/solid-js/diagnostics/pending-async-forbidden-scope"
  },
  {
    "code": "PENDING_ASYNC_UNTRACKED_READ",
    "kind": ["async"],
    "severity": ["error"],
    "category": "async",
    "trigger": "Reading pending async outside tracking scope",
    "repair": "Same shape as above but the value was a pending async computation, so there is nothing to read yet at all.",
    "guideUrl": "https://v2.solidjs.com/reference/solid-js/diagnostics/pending-async-untracked-read"
  },
  {
    "code": "PRELOAD_DESCRIPTOR_INVALID",
    "kind": ["head"],
    "severity": ["warn"],
    "category": "head",
    "trigger": "`registerAsset(\"preload\")` descriptor broke a field rule; link dropped or field ignored (dev)",
    "repair": "A `registerAsset(\"preload\")` descriptor broke a field rule (`data.field` names it — a missing `as`, a non-string `href`, a malformed `imagesrcset`) and the link was dropped or the field ignored.",
    "guideUrl": "https://v2.solidjs.com/reference/solid-js/diagnostics/preload-descriptor-invalid"
  },
  {
    "code": "PRIMITIVE_IN_EFFECT_CALLBACK",
    "kind": ["lifecycle"],
    "severity": ["error"],
    "category": "lifecycle",
    "trigger": "Memo, effect, or root created inside an effect callback or its cleanup, where there is no ambient owner (throws)",
    "repair": "A memo, effect, or root was created without an owner inside an effect callback or its cleanup.",
    "guideUrl": "https://v2.solidjs.com/reference/solid-js/diagnostics/primitive-in-effect-callback"
  },
  {
    "code": "PRIMITIVE_IN_FORBIDDEN_SCOPE",
    "kind": ["lifecycle"],
    "severity": ["error"],
    "category": "lifecycle",
    "trigger": "Reactive primitive created inside trackedEffect/onSettled",
    "repair": "Reactive primitives cannot be created inside `createTrackedEffect` or owner-backed `onSettled`.",
    "guideUrl": "https://v2.solidjs.com/reference/solid-js/diagnostics/primitive-in-forbidden-scope"
  },
  {
    "code": "REACTIVE_WRITE_IN_OWNED_SCOPE",
    "kind": ["write"],
    "severity": ["error"],
    "category": "write",
    "trigger": "Reactive write/invalidation inside component/computation",
    "repair": "A signal/store write (or `refresh()`) executed during an owned scope — a component body or a computation.",
    "guideUrl": "https://v2.solidjs.com/reference/solid-js/diagnostics/reactive-write-in-owned-scope"
  },
  {
    "code": "REACTIVITY_HALTED",
    "kind": ["error"],
    "severity": ["error"],
    "category": "error",
    "trigger": "Uncaught error escaped every boundary; scheduling stopped (reported, cause to `reportError`)",
    "repair": "An earlier uncaught error halted the reactive system; subsequent updates are ignored.",
    "guideUrl": "https://v2.solidjs.com/reference/solid-js/diagnostics/reactivity-halted"
  },
  {
    "code": "REVEAL_IN_RENDER_TO_STRING",
    "kind": ["ssr"],
    "severity": ["warn"],
    "category": "ssr",
    "trigger": "Nested `<Reveal>` with collapsed/together under `renderToString` (dev)",
    "repair": "Nested `<Reveal>` with `collapsed`/`together` needs a stream to coordinate on; `renderToString` has none.",
    "guideUrl": "https://v2.solidjs.com/reference/solid-js/diagnostics/reveal-in-render-to-string"
  },
  {
    "code": "RUN_WITH_DISPOSED_OWNER",
    "kind": ["owner"],
    "severity": ["warn"],
    "category": "owner",
    "trigger": "`runWithOwner` with disposed owner",
    "repair": "`runWithOwner` received an owner that was already disposed; anything created inside leaks.",
    "guideUrl": "https://v2.solidjs.com/reference/solid-js/diagnostics/run-with-disposed-owner"
  },
  {
    "code": "SERVER_ERROR_SANITIZED",
    "kind": ["ssr"],
    "severity": ["error", "info"],
    "category": "ssr",
    "trigger": "Error replaced with the generic Error on the wire — `data.source` `\"server-function\"` (`error`) or `\"ssr\"` (`info`); `data.error` is the original (observe + dev)",
    "repair": "The production wire replaced an error with the generic `Error`; `data.error` is the original, `data.wire` what the client got, and `data.source` says which road:",
    "guideUrl": "https://v2.solidjs.com/reference/solid-js/diagnostics/server-error-sanitized"
  },
  {
    "code": "SERVER_WRITE",
    "kind": ["write"],
    "severity": ["warn"],
    "category": "write",
    "trigger": "Signal/store/optimistic setter ran during a server render; inert, will throw (dev; once per category)",
    "repair": "A signal, store or optimistic setter ran during a server render.",
    "guideUrl": "https://v2.solidjs.com/reference/solid-js/diagnostics/server-write"
  },
  {
    "code": "SETTLED_CLEANUP_UNOWNED",
    "kind": ["lifecycle"],
    "severity": ["error"],
    "category": "lifecycle",
    "trigger": "`onSettled` returned a cleanup in an unowned (out-of-band) scope",
    "repair": "`onSettled` returned a cleanup while running in an unowned scope, so the cleanup cannot be honored.",
    "guideUrl": "https://v2.solidjs.com/reference/solid-js/diagnostics/settled-cleanup-unowned"
  },
  {
    "code": "SETTLE_WALK_UNINITIALIZED_SOURCE",
    "kind": ["lifecycle"],
    "severity": ["error"],
    "category": "lifecycle",
    "trigger": "Internal: settle walk reached a source that never produced a value (reported)",
    "repair": "The runtime tried to settle a source before it produced a value or an error.",
    "guideUrl": "https://v2.solidjs.com/reference/solid-js/diagnostics/settle-walk-uninitialized-source"
  },
  {
    "code": "SILENT_HOLD",
    "kind": ["responsiveness"],
    "severity": ["info", "warn"],
    "category": "responsiveness",
    "trigger": "Write held 100ms+/200ms+ by pending async with no on-screen acknowledgement (attribution enabled)",
    "repair": "A write landed on async work, so the runtime held it (and everything derived from it) until the data came back — that hold is correct; it is what keeps the screen from tearing.",
    "guideUrl": "https://v2.solidjs.com/reference/solid-js/diagnostics/silent-hold"
  },
  {
    "code": "SSR_BOUNDARY_WATERFALL",
    "kind": ["ssr"],
    "severity": ["info", "warn"],
    "category": "ssr",
    "trigger": "A `<Loading>` boundary needed 3+/4+ render passes — 2+/3+ sequential async waits (dev)",
    "repair": "A `<Loading>` boundary rendered in `data.passes` passes — discovery, then one per wait — and each pass past the first is a read that could only start once the previous pass's async answered: `passes - 1` sequential waits, `data.sequentialMs` end to end.",
    "guideUrl": "https://v2.solidjs.com/reference/solid-js/diagnostics/ssr-boundary-waterfall"
  },
  {
    "code": "SSR_CLIENT_CONTENT_MASKED",
    "kind": ["ssr"],
    "severity": ["warn"],
    "category": "ssr",
    "trigger": "Client-only content in a `<Loading>` surfaced only after a server wait; the server's work was discarded (dev)",
    "repair": "A `<Loading>` boundary's content turned out to be client-only (a `ssrSource: \"client\"` read) but only after `data.passes - 1` real server waits: an async read on an earlier pass masked it.",
    "guideUrl": "https://v2.solidjs.com/reference/solid-js/diagnostics/ssr-client-content-masked"
  },
  {
    "code": "SSR_LIVE_HOLE_LATCHED",
    "kind": ["ssr"],
    "severity": ["warn"],
    "category": "ssr",
    "trigger": "A live hole that shipped its markers was closed by the impurity gate on re-run and stopped updating (dev)",
    "repair": "A live markup hole (or attribute) in a server component shipped its markers and then stopped updating: re-running it created a reactive scope still waiting on async work (`data.cause: \"owners\"`), so the runtime closed it and the client keeps the markup it last received.",
    "guideUrl": "https://v2.solidjs.com/reference/solid-js/diagnostics/ssr-live-hole-latched"
  },
  {
    "code": "SSR_RENDER_ERROR_CONTAINED",
    "kind": ["ssr"],
    "severity": ["error"],
    "category": "ssr",
    "trigger": "Server render error routed by a boundary: `data.handling` fallback / client / failed (observe + dev)",
    "repair": "A component threw during a server render and a boundary routed the error; `data.handling` says how.",
    "guideUrl": "https://v2.solidjs.com/reference/solid-js/diagnostics/ssr-render-error-contained"
  },
  {
    "code": "SSR_STREAM_ABANDONED",
    "kind": ["ssr"],
    "severity": ["warn"],
    "category": "ssr",
    "trigger": "Response stream cancelled or sink failed with fragments pending (observe + dev)",
    "repair": "The client went away (`data.reason: \"consumer\"`), the sink failed (`\"sink\"`), or the request's `signal` aborted (`\"signal\"` — `renderToStream`'s `signal` option, how a frame-stream response learns its reader is gone) while `data.pendingFragments` were still rendering; the render was torn down.",
    "guideUrl": "https://v2.solidjs.com/reference/solid-js/diagnostics/ssr-stream-abandoned"
  },
  {
    "code": "SSR_SUBTREE_ABANDONED",
    "kind": ["ssr"],
    "severity": ["warn"],
    "category": "ssr",
    "trigger": "A failed fragment's pending descendants were discarded (observe + dev)",
    "repair": "A fragment failed with descendants still pending, and their work (fetches, serialized values — the counts are in `data`) was thrown away; the client rebuilds the subtree.",
    "guideUrl": "https://v2.solidjs.com/reference/solid-js/diagnostics/ssr-subtree-abandoned"
  },
  {
    "code": "SSR_UNDECLARED_LIVE_SOURCE",
    "kind": ["ssr"],
    "severity": ["warn"],
    "category": "ssr",
    "trigger": "A document render is still pumping an async iterable in server-component scope 5s in — declare the function `live(...)` or bound the source (dev)",
    "repair": "A server component rendered into a document read an async iterable that was still producing `data.afterMs` (5s) later: an undeclared unbounded source pumps into the document and holds it open for as long as it produces.",
    "guideUrl": "https://v2.solidjs.com/reference/solid-js/diagnostics/ssr-undeclared-live-source"
  },
  {
    "code": "STACKED_HOLDS",
    "kind": ["responsiveness"],
    "severity": ["warn"],
    "category": "responsiveness",
    "trigger": "3+ interactions were waiting in one hold when it committed — repeats piled behind the same source (attribution enabled)",
    "repair": "`data.interactions` interactions were waiting in the same hold when it committed: the person clicked or typed again while the first answer was in the air, and the runtime folded every repeat into one wait on the same source (`data.blockers`).",
    "guideUrl": "https://v2.solidjs.com/reference/solid-js/diagnostics/stacked-holds"
  },
  {
    "code": "STORE_WRITE_OUTSIDE_SETTER",
    "kind": ["write"],
    "severity": ["warn"],
    "category": "write",
    "trigger": "Store proxy written, deleted from, or defined on outside its setter; the write is ignored (once per store object and key)",
    "repair": "A store proxy was written, deleted from, or had a property defined on it outside its setter — `store.n = 5`, `store.items.push(x)`, `delete store.user` — and the write was ignored.",
    "guideUrl": "https://v2.solidjs.com/reference/solid-js/diagnostics/store-write-outside-setter"
  },
  {
    "code": "STRICT_READ_UNTRACKED",
    "kind": ["strict-read"],
    "severity": ["warn"],
    "category": "strict-read",
    "trigger": "Untracked reactive read in component/effect body",
    "repair": "A reactive value was read outside any tracking scope (e.g. destructured props or a signal called in the component body).",
    "guideUrl": "https://v2.solidjs.com/reference/solid-js/diagnostics/strict-read-untracked"
  },
  {
    "code": "SYNC_NODE_RECEIVED_ASYNC",
    "kind": ["lifecycle"],
    "severity": ["error"],
    "category": "lifecycle",
    "trigger": "`sync: true` computation returned a Promise / AsyncIterable",
    "repair": "A computed/effect created with `sync: true` returned a Promise or AsyncIterable; the value would be stored as-is, never awaited, in production.",
    "guideUrl": "https://v2.solidjs.com/reference/solid-js/diagnostics/sync-node-received-async"
  },
  {
    "code": "UNCOMMITTED_INPUT_OVERWRITTEN",
    "kind": ["render"],
    "severity": ["warn"],
    "category": "render",
    "trigger": "A stateful property binding (`value`/`checked`/…) re-wrote an unchanged value over an edit the user never committed to the signal (dev; client)",
    "repair": "A stateful property binding (`value`/`checked` on an input, `value` on a textarea, `selected` on an option, `muted` on media) re-wrote the value it wrote last time over an edit the user made and never committed to the bound signal — the typed text (or toggled box) is lost.",
    "guideUrl": "https://v2.solidjs.com/reference/solid-js/diagnostics/uncommitted-input-overwritten"
  },
  {
    "code": "UNRECOGNIZED_INSERT_VALUE",
    "kind": ["render"],
    "severity": ["warn"],
    "category": "render",
    "trigger": "Value at an insert position the renderer cannot render; skipped (dev; server and client)",
    "repair": "A value the renderer cannot render (a plain object, a symbol — `data.type`) sat at an insert position and was skipped, on either platform.",
    "guideUrl": "https://v2.solidjs.com/reference/solid-js/diagnostics/unrecognized-insert-value"
  },
  {
    "code": "UNSCOPED_HOLE_ALLOCATED_IDS",
    "kind": ["render"],
    "severity": ["warn"],
    "category": "render",
    "trigger": "Unscoped hole was handed a function whose content took ids at a position the other side does not share; keys permute (dev)",
    "repair": "A JSX hole was handed a **function** (`data.name`) instead of a value — `const renderHead = () => props.header; <div>{renderHead}</div>` — and calling it built hydratable content.",
    "guideUrl": "https://v2.solidjs.com/reference/solid-js/diagnostics/unscoped-hole-allocated-ids"
  },
  {
    "code": "UNSTABLE_LIST_IDENTITY",
    "kind": ["perf"],
    "severity": ["warn"],
    "category": "perf",
    "trigger": "`mapArray`/`For` recreated rows for equivalent items (attribution enabled)",
    "repair": "A `mapArray`/`<For>` update disposed and recreated most rows while the entering items were field-for-field equivalent to the ones they replaced: a re-fetch (or a spread-copy, see above) handed back fresh objects for the same records, and identity keying treated each as a new row — DOM, state, focus, and scroll position thrown away and rebuilt.",
    "guideUrl": "https://v2.solidjs.com/reference/solid-js/diagnostics/unstable-list-identity"
  },
  {
    "code": "UNSTABLE_MEMO_OUTPUT",
    "kind": ["perf"],
    "severity": ["warn"],
    "category": "perf",
    "trigger": "Memo returned a new-but-equivalent container 4+ runs running (attribution enabled)",
    "repair": "A memo keeps producing referentially-new but shallowly-equivalent objects/arrays, so its equality gate never closes and every subscriber re-runs on every upstream change.",
    "guideUrl": "https://v2.solidjs.com/reference/solid-js/diagnostics/unstable-memo-output"
  },
  {
    "code": "UNTRACKED_ASYNC_HANDLER",
    "kind": ["responsiveness"],
    "severity": ["info", "warn"],
    "category": "responsiveness",
    "trigger": "Handler awaited 100ms+/200ms+ past its frame with no write before the `await` and no `action()`: a dead click no hold could judge (attribution enabled)",
    "repair": "The dead click that is not a hold.",
    "guideUrl": "https://v2.solidjs.com/reference/solid-js/diagnostics/untracked-async-handler"
  },
  {
    "code": "UNTRACKED_READ_AFTER_AWAIT",
    "kind": ["async"],
    "severity": ["warn"],
    "category": "async",
    "trigger": "Async computation first read a signal/memo/store key after an `await`; never a dependency (dev; V8 engines only)",
    "repair": "An async computation read a signal, memo, or store property for the first time after an `await`.",
    "guideUrl": "https://v2.solidjs.com/reference/solid-js/diagnostics/untracked-read-after-await"
  },
  {
    "code": "WASTED_RECOMPUTE",
    "kind": ["perf"],
    "severity": ["warn"],
    "category": "perf",
    "trigger": "80%+ of a scope's 5+ runs in a second produced an unchanged value for 2ms+ of compute — inputs change, result does not (attribution enabled)",
    "repair": "The mirror of `UNSTABLE_MEMO_OUTPUT`: this scope's equality gate closes almost every time.",
    "guideUrl": "https://v2.solidjs.com/reference/solid-js/diagnostics/wasted-recompute"
  },
  {
    "code": "WIDE_SCOPE_DEPS",
    "kind": ["perf"],
    "severity": ["warn"],
    "category": "perf",
    "trigger": "Scope subscribed to 200+ sources (attribution cost checks on)",
    "repair": "Attribution engine cost checks only: a scope is subscribed to 200 or more sources (it re-warns on 50% further growth).",
    "guideUrl": "https://v2.solidjs.com/reference/solid-js/diagnostics/wide-scope-deps"
  }
]
