{"version":3,"sources":["../core/kind-schema.types.ts","../core/discriminator.ts","../core/ir-types.ts","../core/ir-tree.ts","../core/fingerprint.ts","../core/json-tokenizer.ts","../core/kind-snapshot.ts","../core/kind-parser.ts","../session/parse-session.ts","../session/session-manager.ts"],"names":["fieldSchema"],"mappings":"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","file":"session.cjs","sourcesContent":["/**\n * KindSchema — the data-defined field model for a registered kind.\n *\n * `__kind` (KIND_KEY) is the carried discriminator: it is NOT part of a\n * kind's field map; the parser enforces it via `KindSchema.kind` and stamps\n * it onto every compliant snapshot.\n *\n * Moved from app/(dev)/demos/json-block-detector/kind-schemas.ts.\n *\n * 2026-07-15 expressivity extension (A2) — four constructs the Python-owned\n * pydantic schemas need that the v1 vocabulary could not express:\n *   - `{type:\"json\"}` / `{type:\"json[]\"}` — any JSON value / array of any\n *     JSON values (pydantic bare `Any` fields, `items: {}` arrays, `{}`\n *     schemas). A `json` value is implicitly nullable — `null` IS a JSON\n *     value — so `nullable` is meaningless (and ignored) on it.\n *   - `record` values widened to `\"json\"` (pydantic `dict[str, Any]` /\n *     `additionalProperties: true`).\n *   - `union` may now carry `kinds` (object unions — anyOf over kind refs,\n *     optionally mixed with scalars). Refs externalize to `kind_edge` rows\n *     exactly like `array.itemKinds`.\n *   - `KindSchema.root` — a NON-OBJECT root form: the kind's VALUE is the\n *     root field itself (scalar / array / json / open object), not a `__kind`\n *     object with fields. Root-form kinds are data-only: the streaming\n *     `__kind` parser cannot type them (a scalar cannot carry a\n *     discriminator) and refuses them loudly; validation goes through the\n *     emitted JSON Schema (ajv / Pydantic). `root` and a non-empty `fields`\n *     are mutually exclusive.\n *   - `inline_object.open` — `additionalProperties: true`; fixes the\n *     open-empty-object defect where an open `inline_object{fields:{}}`\n *     materialized as CLOSED (schema_proposal / item_presentation class).\n *\n * 2026-07-15 input-semantics extension (W3-A, agent-input bridge) — the\n * constructs the Wave-1 sufficiency survey of all 1,529 live agent variables\n * showed FieldSchema could not carry, added so `AgentVariable` ⇄ kind\n * conversion is faithful:\n *   - `FieldBase.description` — human guidance; round-trips JSON Schema\n *     `description` and VariableDefinition `helpText`.\n *   - `FieldBase.default` — the field's default VALUE (JSON Schema `default`,\n *     VariableDefinition `defaultValue`). Annotation-level: validators never\n *     apply it; emitters carry it verbatim.\n *   - `enum.open` — \"one of these options OR any string\" (the FE's\n *     `allowOther`). Emits as `anyOf: [{type:\"string\", enum}, {type:\"string\"}]`\n *     so the option set survives instead of widening to bare `string`.\n *   - `number` bounds `min`/`max`/`step` — JSON Schema\n *     `minimum`/`maximum`/`multipleOf` (number/slider components).\n *   - `string[].values` (+ `open`) — an items-enum: array of strings drawn\n *     from an option set (checkbox components), `open` meaning the set is\n *     advisory (`allowOther` on a multi-select).\n * Picklist bindings, scope bindings, and media component identity are\n * PROVENANCE, not structure — they never enter FieldSchema; the bridge\n * carries them out-of-band (see convert/kind-variable-bridge.ts sidecar).\n */\n\n/** System discriminator — hardcoded, not part of per-kind field schemas. */\nexport const KIND_KEY = \"__kind\";\n\nexport type ScalarFieldType = \"string\" | \"number\" | \"boolean\";\n\nexport type ArrayItemScalarType = \"string\" | \"number\" | \"boolean\";\n\n/** Value domain of a `record` field — typed scalars, or any JSON value. */\nexport type RecordValueType = ArrayItemScalarType | \"json\";\n\ntype FieldBase = {\n  required?: boolean;\n  nullable?: boolean;\n  /** Human guidance — JSON Schema `description` / variable `helpText`. */\n  description?: string;\n  /**\n   * Default VALUE (JSON Schema `default` / variable `defaultValue`).\n   * Annotation-level: validators never apply it; emitters carry it verbatim.\n   */\n  default?: unknown;\n};\n\nexport type FieldSchema =\n  | (FieldBase & { type: \"string\" | \"boolean\" })\n  | (FieldBase & {\n      type: \"number\";\n      /** Inclusive lower bound — JSON Schema `minimum`. */\n      min?: number;\n      /** Inclusive upper bound — JSON Schema `maximum`. */\n      max?: number;\n      /** Increment — JSON Schema `multipleOf`. Annotation-level in the parser. */\n      step?: number;\n    })\n  | (FieldBase & {\n      type: \"string[]\";\n      /** Items-enum: each item must be one of these values (checkbox option sets). */\n      values?: string[];\n      /** With `values`: the set is advisory — any string item is also legal (`allowOther`). */\n      open?: boolean;\n    })\n  | (FieldBase & { type: \"number[]\" | \"boolean[]\" })\n  | (FieldBase & { type: \"json\" })\n  | (FieldBase & { type: \"json[]\" })\n  | (FieldBase & { type: \"array\"; itemKinds: string[] })\n  | (FieldBase & { type: \"object\"; kind: string })\n  | (FieldBase & {\n      type: \"inline_object\";\n      fields: Record<string, FieldSchema>;\n      /** additionalProperties: true — unknown keys are legal, not residue-only. */\n      open?: boolean;\n    })\n  | (FieldBase & { type: \"record\"; values: RecordValueType })\n  | (FieldBase & {\n      type: \"enum\";\n      values: string[];\n      /** \"One of these OR any string\" — the option set is advisory (`allowOther`). */\n      open?: boolean;\n    })\n  | (FieldBase & {\n      type: \"union\";\n      scalars: Array<\"string\" | \"number\" | \"boolean\">;\n      /** Object union members — kind refs (anyOf of $refs), may mix with scalars. */\n      kinds?: string[];\n    });\n\n/**\n * Domain fields only — __kind is enforced by the parser via KindSchema.kind\n * (block slug). A kind with `root` set has NO field map (fields stays `{}`):\n * its value is the root field's type at the top level. See the module header.\n */\nexport type KindSchema = {\n  kind: string;\n  fields: Record<string, FieldSchema>;\n  /** Non-object root form — mutually exclusive with a non-empty `fields`. */\n  root?: FieldSchema;\n};\n\nexport function readObjectKind(value: Record<string, unknown>): string | null {\n  const kind = value[KIND_KEY];\n  return typeof kind === \"string\" ? kind : null;\n}\n\nexport function isScalarArrayType(\n  type: FieldSchema[\"type\"],\n): type is \"string[]\" | \"number[]\" | \"boolean[]\" {\n  return type === \"string[]\" || type === \"number[]\" || type === \"boolean[]\";\n}\n\nexport function scalarArrayItemType(\n  type: \"string[]\" | \"number[]\" | \"boolean[]\",\n): ArrayItemScalarType {\n  if (type === \"number[]\") return \"number\";\n  if (type === \"boolean[]\") return \"boolean\";\n  return \"string\";\n}\n\n/**\n * Does this field's value domain accept ANY JSON shape (object/array/scalar/\n * null alike)? True for `json` and `json[]` ITEMS — the parser treats the\n * subtree under such a field as opaque (no kind identification, no raw_object\n * degradation: unknown structure is the declared contract, not a failure).\n */\nexport function isJsonAnyField(field: FieldSchema): boolean {\n  return field.type === \"json\" || field.type === \"json[]\";\n}\n","/**\n * Discriminator abstraction — how a node's kind is established from the wire.\n *\n * The parser never hardcodes \"kind comes from a JSON key\". JSON resolves via\n * the `__kind` field (implemented today); XML resolves via tag → registry\n * alias (Phase 6 — contract only). `IrStructuredNode.discriminator` records\n * which resolver produced each node so renderers and round-trip serializers\n * can reconstruct the original wire format per node.\n */\n\nimport type { IrDiscriminator } from \"./ir-types\";\nimport { KIND_KEY } from \"./kind-schema.types\";\n\nexport const JSON_DISCRIMINATOR: IrDiscriminator = {\n  format: \"json\",\n  key: KIND_KEY,\n};\n\nexport function xmlDiscriminator(tag: string): IrDiscriminator {\n  return { format: \"xml\", tag };\n}\n\nexport function fenceDiscriminator(language: string): IrDiscriminator {\n  return { format: \"fence\", language };\n}\n\n/** What a resolver can say about an opening compound value. */\nexport type KindResolution =\n  | { outcome: \"kind\"; kind: string }\n  | { outcome: \"pending\" }\n  | { outcome: \"raw\"; reason: string };\n","/**\n * The canonical IR contract for structured content.\n *\n * Every source (live agent stream, DB reload, Python-preprocessed results,\n * notes, any future surface) is normalized into these shapes exactly once.\n * Anything already carrying this IR passes through downstream layers by\n * reference — see `core/normalize.ts` for the idempotence law.\n *\n * This file is pure types + path helpers. No React, no Redux, no IO.\n */\n\n/** Path of a value inside a parsed region (object keys + array indices). */\nexport type IrPath = Array<string | number>;\n\n/**\n * How a node's kind was (or wasn't) established.\n *\n * 🚨 `unverified` IS NOT `raw`, AND THE DIFFERENCE IS LOAD-BEARING (Arman's\n * ruling, 2026-08-29). \"We checked it and it is wrong\" and \"we had nothing to\n * check it with\" are opposite facts about a payload, and collapsing them cost\n * ~221 live kinds their component overnight: a kind whose schema never loaded\n * degraded to `raw`, the render route read `raw` as \"broken instance\", and\n * perfectly valid payloads were dumped as key/value lists instead of reaching\n * the component the user built. A consumer that treats `unverified` as a\n * failure is reintroducing that outage — the data is intact and MAY be\n * entirely valid; all that is missing is the schema that would prove it.\n */\nexport type IrKindState =\n  | \"resolved\" // __kind seen + schema validated\n  | \"speculative\" // committed from parent itemKinds before __kind arrived\n  | \"pending_kind\" // object open, no __kind yet, no speculation possible\n  | \"pending_schema\" // kind known, registry cold-fetch in flight\n  | \"unverified\" // kind known, NO schema was ever available — never checked\n  | \"raw\"; // checked and FAILED, or structurally broken\n\n/**\n * System-level zero-data-loss channel. Unknown keys are NEVER merged into a\n * node's `value` (they'd be indistinguishable from schema fields); they are\n * carried here verbatim — Protobuf unknown-fields discipline. Distinct from\n * any domain-level `additionalDetails` field, which is an ordinary schema\n * field inside `value`.\n */\nexport interface IrResidue {\n  /** Keys present in the source object but absent from the kind schema. */\n  extra: Record<string, unknown> | null;\n  /** Optional schema fields the source never provided. */\n  optionalMissing: string[] | null;\n  /** Structured warnings attached during parsing (speculation backtracks, truncation, …). */\n  notices: Array<{ code: string; message: string; at?: number }> | null;\n}\n\n/** Which wire syntax carried the kind discriminator for a node. */\nexport type IrDiscriminator =\n  | { format: \"json\"; key: \"__kind\" }\n  | { format: \"xml\"; tag: string }\n  | { format: \"fence\"; language: string };\n\n/** A schema-shaped structured node. Children live inside `value` (and carry their own metadata via `nodeIndex`). */\nexport interface IrStructuredNode {\n  role: \"structured\";\n  /** Canonical kind slug. Empty string while pending. */\n  kind: string;\n  kindState: IrKindState;\n  discriminator: IrDiscriminator;\n  /** Region-relative path ([] = region root). */\n  path: IrPath;\n  status: \"streaming\" | \"complete\" | \"error\";\n  /** Compliant snapshot: schema fields + __kind ONLY. Unknown keys → residue. */\n  value: Record<string, unknown>;\n  residue: IrResidue | null;\n}\n\n/** Envelope version. Bump = migration point for persisted envelopes. */\nexport const IR_VERSION = 1 as const;\n\n/** Reserved key carrying the envelope inside RenderBlockPayload.data. */\nexport const IR_ENVELOPE_KEY = \"__ir\" as const;\n\n/**\n * One parsed region's canonical form. Serializable (plain JSON), carried on\n * render blocks (`data.__ir`), persisted on artifacts and message metadata,\n * and — with `engine: \"py-block-detector\"` — accepted pre-built from Python.\n */\nexport interface CanonicalBlockIR {\n  v: typeof IR_VERSION;\n  /** Provenance: which implementation produced this envelope. */\n  engine: \"fe-kind-parser\" | \"py-block-detector\";\n  /** Stable hash of the region source text — the idempotence / cache key. */\n  fingerprint: string;\n  root: IrStructuredNode;\n  /**\n   * pathKey → node metadata for per-path readers (child kinds under root).\n   * Carries each child node's residue — child snapshot values inside\n   * `root.value` hold schema fields only, so WITHOUT this the envelope would\n   * silently drop nested unknown keys (zero-data-loss violation).\n   */\n  nodeIndex?: Record<\n    string,\n    Pick<IrStructuredNode, \"kind\" | \"kindState\" | \"status\"> & {\n      residue?: IrResidue | null;\n    }\n  >;\n}\n\n/** Normalizer output segment: prose stays raw text; structured regions carry IR. */\nexport type CanonicalSegment =\n  | { role: \"text\"; content: string }\n  | {\n      role: \"block\";\n      blockType: string;\n      content: string;\n      ir: CanonicalBlockIR | null;\n    };\n\nexport interface CanonicalContent {\n  v: typeof IR_VERSION;\n  segments: CanonicalSegment[];\n}\n\n// ---------------------------------------------------------------------------\n// Path helpers — the ONE implementation. Consumers must not roll their own.\n// ---------------------------------------------------------------------------\n\nexport function irPathKey(path: IrPath): string {\n  return path.map((segment) => String(segment)).join(\".\");\n}\n\nexport function irPathsEqual(left: IrPath, right: IrPath): boolean {\n  if (left.length !== right.length) return false;\n  for (let i = 0; i < left.length; i++) {\n    if (left[i] !== right[i]) return false;\n  }\n  return true;\n}\n\nexport function irPathIsUnderOrEqual(path: IrPath, prefix: IrPath): boolean {\n  if (path.length < prefix.length) return false;\n  for (let i = 0; i < prefix.length; i++) {\n    if (path[i] !== prefix[i]) return false;\n  }\n  return true;\n}\n\n/** Human label for a path (\"root\", \"cards[2].front\"). */\nexport function irPathLabel(path: IrPath): string {\n  if (path.length === 0) return \"root\";\n\n  const parts: string[] = [];\n  for (const segment of path) {\n    if (typeof segment === \"number\") {\n      parts[parts.length - 1] += `[${segment}]`;\n    } else {\n      parts.push(String(segment));\n    }\n  }\n  return parts.join(\".\");\n}\n\n/** True when every residue channel is empty — normalize to null instead. */\nexport function isEmptyResidue(residue: IrResidue): boolean {\n  return (\n    (residue.extra === null || Object.keys(residue.extra).length === 0) &&\n    (residue.optionalMissing === null ||\n      residue.optionalMissing.length === 0) &&\n    (residue.notices === null || residue.notices.length === 0)\n  );\n}\n","/**\n * IrTree — the immutable, structurally-shared view of a parsed region.\n *\n * Consumes KindStreamEvents and maintains one node per kind-resolved path.\n * Node values are STABILIZED: compound children that are themselves kind\n * nodes are substituted by their current tree value, so an update to\n * cards[7] produces new identities for root → cards → cards[7] ONLY;\n * cards[0..6] keep referential identity and memoized components bail out.\n *\n * Parser frame values are NEVER exposed — everything handed out is rebuilt\n * copy-on-write, so it is safe to freeze (Redux dev-mode immutability) and\n * safe to hold across renders.\n *\n * Both the live ParseSession and the one-shot normalizer build their\n * CanonicalBlockIR from this tree — one assembly path, structurally\n * identical output for stream and static input.\n */\n\nimport { JSON_DISCRIMINATOR } from \"./discriminator\";\nimport {\n  IR_VERSION,\n  irPathKey,\n  type CanonicalBlockIR,\n  type IrKindState,\n  type IrPath,\n  type IrResidue,\n  type IrStructuredNode,\n} from \"./ir-types\";\nimport type { KindStreamEvent, RawObjectCause } from \"./kind-parser\";\n\nexport interface IrTreeNode {\n  kind: string;\n  kindState: IrKindState;\n  path: IrPath;\n  pathKey: string;\n  /** Stabilized immutable snapshot value (schema fields + __kind only). */\n  value: Record<string, unknown>;\n  residue: IrResidue | null;\n  complete: boolean;\n  /** Bumps on every update to this node (incl. child propagation). */\n  version: number;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\n/**\n * THE NO-REGRESSION LAW: a value already shown to a user is never taken away.\n *\n * A degrade (raw_object) or a late completion carries the parser's plain view\n * of a node, which can be POORER than the snapshot the tree already holds —\n * `{}` in the worst case, when a root object closes and its schema was never\n * satisfied. Overwriting with it blanks a fully-rendered block mid-stream.\n * Incoming keys win; prior keys the incoming lacks survive.\n *\n * Returns the merged value plus whether prior fields had to be rescued —\n * a rescue means a real defect upstream and is reported on the envelope as a\n * `degrade_data_rescued` notice, never silently absorbed.\n */\nfunction mergeWithoutLoss(\n  prior: unknown,\n  incoming: unknown,\n): { value: unknown; rescued: string[] } {\n  if (!isRecord(prior)) return { value: incoming, rescued: [] };\n  if (!isRecord(incoming)) {\n    // A real array/scalar is a genuine shape change, not a blanking; only\n    // nothing-at-all loses to what we already have.\n    if (incoming !== null && incoming !== undefined) {\n      return { value: incoming, rescued: [] };\n    }\n    return { value: prior, rescued: Object.keys(prior) };\n  }\n  const rescued = Object.keys(prior).filter((key) => !(key in incoming));\n  if (rescued.length === 0) return { value: incoming, rescued };\n  return { value: { ...prior, ...incoming }, rescued };\n}\n\nexport class IrTree {\n  private readonly nodes = new Map<string, IrTreeNode>();\n  private readonly rawPaths = new Map<string, string>(); // pathKey → reason\n  private readonly dirty = new Set<string>();\n\n  /**\n   * KIND PRESERVATION (streaming db/cloud kinds): pathKey → identified kind\n   * for nodes whose kind is KNOWN (kind_identified / pending_schema) but that\n   * have no snapshot node yet because the schema is still cold-fetching.\n   * Without this, the envelope reports `kind: \"\"` for the whole pending\n   * window and the render seam can only show raw JSON.\n   */\n  private readonly identifiedKinds = new Map<string, string>();\n  /** pathKeys currently waiting on a schema cold fetch. */\n  private readonly pendingSchemaPaths = new Set<string>();\n  /**\n   * Early top-level scalar fields (title, loading_message, …) captured for\n   * identified-but-schema-pending nodes — the loading-component fuel. Scalars\n   * only (no live parser references can escape through here). Superseded the\n   * moment a real snapshot node exists.\n   */\n  private readonly earlyFields = new Map<string, Record<string, unknown>>();\n  /**\n   * pathKey → identified kind preserved through a raw fallback (parser stamped\n   * `kind` on the raw_object event) — schema-availability degrades and, since\n   * 2026-08-29, structural ones too. Only a node nothing ever identified (no\n   * `__kind` at all) is absent here.\n   */\n  private readonly rawKinds = new Map<string, string>();\n  /**\n   * pathKey → WHY the node degraded. `\"unverified\"` means no schema was\n   * available and nothing was ever checked; `\"invalid\"` means a check ran and\n   * failed. THE RENDER ROUTE BRANCHES ON THIS — see `IrKindState`. Absent =\n   * `\"invalid\"`, so a parser that predates the `cause` field (or any consumer\n   * hand-building events) keeps the strict, safe reading.\n   */\n  private readonly rawCauses = new Map<string, RawObjectCause>();\n\n  private regionStatus: \"streaming\" | \"complete\" | \"error\" = \"streaming\";\n  private errorReason: string | null = null;\n  private rootRawValue: Record<string, unknown> | null = null;\n  /** Notices for degrades that tried to erase already-published data. */\n  private readonly rescueNotices: NonNullable<IrResidue[\"notices\"]> = [];\n  private completedKind = \"\";\n\n  get status(): \"streaming\" | \"complete\" | \"error\" {\n    return this.regionStatus;\n  }\n\n  applyEvent(event: KindStreamEvent): void {\n    switch (event.type) {\n      case \"kind_identified\": {\n        this.identifiedKinds.set(irPathKey(event.path), event.kind);\n        this.dirty.add(irPathKey(event.path));\n        return;\n      }\n      case \"pending_schema\": {\n        const pathKey = irPathKey(event.path);\n        this.identifiedKinds.set(pathKey, event.kind);\n        this.pendingSchemaPaths.add(pathKey);\n        this.dirty.add(pathKey);\n        return;\n      }\n      case \"field\": {\n        // Only meaningful pre-schema: an identified node with NO snapshot yet\n        // accumulates its early scalar values for the loading component.\n        const parentKey = irPathKey(event.path.slice(0, -1));\n        if (this.nodes.has(parentKey)) return;\n        if (!this.identifiedKinds.has(parentKey)) return;\n        const v = event.value;\n        if (v !== null && typeof v === \"object\") return; // scalars only\n        const bucket = this.earlyFields.get(parentKey) ?? {};\n        bucket[event.key] = v;\n        this.earlyFields.set(parentKey, bucket);\n        this.dirty.add(parentKey);\n        return;\n      }\n      case \"block_snapshot\": {\n        const pathKey = irPathKey(event.path);\n        this.pendingSchemaPaths.delete(pathKey);\n        this.earlyFields.delete(pathKey);\n        this.upsertNode(event.path, {\n          kind: event.kind,\n          value: event.value,\n          residue: event.residue,\n          complete: event.complete,\n        });\n        return;\n      }\n      case \"raw_object\": {\n        const pathKey = irPathKey(event.path);\n        this.pendingSchemaPaths.delete(pathKey);\n        this.earlyFields.delete(pathKey);\n        if (event.kind) this.rawKinds.set(pathKey, event.kind);\n        // Absent cause reads as \"invalid\" — the strict, safe default.\n        this.rawCauses.set(pathKey, event.cause ?? \"invalid\");\n        this.markRaw(event.path, event.reason, event.value);\n        return;\n      }\n      case \"complete\": {\n        this.regionStatus = this.errorReason ? \"error\" : \"complete\";\n        this.completedKind = event.kind;\n        if (this.rawPaths.has(\"\") && isRecord(event.value)) {\n          // The completion value is the parser's full view of the region — it\n          // fills a raw root, and merges with (never regresses) one a mid-\n          // stream degrade already wrote.\n          const merged = mergeWithoutLoss(this.rootRawValue, event.value);\n          this.recordRescue(\"\", \"complete\", merged.rescued);\n          if (isRecord(merged.value)) this.rootRawValue = merged.value;\n        }\n        this.dirty.add(\"\");\n        return;\n      }\n      case \"error\": {\n        this.errorReason = event.reason;\n        this.regionStatus = \"error\";\n        this.dirty.add(\"\");\n        return;\n      }\n      default:\n        return;\n    }\n  }\n\n  getNode(pathKey: string): IrTreeNode | null {\n    return this.nodes.get(pathKey) ?? null;\n  }\n\n  listNodes(): IrTreeNode[] {\n    return [...this.nodes.values()];\n  }\n\n  isRawPath(pathKey: string): boolean {\n    return this.rawPaths.has(pathKey);\n  }\n\n  /** Dirty pathKeys since the last drain — the flush/notify unit. */\n  drainDirty(): string[] {\n    const drained = [...this.dirty];\n    this.dirty.clear();\n    return drained;\n  }\n\n  hasDirty(): boolean {\n    return this.dirty.size > 0;\n  }\n\n  // -------------------------------------------------------------------------\n\n  private upsertNode(\n    path: IrPath,\n    payload: {\n      kind: string;\n      value: Record<string, unknown>;\n      residue: IrResidue | null;\n      complete: boolean;\n    },\n  ): void {\n    const pathKey = irPathKey(path);\n    if (this.rawPaths.has(pathKey)) return;\n\n    const stabilized = this.stabilizeValue(\n      payload.value,\n      path,\n      pathKey,\n    ) as Record<string, unknown>;\n\n    const prior = this.nodes.get(pathKey);\n    const node: IrTreeNode = {\n      kind: payload.kind,\n      kindState: payload.complete\n        ? \"resolved\"\n        : (prior?.kindState ?? \"resolved\"),\n      path,\n      pathKey,\n      value: stabilized,\n      residue: payload.residue,\n      complete: payload.complete,\n      version: (prior?.version ?? 0) + 1,\n    };\n    this.nodes.set(pathKey, node);\n    this.dirty.add(pathKey);\n\n    this.propagateToAncestors(path, node.value);\n  }\n\n  /**\n   * Substitute kind-node children with their current tree values so sibling\n   * identities are stable; deep-copy everything else so no live parser\n   * reference ever escapes.\n   */\n  private stabilizeValue(\n    value: unknown,\n    path: IrPath,\n    applyingPathKey: string,\n  ): unknown {\n    if (Array.isArray(value)) {\n      return value.map((item, index) =>\n        this.stabilizeValue(item, [...path, index], applyingPathKey),\n      );\n    }\n    if (isRecord(value)) {\n      const pathKey = irPathKey(path);\n      if (pathKey !== applyingPathKey) {\n        const childNode = this.nodes.get(pathKey);\n        if (childNode) return childNode.value;\n      }\n      const out: Record<string, unknown> = {};\n      for (const [key, child] of Object.entries(value)) {\n        out[key] = this.stabilizeValue(child, [...path, key], applyingPathKey);\n      }\n      return out;\n    }\n    return value;\n  }\n\n  /**\n   * COW spine rebuild: replace the child's slot in each ancestor kind-node's\n   * value, shallow-copying only the containers along the way. Siblings keep\n   * identity; every ancestor gets a new value identity + version bump.\n   */\n  private propagateToAncestors(childPath: IrPath, childValue: unknown): void {\n    let currentPath = childPath;\n    let currentValue: unknown = childValue;\n\n    while (currentPath.length > 0) {\n      const ancestor = this.findNearestAncestorNode(currentPath);\n      if (!ancestor) return;\n\n      const relative = currentPath.slice(ancestor.path.length);\n      const rebuilt = this.cloneAlong(ancestor.value, relative, currentValue);\n      if (rebuilt === ancestor.value) return;\n\n      const updated: IrTreeNode = {\n        ...ancestor,\n        value: rebuilt as Record<string, unknown>,\n        version: ancestor.version + 1,\n      };\n      this.nodes.set(ancestor.pathKey, updated);\n      this.dirty.add(ancestor.pathKey);\n\n      currentPath = ancestor.path;\n      currentValue = updated.value;\n    }\n  }\n\n  private findNearestAncestorNode(path: IrPath): IrTreeNode | null {\n    for (let len = path.length - 1; len >= 0; len--) {\n      const node = this.nodes.get(irPathKey(path.slice(0, len)));\n      if (node) return node;\n    }\n    return null;\n  }\n\n  private cloneAlong(\n    container: unknown,\n    relative: IrPath,\n    leaf: unknown,\n  ): unknown {\n    if (relative.length === 0) return leaf;\n\n    const [head, ...rest] = relative;\n\n    if (Array.isArray(container)) {\n      const index = typeof head === \"number\" ? head : Number(head);\n      const copy = container.slice();\n      // Growing the array (a child that hasn't hit the parent snapshot yet).\n      while (copy.length <= index) copy.push(undefined);\n      copy[index] = this.cloneAlong(container[index], rest, leaf);\n      return copy;\n    }\n\n    if (isRecord(container)) {\n      const key = String(head);\n      return {\n        ...container,\n        [key]: this.cloneAlong(container[key], rest, leaf),\n      };\n    }\n\n    // The slot's container hasn't arrived in the ancestor value yet — build it.\n    const built: unknown =\n      typeof head === \"number\"\n        ? this.cloneAlong([], relative, leaf)\n        : this.cloneAlong({}, relative, leaf);\n    return built;\n  }\n\n  private markRaw(path: IrPath, reason: string, value: unknown): void {\n    const pathKey = irPathKey(path);\n    // NO REGRESSION: the degrade must not blank the snapshot this node already\n    // published. Its plain data still belongs to its ancestors — zero loss.\n    const prior =\n      path.length === 0\n        ? (this.nodes.get(\"\")?.value ?? this.rootRawValue)\n        : this.nodes.get(pathKey)?.value;\n    const merged = mergeWithoutLoss(prior, value);\n    this.recordRescue(pathKey, reason, merged.rescued);\n\n    this.rawPaths.set(pathKey, reason);\n    this.nodes.delete(pathKey);\n    this.dirty.add(pathKey);\n\n    if (path.length === 0) {\n      if (isRecord(merged.value)) this.rootRawValue = merged.value;\n      return;\n    }\n\n    this.propagateToAncestors(path, merged.value);\n  }\n\n  /**\n   * A rescue means a degrade tried to erase data a user could already see —\n   * an upstream defect. It rides the envelope as a notice so it surfaces in the\n   * Error Inspector instead of being silently absorbed (`core/` is a pure\n   * kernel: no console, no capture — the notice IS the alarm).\n   */\n  private recordRescue(\n    pathKey: string,\n    reason: string,\n    rescued: string[],\n  ): void {\n    if (rescued.length === 0) return;\n    this.rescueNotices.push({\n      code: \"degrade_data_rescued\",\n      message: `degrade (${reason}) at path \"${pathKey || \"<root>\"}\" would have dropped: ${rescued.join(\", \")}`,\n    });\n  }\n\n  /**\n   * Assemble the canonical envelope. ONE code path for stream + one-shot.\n   * Callers supply the fingerprint (one-shot hashes the source; live sessions\n   * keep an incremental hasher so no per-flush re-hash happens).\n   */\n  buildEnvelope(fingerprint: string): CanonicalBlockIR {\n    const rootNode = this.nodes.get(\"\");\n    const rootRawReason = this.rawPaths.get(\"\") ?? null;\n\n    const notices: NonNullable<IrResidue[\"notices\"]> = [];\n    if (this.errorReason) {\n      notices.push({ code: \"parse_error\", message: this.errorReason });\n    }\n    if (rootRawReason) {\n      notices.push({ code: \"raw_fallback\", message: rootRawReason });\n    }\n    notices.push(...this.rescueNotices);\n\n    const baseResidue = rootNode?.residue ?? null;\n    let residue = baseResidue;\n    if (notices.length > 0) {\n      residue = {\n        extra: baseResidue?.extra ?? null,\n        optionalMissing: baseResidue?.optionalMissing ?? null,\n        notices: [...(baseResidue?.notices ?? []), ...notices],\n      };\n    }\n\n    const isRaw = rootRawReason !== null;\n\n    // KIND PRESERVATION: a root that degraded raw keeps its identified kind —\n    // schema-availability raws since 2026-08, STRUCTURAL raws (validation\n    // failure, duplicate key) since 2026-08-29: a payload that says what it is\n    // stays acknowledged as an instance of that kind, never anonymous JSON.\n    // While STREAMING with a known-but-cold kind (no node yet), the identified\n    // kind + early scalar fields surface so the loading layer can render.\n    const identifiedKind = this.identifiedKinds.get(\"\") ?? \"\";\n    const rootKind = isRaw\n      ? (this.rawKinds.get(\"\") ?? \"\")\n      : (rootNode?.kind ?? (this.completedKind || identifiedKind));\n\n    // 🚨 UNVERIFIED IS NOT INVALID. A root that degraded ONLY because no schema\n    // was ever registered reports `unverified`, and the render route sends it\n    // to its real component — the payload is intact and was never checked, let\n    // alone found wanting. `raw` is reserved for a node something checked and\n    // rejected. Collapsing these is what cost ~221 kinds their component on\n    // 2026-08-28; see `IrKindState`.\n    const rootRawState: IrKindState =\n      this.rawCauses.get(\"\") === \"unverified\" ? \"unverified\" : \"raw\";\n\n    const root: IrStructuredNode = {\n      role: \"structured\",\n      kind: rootKind,\n      kindState: isRaw\n        ? rootRawState\n        : rootNode\n          ? rootNode.kindState\n          : this.pendingSchemaPaths.has(\"\")\n            ? \"pending_schema\"\n            : this.regionStatus === \"streaming\"\n              ? identifiedKind\n                ? \"pending_schema\"\n                : \"pending_kind\"\n              : \"raw\",\n      discriminator: JSON_DISCRIMINATOR,\n      path: [],\n      status: this.regionStatus,\n      value:\n        rootNode?.value ??\n        this.rootRawValue ??\n        // Copy: the early-fields bucket keeps mutating as fields arrive; the\n        // envelope must be freezable (Redux dev-mode immutability).\n        (this.earlyFields.has(\"\") ? { ...this.earlyFields.get(\"\") } : {}),\n      residue,\n    };\n\n    const nodeIndex: NonNullable<CanonicalBlockIR[\"nodeIndex\"]> = {};\n    for (const node of this.nodes.values()) {\n      if (node.pathKey === \"\") continue;\n      nodeIndex[node.pathKey] = {\n        kind: node.kind,\n        kindState: node.kindState,\n        status: node.complete ? \"complete\" : \"streaming\",\n        ...(node.residue ? { residue: node.residue } : {}),\n      };\n    }\n    for (const [pathKey] of this.rawPaths) {\n      if (pathKey === \"\") continue;\n      // Kind preservation applies to nested raws too: a child that degraded\n      // still names what it claimed to be, so readers (problem collectors,\n      // repaint) can acknowledge it instead of losing it. And the\n      // unverified/invalid split applies here as well — a child kind whose own\n      // schema never loaded is not a broken child, and a per-child renderer\n      // must be able to tell those apart.\n      nodeIndex[pathKey] = {\n        kind: this.rawKinds.get(pathKey) ?? \"\",\n        kindState:\n          this.rawCauses.get(pathKey) === \"unverified\" ? \"unverified\" : \"raw\",\n        status: \"complete\",\n      };\n    }\n\n    return {\n      v: IR_VERSION,\n      engine: \"fe-kind-parser\",\n      fingerprint,\n      root,\n      ...(Object.keys(nodeIndex).length > 0 ? { nodeIndex } : {}),\n    };\n  }\n}\n","/**\n * Stable, fast content fingerprint for IR envelopes.\n *\n * Used as the idempotence / cache key: a persisted CanonicalBlockIR is only\n * reused when its fingerprint matches the region source text it claims to\n * represent. Not cryptographic — collision resistance at the \"same message,\n * same block\" scale is all that's required, and it must be synchronous and\n * dependency-free (runs per region on the hot streaming path).\n *\n * FNV-1a 32-bit, applied twice with different seeds and concatenated, so a\n * single 32-bit collision doesn't alias two regions.\n *\n * `createFingerprinter` is the incremental form for live streams: feeding\n * chunks one at a time yields EXACTLY the same fingerprint as\n * `fingerprintText` over the concatenation — sessions never re-hash the\n * whole source per flush.\n */\n\nconst SEED_A = 0x811c9dc5;\nconst SEED_B = 0x01000193;\n\nfunction fnv1aStep(hash: number, input: string): number {\n  let h = hash >>> 0;\n  for (let i = 0; i < input.length; i++) {\n    h ^= input.charCodeAt(i);\n    // h *= 16777619 (FNV prime), in 32-bit space without BigInt.\n    h = (h + ((h << 1) + (h << 4) + (h << 7) + (h << 8) + (h << 24))) >>> 0;\n  }\n  return h >>> 0;\n}\n\nexport interface Fingerprinter {\n  push(chunk: string): void;\n  /** Fingerprint of everything pushed so far. */\n  current(): string;\n}\n\nexport function createFingerprinter(): Fingerprinter {\n  let a = SEED_A;\n  let b = SEED_B;\n  let length = 0;\n\n  return {\n    push(chunk: string): void {\n      a = fnv1aStep(a, chunk);\n      b = fnv1aStep(b, chunk);\n      length += chunk.length;\n    },\n    current(): string {\n      return `${length.toString(36)}-${a.toString(36)}${b.toString(36)}`;\n    },\n  };\n}\n\nexport function fingerprintText(source: string): string {\n  const hasher = createFingerprinter();\n  hasher.push(source);\n  return hasher.current();\n}\n","/**\n * Character-level incremental JSON tokenizer. Survives chunk boundaries\n * mid-token (strings, escapes, unicode sequences, primitives). Pure — no\n * React, no Redux, no IO.\n *\n * Moved from app/(dev)/demos/json-block-detector/reusable-logic.ts (the demo\n * is now a consumer of this library).\n */\n\nexport type Punct = \"{\" | \"}\" | \"[\" | \"]\" | \":\" | \",\";\n\nexport type JsonToken =\n  | { type: \"punct\"; value: Punct; at: number }\n  | { type: \"string\"; value: string; at: number }\n  | { type: \"number\"; value: number; at: number }\n  | { type: \"boolean\"; value: boolean; at: number }\n  | { type: \"null\"; value: null; at: number };\n\nexport class JsonStreamTokenizer {\n  private mode: \"normal\" | \"string\" | \"escape\" | \"unicode\" | \"primitive\" =\n    \"normal\";\n  private pos = 0;\n\n  private stringBuffer = \"\";\n  private primitiveBuffer = \"\";\n  private unicodeBuffer = \"\";\n  private tokenStart = 0;\n\n  private readonly onToken: (token: JsonToken) => void;\n\n  // Explicit field rather than a parameter property: consumers compile this\n  // source directly, and a strict host (the dashboard) sets\n  // `erasableSyntaxOnly`, under which parameter properties are a hard error.\n  constructor(onToken: (token: JsonToken) => void) {\n    this.onToken = onToken;\n  }\n\n  get position(): number {\n    return this.pos;\n  }\n\n  push(chunk: string): void {\n    for (let i = 0; i < chunk.length; i++) {\n      const ch = chunk[i];\n      const at = this.pos;\n      this.pos += 1;\n\n      // `i < chunk.length` is the loop bound above, so `ch` is always a real\n      // character here — this guard is unreachable in practice, it only\n      // satisfies noUncheckedIndexedAccess's string-index typing.\n      if (ch === undefined) continue;\n\n      if (this.mode === \"primitive\") {\n        if (this.isDelimiter(ch)) {\n          this.emitPrimitive();\n          this.handleNormalChar(ch, at);\n        } else {\n          this.primitiveBuffer += ch;\n        }\n        continue;\n      }\n\n      if (this.mode === \"string\") {\n        if (ch === '\"') {\n          this.onToken({\n            type: \"string\",\n            value: this.stringBuffer,\n            at: this.tokenStart,\n          });\n          this.stringBuffer = \"\";\n          this.mode = \"normal\";\n          continue;\n        }\n\n        if (ch === \"\\\\\") {\n          this.mode = \"escape\";\n          continue;\n        }\n\n        if (ch === \"\\n\" || ch === \"\\r\") {\n          throw new Error(`Invalid unescaped newline in JSON string at ${at}`);\n        }\n\n        this.stringBuffer += ch;\n        continue;\n      }\n\n      if (this.mode === \"escape\") {\n        if (ch === \"u\") {\n          this.unicodeBuffer = \"\";\n          this.mode = \"unicode\";\n          continue;\n        }\n\n        const escaped: Record<string, string> = {\n          '\"': '\"',\n          \"\\\\\": \"\\\\\",\n          \"/\": \"/\",\n          b: \"\\b\",\n          f: \"\\f\",\n          n: \"\\n\",\n          r: \"\\r\",\n          t: \"\\t\",\n        };\n\n        if (!(ch in escaped)) {\n          throw new Error(`Invalid JSON escape sequence at ${at}`);\n        }\n\n        this.stringBuffer += escaped[ch];\n        this.mode = \"string\";\n        continue;\n      }\n\n      if (this.mode === \"unicode\") {\n        if (!/[0-9a-fA-F]/.test(ch)) {\n          throw new Error(`Invalid unicode escape at ${at}`);\n        }\n\n        this.unicodeBuffer += ch;\n\n        if (this.unicodeBuffer.length === 4) {\n          this.stringBuffer += String.fromCharCode(\n            parseInt(this.unicodeBuffer, 16),\n          );\n          this.unicodeBuffer = \"\";\n          this.mode = \"string\";\n        }\n\n        continue;\n      }\n\n      this.handleNormalChar(ch, at);\n    }\n  }\n\n  end(): void {\n    if (this.mode === \"primitive\") {\n      this.emitPrimitive();\n      return;\n    }\n\n    if (this.mode !== \"normal\") {\n      throw new Error(\n        `Stream ended while parsing JSON ${this.mode} at ${this.pos}`,\n      );\n    }\n  }\n\n  private handleNormalChar(ch: string, at: number): void {\n    if (/\\s/.test(ch)) return;\n\n    if (\n      ch === \"{\" ||\n      ch === \"}\" ||\n      ch === \"[\" ||\n      ch === \"]\" ||\n      ch === \":\" ||\n      ch === \",\"\n    ) {\n      this.onToken({ type: \"punct\", value: ch, at });\n      return;\n    }\n\n    if (ch === '\"') {\n      this.mode = \"string\";\n      this.stringBuffer = \"\";\n      this.tokenStart = at;\n      return;\n    }\n\n    if (/[-0-9tfn]/.test(ch)) {\n      this.mode = \"primitive\";\n      this.primitiveBuffer = ch;\n      this.tokenStart = at;\n      return;\n    }\n\n    throw new Error(`Unexpected character \"${ch}\" at ${at}`);\n  }\n\n  private emitPrimitive(): void {\n    const raw = this.primitiveBuffer;\n    const at = this.tokenStart;\n\n    this.primitiveBuffer = \"\";\n    this.mode = \"normal\";\n\n    let value: unknown;\n\n    try {\n      value = JSON.parse(raw);\n    } catch {\n      throw new Error(`Invalid JSON primitive \"${raw}\" at ${at}`);\n    }\n\n    if (typeof value === \"number\") {\n      this.onToken({ type: \"number\", value, at });\n      return;\n    }\n\n    if (typeof value === \"boolean\") {\n      this.onToken({ type: \"boolean\", value, at });\n      return;\n    }\n\n    if (value === null) {\n      this.onToken({ type: \"null\", value, at });\n      return;\n    }\n\n    throw new Error(`Unsupported JSON primitive \"${raw}\" at ${at}`);\n  }\n\n  private isDelimiter(ch: string): boolean {\n    return (\n      /\\s/.test(ch) ||\n      ch === \"{\" ||\n      ch === \"}\" ||\n      ch === \"[\" ||\n      ch === \"]\" ||\n      ch === \":\" ||\n      ch === \",\"\n    );\n  }\n}\n","/**\n * Compliant snapshot builder — the guarantee that a renderer always receives\n * a well-formed, schema-shaped object even mid-stream.\n *\n * ZERO DATA LOSS: unknown keys are NOT merged into the snapshot value (they\n * would be indistinguishable from schema fields). They are returned on the\n * residue channel and re-merged only at wire-serialization time via\n * `mergeResidueIntoValue`.\n */\n\nimport { isEmptyResidue, type IrResidue } from \"./ir-types\";\nimport {\n  KIND_KEY,\n  type FieldSchema,\n  type KindSchema,\n} from \"./kind-schema.types\";\n\n/** Placeholder for a required field not yet received during streaming. */\nexport function emptyValueForFieldSchema(field: FieldSchema): unknown {\n  if (field.nullable) return null;\n\n  switch (field.type) {\n    case \"string\":\n      return \"\";\n    case \"number\":\n      return 0;\n    case \"boolean\":\n      return false;\n    case \"json\":\n      // Any JSON value — null is the honest \"nothing arrived yet\" member.\n      return null;\n    case \"string[]\":\n    case \"number[]\":\n    case \"boolean[]\":\n    case \"json[]\":\n    case \"array\":\n      return [];\n    case \"object\":\n    case \"inline_object\":\n    case \"record\":\n      return {};\n    case \"enum\":\n      return \"\";\n    case \"union\":\n      if (field.scalars.includes(\"string\")) return \"\";\n      if (field.scalars.includes(\"number\")) return 0;\n      if (field.scalars.includes(\"boolean\")) return false;\n      // Kinds-only object union — an empty object is the least-wrong stub.\n      return {};\n    default:\n      return null;\n  }\n}\n\nexport interface CompliantKindSnapshot {\n  /** Schema fields + __kind only. Required-but-missing fields hold typed placeholders. */\n  value: Record<string, unknown>;\n  /** Unknown keys + missing optionals. Null when both channels are empty. */\n  residue: IrResidue | null;\n}\n\nexport function buildCompliantKindSnapshot(\n  schema: KindSchema,\n  partial: Record<string, unknown>,\n): CompliantKindSnapshot {\n  const value: Record<string, unknown> = {\n    [KIND_KEY]: schema.kind,\n  };\n  const optionalMissing: string[] = [];\n\n  for (const [fieldName, fieldSchema] of Object.entries(schema.fields)) {\n    if (fieldName in partial && partial[fieldName] !== undefined) {\n      value[fieldName] = partial[fieldName];\n    } else if (fieldSchema.required) {\n      value[fieldName] = emptyValueForFieldSchema(fieldSchema);\n    } else {\n      optionalMissing.push(fieldName);\n    }\n  }\n\n  let extra: Record<string, unknown> | null = null;\n  for (const [fieldName, fieldValue] of Object.entries(partial)) {\n    if (fieldName === KIND_KEY) continue;\n    if (fieldName in schema.fields) continue;\n    if (extra === null) extra = {};\n    extra[fieldName] = fieldValue;\n  }\n\n  const residue: IrResidue = {\n    extra,\n    optionalMissing: optionalMissing.length > 0 ? optionalMissing : null,\n    notices: null,\n  };\n\n  return { value, residue: isEmptyResidue(residue) ? null : residue };\n}\n\n/**\n * Wire/round-trip form: schema fields + unknown keys back together, exactly\n * as the source carried them. `residue.extra` wins nothing — snapshot value\n * and extras are disjoint by construction.\n */\nexport function mergeResidueIntoValue(\n  value: Record<string, unknown>,\n  residue: IrResidue | null,\n): Record<string, unknown> {\n  if (!residue?.extra) return value;\n  return { ...value, ...residue.extra };\n}\n","/**\n * KindStreamParser — the streaming, schema-validating, __kind-discriminated\n * JSON parser at the heart of content-ir.\n *\n * Frame-stack pushdown parser over JsonStreamTokenizer tokens. Every value is\n * path-addressed; every object resolves a kind against the schema registry;\n * schema-shaped `block_snapshot` events fire on field arrival so renderers\n * get live partials; unknown/invalid structures degrade to `raw_object`\n * instead of failing the stream.\n *\n * The pushdown discipline (commit → descend → never re-ask → backtrack):\n * - SPECULATIVE DESCENT: when a parent field schema predicts a child's kind\n *   ({type:\"object\", kind} or {type:\"array\", itemKinds:[K]} with one member),\n *   the child commits to that kind THE INSTANT `{` opens and renders a\n *   placeholder snapshot. `__kind` arrival confirms (no-op), re-tags (allowed\n *   sibling kind), or backtracks to raw (contradiction). An object under a\n *   predicting parent doesn't even need `__kind` — prediction alone types it.\n * - PENDING SCHEMA: an identified kind whose schema isn't loaded holds the\n *   node open (`pending_schema` event, fields keep accumulating), fires the\n *   resolver's cold fetch, and upgrades in place via `notifySchemaArrived` —\n *   even after the node (or the whole region) has closed.\n * - POP-UP-ONE-LEVEL: node-scoped problems (duplicate key, schema violation,\n *   disallowed itemKind) mark THAT node raw and keep parsing the parent.\n *   Only grammar/tokenizer errors are region-fatal — and the host degrades\n *   the region to a plain code block, never the stream.\n */\n\nimport { JsonStreamTokenizer, type JsonToken } from \"./json-tokenizer\";\nimport type { IrPath, IrResidue } from \"./ir-types\";\nimport {\n  KIND_KEY,\n  isJsonAnyField,\n  isScalarArrayType,\n  readObjectKind,\n  scalarArrayItemType,\n  type FieldSchema,\n  type KindSchema,\n  type RecordValueType,\n} from \"./kind-schema.types\";\nimport { buildCompliantKindSnapshot } from \"./kind-snapshot\";\n\n/** Kept as the historical name for the parser's event paths. */\nexport type JsonPath = IrPath;\n\n/**\n * Schema source abstraction. A plain Record works for static sets; the\n * registry supplies a resolver whose `request` fires a cold fetch and later\n * calls `parser.notifySchemaArrived`.\n */\nexport interface SchemaResolver {\n  get(kind: string): KindSchema | undefined;\n  /** Fire-and-forget cold fetch. Absent = static source, unknown kinds go raw. */\n  request?(kind: string): void;\n  /**\n   * Optional per-resolver override for legacy root-key recognition. Most hosts\n   * leave this unset and register the lookup once via\n   * `setJsonRootKeyLookup` — see that function for why.\n   */\n  kindForJsonRootKey?(key: string): string | null;\n}\n\n/**\n * Legacy root-key recognition: `{\"quiz_title\": …}` → `quiz_set`.\n *\n * REGISTERED BY THE HOST, never imported by this file. The surface registry is\n * host-coupled (it reaches `captureError`), and this file is a pinned kernel\n * twin shared with aidream's Workflow Studio — a direct import breaks that\n * build outright.\n *\n * It is a module seam rather than a constructor argument because recognition\n * must not depend on each CALLER remembering to inject it: most callers pass a\n * plain `Record<string, KindSchema>` for `schemas`, which cannot carry a\n * function. Making this per-call silently disabled root-key recognition for\n * every one of them.\n *\n * Unset = the host has no surface table and root-key recognition does not\n * happen — the correct posture for a pure consumer like Workflow Studio.\n */\nlet jsonRootKeyLookup: ((key: string) => string | null) | null = null;\n\nexport function setJsonRootKeyLookup(\n  lookup: ((key: string) => string | null) | null,\n): void {\n  jsonRootKeyLookup = lookup;\n}\n\ntype ObjectFrame = {\n  kind: \"object\";\n  path: JsonPath;\n  value: Record<string, unknown>;\n  expecting: \"keyOrEnd\" | \"key\" | \"colon\" | \"value\" | \"commaOrEnd\";\n  currentKey?: string | undefined;\n  keyCount: number;\n};\n\ntype ArrayFrame = {\n  kind: \"array\";\n  path: JsonPath;\n  value: unknown[];\n  expecting: \"valueOrEnd\" | \"value\" | \"commaOrEnd\";\n  nextIndex: number;\n};\n\ntype Frame = ObjectFrame | ArrayFrame;\n\ntype SchemaValidationOutcome = {\n  error: string | null;\n  optionalMissing: string[];\n  extraFields: string[];\n};\n\n/**\n * Why a node degraded off the `resolved` path.\n *\n * `\"unverified\"` is reserved for ONE situation: no schema was registered for\n * an identified kind, so no check ever ran. Every other degrade — a schema\n * violation, an array-item kind mismatch, a duplicate key, a bad field\n * placement, a contradicted speculation — is `\"invalid\"`: something checked\n * the node and it failed.\n */\nexport type RawObjectCause = \"unverified\" | \"invalid\";\n\nexport type KindStreamEvent =\n  | {\n      type: \"kind_identified\";\n      kind: string;\n      path: JsonPath;\n      /** True when committed from the parent schema before __kind arrived. */\n      speculative?: boolean;\n      at: number;\n    }\n  | { type: \"pending_kind\"; path: JsonPath; at: number }\n  | {\n      type: \"kind_wait_end\";\n      path: JsonPath;\n      outcome: \"identified\" | \"raw_fallback\";\n      kind?: string;\n      reason?: string;\n      at: number;\n    }\n  | {\n      type: \"pending_schema\";\n      kind: string;\n      path: JsonPath;\n      at: number;\n    }\n  | {\n      type: \"field\";\n      kind: string;\n      path: JsonPath;\n      key: string;\n      value: unknown;\n      at: number;\n    }\n  | { type: \"object_start\"; path: JsonPath; at: number }\n  | {\n      type: \"object_complete\";\n      kind: string;\n      path: JsonPath;\n      value: Record<string, unknown>;\n      at: number;\n    }\n  | {\n      type: \"raw_object\";\n      path: JsonPath;\n      value: unknown;\n      reason: string;\n      /**\n       * The kind that WAS identified for this node before it degraded — set\n       * for schema-availability degrades AND (since 2026-08-29) structural\n       * ones, so a payload that said what it is stays acknowledged as an\n       * instance of that kind. Absent only when nothing ever identified it\n       * (an object with no `__kind` at all).\n       */\n      kind?: string;\n      /**\n       * WHY this node is not `resolved` — the discriminator the render route\n       * reads. See `IrKindState` for why collapsing these two is an outage.\n       *\n       * - `\"unverified\"`: no schema was available, so nothing was checked.\n       *   The value is intact and may be perfectly valid.\n       * - `\"invalid\"` (default): a check RAN and the node failed it, or the\n       *   node is structurally broken (duplicate key, bad placement).\n       */\n      cause?: RawObjectCause;\n      at: number;\n    }\n  | {\n      type: \"optional_field_missing\";\n      kind: string;\n      path: JsonPath;\n      field: string;\n      at: number;\n    }\n  | {\n      type: \"extra_field\";\n      kind: string;\n      path: JsonPath;\n      field: string;\n      at: number;\n    }\n  | {\n      type: \"block_snapshot\";\n      kind: string;\n      path: JsonPath;\n      value: Record<string, unknown>;\n      residue: IrResidue | null;\n      complete: boolean;\n      at: number;\n    }\n  | { type: \"array_start\"; path: JsonPath; field: string; at: number }\n  | { type: \"complete\"; kind: string; value: unknown; at: number }\n  | { type: \"error\"; reason: string; at: number };\n\nexport type KindStreamParserOptions = {\n  onEvent: (event: KindStreamEvent) => void;\n  schemas: Record<string, KindSchema> | SchemaResolver;\n  /**\n   * Known-context root prediction (e.g. \"this agent's output schema is\n   * flashcard_set\"). The root commits speculatively at `{` open — the Option-1\n   * provenance path for agents whose schemas don't carry __kind yet.\n   */\n  expectedRootKind?: string;\n};\n\nfunction isSchemaResolver(\n  source: Record<string, KindSchema> | SchemaResolver,\n): source is SchemaResolver {\n  return typeof (source as SchemaResolver).get === \"function\";\n}\n\nfunction safeCopy<T>(value: T): T {\n  try {\n    return structuredClone(value);\n  } catch {\n    return value;\n  }\n}\n\nexport class KindStreamParser {\n  private readonly resolver: SchemaResolver;\n  private readonly stack: Frame[] = [];\n  private readonly objectKinds = new Map<string, string>();\n  private readonly inlineSchemas = new Map<\n    string,\n    Record<string, FieldSchema>\n  >();\n  private readonly recordSchemas = new Map<string, RecordValueType>();\n  private readonly rawObjectPaths = new Set<string>();\n  /**\n   * Subtrees whose value domain is \"any JSON\" by schema (`json` / `json[]`\n   * fields, `record` with `values:\"json\"` members). OPAQUE by contract: no\n   * kind identification, no pending_kind, no raw_object degradation — unknown\n   * structure here is the declared shape, not a failure. Propagates to every\n   * descendant compound.\n   */\n  private readonly opaquePaths = new Set<string>();\n  private readonly deferredFields = new Map<\n    string,\n    Array<{ key: string; value: unknown; at: number }>\n  >();\n  private readonly awaitingKindPaths = new Set<string>();\n  /** Paths whose kind came from parent-schema prediction, unconfirmed so far. */\n  private readonly speculativeKinds = new Set<string>();\n  /**\n   * Kind named by the root object's FIRST key through the `json_root_key`\n   * surface registry — a candidate, adopted only at root finalize.\n   */\n  private rootSurfaceKind: string | null = null;\n  /** kind → paths (by key) waiting for the resolver's cold fetch. */\n  private readonly pendingSchemaPaths = new Map<string, Map<string, JsonPath>>();\n  /** Pending-schema paths whose object already closed. */\n  private readonly closedPendingPaths = new Set<string>();\n  /** Schemas delivered via notifySchemaArrived (overlay over the resolver). */\n  private readonly arrivedSchemas = new Map<string, KindSchema>();\n\n  private tokenizer: JsonStreamTokenizer;\n  private root: unknown;\n  private rootKind = \"\";\n  private rootDone = false;\n  private failed = false;\n\n  private readonly options: KindStreamParserOptions;\n\n  // Explicit field, not a parameter property — see the note in\n  // `json-tokenizer.ts`: `erasableSyntaxOnly` hosts compile this source.\n  constructor(options: KindStreamParserOptions) {\n    this.options = options;\n    this.resolver = isSchemaResolver(options.schemas)\n      ? options.schemas\n      : {\n          get: (kind: string) =>\n            (options.schemas as Record<string, KindSchema>)[kind],\n        };\n\n    this.tokenizer = new JsonStreamTokenizer((token) =>\n      this.handleToken(token),\n    );\n  }\n\n  push(chunk: string): void {\n    if (this.failed || this.rootDone) return;\n\n    try {\n      this.tokenizer.push(chunk);\n    } catch (error) {\n      this.fail(\n        error instanceof Error ? error.message : String(error),\n        this.tokenizer.position,\n      );\n    }\n  }\n\n  end(): void {\n    if (this.failed) return;\n\n    try {\n      this.tokenizer.end();\n    } catch (error) {\n      this.fail(\n        error instanceof Error ? error.message : String(error),\n        this.tokenizer.position,\n      );\n      return;\n    }\n\n    // The region is over: pending-schema nodes whose cold fetch hasn't\n    // answered fall back to raw NOW. This keeps the end-of-region envelope\n    // deterministic and byte-identical to the static (no-request) path;\n    // upgrade-in-place remains a live-region feature. The data is preserved\n    // verbatim on the raw node — zero loss.\n    this.resolvePendingSchemasAsRaw();\n\n    if (!this.rootDone) {\n      this.fail(\n        \"Stream ended before the root JSON object was complete.\",\n        this.tokenizer.position,\n      );\n    }\n  }\n\n  private resolvePendingSchemasAsRaw(): void {\n    const at = this.tokenizer.position;\n    for (const [kind, paths] of [...this.pendingSchemaPaths]) {\n      this.pendingSchemaPaths.delete(kind);\n      for (const [pathKey, path] of paths) {\n        this.closedPendingPaths.delete(pathKey);\n        if (this.rawObjectPaths.has(pathKey)) continue;\n        const value =\n          this.getLiveObjectValue(path) ??\n          this.getFinalizedObjectValue(path) ??\n          {};\n        this.emitRawObject(\n          path,\n          safeCopy(value),\n          `No block schema registered for \"${kind}\".`,\n          at,\n          kind,\n          \"unverified\",\n        );\n      }\n    }\n  }\n\n  /** True once the root value has closed — the region is fully consumed. */\n  get isComplete(): boolean {\n    return this.rootDone;\n  }\n\n  get hasFailed(): boolean {\n    return this.failed;\n  }\n\n  /**\n   * Upgrade-in-place: the registry's cold fetch answered. Pending nodes for\n   * this kind validate and complete (closed nodes retroactively); a null\n   * schema (fetch miss) drops them to raw. Safe to call after end().\n   */\n  notifySchemaArrived(kind: string, schema: KindSchema | null): void {\n    const waiting = this.pendingSchemaPaths.get(kind);\n    if (!waiting) return;\n    this.pendingSchemaPaths.delete(kind);\n\n    if (schema) {\n      this.arrivedSchemas.set(kind, schema);\n    }\n\n    const at = this.tokenizer.position;\n\n    for (const [pathKey, path] of waiting) {\n      if (this.rawObjectPaths.has(pathKey)) continue;\n\n      const value =\n        this.getLiveObjectValue(path) ?? this.getFinalizedObjectValue(path);\n\n      if (!schema) {\n        this.emitRawObject(\n          path,\n          safeCopy(value ?? {}),\n          `No block schema registered for \"${kind}\".`,\n          at,\n          kind,\n          \"unverified\",\n        );\n        this.closedPendingPaths.delete(pathKey);\n        continue;\n      }\n\n      if (this.closedPendingPaths.has(pathKey)) {\n        this.closedPendingPaths.delete(pathKey);\n        if (value) {\n          this.finalizeTypedObject(path, value, at);\n        }\n      } else {\n        // Still streaming — emit the schema-shaped snapshot it was owed.\n        this.emitBlockSnapshotForObject(path, at);\n      }\n    }\n  }\n\n  private handleToken(token: JsonToken): void {\n    if (this.failed) return;\n\n    if (this.rootDone) {\n      this.fail(\"Unexpected token after complete JSON object.\", token.at);\n      return;\n    }\n\n    if (token.type === \"punct\") {\n      this.handlePunctuation(token);\n      return;\n    }\n\n    if (token.type === \"string\") {\n      this.handleString(token);\n      return;\n    }\n\n    this.beginScalar(token.value, token.at);\n  }\n\n  private handleString(token: Extract<JsonToken, { type: \"string\" }>): void {\n    const frame = this.currentFrame();\n\n    if (\n      frame?.kind === \"object\" &&\n      (frame.expecting === \"keyOrEnd\" || frame.expecting === \"key\")\n    ) {\n      this.acceptObjectKey(frame, token.value, token.at);\n      return;\n    }\n\n    this.beginScalar(token.value, token.at);\n  }\n\n  private handlePunctuation(\n    token: Extract<JsonToken, { type: \"punct\" }>,\n  ): void {\n    switch (token.value) {\n      case \"{\":\n        this.beginCompound(\"object\", token.at);\n        return;\n      case \"[\":\n        this.beginCompound(\"array\", token.at);\n        return;\n      case \"}\":\n        this.closeCompound(\"object\", token.at);\n        return;\n      case \"]\":\n        this.closeCompound(\"array\", token.at);\n        return;\n      case \":\":\n        this.acceptColon(token.at);\n        return;\n      case \",\":\n        this.acceptComma(token.at);\n        return;\n    }\n  }\n\n  private beginCompound(kind: \"object\" | \"array\", at: number): void {\n    const value = kind === \"object\" ? {} : [];\n    // The frame this value lands in — read BEFORE placeValue/push mutate it.\n    const container = this.currentFrame();\n    const path = this.placeValue(value, kind, at, false);\n    if (!path || this.failed) return;\n\n    // OPAQUE DESCENT: a compound under a json-any placement (or inside an\n    // already-opaque subtree) is schema-legal unknown structure. Mark it and\n    // skip ALL kind machinery below.\n    const opaque =\n      (container !== undefined &&\n        this.opaquePaths.has(this.pathKey(container.path))) ||\n      this.isJsonAnyPlacement(path);\n    if (opaque) this.opaquePaths.add(this.pathKey(path));\n\n    if (kind === \"object\") {\n      this.emit({ type: \"object_start\", path, at });\n      if (opaque) {\n        this.stack.push({\n          kind: \"object\",\n          path,\n          value: value as Record<string, unknown>,\n          expecting: \"keyOrEnd\",\n          keyCount: 0,\n        });\n        return;\n      }\n      this.registerObjectContext(path);\n      const pathKey = this.pathKey(path);\n\n      this.stack.push({\n        kind: \"object\",\n        path,\n        value: value as Record<string, unknown>,\n        expecting: \"keyOrEnd\",\n        keyCount: 0,\n      });\n\n      if (this.inlineSchemas.has(pathKey) || this.recordSchemas.has(pathKey)) {\n        return;\n      }\n\n      // SPECULATIVE DESCENT: commit the predicted kind the instant `{` opens.\n      const speculated = this.resolveSpeculativeKind(path);\n      if (speculated) {\n        this.objectKinds.set(pathKey, speculated);\n        this.speculativeKinds.add(pathKey);\n        if (path.length === 0) {\n          this.rootKind = speculated;\n        }\n        this.emit({\n          type: \"kind_identified\",\n          kind: speculated,\n          path,\n          speculative: true,\n          at,\n        });\n        this.emitBlockSnapshotForObject(path, at);\n        return;\n      }\n\n      this.awaitingKindPaths.add(pathKey);\n      this.emit({ type: \"pending_kind\", path, at });\n      return;\n    }\n\n    const parentField = this.parentFieldName(path);\n    if (parentField) {\n      this.emit({ type: \"array_start\", path, field: parentField, at });\n    }\n\n    this.stack.push({\n      kind: \"array\",\n      path,\n      value: value as unknown[],\n      expecting: \"valueOrEnd\",\n      nextIndex: 0,\n    });\n  }\n\n  /**\n   * THE JSON-ROOT-KEY SURFACE — `content_ir.kind_surface` rows of type\n   * `json_root_key`, live at last (they were inert phantom rows until\n   * 2026-08-20).\n   *\n   * A legacy payload such as `{\"quiz_title\": ...}` carries no `__kind`, but\n   * the ONE surface registry knows exactly which kind that root key names —\n   * the same lookup the SERVER performs before adapting the payload\n   * (`aidream .../processing/blocks/envelope.py`). Consulting it HERE, in the\n   * shared parser core, is what makes one place decide it: both hosts — the\n   * one-shot `normalizeJsonRegion` (DB reload / reconcile) and the live\n   * `openParseSession` (streaming) — build their parser through\n   * `createKindStreamParser`, so neither passes an option and neither can\n   * drift from the other.\n   *\n   * Recorded at the first root key; ADOPTED only when the root object closes\n   * (`completeTypedObject`). That is the surface registry's complete-only\n   * convergence law, and every json_root_key row is `streaming:false` — these\n   * legacy shapes are recognized by their whole payload, so speculating\n   * mid-stream would flash a kind component over an object that may never\n   * satisfy the schema. An explicit `expectedRootKind` (an agent's declared\n   * output schema) is stronger context and always wins; an actual `__kind`\n   * still wins over both.\n   */\n  private noteRootSurfaceKind(key: string): void {\n    if (key === KIND_KEY) return;\n    if (this.options.expectedRootKind) return;\n    if (this.rootKind || this.objectKinds.has(this.pathKey([]))) return;\n\n    const kind =\n      this.resolver.kindForJsonRootKey?.(key) ?? jsonRootKeyLookup?.(key);\n    if (!kind) return;\n\n    this.rootSurfaceKind = kind;\n\n    // Warm a cold schema now so finalize can actually validate against it.\n    if (!this.lookupSchema(kind)) {\n      this.resolver.request?.(kind);\n    }\n  }\n\n  /**\n   * Prediction from the parent schema: object field → declared kind; array\n   * item → sole itemKind; root → expectedRootKind. Only when the schema is\n   * actually resolvable (a prediction we can't validate against is not a\n   * commitment worth making).\n   */\n  private resolveSpeculativeKind(path: JsonPath): string | null {\n    if (path.length === 0) {\n      const expected = this.options.expectedRootKind;\n      return expected && this.lookupObjectSchema(expected) ? expected : null;\n    }\n\n    const last = path[path.length - 1];\n\n    if (typeof last === \"string\") {\n      const fieldSchema = this.resolveParentFieldSchema(path);\n      if (\n        fieldSchema?.type === \"object\" &&\n        this.lookupObjectSchema(fieldSchema.kind)\n      ) {\n        return fieldSchema.kind;\n      }\n      return null;\n    }\n\n    // Array item: owner object → field schema → single-member itemKinds.\n    const fieldName = this.parentFieldName(path);\n    if (!fieldName) return null;\n\n    const ownerPath = path.slice(0, -2);\n    const ownerKind = this.getObjectKindForPath(ownerPath);\n    if (!ownerKind) return null;\n\n    const fieldSchema = this.lookupSchema(ownerKind)?.fields[fieldName];\n    const soleItemKind =\n      fieldSchema?.type === \"array\" && fieldSchema.itemKinds.length === 1\n        ? fieldSchema.itemKinds[0]\n        : undefined;\n    if (soleItemKind !== undefined && this.lookupObjectSchema(soleItemKind)) {\n      return soleItemKind;\n    }\n    return null;\n  }\n\n  /**\n   * A schema usable for OBJECT speculation/snapshots — root-form kinds\n   * (non-object data-only shapes) are never a valid object commitment.\n   */\n  private lookupObjectSchema(kind: string): KindSchema | undefined {\n    const schema = this.lookupSchema(kind);\n    return schema && !schema.root ? schema : undefined;\n  }\n\n  private beginScalar(value: unknown, at: number): void {\n    this.placeValue(value, \"scalar\", at, true);\n  }\n\n  private placeValue(\n    value: unknown,\n    valueKind: \"object\" | \"array\" | \"scalar\",\n    at: number,\n    finalizedImmediately: boolean,\n  ): JsonPath | null {\n    if (this.root === undefined) {\n      if (valueKind !== \"object\") {\n        this.fail(\"Root value must be a JSON object.\", at);\n        return null;\n      }\n      this.root = value;\n      return [];\n    }\n\n    const parent = this.currentFrame();\n    if (!parent) {\n      this.fail(\"Unexpected value after root object.\", at);\n      return null;\n    }\n\n    let path: JsonPath;\n    let fieldKey: string | undefined;\n\n    if (parent.kind === \"object\") {\n      if (parent.expecting !== \"value\") {\n        this.fail(\n          `Unexpected value inside object. Expected ${parent.expecting}.`,\n          at,\n        );\n        return null;\n      }\n      if (parent.currentKey === undefined) {\n        this.fail(\"Internal parser error: missing object key.\", at);\n        return null;\n      }\n\n      fieldKey = parent.currentKey;\n      path = [...parent.path, fieldKey];\n\n      // Node-scoped validation failure → mark the PARENT raw, keep parsing.\n      const placementError = this.validateFieldPlacement(\n        parent,\n        fieldKey,\n        valueKind,\n        value,\n      );\n      if (placementError) {\n        this.markNodeRaw(parent.path, parent.value, placementError, at);\n      }\n\n      parent.value[fieldKey] = value;\n      parent.currentKey = undefined;\n      parent.expecting = \"commaOrEnd\";\n    } else {\n      if (parent.expecting !== \"valueOrEnd\" && parent.expecting !== \"value\") {\n        this.fail(\n          `Unexpected value inside array. Expected ${parent.expecting}.`,\n          at,\n        );\n        return null;\n      }\n\n      const index = parent.nextIndex;\n      path = [...parent.path, index];\n      fieldKey = this.parentFieldName(path);\n\n      parent.value.push(value);\n      parent.nextIndex += 1;\n      parent.expecting = \"commaOrEnd\";\n    }\n\n    if (finalizedImmediately) {\n      this.onValueFinalized(path, value, at);\n    }\n\n    return path;\n  }\n\n  private acceptObjectKey(frame: ObjectFrame, key: string, at: number): void {\n    if (frame.expecting !== \"keyOrEnd\" && frame.expecting !== \"key\") {\n      this.fail(`Unexpected object key \"${key}\".`, at);\n      return;\n    }\n\n    if (Object.prototype.hasOwnProperty.call(frame.value, key)) {\n      // Node-scoped: this object goes raw (last-wins semantics), parent lives.\n      this.markNodeRaw(\n        frame.path,\n        frame.value,\n        `Duplicate key \"${key}\".`,\n        at,\n      );\n    }\n\n    if (frame.path.length === 0 && frame.keyCount === 0) {\n      this.noteRootSurfaceKind(key);\n    }\n\n    frame.currentKey = key;\n    frame.keyCount += 1;\n    frame.expecting = \"colon\";\n  }\n\n  private acceptColon(at: number): void {\n    const frame = this.currentFrame();\n    if (!frame || frame.kind !== \"object\" || frame.expecting !== \"colon\") {\n      this.fail(\"Unexpected colon.\", at);\n      return;\n    }\n    frame.expecting = \"value\";\n  }\n\n  private acceptComma(at: number): void {\n    const frame = this.currentFrame();\n    if (!frame || frame.expecting !== \"commaOrEnd\") {\n      this.fail(\"Unexpected comma.\", at);\n      return;\n    }\n\n    if (frame.kind === \"object\") {\n      frame.expecting = \"key\";\n    } else {\n      frame.expecting = \"value\";\n    }\n  }\n\n  private closeCompound(kind: \"object\" | \"array\", at: number): void {\n    const frame = this.currentFrame();\n    if (!frame || frame.kind !== kind) {\n      this.fail(\n        `Unexpected closing ${kind === \"object\" ? \"brace\" : \"bracket\"}.`,\n        at,\n      );\n      return;\n    }\n\n    if (frame.kind === \"object\") {\n      if (frame.expecting !== \"keyOrEnd\" && frame.expecting !== \"commaOrEnd\") {\n        this.fail(`Object closed too early. Expected ${frame.expecting}.`, at);\n        return;\n      }\n    } else if (\n      frame.expecting !== \"valueOrEnd\" &&\n      frame.expecting !== \"commaOrEnd\"\n    ) {\n      this.fail(`Array closed too early. Expected ${frame.expecting}.`, at);\n      return;\n    }\n\n    this.stack.pop();\n    if (this.stack.length === 0) {\n      this.rootDone = true;\n    }\n\n    this.onValueFinalized(frame.path, frame.value, at);\n  }\n\n  /**\n   * True when a value placed at `path` sits directly under a json-any\n   * placement: a `json`/`json[]` FIELD, or a member of a `record` whose\n   * values are `\"json\"`. (Deeper descendants inherit via `opaquePaths`.)\n   */\n  private isJsonAnyPlacement(path: JsonPath): boolean {\n    const fieldSchema = this.resolveParentFieldSchema(path);\n    if (fieldSchema && isJsonAnyField(fieldSchema)) return true;\n\n    const last = path[path.length - 1];\n    if (typeof last === \"string\") {\n      const parentKey = this.pathKey(path.slice(0, -1));\n      if (this.recordSchemas.get(parentKey) === \"json\") return true;\n    }\n    return false;\n  }\n\n  private onValueFinalized(path: JsonPath, value: unknown, at: number): void {\n    if (this.failed) return;\n\n    const pathKey = this.pathKey(path);\n\n    // Opaque subtree: the value is schema-legal by contract; no kind\n    // identification, no snapshots, no raw degradation.\n    const parentIsOpaque =\n      path.length > 0 && this.opaquePaths.has(this.pathKey(path.slice(0, -1)));\n    if (this.opaquePaths.has(pathKey)) {\n      // The subtree ROOT sits on a typed parent's json-any field — surface it\n      // as an ordinary field event (and parent snapshot) like any scalar.\n      if (!parentIsOpaque) this.emitFieldIfReady(path, value, at);\n      return;\n    }\n    if (parentIsOpaque) return;\n\n    if (this.isKindFieldPath(path)) {\n      if (typeof value !== \"string\") {\n        return;\n      }\n\n      this.onKindDiscriminatorArrived(path.slice(0, -1), value, at);\n      return;\n    }\n\n    if (typeof value === \"object\" && value !== null && !Array.isArray(value)) {\n      const objectValue = value as Record<string, unknown>;\n\n      const inlineFields = this.inlineSchemas.get(pathKey);\n      if (inlineFields) {\n        const inlineError = this.validateObjectAgainstFields(\n          objectValue,\n          inlineFields,\n        );\n        if (inlineError.error) {\n          this.emitRawObject(path, objectValue, inlineError.error, at);\n          return;\n        }\n        this.inlineSchemas.delete(pathKey);\n        this.emitSchemaNotices(path, \"inline_object\", inlineError, at);\n        this.emit({\n          type: \"object_complete\",\n          kind: \"inline_object\",\n          path,\n          value: objectValue,\n          at,\n        });\n      } else {\n        const recordValueType = this.recordSchemas.get(pathKey);\n        if (recordValueType) {\n          const recordError = this.validateRecordObject(\n            objectValue,\n            recordValueType,\n          );\n          if (recordError) {\n            this.emitRawObject(path, objectValue, recordError, at);\n            return;\n          }\n          this.recordSchemas.delete(pathKey);\n          this.emit({\n            type: \"object_complete\",\n            kind: \"record\",\n            path,\n            value: objectValue,\n            at,\n          });\n        } else {\n          this.completeTypedObject(path, objectValue, at);\n        }\n      }\n    }\n\n    this.emitFieldIfReady(path, value, at);\n\n    if (path.length === 0) {\n      this.completeRoot(value as Record<string, unknown>, at);\n    }\n  }\n\n  /** __kind arrived for an object — confirm speculation, identify, or backtrack. */\n  private onKindDiscriminatorArrived(\n    objectPath: JsonPath,\n    kind: string,\n    at: number,\n  ): void {\n    const objectPathKey = this.pathKey(objectPath);\n\n    if (this.rawObjectPaths.has(objectPathKey)) return;\n\n    const prior = this.objectKinds.get(objectPathKey);\n    const wasSpeculative = this.speculativeKinds.has(objectPathKey);\n\n    if (prior !== undefined && wasSpeculative) {\n      this.speculativeKinds.delete(objectPathKey);\n\n      if (prior === kind) {\n        // Confirmation — the commitment was right; nothing to redo.\n        this.emitBlockSnapshotForObject(objectPath, at);\n        return;\n      }\n\n      // Contradiction. Allowed sibling kind (multi-member itemKinds) → re-tag.\n      if (\n        this.lookupSchema(kind) &&\n        this.validateArrayItemKind(objectPath, kind) === null &&\n        this.speculativeRetagAllowed(objectPath, kind)\n      ) {\n        this.objectKinds.set(objectPathKey, kind);\n        if (objectPath.length === 0) {\n          this.rootKind = kind;\n        }\n        this.emit({ type: \"kind_identified\", kind, path: objectPath, at });\n        this.emitBlockSnapshotForObject(objectPath, at);\n        return;\n      }\n\n      // Backtrack: the prediction was wrong and the truth doesn't fit here.\n      const live = this.getLiveObjectValue(objectPath);\n      this.objectKinds.delete(objectPathKey);\n      if (objectPath.length === 0) {\n        this.rootKind = \"\";\n      }\n      this.emitRawObject(\n        objectPath,\n        safeCopy(live ?? {}),\n        `Speculated kind \"${prior}\" contradicted by ${KIND_KEY} \"${kind}\".`,\n        at,\n      );\n      return;\n    }\n\n    this.objectKinds.set(objectPathKey, kind);\n\n    this.emit({\n      type: \"kind_identified\",\n      kind,\n      path: objectPath,\n      at,\n    });\n\n    this.clearKindWait(objectPath, \"identified\", at, kind);\n\n    if (objectPath.length === 0) {\n      this.rootKind = kind;\n    }\n\n    // PENDING SCHEMA: kind known, schema cold — hold and fetch.\n    if (!this.lookupSchema(kind) && this.resolver.request) {\n      this.addPendingSchemaPath(kind, objectPath);\n      this.emit({ type: \"pending_schema\", kind, path: objectPath, at });\n      this.resolver.request(kind);\n      return;\n    }\n\n    this.flushDeferredFields(objectPath, kind, at);\n    this.emitBlockSnapshotForObject(objectPath, at);\n  }\n\n  /** A contradicted speculation may re-tag only where the new kind is legal. */\n  private speculativeRetagAllowed(path: JsonPath, kind: string): boolean {\n    if (path.length === 0) {\n      // Root prediction came from external context; any registered kind is a\n      // legal correction.\n      return true;\n    }\n\n    const last = path[path.length - 1];\n    if (typeof last === \"number\") {\n      const fieldName = this.parentFieldName(path);\n      const ownerKind = this.getObjectKindForPath(path.slice(0, -2));\n      if (!fieldName || !ownerKind) return false;\n      const fieldSchema = this.lookupSchema(ownerKind)?.fields[fieldName];\n      return (\n        fieldSchema?.type === \"array\" && fieldSchema.itemKinds.includes(kind)\n      );\n    }\n\n    // Declared object fields pin exactly one kind — a different one is a\n    // contradiction, not a re-tag.\n    return false;\n  }\n\n  private addPendingSchemaPath(kind: string, path: JsonPath): void {\n    const pathKey = this.pathKey(path);\n    const existing = this.pendingSchemaPaths.get(kind) ?? new Map();\n    existing.set(pathKey, path);\n    this.pendingSchemaPaths.set(kind, existing);\n  }\n\n  private completeTypedObject(\n    path: JsonPath,\n    objectValue: Record<string, unknown>,\n    at: number,\n  ): void {\n    const pathKey = this.pathKey(path);\n\n    // Already backtracked to raw mid-stream — nothing further to claim.\n    if (this.rawObjectPaths.has(pathKey)) return;\n\n    const declaredKind = readObjectKind(objectValue);\n    const committedKind = this.objectKinds.get(pathKey);\n\n    // Closed while its schema fetch is still in flight — defer finalization.\n    if (\n      committedKind &&\n      this.pendingSchemaPaths.get(committedKind)?.has(pathKey)\n    ) {\n      this.closedPendingPaths.add(pathKey);\n      return;\n    }\n\n    // Speculation that never saw __kind: prediction alone types the object.\n    if (!declaredKind && committedKind && this.speculativeKinds.has(pathKey)) {\n      this.speculativeKinds.delete(pathKey);\n      this.finalizeSpeculatedObject(path, objectValue, committedKind, at, true);\n      return;\n    }\n\n    // THE JSON-ROOT-KEY SURFACE converges here (see noteRootSurfaceKind).\n    // Same posture as any speculation: it NEVER claims a kind it cannot\n    // validate — a payload that doesn't satisfy the schema still degrades to\n    // raw, but with a notice naming the expected kind and the real contract\n    // gap instead of the misleading `Object is missing \"__kind\"`.\n    if (\n      path.length === 0 &&\n      !declaredKind &&\n      !committedKind &&\n      this.rootSurfaceKind\n    ) {\n      const surfaceKind = this.rootSurfaceKind;\n      this.rootSurfaceKind = null;\n      this.objectKinds.set(pathKey, surfaceKind);\n      this.rootKind = surfaceKind;\n      this.emit({\n        type: \"kind_identified\",\n        kind: surfaceKind,\n        path,\n        speculative: true,\n        at,\n      });\n      this.clearKindWait(path, \"identified\", at, surfaceKind);\n      this.finalizeSpeculatedObject(path, objectValue, surfaceKind, at);\n      return;\n    }\n\n    if (!declaredKind) {\n      this.emitRawObject(\n        path,\n        objectValue,\n        `Object is missing \"${KIND_KEY}\".`,\n        at,\n      );\n      return;\n    }\n\n    this.speculativeKinds.delete(pathKey);\n    this.finalizeTypedObject(path, objectValue, at);\n  }\n\n  /** Validate + complete an object whose value carries __kind. */\n  private finalizeTypedObject(\n    path: JsonPath,\n    objectValue: Record<string, unknown>,\n    at: number,\n  ): void {\n    const pathKey = this.pathKey(path);\n    const kind = readObjectKind(objectValue);\n\n    if (!kind) {\n      this.emitRawObject(\n        path,\n        objectValue,\n        `Object is missing \"${KIND_KEY}\".`,\n        at,\n      );\n      return;\n    }\n\n    const schema = this.lookupSchema(kind);\n    if (!schema) {\n      this.emitRawObject(\n        path,\n        objectValue,\n        `No block schema registered for \"${kind}\".`,\n        at,\n        kind,\n        \"unverified\",\n      );\n      return;\n    }\n\n    // Validation failures keep the identified kind on the raw event (KIND\n    // PRESERVATION, 2026-08-29): the payload SAID what it is; failing its\n    // schema makes it a broken instance, not an anonymous object.\n    const arrayItemError = this.validateArrayItemKind(path, kind);\n    if (arrayItemError) {\n      this.emitRawObject(path, objectValue, arrayItemError, at, kind);\n      return;\n    }\n\n    const outcome = this.validateObjectAgainstSchema(objectValue, schema);\n    if (outcome.error) {\n      this.emitRawObject(path, objectValue, outcome.error, at, kind);\n      return;\n    }\n\n    this.objectKinds.set(pathKey, kind);\n    this.emitSchemaNotices(path, kind, outcome, at);\n    this.emitBlockSnapshotForObject(path, at, true);\n    this.emit({\n      type: \"object_complete\",\n      kind,\n      path,\n      value: objectValue,\n      at,\n    });\n  }\n\n  /** Validate + complete an object typed purely by parent prediction. */\n  private finalizeSpeculatedObject(\n    path: JsonPath,\n    objectValue: Record<string, unknown>,\n    kind: string,\n    at: number,\n    requireSharedField = false,\n  ): void {\n    const schema = this.lookupSchema(kind);\n    if (!schema) {\n      this.emitRawObject(\n        path,\n        objectValue,\n        `No block schema registered for \"${kind}\".`,\n        at,\n        kind,\n        \"unverified\",\n      );\n      return;\n    }\n\n    // A pure PREDICTION (no __kind, no surface) claims the object only when\n    // it carries at least one of the kind's own fields. Missing fields never\n    // degrade a block, so without this an unrelated object would render as\n    // an empty component and hide its data.\n    if (\n      requireSharedField &&\n      !Object.keys(objectValue).some((key) => key in schema.fields)\n    ) {\n      this.emitRawObject(\n        path,\n        objectValue,\n        `Object carries none of \"${kind}\"'s fields.`,\n        at,\n      );\n      return;\n    }\n\n    const outcome = this.validateObjectAgainstSchema(\n      { ...objectValue, [KIND_KEY]: kind },\n      schema,\n    );\n    if (outcome.error) {\n      // KIND PRESERVATION: same rule as finalizeTypedObject above.\n      this.emitRawObject(path, objectValue, outcome.error, at, kind);\n      return;\n    }\n\n    this.emitSchemaNotices(path, kind, outcome, at);\n    this.emitBlockSnapshotForObject(path, at, true);\n    this.emit({\n      type: \"object_complete\",\n      kind,\n      path,\n      value: objectValue,\n      at,\n    });\n  }\n\n  private validateArrayItemKind(path: JsonPath, kind: string): string | null {\n    const last = path[path.length - 1];\n    if (typeof last !== \"number\") return null;\n\n    const fieldName = this.parentFieldName(path);\n    if (!fieldName) return null;\n\n    const ownerObjectPath = path.slice(0, -2);\n    const parentKind = this.getObjectKindForPath(ownerObjectPath);\n    if (!parentKind) return null;\n\n    const fieldSchema = this.lookupSchema(parentKind)?.fields[fieldName];\n    if (!fieldSchema || fieldSchema.type !== \"array\") return null;\n\n    if (!fieldSchema.itemKinds.includes(kind)) {\n      return `Kind \"${kind}\" is not allowed in \"${fieldName}\" on \"${parentKind}\" (expected one of: ${fieldSchema.itemKinds.join(\", \")}).`;\n    }\n\n    return null;\n  }\n\n  private completeRoot(rootObject: Record<string, unknown>, at: number): void {\n    const pathKey = this.pathKey([]);\n\n    if (this.rawObjectPaths.has(pathKey)) {\n      this.emit({\n        type: \"complete\",\n        kind: readObjectKind(rootObject) ?? \"\",\n        value: rootObject,\n        at,\n      });\n      return;\n    }\n\n    // Root closed while its schema fetch is in flight — completeTypedObject\n    // already recorded the deferral; report the committed kind.\n    const committedKind = this.objectKinds.get(pathKey);\n    if (\n      committedKind &&\n      this.pendingSchemaPaths.get(committedKind)?.has(pathKey)\n    ) {\n      this.emit({\n        type: \"complete\",\n        kind: committedKind,\n        value: rootObject,\n        at,\n      });\n      return;\n    }\n\n    this.emit({\n      type: \"complete\",\n      kind: this.objectKinds.get(pathKey) ?? readObjectKind(rootObject) ?? \"\",\n      value: rootObject,\n      at,\n    });\n  }\n\n  /** Mark a node raw (node-scoped failure) without killing the stream. */\n  private markNodeRaw(\n    path: JsonPath,\n    liveValue: unknown,\n    reason: string,\n    at: number,\n  ): void {\n    const pathKey = this.pathKey(path);\n    if (this.rawObjectPaths.has(pathKey)) return;\n\n    // KIND PRESERVATION (2026-08-29): a structural failure (duplicate key,\n    // placement error) does not un-identify the node. The identified kind\n    // rides the raw event so the envelope keeps it — the render seam can then\n    // acknowledge a BROKEN instance of a registered kind (generic floor +\n    // problems) instead of showing anonymous JSON. Unregistered slugs are\n    // unaffected: the route only claims kinds the platform knows.\n    const identifiedKind =\n      this.objectKinds.get(pathKey) ??\n      (typeof liveValue === \"object\" &&\n      liveValue !== null &&\n      !Array.isArray(liveValue)\n        ? (readObjectKind(liveValue as Record<string, unknown>) ?? undefined)\n        : undefined);\n    this.speculativeKinds.delete(pathKey);\n    this.emitRawObject(path, safeCopy(liveValue), reason, at, identifiedKind);\n  }\n\n  /**\n   * Degrade ONE node off the resolved path.\n   *\n   * `cause` defaults to `\"invalid\"` deliberately: every call site that omits\n   * it is a real failure (validation, duplicate key, placement, contradicted\n   * speculation). ONLY the \"no schema registered\" sites pass `\"unverified\"`,\n   * and they are the reason the parameter exists — see `IrKindState`.\n   */\n  private emitRawObject(\n    path: JsonPath,\n    value: unknown,\n    reason: string,\n    at: number,\n    identifiedKind?: string,\n    cause: RawObjectCause = \"invalid\",\n  ): void {\n    const pathKey = this.pathKey(path);\n    if (this.rawObjectPaths.has(pathKey)) return;\n\n    this.rawObjectPaths.add(pathKey);\n    this.clearKindWait(path, \"raw_fallback\", at, undefined, reason);\n    this.emit({\n      type: \"raw_object\",\n      path,\n      value,\n      reason,\n      ...(identifiedKind !== undefined && { kind: identifiedKind }),\n      cause,\n      at,\n    });\n  }\n\n  private clearKindWait(\n    path: JsonPath,\n    outcome: \"identified\" | \"raw_fallback\",\n    at: number,\n    kind?: string,\n    reason?: string,\n  ): void {\n    const pathKey = this.pathKey(path);\n    if (!this.awaitingKindPaths.has(pathKey)) return;\n\n    this.awaitingKindPaths.delete(pathKey);\n    this.emit({\n      type: \"kind_wait_end\",\n      path,\n      outcome,\n      ...(kind !== undefined && { kind }),\n      ...(reason !== undefined && { reason }),\n      at,\n    });\n  }\n\n  private emitFieldIfReady(path: JsonPath, value: unknown, at: number): void {\n    const fieldKey = this.fieldKeyFromPath(path);\n    if (!fieldKey || fieldKey === KIND_KEY) return;\n\n    const parentPath = path.slice(0, -1);\n    const objectKind = this.getDirectObjectKind(parentPath);\n    if (!objectKind) {\n      const parentPathKey = this.pathKey(parentPath);\n      const deferred = this.deferredFields.get(parentPathKey) ?? [];\n      deferred.push({ key: fieldKey, value, at });\n      this.deferredFields.set(parentPathKey, deferred);\n      return;\n    }\n\n    // PENDING-SCHEMA EARLY FIELDS: an identified kind whose schema hasn't\n    // arrived yet (cold fetch in flight) cannot validate fields — but its\n    // early top-level values (title, loading_message, …) are exactly what a\n    // loading component needs to render meaningfully DURING the wait. Emit\n    // them un-validated; once the schema lands, snapshots take over and the\n    // compliant value supersedes anything shown early.\n    const schemaResolved = this.lookupSchema(objectKind) !== undefined;\n    if (\n      schemaResolved &&\n      !this.isAllowedSchemaField(parentPath, fieldKey, objectKind)\n    ) {\n      return;\n    }\n\n    this.emit({\n      type: \"field\",\n      kind: objectKind,\n      path,\n      key: fieldKey,\n      value,\n      at,\n    });\n\n    this.emitBlockSnapshotForObject(parentPath, at);\n  }\n\n  private flushDeferredFields(\n    objectPath: JsonPath,\n    kind: string,\n    at: number,\n  ): void {\n    const pathKey = this.pathKey(objectPath);\n    const deferred = this.deferredFields.get(pathKey);\n    if (!deferred) return;\n\n    for (const entry of deferred) {\n      if (entry.key === KIND_KEY) continue;\n      if (!this.isAllowedSchemaField(objectPath, entry.key, kind)) continue;\n\n      this.emit({\n        type: \"field\",\n        kind,\n        path: [...objectPath, entry.key],\n        key: entry.key,\n        value: entry.value,\n        at: entry.at,\n      });\n    }\n\n    this.deferredFields.delete(pathKey);\n    this.emitBlockSnapshotForObject(objectPath, at);\n  }\n\n  private getLiveObjectValue(path: JsonPath): Record<string, unknown> | null {\n    const pathKey = this.pathKey(path);\n    for (let i = this.stack.length - 1; i >= 0; i--) {\n      const frame = this.stack[i];\n      // `i` ranges over [0, stack.length) by construction, so `frame` is\n      // always defined here — unreachable, satisfies noUncheckedIndexedAccess.\n      if (!frame) continue;\n      if (frame.kind === \"object\" && this.pathKey(frame.path) === pathKey) {\n        return frame.value;\n      }\n    }\n    return null;\n  }\n\n  private emitBlockSnapshotForObject(\n    objectPath: JsonPath,\n    at: number,\n    complete = false,\n  ): void {\n    const pathKey = this.pathKey(objectPath);\n    if (this.rawObjectPaths.has(pathKey)) return;\n\n    const kind = this.getDirectObjectKind(objectPath);\n    if (!kind) return;\n\n    // Root-form kinds have no object field map — nothing to snapshot.\n    const schema = this.lookupObjectSchema(kind);\n    if (!schema) return;\n\n    const partial = complete\n      ? this.getFinalizedObjectValue(objectPath)\n      : this.getLiveObjectValue(objectPath);\n    if (!partial) return;\n\n    const { value, residue } = buildCompliantKindSnapshot(schema, partial);\n    this.emit({\n      type: \"block_snapshot\",\n      kind,\n      path: objectPath,\n      value,\n      residue,\n      complete,\n      at,\n    });\n  }\n\n  /**\n   * On `complete` snapshots (and post-close schema upgrades) the frame has\n   * already been popped — the finalized value lives in the root tree.\n   */\n  private getFinalizedObjectValue(\n    path: JsonPath,\n  ): Record<string, unknown> | null {\n    const live = this.getLiveObjectValue(path);\n    if (live) return live;\n\n    if (path.length === 0) {\n      return typeof this.root === \"object\" &&\n        this.root !== null &&\n        !Array.isArray(this.root)\n        ? (this.root as Record<string, unknown>)\n        : null;\n    }\n\n    let cursor: unknown = this.root;\n    for (const segment of path) {\n      if (cursor === null || typeof cursor !== \"object\") return null;\n      cursor = (cursor as Record<string | number, unknown>)[\n        segment as string | number\n      ];\n    }\n    return typeof cursor === \"object\" &&\n      cursor !== null &&\n      !Array.isArray(cursor)\n      ? (cursor as Record<string, unknown>)\n      : null;\n  }\n\n  private validateFieldPlacement(\n    parent: ObjectFrame,\n    fieldKey: string,\n    valueKind: \"object\" | \"array\" | \"scalar\",\n    value: unknown,\n  ): string | null {\n    const parentPathKey = this.pathKey(parent.path);\n    const inlineFields = this.inlineSchemas.get(parentPathKey);\n    if (inlineFields) {\n      const fieldSchema = inlineFields[fieldKey];\n      if (!fieldSchema) {\n        return null;\n      }\n      return this.validateValueAgainstField(\n        fieldSchema,\n        valueKind,\n        value,\n        fieldKey,\n      );\n    }\n\n    const recordValueType = this.recordSchemas.get(parentPathKey);\n    if (recordValueType) {\n      if (recordValueType === \"json\") return null; // any member value is legal\n      if (valueKind !== \"scalar\") {\n        return `Record field \"${fieldKey}\" must be a scalar.`;\n      }\n      return this.validateRecordScalar(recordValueType, value, fieldKey);\n    }\n\n    return null;\n  }\n\n  private emitSchemaNotices(\n    path: JsonPath,\n    kind: string,\n    outcome: Pick<SchemaValidationOutcome, \"optionalMissing\" | \"extraFields\">,\n    at: number,\n  ): void {\n    for (const field of outcome.optionalMissing) {\n      this.emit({\n        type: \"optional_field_missing\",\n        kind,\n        path,\n        field,\n        at,\n      });\n    }\n\n    for (const field of outcome.extraFields) {\n      this.emit({\n        type: \"extra_field\",\n        kind,\n        path,\n        field,\n        at,\n      });\n    }\n  }\n\n  private validateObjectAgainstSchema(\n    objectValue: Record<string, unknown>,\n    schema: KindSchema,\n  ): SchemaValidationOutcome {\n    const optionalMissing: string[] = [];\n    const extraFields: string[] = [];\n    const emptyOutcome = { optionalMissing, extraFields };\n\n    // Root-form kinds are data-only (scalar/array/json roots): a __kind\n    // object claiming one is a contradiction, never a trivial pass.\n    if (schema.root) {\n      return {\n        error: `Kind \"${schema.kind}\" has a non-object root form and cannot be a \"${KIND_KEY}\" object.`,\n        ...emptyOutcome,\n      };\n    }\n\n    const kind = readObjectKind(objectValue);\n    if (kind !== schema.kind) {\n      return {\n        error: `Object \"${KIND_KEY}\" is \"${kind ?? \"missing\"}\", expected \"${schema.kind}\".`,\n        ...emptyOutcome,\n      };\n    }\n\n    for (const fieldName of Object.keys(schema.fields)) {\n      // A MISSING FIELD NEVER DEGRADES A BLOCK (Arman, 2026-09-28). The\n      // person reading can't supply it; the component renders it blank and\n      // the gap is announced as a `missing_optional_field` notice (the\n      // residue's optionalMissing), never as a raw-data error card. Only a\n      // PRESENT value of the wrong type is a contract violation.\n      if (!(fieldName in objectValue)) {\n        optionalMissing.push(fieldName);\n      }\n    }\n\n    for (const [fieldName, fieldValue] of Object.entries(objectValue)) {\n      if (fieldName === KIND_KEY) continue;\n\n      const fieldSchema = schema.fields[fieldName];\n      if (!fieldSchema) {\n        extraFields.push(fieldName);\n        continue;\n      }\n\n      const error = this.validateFinalFieldValue(\n        fieldSchema,\n        fieldValue,\n        fieldName,\n        schema.kind,\n      );\n      if (error) {\n        return { error, optionalMissing, extraFields };\n      }\n    }\n\n    return { error: null, optionalMissing, extraFields };\n  }\n\n  private validateFinalFieldValue(\n    fieldSchema: FieldSchema,\n    value: unknown,\n    fieldName: string,\n    objectKind: string,\n  ): string | null {\n    // Any JSON value is legal — including null, objects, arrays.\n    if (fieldSchema.type === \"json\") return null;\n\n    // `nullable` is a property of the FIELD, not of its type: a field the\n    // schema declares nullable accepts `null` whatever shape it otherwise\n    // carries — object / inline_object / record / array / scalar alike. This\n    // MUST run before every per-type check below, because each of those reads\n    // `null` as a shape violation and returns an error first (the defect that\n    // degraded whole instances to `kindState: \"raw\"`, 2026-08-30).\n    if (value === null && fieldSchema.nullable === true) return null;\n\n    if (fieldSchema.type === \"json[]\") {\n      if (value === null) {\n        return `Field \"${fieldName}\" on kind \"${objectKind}\" cannot be null.`;\n      }\n      if (!Array.isArray(value)) {\n        return `Field \"${fieldName}\" on kind \"${objectKind}\" must be an array.`;\n      }\n      return null;\n    }\n\n    if (isScalarArrayType(fieldSchema.type)) {\n      if (!Array.isArray(value)) {\n        return `Field \"${fieldName}\" on kind \"${objectKind}\" must be an array.`;\n      }\n      const itemType = scalarArrayItemType(fieldSchema.type);\n      if (!value.every((item) => typeof item === itemType)) {\n        return `Field \"${fieldName}\" on kind \"${objectKind}\" must be an array of ${itemType}s.`;\n      }\n      // Items-enum (string[] option sets): closed sets reject unknown values;\n      // `open` sets are advisory — any string item is legal.\n      if (\n        fieldSchema.type === \"string[]\" &&\n        fieldSchema.values !== undefined &&\n        !fieldSchema.open\n      ) {\n        const allowed = fieldSchema.values;\n        const bad = value.find(\n          (item) => typeof item === \"string\" && !allowed.includes(item),\n        );\n        if (bad !== undefined) {\n          return `Field \"${fieldName}\" on kind \"${objectKind}\" items must be one of: ${allowed.join(\", \")}.`;\n        }\n      }\n      return null;\n    }\n\n    if (fieldSchema.type === \"array\") {\n      if (!Array.isArray(value)) {\n        return `Field \"${fieldName}\" on kind \"${objectKind}\" must be an array.`;\n      }\n      return null;\n    }\n\n    if (fieldSchema.type === \"object\") {\n      if (\n        typeof value !== \"object\" ||\n        value === null ||\n        Array.isArray(value)\n      ) {\n        return `Field \"${fieldName}\" on kind \"${objectKind}\" must be an object.`;\n      }\n      const nestedKind = readObjectKind(value as Record<string, unknown>);\n      if (nestedKind !== fieldSchema.kind) {\n        return `Field \"${fieldName}\" on kind \"${objectKind}\" must be kind \"${fieldSchema.kind}\".`;\n      }\n      const nestedSchema = this.lookupSchema(fieldSchema.kind);\n      if (!nestedSchema) {\n        return `Unknown nested kind \"${fieldSchema.kind}\" on field \"${fieldName}\".`;\n      }\n      return this.validateObjectAgainstSchema(\n        value as Record<string, unknown>,\n        nestedSchema,\n      ).error;\n    }\n\n    if (fieldSchema.type === \"inline_object\") {\n      if (\n        typeof value !== \"object\" ||\n        value === null ||\n        Array.isArray(value)\n      ) {\n        return `Field \"${fieldName}\" on kind \"${objectKind}\" must be an inline object.`;\n      }\n      return this.validateObjectAgainstFields(\n        value as Record<string, unknown>,\n        fieldSchema.fields,\n      ).error;\n    }\n\n    if (fieldSchema.type === \"record\") {\n      if (\n        typeof value !== \"object\" ||\n        value === null ||\n        Array.isArray(value)\n      ) {\n        return `Field \"${fieldName}\" on kind \"${objectKind}\" must be a record object.`;\n      }\n      return this.validateRecordObject(\n        value as Record<string, unknown>,\n        fieldSchema.values,\n      );\n    }\n\n    if (fieldSchema.type === \"union\") {\n      // Object union member — the value must be one of the declared kinds.\n      if (\n        typeof value === \"object\" &&\n        value !== null &&\n        !Array.isArray(value)\n      ) {\n        const kinds = fieldSchema.kinds ?? [];\n        if (kinds.length === 0) {\n          return `Field \"${fieldName}\" on kind \"${objectKind}\" must be ${fieldSchema.scalars.join(\" | \")}.`;\n        }\n        const memberKind = readObjectKind(value as Record<string, unknown>);\n        if (!memberKind || !kinds.includes(memberKind)) {\n          return `Field \"${fieldName}\" on kind \"${objectKind}\" must be one of kinds: ${kinds.join(\", \")}.`;\n        }\n        const memberSchema = this.lookupSchema(memberKind);\n        if (!memberSchema) {\n          return `Unknown union member kind \"${memberKind}\" on field \"${fieldName}\".`;\n        }\n        return this.validateObjectAgainstSchema(\n          value as Record<string, unknown>,\n          memberSchema,\n        ).error;\n      }\n      return this.validateScalarField(fieldSchema, value, fieldName);\n    }\n\n    if (\n      fieldSchema.type === \"string\" ||\n      fieldSchema.type === \"number\" ||\n      fieldSchema.type === \"boolean\" ||\n      fieldSchema.type === \"enum\"\n    ) {\n      return this.validateScalarField(fieldSchema, value, fieldName);\n    }\n\n    return `Unsupported field schema for \"${fieldName}\".`;\n  }\n\n  private validateValueAgainstField(\n    fieldSchema: FieldSchema,\n    valueKind: \"object\" | \"array\" | \"scalar\",\n    value: unknown,\n    fieldName: string,\n  ): string | null {\n    if (fieldSchema.type === \"json\") {\n      // Any placement is legal for a json-any field.\n      return null;\n    }\n    // Same field-level nullable law as validateFinalFieldValue: a null arrives\n    // here as a scalar token, and every shape check below would reject it.\n    if (value === null && fieldSchema.nullable === true) return null;\n    if (fieldSchema.type === \"array\" || fieldSchema.type === \"json[]\") {\n      return valueKind === \"array\"\n        ? null\n        : `Field \"${fieldName}\" must be an array.`;\n    }\n    if (\n      fieldSchema.type === \"object\" ||\n      fieldSchema.type === \"inline_object\"\n    ) {\n      return valueKind === \"object\"\n        ? null\n        : `Field \"${fieldName}\" must be an object.`;\n    }\n    if (fieldSchema.type === \"record\") {\n      return valueKind === \"object\"\n        ? null\n        : `Field \"${fieldName}\" must be a record object.`;\n    }\n    if (isScalarArrayType(fieldSchema.type)) {\n      return valueKind === \"array\"\n        ? null\n        : `Field \"${fieldName}\" must be an array.`;\n    }\n    if (fieldSchema.type === \"union\" && (fieldSchema.kinds?.length ?? 0) > 0) {\n      // Object union members arrive as objects; scalars stay scalar-checked.\n      if (valueKind === \"object\") return null;\n    }\n    if (valueKind !== \"scalar\") {\n      return `Field \"${fieldName}\" must be a scalar.`;\n    }\n    return this.validateScalarField(fieldSchema, value, fieldName);\n  }\n\n  private validateScalarField(\n    fieldSchema: FieldSchema,\n    value: unknown,\n    fieldName: string,\n  ): string | null {\n    if (value === null) {\n      return fieldSchema.nullable\n        ? null\n        : `Field \"${fieldName}\" cannot be null.`;\n    }\n\n    if (fieldSchema.type === \"enum\") {\n      if (typeof value !== \"string\") {\n        return `Field \"${fieldName}\" must be a string.`;\n      }\n      // `open` — the option set is advisory (\"these OR any string\"); any\n      // string value is legal. Closed enums reject unknown values.\n      if (!fieldSchema.open && !fieldSchema.values.includes(value)) {\n        return `Field \"${fieldName}\" must be one of: ${fieldSchema.values.join(\", \")}.`;\n      }\n      return null;\n    }\n\n    if (fieldSchema.type === \"union\") {\n      const valueType = typeof value;\n      if (\n        valueType !== \"string\" &&\n        valueType !== \"number\" &&\n        valueType !== \"boolean\"\n      ) {\n        return `Field \"${fieldName}\" must be ${fieldSchema.scalars.join(\" | \")}.`;\n      }\n      if (\n        !fieldSchema.scalars.includes(\n          valueType as \"string\" | \"number\" | \"boolean\",\n        )\n      ) {\n        return `Field \"${fieldName}\" must be ${fieldSchema.scalars.join(\" | \")}.`;\n      }\n      return null;\n    }\n\n    if (\n      fieldSchema.type === \"string\" ||\n      fieldSchema.type === \"number\" ||\n      fieldSchema.type === \"boolean\"\n    ) {\n      if (typeof value !== fieldSchema.type) {\n        return `Field \"${fieldName}\" must be ${fieldSchema.type}.`;\n      }\n      // Numeric bounds (inclusive, mirroring JSON Schema minimum/maximum).\n      // `step` (multipleOf) stays annotation-level here — float modulo is\n      // unreliable; the emitted JSON Schema gate (ajv/Pydantic) owns it.\n      if (fieldSchema.type === \"number\" && typeof value === \"number\") {\n        if (fieldSchema.min !== undefined && value < fieldSchema.min) {\n          return `Field \"${fieldName}\" must be >= ${fieldSchema.min}.`;\n        }\n        if (fieldSchema.max !== undefined && value > fieldSchema.max) {\n          return `Field \"${fieldName}\" must be <= ${fieldSchema.max}.`;\n        }\n      }\n      return null;\n    }\n\n    return `Field \"${fieldName}\" is not a scalar.`;\n  }\n\n  private validateRecordScalar(\n    valueType: RecordValueType,\n    value: unknown,\n    fieldName: string,\n  ): string | null {\n    if (valueType === \"json\") return null;\n    if (typeof value !== valueType) {\n      return `Record field \"${fieldName}\" must be ${valueType}.`;\n    }\n    return null;\n  }\n\n  private validateRecordObject(\n    objectValue: Record<string, unknown>,\n    valueType: RecordValueType,\n  ): string | null {\n    if (valueType === \"json\") return null;\n    for (const [key, entry] of Object.entries(objectValue)) {\n      if (typeof entry !== valueType) {\n        return `Record key \"${key}\" must be ${valueType}.`;\n      }\n    }\n    return null;\n  }\n\n  private validateObjectAgainstFields(\n    objectValue: Record<string, unknown>,\n    fields: Record<string, FieldSchema>,\n  ): SchemaValidationOutcome {\n    const optionalMissing: string[] = [];\n    const extraFields: string[] = [];\n\n    for (const fieldName of Object.keys(fields)) {\n      // A MISSING FIELD NEVER DEGRADES A BLOCK (Arman, 2026-09-28). The\n      // person reading can't supply it; the component renders it blank and\n      // the gap is announced as a `missing_optional_field` notice (the\n      // residue's optionalMissing), never as a raw-data error card. Only a\n      // PRESENT value of the wrong type is a contract violation.\n      if (!(fieldName in objectValue)) {\n        optionalMissing.push(fieldName);\n      }\n    }\n\n    for (const [fieldName, fieldValue] of Object.entries(objectValue)) {\n      const fieldSchema = fields[fieldName];\n      if (!fieldSchema) {\n        extraFields.push(fieldName);\n        continue;\n      }\n\n      const error = this.validateFinalFieldValue(\n        fieldSchema,\n        fieldValue,\n        fieldName,\n        \"inline_object\",\n      );\n      if (error) {\n        return { error, optionalMissing, extraFields };\n      }\n    }\n\n    return { error: null, optionalMissing, extraFields };\n  }\n\n  private registerObjectContext(path: JsonPath): void {\n    const fieldSchema = this.resolveParentFieldSchema(path);\n    if (!fieldSchema) return;\n\n    const pathKey = this.pathKey(path);\n    if (fieldSchema.type === \"inline_object\") {\n      this.inlineSchemas.set(pathKey, fieldSchema.fields);\n    }\n    if (fieldSchema.type === \"record\") {\n      this.recordSchemas.set(pathKey, fieldSchema.values);\n    }\n  }\n\n  private resolveParentFieldSchema(path: JsonPath): FieldSchema | undefined {\n    const fieldKey = this.fieldKeyFromPath(path);\n    if (!fieldKey) return undefined;\n\n    const parentPath = path.slice(0, -1);\n    // An INLINE-OBJECT parent carries a field map too, and nesting is legal at\n    // any depth (`validateObjectAgainstFields` recurses without limit). Reading\n    // only kind-typed parents made the second level invisible mid-stream: the\n    // nested object registered no context and closed as an untyped object —\n    // `Object is missing \"__kind\"` — degrading the whole instance to raw for a\n    // shape its own schema declares (`lulu_print_job.costs.shipping_cost`).\n    const inlineFields = this.inlineSchemas.get(this.pathKey(parentPath));\n    if (inlineFields) return inlineFields[fieldKey];\n\n    const parentKind = this.getObjectKindForPath(parentPath);\n    if (!parentKind) return undefined;\n\n    return this.lookupSchema(parentKind)?.fields[fieldKey];\n  }\n\n  private getObjectKindForPath(path: JsonPath): string | null {\n    return (\n      this.objectKinds.get(this.pathKey(path)) ??\n      (path.length === 0 ? this.rootKind || null : null)\n    );\n  }\n\n  private getDirectObjectKind(objectPath: JsonPath): string | null {\n    if (objectPath.length === 0) {\n      return this.rootKind || null;\n    }\n    return this.objectKinds.get(this.pathKey(objectPath)) ?? null;\n  }\n\n  private isAllowedSchemaField(\n    objectPath: JsonPath,\n    fieldKey: string,\n    objectKind: string,\n  ): boolean {\n    const pathKey = this.pathKey(objectPath);\n    const inlineFields = this.inlineSchemas.get(pathKey);\n    if (inlineFields) {\n      return fieldKey in inlineFields;\n    }\n\n    if (this.recordSchemas.has(pathKey)) {\n      return true;\n    }\n\n    const schema = this.lookupSchema(objectKind);\n    return !!schema?.fields[fieldKey];\n  }\n\n  private parentFieldName(path: JsonPath): string | undefined {\n    if (path.length === 0) return undefined;\n    const parent = path[path.length - 2];\n    return typeof parent === \"string\" ? parent : undefined;\n  }\n\n  private fieldKeyFromPath(path: JsonPath): string | null {\n    const last = path[path.length - 1];\n    return typeof last === \"string\" ? last : null;\n  }\n\n  private isKindFieldPath(path: JsonPath): boolean {\n    return path[path.length - 1] === KIND_KEY;\n  }\n\n  private pathKey(path: JsonPath): string {\n    return path.map((segment) => String(segment)).join(\".\");\n  }\n\n  private lookupSchema(kind: string): KindSchema | undefined {\n    return this.resolver.get(kind) ?? this.arrivedSchemas.get(kind);\n  }\n\n  private fail(reason: string, at: number): void {\n    if (this.failed) return;\n    this.failed = true;\n    this.emit({ type: \"error\", reason, at });\n  }\n\n  private emit(event: KindStreamEvent): void {\n    this.options.onEvent(event);\n  }\n\n  private currentFrame(): Frame | undefined {\n    return this.stack[this.stack.length - 1];\n  }\n}\n\nexport function createKindStreamParser(\n  options: KindStreamParserOptions,\n): KindStreamParser {\n  return new KindStreamParser(options);\n}\n","/**\n * ParseSession — one live region parse per stream identity.\n *\n * Owns the parser + IrTree OUTSIDE React and Redux. Writers push chunks;\n * N readers subscribe per path (useIrNode / selectors) and are notified on\n * the host's flush cadence — never per token.\n *\n * Notification contract: `write()`/`end()` never notify. The host (demo rAF\n * loop, process-stream's dispatchBatch tick) calls `flushNotify()` to publish\n * dirty paths. Late schema arrivals (registry cold fetch) notify themselves —\n * they happen outside any streaming tick.\n */\n\nimport { IrTree, type IrTreeNode } from \"../core/ir-tree\";\nimport { createFingerprinter, type Fingerprinter } from \"../core/fingerprint\";\nimport type { CanonicalBlockIR } from \"../core/ir-types\";\nimport type { KindSchema } from \"../core/kind-schema.types\";\nimport {\n  createKindStreamParser,\n  type KindStreamEvent,\n  type KindStreamParser,\n  type SchemaResolver,\n} from \"../core/kind-parser\";\n\nexport interface ParseSessionOptions {\n  identity: string;\n  schemas: Record<string, KindSchema> | SchemaResolver;\n  expectedRootKind?: string;\n  /**\n   * Registry hook: subscribe to cold-fetch answers, return an unsubscribe.\n   * The session forwards arrivals into the parser (upgrade-in-place) and\n   * notifies affected readers immediately.\n   */\n  onSchemaArrived?: (\n    deliver: (kind: string, schema: KindSchema | null) => void,\n  ) => () => void;\n  /** Observe every parser event (demo inspector, telemetry). */\n  onEvent?: (event: KindStreamEvent) => void;\n}\n\ntype Listener = () => void;\n\nexport class ParseSession {\n  readonly identity: string;\n\n  private readonly parser: KindStreamParser;\n  private readonly tree = new IrTree();\n  private readonly listeners = new Map<string, Set<Listener>>();\n  private readonly anyListeners = new Set<Listener>();\n  private readonly unsubscribeSchemaArrivals: (() => void) | null;\n\n  private readonly fingerprinter: Fingerprinter = createFingerprinter();\n  private ended = false;\n\n  constructor(options: ParseSessionOptions) {\n    this.identity = options.identity;\n\n    this.parser = createKindStreamParser({\n      schemas: options.schemas,\n      ...(options.expectedRootKind !== undefined && {\n        expectedRootKind: options.expectedRootKind,\n      }),\n      onEvent: (event) => {\n        this.tree.applyEvent(event);\n        options.onEvent?.(event);\n      },\n    });\n\n    this.unsubscribeSchemaArrivals =\n      options.onSchemaArrived?.((kind, schema) => {\n        this.parser.notifySchemaArrived(kind, schema);\n        // Upgrades happen outside the streaming tick — publish right away.\n        this.flushNotify();\n      }) ?? null;\n  }\n\n  /** The single writer's input. Does NOT notify — host flushes on its cadence. */\n  write(chunk: string): void {\n    this.fingerprinter.push(chunk);\n    this.parser.push(chunk);\n  }\n\n  end(): void {\n    if (this.ended) return;\n    this.ended = true;\n    this.parser.end();\n  }\n\n  get isEnded(): boolean {\n    return this.ended;\n  }\n\n  get status(): \"streaming\" | \"complete\" | \"error\" {\n    return this.tree.status;\n  }\n\n  getNode(pathKey: string): IrTreeNode | null {\n    return this.tree.getNode(pathKey);\n  }\n\n  listNodes(): IrTreeNode[] {\n    return this.tree.listNodes();\n  }\n\n  isRawPath(pathKey: string): boolean {\n    return this.tree.isRawPath(pathKey);\n  }\n\n  subscribe(pathKey: string, listener: Listener): () => void {\n    const set = this.listeners.get(pathKey) ?? new Set();\n    set.add(listener);\n    this.listeners.set(pathKey, set);\n    return () => {\n      set.delete(listener);\n      if (set.size === 0) this.listeners.delete(pathKey);\n    };\n  }\n\n  /** Structural subscription: fires when ANY node changes (mount lists). */\n  subscribeAny(listener: Listener): () => void {\n    this.anyListeners.add(listener);\n    return () => {\n      this.anyListeners.delete(listener);\n    };\n  }\n\n  /** Publish dirty paths to their readers. Host-cadence, coalesced. */\n  flushNotify(): void {\n    if (!this.tree.hasDirty()) return;\n    const dirty = this.tree.drainDirty();\n\n    for (const pathKey of dirty) {\n      const set = this.listeners.get(pathKey);\n      if (!set) continue;\n      for (const listener of set) listener();\n    }\n\n    if (this.anyListeners.size > 0) {\n      for (const listener of this.anyListeners) listener();\n    }\n  }\n\n  buildEnvelope(): CanonicalBlockIR {\n    return this.tree.buildEnvelope(this.fingerprinter.current());\n  }\n\n  dispose(): void {\n    this.unsubscribeSchemaArrivals?.();\n    this.listeners.clear();\n    this.anyListeners.clear();\n  }\n}\n","/**\n * Session manager — one writer per stream identity, N readers, mechanically\n * enforced: a second `openParseSession` for a live identity THROWS. Readers\n * resolve sessions by identity and never gain write access.\n *\n * Identities: `\"{requestId}:{blockId}\"` for agent-stream regions; any unique\n * string for other hosts (demo runs, notes, one-shot upgrades).\n *\n * Ended sessions stay resolvable for late readers (reload happens via the\n * persisted envelope, but in-session remounts read here) until disposed.\n */\n\nimport { ParseSession, type ParseSessionOptions } from \"./parse-session\";\n\n/**\n * The session registry lives on `globalThis` under a `Symbol.for` slot, NOT in\n * a module-level variable. The package builds `splitting: false` in dual\n * ESM/CJS format, so this module is duplicated into the root bundle and the\n * `./session` bundle, and CJS/ESM each instantiate their own module graph — a\n * module-level Map would silently split the registry, and \"one writer per\n * identity\" would stop being enforced across those graphs (a second writer\n * would open cleanly and both would emit into the same stream identity).\n * Never \"clean this up\" into a module local.\n */\nconst SESSIONS_SLOT = Symbol.for(\"ai-matrx.content-ir.parse-sessions\");\n\ntype SessionSlotHolder = {\n  [SESSIONS_SLOT]?: Map<string, ParseSession>;\n};\n\nconst slotHolder = globalThis as SessionSlotHolder;\nconst sessions: Map<string, ParseSession> = (slotHolder[SESSIONS_SLOT] ??= new Map<\n  string,\n  ParseSession\n>());\n\nexport function openParseSession(options: ParseSessionOptions): ParseSession {\n  const existing = sessions.get(options.identity);\n  if (existing && !existing.isEnded) {\n    throw new Error(\n      `content-ir: a writer is already open for identity \"${options.identity}\". ` +\n        \"One writer per stream identity — everyone else reads.\",\n    );\n  }\n  existing?.dispose();\n\n  const session = new ParseSession(options);\n  sessions.set(options.identity, session);\n  return session;\n}\n\nexport function getParseSession(identity: string): ParseSession | null {\n  return sessions.get(identity) ?? null;\n}\n\nexport function disposeParseSession(identity: string): void {\n  const session = sessions.get(identity);\n  if (!session) return;\n  session.dispose();\n  sessions.delete(identity);\n}\n"]}