@ai-matrx/content-ir 0.10.1 → 0.10.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/core.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../core/ir-types.ts","../core/kind-schema.types.ts","../core/discriminator.ts","../core/ir-tree.ts","../core/json-tokenizer.ts","../core/kind-snapshot.ts","../core/kind-parser.ts","../core/fingerprint.ts","../core/normalize.ts","../core/envelope-cache.ts","../core/envelope-read.ts","../core/envelope-value.ts","../utils/text-case-converter.ts","../core/schema-structure.ts"],"names":["fieldSchema","isRecord"],"mappings":"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","file":"core.cjs","sourcesContent":["/**\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 * 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 * 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 * 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);\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 ): 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 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, fieldSchema] of Object.entries(schema.fields)) {\n if (fieldSchema.required) {\n if (!(fieldName in objectValue)) {\n return {\n error: `Kind \"${schema.kind}\" is missing required field \"${fieldName}\".`,\n ...emptyOutcome,\n };\n }\n continue;\n }\n\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 if (fieldSchema.type === \"json[]\") {\n if (value === null) {\n return fieldSchema.nullable\n ? null\n : `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 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 const emptyOutcome = { optionalMissing, extraFields };\n\n for (const [fieldName, fieldSchema] of Object.entries(fields)) {\n if (fieldSchema.required) {\n if (!(fieldName in objectValue)) {\n return {\n error: `Inline object is missing required field \"${fieldName}\".`,\n ...emptyOutcome,\n };\n }\n continue;\n }\n\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 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 * 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 * Idempotent normalizer — the \"recognizes its own work\" property.\n *\n * THE LAW: anything already carrying a current CanonicalBlockIR envelope is\n * returned BY REFERENCE — zero reprocessing, reference equality holds, React\n * bails out. Only raw text (a detected region's source) is ever parsed, and\n * it is parsed exactly once per fingerprint.\n *\n * `normalizeJsonRegion` is the one-shot mode: the same KindStreamParser that\n * powers live streams, run over a complete region string (DB reloads,\n * reconcile passes), assembled through the same IrTree the live session uses\n * — stream and static output are structurally identical by construction.\n */\n\nimport { fingerprintText } from \"./fingerprint\";\nimport {\n IR_VERSION,\n type CanonicalBlockIR,\n type IrDiscriminator,\n type IrStructuredNode,\n} from \"./ir-types\";\nimport { KIND_KEY, type KindSchema } from \"./kind-schema.types\";\nimport { IrTree } from \"./ir-tree\";\nimport {\n createKindStreamParser,\n type SchemaResolver,\n} from \"./kind-parser\";\n\nexport function isCanonicalBlockIR(value: unknown): value is CanonicalBlockIR {\n if (typeof value !== \"object\" || value === null) return false;\n const candidate = value as Partial<CanonicalBlockIR>;\n return (\n candidate.v === IR_VERSION &&\n typeof candidate.fingerprint === \"string\" &&\n typeof candidate.engine === \"string\" &&\n typeof candidate.root === \"object\" &&\n candidate.root !== null &&\n (candidate.root as IrStructuredNode).role === \"structured\"\n );\n}\n\n/**\n * The idempotence fast path: return the existing envelope by reference when\n * it still describes this source text; null means \"parse needed\".\n */\nexport function reuseEnvelopeIfCurrent(\n source: string,\n candidate: unknown,\n): CanonicalBlockIR | null {\n if (!isCanonicalBlockIR(candidate)) return null;\n return candidate.fingerprint === fingerprintText(source) ? candidate : null;\n}\n\nexport interface NormalizeJsonRegionOptions {\n schemas: Record<string, KindSchema> | SchemaResolver;\n /** Known-context root prediction (agent output schema, fence hint). */\n expectedRootKind?: string;\n /**\n * Pass a previously persisted envelope (message metadata, artifact row);\n * when its fingerprint matches, it is returned as-is and nothing parses.\n */\n existing?: unknown;\n}\n\nexport interface CompleteValueEnvelopeOptions {\n /**\n * Wire discriminator recorded on the root node — which syntax established\n * the kind. Defaults to the JSON `__kind` key; XML surfaces converging at\n * region finalize pass `xmlDiscriminator(tag)` so round-trip serializers\n * know the original arrival format.\n */\n discriminator?: IrDiscriminator;\n}\n\n/**\n * Build a resolved, complete envelope directly from an already-structured\n * value (a persisted artifact's `content.data` object, or a completed XML\n * region's strategy output). This is the zero-reprocessing rehydration path:\n * the value IS the reconstructed region value (schema fields + residue extras\n * merged at persist time), so no tokenizer/parser run is needed — the\n * envelope wraps it verbatim. The fingerprint hashes the canonical value\n * serialization, so any two paths producing the same value produce the SAME\n * envelope (stream ≡ static by construction).\n */\nexport function envelopeFromCompleteValue(\n value: Record<string, unknown>,\n kind: string,\n options?: CompleteValueEnvelopeOptions,\n): CanonicalBlockIR {\n return {\n v: IR_VERSION,\n engine: \"fe-kind-parser\",\n fingerprint: fingerprintText(JSON.stringify(value)),\n root: {\n role: \"structured\",\n kind,\n kindState: \"resolved\",\n discriminator: options?.discriminator ?? { format: \"json\", key: KIND_KEY },\n path: [],\n status: \"complete\",\n value,\n residue: null,\n },\n };\n}\n\n/** One-shot: complete region text in → canonical envelope out. */\nexport function normalizeJsonRegion(\n source: string,\n options: NormalizeJsonRegionOptions,\n): CanonicalBlockIR {\n const reused = reuseEnvelopeIfCurrent(source, options.existing);\n if (reused) return reused;\n\n const tree = new IrTree();\n const parser = createKindStreamParser({\n schemas: options.schemas,\n ...(options.expectedRootKind !== undefined && {\n expectedRootKind: options.expectedRootKind,\n }),\n onEvent(event) {\n tree.applyEvent(event);\n },\n });\n parser.push(source);\n parser.end();\n\n return tree.buildEnvelope(fingerprintText(source));\n}\n","/**\n * IrEnvelopeCache — the persisted envelope cache carried on MESSAGE PARTS.\n *\n * Phase 5 (reload without re-parse): at stream end, `assembleMessageParts`\n * stamps every completed JSON region's CanonicalBlockIR onto the committed\n * `CxTextContent.metadata.__ir` as this cache — keyed by fingerprint, because\n * one text part can embed several regions. On reload the splitter's envelope\n * memo consults the seeded cache (`registry/region-envelope-memo.ts`) and\n * reuses the persisted envelope BY REFERENCE via `reuseEnvelopeIfCurrent`\n * (exact fingerprint match of the detected region source) — zero re-parse.\n *\n * Shape discipline: the SAME `__ir` metadata key carries two shapes at two\n * levels, disambiguated by validators that reject each other —\n * - render block metadata → a single CanonicalBlockIR (`isCanonicalBlockIR`)\n * - message part metadata → this cache (`isIrEnvelopeCache`)\n *\n * Pure kernel module: types + validators only. No React/Redux/Supabase.\n */\n\nimport type { CanonicalBlockIR } from \"./ir-types\";\nimport { isCanonicalBlockIR } from \"./normalize\";\n\n/** Cache version. Bump = migration point for persisted part caches. */\nexport const IR_ENVELOPE_CACHE_VERSION = 1 as const;\n\n/**\n * The envelope cache persisted on a message part's `metadata.__ir`.\n * `blocks` maps each region-source fingerprint to its complete envelope.\n */\nexport interface IrEnvelopeCache {\n v: typeof IR_ENVELOPE_CACHE_VERSION;\n blocks: Record<string, CanonicalBlockIR>;\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 * Strict whole-cache validation: every entry must be a complete\n * CanonicalBlockIR keyed by its OWN fingerprint. A cache failing this guard\n * came from a buggy or foreign writer — callers surface that loudly and seed\n * nothing (a half-trusted cache is how poisoned envelopes reach renderers).\n */\nexport function isIrEnvelopeCache(value: unknown): value is IrEnvelopeCache {\n if (!isRecord(value)) return false;\n if (value.v !== IR_ENVELOPE_CACHE_VERSION) return false;\n if (!isRecord(value.blocks)) return false;\n\n const entries = Object.entries(value.blocks);\n if (entries.length === 0) return false;\n for (const [fingerprint, envelope] of entries) {\n if (!isCanonicalBlockIR(envelope)) return false;\n if (envelope.fingerprint !== fingerprint) return false;\n if (envelope.root.status !== \"complete\") return false;\n }\n return true;\n}\n\n/**\n * Build the persistable cache from a run's collected envelopes. Only\n * complete envelopes are cacheable (a streaming/error envelope can never be\n * reused — its fingerprint doesn't describe a finished region). Duplicate\n * regions (same fingerprint) collapse to one entry. Engine-agnostic by\n * design: an aidream-built `engine: \"py-block-detector\"` envelope is cached\n * identically to an FE-parsed one. Returns null when nothing qualifies so\n * callers skip the metadata stamp entirely.\n */\nexport function envelopeCacheFromEnvelopes(\n envelopes: readonly CanonicalBlockIR[],\n): IrEnvelopeCache | null {\n let blocks: Record<string, CanonicalBlockIR> | null = null;\n for (const envelope of envelopes) {\n if (!isCanonicalBlockIR(envelope)) continue;\n if (envelope.root.status !== \"complete\") continue;\n (blocks ??= {})[envelope.fingerprint] = envelope;\n }\n return blocks ? { v: IR_ENVELOPE_CACHE_VERSION, blocks } : null;\n}\n","/**\n * PURE envelope ingestion — reading `metadata.__ir` off a block's metadata\n * and gating SERVER-BUILT envelopes at the wire boundary. Twin-safe: no\n * React / Redux / Supabase / host diagnostics — side effects (seeding the\n * region-envelope memo, screaming to the Error Inspector) are injected by\n * the host through `InboundEnvelopeHooks`.\n *\n * The frontend host shell is `redux/render-block-envelope.ts` (binds the\n * hooks to `seedEnvelope` + `captureError`); aidream's Workflow Studio binds\n * its own. Contract: /Users/armanisadeghi/code/common-docs/systems/content-ir-system/PYTHON_ENVELOPE_CONTRACT.md.\n */\n\nimport { IR_ENVELOPE_KEY, type CanonicalBlockIR } from \"./ir-types\";\nimport { isCanonicalBlockIR } from \"./normalize\";\n\n/** Read a CanonicalBlockIR envelope off a block's metadata (or anything). */\nexport function readEnvelope(\n metadata: Record<string, unknown> | null | undefined,\n): CanonicalBlockIR | null {\n const candidate = metadata?.[IR_ENVELOPE_KEY];\n return isCanonicalBlockIR(candidate) ? candidate : null;\n}\n\n/** Pure classification of inbound metadata carrying (or not) an envelope. */\nexport type InboundEnvelopeVerdict =\n | {\n /** No `__ir` key — zero-touch pass, same reference back. */\n outcome: \"absent\";\n metadata: Record<string, unknown> | undefined;\n }\n | {\n /** Valid CanonicalBlockIR — same reference back (idempotence law). */\n outcome: \"valid\";\n metadata: Record<string, unknown>;\n envelope: CanonicalBlockIR;\n }\n | {\n /** Malformed/foreign `__ir` — a COPY with `__ir` stripped. */\n outcome: \"malformed\";\n metadata: Record<string, unknown>;\n engine: string;\n raw: unknown;\n };\n\nexport function classifyInboundEnvelopeMetadata(\n metadata: Record<string, unknown> | null | undefined,\n): InboundEnvelopeVerdict {\n if (!metadata || !(IR_ENVELOPE_KEY in metadata)) {\n return { outcome: \"absent\", metadata: metadata ?? undefined };\n }\n\n const candidate = metadata[IR_ENVELOPE_KEY];\n if (isCanonicalBlockIR(candidate)) {\n return { outcome: \"valid\", metadata, envelope: candidate };\n }\n\n const engine =\n typeof candidate === \"object\" &&\n candidate !== null &&\n typeof (candidate as { engine?: unknown }).engine === \"string\"\n ? (candidate as { engine: string }).engine\n : \"unknown\";\n\n const { [IR_ENVELOPE_KEY]: _dropped, ...rest } = metadata;\n void _dropped;\n return { outcome: \"malformed\", metadata: rest, engine, raw: candidate };\n}\n\n/** Host-injected side effects for the inbound gate. */\nexport interface InboundEnvelopeHooks {\n /** Called with every VALID envelope so later re-splits reuse it by reference. */\n seedEnvelope?: (envelope: CanonicalBlockIR) => void;\n /** Called LOUDLY for every malformed envelope — a bad envelope is a defect. */\n reportMalformed?: (info: {\n blockId: string;\n engine: string;\n raw: unknown;\n }) => void;\n}\n\n/**\n * Ingest guard for SERVER-BUILT envelopes riding `metadata.__ir` on a\n * `render_block` event.\n *\n * - No `__ir` key → the SAME metadata reference back (zero-touch pass).\n * - Valid CanonicalBlockIR → the SAME metadata reference back (reuse-by-\n * reference — the idempotence law) AND `hooks.seedEnvelope` fires so any\n * later re-split of the same region source reuses it instead of parsing.\n * - Malformed/foreign `__ir` → a COPY with `__ir` stripped, plus a loud\n * `hooks.reportMalformed`. A bad envelope must never poison kind routing\n * or the persistence cache; dropping it degrades that block to the\n * ordinary content-driven path, nothing more.\n */\nexport function sanitizeInboundEnvelopeMetadata(\n metadata: Record<string, unknown> | null | undefined,\n context: { blockId: string },\n hooks: InboundEnvelopeHooks = {},\n): Record<string, unknown> | undefined {\n const verdict = classifyInboundEnvelopeMetadata(metadata);\n if (verdict.outcome === \"valid\") {\n hooks.seedEnvelope?.(verdict.envelope);\n return verdict.metadata;\n }\n if (verdict.outcome === \"malformed\") {\n hooks.reportMalformed?.({\n blockId: context.blockId,\n engine: verdict.engine,\n raw: verdict.raw,\n });\n return verdict.metadata;\n }\n return verdict.metadata;\n}\n","/**\n * Pure envelope→value functions (the zero-data-loss wire round-trip).\n *\n * These live in core/ (the pure kernel) because every layer needs them —\n * including kinds/legacy-bridge-utils, whose bridges are built at MODULE\n * SCOPE inside kinds/<slug>.ts files that system-kinds.ts imports. When these\n * functions lived in redux/render-block-envelope.ts, that file's memo/capture\n * imports closed a module cycle (kinds → bridge-utils → render-block-envelope\n * → region-envelope-memo → kind-registry → system-kinds → kinds), which made\n * SYSTEM_KIND_DEFINITIONS entry-point-fragile (undefined defs when a kinds\n * module was the import entry). Keeping them here makes every kinds module\n * cycle-free BY CONSTRUCTION. redux/render-block-envelope re-exports them for\n * its existing consumers.\n */\n\nimport { isEmptyResidue, type CanonicalBlockIR } from \"./ir-types\";\nimport { KIND_KEY } from \"./kind-schema.types\";\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\n/**\n * Rebuild the region's full data: walk the root value and merge each node's\n * residue extras back in (root residue + nodeIndex residues). This is the\n * zero-data-loss read: nothing the model emitted is missing, whether or not\n * a schema knew about it.\n */\nexport function reconstructRegionValue(\n envelope: CanonicalBlockIR,\n): Record<string, unknown> {\n const cloned = structuredClone(envelope.root.value);\n\n const applyExtras = (\n target: Record<string, unknown>,\n extras: Record<string, unknown> | null | undefined,\n ) => {\n if (!extras) return;\n for (const [key, value] of Object.entries(extras)) {\n target[key] = structuredClone(value);\n }\n };\n\n applyExtras(cloned, envelope.root.residue?.extra);\n\n for (const [pathKey, meta] of Object.entries(envelope.nodeIndex ?? {})) {\n const residue = meta.residue;\n if (!residue || isEmptyResidue(residue) || !residue.extra) continue;\n\n const segments = pathKey.split(\".\");\n let cursor: unknown = cloned;\n for (const segment of segments) {\n if (Array.isArray(cursor)) {\n cursor = cursor[Number(segment)];\n } else if (isRecord(cursor)) {\n cursor = cursor[segment];\n } else {\n cursor = undefined;\n break;\n }\n }\n if (isRecord(cursor)) {\n applyExtras(cursor, residue.extra);\n }\n }\n\n return cloned;\n}\n\n/**\n * Deep-remove the `__kind` discriminator.\n *\n * 🚨 NOT A TRANSFORM FOR PLATFORM DATA. `__kind` is part of the data\n * (KINDS_EVERYWHERE_PLAN §4.2) and stripping it from anything stored, passed or\n * rendered was annihilated on 2026-08-23. This helper survives for exactly two\n * shapes of caller, both of which are guarded:\n * - a SYMMETRIC COMPARISON that reduces both sides and returns a boolean;\n * - legacy validation TOLERANCE against a pre-2026-08-23 schema version.\n * Guards: aidream `scripts/check_kind_marker_law.py`,\n * matrx-frontend `pnpm check:kind-marker-law`.\n */\nexport function stripKindDeep(value: unknown): unknown {\n if (Array.isArray(value)) {\n return value.map(stripKindDeep);\n }\n if (isRecord(value)) {\n const out: Record<string, unknown> = {};\n for (const [key, child] of Object.entries(value)) {\n if (key === KIND_KEY) continue;\n out[key] = stripKindDeep(child);\n }\n return out;\n }\n return value;\n}\n","/**\n * Text formatting options\n */\nexport type TextCaseOption = 'title' | 'sentence' | 'normal' | 'lower' | 'upper';\n\nexport interface TextFormatterOptions {\n /**\n * Text case to apply after normalization\n * - title: First Letter Of Each Word Capitalized\n * - sentence: First letter of first word capitalized\n * - normal: No case transformation after normalization\n * - lower: all text lowercase\n * - upper: ALL TEXT UPPERCASE\n */\n textCase?: TextCaseOption;\n \n /**\n * Map of words to replace with specific formatting\n * Example: { 'api': 'API', 'ui': 'UI' }\n */\n wordReplacements?: Record<string, string>;\n \n /**\n * Whether to trim the result\n */\n trim?: boolean;\n}\n\n/**\n * Default word replacements for common acronyms and terms\n */\nexport type ReplacementMap = Readonly<Record<string, string>>;\n\nexport const DEFAULT_WORD_REPLACEMENTS: ReplacementMap = {\n // Acronyms & initialisms\n 'api': 'API',\n 'apis': 'APIs',\n 'ui': 'UI',\n 'ux': 'UX',\n 'id': 'ID',\n 'ids': 'IDs',\n 'qr': 'QR',\n 'ssr': 'SSR',\n 'csr': 'CSR',\n 'ssg': 'SSG',\n 'isr': 'ISR',\n 'spa': 'SPA',\n 'pwa': 'PWA',\n 'sdk': 'SDK',\n 'sdks': 'SDKs',\n 'cli': 'CLI',\n 'tty': 'TTY',\n 'repl': 'REPL',\n 'ci': 'CI',\n 'cd': 'CD',\n 'cpu': 'CPU',\n 'cpus': 'CPUs',\n 'gpu': 'GPU',\n 'gpus': 'GPUs',\n 'ram': 'RAM',\n 'rom': 'ROM',\n 'ssd': 'SSD',\n 'ssds': 'SSDs',\n 'hdd': 'HDD',\n 'hdds': 'HDDs',\n 'kpi': 'KPI',\n 'kpis': 'KPIs',\n 'sla': 'SLA',\n 'slas': 'SLAs',\n 'slo': 'SLO',\n 'slos': 'SLOs',\n 'sli': 'SLI',\n 'slis': 'SLIs',\n 'dom': 'DOM',\n\n // Web, formats, protocols\n 'url': 'URL',\n 'urls': 'URLs',\n 'uri': 'URI',\n 'uris': 'URIs',\n 'http': 'HTTP',\n 'https': 'HTTPS',\n 'html': 'HTML',\n 'css': 'CSS',\n 'json': 'JSON',\n 'yaml': 'YAML',\n 'yml': 'YML',\n 'toml': 'TOML',\n 'csv': 'CSV',\n 'pdf': 'PDF',\n 'tsv': 'TSV',\n 'jpg': 'JPG',\n 'jpeg': 'JPEG',\n 'png': 'PNG',\n 'gif': 'GIF',\n 'webp': 'WebP',\n 'heic': 'HEIC',\n 'heif': 'HEIF',\n 'bmp': 'BMP',\n 'tiff': 'TIFF',\n 'ico': 'ICO',\n 'xml': 'XML',\n 'sql': 'SQL',\n 'db': 'DB',\n 'dbs': 'DBs',\n 'nosql': 'NoSQL',\n 'graphql': 'GraphQL',\n 'grpc': 'gRPC',\n 'rest': 'REST',\n 'restful': 'RESTful',\n 'websocket': 'WebSocket',\n 'websockets': 'WebSockets',\n 'webrtc': 'WebRTC',\n\n // Networking\n 'ip': 'IP',\n 'ipv4': 'IPv4',\n 'ipv6': 'IPv6',\n 'dns': 'DNS',\n 'dhcp': 'DHCP',\n 'nat': 'NAT',\n 'tcp': 'TCP',\n 'udp': 'UDP',\n 'icmp': 'ICMP',\n 'ttl': 'TTL',\n 'lan': 'LAN',\n 'wan': 'WAN',\n 'vlan': 'VLAN',\n 'cdn': 'CDN',\n 'ftp': 'FTP',\n 'ssh': 'SSH',\n 'tls': 'TLS',\n 'ssl': 'SSL',\n\n // Security & crypto\n 'jwt': 'JWT',\n 'jws': 'JWS',\n 'jwe': 'JWE',\n 'hmac': 'HMAC',\n 'rsa': 'RSA',\n 'ecdsa': 'ECDSA',\n 'aes': 'AES',\n 'pbkdf2': 'PBKDF2',\n 'argon2': 'Argon2',\n 'scrypt': 'scrypt',\n 'totp': 'TOTP',\n 'hotp': 'HOTP',\n 'mfa': 'MFA',\n '2fa': '2FA',\n 'csrf': 'CSRF',\n 'xss': 'XSS',\n 'ssrf': 'SSRF',\n 'rce': 'RCE',\n 'dos': 'DoS',\n 'ddos': 'DDoS',\n 'mitm': 'MITM',\n 'csp': 'CSP',\n 'cors': 'CORS',\n 'pii': 'PII',\n 'phi': 'PHI',\n 'gdpr': 'GDPR',\n 'ccpa': 'CCPA',\n 'hipaa': 'HIPAA',\n 'rfc': 'RFC',\n\n // Platforms, langs, tools (single-token)\n 'javascript': 'JavaScript',\n 'typescript': 'TypeScript',\n 'jsx': 'JSX',\n 'tsx': 'TSX',\n 'node': 'Node', // (used when tokenized alone)\n 'deno': 'Deno',\n 'bun': 'Bun',\n 'react': 'React',\n 'nextjs': 'Next.js', // if your tokenizer drops dots, keep this\n 'nodejs': 'Node.js',\n 'postgresql': 'PostgreSQL',\n 'postgres': 'Postgres',\n 'mysql': 'MySQL',\n 'sqlite': 'SQLite',\n 'redis': 'Redis',\n 'supabase': 'Supabase',\n 'docker': 'Docker',\n 'kubernetes': 'Kubernetes',\n 'k8s': 'Kubernetes',\n 'helm': 'Helm',\n 'npm': 'npm',\n 'pnpm': 'pnpm',\n 'yarn': 'Yarn',\n 'eslint': 'ESLint',\n 'prettier': 'Prettier',\n 'vite': 'Vite',\n 'webpack': 'Webpack',\n 'babel': 'Babel',\n\n // OS & vendors\n 'macos': 'macOS',\n 'ios': 'iOS',\n 'ipados': 'iPadOS',\n 'watchos': 'watchOS',\n 'tvos': 'tvOS',\n 'windows': 'Windows',\n 'linux': 'Linux',\n 'ubuntu': 'Ubuntu',\n 'github': 'GitHub',\n 'gitlab': 'GitLab',\n 'bitbucket': 'Bitbucket',\n\n // Data & analytics\n 'etl': 'ETL',\n 'elt': 'ELT',\n 'olap': 'OLAP',\n 'oltp': 'OLTP',\n 'bi': 'BI',\n\n // Time & locales\n 'utc': 'UTC',\n 'gmt': 'GMT',\n 'pst': 'PST',\n 'pdt': 'PDT',\n 'pt': 'PT',\n\n // Common “small words” to keep lowercase (unless first/last word)\n 'or': 'or',\n 'and': 'and',\n 'the': 'the',\n 'of': 'of',\n 'in': 'in',\n 'to': 'to',\n 'with': 'with',\n 'as': 'as',\n 'by': 'by',\n 'for': 'for',\n 'on': 'on',\n 'at': 'at',\n 'up': 'up',\n 'a': 'a',\n 'an': 'an',\n 'is': 'is',\n 'are': 'are',\n 'was': 'was',\n 'were': 'were',\n 'be': 'be',\n 'but': 'but',\n 'nor': 'nor',\n 'so': 'so',\n 'yet': 'yet',\n 'per': 'per',\n 'via': 'via',\n\n // Latin abbreviations (tokenized as words in some pipelines)\n 'eg': 'e.g.',\n 'ie': 'i.e.',\n 'etc': 'etc.',\n 'aka': 'aka',\n 'vs': 'vs.',\n 'v': 'v.',\n\n // Client abbreviations\n 'CIC': 'CIC',\n 'AGR': 'AGR',\n 'AGER': 'AGER',\n 'DD': 'DD',\n 'TS': 'TS',\n 'TM': 'TM',\n 'arman': \"Arman\",\n};\n\n/**\n * Default options for text formatting\n */\nconst DEFAULT_OPTIONS: TextFormatterOptions = {\n textCase: 'title',\n wordReplacements: DEFAULT_WORD_REPLACEMENTS,\n trim: true,\n};\n\n/**\n * Formats text by normalizing case styles, applying case transformations,\n * and replacing specific words with custom formatting.\n * \n * @param text The input text to format\n * @param options Formatting options\n * @returns Formatted text\n */\nexport function formatText(text: string, options: TextFormatterOptions = {}): string {\n // Merge provided options with defaults\n const opts = { ...DEFAULT_OPTIONS, ...options };\n \n // Handle empty text\n if (!text) return '';\n \n // Step 1: Normalize various case styles to space-separated words\n let normalized = text\n // Convert snake_case to space-separated\n .replace(/_/g, ' ')\n // Convert kebab-case to space-separated\n .replace(/-/g, ' ')\n // Convert camelCase and PascalCase to space-separated\n .replace(/([a-z])([A-Z])/g, '$1 $2')\n // Replace multiple spaces with a single space\n .replace(/\\s+/g, ' ');\n \n // Step 2: Apply trim if needed\n if (opts.trim) {\n normalized = normalized.trim();\n }\n \n // Step 3: Apply the specified text case\n let caseTransformed = normalized;\n switch (opts.textCase) {\n case 'title':\n caseTransformed = normalized.replace(/\\w\\S*/g, (word) => \n word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()\n );\n break;\n case 'sentence':\n if (normalized.length > 0) {\n caseTransformed = normalized.charAt(0).toUpperCase() + normalized.slice(1).toLowerCase();\n }\n break;\n case 'lower':\n caseTransformed = normalized.toLowerCase();\n break;\n case 'upper':\n caseTransformed = normalized.toUpperCase();\n break;\n case 'normal':\n default:\n // No case transformation\n break;\n }\n \n // Step 4: Apply word replacements if provided\n let result = caseTransformed;\n if (opts.wordReplacements) {\n Object.entries(opts.wordReplacements).forEach(([key, value]) => {\n // Create a regex that matches the key as a whole word (case insensitive)\n const regex = new RegExp(`\\\\b${key}\\\\b`, 'gi');\n result = result.replace(regex, value);\n });\n }\n \n return result;\n}\n\n/**\n * Creates a pre-configured formatter function with specific options\n * \n * @param defaultOptions Default options for the formatter\n * @returns A formatter function with the specified default options\n */\nexport function createFormatter(defaultOptions: TextFormatterOptions = {}) {\n return (text: string, overrideOptions: TextFormatterOptions = {}) => \n formatText(text, { ...defaultOptions, ...overrideOptions });\n}\n\n// Some pre-configured formatters for common use cases\nexport const formatTitleCase = createFormatter({ textCase: 'title' });\nexport const formatSentenceCase = createFormatter({ textCase: 'sentence' });\nexport const formatNormalCase = createFormatter({ textCase: 'normal' });\nexport const formatUpperCase = createFormatter({ textCase: 'upper' });\nexport const formatLowerCase = createFormatter({ textCase: 'lower' });\nexport const formatWithoutReplacements = createFormatter({ wordReplacements: {} });\n","/**\n * Schema-shape helpers — structural depth and layout hints derived from a\n * KindSchema. Drives the generic renderer's flat / grid / nested layout and\n * human labels for slugs.\n *\n * Moved from app/(dev)/demos/json-block-detector/schema-structure.ts.\n */\n\nimport { formatText } from \"../utils/text-case-converter\";\nimport type { FieldSchema, KindSchema } from \"./kind-schema.types\";\n\n/** Human label from a slug or field key (snake_case → Title Case + acronym fixes). */\nexport function formatBlockLabel(key: string): string {\n return formatText(key, { textCase: \"title\" });\n}\n\n/**\n * Structural nesting depth of a kind schema — drives generic renderer layout.\n * 0 = flat card (scalars only)\n * 1 = grid (one array/object nesting level)\n * 2+ = expandable grid (parent → child → grandchild)\n */\nexport function schemaStructureDepth(\n schema: KindSchema,\n allSchemas: Record<string, KindSchema>,\n visiting: Set<string> = new Set(),\n): number {\n if (visiting.has(schema.kind)) return 0;\n visiting.add(schema.kind);\n\n let max = 0;\n for (const field of Object.values(schema.fields)) {\n max = Math.max(max, fieldStructureDepth(field, allSchemas, visiting));\n }\n\n visiting.delete(schema.kind);\n return max;\n}\n\nfunction fieldStructureDepth(\n field: FieldSchema,\n allSchemas: Record<string, KindSchema>,\n visiting: Set<string>,\n): number {\n switch (field.type) {\n case \"array\": {\n let itemMax = 0;\n for (const itemKind of field.itemKinds) {\n const itemSchema = allSchemas[itemKind];\n itemMax = Math.max(\n itemMax,\n itemSchema\n ? 1 + schemaStructureDepth(itemSchema, allSchemas, visiting)\n : 1,\n );\n }\n return itemMax;\n }\n case \"object\": {\n const ref = allSchemas[field.kind];\n return ref ? 1 + schemaStructureDepth(ref, allSchemas, visiting) : 1;\n }\n case \"inline_object\": {\n let nested = 0;\n for (const child of Object.values(field.fields)) {\n nested = Math.max(\n nested,\n fieldStructureDepth(child, allSchemas, visiting),\n );\n }\n return nested > 0 ? 1 + nested : 1;\n }\n default:\n return 0;\n }\n}\n\nexport type SchemaLayoutMode = \"flat\" | \"grid\" | \"nested\";\n\nexport function schemaLayoutMode(\n schema: KindSchema,\n allSchemas: Record<string, KindSchema>,\n): SchemaLayoutMode {\n const depth = schemaStructureDepth(schema, allSchemas);\n if (depth <= 0) return \"flat\";\n if (depth === 1) return \"grid\";\n return \"nested\";\n}\n"]}
1
+ {"version":3,"sources":["../core/ir-types.ts","../core/kind-schema.types.ts","../core/discriminator.ts","../core/ir-tree.ts","../core/json-tokenizer.ts","../core/kind-snapshot.ts","../core/kind-parser.ts","../core/fingerprint.ts","../core/normalize.ts","../core/envelope-cache.ts","../core/envelope-read.ts","../core/envelope-value.ts","../utils/text-case-converter.ts","../core/schema-structure.ts"],"names":["fieldSchema","isRecord"],"mappings":"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","file":"core.cjs","sourcesContent":["/**\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 * 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 * 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 * 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);\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 ): 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 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, fieldSchema] of Object.entries(schema.fields)) {\n if (fieldSchema.required) {\n if (!(fieldName in objectValue)) {\n return {\n error: `Kind \"${schema.kind}\" is missing required field \"${fieldName}\".`,\n ...emptyOutcome,\n };\n }\n continue;\n }\n\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 const emptyOutcome = { optionalMissing, extraFields };\n\n for (const [fieldName, fieldSchema] of Object.entries(fields)) {\n if (fieldSchema.required) {\n if (!(fieldName in objectValue)) {\n return {\n error: `Inline object is missing required field \"${fieldName}\".`,\n ...emptyOutcome,\n };\n }\n continue;\n }\n\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 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 * 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 * Idempotent normalizer — the \"recognizes its own work\" property.\n *\n * THE LAW: anything already carrying a current CanonicalBlockIR envelope is\n * returned BY REFERENCE — zero reprocessing, reference equality holds, React\n * bails out. Only raw text (a detected region's source) is ever parsed, and\n * it is parsed exactly once per fingerprint.\n *\n * `normalizeJsonRegion` is the one-shot mode: the same KindStreamParser that\n * powers live streams, run over a complete region string (DB reloads,\n * reconcile passes), assembled through the same IrTree the live session uses\n * — stream and static output are structurally identical by construction.\n */\n\nimport { fingerprintText } from \"./fingerprint\";\nimport {\n IR_VERSION,\n type CanonicalBlockIR,\n type IrDiscriminator,\n type IrStructuredNode,\n} from \"./ir-types\";\nimport { KIND_KEY, type KindSchema } from \"./kind-schema.types\";\nimport { IrTree } from \"./ir-tree\";\nimport {\n createKindStreamParser,\n type SchemaResolver,\n} from \"./kind-parser\";\n\nexport function isCanonicalBlockIR(value: unknown): value is CanonicalBlockIR {\n if (typeof value !== \"object\" || value === null) return false;\n const candidate = value as Partial<CanonicalBlockIR>;\n return (\n candidate.v === IR_VERSION &&\n typeof candidate.fingerprint === \"string\" &&\n typeof candidate.engine === \"string\" &&\n typeof candidate.root === \"object\" &&\n candidate.root !== null &&\n (candidate.root as IrStructuredNode).role === \"structured\"\n );\n}\n\n/**\n * The idempotence fast path: return the existing envelope by reference when\n * it still describes this source text; null means \"parse needed\".\n */\nexport function reuseEnvelopeIfCurrent(\n source: string,\n candidate: unknown,\n): CanonicalBlockIR | null {\n if (!isCanonicalBlockIR(candidate)) return null;\n return candidate.fingerprint === fingerprintText(source) ? candidate : null;\n}\n\nexport interface NormalizeJsonRegionOptions {\n schemas: Record<string, KindSchema> | SchemaResolver;\n /** Known-context root prediction (agent output schema, fence hint). */\n expectedRootKind?: string;\n /**\n * Pass a previously persisted envelope (message metadata, artifact row);\n * when its fingerprint matches, it is returned as-is and nothing parses.\n */\n existing?: unknown;\n}\n\nexport interface CompleteValueEnvelopeOptions {\n /**\n * Wire discriminator recorded on the root node — which syntax established\n * the kind. Defaults to the JSON `__kind` key; XML surfaces converging at\n * region finalize pass `xmlDiscriminator(tag)` so round-trip serializers\n * know the original arrival format.\n */\n discriminator?: IrDiscriminator;\n}\n\n/**\n * Build a resolved, complete envelope directly from an already-structured\n * value (a persisted artifact's `content.data` object, or a completed XML\n * region's strategy output). This is the zero-reprocessing rehydration path:\n * the value IS the reconstructed region value (schema fields + residue extras\n * merged at persist time), so no tokenizer/parser run is needed — the\n * envelope wraps it verbatim. The fingerprint hashes the canonical value\n * serialization, so any two paths producing the same value produce the SAME\n * envelope (stream ≡ static by construction).\n */\nexport function envelopeFromCompleteValue(\n value: Record<string, unknown>,\n kind: string,\n options?: CompleteValueEnvelopeOptions,\n): CanonicalBlockIR {\n return {\n v: IR_VERSION,\n engine: \"fe-kind-parser\",\n fingerprint: fingerprintText(JSON.stringify(value)),\n root: {\n role: \"structured\",\n kind,\n kindState: \"resolved\",\n discriminator: options?.discriminator ?? { format: \"json\", key: KIND_KEY },\n path: [],\n status: \"complete\",\n value,\n residue: null,\n },\n };\n}\n\n/** One-shot: complete region text in → canonical envelope out. */\nexport function normalizeJsonRegion(\n source: string,\n options: NormalizeJsonRegionOptions,\n): CanonicalBlockIR {\n const reused = reuseEnvelopeIfCurrent(source, options.existing);\n if (reused) return reused;\n\n const tree = new IrTree();\n const parser = createKindStreamParser({\n schemas: options.schemas,\n ...(options.expectedRootKind !== undefined && {\n expectedRootKind: options.expectedRootKind,\n }),\n onEvent(event) {\n tree.applyEvent(event);\n },\n });\n parser.push(source);\n parser.end();\n\n return tree.buildEnvelope(fingerprintText(source));\n}\n","/**\n * IrEnvelopeCache — the persisted envelope cache carried on MESSAGE PARTS.\n *\n * Phase 5 (reload without re-parse): at stream end, `assembleMessageParts`\n * stamps every completed JSON region's CanonicalBlockIR onto the committed\n * `CxTextContent.metadata.__ir` as this cache — keyed by fingerprint, because\n * one text part can embed several regions. On reload the splitter's envelope\n * memo consults the seeded cache (`registry/region-envelope-memo.ts`) and\n * reuses the persisted envelope BY REFERENCE via `reuseEnvelopeIfCurrent`\n * (exact fingerprint match of the detected region source) — zero re-parse.\n *\n * Shape discipline: the SAME `__ir` metadata key carries two shapes at two\n * levels, disambiguated by validators that reject each other —\n * - render block metadata → a single CanonicalBlockIR (`isCanonicalBlockIR`)\n * - message part metadata → this cache (`isIrEnvelopeCache`)\n *\n * Pure kernel module: types + validators only. No React/Redux/Supabase.\n */\n\nimport type { CanonicalBlockIR } from \"./ir-types\";\nimport { isCanonicalBlockIR } from \"./normalize\";\n\n/** Cache version. Bump = migration point for persisted part caches. */\nexport const IR_ENVELOPE_CACHE_VERSION = 1 as const;\n\n/**\n * The envelope cache persisted on a message part's `metadata.__ir`.\n * `blocks` maps each region-source fingerprint to its complete envelope.\n */\nexport interface IrEnvelopeCache {\n v: typeof IR_ENVELOPE_CACHE_VERSION;\n blocks: Record<string, CanonicalBlockIR>;\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 * Strict whole-cache validation: every entry must be a complete\n * CanonicalBlockIR keyed by its OWN fingerprint. A cache failing this guard\n * came from a buggy or foreign writer — callers surface that loudly and seed\n * nothing (a half-trusted cache is how poisoned envelopes reach renderers).\n */\nexport function isIrEnvelopeCache(value: unknown): value is IrEnvelopeCache {\n if (!isRecord(value)) return false;\n if (value.v !== IR_ENVELOPE_CACHE_VERSION) return false;\n if (!isRecord(value.blocks)) return false;\n\n const entries = Object.entries(value.blocks);\n if (entries.length === 0) return false;\n for (const [fingerprint, envelope] of entries) {\n if (!isCanonicalBlockIR(envelope)) return false;\n if (envelope.fingerprint !== fingerprint) return false;\n if (envelope.root.status !== \"complete\") return false;\n }\n return true;\n}\n\n/**\n * Build the persistable cache from a run's collected envelopes. Only\n * complete envelopes are cacheable (a streaming/error envelope can never be\n * reused — its fingerprint doesn't describe a finished region). Duplicate\n * regions (same fingerprint) collapse to one entry. Engine-agnostic by\n * design: an aidream-built `engine: \"py-block-detector\"` envelope is cached\n * identically to an FE-parsed one. Returns null when nothing qualifies so\n * callers skip the metadata stamp entirely.\n */\nexport function envelopeCacheFromEnvelopes(\n envelopes: readonly CanonicalBlockIR[],\n): IrEnvelopeCache | null {\n let blocks: Record<string, CanonicalBlockIR> | null = null;\n for (const envelope of envelopes) {\n if (!isCanonicalBlockIR(envelope)) continue;\n if (envelope.root.status !== \"complete\") continue;\n (blocks ??= {})[envelope.fingerprint] = envelope;\n }\n return blocks ? { v: IR_ENVELOPE_CACHE_VERSION, blocks } : null;\n}\n","/**\n * PURE envelope ingestion — reading `metadata.__ir` off a block's metadata\n * and gating SERVER-BUILT envelopes at the wire boundary. Twin-safe: no\n * React / Redux / Supabase / host diagnostics — side effects (seeding the\n * region-envelope memo, screaming to the Error Inspector) are injected by\n * the host through `InboundEnvelopeHooks`.\n *\n * The frontend host shell is `redux/render-block-envelope.ts` (binds the\n * hooks to `seedEnvelope` + `captureError`); aidream's Workflow Studio binds\n * its own. Contract: /Users/armanisadeghi/code/common-docs/systems/content-ir-system/PYTHON_ENVELOPE_CONTRACT.md.\n */\n\nimport { IR_ENVELOPE_KEY, type CanonicalBlockIR } from \"./ir-types\";\nimport { isCanonicalBlockIR } from \"./normalize\";\n\n/** Read a CanonicalBlockIR envelope off a block's metadata (or anything). */\nexport function readEnvelope(\n metadata: Record<string, unknown> | null | undefined,\n): CanonicalBlockIR | null {\n const candidate = metadata?.[IR_ENVELOPE_KEY];\n return isCanonicalBlockIR(candidate) ? candidate : null;\n}\n\n/** Pure classification of inbound metadata carrying (or not) an envelope. */\nexport type InboundEnvelopeVerdict =\n | {\n /** No `__ir` key — zero-touch pass, same reference back. */\n outcome: \"absent\";\n metadata: Record<string, unknown> | undefined;\n }\n | {\n /** Valid CanonicalBlockIR — same reference back (idempotence law). */\n outcome: \"valid\";\n metadata: Record<string, unknown>;\n envelope: CanonicalBlockIR;\n }\n | {\n /** Malformed/foreign `__ir` — a COPY with `__ir` stripped. */\n outcome: \"malformed\";\n metadata: Record<string, unknown>;\n engine: string;\n raw: unknown;\n };\n\nexport function classifyInboundEnvelopeMetadata(\n metadata: Record<string, unknown> | null | undefined,\n): InboundEnvelopeVerdict {\n if (!metadata || !(IR_ENVELOPE_KEY in metadata)) {\n return { outcome: \"absent\", metadata: metadata ?? undefined };\n }\n\n const candidate = metadata[IR_ENVELOPE_KEY];\n if (isCanonicalBlockIR(candidate)) {\n return { outcome: \"valid\", metadata, envelope: candidate };\n }\n\n const engine =\n typeof candidate === \"object\" &&\n candidate !== null &&\n typeof (candidate as { engine?: unknown }).engine === \"string\"\n ? (candidate as { engine: string }).engine\n : \"unknown\";\n\n const { [IR_ENVELOPE_KEY]: _dropped, ...rest } = metadata;\n void _dropped;\n return { outcome: \"malformed\", metadata: rest, engine, raw: candidate };\n}\n\n/** Host-injected side effects for the inbound gate. */\nexport interface InboundEnvelopeHooks {\n /** Called with every VALID envelope so later re-splits reuse it by reference. */\n seedEnvelope?: (envelope: CanonicalBlockIR) => void;\n /** Called LOUDLY for every malformed envelope — a bad envelope is a defect. */\n reportMalformed?: (info: {\n blockId: string;\n engine: string;\n raw: unknown;\n }) => void;\n}\n\n/**\n * Ingest guard for SERVER-BUILT envelopes riding `metadata.__ir` on a\n * `render_block` event.\n *\n * - No `__ir` key → the SAME metadata reference back (zero-touch pass).\n * - Valid CanonicalBlockIR → the SAME metadata reference back (reuse-by-\n * reference — the idempotence law) AND `hooks.seedEnvelope` fires so any\n * later re-split of the same region source reuses it instead of parsing.\n * - Malformed/foreign `__ir` → a COPY with `__ir` stripped, plus a loud\n * `hooks.reportMalformed`. A bad envelope must never poison kind routing\n * or the persistence cache; dropping it degrades that block to the\n * ordinary content-driven path, nothing more.\n */\nexport function sanitizeInboundEnvelopeMetadata(\n metadata: Record<string, unknown> | null | undefined,\n context: { blockId: string },\n hooks: InboundEnvelopeHooks = {},\n): Record<string, unknown> | undefined {\n const verdict = classifyInboundEnvelopeMetadata(metadata);\n if (verdict.outcome === \"valid\") {\n hooks.seedEnvelope?.(verdict.envelope);\n return verdict.metadata;\n }\n if (verdict.outcome === \"malformed\") {\n hooks.reportMalformed?.({\n blockId: context.blockId,\n engine: verdict.engine,\n raw: verdict.raw,\n });\n return verdict.metadata;\n }\n return verdict.metadata;\n}\n","/**\n * Pure envelope→value functions (the zero-data-loss wire round-trip).\n *\n * These live in core/ (the pure kernel) because every layer needs them —\n * including kinds/legacy-bridge-utils, whose bridges are built at MODULE\n * SCOPE inside kinds/<slug>.ts files that system-kinds.ts imports. When these\n * functions lived in redux/render-block-envelope.ts, that file's memo/capture\n * imports closed a module cycle (kinds → bridge-utils → render-block-envelope\n * → region-envelope-memo → kind-registry → system-kinds → kinds), which made\n * SYSTEM_KIND_DEFINITIONS entry-point-fragile (undefined defs when a kinds\n * module was the import entry). Keeping them here makes every kinds module\n * cycle-free BY CONSTRUCTION. redux/render-block-envelope re-exports them for\n * its existing consumers.\n */\n\nimport { isEmptyResidue, type CanonicalBlockIR } from \"./ir-types\";\nimport { KIND_KEY } from \"./kind-schema.types\";\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\n/**\n * Rebuild the region's full data: walk the root value and merge each node's\n * residue extras back in (root residue + nodeIndex residues). This is the\n * zero-data-loss read: nothing the model emitted is missing, whether or not\n * a schema knew about it.\n */\nexport function reconstructRegionValue(\n envelope: CanonicalBlockIR,\n): Record<string, unknown> {\n const cloned = structuredClone(envelope.root.value);\n\n const applyExtras = (\n target: Record<string, unknown>,\n extras: Record<string, unknown> | null | undefined,\n ) => {\n if (!extras) return;\n for (const [key, value] of Object.entries(extras)) {\n target[key] = structuredClone(value);\n }\n };\n\n applyExtras(cloned, envelope.root.residue?.extra);\n\n for (const [pathKey, meta] of Object.entries(envelope.nodeIndex ?? {})) {\n const residue = meta.residue;\n if (!residue || isEmptyResidue(residue) || !residue.extra) continue;\n\n const segments = pathKey.split(\".\");\n let cursor: unknown = cloned;\n for (const segment of segments) {\n if (Array.isArray(cursor)) {\n cursor = cursor[Number(segment)];\n } else if (isRecord(cursor)) {\n cursor = cursor[segment];\n } else {\n cursor = undefined;\n break;\n }\n }\n if (isRecord(cursor)) {\n applyExtras(cursor, residue.extra);\n }\n }\n\n return cloned;\n}\n\n/**\n * Deep-remove the `__kind` discriminator.\n *\n * 🚨 NOT A TRANSFORM FOR PLATFORM DATA. `__kind` is part of the data\n * (KINDS_EVERYWHERE_PLAN §4.2) and stripping it from anything stored, passed or\n * rendered was annihilated on 2026-08-23. This helper survives for exactly two\n * shapes of caller, both of which are guarded:\n * - a SYMMETRIC COMPARISON that reduces both sides and returns a boolean;\n * - legacy validation TOLERANCE against a pre-2026-08-23 schema version.\n * Guards: aidream `scripts/check_kind_marker_law.py`,\n * matrx-frontend `pnpm check:kind-marker-law`.\n */\nexport function stripKindDeep(value: unknown): unknown {\n if (Array.isArray(value)) {\n return value.map(stripKindDeep);\n }\n if (isRecord(value)) {\n const out: Record<string, unknown> = {};\n for (const [key, child] of Object.entries(value)) {\n if (key === KIND_KEY) continue;\n out[key] = stripKindDeep(child);\n }\n return out;\n }\n return value;\n}\n","/**\n * Text formatting options\n */\nexport type TextCaseOption = 'title' | 'sentence' | 'normal' | 'lower' | 'upper';\n\nexport interface TextFormatterOptions {\n /**\n * Text case to apply after normalization\n * - title: First Letter Of Each Word Capitalized\n * - sentence: First letter of first word capitalized\n * - normal: No case transformation after normalization\n * - lower: all text lowercase\n * - upper: ALL TEXT UPPERCASE\n */\n textCase?: TextCaseOption;\n \n /**\n * Map of words to replace with specific formatting\n * Example: { 'api': 'API', 'ui': 'UI' }\n */\n wordReplacements?: Record<string, string>;\n \n /**\n * Whether to trim the result\n */\n trim?: boolean;\n}\n\n/**\n * Default word replacements for common acronyms and terms\n */\nexport type ReplacementMap = Readonly<Record<string, string>>;\n\nexport const DEFAULT_WORD_REPLACEMENTS: ReplacementMap = {\n // Acronyms & initialisms\n 'api': 'API',\n 'apis': 'APIs',\n 'ui': 'UI',\n 'ux': 'UX',\n 'id': 'ID',\n 'ids': 'IDs',\n 'qr': 'QR',\n 'ssr': 'SSR',\n 'csr': 'CSR',\n 'ssg': 'SSG',\n 'isr': 'ISR',\n 'spa': 'SPA',\n 'pwa': 'PWA',\n 'sdk': 'SDK',\n 'sdks': 'SDKs',\n 'cli': 'CLI',\n 'tty': 'TTY',\n 'repl': 'REPL',\n 'ci': 'CI',\n 'cd': 'CD',\n 'cpu': 'CPU',\n 'cpus': 'CPUs',\n 'gpu': 'GPU',\n 'gpus': 'GPUs',\n 'ram': 'RAM',\n 'rom': 'ROM',\n 'ssd': 'SSD',\n 'ssds': 'SSDs',\n 'hdd': 'HDD',\n 'hdds': 'HDDs',\n 'kpi': 'KPI',\n 'kpis': 'KPIs',\n 'sla': 'SLA',\n 'slas': 'SLAs',\n 'slo': 'SLO',\n 'slos': 'SLOs',\n 'sli': 'SLI',\n 'slis': 'SLIs',\n 'dom': 'DOM',\n\n // Web, formats, protocols\n 'url': 'URL',\n 'urls': 'URLs',\n 'uri': 'URI',\n 'uris': 'URIs',\n 'http': 'HTTP',\n 'https': 'HTTPS',\n 'html': 'HTML',\n 'css': 'CSS',\n 'json': 'JSON',\n 'yaml': 'YAML',\n 'yml': 'YML',\n 'toml': 'TOML',\n 'csv': 'CSV',\n 'pdf': 'PDF',\n 'tsv': 'TSV',\n 'jpg': 'JPG',\n 'jpeg': 'JPEG',\n 'png': 'PNG',\n 'gif': 'GIF',\n 'webp': 'WebP',\n 'heic': 'HEIC',\n 'heif': 'HEIF',\n 'bmp': 'BMP',\n 'tiff': 'TIFF',\n 'ico': 'ICO',\n 'xml': 'XML',\n 'sql': 'SQL',\n 'db': 'DB',\n 'dbs': 'DBs',\n 'nosql': 'NoSQL',\n 'graphql': 'GraphQL',\n 'grpc': 'gRPC',\n 'rest': 'REST',\n 'restful': 'RESTful',\n 'websocket': 'WebSocket',\n 'websockets': 'WebSockets',\n 'webrtc': 'WebRTC',\n\n // Networking\n 'ip': 'IP',\n 'ipv4': 'IPv4',\n 'ipv6': 'IPv6',\n 'dns': 'DNS',\n 'dhcp': 'DHCP',\n 'nat': 'NAT',\n 'tcp': 'TCP',\n 'udp': 'UDP',\n 'icmp': 'ICMP',\n 'ttl': 'TTL',\n 'lan': 'LAN',\n 'wan': 'WAN',\n 'vlan': 'VLAN',\n 'cdn': 'CDN',\n 'ftp': 'FTP',\n 'ssh': 'SSH',\n 'tls': 'TLS',\n 'ssl': 'SSL',\n\n // Security & crypto\n 'jwt': 'JWT',\n 'jws': 'JWS',\n 'jwe': 'JWE',\n 'hmac': 'HMAC',\n 'rsa': 'RSA',\n 'ecdsa': 'ECDSA',\n 'aes': 'AES',\n 'pbkdf2': 'PBKDF2',\n 'argon2': 'Argon2',\n 'scrypt': 'scrypt',\n 'totp': 'TOTP',\n 'hotp': 'HOTP',\n 'mfa': 'MFA',\n '2fa': '2FA',\n 'csrf': 'CSRF',\n 'xss': 'XSS',\n 'ssrf': 'SSRF',\n 'rce': 'RCE',\n 'dos': 'DoS',\n 'ddos': 'DDoS',\n 'mitm': 'MITM',\n 'csp': 'CSP',\n 'cors': 'CORS',\n 'pii': 'PII',\n 'phi': 'PHI',\n 'gdpr': 'GDPR',\n 'ccpa': 'CCPA',\n 'hipaa': 'HIPAA',\n 'rfc': 'RFC',\n\n // Platforms, langs, tools (single-token)\n 'javascript': 'JavaScript',\n 'typescript': 'TypeScript',\n 'jsx': 'JSX',\n 'tsx': 'TSX',\n 'node': 'Node', // (used when tokenized alone)\n 'deno': 'Deno',\n 'bun': 'Bun',\n 'react': 'React',\n 'nextjs': 'Next.js', // if your tokenizer drops dots, keep this\n 'nodejs': 'Node.js',\n 'postgresql': 'PostgreSQL',\n 'postgres': 'Postgres',\n 'mysql': 'MySQL',\n 'sqlite': 'SQLite',\n 'redis': 'Redis',\n 'supabase': 'Supabase',\n 'docker': 'Docker',\n 'kubernetes': 'Kubernetes',\n 'k8s': 'Kubernetes',\n 'helm': 'Helm',\n 'npm': 'npm',\n 'pnpm': 'pnpm',\n 'yarn': 'Yarn',\n 'eslint': 'ESLint',\n 'prettier': 'Prettier',\n 'vite': 'Vite',\n 'webpack': 'Webpack',\n 'babel': 'Babel',\n\n // OS & vendors\n 'macos': 'macOS',\n 'ios': 'iOS',\n 'ipados': 'iPadOS',\n 'watchos': 'watchOS',\n 'tvos': 'tvOS',\n 'windows': 'Windows',\n 'linux': 'Linux',\n 'ubuntu': 'Ubuntu',\n 'github': 'GitHub',\n 'gitlab': 'GitLab',\n 'bitbucket': 'Bitbucket',\n\n // Data & analytics\n 'etl': 'ETL',\n 'elt': 'ELT',\n 'olap': 'OLAP',\n 'oltp': 'OLTP',\n 'bi': 'BI',\n\n // Time & locales\n 'utc': 'UTC',\n 'gmt': 'GMT',\n 'pst': 'PST',\n 'pdt': 'PDT',\n 'pt': 'PT',\n\n // Common “small words” to keep lowercase (unless first/last word)\n 'or': 'or',\n 'and': 'and',\n 'the': 'the',\n 'of': 'of',\n 'in': 'in',\n 'to': 'to',\n 'with': 'with',\n 'as': 'as',\n 'by': 'by',\n 'for': 'for',\n 'on': 'on',\n 'at': 'at',\n 'up': 'up',\n 'a': 'a',\n 'an': 'an',\n 'is': 'is',\n 'are': 'are',\n 'was': 'was',\n 'were': 'were',\n 'be': 'be',\n 'but': 'but',\n 'nor': 'nor',\n 'so': 'so',\n 'yet': 'yet',\n 'per': 'per',\n 'via': 'via',\n\n // Latin abbreviations (tokenized as words in some pipelines)\n 'eg': 'e.g.',\n 'ie': 'i.e.',\n 'etc': 'etc.',\n 'aka': 'aka',\n 'vs': 'vs.',\n 'v': 'v.',\n\n // Client abbreviations\n 'CIC': 'CIC',\n 'AGR': 'AGR',\n 'AGER': 'AGER',\n 'DD': 'DD',\n 'TS': 'TS',\n 'TM': 'TM',\n 'arman': \"Arman\",\n};\n\n/**\n * Default options for text formatting\n */\nconst DEFAULT_OPTIONS: TextFormatterOptions = {\n textCase: 'title',\n wordReplacements: DEFAULT_WORD_REPLACEMENTS,\n trim: true,\n};\n\n/**\n * Formats text by normalizing case styles, applying case transformations,\n * and replacing specific words with custom formatting.\n * \n * @param text The input text to format\n * @param options Formatting options\n * @returns Formatted text\n */\nexport function formatText(text: string, options: TextFormatterOptions = {}): string {\n // Merge provided options with defaults\n const opts = { ...DEFAULT_OPTIONS, ...options };\n \n // Handle empty text\n if (!text) return '';\n \n // Step 1: Normalize various case styles to space-separated words\n let normalized = text\n // Convert snake_case to space-separated\n .replace(/_/g, ' ')\n // Convert kebab-case to space-separated\n .replace(/-/g, ' ')\n // Convert camelCase and PascalCase to space-separated\n .replace(/([a-z])([A-Z])/g, '$1 $2')\n // Replace multiple spaces with a single space\n .replace(/\\s+/g, ' ');\n \n // Step 2: Apply trim if needed\n if (opts.trim) {\n normalized = normalized.trim();\n }\n \n // Step 3: Apply the specified text case\n let caseTransformed = normalized;\n switch (opts.textCase) {\n case 'title':\n caseTransformed = normalized.replace(/\\w\\S*/g, (word) => \n word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()\n );\n break;\n case 'sentence':\n if (normalized.length > 0) {\n caseTransformed = normalized.charAt(0).toUpperCase() + normalized.slice(1).toLowerCase();\n }\n break;\n case 'lower':\n caseTransformed = normalized.toLowerCase();\n break;\n case 'upper':\n caseTransformed = normalized.toUpperCase();\n break;\n case 'normal':\n default:\n // No case transformation\n break;\n }\n \n // Step 4: Apply word replacements if provided\n let result = caseTransformed;\n if (opts.wordReplacements) {\n Object.entries(opts.wordReplacements).forEach(([key, value]) => {\n // Create a regex that matches the key as a whole word (case insensitive)\n const regex = new RegExp(`\\\\b${key}\\\\b`, 'gi');\n result = result.replace(regex, value);\n });\n }\n \n return result;\n}\n\n/**\n * Creates a pre-configured formatter function with specific options\n * \n * @param defaultOptions Default options for the formatter\n * @returns A formatter function with the specified default options\n */\nexport function createFormatter(defaultOptions: TextFormatterOptions = {}) {\n return (text: string, overrideOptions: TextFormatterOptions = {}) => \n formatText(text, { ...defaultOptions, ...overrideOptions });\n}\n\n// Some pre-configured formatters for common use cases\nexport const formatTitleCase = createFormatter({ textCase: 'title' });\nexport const formatSentenceCase = createFormatter({ textCase: 'sentence' });\nexport const formatNormalCase = createFormatter({ textCase: 'normal' });\nexport const formatUpperCase = createFormatter({ textCase: 'upper' });\nexport const formatLowerCase = createFormatter({ textCase: 'lower' });\nexport const formatWithoutReplacements = createFormatter({ wordReplacements: {} });\n","/**\n * Schema-shape helpers — structural depth and layout hints derived from a\n * KindSchema. Drives the generic renderer's flat / grid / nested layout and\n * human labels for slugs.\n *\n * Moved from app/(dev)/demos/json-block-detector/schema-structure.ts.\n */\n\nimport { formatText } from \"../utils/text-case-converter\";\nimport type { FieldSchema, KindSchema } from \"./kind-schema.types\";\n\n/** Human label from a slug or field key (snake_case → Title Case + acronym fixes). */\nexport function formatBlockLabel(key: string): string {\n return formatText(key, { textCase: \"title\" });\n}\n\n/**\n * Structural nesting depth of a kind schema — drives generic renderer layout.\n * 0 = flat card (scalars only)\n * 1 = grid (one array/object nesting level)\n * 2+ = expandable grid (parent → child → grandchild)\n */\nexport function schemaStructureDepth(\n schema: KindSchema,\n allSchemas: Record<string, KindSchema>,\n visiting: Set<string> = new Set(),\n): number {\n if (visiting.has(schema.kind)) return 0;\n visiting.add(schema.kind);\n\n let max = 0;\n for (const field of Object.values(schema.fields)) {\n max = Math.max(max, fieldStructureDepth(field, allSchemas, visiting));\n }\n\n visiting.delete(schema.kind);\n return max;\n}\n\nfunction fieldStructureDepth(\n field: FieldSchema,\n allSchemas: Record<string, KindSchema>,\n visiting: Set<string>,\n): number {\n switch (field.type) {\n case \"array\": {\n let itemMax = 0;\n for (const itemKind of field.itemKinds) {\n const itemSchema = allSchemas[itemKind];\n itemMax = Math.max(\n itemMax,\n itemSchema\n ? 1 + schemaStructureDepth(itemSchema, allSchemas, visiting)\n : 1,\n );\n }\n return itemMax;\n }\n case \"object\": {\n const ref = allSchemas[field.kind];\n return ref ? 1 + schemaStructureDepth(ref, allSchemas, visiting) : 1;\n }\n case \"inline_object\": {\n let nested = 0;\n for (const child of Object.values(field.fields)) {\n nested = Math.max(\n nested,\n fieldStructureDepth(child, allSchemas, visiting),\n );\n }\n return nested > 0 ? 1 + nested : 1;\n }\n default:\n return 0;\n }\n}\n\nexport type SchemaLayoutMode = \"flat\" | \"grid\" | \"nested\";\n\nexport function schemaLayoutMode(\n schema: KindSchema,\n allSchemas: Record<string, KindSchema>,\n): SchemaLayoutMode {\n const depth = schemaStructureDepth(schema, allSchemas);\n if (depth <= 0) return \"flat\";\n if (depth === 1) return \"grid\";\n return \"nested\";\n}\n"]}