{"version":3,"sources":["../core/kind-schema.types.ts","../core/schema-structure.ts","../convert/openai-schema-converter.ts","../convert/kind-to-json-schema.ts","../convert/control-keys.ts","../convert/json-schema-to-kind.ts"],"names":["formatText","clone","type","nullable","KIND_KEY","out"],"mappings":"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","file":"convert.cjs","sourcesContent":["/**\n * KindSchema — the data-defined field model for a registered kind.\n *\n * `__kind` (KIND_KEY) is the carried discriminator: it is NOT part of a\n * kind's field map; the parser enforces it via `KindSchema.kind` and stamps\n * it onto every compliant snapshot.\n *\n * Moved from app/(dev)/demos/json-block-detector/kind-schemas.ts.\n *\n * 2026-07-15 expressivity extension (A2) — four constructs the Python-owned\n * pydantic schemas need that the v1 vocabulary could not express:\n *   - `{type:\"json\"}` / `{type:\"json[]\"}` — any JSON value / array of any\n *     JSON values (pydantic bare `Any` fields, `items: {}` arrays, `{}`\n *     schemas). A `json` value is implicitly nullable — `null` IS a JSON\n *     value — so `nullable` is meaningless (and ignored) on it.\n *   - `record` values widened to `\"json\"` (pydantic `dict[str, Any]` /\n *     `additionalProperties: true`).\n *   - `union` may now carry `kinds` (object unions — anyOf over kind refs,\n *     optionally mixed with scalars). Refs externalize to `kind_edge` rows\n *     exactly like `array.itemKinds`.\n *   - `KindSchema.root` — a NON-OBJECT root form: the kind's VALUE is the\n *     root field itself (scalar / array / json / open object), not a `__kind`\n *     object with fields. Root-form kinds are data-only: the streaming\n *     `__kind` parser cannot type them (a scalar cannot carry a\n *     discriminator) and refuses them loudly; validation goes through the\n *     emitted JSON Schema (ajv / Pydantic). `root` and a non-empty `fields`\n *     are mutually exclusive.\n *   - `inline_object.open` — `additionalProperties: true`; fixes the\n *     open-empty-object defect where an open `inline_object{fields:{}}`\n *     materialized as CLOSED (schema_proposal / item_presentation class).\n *\n * 2026-07-15 input-semantics extension (W3-A, agent-input bridge) — the\n * constructs the Wave-1 sufficiency survey of all 1,529 live agent variables\n * showed FieldSchema could not carry, added so `AgentVariable` ⇄ kind\n * conversion is faithful:\n *   - `FieldBase.description` — human guidance; round-trips JSON Schema\n *     `description` and VariableDefinition `helpText`.\n *   - `FieldBase.default` — the field's default VALUE (JSON Schema `default`,\n *     VariableDefinition `defaultValue`). Annotation-level: validators never\n *     apply it; emitters carry it verbatim.\n *   - `enum.open` — \"one of these options OR any string\" (the FE's\n *     `allowOther`). Emits as `anyOf: [{type:\"string\", enum}, {type:\"string\"}]`\n *     so the option set survives instead of widening to bare `string`.\n *   - `number` bounds `min`/`max`/`step` — JSON Schema\n *     `minimum`/`maximum`/`multipleOf` (number/slider components).\n *   - `string[].values` (+ `open`) — an items-enum: array of strings drawn\n *     from an option set (checkbox components), `open` meaning the set is\n *     advisory (`allowOther` on a multi-select).\n * Picklist bindings, scope bindings, and media component identity are\n * PROVENANCE, not structure — they never enter FieldSchema; the bridge\n * carries them out-of-band (see convert/kind-variable-bridge.ts sidecar).\n */\n\n/** System discriminator — hardcoded, not part of per-kind field schemas. */\nexport const KIND_KEY = \"__kind\";\n\nexport type ScalarFieldType = \"string\" | \"number\" | \"boolean\";\n\nexport type ArrayItemScalarType = \"string\" | \"number\" | \"boolean\";\n\n/** Value domain of a `record` field — typed scalars, or any JSON value. */\nexport type RecordValueType = ArrayItemScalarType | \"json\";\n\ntype FieldBase = {\n  required?: boolean;\n  nullable?: boolean;\n  /** Human guidance — JSON Schema `description` / variable `helpText`. */\n  description?: string;\n  /**\n   * Default VALUE (JSON Schema `default` / variable `defaultValue`).\n   * Annotation-level: validators never apply it; emitters carry it verbatim.\n   */\n  default?: unknown;\n};\n\nexport type FieldSchema =\n  | (FieldBase & { type: \"string\" | \"boolean\" })\n  | (FieldBase & {\n      type: \"number\";\n      /** Inclusive lower bound — JSON Schema `minimum`. */\n      min?: number;\n      /** Inclusive upper bound — JSON Schema `maximum`. */\n      max?: number;\n      /** Increment — JSON Schema `multipleOf`. Annotation-level in the parser. */\n      step?: number;\n    })\n  | (FieldBase & {\n      type: \"string[]\";\n      /** Items-enum: each item must be one of these values (checkbox option sets). */\n      values?: string[];\n      /** With `values`: the set is advisory — any string item is also legal (`allowOther`). */\n      open?: boolean;\n    })\n  | (FieldBase & { type: \"number[]\" | \"boolean[]\" })\n  | (FieldBase & { type: \"json\" })\n  | (FieldBase & { type: \"json[]\" })\n  | (FieldBase & { type: \"array\"; itemKinds: string[] })\n  | (FieldBase & { type: \"object\"; kind: string })\n  | (FieldBase & {\n      type: \"inline_object\";\n      fields: Record<string, FieldSchema>;\n      /** additionalProperties: true — unknown keys are legal, not residue-only. */\n      open?: boolean;\n    })\n  | (FieldBase & { type: \"record\"; values: RecordValueType })\n  | (FieldBase & {\n      type: \"enum\";\n      values: string[];\n      /** \"One of these OR any string\" — the option set is advisory (`allowOther`). */\n      open?: boolean;\n    })\n  | (FieldBase & {\n      type: \"union\";\n      scalars: Array<\"string\" | \"number\" | \"boolean\">;\n      /** Object union members — kind refs (anyOf of $refs), may mix with scalars. */\n      kinds?: string[];\n    });\n\n/**\n * Domain fields only — __kind is enforced by the parser via KindSchema.kind\n * (block slug). A kind with `root` set has NO field map (fields stays `{}`):\n * its value is the root field's type at the top level. See the module header.\n */\nexport type KindSchema = {\n  kind: string;\n  fields: Record<string, FieldSchema>;\n  /** Non-object root form — mutually exclusive with a non-empty `fields`. */\n  root?: FieldSchema;\n};\n\nexport function readObjectKind(value: Record<string, unknown>): string | null {\n  const kind = value[KIND_KEY];\n  return typeof kind === \"string\" ? kind : null;\n}\n\nexport function isScalarArrayType(\n  type: FieldSchema[\"type\"],\n): type is \"string[]\" | \"number[]\" | \"boolean[]\" {\n  return type === \"string[]\" || type === \"number[]\" || type === \"boolean[]\";\n}\n\nexport function scalarArrayItemType(\n  type: \"string[]\" | \"number[]\" | \"boolean[]\",\n): ArrayItemScalarType {\n  if (type === \"number[]\") return \"number\";\n  if (type === \"boolean[]\") return \"boolean\";\n  return \"string\";\n}\n\n/**\n * Does this field's value domain accept ANY JSON shape (object/array/scalar/\n * null alike)? True for `json` and `json[]` ITEMS — the parser treats the\n * subtree under such a field as opaque (no kind identification, no raw_object\n * degradation: unknown structure is the declared contract, not a failure).\n */\nexport function isJsonAnyField(field: FieldSchema): boolean {\n  return field.type === \"json\" || field.type === \"json[]\";\n}\n","/**\n * 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 \"@ai-matrx/kit/text-case\";\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","/**\n * OpenAI/provider JSON Schema → KindSchema converter + __kind injection.\n *\n * The strategic keystone: `buildAgentSchemaWithRenderBlockSupport` turns \"a\n * user/agent defined an output schema\" into \"the platform has a render\n * contract for it\" by injecting the `__kind` discriminator into the agent's\n * output schema (root + array items), so the model emits self-identifying\n * objects from then on.\n *\n * Moved from app/(dev)/demos/json-block-detector/schema-converter.ts.\n */\n\nimport {\n  KIND_KEY,\n  type FieldSchema,\n  type KindSchema,\n} from \"../core/kind-schema.types\";\nimport { formatBlockLabel } from \"../core/schema-structure\";\n\n/**\n * `FieldSchema.required`/`nullable` are `boolean | undefined` by omission —\n * every consumer only ever does a truthy check (`field.required`), never\n * `'required' in field`. Building the flags this way (key present only when\n * true) is behavior-identical to the old `required: required || undefined`\n * under exactOptionalPropertyTypes, which forbids an explicit `undefined`\n * value for an optional key.\n */\nfunction requiredNullableFlags(\n  required: boolean,\n  nullable?: boolean,\n): { required?: true; nullable?: true } {\n  return {\n    ...(required ? { required: true } : {}),\n    ...(nullable ? { nullable: true } : {}),\n  };\n}\n\nexport type JsonSchemaNode = Record<string, unknown>;\n\nexport type ConversionProblem = {\n  severity: \"error\" | \"warning\" | \"info\";\n  path: string;\n  message: string;\n};\n\nexport type DroppedMetadata = {\n  path: string;\n  dropped: Record<string, unknown>;\n};\n\nexport type FieldComparison = {\n  field: string;\n  aiPresent: boolean;\n  blockPresent: boolean;\n  aiSummary: string | null;\n  blockSummary: string | null;\n  status:\n    | \"match\"\n    | \"ai_only\"\n    | \"block_only\"\n    | \"type_mismatch\"\n    | \"ai_richer\"\n    | \"block_richer\";\n  detail?: string;\n};\n\n/** One standalone flexible_data block schema row. */\nexport type BlockSchemaDraft = {\n  slug: string;\n  label: string;\n  fields: Record<string, FieldSchema>;\n  /**\n   * NON-OBJECT ROOT form (KindSchema.root): the kind's value is this field's\n   * shape at the top level (scalar / array / json / OPEN object). When set,\n   * `fields` is empty — mirror of `KindSchema.root`.\n   */\n  root?: FieldSchema;\n};\n\nexport type ArrayItemKindBinding = {\n  arrayField: string;\n  itemKindSlug: string;\n};\n\nexport type SchemaConversionResult = {\n  schemaName: string | null;\n  strict: boolean | null;\n  /** Every block schema row required for the converted shape (1..n). */\n  blockSchemas: BlockSchemaDraft[];\n  /** OPTION 2 — same input shape with __kind injected for agent output. */\n  agentSchemaWithKinds: unknown | null;\n  problems: ConversionProblem[];\n  droppedMetadata: DroppedMetadata[];\n  comparisons: FieldComparison[];\n};\n\nexport type SavePlanEntry = {\n  draft: BlockSchemaDraft;\n  existsInDb: boolean;\n  willSave: boolean;\n};\n\nexport type ItemKindRefCheck = {\n  parentSlug: string;\n  field: string;\n  itemKind: string;\n  satisfied: boolean;\n  source: \"batch\" | \"database\" | \"missing\";\n};\n\nexport type SavePlanValidation = {\n  entries: SavePlanEntry[];\n  itemKindRefs: ItemKindRefCheck[];\n  newCount: number;\n  canSave: boolean;\n  errors: string[];\n};\n\nconst METADATA_KEYS = new Set([\n  \"description\",\n  \"title\",\n  \"default\",\n  \"examples\",\n  \"format\",\n  \"minimum\",\n  \"maximum\",\n  \"multipleOf\",\n  \"exclusiveMinimum\",\n  \"exclusiveMaximum\",\n  \"minLength\",\n  \"maxLength\",\n  \"minItems\",\n  \"maxItems\",\n  \"pattern\",\n  \"const\",\n  \"$schema\",\n  \"$id\",\n  \"deprecated\",\n  \"readOnly\",\n  \"writeOnly\",\n]);\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction deepClone<T>(value: T): T {\n  return JSON.parse(JSON.stringify(value)) as T;\n}\n\nfunction fieldSchemaSummary(field: FieldSchema): string {\n  if (field.type === \"enum\") {\n    return `enum(${field.values.join(\"|\")}${field.open ? \"|+any\" : \"\"})${field.required ? \"*\" : \"\"}`;\n  }\n  if (field.type === \"array\") {\n    return `array<${field.itemKinds.join(\"|\")}>${field.required ? \"*\" : \"\"}`;\n  }\n  if (field.type === \"inline_object\") {\n    return `inline{${Object.keys(field.fields).join(\",\")}}${field.required ? \"*\" : \"\"}`;\n  }\n  if (field.type === \"object\") {\n    return `object:${field.kind}${field.required ? \"*\" : \"\"}`;\n  }\n  if (field.type === \"union\") {\n    const members = [...field.scalars, ...(field.kinds ?? [])];\n    return `union(${members.join(\"|\")})${field.required ? \"*\" : \"\"}`;\n  }\n  if (field.type === \"record\") {\n    return `record(${field.values})${field.required ? \"*\" : \"\"}`;\n  }\n  return `${field.type}${field.required ? \"*\" : \"\"}${field.nullable ? \"?\" : \"\"}`;\n}\n\nfunction resolvePrimaryType(node: JsonSchemaNode): {\n  type: string | null;\n  nullable: boolean;\n  /**\n   * Every non-null member of a `type: [...]` union, normalized\n   * (integer → number) and deduplicated. Length > 1 means `type` above is\n   * ONLY the first member and using it alone LOSES the rest — callers that\n   * can express a union must branch on this. Length <= 1 for every\n   * single-typed node, so existing call sites are unaffected.\n   */\n  members: string[];\n} {\n  const raw = node.type;\n  if (typeof raw === \"string\") {\n    const t = raw === \"integer\" ? \"number\" : raw;\n    return { type: t, nullable: false, members: [t] };\n  }\n  if (Array.isArray(raw)) {\n    const types = raw.filter((t): t is string => typeof t === \"string\");\n    const nullable = types.includes(\"null\");\n    const members = [\n      ...new Set(\n        types\n          .filter((t) => t !== \"null\")\n          .map((t) => (t === \"integer\" ? \"number\" : t)),\n      ),\n    ];\n    const primary =\n      members[0] ?? (nullable && types.length === 1 ? \"null\" : null);\n    return { type: primary ?? null, nullable, members };\n  }\n  if (node.enum) return { type: \"string\", nullable: false, members: [\"string\"] };\n  if (node.properties)\n    return { type: \"object\", nullable: false, members: [\"object\"] };\n  if (node.items)\n    return { type: \"array\", nullable: false, members: [\"array\"] };\n  return { type: null, nullable: false, members: [] };\n}\n\n/**\n * Metadata keys the converted field CARRIES (input-semantics extension) —\n * these are no longer \"dropped\": description / default land on FieldBase;\n * minimum / maximum / multipleOf land on `number` fields as min/max/step.\n */\nfunction carriedMetadataKeys(field: FieldSchema | null): Set<string> {\n  if (field === null) return new Set();\n  const carried = new Set([\"description\", \"default\"]);\n  if (field.type === \"number\") {\n    carried.add(\"minimum\");\n    carried.add(\"maximum\");\n    carried.add(\"multipleOf\");\n  }\n  return carried;\n}\n\nfunction collectDropped(\n  node: JsonSchemaNode,\n  path: string,\n  carriedField: FieldSchema | null = null,\n): DroppedMetadata[] {\n  const carried = carriedMetadataKeys(carriedField);\n  const dropped: Record<string, unknown> = {};\n  for (const [key, value] of Object.entries(node)) {\n    if (METADATA_KEYS.has(key) && !carried.has(key)) {\n      dropped[key] = value;\n    }\n  }\n\n  if (Object.keys(dropped).length > 0) {\n    return [{ path, dropped }];\n  }\n  return [];\n}\n\n/**\n * Attach the representable node metadata to a converted field: description\n * (string), default (any JSON value, verbatim), and — for `number` fields —\n * minimum/maximum/multipleOf as min/max/step. Never overwrites values the\n * core conversion already set.\n */\nfunction attachNodeMetadata(\n  node: JsonSchemaNode,\n  field: FieldSchema,\n): FieldSchema {\n  let out = field;\n  if (typeof node.description === \"string\" && out.description === undefined) {\n    out = { ...out, description: node.description };\n  }\n  if (node.default !== undefined && out.default === undefined) {\n    out = { ...out, default: node.default };\n  }\n  if (out.type === \"number\") {\n    const bounds: { min?: number; max?: number; step?: number } = {};\n    if (typeof node.minimum === \"number\" && out.min === undefined) {\n      bounds.min = node.minimum;\n    }\n    if (typeof node.maximum === \"number\" && out.max === undefined) {\n      bounds.max = node.maximum;\n    }\n    if (typeof node.multipleOf === \"number\" && out.step === undefined) {\n      bounds.step = node.multipleOf;\n    }\n    if (Object.keys(bounds).length > 0) out = { ...out, ...bounds };\n  }\n  return out;\n}\n\nfunction makeKindJsonSchemaProperty(\n  kindSlug: string,\n  strict: boolean,\n): JsonSchemaNode {\n  const base: JsonSchemaNode = {\n    type: \"string\",\n    description: \"Block discriminator for render pipeline.\",\n  };\n  if (strict) {\n    return { ...base, const: kindSlug };\n  }\n  return { ...base, enum: [kindSlug] };\n}\n\n/**\n * Inject the `__kind` discriminator into one object schema (const when\n * strict, enum otherwise; `__kind` prepended to required; strict also pins\n * additionalProperties:false). Shared with the REVERSE converter\n * (kind-to-json-schema.ts) so both directions stamp identical discriminators.\n */\nexport function injectKindIntoObjectSchema(\n  objectSchema: JsonSchemaNode,\n  kindSlug: string,\n  strict: boolean,\n): JsonSchemaNode {\n  const clone = deepClone(objectSchema);\n  const properties: Record<string, unknown> = isRecord(clone.properties)\n    ? { ...clone.properties }\n    : {};\n\n  properties[KIND_KEY] = makeKindJsonSchemaProperty(kindSlug, strict);\n\n  const required = Array.isArray(clone.required)\n    ? clone.required.filter((k): k is string => typeof k === \"string\")\n    : [];\n  const nextRequired = required.includes(KIND_KEY)\n    ? required\n    : [KIND_KEY, ...required];\n\n  return {\n    ...clone,\n    properties,\n    required: nextRequired,\n    ...(strict ? { additionalProperties: false } : {}),\n  };\n}\n\nfunction injectKindsIntoRootSchema(\n  rootSchema: JsonSchemaNode,\n  rootKindSlug: string,\n  arrayBindings: ArrayItemKindBinding[],\n  strict: boolean,\n): JsonSchemaNode {\n  let updated = injectKindIntoObjectSchema(rootSchema, rootKindSlug, strict);\n\n  if (!isRecord(updated.properties)) {\n    return updated;\n  }\n\n  const properties = { ...updated.properties };\n\n  for (const binding of arrayBindings) {\n    const fieldNode = properties[binding.arrayField];\n    if (!isRecord(fieldNode)) continue;\n\n    const items = fieldNode.items;\n    const itemNode = Array.isArray(items) ? items[0] : items;\n    if (!isRecord(itemNode)) continue;\n\n    const updatedItem = injectKindIntoObjectSchema(\n      itemNode,\n      binding.itemKindSlug,\n      strict,\n    );\n\n    properties[binding.arrayField] = {\n      ...fieldNode,\n      items: updatedItem,\n    };\n  }\n\n  return { ...updated, properties };\n}\n\nexport function buildAgentSchemaWithRenderBlockSupport(\n  input: unknown,\n  rootKindSlug: string,\n  arrayBindings: ArrayItemKindBinding[],\n  strict: boolean,\n): unknown | null {\n  if (!isRecord(input)) return null;\n\n  const normalized = normalizeAiSchemaInput(input);\n  if (!normalized.rootSchema) return null;\n\n  // Non-object roots (root-form kinds) cannot carry a __kind discriminator —\n  // the agent schema passes through unchanged.\n  if (\n    normalized.rootSchema.type !== \"object\" &&\n    !isRecord(normalized.rootSchema.properties)\n  ) {\n    return deepClone(input);\n  }\n\n  const updatedRoot = injectKindsIntoRootSchema(\n    normalized.rootSchema,\n    rootKindSlug,\n    arrayBindings,\n    strict,\n  );\n\n  if (isRecord(input.schema) && typeof input.name === \"string\") {\n    return {\n      ...deepClone(input),\n      schema: updatedRoot,\n    };\n  }\n\n  if (isRecord(input.json_schema)) {\n    const inner = buildAgentSchemaWithRenderBlockSupport(\n      input.json_schema,\n      rootKindSlug,\n      arrayBindings,\n      strict,\n    );\n    return inner ? { ...deepClone(input), json_schema: inner } : null;\n  }\n\n  if (typeof input.name === \"string\") {\n    return {\n      ...deepClone(input),\n      schema: updatedRoot,\n    };\n  }\n\n  return updatedRoot;\n}\n\ntype ConvertContext = {\n  schemaName: string;\n  strict: boolean;\n  problems: ConversionProblem[];\n  droppedMetadata: DroppedMetadata[];\n  blockSchemas: BlockSchemaDraft[];\n  arrayBindings: ArrayItemKindBinding[];\n  /**\n   * `$defs` / `definitions` from the ROOT schema, keyed by def name. This is\n   * how `kindSchemaToJsonSchema` externalizes child kinds, so without it every\n   * `{type:\"object\", kind}` and `{type:\"array\", itemKinds}` field a kind\n   * declares comes back EMPTY — measured 2026-08-29 as 36 of the 62 live\n   * kinds that carry both a stored field list and a schema.\n   */\n  defs: Record<string, JsonSchemaNode>;\n  /** The root schema itself — the target of a recursive `#` reference. */\n  rootSchema: JsonSchemaNode;\n  /** Def slugs whose draft is mid-construction — the cycle brake. */\n  refsInProgress: Set<string>;\n};\n\n/**\n * Resolve a local JSON Schema reference to `{ slug, node }`.\n *\n * Supports the three forms this platform emits: `#` (the recursive-root\n * reference `kindSchemaToJsonSchema` writes for a kind that contains itself),\n * `#/$defs/<name>`, and the older `#/definitions/<name>`. A remote or\n * pointer-into-properties ref is not resolvable here and returns null — the\n * caller reports it.\n *\n * The def NAME is the kind slug by construction: the forward converter keys\n * `$defs` by slug. A resolved def usually also declares `__kind`, and that\n * declaration wins when the two disagree.\n */\nfunction resolveRef(\n  ref: string,\n  ctx: ConvertContext,\n): ResolvedRef | null {\n  if (ref === \"#\" || ref === \"#/\") {\n    return { slug: ctx.schemaName, node: ctx.rootSchema, declaresKind: true };\n  }\n  const match = /^#\\/(?:\\$defs|definitions)\\/(.+)$/.exec(ref);\n  if (!match) return null;\n  const name = decodeURIComponent(\n    (match[1] ?? \"\").replace(/~1/g, \"/\").replace(/~0/g, \"~\"),\n  );\n  const node = ctx.defs[name];\n  if (!isRecord(node)) return null;\n  const declared = isRecord(node.properties)\n    ? readBlockKindFromProperties(node.properties)\n    : null;\n  return { slug: declared ?? name, node, declaresKind: declared !== null };\n}\n\ntype ResolvedRef = {\n  slug: string;\n  node: JsonSchemaNode;\n  /**\n   * The def DECLARES its kind (`__kind` const/enum, or the recursive root).\n   *\n   * 🚨 ONLY A DECLARED DEF IS A KIND REFERENCE (2026-10-07). Pydantic emits every\n   * nested model as a `$def` named after its CLASS, and a python kind's plain\n   * sub-structure declares `__kind` as an optional free string (\"…when it is\n   * one\") — its values carry no `__kind`. Reading such a `$ref` as\n   * `{type:\"object\", kind:\"<ClassName>\"}` made the parser demand\n   * `__kind === \"<ClassName>\"` of a value that never carries one, so every real\n   * instance resolved `raw` and drew through the generic fallback the moment\n   * the database schema reached the registry (the Applet builder's floating\n   * window). An undeclared def is the structure written in place: it inlines.\n   */\n  declaresKind: boolean;\n};\n\n/**\n * The node a `$ref` to an UNDECLARED def stands for: the def itself, with any\n * keyword written beside the `$ref` (description, default, title) on top.\n */\nfunction inlineRefNode(\n  refNode: JsonSchemaNode,\n  resolved: ResolvedRef,\n): JsonSchemaNode {\n  const { $ref: _ref, ...beside } = refNode;\n  return { ...resolved.node, ...beside };\n}\n\n/**\n * A `$ref` in a field position: the field's value IS an instance of the\n * referenced kind, so it converts to an object ref and the referenced def is\n * registered as its own draft (guarded, so a kind that references itself\n * terminates instead of recursing forever).\n */\nfunction refToObjectField(\n  resolved: { slug: string; node: JsonSchemaNode },\n  path: string,\n  ctx: ConvertContext,\n): void {\n  if (ctx.refsInProgress.has(resolved.slug)) return;\n  ctx.refsInProgress.add(resolved.slug);\n  try {\n    registerDeclaredKindDraft(resolved.slug, resolved.node, path, ctx);\n  } finally {\n    ctx.refsInProgress.delete(resolved.slug);\n  }\n}\n\n/**\n * A schema node whose value domain is \"any JSON value\": no type, no enum, no\n * properties, no items, no combinators. (`{}`, or metadata-only nodes like\n * pydantic's bare `Any` fields — `{title, default, description}`.)\n */\nfunction isAnyValueSchema(node: JsonSchemaNode): boolean {\n  return (\n    node.type === undefined &&\n    node.enum === undefined &&\n    node.const === undefined &&\n    node.properties === undefined &&\n    node.items === undefined &&\n    node.additionalProperties === undefined &&\n    node.anyOf === undefined &&\n    node.oneOf === undefined &&\n    node.allOf === undefined &&\n    node.$ref === undefined\n  );\n}\n\n/**\n * An object variant that DECLARES its kind (`__kind` const/enum) becomes a\n * savable draft — same discipline as array items, so union members and\n * anyOf-array items are first-class kinds, not dangling refs.\n */\nfunction registerDeclaredKindDraft(\n  declaredKind: string,\n  objectNode: JsonSchemaNode,\n  path: string,\n  ctx: ConvertContext,\n): void {\n  if (ctx.blockSchemas.some((draft) => draft.slug === declaredKind)) return;\n  if (!isRecord(objectNode.properties)) return;\n\n  const memberRequired = new Set(\n    Array.isArray(objectNode.required)\n      ? objectNode.required.filter((k): k is string => typeof k === \"string\")\n      : [],\n  );\n  const fields: Record<string, FieldSchema> = {};\n  for (const [propName, propNode] of Object.entries(objectNode.properties)) {\n    if (!isRecord(propNode)) continue;\n    if (propName === KIND_KEY) continue;\n    fields[propName] = convertFieldOrWiden(\n      propName,\n      propNode,\n      memberRequired.has(propName),\n      `${path}.${propName}`,\n      ctx,\n    );\n  }\n  ctx.blockSchemas.push({\n    slug: declaredKind,\n    label: formatBlockLabel(declaredKind),\n    fields,\n  });\n}\n\n/**\n * 🚨 A FIELD IS NEVER DROPPED — IT WIDENS (Arman's ruling, 2026-08-29).\n *\n * `convertProperty` returns null for a construct the vocabulary cannot name\n * precisely: a 2-D array (`rows: [[...]]`), an array of untyped objects, a\n * mixed anyOf. Dropping that field from the kind's schema is the worst of the\n * available answers, and it does not merely lose detail — it inverts the\n * outcome:\n *\n *   - the field disappears from the field map,\n *   - so a real payload's value for it becomes unknown-key residue,\n *   - and if the schema marked it required, validation FAILS,\n *   - so the node goes `raw`, which the render route rightly refuses a\n *     component — the exact key/value dump this whole effort exists to end.\n *\n * `json` — any JSON value — is always a TRUE statement about such a field. It\n * validates anything, loses nothing, and keeps the kind renderable. Widen,\n * record why, and move on. 28 of the 502 live kinds hit this on 2026-08-29.\n */\nfunction convertFieldOrWiden(\n  fieldName: string,\n  node: JsonSchemaNode,\n  required: boolean,\n  path: string,\n  ctx: ConvertContext,\n): FieldSchema {\n  const before = ctx.problems.length;\n  const converted = convertProperty(fieldName, node, required, path, ctx);\n  if (converted) return converted;\n\n  // The conversion RECOVERED. Anything the failed attempt logged as an error\n  // describes a construct we then widened around, so leaving it at \"error\"\n  // would make every warm load scream about 28 kinds that render perfectly.\n  // Downgrade what this attempt recorded — and only what it recorded.\n  for (let i = before; i < ctx.problems.length; i++) {\n    const problem = ctx.problems[i];\n    if (problem && problem.severity === \"error\") problem.severity = \"warning\";\n  }\n  ctx.problems.push({\n    severity: \"warning\",\n    path,\n    message: `Field \"${fieldName}\" has no exact field type — carried as any JSON value (json) rather than dropped from the kind.`,\n  });\n  return { ...requiredNullableFlags(required), type: \"json\" };\n}\n\n/**\n * Convert one JSON Schema property node. Wraps the core structural\n * conversion with the metadata carry (description / default / number\n * bounds) and reports the metadata that remains genuinely dropped.\n */\nfunction convertProperty(\n  fieldName: string,\n  node: JsonSchemaNode,\n  required: boolean,\n  path: string,\n  ctx: ConvertContext,\n): FieldSchema | null {\n  const core = convertPropertyCore(fieldName, node, required, path, ctx);\n  const field = core === null ? null : attachNodeMetadata(node, core);\n  ctx.droppedMetadata.push(...collectDropped(node, path, field));\n  return field;\n}\n\nfunction convertPropertyCore(\n  fieldName: string,\n  node: JsonSchemaNode,\n  required: boolean,\n  path: string,\n  ctx: ConvertContext,\n): FieldSchema | null {\n  if (typeof node.$ref === \"string\") {\n    const resolved = resolveRef(node.$ref, ctx);\n    if (!resolved) {\n      ctx.problems.push({\n        severity: \"error\",\n        path,\n        message: `Unresolvable $ref (\"${node.$ref}\") — only \"#\", \"#/$defs/<name>\" and \"#/definitions/<name>\" are supported.`,\n      });\n      return null;\n    }\n    if (!resolved.declaresKind) {\n      // A plain nested structure: convert the def in place. A def that\n      // contains itself cannot be written inline — carry it as any JSON value.\n      const guard = `$def:${node.$ref}`;\n      if (ctx.refsInProgress.has(guard)) {\n        ctx.problems.push({\n          severity: \"info\",\n          path,\n          message: `Self-referencing structure \"${node.$ref}\" — carried as any JSON value (json).`,\n        });\n        return { ...requiredNullableFlags(required), type: \"json\" };\n      }\n      ctx.refsInProgress.add(guard);\n      try {\n        return convertPropertyCore(\n          fieldName,\n          inlineRefNode(node, resolved),\n          required,\n          path,\n          ctx,\n        );\n      } finally {\n        ctx.refsInProgress.delete(guard);\n      }\n    }\n    refToObjectField(resolved, path, ctx);\n    return {\n      ...requiredNullableFlags(required),\n      type: \"object\",\n      kind: resolved.slug,\n    };\n  }\n\n  if (Array.isArray(node.anyOf) || Array.isArray(node.oneOf)) {\n    const variants = (node.anyOf ?? node.oneOf) as JsonSchemaNode[];\n    const scalarTypes = new Set<\"string\" | \"number\" | \"boolean\">();\n    const enumVariantSets: string[][] = [];\n    const memberKinds: string[] = [];\n    const anonymousObjects: JsonSchemaNode[] = [];\n    let sawNull = false;\n    let unsupported = false;\n\n    for (const variant of variants) {\n      if (!isRecord(variant)) {\n        unsupported = true;\n        continue;\n      }\n      if (typeof variant.$ref === \"string\") {\n        const resolvedVariant = resolveRef(variant.$ref, ctx);\n        if (!resolvedVariant) {\n          ctx.problems.push({\n            severity: \"error\",\n            path,\n            message: `Unresolvable $ref inside anyOf/oneOf (\"${variant.$ref}\").`,\n          });\n          unsupported = true;\n          continue;\n        }\n        // An undeclared def is a plain structure written in place — the\n        // nullable inline object below, never a union kind member.\n        if (!resolvedVariant.declaresKind) {\n          anonymousObjects.push(inlineRefNode(variant, resolvedVariant));\n          continue;\n        }\n        // An object union member — the same vocabulary `kinds` carries for\n        // inline __kind variants. This is how a nullable object ref\n        // (`anyOf: [$ref, {type:\"null\"}]`) reads back instead of degrading.\n        refToObjectField(resolvedVariant, path, ctx);\n        memberKinds.push(resolvedVariant.slug);\n        continue;\n      }\n      const { type, nullable } = resolvePrimaryType(variant);\n      if (nullable) sawNull = true;\n      if (type === \"null\") {\n        sawNull = true;\n        continue;\n      }\n      // A string variant CARRYING an enum is an option set, not a plain\n      // scalar — collected separately so anyOf [enum, string] reads back as\n      // an OPEN enum instead of silently losing the options.\n      if (type === \"string\" && Array.isArray(variant.enum)) {\n        enumVariantSets.push(\n          variant.enum.filter((v): v is string => typeof v === \"string\"),\n        );\n        continue;\n      }\n      if (type === \"string\" || type === \"number\" || type === \"boolean\") {\n        scalarTypes.add(type);\n        continue;\n      }\n      if (type === \"object\" && isRecord(variant.properties)) {\n        const declared = readBlockKindFromProperties(variant.properties);\n        if (declared) {\n          memberKinds.push(declared);\n          registerDeclaredKindDraft(declared, variant, `${path}<${declared}>`, ctx);\n        } else {\n          anonymousObjects.push(variant);\n        }\n        continue;\n      }\n      unsupported = true;\n    }\n\n    if (unsupported) {\n      ctx.problems.push({\n        severity: \"error\",\n        path,\n        message:\n          \"anyOf/oneOf with unsupported variants cannot be converted automatically.\",\n      });\n      return null;\n    }\n\n    // Enum variants (+ optionally a plain string variant, + optional null):\n    // the option-set forms. [enum] → closed enum; [enum, string] → OPEN enum\n    // (\"these options OR any string\" — the allowOther wire form).\n    if (\n      enumVariantSets.length > 0 &&\n      anonymousObjects.length === 0 &&\n      memberKinds.length === 0 &&\n      [...scalarTypes].every((s) => s === \"string\")\n    ) {\n      const values = [...new Set(enumVariantSets.flat())];\n      const open = scalarTypes.has(\"string\");\n      return {\n        ...requiredNullableFlags(required, sawNull),\n        type: \"enum\",\n        values,\n        ...(open ? { open: true } : {}),\n      };\n    }\n    if (enumVariantSets.length > 0) {\n      // Option sets mixed with non-string members — not representable as an\n      // enum; widen the enum member to string within the union, loudly.\n      ctx.problems.push({\n        severity: \"warning\",\n        path,\n        message:\n          \"anyOf/oneOf mixes an enum variant with non-string members — enum widened to string within the union.\",\n      });\n      scalarTypes.add(\"string\");\n    }\n\n    // Exactly one anonymous object (+ optional null) — a nullable inline object,\n    // not a union. This is the explicit-nullability fix: the old converter\n    // flattened ANY nullable anyOf to `string`.\n    if (\n      anonymousObjects.length === 1 &&\n      scalarTypes.size === 0 &&\n      memberKinds.length === 0\n    ) {\n      const [sole] = anonymousObjects;\n      const converted = sole\n        ? convertProperty(fieldName, sole, required, path, ctx)\n        : null;\n      if (!converted) return null;\n      return sawNull ? { ...converted, nullable: true } : converted;\n    }\n    if (anonymousObjects.length > 0) {\n      ctx.problems.push({\n        severity: \"error\",\n        path,\n        message:\n          \"anyOf/oneOf mixing anonymous objects with other variants cannot be converted — declare __kind on each object variant.\",\n      });\n      return null;\n    }\n\n    // Single scalar (+ optional null) — the scalar itself, nullability kept.\n    if (scalarTypes.size === 1 && memberKinds.length === 0) {\n      const [scalar] = [...scalarTypes];\n      if (scalar) {\n        return { ...requiredNullableFlags(required, sawNull), type: scalar };\n      }\n    }\n\n    if (scalarTypes.size > 0 || memberKinds.length > 0) {\n      ctx.problems.push({\n        severity: \"warning\",\n        path,\n        message: `Converted anyOf/oneOf to union of: ${[\n          ...scalarTypes,\n          ...memberKinds,\n        ].join(\", \")}.`,\n      });\n      return {\n        ...requiredNullableFlags(required, sawNull),\n        type: \"union\",\n        scalars: [...scalarTypes],\n        ...(memberKinds.length > 0 ? { kinds: memberKinds } : {}),\n      };\n    }\n\n    // Nothing but null variants — degrade to json-any (null is a member),\n    // loudly.\n    ctx.problems.push({\n      severity: \"warning\",\n      path,\n      message: \"anyOf/oneOf carried only null variants — widened to json (any value).\",\n    });\n    return { ...requiredNullableFlags(required), type: \"json\" };\n  }\n\n  if (Array.isArray(node.allOf)) {\n    ctx.problems.push({\n      severity: \"warning\",\n      path,\n      message: \"allOf merged using first object branch only.\",\n    });\n    const objectBranch = (node.allOf as JsonSchemaNode[]).find(\n      (b) => b.properties,\n    );\n    if (objectBranch) {\n      return convertProperty(fieldName, objectBranch, required, path, ctx);\n    }\n  }\n\n  // Typeless schema = \"any JSON value\" in JSON Schema semantics (pydantic\n  // bare `Any`, `{}`). This is the declared contract, not a fallback.\n  if (isAnyValueSchema(node)) {\n    ctx.problems.push({\n      severity: \"info\",\n      path,\n      message: `Typeless schema at \"${path || \"(root)\"}\" — any JSON value (json).`,\n    });\n    return { ...requiredNullableFlags(required), type: \"json\" };\n  }\n\n  const { type, nullable, members } = resolvePrimaryType(node);\n\n  // 🚨 A MULTI-TYPE UNION IS NOT ITS FIRST MEMBER. `type: [\"string\",\"number\",\n  // \"boolean\",\"object\",\"array\",\"null\"]` — pydantic's `Any`, and the single\n  // commonest shape in user-authored kinds — used to convert to plain\n  // `string`, silently discarding five of six members. The narrowing is\n  // invisible AND actively harmful: the field then REJECTS every value that\n  // isn't a string, turning a valid payload into a schema violation, which\n  // the render route is right to refuse a component. Express what the schema\n  // actually says instead.\n  if (members.length > 1) {\n    const objectish = members.some((m) => m === \"object\" || m === \"array\");\n    if (objectish) {\n      // Spans structure and scalars: the only faithful vocabulary is \"any\n      // JSON value\". `json` is implicitly nullable, so the flag is dropped.\n      ctx.problems.push({\n        severity: \"info\",\n        path,\n        message: `Union of [${members.join(\", \")}] at \"${path || \"(root)\"}\" spans objects/arrays — carried as any JSON value (json).`,\n      });\n      return { ...requiredNullableFlags(required), type: \"json\" };\n    }\n    const scalars = members.filter(\n      (m): m is \"string\" | \"number\" | \"boolean\" =>\n        m === \"string\" || m === \"number\" || m === \"boolean\",\n    );\n    if (scalars.length === members.length && scalars.length > 1) {\n      return {\n        ...requiredNullableFlags(required, nullable),\n        type: \"union\",\n        scalars,\n      };\n    }\n    // A member the vocabulary cannot name (e.g. an exotic type keyword): stay\n    // permissive rather than narrowing to whichever member happened to be\n    // first. Loud, because a silent widen is still a surprise.\n    ctx.problems.push({\n      severity: \"warning\",\n      path,\n      message: `Union of [${members.join(\", \")}] at \"${path || \"(root)\"}\" has no exact field type — carried as any JSON value (json) rather than narrowed to \"${type}\".`,\n    });\n    return { ...requiredNullableFlags(required), type: \"json\" };\n  }\n\n  if (type === \"string\") {\n    if (Array.isArray(node.enum)) {\n      const values = node.enum.filter(\n        (v): v is string => typeof v === \"string\",\n      );\n      if (values.length !== node.enum.length) {\n        ctx.problems.push({\n          severity: \"warning\",\n          path,\n          message: \"Enum contains non-string values; non-strings dropped.\",\n        });\n      }\n      return {\n        ...requiredNullableFlags(required, nullable),\n        type: \"enum\",\n        values,\n      };\n    }\n    return {\n      ...requiredNullableFlags(required, nullable),\n      type: \"string\",\n    };\n  }\n\n  if (type === \"number\") {\n    return {\n      ...requiredNullableFlags(required, nullable),\n      type: \"number\",\n    };\n  }\n\n  if (type === \"boolean\") {\n    return {\n      ...requiredNullableFlags(required, nullable),\n      type: \"boolean\",\n    };\n  }\n\n  if (type === \"array\") {\n    const items = node.items;\n    if (!items) {\n      ctx.problems.push({\n        severity: \"error\",\n        path,\n        message: \"Array field is missing items schema.\",\n      });\n      return null;\n    }\n\n    const itemNode = Array.isArray(items) ? items[0] : items;\n    if (!isRecord(itemNode)) {\n      ctx.problems.push({\n        severity: \"error\",\n        path,\n        message: \"Array items schema must be an object.\",\n      });\n      return null;\n    }\n\n    // items: {$ref} — the externalized child-kind form `kindSchemaToJsonSchema`\n    // emits for `{type:\"array\", itemKinds:[K]}`. Without this every list-of-\n    // children field (sections, slides, nodes, questions, segments …) vanished\n    // from the derived schema.\n    if (typeof itemNode.$ref === \"string\") {\n      const resolvedItem = resolveRef(itemNode.$ref, ctx);\n      if (!resolvedItem) {\n        ctx.problems.push({\n          severity: \"error\",\n          path: `${path}[]`,\n          message: `Unresolvable $ref in array items (\"${itemNode.$ref}\").`,\n        });\n        return null;\n      }\n      refToObjectField(resolvedItem, `${path}[]`, ctx);\n      ctx.arrayBindings.push({\n        arrayField: fieldName,\n        itemKindSlug: resolvedItem.slug,\n      });\n      return {\n        ...requiredNullableFlags(required, nullable),\n        type: \"array\",\n        itemKinds: [resolvedItem.slug],\n      };\n    }\n\n    // items: {} — an array of ANY JSON values (pydantic list[Any]).\n    if (isAnyValueSchema(itemNode)) {\n      return {\n        ...requiredNullableFlags(required, nullable),\n        type: \"json[]\",\n      };\n    }\n\n    // items: {anyOf: [...]} — every variant must DECLARE its kind; the array\n    // becomes a multi-itemKind ref array (union items), each member drafted.\n    const itemVariants = Array.isArray(itemNode.anyOf)\n      ? (itemNode.anyOf as JsonSchemaNode[])\n      : Array.isArray(itemNode.oneOf)\n        ? (itemNode.oneOf as JsonSchemaNode[])\n        : null;\n    if (itemVariants) {\n      // items: {anyOf: [string-enum, string]} — the OPEN items-enum form\n      // (multi-select option set with allowOther). All-scalar-string variants\n      // with at least one enum read back as string[] + values (+ open when a\n      // plain string variant widens the set).\n      const itemEnumSets: string[][] = [];\n      let itemPlainString = false;\n      let itemsAllString = true;\n      for (const variant of itemVariants) {\n        if (!isRecord(variant) || resolvePrimaryType(variant).type !== \"string\") {\n          itemsAllString = false;\n          break;\n        }\n        if (Array.isArray(variant.enum)) {\n          itemEnumSets.push(\n            variant.enum.filter((v): v is string => typeof v === \"string\"),\n          );\n        } else {\n          itemPlainString = true;\n        }\n      }\n      if (itemsAllString && itemEnumSets.length > 0) {\n        return {\n          ...requiredNullableFlags(required, nullable),\n          type: \"string[]\",\n          values: [...new Set(itemEnumSets.flat())],\n          ...(itemPlainString ? { open: true } : {}),\n        };\n      }\n\n      const itemKinds: string[] = [];\n      for (const variant of itemVariants) {\n        // items: {anyOf: [{$ref}, {$ref}, …]} — the MULTI-kind array in its\n        // externalized form. `flashcard_set.cards` is exactly this, and it was\n        // the last field in the live corpus that a schema-derived KindSchema\n        // still could not see.\n        if (isRecord(variant) && typeof variant.$ref === \"string\") {\n          const resolvedVariant = resolveRef(variant.$ref, ctx);\n          if (!resolvedVariant) {\n            ctx.problems.push({\n              severity: \"error\",\n              path: `${path}[]`,\n              message: `Unresolvable $ref in array items anyOf (\"${variant.$ref}\").`,\n            });\n            return null;\n          }\n          itemKinds.push(resolvedVariant.slug);\n          refToObjectField(resolvedVariant, `${path}[]<${resolvedVariant.slug}>`, ctx);\n          ctx.arrayBindings.push({\n            arrayField: fieldName,\n            itemKindSlug: resolvedVariant.slug,\n          });\n          continue;\n        }\n        if (!isRecord(variant) || !isRecord(variant.properties)) {\n          ctx.problems.push({\n            severity: \"error\",\n            path: `${path}[]`,\n            message:\n              \"Array items anyOf/oneOf variants must be inline objects declaring __kind, or $refs to defs.\",\n          });\n          return null;\n        }\n        const declared = readBlockKindFromProperties(variant.properties);\n        if (!declared) {\n          ctx.problems.push({\n            severity: \"error\",\n            path: `${path}[]`,\n            message:\n              \"Array items anyOf/oneOf variant is missing a __kind const/enum declaration.\",\n          });\n          return null;\n        }\n        itemKinds.push(declared);\n        registerDeclaredKindDraft(declared, variant, `${path}[]<${declared}>`, ctx);\n        ctx.arrayBindings.push({ arrayField: fieldName, itemKindSlug: declared });\n      }\n      return {\n        ...requiredNullableFlags(required, nullable),\n        type: \"array\",\n        itemKinds,\n      };\n    }\n\n    const itemType = resolvePrimaryType(itemNode).type;\n\n    if (itemType === \"string\") {\n      // items: {type:\"string\", enum:[...]} — the CLOSED items-enum form.\n      if (Array.isArray(itemNode.enum)) {\n        return {\n          ...requiredNullableFlags(required, nullable),\n          type: \"string[]\",\n          values: itemNode.enum.filter(\n            (v): v is string => typeof v === \"string\",\n          ),\n        };\n      }\n      return {\n        ...requiredNullableFlags(required, nullable),\n        type: \"string[]\",\n      };\n    }\n    if (itemType === \"number\") {\n      return {\n        ...requiredNullableFlags(required, nullable),\n        type: \"number[]\",\n      };\n    }\n    if (itemType === \"boolean\") {\n      return {\n        ...requiredNullableFlags(required, nullable),\n        type: \"boolean[]\",\n      };\n    }\n\n    if (itemType === \"object\" && isRecord(itemNode.properties)) {\n      // Items that carry a `__kind` const/enum DECLARE their kind — that\n      // declared kind is the only item kind there is. Items that declare none\n      // are plain JSON objects: a kind is never named for them from the\n      // schema's name and the field's name (content-ir rule 28, NO FAKE\n      // KINDS — Arman, 2026-10-25). To type them, design an item kind and\n      // declare it on the items.\n      const declaredItemKind = readBlockKindFromProperties(itemNode.properties);\n      if (!declaredItemKind) {\n        ctx.problems.push({\n          severity: \"warning\",\n          path: `${path}[]`,\n          message: `Array \"${fieldName}\" holds objects with no declared kind — kept as JSON. To type its items, design an item kind and declare it on the items.`,\n        });\n        return {\n          ...requiredNullableFlags(required, nullable),\n          type: \"json[]\",\n        };\n      }\n      const itemKindSlug = declaredItemKind;\n      const itemRequired = new Set(\n        Array.isArray(itemNode.required)\n          ? itemNode.required.filter((k): k is string => typeof k === \"string\")\n          : [],\n      );\n      const itemFields: Record<string, FieldSchema> = {};\n\n      for (const [propName, propNode] of Object.entries(itemNode.properties)) {\n        if (!isRecord(propNode)) continue;\n        if (propName === KIND_KEY) continue;\n        itemFields[propName] = convertFieldOrWiden(\n          propName,\n          propNode,\n          itemRequired.has(propName),\n          `${path}[].${propName}`,\n          ctx,\n        );\n      }\n\n      ctx.arrayBindings.push({\n        arrayField: fieldName,\n        itemKindSlug,\n      });\n\n      // Two arrays may declare the SAME item kind — one draft per slug.\n      if (!ctx.blockSchemas.some((draft) => draft.slug === itemKindSlug)) {\n        ctx.blockSchemas.push({\n          slug: itemKindSlug,\n          label: formatBlockLabel(itemKindSlug),\n          fields: itemFields,\n        });\n      }\n\n      return {\n        ...requiredNullableFlags(required, nullable),\n        type: \"array\",\n        itemKinds: [itemKindSlug],\n      };\n    }\n\n    ctx.problems.push({\n      severity: \"error\",\n      path,\n      message: `Unsupported array items type \"${itemType ?? \"unknown\"}\".`,\n    });\n    return null;\n  }\n\n  if (type === \"object\") {\n    const ap = node.additionalProperties;\n    const apIsOpen = ap === true || (isRecord(ap) && isAnyValueSchema(ap));\n\n    if (isRecord(node.properties)) {\n      const nestedRequired = new Set(\n        Array.isArray(node.required)\n          ? node.required.filter((k): k is string => typeof k === \"string\")\n          : [],\n      );\n      const nestedFields: Record<string, FieldSchema> = {};\n\n      for (const [propName, propNode] of Object.entries(node.properties)) {\n        if (!isRecord(propNode)) continue;\n        if (propName === KIND_KEY) continue;\n        nestedFields[propName] = convertFieldOrWiden(\n          propName,\n          propNode,\n          nestedRequired.has(propName),\n          `${path}.${propName}`,\n          ctx,\n        );\n      }\n\n      const referencedKind = readBlockKindFromProperties(node.properties);\n\n      if (referencedKind) {\n        // 🚨 REGISTER THE CHILD'S OWN SCHEMA TOO. Arrays of `__kind` items\n        // have always done this; an object-valued field declaring a `__kind`\n        // returned the ref and dropped the child's fields on the floor. The\n        // parser then had a field predicting `mx_child` with no schema for it,\n        // so the child went unverified — and the PARENT failed validation and\n        // fell to `broken-instance`, losing its component over a child it had\n        // fully described one line up. Caught by the render matrix, 2026-08-29.\n        //\n        // Guarded against a kind that contains itself; `registerDeclaredKindDraft`\n        // is a no-op when the slug is already drafted.\n        if (!ctx.refsInProgress.has(referencedKind)) {\n          ctx.refsInProgress.add(referencedKind);\n          try {\n            registerDeclaredKindDraft(referencedKind, node, path, ctx);\n          } finally {\n            ctx.refsInProgress.delete(referencedKind);\n          }\n        }\n        return {\n          ...requiredNullableFlags(required, nullable),\n          type: \"object\",\n          kind: referencedKind,\n        };\n      }\n\n      // additionalProperties is now HONORED, not dropped metadata:\n      //   true / {}       → open inline_object (the open-empty-object fix)\n      //   typed schema    → not representable beside declared props — widen\n      //                     to open, loudly\n      //   false / absent  → closed (record the explicit false as dropped —\n      //                     closed is our default reading either way)\n      // …EXCEPT when the only declared property was `__kind`. Then nothing is\n      // \"alongside\" the additionalProperties at all: the object is a RECORD\n      // that also names its kind, which is exactly what the forward converter\n      // emits for `{type:\"record\", values:\"string\"}`. Reading it as an open\n      // inline_object loses the value type (presentation_slide.extra, the last\n      // type divergence in the live corpus on 2026-08-29).\n      if (\n        Object.keys(nestedFields).length === 0 &&\n        !apIsOpen &&\n        isRecord(ap) &&\n        KIND_KEY in node.properties\n      ) {\n        const apType = resolvePrimaryType(ap).type;\n        return {\n          ...requiredNullableFlags(required, nullable),\n          type: \"record\",\n          values:\n            apType === \"string\" || apType === \"number\" || apType === \"boolean\"\n              ? apType\n              : \"json\",\n        };\n      }\n\n      let open = apIsOpen;\n      if (!apIsOpen && isRecord(ap)) {\n        ctx.problems.push({\n          severity: \"warning\",\n          path,\n          message:\n            \"Typed additionalProperties alongside declared properties is not representable — treated as an OPEN object (extra values unconstrained).\",\n        });\n        open = true;\n      } else if (ap === false) {\n        ctx.droppedMetadata.push({\n          path,\n          dropped: { additionalProperties: false },\n        });\n      }\n\n      return {\n        ...requiredNullableFlags(required, nullable),\n        type: \"inline_object\",\n        fields: nestedFields,\n        ...(open ? { open: true } : {}),\n      };\n    }\n\n    // Properties-less object shapes → record family.\n    if (apIsOpen || ap === undefined) {\n      if (ap === undefined) {\n        ctx.problems.push({\n          severity: \"info\",\n          path,\n          message: `Bare object schema at \"${path || \"(root)\"}\" — record of any JSON values.`,\n        });\n      }\n      return {\n        ...requiredNullableFlags(required, nullable),\n        type: \"record\",\n        values: \"json\",\n      };\n    }\n    if (isRecord(ap)) {\n      const apType = resolvePrimaryType(ap).type;\n      if (apType === \"string\" || apType === \"number\" || apType === \"boolean\") {\n        return {\n          ...requiredNullableFlags(required, nullable),\n          type: \"record\",\n          values: apType,\n        };\n      }\n      ctx.problems.push({\n        severity: \"warning\",\n        path,\n        message: `Record value schema at \"${path}\" is not scalar — widened to record of any JSON values.`,\n      });\n      return {\n        ...requiredNullableFlags(required, nullable),\n        type: \"record\",\n        values: \"json\",\n      };\n    }\n    // additionalProperties: false with no properties — the closed empty object.\n    return {\n      ...requiredNullableFlags(required, nullable),\n      type: \"inline_object\",\n      fields: {},\n    };\n  }\n\n  ctx.problems.push({\n    severity: \"error\",\n    path,\n    message: `Unsupported or missing JSON Schema type at \"${path}\".`,\n  });\n  return null;\n}\n\nfunction propNameIsBlockKind(properties: Record<string, unknown>): boolean {\n  return KIND_KEY in properties;\n}\n\nfunction readBlockKindFromProperties(\n  properties: Record<string, unknown>,\n): string | null {\n  const kindProp = properties[KIND_KEY];\n  if (!isRecord(kindProp)) return null;\n  if (typeof kindProp.const === \"string\") return kindProp.const;\n  if (Array.isArray(kindProp.enum) && typeof kindProp.enum[0] === \"string\") {\n    return kindProp.enum[0];\n  }\n  return null;\n}\n\nexport function normalizeAiSchemaInput(input: unknown): {\n  name: string | null;\n  strict: boolean | null;\n  rootSchema: JsonSchemaNode | null;\n  parseErrors: string[];\n} {\n  const parseErrors: string[] = [];\n\n  if (!isRecord(input)) {\n    return {\n      name: null,\n      strict: null,\n      rootSchema: null,\n      parseErrors: [\"Input must be a JSON object.\"],\n    };\n  }\n\n  if (isRecord(input.json_schema)) {\n    return normalizeAiSchemaInput(input.json_schema);\n  }\n\n  if (isRecord(input.schema) && typeof input.name === \"string\") {\n    return {\n      name: input.name,\n      strict: typeof input.strict === \"boolean\" ? input.strict : null,\n      rootSchema: input.schema,\n      parseErrors: [],\n    };\n  }\n\n  // Any typed root — object, scalar, or array (root-form kinds). A fully\n  // empty `{}` root is only accepted through the named wrapper forms above\n  // (it is indistinguishable from a non-schema object here).\n  if (\n    typeof input.type === \"string\" ||\n    Array.isArray(input.type) ||\n    input.properties ||\n    input.items\n  ) {\n    const name =\n      typeof input.name === \"string\"\n        ? input.name\n        : typeof input.title === \"string\"\n          ? input.title\n          : null;\n    return {\n      name,\n      strict: typeof input.strict === \"boolean\" ? input.strict : null,\n      rootSchema: input,\n      parseErrors: [],\n    };\n  }\n\n  parseErrors.push(\n    \"Expected OpenAI output_schema shape { name, schema } or a root JSON Schema object.\",\n  );\n  return { name: null, strict: null, rootSchema: null, parseErrors };\n}\n\ntype ConversionCore = {\n  schemaName: string | null;\n  strict: boolean | null;\n  blockSchemas: BlockSchemaDraft[];\n  problems: ConversionProblem[];\n  droppedMetadata: DroppedMetadata[];\n};\n\nexport function convertAiSchemaToBlockFields(\n  schemaName: string,\n  rootSchema: JsonSchemaNode,\n  strict: boolean,\n): ConversionCore {\n  const rawDefs = isRecord(rootSchema.$defs)\n    ? rootSchema.$defs\n    : isRecord(rootSchema.definitions)\n      ? rootSchema.definitions\n      : {};\n  const defs: Record<string, JsonSchemaNode> = {};\n  for (const [name, node] of Object.entries(rawDefs)) {\n    if (isRecord(node)) defs[name] = node;\n  }\n\n  const ctx: ConvertContext = {\n    schemaName,\n    strict,\n    problems: [],\n    droppedMetadata: [],\n    blockSchemas: [],\n    arrayBindings: [],\n    defs,\n    rootSchema,\n    refsInProgress: new Set<string>(),\n  };\n\n  ctx.droppedMetadata.push(...collectDropped(rootSchema, \"\"));\n\n  const rootAp = rootSchema.additionalProperties;\n  const rootIsOpen =\n    rootAp === true || (isRecord(rootAp) && isAnyValueSchema(rootAp));\n  const properties = rootSchema.properties;\n\n  // NON-OBJECT ROOT FORM: scalars, arrays, json-any, records, and OPEN objects\n  // all convert through convertProperty into a single root FieldSchema\n  // (KindSchema.root). Only a CLOSED object with declared properties takes the\n  // classic field-map path below.\n  if (!isRecord(properties) || rootIsOpen) {\n    const rootField = convertProperty(\"$root\", rootSchema, false, \"$root\", ctx);\n    if (!rootField) {\n      ctx.problems.push({\n        severity: \"error\",\n        path: \"\",\n        message:\n          \"Root schema could not be converted (see problems above) — expected an object with properties, a scalar/array/json root, or an open object.\",\n      });\n      return emptyConversionResult(schemaName, strict, ctx);\n    }\n    ctx.blockSchemas.unshift({\n      slug: schemaName,\n      label: formatBlockLabel(schemaName),\n      fields: {},\n      root: rootField,\n    });\n    return {\n      schemaName,\n      strict,\n      blockSchemas: ctx.blockSchemas,\n      problems: ctx.problems,\n      droppedMetadata: ctx.droppedMetadata,\n    };\n  }\n\n  const required = new Set(\n    Array.isArray(rootSchema.required)\n      ? rootSchema.required.filter((k): k is string => typeof k === \"string\")\n      : [],\n  );\n\n  const convertedFields: Record<string, FieldSchema> = {};\n\n  for (const [fieldName, fieldNode] of Object.entries(properties)) {\n    if (!isRecord(fieldNode)) continue;\n    if (fieldName === KIND_KEY) continue;\n    convertedFields[fieldName] = convertFieldOrWiden(\n      fieldName,\n      fieldNode,\n      required.has(fieldName),\n      fieldName,\n      ctx,\n    );\n  }\n\n  const rootHasKind = propNameIsBlockKind(properties) || required.has(KIND_KEY);\n\n  if (!rootHasKind) {\n    ctx.problems.push({\n      severity: \"warning\",\n      path: \"\",\n      message: `Root object needs __kind:\"${schemaName}\" at runtime (OPTION 1: server injects, OPTION 2: use agent schema with __kind).`,\n    });\n  }\n\n  const rootDraft: BlockSchemaDraft = {\n    slug: schemaName,\n    label: formatBlockLabel(schemaName),\n    fields: convertedFields,\n  };\n\n  ctx.blockSchemas.unshift(rootDraft);\n\n  if (typeof rootSchema.additionalProperties === \"boolean\") {\n    ctx.droppedMetadata.push({\n      path: \"\",\n      dropped: { additionalProperties: rootSchema.additionalProperties },\n    });\n  }\n\n  if (strict) {\n    ctx.droppedMetadata.push({\n      path: \"\",\n      dropped: { strict },\n    });\n  }\n\n  return {\n    schemaName,\n    strict,\n    blockSchemas: ctx.blockSchemas,\n    problems: ctx.problems,\n    droppedMetadata: ctx.droppedMetadata,\n  };\n}\n\nfunction emptyConversionResult(\n  schemaName: string,\n  strict: boolean,\n  ctx: Pick<ConvertContext, \"problems\" | \"droppedMetadata\" | \"blockSchemas\">,\n): ConversionCore {\n  return {\n    schemaName,\n    strict,\n    blockSchemas: ctx.blockSchemas,\n    problems: ctx.problems,\n    droppedMetadata: ctx.droppedMetadata,\n  };\n}\n\nfunction compareFieldSchemas(\n  aiField: FieldSchema | undefined,\n  blockField: FieldSchema | undefined,\n  fieldName: string,\n): FieldComparison {\n  const aiPresent = aiField !== undefined;\n  const blockPresent = blockField !== undefined;\n  const aiSummary = aiField ? fieldSchemaSummary(aiField) : null;\n  const blockSummary = blockField ? fieldSchemaSummary(blockField) : null;\n\n  if (aiPresent && blockPresent) {\n    if (aiSummary === blockSummary) {\n      return {\n        field: fieldName,\n        aiPresent,\n        blockPresent,\n        aiSummary,\n        blockSummary,\n        status: \"match\",\n      };\n    }\n\n    const aiRicher =\n      (aiField?.type === \"enum\" && blockField?.type === \"string\") ||\n      (aiField?.type === \"inline_object\" &&\n        blockField?.type !== \"inline_object\");\n\n    const blockRicher =\n      (blockField?.type === \"enum\" && aiField?.type === \"string\") ||\n      (blockField?.required && !aiField?.required);\n\n    return {\n      field: fieldName,\n      aiPresent,\n      blockPresent,\n      aiSummary,\n      blockSummary,\n      status: aiRicher\n        ? \"ai_richer\"\n        : blockRicher\n          ? \"block_richer\"\n          : \"type_mismatch\",\n      ...(aiSummary !== blockSummary && {\n        detail: `${aiSummary} vs ${blockSummary}`,\n      }),\n    };\n  }\n\n  if (aiPresent) {\n    return {\n      field: fieldName,\n      aiPresent,\n      blockPresent,\n      aiSummary,\n      blockSummary,\n      status: \"ai_only\",\n    };\n  }\n\n  return {\n    field: fieldName,\n    aiPresent,\n    blockPresent,\n    aiSummary,\n    blockSummary,\n    status: \"block_only\",\n  };\n}\n\nexport function compareWithExistingKindSchema(\n  convertedFields: Record<string, FieldSchema>,\n  existing: KindSchema | null,\n): FieldComparison[] {\n  if (!existing) return [];\n\n  const allFields = new Set([\n    ...Object.keys(convertedFields),\n    ...Object.keys(existing.fields),\n  ]);\n\n  return [...allFields]\n    .sort()\n    .map((field) =>\n      compareFieldSchemas(\n        convertedFields[field],\n        existing.fields[field],\n        field,\n      ),\n    );\n}\n\nexport function runSchemaConversion(\n  input: unknown,\n  existingSchemas: Record<string, KindSchema>,\n): SchemaConversionResult & { parseErrors: string[] } {\n  const normalized = normalizeAiSchemaInput(input);\n  if (!normalized.rootSchema || !normalized.name) {\n    return {\n      schemaName: normalized.name,\n      strict: normalized.strict,\n      blockSchemas: [],\n      agentSchemaWithKinds: null,\n      problems: [],\n      droppedMetadata: [],\n      comparisons: [],\n      parseErrors: normalized.parseErrors.length\n        ? normalized.parseErrors\n        : [\"Schema name and root schema are required.\"],\n    };\n  }\n\n  const strict = normalized.strict ?? false;\n  const core = convertAiSchemaToBlockFields(\n    normalized.name,\n    normalized.rootSchema,\n    strict,\n  );\n\n  const existing = existingSchemas[normalized.name] ?? null;\n  const rootDraft = core.blockSchemas[0];\n  const comparisons = rootDraft\n    ? compareWithExistingKindSchema(rootDraft.fields, existing)\n    : [];\n\n  const problems = [...core.problems];\n  if (!existing) {\n    problems.push({\n      severity: \"info\",\n      path: \"\",\n      message: `No existing block schema with slug \"${normalized.name}\".`,\n    });\n  }\n\n  const agentSchemaWithKinds = buildAgentSchemaWithRenderBlockSupport(\n    input,\n    normalized.name,\n    collectArrayBindingsFromDrafts(core.blockSchemas, normalized.name),\n    strict,\n  );\n\n  return {\n    ...core,\n    agentSchemaWithKinds,\n    comparisons,\n    problems,\n    parseErrors: [],\n  };\n}\n\nfunction collectArrayBindingsFromDrafts(\n  drafts: BlockSchemaDraft[],\n  rootSlug: string,\n): ArrayItemKindBinding[] {\n  const root = drafts.find((d) => d.slug === rootSlug);\n  if (!root) return [];\n\n  const bindings: ArrayItemKindBinding[] = [];\n  for (const [fieldName, field] of Object.entries(root.fields)) {\n    if (field.type !== \"array\") continue;\n    for (const itemKind of field.itemKinds) {\n      bindings.push({ arrayField: fieldName, itemKindSlug: itemKind });\n    }\n  }\n  return bindings;\n}\n\nexport function validateBlockSchemaSavePlan(\n  blockSchemas: BlockSchemaDraft[],\n  existingSlugs: string[],\n  hasConversionErrors: boolean,\n): SavePlanValidation {\n  const errors: string[] = [];\n  const normalizedExisting = new Set(\n    existingSlugs.map((s) => s.trim().toLowerCase()),\n  );\n  const batchSlugs = new Set<string>();\n  const itemKindRefs: ItemKindRefCheck[] = [];\n\n  for (const draft of blockSchemas) {\n    const slug = draft.slug.trim();\n    const normalized = slug.toLowerCase();\n\n    if (!slug) {\n      errors.push(\"Every block schema must have a non-empty slug.\");\n      continue;\n    }\n\n    if (batchSlugs.has(normalized)) {\n      errors.push(`Duplicate slug in conversion batch: \"${slug}\".`);\n    }\n    batchSlugs.add(normalized);\n  }\n\n  const entries: SavePlanEntry[] = blockSchemas.map((draft) => {\n    const existsInDb = normalizedExisting.has(draft.slug.trim().toLowerCase());\n    return {\n      draft,\n      existsInDb,\n      willSave: !existsInDb,\n    };\n  });\n\n  for (const draft of blockSchemas) {\n    for (const [fieldName, field] of Object.entries(draft.fields)) {\n      if (field.type !== \"array\") continue;\n      for (const itemKind of field.itemKinds) {\n        const inBatch = batchSlugs.has(itemKind.trim().toLowerCase());\n        const inDb = normalizedExisting.has(itemKind.trim().toLowerCase());\n        const satisfied = inBatch || inDb;\n        itemKindRefs.push({\n          parentSlug: draft.slug,\n          field: fieldName,\n          itemKind,\n          satisfied,\n          source: inBatch ? \"batch\" : inDb ? \"database\" : \"missing\",\n        });\n        if (!satisfied) {\n          errors.push(\n            `\"${draft.slug}\".${fieldName} references itemKind \"${itemKind}\" — not in this batch and not in DB.`,\n          );\n        }\n      }\n    }\n  }\n\n  const newCount = entries.filter((e) => e.willSave).length;\n\n  if (newCount === 0 && blockSchemas.length > 0) {\n    errors.push(\"All block schema slugs already exist in the database.\");\n  }\n\n  if (hasConversionErrors) {\n    errors.push(\"Resolve conversion errors before saving.\");\n  }\n\n  return {\n    entries,\n    itemKindRefs,\n    newCount,\n    canSave: errors.length === 0 && newCount > 0,\n    errors,\n  };\n}\n\nexport function fieldsToDbPayload(\n  fields: Record<string, FieldSchema>,\n): Record<string, unknown> {\n  return JSON.parse(JSON.stringify(fields)) as Record<string, unknown>;\n}\n\nexport function isDuplicateBlockSlug(\n  slug: string,\n  entries: Array<{ slug: string }>,\n): boolean {\n  const normalized = slug.trim().toLowerCase();\n  return entries.some((e) => e.slug.trim().toLowerCase() === normalized);\n}\n","/**\n * KindSchema → provider-ready JSON Schema — the REVERSE of the OpenAI\n * converter in openai-schema-converter.ts.\n *\n * The requested root kind renders INLINE as the top-level object; every\n * OTHER kind it transitively references (via `{type:\"object\", kind}` and\n * `{type:\"array\", itemKinds}` fields, including inside inline_objects)\n * becomes a `$defs` entry referenced with `$ref: \"#/$defs/<slug>\"`.\n * References back to the ROOT kind use `\"#\"` — the standard JSON Schema\n * recursive-root reference (OpenAI structured outputs support both forms).\n * Collection is cycle-safe: each kind enters the closure exactly once.\n *\n * Round-trip contract — output fed through `runSchemaConversion`\n * (openai-schema-converter.ts) reproduces the source KindSchemas for the\n * root and every array-item child (enforced by\n * __tests__/kind-to-json-schema.test.ts). The 2026-07-15 expressivity\n * extension closed the three historical asymmetries: `record` now has a\n * forward target (properties-less objects → record scalar/json), multi-\n * itemKind arrays read back through items-anyOf when each variant declares\n * its `__kind`, and nullable anyOf preserves the member list + nullable flag\n * instead of flattening to `string`. Remaining accepted narrowings:\n * - multi-kind array items emitted as $refs (not inline __kind objects)\n *   still cannot be read back — the forward converter rejects $ref.\n * - a nullable object-REF (`anyOf: [$ref, {type:\"null\"}]`) degrades for the\n *   same $ref reason.\n * - JSON Schema `integer` narrows to `number` (the map_result precedent).\n */\n\nimport {\n  scalarArrayItemType,\n  type FieldSchema,\n  type KindSchema,\n} from \"../core/kind-schema.types\";\nimport {\n  injectKindIntoObjectSchema,\n  type JsonSchemaNode,\n} from \"./openai-schema-converter\";\n\nexport type KindJsonSchemaOptions = {\n  /**\n   * Provider strict mode: additionalProperties:false on every kind object\n   * and inline object, and `const` (vs `enum`) __kind discriminators —\n   * mirrors makeKindJsonSchemaProperty / injectKindIntoObjectSchema.\n   */\n  strict?: boolean;\n  /**\n   * Inject the `__kind` discriminator (+ required) into the root and every\n   * $defs kind object. Default true — this is what makes the emitted\n   * objects self-identifying for the render pipeline.\n   */\n  injectKind?: boolean;\n};\n\nexport type KindJsonSchemaExport = {\n  /** The root kind slug — doubles as the provider schema name. */\n  name: string;\n  schema: JsonSchemaNode;\n  strict: boolean;\n  /**\n   * Referenced kinds the resolver could not supply. Each still gets a\n   * permissive `$defs` object stub (never additionalProperties:false, even\n   * in strict mode — a __kind-only strict object would reject every real\n   * payload) so the export stays structurally valid. Surface these loudly.\n   */\n  unresolved: string[];\n};\n\n/**\n * Every kind referenced by a field map — `{type:\"object\", kind}` refs and\n * `{type:\"array\", itemKinds}` members, recursing through inline_objects.\n * First-sighting order, deduplicated. Shared read helper (the registry\n * catalog builds its uses / used-by graph from this).\n */\nexport function collectReferencedKinds(\n  fields: Record<string, FieldSchema>,\n): string[] {\n  const out: string[] = [];\n  const seen = new Set<string>();\n  const add = (kind: string): void => {\n    if (!seen.has(kind)) {\n      seen.add(kind);\n      out.push(kind);\n    }\n  };\n  const visit = (field: FieldSchema): void => {\n    if (field.type === \"object\") {\n      add(field.kind);\n    } else if (field.type === \"array\") {\n      field.itemKinds.forEach(add);\n    } else if (field.type === \"union\") {\n      (field.kinds ?? []).forEach(add);\n    } else if (field.type === \"inline_object\") {\n      Object.values(field.fields).forEach(visit);\n    }\n  };\n  Object.values(fields).forEach(visit);\n  return out;\n}\n\n/**\n * Schema-level referenced kinds — field-map refs PLUS the refs a non-object\n * root form carries. Use this (not `collectReferencedKinds(schema.fields)`)\n * whenever the schema in hand may be root-form.\n */\nexport function collectSchemaReferencedKinds(schema: KindSchema): string[] {\n  if (!schema.root) return collectReferencedKinds(schema.fields);\n  return collectReferencedKinds({ [ROOT_REF_FIELD]: schema.root });\n}\n\n/** Synthetic field key used only to reuse the field-walker for root forms. */\nconst ROOT_REF_FIELD = \"__root\";\n\nexport function kindSchemaToJsonSchema(\n  kind: string,\n  resolve: (kind: string) => KindSchema | undefined,\n  options: KindJsonSchemaOptions = {},\n): KindJsonSchemaExport | null {\n  const strict = options.strict ?? false;\n  const injectKind = options.injectKind ?? true;\n\n  const rootSchema = resolve(kind);\n  if (!rootSchema) return null;\n\n  // Transitive closure — BFS from the root, cycle-safe via `visited`.\n  const visited = new Set<string>([kind]);\n  const defsOrder: string[] = [];\n  const resolvedDefs = new Map<string, KindSchema>();\n  const unresolved: string[] = [];\n  const queue = collectSchemaReferencedKinds(rootSchema);\n  while (queue.length > 0) {\n    const next = queue.shift() as string;\n    if (visited.has(next)) continue;\n    visited.add(next);\n    defsOrder.push(next);\n    const schema = resolve(next);\n    if (!schema) {\n      unresolved.push(next);\n      continue;\n    }\n    resolvedDefs.set(next, schema);\n    queue.push(...collectSchemaReferencedKinds(schema));\n  }\n\n  const refFor = (slug: string): JsonSchemaNode =>\n    slug === kind ? { $ref: \"#\" } : { $ref: `#/$defs/${slug}` };\n\n  const withNull = (type: string, nullable: boolean | undefined) =>\n    nullable ? [type, \"null\"] : type;\n\n  /**\n   * Annotation carry: description / default emit beside the structural\n   * schema (input-semantics extension, W3-A). Applied to every field node —\n   * including anyOf wrappers (open enums), where they belong on the OUTER\n   * node so the forward converter reads them back symmetrically.\n   */\n  function fieldToJsonSchema(field: FieldSchema): JsonSchemaNode {\n    const node = fieldToJsonSchemaCore(field);\n    if (field.description !== undefined) node.description = field.description;\n    if (field.default !== undefined) node.default = field.default;\n    return node;\n  }\n\n  function fieldToJsonSchemaCore(field: FieldSchema): JsonSchemaNode {\n    switch (field.type) {\n      case \"string\":\n      case \"boolean\":\n        return { type: withNull(field.type, field.nullable) };\n\n      case \"number\":\n        // Numeric bounds are OpenAI-strict-unsupported (minimum / maximum /\n        // multipleOf) — the aidream twin strips exactly these on its OpenAI\n        // paths (matrx_ai tools/models.py strip_openai_unsupported), so the\n        // strict export must not emit them either (2026-07-15 review F1).\n        // Non-strict exports keep them: they are honest JSON Schema.\n        return {\n          type: withNull(\"number\", field.nullable),\n          ...(!strict && field.min !== undefined ? { minimum: field.min } : {}),\n          ...(!strict && field.max !== undefined ? { maximum: field.max } : {}),\n          ...(!strict && field.step !== undefined\n            ? { multipleOf: field.step }\n            : {}),\n        };\n\n      case \"json\":\n        // Any JSON value — the empty schema. (Nullable is inherent: null IS\n        // a JSON value.)\n        return {};\n\n      case \"string[]\": {\n        // Items-enum (checkbox option sets): closed → items string enum;\n        // open → items anyOf [enum, string] (the set survives as guidance).\n        const items: JsonSchemaNode =\n          field.values === undefined\n            ? { type: \"string\" }\n            : field.open\n              ? {\n                  anyOf: [\n                    { type: \"string\", enum: [...field.values] },\n                    { type: \"string\" },\n                  ],\n                }\n              : { type: \"string\", enum: [...field.values] };\n        return { type: withNull(\"array\", field.nullable), items };\n      }\n\n      case \"number[]\":\n      case \"boolean[]\":\n        return {\n          type: withNull(\"array\", field.nullable),\n          items: { type: scalarArrayItemType(field.type) },\n        };\n\n      case \"json[]\":\n        return {\n          type: withNull(\"array\", field.nullable),\n          items: {},\n        };\n\n      case \"enum\": {\n        if (!field.open) {\n          return {\n            type: withNull(\"string\", field.nullable),\n            enum: [...field.values],\n          };\n        }\n        // OPEN enum — \"these options OR any string\". anyOf keeps the option\n        // set intact for providers instead of widening to a bare string.\n        const variants: JsonSchemaNode[] = [\n          { type: \"string\", enum: [...field.values] },\n          { type: \"string\" },\n        ];\n        if (field.nullable) variants.push({ type: \"null\" });\n        return { anyOf: variants };\n      }\n\n      case \"union\": {\n        const variants: JsonSchemaNode[] = field.scalars.map((scalar) => ({\n          type: scalar,\n        }));\n        for (const memberKind of field.kinds ?? []) {\n          variants.push(refFor(memberKind));\n        }\n        if (field.nullable) variants.push({ type: \"null\" });\n        return { anyOf: variants };\n      }\n\n      case \"record\":\n        return {\n          type: withNull(\"object\", field.nullable),\n          additionalProperties:\n            field.values === \"json\" ? true : { type: field.values },\n        };\n\n      case \"inline_object\": {\n        const properties: Record<string, unknown> = {};\n        const required: string[] = [];\n        for (const [name, child] of Object.entries(field.fields)) {\n          properties[name] = fieldToJsonSchema(child);\n          if (child.required) required.push(name);\n        }\n        // `open` ALWAYS wins over strict: pinning an open object with\n        // additionalProperties:false is the open-empty-object defect (an open\n        // {} that rejects every real payload).\n        return {\n          type: withNull(\"object\", field.nullable),\n          properties,\n          required,\n          ...(field.open\n            ? { additionalProperties: true }\n            : strict\n              ? { additionalProperties: false }\n              : {}),\n        };\n      }\n\n      case \"object\":\n        return field.nullable\n          ? { anyOf: [refFor(field.kind), { type: \"null\" }] }\n          : refFor(field.kind);\n\n      case \"array\": {\n        const [soleItemKind] = field.itemKinds;\n        const items =\n          field.itemKinds.length === 1 && soleItemKind !== undefined\n            ? refFor(soleItemKind)\n            : { anyOf: field.itemKinds.map(refFor) };\n        return { type: withNull(\"array\", field.nullable), items };\n      }\n    }\n  }\n\n  function kindObjectSchema(schema: KindSchema): JsonSchemaNode {\n    // Root-form kind: the value IS the root field's shape — no __kind\n    // discriminator (a scalar/array/any root cannot carry one).\n    if (schema.root) {\n      return fieldToJsonSchema(schema.root);\n    }\n    const properties: Record<string, unknown> = {};\n    const required: string[] = [];\n    for (const [name, field] of Object.entries(schema.fields)) {\n      properties[name] = fieldToJsonSchema(field);\n      if (field.required) required.push(name);\n    }\n    const node: JsonSchemaNode = {\n      type: \"object\",\n      properties,\n      required,\n      ...(strict ? { additionalProperties: false } : {}),\n    };\n    return injectKind\n      ? injectKindIntoObjectSchema(node, schema.kind, strict)\n      : node;\n  }\n\n  function unresolvedStub(slug: string): JsonSchemaNode {\n    const node: JsonSchemaNode = {\n      type: \"object\",\n      description: `Unresolved kind \"${slug}\" — schema not available at export time.`,\n    };\n    // Deliberately never strict: a __kind-only object pinned with\n    // additionalProperties:false would reject every real payload.\n    return injectKind ? injectKindIntoObjectSchema(node, slug, false) : node;\n  }\n\n  const rootNode = kindObjectSchema(rootSchema);\n\n  if (defsOrder.length === 0) {\n    return { name: kind, schema: rootNode, strict, unresolved };\n  }\n\n  const defs: Record<string, JsonSchemaNode> = {};\n  for (const slug of defsOrder) {\n    const schema = resolvedDefs.get(slug);\n    defs[slug] = schema ? kindObjectSchema(schema) : unresolvedStub(slug);\n  }\n\n  return { name: kind, schema: { ...rootNode, $defs: defs }, strict, unresolved };\n}\n","/**\n * The four control keys an agent may put beside a kind's values — the TypeScript twin of\n * `matrx_graph.kind_control_keys.with_control_keys` (aidream). ONE definition, two languages:\n * for the same input both produce the same JSON (guard W2-G7, the shared golden\n * `packages/matrx-graph/tests/fixtures/kind_control_keys_golden.json`).\n *\n * `_replaces` (\"this replaces that output\"), `_new` (\"this is something new\"), `_record_id`\n * (\"change this record\") and `_records` (\"several records\") are never part of a kind and no\n * registry row carries them — they are added where a schema is USED, for `record` kinds and\n * table kinds only:\n *\n * - `withControlKeys(schema, { mode: \"stored\" })` — the JSON Schema a value is validated\n *   against: all four declared optional (nullable), and the root's required Fields lifted when\n *   the value is a patch (`_record_id`) or a batch (`_records`) — one branch APPENDED to `allOf`,\n *   never replacing it.\n * - `withControlKeys(schema, { mode: \"authored\", many, allowEdit })` — what the model is shown:\n *   `_replaces`/`_new` always, `_record_id` only with `allowEdit`, and with `many` the root is\n *   the batch `{__kind, _records: [<record without __kind>], ...}`. Signals are OPTIONAL — the\n *   provider translators widen them to required-and-nullable on the wire and prune a null back.\n * - `withControlKeyFields(kindSchema)` — the render-level twin: the four keys as optional\n *   render fields of a `KindSchema`, so a patch, a batch or a signal is drawn by its kind's\n *   component instead of being reported as unknown keys. The web schema is never stricter\n *   than the store.\n *\n * Design: common-docs `projects/data-doctrine-adoption/v6/KINDS-GLUE-WAVE2-DESIGN.md` §1.4.\n */\n\nimport type { FieldSchema, KindSchema } from \"../core/kind-schema.types\";\n\n/** The four keys, in the order they are declared. */\nexport const CONTROL_KEYS = [\"_replaces\", \"_new\", \"_record_id\", \"_records\"] as const;\nexport type ControlKey = (typeof CONTROL_KEYS)[number];\n\n/** The one disposition whose kinds take the control keys (table kinds are always `record`). */\nexport const RECORD_DISPOSITION = \"record\";\n\nexport type ControlKeysMode = \"stored\" | \"authored\";\n\nexport type WithControlKeysOptions = {\n  mode: ControlKeysMode;\n  /** Authored mode: the root becomes the batch `{__kind, _records: [...]}`. */\n  many?: boolean;\n  /** Authored mode: the model may name `_record_id` (the run may edit its own outputs). */\n  allowEdit?: boolean;\n};\n\ntype Json = Record<string, unknown>;\n\nconst KIND_KEY = \"__kind\";\nconst DOCUMENT_KEYS = new Set([\"$schema\", \"$id\", \"$defs\", \"definitions\", \"title\", \"description\"]);\nconst CONTROL = new Set<string>(CONTROL_KEYS);\n\n/** Whether a kind with this disposition takes the control keys. */\nexport function controlKeysApplyTo(disposition: string | null | undefined): boolean {\n  return disposition === RECORD_DISPOSITION;\n}\n\nfunction clone<T>(value: T): T {\n  return value === undefined ? value : (JSON.parse(JSON.stringify(value)) as T);\n}\n\nfunction isObjectSchema(schema: unknown): schema is Json & { properties: Json } {\n  if (!schema || typeof schema !== \"object\" || Array.isArray(schema)) return false;\n  const s = schema as Json;\n  return (\n    s.type === \"object\" &&\n    !!s.properties &&\n    typeof s.properties === \"object\" &&\n    !Array.isArray(s.properties)\n  );\n}\n\nfunction requiredOf(schema: Json): string[] {\n  return Array.isArray(schema.required) ? (schema.required as string[]) : [];\n}\n\n/** The kind's record object without `__kind` — what one item of `_records` is. */\nfunction recordObject(schema: Json): Json {\n  const item: Json = {};\n  for (const [k, v] of Object.entries(schema)) {\n    if (!DOCUMENT_KEYS.has(k)) item[k] = clone(v);\n  }\n  const props: Json = {};\n  for (const [k, v] of Object.entries(item.properties as Json)) {\n    if (k !== KIND_KEY && !CONTROL.has(k)) props[k] = v;\n  }\n  item.properties = props;\n  const required = requiredOf(item).filter((k) => k !== KIND_KEY && !CONTROL.has(k));\n  if (required.length > 0) item.required = required;\n  else delete item.required;\n  return item;\n}\n\nfunction stored(schema: Json): Json {\n  const out = clone(schema);\n  const item = recordObject(schema);\n  const props = out.properties as Json;\n  props._replaces = { type: [\"string\", \"null\"], format: \"uuid\" };\n  props._new = { type: [\"boolean\", \"null\"] };\n  props._record_id = { type: [\"string\", \"null\"], format: \"uuid\" };\n  props._records = { type: [\"array\", \"null\"], items: item };\n\n  const rootRequired = requiredOf(out).filter((k) => !CONTROL.has(k));\n  const lifted = rootRequired.filter((k) => k !== KIND_KEY);\n  if (lifted.length > 0) {\n    const kept = rootRequired.filter((k) => k === KIND_KEY);\n    if (kept.length > 0) out.required = kept;\n    else delete out.required;\n    const branch = {\n      if: {\n        anyOf: [\n          { required: [\"_record_id\"], properties: { _record_id: { type: \"string\" } } },\n          { required: [\"_records\"], properties: { _records: { type: \"array\" } } },\n        ],\n      },\n      else: { required: lifted },\n    };\n    out.allOf = Array.isArray(out.allOf) ? [...(out.allOf as unknown[]), branch] : [branch];\n  }\n  return out;\n}\n\nfunction authored(schema: Json, many: boolean, allowEdit: boolean): Json {\n  const signals: Json = {\n    _replaces: { type: \"string\", format: \"uuid\" },\n    _new: { type: \"boolean\" },\n  };\n  if (allowEdit) signals._record_id = { type: \"string\", format: \"uuid\" };\n\n  if (!many) {\n    const out = clone(schema);\n    Object.assign(out.properties as Json, clone(signals));\n    const required = requiredOf(out).filter((k) => !CONTROL.has(k));\n    if (required.length > 0 || \"required\" in out) out.required = required;\n    return out;\n  }\n\n  const out: Json = {};\n  for (const [k, v] of Object.entries(schema)) {\n    if (DOCUMENT_KEYS.has(k)) out[k] = clone(v);\n  }\n  out.type = \"object\";\n  const kindProp = (schema.properties as Json)[KIND_KEY];\n  const properties: Json = {};\n  if (kindProp !== undefined) properties[KIND_KEY] = clone(kindProp);\n  properties._records = { type: \"array\", items: recordObject(schema) };\n  Object.assign(properties, clone(signals));\n  out.properties = properties;\n  out.required = [KIND_KEY, \"_records\"].filter((k) => k in properties);\n  out.additionalProperties = false;\n  return out;\n}\n\n/**\n * A copy of `schema` that carries the control keys for `mode`. A schema that is not an object\n * with `properties` (a root-form kind, the \"any value\" `{}`) is returned unchanged.\n */\nexport function withControlKeys<T>(schema: T, options: WithControlKeysOptions): T {\n  const { mode, many = false, allowEdit = false } = options;\n  if (mode !== \"stored\" && mode !== \"authored\") {\n    throw new Error(`withControlKeys: mode must be \"stored\" or \"authored\", got ${String(mode)}`);\n  }\n  if (!isObjectSchema(schema)) return schema;\n  return (mode === \"stored\" ? stored(schema) : authored(schema, many, allowEdit)) as T;\n}\n\n/** The render fields the control keys add to a `KindSchema` — all optional, none stricter than the store. */\nexport const CONTROL_KEY_FIELDS: Readonly<Record<ControlKey, FieldSchema>> = Object.freeze({\n  _replaces: { type: \"string\", nullable: true },\n  _new: { type: \"boolean\", nullable: true },\n  _record_id: { type: \"string\", nullable: true },\n  // A batch's items are records of this kind WITHOUT `__kind`; the render layer reads them\n  // as opaque JSON (never stricter than the store, which validates each item).\n  _records: { type: \"json[]\", nullable: true },\n});\n\n/**\n * `schema` with the four control keys as optional render fields. A root-form kind (no field\n * map) is returned unchanged. Keys the kind itself declares are left as the kind declares them.\n */\nexport function withControlKeyFields(schema: KindSchema): KindSchema {\n  if (schema.root) return schema;\n  const fields: Record<string, FieldSchema> = { ...schema.fields };\n  for (const key of CONTROL_KEYS) {\n    if (!(key in fields)) fields[key] = { ...CONTROL_KEY_FIELDS[key] };\n  }\n  return { ...schema, fields };\n}\n\n/** Split a value into (values without the control keys, the control keys present). */\nexport function stripControlKeys(value: Record<string, unknown>): {\n  values: Record<string, unknown>;\n  signals: Partial<Record<ControlKey, unknown>>;\n} {\n  const values: Record<string, unknown> = {};\n  const signals: Partial<Record<ControlKey, unknown>> = {};\n  for (const [k, v] of Object.entries(value)) {\n    if (CONTROL.has(k)) signals[k as ControlKey] = v;\n    else values[k] = v;\n  }\n  return { values, signals };\n}\n","/**\n * JSON Schema → KindSchema — THE registry-facing direction.\n *\n * 🚨 WHY THIS FILE IS THE POINT OF THE WHOLE CONVERT LAYER (Arman's ruling,\n * 2026-08-29): a kind's fields must be DERIVED from its schema, never stored a\n * second time. `content_ir.kind_definition` used to carry both — a JSON Schema\n * AND a flattened field list written beside it — and the two had already\n * diverged on 13 of the 62 live kinds that carried both: stored lists holding\n * `__kind` as if it were a data field, enums flattened to bare strings,\n * min/max bounds and required flags the schema states and the copy never\n * learned. A cache that can disagree with its source is not a cache.\n *\n * The heavy lifting lives in `openai-schema-converter.ts` (it also serves the\n * agent-authoring flow, which needs the problems/dropped-metadata detail).\n * This module is the narrow, honest door the registry calls: one schema in,\n * one `KindSchema` out, plus whatever child kinds the schema declared inline\n * or through `$defs`.\n *\n * Accepts both storage shapes seen in the wild: a bare JSON Schema, and the\n * provider `{name, schema, strict}` response-format envelope that 5 live rows\n * carry.\n */\n\nimport type { KindSchema } from \"../core/kind-schema.types\";\nimport { controlKeysApplyTo, withControlKeyFields } from \"./control-keys\";\nimport {\n  convertAiSchemaToBlockFields,\n  normalizeAiSchemaInput,\n  type ConversionProblem,\n  type JsonSchemaNode,\n} from \"./openai-schema-converter\";\n\nexport type KindSchemaFromJsonResult = {\n  /**\n   * The requested kind's schema, or null when the input could not be read as\n   * an object contract at all. NEVER a partial guess: a field the vocabulary\n   * cannot express degrades to `json` (widening, always safe), and only a\n   * structurally unusable root yields null.\n   */\n  schema: KindSchema | null;\n  /**\n   * Child kinds the schema declared inline or via `$defs`, keyed by slug.\n   * A registry that ingests these gets the whole tree from ONE row's schema —\n   * which is how a nested kind renders before its children's rows load.\n   */\n  children: Record<string, KindSchema>;\n  /** Conversion notes. `severity: \"error\"` entries are worth screaming about. */\n  problems: ConversionProblem[];\n};\n\nexport type KindSchemaFromJsonOptions = {\n  /**\n   * The registry row's `metadata.disposition`. A `record` kind's schema gains the four\n   * control keys (`_replaces`, `_new`, `_record_id`, `_records`) as optional render fields\n   * (`withControlKeys`, KINDS-GLUE wave 2 §1.4), so an agent's patch, batch or signal draws\n   * through its kind instead of reading as unknown keys. Any other value adds nothing.\n   */\n  disposition?: string | null;\n};\n\n/**\n * Derive `kind`'s field schema from its JSON Schema.\n *\n * Pure and synchronous — no registry, no IO — so a host can call it from a\n * warm load, a cold fetch, a reducer, or a test.\n */\nexport function kindSchemaFromJsonSchema(\n  kind: string,\n  jsonSchema: unknown,\n  options: KindSchemaFromJsonOptions = {},\n): KindSchemaFromJsonResult {\n  if (jsonSchema === null || jsonSchema === undefined) {\n    return { schema: null, children: {}, problems: [] };\n  }\n\n  const normalized = normalizeAiSchemaInput(jsonSchema);\n  const rootSchema: JsonSchemaNode | null =\n    normalized.rootSchema ??\n    (typeof jsonSchema === \"object\" && !Array.isArray(jsonSchema)\n      ? (jsonSchema as JsonSchemaNode)\n      : null);\n\n  if (!rootSchema) {\n    return {\n      schema: null,\n      children: {},\n      problems: [\n        {\n          severity: \"error\",\n          path: \"\",\n          message: `Kind \"${kind}\": emitted_json_schema is not a JSON object.`,\n        },\n      ],\n    };\n  }\n\n  const converted = convertAiSchemaToBlockFields(kind, rootSchema, false);\n\n  let schema: KindSchema | null = null;\n  const children: Record<string, KindSchema> = {};\n  for (const draft of converted.blockSchemas) {\n    const asKindSchema: KindSchema = {\n      kind: draft.slug,\n      fields: draft.fields,\n      ...(draft.root ? { root: draft.root } : {}),\n    };\n    if (draft.slug === kind) schema = asKindSchema;\n    else children[draft.slug] = asKindSchema;\n  }\n  if (schema && controlKeysApplyTo(options.disposition)) {\n    schema = withControlKeyFields(schema);\n  }\n\n  return { schema, children, problems: converted.problems };\n}\n"]}