{"version":3,"sources":["../source/fence-nesting.ts","../source/code-ranges.ts","../source/xml-tag.ts","../surfaces/json-kind-signal.ts","../surfaces/embedded-kind-json.ts","../core/kind-schema.types.ts","../surfaces/instance-title.ts","../surfaces/kind-markdown-utils.ts","../surfaces/kind-value-markdown.ts","../surfaces/kind-text-to-markdown.ts","../surfaces/kind-one-line.ts","../surfaces/quoted-kind-lift.ts","../surfaces/markdown-escaped-kind.ts","../surfaces/kind-image-alt.ts","../surfaces/kind-text-label.ts","../surfaces/legacy-quiz-envelope.ts","../core/ir-types.ts","../core/envelope-value.ts","../surfaces/envelope-parity.ts","../surfaces/decision-answers-ids.ts"],"names":["state","quoteDepth","inside","KIND_KEY","humanizeIdentifier","isKindValue","isRecord","JSON_FENCE_LANGS","last","QUOTE_PREFIX","prefix","rest","HAS_ZERO_WIDTH"],"mappings":"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","file":"surfaces.cjs","sourcesContent":["// ─────────────────────────────────────────────────────────────────────────\n// THE ONE NESTED-FENCE RULE for a ```markdown / ```md / ```mdx fence.\n//\n// Source of truth (moved here from matrx-frontend\n// components/markdown-core/fence-nesting.ts, 2026-09-25). Consumers: the\n// source tokenizer (source/tokenize.ts), matrx-frontend's static splitter and\n// live StreamBlockAccumulator, and — by conformance, since Python cannot\n// import this — aidream matrx-ai `processing/blocks/fence_nesting.py`, which\n// runs the SAME generated vectors (`__tests__/fence-nesting-vectors.json`,\n// byte-identical copy at packages/matrx-ai/tests/fixtures/).\n//\n// Models write a markdown document inside a ```markdown fence and put their\n// own ```python … ``` blocks inside it with the SAME three backticks. Under\n// strict CommonMark the first inner bare ``` closes the outer fence: the\n// document ends mid-way, the rest leaks out as prose, and the outer closing\n// ``` opens a phantom code block that swallows everything after it.\n//\n// The rule, for MARKDOWN-language fences only (every other language keeps\n// strict CommonMark — a ```bash heredoc is code, not a document):\n//   - a fence line WITH an info string (```python) opens a nested fence;\n//   - a bare fence line (``` with at least the opener's tick count) closes\n//     the innermost nested fence while one is open, and closes the outer\n//     fence only when none is;\n//   - a longer outer fence (````markdown) keeps working exactly as before —\n//     an inner ``` is shorter than the opener, so it is plain content;\n//   - if the text ENDS with a nested fence still open, the extraction is\n//     redone under strict CommonMark (an unclosed inner fence must not eat\n//     the outer closer and the rest of the message).\n// ─────────────────────────────────────────────────────────────────────────\n\n/** Fence languages whose body is itself a markdown document. */\nexport const NESTING_FENCE_LANGUAGES: ReadonlySet<string> = new Set([\n  \"markdown\",\n  \"md\",\n  \"mdx\",\n]);\n\n/** True when a fence opened with this info-string language nests inner fences. */\nexport function fenceNestsInnerFences(language: string | undefined | null): boolean {\n  return !!language && NESTING_FENCE_LANGUAGES.has(language.toLowerCase());\n}\n\nexport type InnerFenceLine =\n  /** Not a fence line — ordinary content of the outer fence. */\n  | \"content\"\n  /** ```lang inside a markdown fence — content, and one level deeper. */\n  | \"open-nested\"\n  /** Bare ``` that closes the innermost nested fence — content, one level up. */\n  | \"close-nested\"\n  /** Bare ``` that closes the OUTER fence. */\n  | \"close-outer\";\n\n/**\n * Classify one line inside an open backtick fence, already trimmed with\n * {@link trimFenceLine} (never a language's own `trim()`).\n *\n * @param trimmed     the line with surrounding whitespace removed\n * @param openTicks   backtick count of the outer fence's opener\n * @param nests       whether the outer fence follows the nesting rule\n * @param nestedDepth how many nested fences are open right now\n */\n/**\n * The whitespace a fence line may carry around its backticks and info string:\n * CommonMark's ASCII whitespace — space, tab, LF, CR, form feed, vertical tab.\n * Defined HERE, not by a language's `trim()`: JavaScript's `trim()` also strips\n * U+FEFF, U+00A0 and the Unicode spaces, while Python's `strip()` also strips\n * U+0085 and U+001C–U+001F — which made the two twins disagree on lines such\n * as ```` ```\\uFEFF ```` (verify-RC-B3 residual R4). Every caller trims a line\n * with `trimFenceLine` before classifying it; the Python twin mirrors both.\n */\nexport const FENCE_WHITESPACE = \" \\t\\n\\r\\f\\v\";\n\nfunction isFenceWhitespace(ch: string | undefined): boolean {\n  return ch !== undefined && ch !== \"\" && FENCE_WHITESPACE.includes(ch);\n}\n\n/** Strip {@link FENCE_WHITESPACE} (and nothing else) from both ends of a line. */\nexport function trimFenceLine(line: string): string {\n  let start = 0;\n  let end = line.length;\n  while (start < end && isFenceWhitespace(line[start])) start++;\n  while (end > start && isFenceWhitespace(line[end - 1])) end--;\n  return start === 0 && end === line.length ? line : line.slice(start, end);\n}\n\n/**\n * The whitespace around a fence OPENER and inside its info string. The\n * renderer finds openers with JavaScript's `String#trim()` and splits the info\n * string on `/\\s/`; this set IS that definition, written out so the Python\n * twin can match it exactly — ECMAScript WhiteSpace + LineTerminator. It\n * differs from Python's `str.split()` on U+0085 and U+001C–U+001F (not JS\n * whitespace) and U+FEFF (JS whitespace) — verify-RC-B3 residual R4′.\n */\nexport const FENCE_OPENER_WHITESPACE =\n  \"\\t\\n\\v\\f\\r \\u00a0\\u1680\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u2028\\u2029\\u202f\\u205f\\u3000\\ufeff\";\n\nfunction isOpenerWhitespace(ch: string | undefined): boolean {\n  return ch !== undefined && ch !== \"\" && FENCE_OPENER_WHITESPACE.includes(ch);\n}\n\n/**\n * Parse a backtick fence OPENER line the way the renderer does: trim the line,\n * count the backtick run (3+), trim the rest, and take the first\n * whitespace-separated word as the language. null when the line opens nothing —\n * including when the info string holds a backtick (GFM / CommonMark 4.5:\n * \"```` code ````\" and \"``` `x` | b\" are code spans, never fences).\n */\nexport function parseFenceOpener(line: string): { ticks: number; lang: string } | null {\n  let start = 0;\n  let end = line.length;\n  while (start < end && isOpenerWhitespace(line[start])) start++;\n  while (end > start && isOpenerWhitespace(line[end - 1])) end--;\n  let ticks = 0;\n  while (start + ticks < end && line[start + ticks] === \"`\") ticks++;\n  if (ticks < 3) return null;\n  if (line.slice(start + ticks, end).includes(\"`\")) return null;\n  let infoStart = start + ticks;\n  while (infoStart < end && isOpenerWhitespace(line[infoStart])) infoStart++;\n  let langEnd = infoStart;\n  while (langEnd < end && !isOpenerWhitespace(line[langEnd])) langEnd++;\n  return { ticks, lang: line.slice(infoStart, langEnd) };\n}\n\nexport function classifyInnerFenceLine(\n  trimmed: string,\n  openTicks: number,\n  nests: boolean,\n  nestedDepth: number,\n): InnerFenceLine {\n  let ticks = 0;\n  while (ticks < trimmed.length && trimmed[ticks] === \"`\") ticks++;\n  if (ticks < 3) return \"content\";\n  const info = trimFenceLine(trimmed.slice(ticks));\n  if (info === \"\") {\n    if (ticks < openTicks) return \"content\";\n    if (nests && nestedDepth > 0) return \"close-nested\";\n    return \"close-outer\";\n  }\n  // A fence line with an info string never closes anything (CommonMark).\n  // Inside a markdown fence it opens a nested one — unless the outer opener is\n  // LONGER, in which case CommonMark already treats the inner fence as content\n  // and its bare closer can never reach the outer fence.\n  if (nests && ticks >= openTicks && !info.includes(\"`\")) return \"open-nested\";\n  return \"content\";\n}\n","/**\n * THE ONE CODE-RANGE RULE — where code is in markdown source, for every surface.\n *\n * Ruling (RC-B10, 2026-09-25, REGISTER rulings ledger): the rule is the\n * RENDERER's rule — what the chat renderer's splitter, the source tokenizer\n * and the Python block detector already agree on — made container-aware only\n * where the renderer hands a block to remark:\n *   - a BACKTICK fence opens on a line whose whitespace-trimmed text starts\n *     with ``` at ANY indent (so a fence inside a list item opens at any\n *     depth), after stripping blockquote `>` prefixes;\n *   - a TILDE fence opens at ≤ 3 spaces relative to its container (a list\n *     item's content column, inside any `>` prefixes);\n *   - a backtick fence closes by THE nested-fence rule (`fence-nesting.ts`,\n *     with the strict-CommonMark retry when a nested fence is left open) or by\n *     the renderer's line-end closer (`code```` with nothing after it); inside\n *     a ```json fence a backtick run inside a JSON string is text;\n *   - a fence inside a blockquote ends where the blockquote ends;\n *   - strict CommonMark's \"4+ spaces is not a fence\" is rejected on purpose:\n *     users see what the renderer's splitter draws.\n * Inline code spans pair equal-length backtick runs inside one paragraph.\n *\n * Order is the renderer's: phase 1 is the splitter — every raw line whose\n * trimmed text starts with ``` opens a block, before remark sees anything\n * (so `- ```` can never close on a later raw ``` line; that line opens a\n * splitter block instead). Phase 2 is remark inside each prose segment the\n * splitter left: blockquote fences, fences on a list-marker line, tilde\n * fences, and code spans — none can run past its segment. A ``` line inside a\n * tilde fence is therefore drawn as code up to ITS closer (remark's reading\n * here in `findCodeRanges`); the tokenizer's tilde island ends at its closer.\n *\n * Consumers: `findCodeRanges` (math pairing, kit's delimiter guard, chat's\n * speakable text, print, every matrx-frontend walker), and the line-level\n * primitives `fenceOpenerOf` / `closeFence`, which the tokenizer and the\n * renderer's splitters drive line by line. A private copy of fence or\n * code-span detection anywhere fails `__tests__/one-code-range-rule.test.ts`.\n */\nimport { classifyInnerFenceLine, fenceNestsInnerFences, parseFenceOpener, trimFenceLine } from \"./fence-nesting\";\n\nexport interface CodeRange {\n  /** UTF-16 offset of the first character (the fence line start, or the opening backtick run). */\n  start: number;\n  /** Offset just past the closing fence line's content / closing backtick run (the fence's last line when unclosed). */\n  end: number;\n  kind: \"fence\" | \"span\";\n}\n\nexport interface FenceOpener {\n  char: \"`\" | \"~\";\n  /** Length of the opening run. */\n  ticks: number;\n  /** The info string's first word (\"\" when none). */\n  lang: string;\n}\n\n/**\n * THE opener rule for one line's content (container prefixes already\n * removed; for a tilde fence, `content` starts at the container's column).\n */\nexport function fenceOpenerOf(content: string): FenceOpener | null {\n  const t = content.trimStart();\n  if (t.startsWith(\"```\")) {\n    // THE opener parse: a backtick in the info string opens nothing (CommonMark 4.5).\n    const parsed = parseFenceOpener(t);\n    if (!parsed) return null;\n    return { char: \"`\", ticks: parsed.ticks, lang: parsed.lang };\n  }\n  if (content.length - t.length <= 3 && t.startsWith(\"~~~\")) {\n    const open = /^(~{3,})(.*)$/.exec(t);\n    if (!open) return null;\n    return { char: \"~\", ticks: (open[1] as string).length, lang: (open[2] as string).trim().split(/\\s/)[0] ?? \"\" };\n  }\n  return null;\n}\n\n/**\n * Does this line START a fenced code block? THE opener rule (`fenceOpenerOf`),\n * which follows CommonMark 4.5: a `~~~` run, or a backtick run whose info string\n * holds no backtick. Kept as a named predicate for block-boundary readers (a\n * table's end, source/gfm-table.ts).\n */\nexport function opensStrictFence(line: string): boolean {\n  return fenceOpenerOf(line) !== null;\n}\n\n/** The lines a fence is read from. */\nexport interface FenceLines {\n  count: number;\n  /** Line `k`'s content (no terminator), or null when the fence's container has ended before it. */\n  line(k: number): string | null;\n  /** Streaming: line `k` has not ended yet, so it closes nothing. */\n  openTail?(k: number): boolean;\n  /**\n   * Streaming: more lines may still arrive. The strict-CommonMark retry\n   * applies only while the nested reading ends inside a nested fence — a\n   * later line can close that nested fence, so a retry's closer is\n   * undecided and the fence stays open (verify-RC-B3 F3).\n   */\n  streaming?: boolean;\n}\n\nexport interface FenceEnd {\n  /** The closing line when `closed`; otherwise the fence's last line (text end, or the line before its container ended). */\n  line: number;\n  closed: boolean;\n}\n\n/**\n * THE closer rule, read line by line — the one implementation behind\n * `closeFence` and every streaming walker. Feed each following line\n * (container prefixes removed); `feed` returns true on the line that closes\n * the fence. A backtick fence closes by the nested-fence rule or the\n * renderer's line-end closer (`code````), and inside ```json a backtick run in\n * a JSON string is text; a tilde fence closes on `~~~` (≥ its length, ≤ 3\n * spaces). `nesting: false` forces strict CommonMark (the retry `closeFence`\n * makes when a nested fence is left open at the end; a streaming reader\n * cannot look ahead, so it reads with nesting and never retries).\n */\nconst LINE_START = { inString: false, escaped: false } as const;\n\nexport class FenceReader {\n  readonly opener: FenceOpener;\n  private depth = 0;\n  /** A nested fence was opened at some point. */\n  sawNested = false;\n  private readonly isJson: boolean;\n  private readonly nesting: boolean;\n  private readonly tildeCloser: RegExp | null;\n\n  constructor(\n    opener: FenceOpener,\n    options: { nesting?: boolean } = {},\n  ) {\n    this.opener = opener;\n    this.isJson = opener.char === \"`\" && opener.lang === \"json\";\n    this.nesting = opener.char === \"`\" && (options.nesting ?? fenceNestsInnerFences(opener.lang));\n    this.tildeCloser = opener.char === \"~\" ? new RegExp(`^ {0,3}~{${opener.ticks},}[ \\\\t]*$`) : null;\n  }\n\n  /** How many nested fences are open right now. */\n  get nestedDepth(): number {\n    return this.depth;\n  }\n\n  feed(line: string): boolean {\n    if (this.tildeCloser) return this.tildeCloser.test(line);\n    const trimmedLine = trimFenceLine(line);\n    const at = line.indexOf(\"```\");\n    if (at === -1) return false;\n    // Inside ```json a backtick run in a JSON string is text. The string state\n    // is read per line: a JSON string never holds a raw newline, so a line that\n    // ends inside one (`{\\\"__kind\\\":…}`, a cut value) ends it — carrying it on\n    // swallowed the closer and everything after (never-raw R11 H2).\n    if (this.isJson && jsonStringState(line, 0, at, LINE_START).inString) return false;\n    if (trimmedLine.startsWith(\"```\")) {\n      const kind = classifyInnerFenceLine(trimmedLine, this.opener.ticks, this.nesting, this.depth);\n      if (kind === \"close-outer\") return true;\n      if (kind === \"open-nested\") {\n        this.depth++;\n        this.sawNested = true;\n      }\n      if (kind === \"close-nested\") this.depth--;\n    } else {\n      // The renderer's line-end closer: `code```` with nothing after the run.\n      const closeTicks = backtickRunLength(line, at);\n      const after = trimFenceLine(line.slice(at + closeTicks));\n      if (closeTicks >= this.opener.ticks && after === \"\" && this.depth === 0) return true;\n    }\n    return false;\n  }\n}\n\n/** Where the fence opened on line `open` ends. */\nexport function closeFence(src: FenceLines, open: number, opener: FenceOpener): FenceEnd {\n  const first = readFence(src, open, new FenceReader(opener));\n  if (first.closed || !first.reader.sawNested || first.reader.nestedDepth <= 0) return { line: first.line, closed: first.closed };\n  if (src.streaming) return { line: first.line, closed: false };\n  const strict = readFence(src, open, new FenceReader(opener, { nesting: false }));\n  return { line: strict.line, closed: strict.closed };\n}\n\nfunction readFence(src: FenceLines, open: number, reader: FenceReader): FenceEnd & { reader: FenceReader } {\n  for (let k = open + 1; k < src.count; k++) {\n    // Streaming: a bare ``` on the unfinished last line may still grow into ```bash.\n    if (src.openTail?.(k)) continue;\n    const line = src.line(k);\n    if (line === null) return { line: k - 1, closed: false, reader };\n    if (reader.feed(line)) return { line: k, closed: true, reader };\n  }\n  return { line: src.count - 1, closed: false, reader };\n}\n\n/** JSON-string state after scanning `line[from, upTo)` from the given state. */\nexport function jsonStringState(\n  line: string,\n  from: number,\n  upTo: number,\n  state: { inString: boolean; escaped: boolean },\n): { inString: boolean; escaped: boolean } {\n  let { inString, escaped } = state;\n  for (let idx = from; idx < upTo; idx++) {\n    const ch = line[idx];\n    if (escaped) {\n      escaped = false;\n      continue;\n    }\n    if (ch === \"\\\\\" && inString) {\n      escaped = true;\n      continue;\n    }\n    if (ch === '\"') inString = !inString;\n  }\n  return { inString, escaped };\n}\n\nexport function backtickRunLength(str: string, pos: number): number {\n  let n = 0;\n  while (pos + n < str.length && str[pos + n] === \"`\") n++;\n  return n;\n}\n\n// ── the whole-text scan ────────────────────────────────────────────────────\n\n/** Blockquote prefix: how many `>` markers open the line, and where its content starts. */\nfunction quotePrefix(line: string): { depth: number; offset: number } {\n  let depth = 0;\n  let offset = 0;\n  for (;;) {\n    const m = /^ {0,3}> ?/.exec(line.slice(offset));\n    if (!m) return { depth, offset };\n    depth++;\n    offset += m[0].length;\n  }\n}\n\n/** Strip exactly `depth` blockquote markers; null when the line has fewer (the blockquote ended). */\nfunction stripQuotes(line: string, depth: number): string | null {\n  let offset = 0;\n  for (let d = 0; d < depth; d++) {\n    const m = /^ {0,3}> ?/.exec(line.slice(offset));\n    if (!m) return null;\n    offset += m[0].length;\n  }\n  return line.slice(offset);\n}\n\nconst LIST_ITEM = /^( *)([-*+]|\\d{1,9}[.)])( +|\\t|$)/;\n\nfunction leadingSpaces(s: string): number {\n  let i = 0;\n  while (i < s.length && s[i] === \" \") i++;\n  return i;\n}\n\ninterface Scan {\n  ranges: CodeRange[];\n  /** Every fence as lines: [opener line, last line, closed]. */\n  fences: Array<[number, number, boolean]>;\n  /** Paragraph runs outside fences, [start, end), for code-span pairing. */\n  paragraphs: Array<[number, number]>;\n  /** Text ends inside an open fence. */\n  endsInFence: boolean;\n  /** Start of the final, still-growing paragraph (streaming rule), -1 if none. */\n  pendingPara: number;\n}\n\nfunction scan(text: string): Scan {\n  const starts: number[] = [];\n  const ends: number[] = [];\n  for (let pos = 0; ; ) {\n    const nl = text.indexOf(\"\\n\", pos);\n    const lineEnd = nl === -1 ? text.length : nl;\n    starts.push(pos);\n    ends.push(lineEnd > pos && text.charCodeAt(lineEnd - 1) === 13 ? lineEnd - 1 : lineEnd);\n    if (nl === -1) break;\n    pos = nl + 1;\n  }\n  const count = starts.length;\n  const raw = (k: number) => text.slice(starts[k] as number, ends[k] as number);\n  const out: Scan = { ranges: [], fences: [], paragraphs: [], endsInFence: false, pendingPara: -1 };\n\n  // Phase 1 — the renderer's splitter: every line whose trimmed text starts\n  // with ``` opens a code block at ANY indent, before remark sees anything.\n  const rawLines: FenceLines = { count, line: raw };\n  let segment = 0;\n  for (let k = 0; k < count; k++) {\n    const opener = fenceOpenerOf(raw(k));\n    if (!opener || opener.char !== \"`\") continue;\n    prose(text, starts, ends, raw, segment, k, out);\n    const end = closeFence(rawLines, k, opener);\n    out.ranges.push({ start: starts[k] as number, end: ends[end.line] as number, kind: \"fence\" });\n    out.fences.push([k, end.line, end.closed]);\n    out.pendingPara = -1;\n    if (!end.closed && end.line === count - 1) out.endsInFence = true;\n    k = end.line;\n    segment = k + 1;\n  }\n  prose(text, starts, ends, raw, segment, count, out);\n  return out;\n}\n\n/**\n * Phase 2 — remark, inside one prose segment [from, to) the splitter left:\n * fences in blockquotes, on a list-marker line, and tilde fences (relative to\n * their container), plus the paragraphs whose backtick runs pair as spans. A\n * fence here can never run past its segment: the splitter's block begins there.\n */\nfunction prose(\n  text: string,\n  starts: number[],\n  ends: number[],\n  raw: (k: number) => string,\n  from: number,\n  to: number,\n  out: Scan,\n): void {\n  let para = -1;\n  let quoteDepth = 0;\n  let lists: number[] = []; // content columns of the open list items (inside the quote prefix)\n  const closePara = (at: number) => {\n    if (para !== -1) out.paragraphs.push([para, at]);\n    para = -1;\n  };\n  for (let k = from; k < to; k++) {\n    const line = raw(k);\n    const { depth, offset } = quotePrefix(line);\n    if (depth !== quoteDepth) {\n      quoteDepth = depth;\n      lists = [];\n    }\n    let content = line.slice(offset);\n    if (content.trim() === \"\") {\n      closePara(starts[k] as number);\n      // The empty \"line\" after a final newline is not a blank line: the next\n      // line may still join this paragraph.\n      if (!(k === starts.length - 1 && line === \"\")) out.pendingPara = -1;\n      continue;\n    }\n    const indent = leadingSpaces(content);\n    while (lists.length && indent < (lists[lists.length - 1] as number)) lists.pop();\n    const item = LIST_ITEM.exec(content);\n    let column = lists.length ? (lists[lists.length - 1] as number) : 0;\n    if (item) {\n      const gap = (item[3] as string).length;\n      column = (item[1] as string).length + (item[2] as string).length + (gap >= 1 && gap <= 4 ? gap : 1);\n      lists.push(column);\n      content = content.slice(Math.min(column, content.length));\n    } else {\n      content = content.slice(Math.min(indent, column));\n    }\n    const opener = fenceOpenerOf(content);\n    if (!opener) {\n      if (para === -1) para = starts[k] as number;\n      if (out.pendingPara === -1) out.pendingPara = starts[k] as number;\n      continue;\n    }\n    closePara(starts[k] as number);\n    out.pendingPara = -1;\n    const col = column;\n    const src: FenceLines = {\n      count: to,\n      line: (j) => {\n        const inner = stripQuotes(raw(j), depth);\n        if (inner === null) return null;\n        if (opener.char === \"~\" && col > 0) {\n          const ind = leadingSpaces(inner);\n          if (inner.trim() !== \"\" && ind < col) return null; // the list item ended\n          return inner.slice(Math.min(ind, col));\n        }\n        return inner;\n      },\n    };\n    const end = closeFence(src, k, opener);\n    out.ranges.push({ start: starts[k] as number, end: ends[end.line] as number, kind: \"fence\" });\n    out.fences.push([k, end.line, end.closed]);\n    if (!end.closed && end.line === starts.length - 1) out.endsInFence = true;\n    k = end.line;\n  }\n  closePara(to < starts.length ? (starts[to] as number) : text.length);\n}\n\n/**\n * THE code-span pairing table for one paragraph, text[from, to): a backtick\n * run closes at the first LATER run of exactly its length; a run with none is\n * literal text. `findCodeRanges` pairs runs in order; the tokenizer's inline\n * scanner asks `next` in the renderer's leftmost-first inline order.\n */\nexport class BacktickRuns {\n  /** Every run, in order: [start, length]. */\n  readonly all: Array<[number, number]> = [];\n  private readonly byLength = new Map<number, number[]>();\n  private readonly indexOf = new Map<number, number>();\n\n  constructor(text: string, from: number, to: number) {\n    for (let k = from; k < to; ) {\n      if (text.charCodeAt(k) !== 96) {\n        k++;\n        continue;\n      }\n      let len = 1;\n      while (k + len < to && text.charCodeAt(k + len) === 96) len++;\n      this.indexOf.set(k, this.all.length);\n      this.all.push([k, len]);\n      const list = this.byLength.get(len);\n      if (list) list.push(k);\n      else this.byLength.set(len, [k]);\n      k += len;\n    }\n  }\n\n  /** Start of the first run of exactly `n` backticks at or after `after`, or -1. */\n  next(n: number, after: number): number {\n    const list = this.byLength.get(n);\n    if (!list) return -1;\n    let lo = 0;\n    let hi = list.length;\n    while (lo < hi) {\n      const mid = (lo + hi) >>> 1;\n      if ((list[mid] as number) < after) lo = mid + 1;\n      else hi = mid;\n    }\n    return list[lo] ?? -1;\n  }\n\n  /** Index of the run starting at `start` in `all`. */\n  index(start: number): number {\n    return this.indexOf.get(start) ?? -1;\n  }\n}\n\nfunction codeSpans(text: string, from: number, to: number, out: CodeRange[]): void {\n  // Left to right, exactly as the renderer (remark) and the tokenizer's inline\n  // scanner read: a backslash escapes the next character, so an escaped\n  // backtick opens nothing; a run closes at the first LATER run of exactly its\n  // length (inside code a backslash is literal, so a closer may follow one).\n  let runs: BacktickRuns | null = null;\n  for (let i = from; i < to; ) {\n    const ch = text.charCodeAt(i);\n    if (ch === 92) {\n      i += 2;\n      continue;\n    }\n    if (ch !== 96) {\n      i++;\n      continue;\n    }\n    const n = backtickRunLength(text, i);\n    const len = Math.min(n, to - i);\n    runs ??= new BacktickRuns(text, from, to);\n    const close = runs.next(len, i + len);\n    if (close === -1) {\n      i += len;\n      continue;\n    }\n    out.push({ start: i, end: close + len, kind: \"span\" });\n    i = close + len;\n  }\n}\n\n/**\n * Every code range in the text — fences (by the renderer's rule above) and\n * inline code spans — sorted by start. Linear: one pass over lines, one over\n * each paragraph's backtick runs.\n */\nexport function findCodeRanges(text: string): CodeRange[] {\n  const s = scan(text);\n  const ranges = [...s.ranges];\n  for (const [from, to] of s.paragraphs) codeSpans(text, from, to, ranges);\n  return ranges.sort((a, b) => a.start - b.start);\n}\n\n/**\n * Rewrite every code range (fences and spans, by THE rule) through `fn`; text\n * outside code is kept byte for byte. The one way to strip, replace or\n * placeholder code in markdown — never a private /```…```/ regex.\n */\nexport function mapCodeRanges(text: string, fn: (range: CodeRange, raw: string) => string): string {\n  let out = \"\";\n  let at = 0;\n  for (const r of findCodeRanges(text)) {\n    if (r.start < at) continue;\n    out += text.slice(at, r.start) + fn(r, text.slice(r.start, r.end));\n    at = r.end;\n  }\n  return out + text.slice(at);\n}\n\n/**\n * The code SPANS in one piece of INLINE content — a table cell, a heading's\n * text, a link label — where no block structure exists, so a line opening with\n * three or more backticks is a code span, never a fence (```` `` code `` ```` in a\n * GFM cell). Same scanner and escape rules as `findCodeRanges`' span pass.\n */\nexport function findInlineCodeSpans(text: string): CodeRange[] {\n  const ranges: CodeRange[] = [];\n  codeSpans(text, 0, text.length, ranges);\n  return ranges.sort((a, b) => a.start - b.start);\n}\n\n/** Rewrite every code SPAN of inline content through `fn` (see `findInlineCodeSpans`); other text is kept byte for byte. */\nexport function mapInlineCodeSpans(text: string, fn: (range: CodeRange, raw: string) => string): string {\n  let out = \"\";\n  let at = 0;\n  for (const r of findInlineCodeSpans(text)) {\n    if (r.start < at) continue;\n    out += text.slice(at, r.start) + fn(r, text.slice(r.start, r.end));\n    at = r.end;\n  }\n  return out + text.slice(at);\n}\n\n/** A code span's text (CommonMark): the backtick runs off, then one padding space each side when both are there and the content is not all spaces. */\nexport function codeSpanText(raw: string): string {\n  const ticks = backtickRunLength(raw, 0);\n  const inner = raw.slice(ticks, raw.length - ticks);\n  return inner.length >= 2 && inner.startsWith(\" \") && inner.endsWith(\" \") && inner.trim() !== \"\" ? inner.slice(1, -1) : inner;\n}\n\n/**\n * A fence range's parts: its opener, its body (the lines between the opener\n * and the closer, blockquote prefixes kept), and whether it closed. Reads\n * `raw` exactly as `findCodeRanges` returned it.\n */\nexport function fenceParts(raw: string): { opener: FenceOpener; body: string; closed: boolean } | null {\n  const lines = raw.split(\"\\n\").map((l) => (l.endsWith(\"\\r\") ? l.slice(0, -1) : l));\n  const { offset } = quotePrefix(lines[0] ?? \"\");\n  const opener = fenceOpenerOf((lines[0] ?? \"\").slice(offset).replace(/^ *(?:[-*+]|\\d{1,9}[.)])(?= |\\t|$) ?/, \"\"));\n  if (!opener) return null;\n  const rest = lines.slice(1);\n  const closed = rest.length > 0 && new FenceReader(opener, { nesting: false }).feed(rest[rest.length - 1] as string);\n  if (!closed) return { opener, body: rest.join(\"\\n\"), closed };\n  const last = rest[rest.length - 1] as string;\n  // The renderer's line-end closer (`code````): the text before the run is code.\n  const before = opener.char === \"~\" || trimFenceLine(last).startsWith(\"```\") ? \"\" : last.slice(0, last.indexOf(\"```\"));\n  return { opener, body: [...rest.slice(0, -1), ...(before.trim() ? [before] : [])].join(\"\\n\"), closed };\n}\n\nexport type FenceLineKind = \"prose\" | \"open\" | \"body\" | \"close\";\n\n/**\n * Where each line (the text split on \"\\n\") sits relative to the fences\n * `findCodeRanges` finds: its opener, its body, its closer, or prose. For a\n * line walker that must skip code — one rule, never a private `inFence` toggle.\n */\nexport function fenceLineKinds(text: string): FenceLineKind[] {\n  const s = scan(text);\n  let count = 1;\n  for (let i = text.indexOf(\"\\n\"); i !== -1; i = text.indexOf(\"\\n\", i + 1)) count++;\n  const kinds = new Array<FenceLineKind>(count).fill(\"prose\");\n  for (const [open, last, closed] of s.fences) {\n    kinds[open] = \"open\";\n    for (let k = open + 1; k <= last; k++) kinds[k] = \"body\";\n    if (closed && last > open) kinds[last] = \"close\";\n  }\n  return kinds;\n}\n\n/**\n * STREAMING: where the last, still-growing paragraph (no blank line or fence\n * after it) holds a backtick run that a later run could still close — a run\n * with no later run of its length, or the run touching the end of the text\n * (it may still lengthen). Such a code span can yet swallow any `$$` after it,\n * so a streaming tokenizer treats text from there as provisional. -1 if none.\n */\nexport function pendingCodeSpanStart(text: string): number {\n  const n = text.length;\n  if (n === 0 || /\\n[ \\t]*\\n[ \\t]*$/.test(text)) return -1;\n  // An open last line that is only whitespace or blockquote markers SO FAR is\n  // not a blank line yet: its next byte may continue the paragraph\n  // (verify-RC-B3 F3: `\\n  ` + `and\\``, `\\n>` + `<\\`\\`\\``).\n  const lastLine = text.slice(text.lastIndexOf(\"\\n\") + 1);\n  if (lastLine && /^(?: {0,3}>[ \\t]?)*[ \\t\\r]*$/.test(lastLine)) return pendingCodeSpanStart(`${text}x`);\n  const s = scan(text);\n  const para = s.pendingPara;\n  if (s.endsInFence || para === -1) return -1;\n  const runs: Array<[number, number]> = [];\n  for (let k = para; k < n; ) {\n    if (text.charCodeAt(k) !== 96) {\n      k++;\n      continue;\n    }\n    let len = 1;\n    while (k + len < n && text.charCodeAt(k + len) === 96) len++;\n    runs.push([k, len]);\n    k += len;\n  }\n  // Pair runs the way findCodeRanges does, treating a run that touches the end\n  // as still growing (it matches nothing yet); the first run left open is pending.\n  const growing = (r: number) => {\n    const [start, len] = runs[r] as [number, number];\n    return start + len === n;\n  };\n  for (let r = 0; r < runs.length; ) {\n    if (growing(r)) return (runs[r] as [number, number])[0];\n    const len = (runs[r] as [number, number])[1];\n    let j = r + 1;\n    while (j < runs.length && ((runs[j] as [number, number])[1] !== len || growing(j))) j++;\n    if (j >= runs.length) return (runs[r] as [number, number])[0];\n    r = j + 1;\n  }\n  return -1;\n}\n","/**\n * XML tag reading + the generic-container balance scanner.\n *\n * Ported VERBATIM (behavior) from matrx-frontend\n * `components/mardown-display/blocks/xml/readXmlTag.ts` and the\n * `XmlContainerTracker` in\n * `components/mardown-display/markdown-classification/processors/utils/content-splitter-v2.ts`\n * so the source tokenizer ends a generic XML section exactly where the\n * renderer does. Fences inside the section are found by THE one code-range\n * rule (source/code-ranges.ts `fenceOpenerOf` + `FenceReader`), which the\n * renderer's splitter imports too (RC-B10).\n */\nimport { FenceReader, fenceOpenerOf } from \"./code-ranges\";\n\nexport interface ReadXmlTag {\n  tagName: string;\n  raw: string;\n  isClosing: boolean;\n  isSelfClosing: boolean;\n  attributes: Array<{ name: string; value: string }>;\n}\n\nconst XML_NAME_START = /[A-Za-z_]/;\nconst XML_NAME_CHARACTER = /[\\w.:-]/;\nconst WHITESPACE = /\\s/;\n\n/**\n * `find(needle, from)` must behave like `content.indexOf(needle, from)`; the\n * tokenizer passes a cached occurrence index so a text full of unclosed\n * attribute quotes stays linear. Behavior is identical either way.\n */\nexport function readXmlTag(\n  content: string,\n  start: number,\n  find: (needle: string, from: number) => number = (needle, from) => content.indexOf(needle, from),\n): ReadXmlTag | null {\n  // A tag starts with `<` — without this, `description: >-` read as a tag\n  // named \"escription:\" (RC-B3r).\n  if (content[start] !== \"<\") return null;\n  let cursor = start + 1;\n  const isClosing = content[cursor] === \"/\";\n  if (isClosing) cursor++;\n  if (!XML_NAME_START.test(content[cursor] ?? \"\")) return null;\n  const nameStart = cursor;\n  while (XML_NAME_CHARACTER.test(content[cursor] ?? \"\")) cursor++;\n  const tagName = content.slice(nameStart, cursor);\n  const attributes: Array<{ name: string; value: string }> = [];\n  if (isClosing) {\n    while (WHITESPACE.test(content[cursor] ?? \"\")) cursor++;\n    if (content[cursor] !== \">\") return null;\n    return {\n      tagName,\n      raw: content.slice(start, cursor + 1),\n      isClosing,\n      isSelfClosing: false,\n      attributes,\n    };\n  }\n  while (cursor < content.length) {\n    while (WHITESPACE.test(content[cursor] ?? \"\")) cursor++;\n    if (content[cursor] === \">\")\n      return {\n        tagName,\n        raw: content.slice(start, cursor + 1),\n        isClosing,\n        isSelfClosing: false,\n        attributes,\n      };\n    if (content[cursor] === \"/\") {\n      cursor++;\n      while (WHITESPACE.test(content[cursor] ?? \"\")) cursor++;\n      if (content[cursor] !== \">\") return null;\n      return {\n        tagName,\n        raw: content.slice(start, cursor + 1),\n        isClosing,\n        isSelfClosing: true,\n        attributes,\n      };\n    }\n    if (!XML_NAME_START.test(content[cursor] ?? \"\")) return null;\n    const attributeStart = cursor;\n    while (XML_NAME_CHARACTER.test(content[cursor] ?? \"\")) cursor++;\n    const name = content.slice(attributeStart, cursor);\n    while (WHITESPACE.test(content[cursor] ?? \"\")) cursor++;\n    if (content[cursor] !== \"=\") return null;\n    cursor++;\n    while (WHITESPACE.test(content[cursor] ?? \"\")) cursor++;\n    const quote = content[cursor];\n    if (quote !== '\"' && quote !== \"'\") return null;\n    const valueStart = ++cursor;\n    const valueEnd = find(quote, valueStart);\n    if (valueEnd === -1) return null;\n    cursor = valueEnd;\n    attributes.push({ name, value: content.slice(valueStart, cursor) });\n    cursor++;\n  }\n  return null;\n}\n\nfunction isEscapedBacktick(line: string, offset: number): boolean {\n  let slashes = 0;\n  for (let i = offset - 1; line[i] === \"\\\\\"; i--) slashes++;\n  return slashes % 2 === 1;\n}\n\n/**\n * Balances ONE unknown root tag line by line, ignoring lookalike tags inside\n * fenced code, inline code spans, comments and CDATA. `consumeLine` returns\n * the offset (within that line) just past the root's closing tag, or null.\n */\nexport class XmlContainerTracker {\n  readonly rootTag: string;\n  private depth = 0;\n  private inComment = false;\n  private inCdata = false;\n  private inlineTicks = 0;\n  /** The open fence, read by THE one closer (source/code-ranges.ts). */\n  private fence: FenceReader | null = null;\n\n  constructor(rootTag: string) {\n    this.rootTag = rootTag;\n  }\n\n  consumeLine(line: string, startOffset = 0): number | null {\n    if (this.fence) {\n      if (this.fence.feed(line)) this.fence = null;\n      return null;\n    }\n    if (!this.inComment && !this.inCdata && this.inlineTicks === 0) {\n      const opener = fenceOpenerOf(line);\n      if (opener) {\n        this.fence = new FenceReader(opener);\n        return null;\n      }\n    }\n\n    for (let i = startOffset; i < line.length; i++) {\n      if (this.inlineTicks > 0) {\n        if (line[i] === \"`\") {\n          let end = i;\n          while (line[end] === \"`\") end++;\n          if (end - i === this.inlineTicks) this.inlineTicks = 0;\n          i = end - 1;\n        }\n        continue;\n      }\n      if (this.inComment) {\n        const end = line.indexOf(\"-->\", i);\n        if (end === -1) return null;\n        this.inComment = false;\n        i = end + 2;\n        continue;\n      }\n      if (this.inCdata) {\n        const end = line.indexOf(\"]]>\", i);\n        if (end === -1) return null;\n        this.inCdata = false;\n        i = end + 2;\n        continue;\n      }\n      if (line.startsWith(\"<!--\", i)) {\n        this.inComment = true;\n        i += 3;\n        continue;\n      }\n      if (line.startsWith(\"<![CDATA[\", i)) {\n        this.inCdata = true;\n        i += 8;\n        continue;\n      }\n      if (line[i] === \"`\" && !isEscapedBacktick(line, i)) {\n        let end = i;\n        while (line[end] === \"`\") end++;\n        this.inlineTicks = end - i;\n        i = end - 1;\n        continue;\n      }\n      if (line[i] !== \"<\") continue;\n      const tag = readXmlTag(line, i);\n      if (!tag) continue;\n      const tagEnd = i + tag.raw.length;\n      if (tag.tagName === this.rootTag) {\n        if (tag.isClosing) this.depth--;\n        else if (!tag.isSelfClosing) this.depth++;\n        if (this.depth === 0) return tagEnd;\n      }\n      i = tagEnd - 1;\n    }\n    return null;\n  }\n}\n","/**\n * THE KIND SIGNAL of a JSON region's text — the one answer to \"could this\n * still be a kind?\" (Arman, 2026-09-30):\n *\n *   1. The moment it COULD be a kind → display as a kind (its loader).\n *   2. The moment we know WHICH kind → that kind (the parser's job).\n *   3. The moment we know it is not a kind → it is JSON, and JSON is fine.\n *\n * \"Could\" is decided by the FIRST KEY. Until the first key has fully arrived\n * the region is `undecided` and nothing raw is shown. A first key of `__kind`\n * — or a `__kind` key anywhere in the text, at any depth, at any time — COULD\n * be a kind, so it is `kind` (the loader holds). A complete first key that is\n * anything else, with no `__kind` seen, is `not_kind`: the region streams live\n * as JSON, and flips to `kind` the instant a `__kind` key shows up later.\n *\n * 🚨 A `__kind` KEY IS NOT A KIND (content-ir rule 28, Arman 2026-10-25). The\n * key only says \"this could be one\"; the value must name a registered kind.\n * When the host's registry has MEASURED that the named slug does not exist\n * (`setKindSlugOracle` → \"absent\"), the region is `not_kind` — plain JSON, never\n * drawn as a kind instance. A registry that has not answered yet (\"unknown\")\n * never publishes that negative: the loader keeps holding (the cold-verdict\n * rule).\n *\n * Text-only on purpose apart from that one injected answer: it must answer for\n * every frame of every region, including ones whose parser never opened (an\n * unlabelled fence, a reload, a plain markdown fence).\n */\n\n/**\n * The host registry's MEASURED answer for a slug: `registered`, `absent` (a read\n * answered and no kind by that name exists), or `unknown` (not asked/answered\n * yet). Only `absent` changes a verdict.\n */\nexport type KindSlugStatus = \"registered\" | \"absent\" | \"unknown\";\n\nlet kindSlugOracle: ((slug: string) => KindSlugStatus) | null = null;\n\n/** Install the host registry's answer (rich-content does this). `null` restores \"unknown\". */\nexport function setKindSlugOracle(oracle: ((slug: string) => KindSlugStatus) | null): void {\n  kindSlugOracle = oracle;\n}\n\n/** True only when the registry has measured that `slug` names no kind. */\nexport function namesNoKind(slug: string): boolean {\n  return kindSlugOracle !== null && kindSlugOracle(slug) === \"absent\";\n}\n\nimport { fenceOpenerOf, findCodeRanges } from \"../source\";\n\nexport type JsonKindSignal = \"undecided\" | \"kind\" | \"not_kind\";\n\n/**\n * A pathological first key (or a region that is only whitespace and brackets)\n * must not hold a loader forever — past this, an undecided region is treated\n * as JSON so its content is never hidden behind a lid.\n */\nconst UNDECIDED_LIMIT_CHARS = 2000;\n\n/**\n * The key `__kind` as JSON may spell it: every character literal or as its\n * `\\uXXXX` escape (`\"\\u005f_kind\"` IS the key `__kind` to `JSON.parse` — V7).\n */\nconst KIND_KEY_BODY = [...\"__kind\"]\n  .map((ch) => {\n    const hex = ch.charCodeAt(0).toString(16).padStart(4, \"0\");\n    const escaped = [...hex]\n      .map((d) => (/[a-f]/.test(d) ? `[${d}${d.toUpperCase()}]` : d))\n      .join(\"\");\n    return `(?:${ch}|\\\\\\\\u${escaped})`;\n  })\n  .join(\"\");\n\n/** A `\"__kind\"` KEY (not an escaped occurrence inside a string value). */\nconst KIND_KEY = new RegExp(String.raw`(?<!\\\\)\"${KIND_KEY_BODY}\"\\s*:`);\n\n/**\n * JSON5 lets a key go unquoted (`{__kind: \"flashcard_set\"}`) or single-quoted.\n * Accepted ONLY in a ```json5 context (X-minor, round 3) — plain JSON never\n * has such a key, and prose that says `__kind:` is not one.\n */\nconst JSON5_KIND_KEY = /(?:^|[{,]\\s*|\\n\\s*)(?:__kind|'__kind')\\s*:/;\nconst JSON5_KIND_SLUG = /(?:^|[{,]\\s*|\\n\\s*)(?:__kind|'__kind'|\"__kind\")\\s*:\\s*(\"(?:[^\"\\\\]|\\\\.)*\"|'(?:[^'\\\\]|\\\\.)*')/;\n\n/**\n * The key as MARKDOWN may spell it (P8, round 4): `\"\\_\\_kind\"` — the renderer\n * un-escapes it to `\"__kind\"` on screen. Text contexts only.\n */\n// Half-escaped (`\"\\__kind\"`, `\"_\\_kind\"`) draws as the literal key too (round 10).\nconst MARKDOWN_KIND_KEY = /(?<!\\\\)\"(?:\\\\_\\\\_|\\\\__|_\\\\_)kind\"\\s*:/;\n\n/**\n * The key as a STRING-HELD kind spells it once serialized again (R3, round 6):\n * `{\\\"__kind\\\":…}` — what `JSON.stringify` of an object holding kind JSON in a\n * string value prints, at any nesting (`\\\\\\\"`). On screen that is raw kind\n * JSON (ruling c). Rendered-text / stored-text contexts only — inside parsed\n * JSON it is a string VALUE, never a key, so `hasKindKey` alone ignores it.\n */\nconst ESCAPED_KIND_KEY = /\\\\+\"__kind\\\\+\"\\s*:/;\nconst ESCAPED_KIND_SLUG = /\\\\+\"__kind\\\\+\"\\s*:\\s*\\\\+\"([A-Za-z0-9_.:-]+)\\\\+\"/;\n\n/**\n * Options for the JSON-text readers: `json5` widens the key rule to JSON5's;\n * `markdown` also reads the markdown-escaped key (`\"\\_\\_kind\"`, P8);\n * `escaped` also reads the backslash-escaped key of a string-held kind\n * (`\\\"__kind\\\"`, R3 round 6 — screen and search text only).\n */\nexport interface KindTextOptions {\n  json5?: boolean;\n  markdown?: boolean;\n  escaped?: boolean;\n  /** Also read a Python-repr key (`{'__kind': 'flashcard_set'}`) — text contexts only (K4). */\n  python?: boolean;\n  /** Also read a typographic-quoted key (`“__kind”`, `‘__kind’`) — text contexts only (round 8). */\n  smart?: boolean;\n  /** Also read an HTML-entity key (`&quot;__kind&quot;`, `&#34;__kind&#34;`) — text contexts only (round 8). */\n  entity?: boolean;\n  /**\n   * Also read a JavaScript object-literal key (`{ __kind: 'flashcard_set' }` —\n   * what Node's console prints, a sandbox tool's output) — key position with a\n   * quoted value, text contexts only (L-2, round 9).\n   */\n  js?: boolean;\n}\n\n/**\n * EVERY spelling of the key a reader still sees as `__kind` (owner ruling,\n * round 8): literal, `\\u005f`-escaped, markdown-escaped `\\_\\_kind`,\n * backslash-escaped quotes `\\\"__kind\\\"`, zero-width characters anywhere in\n * the key, Python repr `'__kind'`, typographic quotes `“__kind”` and HTML\n * entities `&quot;__kind&quot;`. THE options every TEXT context (prose,\n * titles, exports, previews, the screen scan) passes; JSON contexts keep the\n * default, where those spellings are string VALUES (and `valueCarriesKind`\n * reads the strings with this set).\n */\nexport const ALL_KIND_SPELLINGS: Readonly<KindTextOptions> = Object.freeze({\n  markdown: true,\n  escaped: true,\n  python: true,\n  smart: true,\n  entity: true,\n  js: true,\n});\n\n/**\n * THE CONVERSION BOUNDARY (owner ruling, round 10): only REAL JSON is ever\n * converted — the literal key, its `\\u005f` escapes, the markdown-escaped\n * `\"\\_\\_kind\"` (markdown draws it as the literal key) and zero-width characters\n * inside the key. Every other spelling in free text (backslash-escaped\n * `\\\"__kind\\\"` in prose, Python repr, a JavaScript literal, typographic quotes,\n * entities) is DETECTION ONLY: the leak sentinel reports it, every renderer,\n * converter, label and export leaves it exactly as written. Real output emits\n * JSON; guessing at free text dropped and reordered people's words (rounds 8–9).\n * A kind held as a JSON STRING inside JSON is read by parsing (`textCarriesKind`).\n */\nexport const JSON_KIND_SPELLINGS: Readonly<KindTextOptions> = Object.freeze({ markdown: true });\n\n/** Whether text holds the key spelled as real JSON (`JSON_KIND_SPELLINGS`). */\nexport function hasJsonKindKey(source: string): boolean {\n  return hasKindKey(source, JSON_KIND_SPELLINGS);\n}\n\n/**\n * Whether text holds the key ONLY in a detection-only spelling (round 10):\n * a spelling the sentinel reports and no renderer converts.\n */\nexport function hasDetectionOnlyKindKey(source: string): boolean {\n  return !hasJsonKindKey(source) && (hasKindKey(source, ALL_KIND_SPELLINGS) || hasExoticKindKey(source));\n}\n\n/**\n * Invisible characters a model, a copy-paste or a sanitizer can leave INSIDE\n * the key (`\"__\\u200Bkind\"`): the screen still reads `\"__kind\"`, so the\n * detector reads through them (K4, round 7). Zero-width space / non-joiner /\n * joiner, word joiner, BOM / zero-width no-break space, soft hyphen.\n */\nconst ZERO_WIDTH = /[\\u200B-\\u200D\\u2060\\uFEFF\\u00AD]/g;\nconst HAS_ZERO_WIDTH = /[\\u200B-\\u200D\\u2060\\uFEFF\\u00AD]/;\n\n/** The text without zero-width characters (unchanged — same string — when it has none). */\nexport function withoutZeroWidth(text: string): string {\n  return HAS_ZERO_WIDTH.test(text) ? text.replace(ZERO_WIDTH, \"\") : text;\n}\n\n/**\n * The key as a PYTHON REPR spells it (K4, round 7): `{'__kind': 'flashcard_set'}`\n * — what `str(dict)` prints into a server error or a tool's string result.\n * Text contexts only, and only in key position (after `{` or `,`) with a\n * quoted value, so prose that says `'__kind':` is never one.\n */\nconst PYTHON_KIND_KEY = /[{,]\\s*'__kind'\\s*:\\s*['\"]/;\nconst PYTHON_KIND_SLUG = /[{,]\\s*'__kind'\\s*:\\s*(?:'([A-Za-z0-9_.:-]+)'|\"([A-Za-z0-9_.:-]+)\")/;\n\n/** Typographic quotes a smart-quoting editor or model writes for `\"` and `'`. */\nconst SMART_DOUBLE = \"\\u201C\\u201D\\u201E\\u201F\\u2033\";\nconst SMART_SINGLE = \"\\u2018\\u2019\\u201A\\u201B\\u2032\";\n/** The key in typographic quotes (`“__kind”:`, `‘__kind’:`) — key position only. */\nconst SMART_KIND_KEY = new RegExp(`[${SMART_DOUBLE}${SMART_SINGLE}]__kind[${SMART_DOUBLE}${SMART_SINGLE}\"']\\\\s*:`);\n/** The key in HTML entities (`&quot;__kind&quot;:`, `&#34;`, `&#x22;`, `&#39;`, `&apos;`). */\nconst ENTITY_QUOTE = \"&(?:[qQ][uU][oO][tT]|[aA][pP][oO][sS]|#0*3[49]|#[xX]0*2[27]);\";\nconst ENTITY_KIND_KEY = new RegExp(`${ENTITY_QUOTE}__kind${ENTITY_QUOTE}\\\\s*:`);\n\n/** Whether a fence language is JSON5 (the one context that widens the key rule). */\nexport function isJson5Language(lang: string | null | undefined): boolean {\n  return (lang ?? \"\").trim().toLowerCase() === \"json5\";\n}\n\nexport function hasKindKey(source: string, options: KindTextOptions = {}): boolean {\n  const text = withoutZeroWidth(source);\n  return (\n    KIND_KEY.test(text) ||\n    (options.python === true && PYTHON_KIND_KEY.test(text)) ||\n    (options.json5 === true && JSON5_KIND_KEY.test(text)) ||\n    (options.markdown === true && MARKDOWN_KIND_KEY.test(text)) ||\n    (options.escaped === true && ESCAPED_KIND_KEY.test(text)) ||\n    (options.smart === true && SMART_KIND_KEY.test(text)) ||\n    (options.entity === true && ENTITY_KIND_KEY.test(text)) ||\n    (options.js === true && JS_KIND_KEY.test(text)) ||\n    // Every realistic spelling COMBINED in one key (escaped + zero-width,\n    // repr + zero-width, `\"\\__kind\"`, `{\\\"\\\\_\\\\_kind\\\"…}` — L-1, round 9).\n    (options.escaped === true && options.python === true && options.smart === true && options.markdown === true &&\n      hasSpelledKey(source))\n  );\n}\n\n/** The key as a JavaScript object literal spells it: unquoted, key position, quoted value (L-2). */\nconst JS_KIND_KEY = /[{,]\\s*__kind\\s*:\\s*['\"]/;\n\n/**\n * EXOTIC spellings (owner ruling, round 9): double HTML entities\n * (`&amp;quot;`), `&#95;` underscores, upper-case / padded entities, fullwidth\n * quotes, bidi marks, invisible operators and combining joiners inside the key.\n * DETECTION ONLY — the leak sentinel and the frame judge report them; no\n * renderer converts them (an adversarial spelling is a defect to see, not a\n * shape to guess at).\n */\nexport function hasExoticKindKey(text: string): boolean {\n  if (!/kind|&#|&amp;|\\uFF3F/i.test(text)) return false;\n  let plain = text\n    .replace(EXOTIC_INVISIBLE, \"\")\n    .replace(/\\uFF02/g, '\"')\n    .replace(/\\uFF07/g, \"'\")\n    .replace(/\\uFF3F/g, \"_\");\n  for (let pass = 0; pass < 3 && plain.includes(\"&\"); pass++) plain = plain.replace(LOOSE_ENTITY, looseEntity);\n  return plain !== text && hasKindKey(plain, ALL_KIND_SPELLINGS);\n}\n\nconst EXOTIC_INVISIBLE = /[\\p{Cf}\\u034F\\u115F\\u1160\\u17B4\\u17B5\\u180E\\u3164\\uFFA0]/gu;\nconst LOOSE_ENTITY = /&(#[xX][0-9a-fA-F]{1,8}|#\\d{1,8}|[A-Za-z]{2,8});/g;\nconst LOOSE_NAMED: Record<string, string> = { quot: '\"', apos: \"'\", amp: \"&\", lt: \"<\", gt: \">\", lowbar: \"_\" };\nfunction looseEntity(whole: string, body: string): string {\n  if (body.startsWith(\"#\")) {\n    const code = body[1] === \"x\" || body[1] === \"X\" ? Number.parseInt(body.slice(2), 16) : Number.parseInt(body.slice(1), 10);\n    return Number.isFinite(code) && code > 0 && code < 0x110000 ? String.fromCodePoint(code) : whole;\n  }\n  return LOOSE_NAMED[body.toLowerCase()] ?? whole;\n}\n\n/** Whether TEXT holds the key in ANY spelling a reader sees as `__kind` (round 8). */\nexport function hasKindKeyAnySpelling(source: string): boolean {\n  return hasKindKey(source, ALL_KIND_SPELLINGS);\n}\n\n/** The key, then its string value (escapes allowed), captured whole. */\nconst KIND_SLUG = new RegExp(\n  String.raw`(?<!\\\\)\"${KIND_KEY_BODY}\"\\s*:\\s*(\"(?:[^\"\\\\]|\\\\.)*\")`,\n);\n\n/** A slug the loader may name: letters, digits and `_.:-` only. */\nconst SLUG_TEXT = /^[A-Za-z0-9_.:-]+$/;\n\n/** Whether a `__kind` value is a readable slug (ruling (c): anything else is broken output). */\nexport function isKindSlug(value: unknown): value is string {\n  return typeof value === \"string\" && SLUG_TEXT.test(value);\n}\n\n/**\n * The first complete `__kind` slug in the text, or null. For a LOADER only —\n * which kind's skeleton to show while the region arrives. Never an identity:\n * the parser owns which kind a region actually is.\n */\nexport function firstKindSlug(source: string, options: KindTextOptions = {}): string | null {\n  const text = withoutZeroWidth(source);\n  let literal = KIND_SLUG.exec(text)?.[1];\n  if (!literal && (options.json5 || options.js)) {\n    const json5 = JSON5_KIND_SLUG.exec(text)?.[1];\n    literal = json5?.startsWith(\"'\") ? JSON.stringify(json5.slice(1, -1)) : json5;\n  }\n  if (!literal && options.escaped) {\n    const escaped = ESCAPED_KIND_SLUG.exec(text)?.[1];\n    if (escaped) return escaped;\n  }\n  if (!literal && options.python) {\n    const python = PYTHON_KIND_SLUG.exec(text);\n    if (python) return python[1] ?? python[2] ?? null;\n  }\n  if (!literal && (options.smart || options.entity || options.markdown)) {\n    const canonical = normalizeKindSpellings(text);\n    if (canonical !== text) return firstKindSlug(canonical, { ...options, smart: false, entity: false, markdown: false });\n  }\n  if (!literal) return null;\n  let slug: unknown;\n  try {\n    slug = JSON.parse(literal);\n  } catch {\n    return null;\n  }\n  return typeof slug === \"string\" && SLUG_TEXT.test(slug) ? slug : null;\n}\n\n/**\n * A text that ENDS in an object key that has reached `\"__k` and is still a\n * prefix of `\"__kind\"` (or is `\"__kind\"` waiting for its colon) — V6: the\n * frames before the colon of a LATER `__kind` key (`[{\"x\":1}, {\"__kind`,\n * `{\"data\":{\"__kind`) could be a kind, so they hold the loader instead of\n * flashing raw. Key position only (after `{` or `,` inside an object): a\n * string VALUE that starts `\"__k` is never a key. `\"_id\"`, `\"__type\"` never\n * reach the threshold; `\"__key\"` holds for the one frame before its `e`.\n */\nconst PARTIAL_KIND_KEY_TAIL = /\"__k(?:i(?:n(?:d(?:\"\\s*)?)?)?)?$/;\n\nexport function endsInPartialKindKey(text: string): boolean {\n  const tail = PARTIAL_KIND_KEY_TAIL.exec(text);\n  if (!tail) return false;\n  return isObjectKeyPosition(text, tail.index);\n}\n\n/** Whether the `\"` at `quoteAt` opens an object key (structural scan, strings opaque). */\nfunction isObjectKeyPosition(text: string, quoteAt: number): boolean {\n  const stack: string[] = [];\n  let expectKey = false;\n  let inString = false;\n  let escaped = false;\n  for (let i = 0; i < quoteAt; i++) {\n    const ch = text[i];\n    if (inString) {\n      if (escaped) escaped = false;\n      else if (ch === \"\\\\\") escaped = true;\n      else if (ch === '\"') inString = false;\n      continue;\n    }\n    if (ch === '\"') {\n      inString = true;\n      expectKey = false;\n    } else if (ch === \"{\" || ch === \"[\") {\n      stack.push(ch);\n      expectKey = ch === \"{\";\n    } else if (ch === \"}\" || ch === \"]\") {\n      stack.pop();\n      expectKey = false;\n    } else if (ch === \",\") {\n      expectKey = stack[stack.length - 1] === \"{\";\n    } else if (ch === \":\") {\n      expectKey = false;\n    }\n  }\n  return !inString && expectKey;\n}\n\n/**\n * The text after any LEADING JSONC comments and whitespace (`// note`,\n * `/* … *\\/`) — a ```jsonc / ```json / unlabelled fence that opens with a\n * comment still decides on its first key (X3). An unterminated leading\n * comment (still arriving) leaves nothing: undecided, never raw.\n */\nexport function withoutLeadingJsonComments(text: string): string {\n  let i = 0;\n  for (;;) {\n    i = skipWs(text, i);\n    if (text.startsWith(\"//\", i)) {\n      const end = text.indexOf(\"\\n\", i);\n      if (end === -1) return \"\";\n      i = end + 1;\n    } else if (text.startsWith(\"/*\", i)) {\n      const end = text.indexOf(\"*/\", i + 2);\n      if (end === -1) return \"\";\n      i = end + 2;\n    } else {\n      return i === 0 ? text : text.slice(i);\n    }\n  }\n}\n\nexport function jsonKindSignal(\n  text: string | null | undefined,\n  options: KindTextOptions = {},\n): JsonKindSignal {\n  const source = withoutLeadingJsonComments(text ?? \"\");\n  if (hasKindKey(source, options)) return slugNamesNoKind(source, options) ? \"not_kind\" : \"kind\";\n\n  let i = skipWs(source, 0);\n  if (i >= source.length) return \"undecided\";\n\n  // A list of objects: decide on the first element's first key.\n  if (source[i] === \"[\") {\n    i = skipWs(source, i + 1);\n    if (i >= source.length) return capped(source);\n    if (source[i] !== \"{\") return notKindUnlessPartialKey(source);\n  }\n  if (source[i] !== \"{\") return notKindUnlessPartialKey(source);\n\n  i = skipWs(source, i + 1);\n  if (i >= source.length) return capped(source);\n  // `{}` or not an object key\n  if (source[i] !== '\"') return notKindUnlessPartialKey(source);\n\n  // Read the first key, honoring escapes; unterminated → still arriving.\n  let j = i + 1;\n  while (j < source.length) {\n    const ch = source[j];\n    if (ch === \"\\\\\") {\n      j += 2;\n      continue;\n    }\n    if (ch === '\"') {\n      if (withoutZeroWidth(decodedKey(source.slice(i, j + 1))) !== \"__kind\") {\n        return notKindUnlessPartialKey(source);\n      }\n      return slugNamesNoKind(source, options) ? \"not_kind\" : \"kind\";\n    }\n    j++;\n  }\n  return capped(source);\n}\n\n/** The region's first complete slug is one the registry measured as no kind (rule 28). */\nfunction slugNamesNoKind(source: string, options: KindTextOptions): boolean {\n  if (kindSlugOracle === null) return false;\n  const slug = firstKindSlug(source, options);\n  return slug !== null && namesNoKind(slug);\n}\n\n/** A first key decided against `__kind` — unless a later key is arriving as one (V6). */\nfunction notKindUnlessPartialKey(source: string): JsonKindSignal {\n  return endsInPartialKindKey(source) ? \"undecided\" : \"not_kind\";\n}\n\n/** A complete JSON key literal (quotes included), decoded; the raw body if it will not parse. */\nfunction decodedKey(literal: string): string {\n  try {\n    const key: unknown = JSON.parse(literal);\n    return typeof key === \"string\" ? key : literal.slice(1, -1);\n  } catch {\n    return literal.slice(1, -1);\n  }\n}\n\nfunction capped(source: string): JsonKindSignal {\n  return source.length > UNDECIDED_LIMIT_CHARS ? \"not_kind\" : \"undecided\";\n}\n\nfunction skipWs(source: string, from: number): number {\n  let i = from;\n  while (i < source.length && /\\s/.test(source[i] ?? \"\")) i++;\n  return i;\n}\n\n/**\n * A ```json5 body as plain JSON, when the difference is only what JSON5 adds\n * that models actually write: comments, unquoted identifier keys, single-quoted\n * keys/strings and trailing commas. Null when the result still will not parse.\n */\nexport function json5AsJson(text: string): string | null {\n  let out = \"\";\n  let i = 0;\n  while (i < text.length) {\n    const ch = text[i]!;\n    if (ch === '\"' || ch === \"'\") {\n      let j = i + 1;\n      let body = \"\";\n      while (j < text.length && text[j] !== ch) {\n        if (text[j] === \"\\\\\") {\n          body += text[j]! + (text[j + 1] ?? \"\");\n          j += 2;\n          continue;\n        }\n        body += ch === \"'\" && text[j] === '\"' ? '\\\\\"' : text[j]!;\n        j++;\n      }\n      out += `\"${body}\"`;\n      i = j + 1;\n      continue;\n    }\n    if (text.startsWith(\"//\", i)) {\n      const end = text.indexOf(\"\\n\", i);\n      i = end === -1 ? text.length : end;\n      continue;\n    }\n    if (text.startsWith(\"/*\", i)) {\n      const end = text.indexOf(\"*/\", i + 2);\n      i = end === -1 ? text.length : end + 2;\n      continue;\n    }\n    const key = /^[A-Za-z_$][\\w$]*(?=\\s*:)/.exec(text.slice(i));\n    if (key && /[{,]\\s*$/.test(out)) {\n      out += `\"${key[0]}\"`;\n      i += key[0].length;\n      continue;\n    }\n    out += ch;\n    i++;\n  }\n  out = out.replace(/,(\\s*[}\\]])/g, \"$1\");\n  try {\n    JSON.parse(out);\n    return out;\n  } catch {\n    return null;\n  }\n}\n\n/**\n * A Python repr of a dict/list (`{'__kind': 'flashcard_set', 'ok': True}`) as\n * JSON text, or null when it is not one. Strings may be single- or\n * double-quoted; `True` / `False` / `None` become JSON literals.\n */\nexport function pythonReprAsJson(text: string): string | null {\n  let out = \"\";\n  let i = 0;\n  while (i < text.length) {\n    const ch = text[i]!;\n    if (ch === \"'\" || ch === '\"') {\n      let j = i + 1;\n      let body = \"\";\n      while (j < text.length && text[j] !== ch) {\n        if (text[j] === \"\\\\\") {\n          const next = text[j + 1] ?? \"\";\n          body += next === \"'\" ? \"'\" : `\\\\${next}`;\n          j += 2;\n          continue;\n        }\n        body += text[j] === '\"' ? '\\\\\"' : text[j]!;\n        j++;\n      }\n      if (j >= text.length) return null;\n      out += `\"${body}\"`;\n      i = j + 1;\n      continue;\n    }\n    const word = /^(?:True|False|None)\\b/.exec(text.slice(i, i + 5));\n    if (word) {\n      out += word[0] === \"True\" ? \"true\" : word[0] === \"False\" ? \"false\" : \"null\";\n      i += word[0].length;\n      continue;\n    }\n    out += ch;\n    i++;\n  }\n  try {\n    JSON.parse(out);\n    return out;\n  } catch {\n    return null;\n  }\n}\n\n/** Whether text holds a Python-repr `'__kind'` key (key position, quoted value). */\nexport function hasPythonKindKey(text: string): boolean {\n  return PYTHON_KIND_KEY.test(withoutZeroWidth(text));\n}\n\n/** Where the Python-repr value opening at `start` (`{` or `[`) closes (exclusive), or null. */\nexport function pythonBalancedEnd(text: string, start: number): number | null {\n  let depth = 0;\n  let quote: string | null = null;\n  for (let i = start; i < text.length; i++) {\n    const ch = text[i]!;\n    if (quote) {\n      if (ch === \"\\\\\") i++;\n      else if (ch === quote) quote = null;\n      continue;\n    }\n    if (ch === \"'\" || ch === '\"') quote = ch;\n    else if (ch === \"{\" || ch === \"[\") depth++;\n    else if (ch === \"}\" || ch === \"]\") {\n      depth--;\n      if (depth === 0) return i + 1;\n    }\n  }\n  return null;\n}\n\n/**\n * THE ONE SPELLING NORMALIZER (K4 round 7, widened round 8, rebuilt round 9).\n * Every text detector, converter and label function runs it (directly, or\n * through `hasKindKeyAnySpelling`) so a kind spelled any REALISTIC way the\n * screen still reads as a kind converts like any other. Each spelled region —\n * from the `{` that owns the key to where its own grammar ends — is rewritten\n * as canonical JSON:\n *\n *   zero-width in the key · HTML entities · typographic quotes ·\n *   backslash-escaped quotes (any depth) · markdown-escaped `\\_` · Python repr ·\n *   JavaScript object literal — and any combination of them in one key\n *\n * DO NO HARM (owner ruling, round 9): only characters INSIDE a matched region\n * change (a zero-width character only inside the key itself), a region never\n * reaches past the point where its grammar breaks (an unclosed region in prose\n * ends there and the text after it stays), and the scan is one linear pass.\n * Quoted source (inline code, non-JSON fences) stays as written, and a WHOLE\n * JSON text is never rewritten (a spelling inside it is a string VALUE).\n * Text with no non-canonical spelling comes back as the same string.\n */\nexport function normalizeKindSpellings(source: string): string {\n  if (!mayHoldKindKey(source)) return source;\n  // Whole JSON text: a spelling in it is a string VALUE, never rewritten.\n  if (/^[{[]/.test(source.trimStart())) {\n    try {\n      JSON.parse(source);\n      // Its own keys still read through a zero-width character (only the keys).\n      return withoutZeroWidthInKeys(source);\n    } catch {\n      // Not JSON: read on.\n    }\n  }\n  let out = \"\";\n  let cursor = 0;\n  for (const region of scanKindSpellingRegions(source)) {\n    const rewritten = canonicalRegionText(source, region);\n    if (rewritten === null) continue;\n    out += source.slice(cursor, region.rewriteStart) + rewritten;\n    cursor = region.rewriteEnd;\n  }\n  return cursor === 0 ? source : out + source.slice(cursor);\n}\n\n/** The canonical JSON a region is rewritten to by the normalizer, or null to leave it. */\nfunction canonicalRegionText(source: string, region: KindSpellingRegion): string | null {\n  if (region.family === \"lifted\") {\n    // A literal / `_` key: only a zero-width character INSIDE the key, or\n    // the markdown `\\_` the stream ingress also reads, is rewritten.\n    if (region.markdown) return region.status === \"broken\" ? closedJson(region) ?? region.decoded : region.decoded;\n    const key = source.slice(region.rewriteStart, region.rewriteEnd);\n    return region.keyText === undefined || key === region.keyText ? null : region.keyText;\n  }\n  if (region.status === \"complete\") {\n    const json = regionJson(region);\n    if (json !== null) return json;\n    return region.family === \"python\" || region.family === \"js\" ? null : region.decoded;\n  }\n  if (region.status === \"broken\") return closedJson(region) ?? region.decoded;\n  return region.family === \"python\" || region.family === \"js\" ? null : region.decoded;\n}\n\n/** How a kind key is spelled — which decoders turn its region into JSON. */\nexport type KindSpellingFamily = \"lifted\" | \"escaped\" | \"markdown\" | \"python\" | \"smart\" | \"entity\" | \"js\";\n\n/**\n * A kind region in a REALISTIC spelling (round 9). `[start, end)` is the raw\n * region (`{` to where its grammar ended); `[rewriteStart, rewriteEnd)` is what\n * the normalizer replaces (the key alone for a literal key holding only a\n * zero-width character). `status`: `complete` (balanced), `prefix` (still\n * arriving — runs to the end of the text) or `broken` (its grammar failed at\n * `end`; the text after it is NOT part of it). `decoded` is the region's text\n * with its spelling undone (still Python / JS for those families).\n */\nexport interface KindSpellingRegion {\n  start: number;\n  end: number;\n  rewriteStart: number;\n  rewriteEnd: number;\n  family: KindSpellingFamily;\n  status: \"complete\" | \"prefix\" | \"broken\";\n  decoded: string;\n  /** Whether the key carried the markdown `\\_` (the region was markdown-decoded). */\n  markdown: boolean;\n  /** A literal key's canonical text (the normalizer's whole rewrite for that family). */\n  keyText?: string;\n}\n\nconst ZW = \"[\\\\u200B-\\\\u200D\\\\u2060\\\\uFEFF\\\\u00AD]\";\n/** One underscore of the key: literal, backslash-escaped at any depth, or `_`. */\nconst KEY_UNDERSCORE = String.raw`(?:\\\\*_|\\\\u005[fF]|&#0*95;|&#[xX]0*5[fF];|&lowbar;|&UnderBar;)`;\nconst KEY_CORE = `${ZW}*${KEY_UNDERSCORE}${ZW}*${KEY_UNDERSCORE}${ZW}*k${ZW}*i${ZW}*n${ZW}*d${ZW}*`;\nconst SMART_ANY = `[${SMART_DOUBLE}${SMART_SINGLE}]`;\n\n/**\n * EVERY REALISTIC SPELLING of the key, and any combination of them (L-1,\n * round 9). Groups: 1 backslashes + 2 core (the JSON family: literal,\n * escaped at any depth, markdown-escaped, zero-width), 3 Python repr core\n * (key position, quoted value), 4 typographic-quote core, 5 HTML-entity core,\n * 6 JavaScript object-literal core (unquoted, key position, quoted value).\n */\nconst SPELLED_KEY_SOURCE = [\n  String.raw`(\\\\*)\"(${KEY_CORE})\\\\*\"\\s*:`,\n  String.raw`(?<=[{,]\\s*)'(${KEY_CORE})'\\s*:(?=\\s*['\"])`,\n  `${SMART_ANY}(${KEY_CORE})[${SMART_DOUBLE}${SMART_SINGLE}\"']\\\\s*:`,\n  `${ENTITY_QUOTE}(${KEY_CORE})${ENTITY_QUOTE}\\\\s*:`,\n  String.raw`(?<=[{,]\\s*)(${KEY_CORE})\\s*:(?=\\s*['\"])`,\n].join(\"|\");\nconst SPELLED_KEY = new RegExp(SPELLED_KEY_SOURCE);\nconst SPELLED_KEY_G = new RegExp(SPELLED_KEY_SOURCE, \"g\");\n\n/** Whether text holds the key in any realistic spelling or combination (detection, round 9). */\nfunction hasSpelledKey(text: string): boolean {\n  return mayHoldKindKey(text) && SPELLED_KEY.test(text);\n}\n\n/**\n * A cheap pre-check every scanner runs first: no key spelling can exist\n * without `kind` (or a zero-width character splitting it). Linear, no regex\n * restarts — the plain text of every frame pays only this.\n */\nexport function mayHoldKindKey(text: string): boolean {\n  return text.includes(\"kind\") || (text.includes(\"_\") && HAS_ZERO_WIDTH.test(text));\n}\n\n/** Per call: past this many regions the rest of the text is left as written (hard budget). */\nconst MAX_REGIONS_PER_CALL = 2000;\n/** How far before a `kind` the key's opening quote may sit (backslashes + zero-width + `__`). */\nconst KEY_LOOKBEHIND = 64;\n\n/** Where `kind` (or `k`+zero-width…`d`) occurs at or after `from`, or -1. */\nfunction nextKindHit(text: string, from: number, zeroWidth: boolean): number {\n  if (!zeroWidth) return text.indexOf(\"kind\", from);\n  KIND_LETTERS_G.lastIndex = from;\n  const m = KIND_LETTERS_G.exec(text);\n  return m ? m.index : -1;\n}\nconst KIND_LETTERS_G = new RegExp(`k${ZW}*i${ZW}*n${ZW}*d`, \"g\");\n\n/** The family a matched key belongs to, and its escape depth. */\nfunction keyFamily(m: RegExpExecArray): { family: KindSpellingFamily; core: string; levels: number } {\n  if (m[3] !== undefined) return { family: \"python\", core: m[3], levels: 0 };\n  if (m[4] !== undefined) return { family: \"smart\", core: m[4], levels: 0 };\n  if (m[5] !== undefined) return { family: \"entity\", core: m[5], levels: 0 };\n  if (m[6] !== undefined) return { family: \"js\", core: m[6], levels: 0 };\n  const backslashes = m[1]!.length;\n  const core = m[2]!;\n  // An entity-spelled underscore (`&#95;`) is markdown-decoded to a real key on\n  // screen but is not JSON: exotic, detection only, drawn as written.\n  if (core.includes(\"&\")) return { family: \"entity\", core, levels: 0 };\n  if (backslashes > 0) {\n    // `\\\"` is one level, `\\\\\\\"` two, `\\\\\\\\\\\\\\\"` three: 2^levels − 1 backslashes.\n    return { family: \"escaped\", core, levels: Math.min(4, Math.ceil(Math.log2(backslashes + 1))) };\n  }\n  const plain = core.replace(ZERO_WIDTH, \"\");\n  if (plain === \"__kind\" || /^\\\\u005[fF]_kind$/.test(plain)) return { family: \"lifted\", core, levels: 0 };\n  if (plain === \"\\\\_\\\\_kind\") return { family: \"lifted\", core, levels: 0 };\n  return { family: \"markdown\", core, levels: 0 };\n}\n\n/**\n * THE ONE LINEAR SCAN for kind regions in a realistic spelling (round 9):\n * every candidate is found from a `kind` occurrence, its owning `{` from a\n * forward-only brace cursor, quoted source once, and each region is decoded\n * and bounded by its own grammar in work proportional to its length. Regions\n * are returned in order and never overlap; a region's inner keys belong to it.\n * A key whose `{` grammar fails BEFORE the key is not a region (prose braces).\n */\nexport function scanKindSpellingRegions(\n  text: string,\n  options: { families?: \"json\" | \"all\"; from?: number } = {},\n): KindSpellingRegion[] {\n  const jsonOnly = options.families !== \"all\";\n  // Resume point: a region end (or 0). Scanning from a region end is exactly\n  // what the full scan does after that region, so a caller holding the regions\n  // before it may rescan only the rest (streaming frames, round 10).\n  const from = options.from ?? 0;\n  const regions: KindSpellingRegion[] = [];\n  if (!mayHoldKindKey(text)) return regions;\n  const zeroWidth = HAS_ZERO_WIDTH.test(text);\n  let quoted: Array<[number, number]> | null = null;\n  const inQuoted = (at: number) => {\n    quoted ??= quotedSourceRanges(text);\n    let lo = 0;\n    let hi = quoted.length - 1;\n    while (lo <= hi) {\n      const mid = (lo + hi) >> 1;\n      const [a, b] = quoted[mid]!;\n      if (at < a) hi = mid - 1;\n      else if (at >= b) lo = mid + 1;\n      else return true;\n    }\n    return false;\n  };\n  let cursor = from;\n  let braceScan = from;\n  let lastBrace = -1;\n  // A `{` whose grammar already ended before a key can own no later key: it is\n  // never re-read (round 10, linear time — one early brace, many mentions).\n  let deadBraceFloor = from;\n  // Round 11 (F2): looking past a broken region for its balanced close is the\n  // one step whose cost is not the region's own length — capped per call so\n  // many broken regions never each read to the end of the text.\n  const reach: ReachBudget = { left: REACH_BUDGET_FACTOR * text.length + REACH_BUDGET_FLOOR };\n  let hit = nextKindHit(text, from, zeroWidth);\n  while (hit >= 0 && regions.length < MAX_REGIONS_PER_CALL) {\n    const windowStart = Math.max(cursor, hit - KEY_LOOKBEHIND);\n    const windowEnd = Math.min(text.length, hit + KEY_LOOKBEHIND);\n    SPELLED_KEY_G.lastIndex = 0;\n    const window = text.slice(windowStart, windowEnd);\n    let m: RegExpExecArray | null = null;\n    for (let candidate = SPELLED_KEY_G.exec(window); candidate; candidate = SPELLED_KEY_G.exec(window)) {\n      if (windowStart + candidate.index + candidate[0].length > hit) {\n        m = candidate;\n        break;\n      }\n    }\n    if (!m) {\n      hit = nextKindHit(text, hit + 1, zeroWidth);\n      continue;\n    }\n    const keyAt = windowStart + m.index;\n    const keyEnd = keyAt + m[0].length;\n    const next = () => nextKindHit(text, keyEnd, zeroWidth);\n    while (braceScan < keyAt) {\n      if (text.charCodeAt(braceScan) === 123 /* { */) lastBrace = braceScan;\n      braceScan++;\n    }\n    const brace = lastBrace >= Math.max(cursor, deadBraceFloor) ? lastBrace : -1;\n    if (brace < 0 || inQuoted(keyAt) || inQuoted(brace)) {\n      hit = next();\n      continue;\n    }\n    const { family, core, levels } = keyFamily(m);\n    // Round 10: a non-JSON spelling is detection only — never a converted region.\n    if (jsonOnly && family !== \"lifted\" && family !== \"markdown\") {\n      hit = next();\n      continue;\n    }\n    const markdown = /\\\\_/.test(core) || (family === \"escaped\" && /\\\\{2}_/.test(core));\n    const plan = decodePlan(family, levels, markdown);\n    const region = boundRegion(text, brace, keyAt, plan, reach);\n    if (!region) {\n      deadBraceFloor = brace + 1;\n      hit = next();\n      continue;\n    }\n    if (family === \"lifted\" && !markdown) {\n      // Literal key: the region is only scanned (so its inner keys belong to\n      // it); the normalizer rewrites the key alone when it holds a zero-width.\n      regions.push({\n        start: brace,\n        end: region.end,\n        rewriteStart: keyAt,\n        rewriteEnd: keyEnd,\n        keyText: m[0].replace(ZERO_WIDTH, \"\"),\n        family,\n        status: region.status,\n        decoded: withoutZeroWidthInKeys(region.decoded),\n        markdown: false,\n      });\n    } else {\n      regions.push({\n        start: brace,\n        end: region.end,\n        rewriteStart: brace,\n        rewriteEnd: region.end,\n        family,\n        status: region.status,\n        decoded: withoutZeroWidthInKeys(region.decoded),\n        markdown,\n      });\n    }\n    cursor = region.end;\n    if (region.status === \"prefix\") break;\n    hit = nextKindHit(text, cursor, zeroWidth);\n  }\n  return regions;\n}\n\n/** Inside decoded text, a key spelled `__kind` with zero-width characters → `__kind` (keys only). */\nconst ZW_KEY_IN_DECODED = new RegExp(`([\"'])${ZW}*_${ZW}*_${ZW}*k${ZW}*i${ZW}*n${ZW}*d${ZW}*\\\\1(?=\\\\s*:)`, \"g\");\nfunction withoutZeroWidthInKeys(decoded: string): string {\n  return HAS_ZERO_WIDTH.test(decoded) ? decoded.replace(ZW_KEY_IN_DECODED, (key) => key.replace(ZERO_WIDTH, \"\")) : decoded;\n}\n\ninterface DecodePlan {\n  steps: SpellingStep[];\n  grammar: GrammarDialect;\n}\n\nfunction decodePlan(family: KindSpellingFamily, levels: number, markdown: boolean): DecodePlan {\n  const steps: SpellingStep[] = [];\n  if (family === \"entity\") steps.push(entityStep);\n  if (family === \"smart\") steps.push(smartStep);\n  for (let level = 0; level < levels; level++) steps.push(escapeStep);\n  if (markdown) steps.push(markdownStep);\n  const grammar: GrammarDialect =\n    family === \"js\" ? \"js\" : family === \"python\" || family === \"smart\" || family === \"entity\" ? \"python\" : \"json\";\n  return { steps, grammar };\n}\n\n/** One decoded text and, per decoded character, the raw index it came from (plus the raw end). */\ninterface DecodedText {\n  text: string;\n  map: number[];\n}\n\ntype SpellingStep = (raw: string, i: number) => [string, number];\n\nfunction decodeWith(raw: string, step: SpellingStep): DecodedText {\n  let text = \"\";\n  const map: number[] = [];\n  for (let i = 0; i < raw.length; ) {\n    const [out, consumed] = step(raw, i);\n    for (let k = 0; k < out.length; k++) map.push(i);\n    text += out;\n    i += Math.max(1, consumed);\n  }\n  map.push(raw.length);\n  return { text, map };\n}\n\n/** Every step in order, the maps composed back to the raw input. */\nfunction decodeChain(raw: string, steps: SpellingStep[]): DecodedText {\n  if (steps.length === 0) {\n    const map = new Array<number>(raw.length + 1);\n    for (let i = 0; i <= raw.length; i++) map[i] = i;\n    return { text: raw, map };\n  }\n  let current = decodeWith(raw, steps[0]!);\n  for (let s = 1; s < steps.length; s++) {\n    const next = decodeWith(current.text, steps[s]!);\n    const prior = current.map;\n    current = { text: next.text, map: next.map.map((at) => prior[at]!) };\n  }\n  return current;\n}\n\nconst ENTITY_STEP_RE = /^&(?:(quot|apos|amp|lt|gt|lowbar|UnderBar)|#(\\d{1,6})|#[xX]([0-9a-fA-F]{1,6}));/i;\nconst NAMED_ENTITIES: Record<string, string> = { quot: '\"', apos: \"'\", amp: \"&\", lt: \"<\", gt: \">\", lowbar: \"_\", underbar: \"_\" };\nconst ESCAPE_CHARS: Record<string, string> = { '\"': '\"', \"\\\\\": \"\\\\\", \"/\": \"/\", n: \"\\n\", t: \"\\t\", r: \"\\r\", b: \"\", f: \"\" };\n\nconst entityStep: SpellingStep = (raw, i) => {\n  if (raw[i] !== \"&\") return [raw[i]!, 1];\n  const m = ENTITY_STEP_RE.exec(raw.slice(i, i + 12));\n  if (!m) return [\"&\", 1];\n  const ch = m[1] ? NAMED_ENTITIES[m[1].toLowerCase()]! : String.fromCodePoint(Number.parseInt(m[2] ?? m[3]!, m[2] ? 10 : 16));\n  return [ch, m[0].length];\n};\nconst smartStep: SpellingStep = (raw, i) => {\n  const ch = raw[i]!;\n  if (SMART_DOUBLE.includes(ch)) return ['\"', 1];\n  if (SMART_SINGLE.includes(ch)) return [\"'\", 1];\n  return [ch, 1];\n};\nconst escapeStep: SpellingStep = (raw, i) => {\n  if (raw[i] !== \"\\\\\") return [raw[i]!, 1];\n  const next = raw[i + 1] ?? \"\";\n  if (next in ESCAPE_CHARS) return [ESCAPE_CHARS[next]!, 2];\n  if (next === \"u\" && /^[0-9a-fA-F]{4}$/.test(raw.slice(i + 2, i + 6))) return [raw.slice(i, i + 6), 6];\n  return [raw.slice(i, i + 2), 2];\n};\nconst markdownStep: SpellingStep = (raw, i) => (raw[i] === \"\\\\\" && raw[i + 1] === \"_\" ? [\"_\", 2] : [raw[i]!, 1]);\n\n/** Smallest decode window; it grows ×4 until the region's grammar settles inside it. */\nconst FIRST_WINDOW = 128;\n\n/**\n * Characters one scan may read BEYOND broken regions' grammar breaks, looking\n * for their balanced closes (round 11, F2): `4 × text + 64 KB`. A real message\n * holds a few malformed objects and never comes near it; '{\"a\":[1,{\"__kind\":\"x\" 1 [ '\n * × 6 000 read the rest of the text per region (23.5 s). Once spent, a broken\n * region ends at its own break (its honest broken bound).\n */\nconst REACH_BUDGET_FACTOR = 4;\nconst REACH_BUDGET_FLOOR = 65_536;\ninterface ReachBudget {\n  left: number;\n}\n\n/**\n * Decode and bound the region whose `{` is at `brace`: windowed, so the work is\n * proportional to the region, never to the rest of the text. Null when the\n * grammar fails before the key (the `{` is not the key's object).\n */\nfunction boundRegion(\n  text: string,\n  brace: number,\n  keyAt: number,\n  plan: DecodePlan,\n  reach: ReachBudget = { left: Number.POSITIVE_INFINITY },\n): { end: number; status: KindSpellingRegion[\"status\"]; decoded: string } | null {\n  for (let width = FIRST_WINDOW; ; width *= 4) {\n    const hi = Math.min(text.length, brace + width);\n    const atEnd = hi === text.length;\n    const decoded = decodeChain(text.slice(brace, hi), plan.steps);\n    const keyDecoded = firstAtOrAfter(decoded.map, keyAt - brace);\n    const verdict = kindGrammar(decoded.text, plan.grammar);\n    if (verdict.status === \"complete\") {\n      if (verdict.end <= keyDecoded) return null;\n      return { end: brace + decoded.map[verdict.end]!, status: \"complete\", decoded: decoded.text.slice(0, verdict.end) };\n    }\n    if (verdict.status === \"broken\") {\n      // A break at the window edge may be a cut escape: look further.\n      if (!atEnd && decoded.map[verdict.at]! >= hi - brace - 16) continue;\n      if (!verdict.prose) {\n        // Malformed JSON, not prose: its balanced close bounds it ONLY when that\n        // span reads as JSON once trailing commas go (round 10 — a stray `}`\n        // later in the prose never extends it); otherwise it ends at its cut.\n        const end = balancedEnd(decoded.text, plan.grammar !== \"json\");\n        if (end === null && !atEnd) {\n          // Each wider window re-reads the span past the break: charge it.\n          const past = hi - brace - verdict.at;\n          if (reach.left > past) {\n            reach.left -= past;\n            continue;\n          }\n        }\n        if (end !== null && end > keyDecoded && lenientlyParses(decoded.text.slice(0, end), plan.grammar)) {\n          return { end: brace + decoded.map[end]!, status: \"complete\", decoded: decoded.text.slice(0, end) };\n        }\n      }\n      // At the end of the text, a half-typed escape or entity (`\\`, `&quo`)\n      // is still arriving, not broken.\n      if (atEnd && ARRIVING_SPELLING_TAIL.test(text.slice(brace + decoded.map[verdict.at]!))) {\n        if (verdict.at <= keyDecoded) return null;\n        return { end: text.length, status: \"prefix\", decoded: decoded.text };\n      }\n      if (verdict.cut <= keyDecoded) return null;\n      return { end: brace + decoded.map[verdict.cut]!, status: \"broken\", decoded: decoded.text.slice(0, verdict.cut) };\n    }\n    if (!atEnd) continue;\n    return { end: text.length, status: \"prefix\", decoded: decoded.text };\n  }\n}\n\n/**\n * Past this many characters an open bare-JSON region is not re-read for a\n * prose break (a hot-path budget: the check is linear in the region, run per\n * line / fragment). A fragment that breaks into prose does so within its first\n * lines; a long region is real JSON streaming.\n */\nexport const BARE_REGION_GRAMMAR_BUDGET = 16_384;\n\n/**\n * Whether an open bare-JSON region's text has BROKEN INTO PROSE by its own JSON\n * grammar (round 10, C1): `{\"status\": \"ok\", \"items\": [` then a line of words,\n * `{\\\"__kind\\\":…} and the rest`, `{ some code`. Such a region was never JSON:\n * it reads as text. THE one answer the live accumulator (per line, budgeted)\n * and the reload splitter (whole region, `firstBudget` — the same first 16 KB\n * the live check reads) share, so live ≡ reload (round 11, H1). A region still\n * validly open (or complete) is not broken.\n */\nexport function bareRegionBreaksIntoProse(text: string, options: { firstBudget?: boolean } = {}): boolean {\n  let region = text;\n  if (region.length > BARE_REGION_GRAMMAR_BUDGET) {\n    if (!options.firstBudget) return false;\n    region = region.slice(0, BARE_REGION_GRAMMAR_BUDGET);\n  }\n  const start = region.search(/\\S/);\n  if (start < 0) return false;\n  const verdict = kindGrammar(region, \"json\", start);\n  return verdict.status === \"broken\" && verdict.prose;\n}\n\n/** Whether a balanced span reads as JSON (or as its dialect) once trailing commas are dropped. */\nfunction lenientlyParses(span: string, grammar: GrammarDialect): boolean {\n  const body = span.replace(/,(\\s*[}\\]])/g, \"$1\");\n  if (grammar !== \"json\") return true;\n  try {\n    JSON.parse(body);\n    return true;\n  } catch {\n    return false;\n  }\n}\n\n/** The end (exclusive) of the quote-aware balanced value opening at 0, or null. */\nfunction balancedEnd(text: string, singleQuotes: boolean): number | null {\n  let depth = 0;\n  let quote = \"\";\n  for (let i = 0; i < text.length; i++) {\n    const ch = text[i]!;\n    if (quote) {\n      if (ch === \"\\\\\") i++;\n      else if (ch === quote) quote = \"\";\n      continue;\n    }\n    if (ch === '\"' || (singleQuotes && ch === \"'\")) quote = ch;\n    else if (ch === \"{\" || ch === \"[\") depth++;\n    else if (ch === \"}\" || ch === \"]\") {\n      depth--;\n      if (depth === 0) return i + 1;\n    }\n  }\n  return null;\n}\n\n/**\n * Where a LITERAL kind object (`text` opens at its `{`) breaks into prose —\n * `{\"__kind\":\"note\",\"title\":\"Hi\" and then…` — after its key: the end of the\n * region, or null (complete, still arriving, or merely malformed). THE one\n * answer the converters, the prose leaf and the live accumulator share, so a\n * settled unclosed object reads the same live and reloaded (L-4, round 9).\n */\nexport function kindObjectProseBreak(text: string): number | null {\n  const key = text.search(LITERAL_KIND_KEY);\n  if (key < 0) return null;\n  const verdict = kindGrammar(text);\n  return verdict.status === \"broken\" && verdict.prose && verdict.cut > key ? verdict.cut : null;\n}\nconst LITERAL_KIND_KEY = new RegExp(String.raw`(?<!\\\\)\"${KIND_KEY_BODY}\"\\s*:`);\n\n/** The text's tail after a break that is a spelling still typing: a lone `\\` run or a partial entity. */\nconst ARRIVING_SPELLING_TAIL = /^(?:\\\\+\"?|&#?[A-Za-z0-9]{0,6})$/;\n\n/** The first index whose map value is at least `raw` (maps are non-decreasing). */\nfunction firstAtOrAfter(map: number[], raw: number): number {\n  let lo = 0;\n  let hi = map.length - 1;\n  while (lo < hi) {\n    const mid = (lo + hi) >> 1;\n    if (map[mid]! < raw) lo = mid + 1;\n    else hi = mid;\n  }\n  return lo;\n}\n\n/** Which JSON-like grammar bounds a region: strict JSON, Python repr, or a JavaScript literal. */\nexport type GrammarDialect = \"json\" | \"python\" | \"js\";\n\nexport type KindGrammarVerdict =\n  | { status: \"complete\"; end: number }\n  | { status: \"prefix\" }\n  | { status: \"broken\"; at: number; cut: number; prose: boolean };\n\n/**\n * Where a JSON-like value opening at 0 ends by its OWN grammar (H-1, round 9):\n * `complete` at its balanced close, `prefix` when the text ends while it is\n * still valid (arriving), or `broken` at the first character that cannot\n * continue it — `cut` is the end of the last whole token before that (after a\n * value, a `,`, or an opener), so the text after `cut` is never part of it.\n * A raw newline inside a string breaks it (JSON strings never hold one), so an\n * unclosed string never runs past its line. One pass, no allocation per char.\n */\nexport function kindGrammar(\n  s: string,\n  dialect: GrammarDialect = \"json\",\n  from = 0,\n): KindGrammarVerdict {\n  const closers: number[] = [];\n  const singleQuotes = dialect !== \"json\";\n  const bareKeys = dialect === \"js\";\n  const trailingCommas = dialect !== \"json\";\n  // 0 value, 1 value-or-close, 2 key-or-close, 3 colon, 4 after-value\n  let expect = 0;\n  let lastGood = from;\n  const n = s.length;\n  // A break is PROSE when what stops the value is a word (or a newline inside\n  // a string) — text after an unclosed object — not JSON punctuation, which is\n  // malformed JSON (a trailing comma, a missing comma) and keeps its old reading.\n  const broken = (at: number): KindGrammarVerdict => ({\n    status: \"broken\",\n    at,\n    cut: lastGood,\n    prose: !/^[{}[\\]:,\"'0-9.+-]$/.test(s[at] ?? \"\"),\n  });\n  let i = from;\n  while (i < n) {\n    const c = s.charCodeAt(i);\n    if (c === 32 || c === 9 || c === 10 || c === 13) {\n      i++;\n      continue;\n    }\n    if (expect === 4 || expect === 1 || expect === 2) {\n      if (c === 125 /* } */ || c === 93 /* ] */) {\n        if (closers.length === 0 || closers[closers.length - 1] !== c) return broken(i);\n        if (expect === 4 || trailingCommas || lastCharWasOpener(s, i)) {\n          closers.pop();\n          i++;\n          lastGood = i;\n          if (closers.length === 0) return { status: \"complete\", end: i };\n          expect = 4;\n          continue;\n        }\n        return broken(i);\n      }\n      if (expect === 4) {\n        if (c !== 44 /* , */) return broken(i);\n        i++;\n        lastGood = i;\n        expect = closers[closers.length - 1] === 125 ? 2 : 1;\n        continue;\n      }\n    }\n    if (expect === 3) {\n      if (c !== 58 /* : */) return broken(i);\n      i++;\n      expect = 0;\n      continue;\n    }\n    const keyPosition = expect === 2;\n    if (c === 34 /* \" */ || (singleQuotes && c === 39) /* ' */) {\n      let j = i + 1;\n      for (;;) {\n        if (j >= n) return { status: \"prefix\" };\n        const d = s.charCodeAt(j);\n        if (d === 92 /* \\ */) {\n          j += 2;\n          continue;\n        }\n        if (d === 10 || d === 13) return broken(j);\n        if (d === c) break;\n        j++;\n      }\n      i = j + 1;\n      if (keyPosition) expect = 3;\n      else {\n        expect = 4;\n        lastGood = i;\n      }\n      continue;\n    }\n    if (keyPosition) {\n      if (!bareKeys || !isIdentStart(c)) return broken(i);\n      let j = i + 1;\n      while (j < n && isIdentPart(s.charCodeAt(j))) j++;\n      if (j >= n) return { status: \"prefix\" };\n      i = j;\n      expect = 3;\n      continue;\n    }\n    if (c === 123 /* { */ || c === 91 /* [ */) {\n      closers.push(c === 123 ? 125 : 93);\n      i++;\n      lastGood = i;\n      expect = c === 123 ? 2 : 1;\n      continue;\n    }\n    if (c === 45 /* - */ || (c >= 48 && c <= 57)) {\n      let j = i + 1;\n      while (j < n && /[0-9eE.+-]/.test(s[j]!)) j++;\n      if (j >= n) return { status: \"prefix\" };\n      i = j;\n      lastGood = i;\n      expect = 4;\n      continue;\n    }\n    if (isIdentStart(c)) {\n      let j = i + 1;\n      while (j < n && isIdentPart(s.charCodeAt(j))) j++;\n      const word = s.slice(i, j);\n      if (j >= n) return VALUE_WORDS[dialect].some((w) => w.startsWith(word)) ? { status: \"prefix\" } : broken(i);\n      if (!VALUE_WORDS[dialect].includes(word)) return broken(i);\n      i = j;\n      lastGood = i;\n      expect = 4;\n      continue;\n    }\n    return broken(i);\n  }\n  return { status: \"prefix\" };\n}\n\nconst VALUE_WORDS: Record<GrammarDialect, string[]> = {\n  json: [\"true\", \"false\", \"null\"],\n  python: [\"True\", \"False\", \"None\", \"true\", \"false\", \"null\"],\n  js: [\"true\", \"false\", \"null\", \"undefined\", \"NaN\", \"Infinity\"],\n};\n\nfunction isIdentStart(c: number): boolean {\n  return (c >= 65 && c <= 90) || (c >= 97 && c <= 122) || c === 95 || c === 36;\n}\nfunction isIdentPart(c: number): boolean {\n  return isIdentStart(c) || (c >= 48 && c <= 57);\n}\n/** Whether the last non-space character before `at` opens a container (`{}` / `[]` are always fine). */\nfunction lastCharWasOpener(s: string, at: number): boolean {\n  for (let k = at - 1; k >= 0; k--) {\n    const c = s.charCodeAt(k);\n    if (c === 32 || c === 9 || c === 10 || c === 13) continue;\n    return c === 123 || c === 91;\n  }\n  return false;\n}\n\nconst JSON_ONLY_FAMILIES = new Set<KindSpellingFamily>([\"lifted\", \"escaped\", \"markdown\"]);\n\n/** A complete region as JSON text (Python / JS converted), or null when it will not read. */\nexport function regionJson(region: Pick<KindSpellingRegion, \"family\" | \"decoded\">): string | null {\n  const text = region.decoded;\n  if (region.family === \"js\") return json5AsJson(text);\n  if (region.family !== \"python\") {\n    try {\n      JSON.parse(text);\n      return text;\n    } catch {\n      // A repr-shaped body (single quotes, True/None) reads below.\n    }\n  }\n  return pythonReprAsJson(text);\n}\n\n/**\n * A BROKEN (settled, unclosed) region closed where its grammar ended: a\n * dangling `,` or `key:` dropped, every open container closed — the reading\n * the label is drawn from. Null when even that will not read.\n */\nexport function closedJson(region: Pick<KindSpellingRegion, \"family\" | \"decoded\">): string | null {\n  let body = region.decoded.replace(/\\s+$/, \"\");\n  body = body.replace(/,?\\s*(?:\"(?:[^\"\\\\]|\\\\.)*\"|'(?:[^'\\\\]|\\\\.)*'|[A-Za-z_$][\\w$]*)\\s*:\\s*$/, \"\");\n  body = body.replace(/,\\s*$/, \"\");\n  const closers: string[] = [];\n  let quote = \"\";\n  for (let i = 0; i < body.length; i++) {\n    const ch = body[i]!;\n    if (quote) {\n      if (ch === \"\\\\\") i++;\n      else if (ch === quote) quote = \"\";\n      continue;\n    }\n    if (ch === '\"' || (ch === \"'\" && !JSON_ONLY_FAMILIES.has(region.family))) quote = ch;\n    else if (ch === \"{\") closers.push(\"}\");\n    else if (ch === \"[\") closers.push(\"]\");\n    else if (ch === \"}\" || ch === \"]\") closers.pop();\n  }\n  if (quote) return null;\n  return regionJson({ family: region.family, decoded: body + closers.reverse().join(\"\") });\n}\n\n/**\n * The VALUE form of the same question, for renderers handed parsed data\n * instead of text (the value grid, the JSON viewers): does this value carry a\n * kind anywhere — an object with a string `__kind`, at any depth, or a string\n * that holds a kind REGION (`textCarriesKind`: whole kind JSON, or prose with\n * a kind in it — a ```json fence, inline JSON — outside quoted source)? A raw\n * renderer that answers yes renders the value through the one value door\n * (`AnswerValueView`) instead.\n */\nexport function valueCarriesKind(value: unknown): boolean {\n  return carriesKind(value, 0, new Set());\n}\n\n/** Past this depth a value is not searched further (cycles and pathological nesting). */\nconst VALUE_SEARCH_DEPTH = 64;\n\nfunction carriesKind(value: unknown, depth: number, seen: Set<object>): boolean {\n  if (typeof value === \"string\") return textCarriesKind(value);\n  if (value === null || typeof value !== \"object\") return false;\n  if (depth > VALUE_SEARCH_DEPTH || seen.has(value)) return false;\n  seen.add(value);\n  if (Array.isArray(value)) {\n    return value.some((item) => carriesKind(item, depth + 1, seen));\n  }\n  const record = value as Record<string, unknown>;\n  // A `__kind` value carries a kind only while it can name one: a slug the\n  // registry measured as absent is plain JSON (rule 28) — keep looking inside it.\n  if (typeof record.__kind === \"string\" && record.__kind.trim() && !namesNoKind(record.__kind.trim())) return true;\n  for (const item of Object.values(record)) {\n    if (carriesKind(item, depth + 1, seen)) return true;\n  }\n  return false;\n}\n\n/**\n * A STRING value that holds a kind region (H1, round 5): text that is kind\n * JSON, or prose with a kind region in it by THE markdown definition\n * (`markdownCarriesKind` — outside quoted source, markdown-escaped key too).\n * `{answer: \"Here are your cards: ```json {…kind…}```\"}` carries its kind.\n */\nexport function textCarriesKind(text: string): boolean {\n  if (isKindJsonText(text) || markdownCarriesKind(text)) return true;\n  // A WHOLE JSON text whose kind is held in a string value at any depth\n  // (`{\"result\":\"{\\\"__kind\\\":…}\"}` — tool / workflow data): parse it and read\n  // the strings (round 10: real JSON, never a free-text guess).\n  if (!mayHoldKindKey(text) || !/^[{[]/.test(text.trimStart())) return false;\n  let parsed: unknown;\n  try {\n    parsed = JSON.parse(text);\n  } catch {\n    return false;\n  }\n  return typeof parsed === \"object\" && parsed !== null && valueCarriesKind(parsed);\n}\n\n/**\n * Text that IS a JSON object/array carrying a `__kind` key (not prose\n * mentioning one) — the gate before a `JSON.parse` of the whole text. For\n * \"does this string hold a kind anywhere\", read `textCarriesKind`.\n */\nexport function isKindJsonText(text: string): boolean {\n  const first = text.trimStart()[0];\n  return (first === \"{\" || first === \"[\") && hasKindKey(text);\n}\n\n/** The kind slug a value claims for itself at its root, or null. */\nexport function rootKindSlug(value: unknown): string | null {\n  if (value === null || typeof value !== \"object\" || Array.isArray(value)) return null;\n  const kind = (value as Record<string, unknown>).__kind;\n  return typeof kind === \"string\" && kind.trim() ? kind : null;\n}\n\n/** Fence languages whose body is a JSON region (an unlabelled fence included). */\nconst JSON_FENCE_LANGS = new Set([\"\", \"json\", \"jsonc\", \"json5\"]);\n\n/** Whether a fence's language makes its body a JSON region (any case; none counts). */\nexport function isJsonFenceLanguage(lang: string | null | undefined): boolean {\n  return JSON_FENCE_LANGS.has((lang ?? \"\").trim().toLowerCase());\n}\n\n/**\n * Where a kind in markdown is the model QUOTING SOURCE, never data (the\n * owner's ruling, 2026-09-30): inside an inline code span, or inside a fence\n * whose language is not JSON (```ts, ```xml, ```markdown …). Everything else\n * — prose, a blockquote, a list item, a table cell, a 4-space indented block,\n * a JSON fence — is data. [start, end) spans, in order. THE one definition:\n * the splitter, the live accumulator and the leaf gate all read it, so a leaf\n * and the pipeline can never disagree about what is a kind region.\n */\nexport function quotedSourceRanges(text: string): Array<[number, number]> {\n  const ranges: Array<[number, number]> = [];\n  for (const range of findCodeRanges(text)) {\n    if (range.kind === \"span\") {\n      ranges.push([range.start, range.end]);\n      continue;\n    }\n    const raw = text.slice(range.start, range.end);\n    const newline = raw.indexOf(\"\\n\");\n    const firstLine = (newline === -1 ? raw : raw.slice(0, newline)).replace(/^ {0,3}(?:> ?)*/, \"\");\n    const opener = fenceOpenerOf(firstLine.trimStart());\n    if (!opener || !isJsonFenceLanguage(opener.lang)) {\n      ranges.push([range.start, range.end]);\n    }\n  }\n  return ranges;\n}\n\n/**\n * Whether an XML card SHOWS SOURCE (the owner's rulings, round 3): a ```xml\n * FENCE is the model quoting source — a kind inside it stays as written (a).\n * An XML TAG the model wraps content in (`<answer>`, `<output>`, any generic\n * tag, closed or not) is STRUCTURE (b): the splitter and the accumulator mark\n * every piece of it `genericXmlContainer`, and a kind inside its prose renders\n * as the kind. THE one answer — XmlBlock's callers and the frame judge read it.\n */\nexport function isQuotedSourceXmlBlock(block: {\n  metadata?: Record<string, unknown> | null;\n}): boolean {\n  return block.metadata?.genericXmlContainer !== true;\n}\n\n/**\n * Where the front matter that opens `source` ends (0 when none): an optional\n * byte-order mark, a first line that is exactly `---` or `+++`, through the\n * same fence (YAML also `...`). Front matter is document properties, never\n * content — a `{\"__kind\":…}` VALUE inside it is never a kind block, in the\n * static splitter or the live accumulator (RC-B3r round 3, C1).\n */\nexport function frontMatterEnd(source: string): number {\n  const body = source.charCodeAt(0) === 0xfeff ? 1 : 0;\n  const firstBreak = source.indexOf(\"\\n\", body);\n  if (firstBreak < 0) return 0;\n  const opener = source.slice(body, firstBreak).replace(/\\r$/, \"\");\n  if (opener !== \"---\" && opener !== \"+++\") return 0;\n  for (let pos = firstBreak + 1; pos < source.length; ) {\n    const next = source.indexOf(\"\\n\", pos);\n    const end = next < 0 ? source.length : next;\n    const line = source.slice(pos, end).replace(/\\r$/, \"\");\n    if (line === opener || (opener === \"---\" && line === \"...\")) return end;\n    if (next < 0) break;\n    pos = next + 1;\n  }\n  return 0;\n}\n\n/**\n * The MARKDOWN form: does this prose hold a kind REGION — a `__kind` key\n * anywhere outside quoted source (see `quotedSourceRanges`)? A leaf that\n * answers yes hands the text to the pipeline (`MarkdownStream`), which lifts\n * the region by the same definition — prose, table cell, indented block,\n * blockquote, JSON fence, or the whole text being kind JSON.\n */\nexport function markdownCarriesKind(source: string): boolean {\n  // Front matter is document properties, hidden on screen and never lifted\n  // (X-minor, round 3): a kind there is not a region of the text.\n  const text = source.slice(frontMatterEnd(source));\n  if (!hasKindKey(text, JSON_KIND_SPELLINGS)) return false;\n  if (isKindJsonText(text)) return true;\n  const quoted = quotedSourceRanges(text);\n  if (quoted.length === 0) return true;\n  let outside = \"\";\n  let cursor = 0;\n  for (const [start, end] of quoted) {\n    if (start < cursor) continue;\n    outside += text.slice(cursor, start) + \" \";\n    cursor = end;\n  }\n  outside += text.slice(cursor);\n  return hasKindKey(outside, JSON_KIND_SPELLINGS);\n}\n","/**\n * Recover complete self-described kind objects from ANY containing text.\n *\n * Markdown, code fences, and XML are arrival containers, not type authority.\n * Once a complete JSON object directly declares a non-empty `__kind`, that\n * object is its own Content IR region even when an outer parser already\n * classified the surrounding bytes as code, XML, or prose.\n *\n * Generic XML opts into literal-context exclusion so tag attributes, code,\n * comments, and CDATA remain examples owned by their container. Otherwise the\n * scanner is syntax-agnostic about the outer container. It only promotes candidates that independently pass JSON.parse and carry a\n * direct string discriminator. Failed/malformed candidates remain untouched.\n */\n\nimport { readXmlTag } from \"../source/xml-tag\";\nimport { fenceOpenerOf, findCodeRanges } from \"../source\";\nimport { frontMatterEnd, isJsonFenceLanguage, kindGrammar, quotedSourceRanges } from \"./json-kind-signal\";\n\nexport interface EmbeddedKindJsonRegion {\n  start: number;\n  end: number;\n  content: string;\n  kind: string;\n}\n\nexport type EmbeddedKindJsonPiece =\n  | { type: \"container\"; content: string }\n  | { type: \"kind\"; content: string; kind: string }\n  /**\n   * JSON punctuation that only held kinds together — the `[`, `,` and `]` of\n   * an array of kinds. Kept so the partition stays lossless; never rendered\n   * (a lone `[` drawn as a JSON card is noise, not content — A6).\n   */\n  | { type: \"chrome\"; content: string }\n  /**\n   * The non-kind DATA of a JSON wrapper around kinds (`{\"result\":{…kind…},\n   * \"note\":\"x\"}`, A7): `content` is the source span it replaces (lossless),\n   * `json` is the wrapper's value with every kind removed — valid JSON, drawn\n   * as genuine JSON. A wrapper that holds only kinds has no residual piece.\n   */\n  | { type: \"residual\"; content: string; json: string };\n\nfunction matchingJsonObjectEnd(source: string, start: number): number | null {\n  if (source[start] !== \"{\" && source[start] !== \"[\") return null;\n\n  const stack: string[] = [source[start]];\n  let inString = false;\n  let escaped = false;\n\n  for (let index = start + 1; index < source.length; index++) {\n    const char = source[index];\n\n    if (inString) {\n      if (escaped) {\n        escaped = false;\n      } else if (char === \"\\\\\") {\n        escaped = true;\n      } else if (char === '\"') {\n        inString = false;\n      }\n      continue;\n    }\n\n    if (char === '\"') {\n      inString = true;\n      continue;\n    }\n    if (char === \"{\" || char === \"[\") {\n      stack.push(char);\n      continue;\n    }\n    if (char !== \"}\" && char !== \"]\") continue;\n\n    const opening = stack.pop();\n    if (\n      (char === \"}\" && opening !== \"{\") ||\n      (char === \"]\" && opening !== \"[\")\n    ) {\n      return null;\n    }\n    if (stack.length === 0) return index + 1;\n  }\n\n  return null;\n}\n\n/**\n * For every `{` / `[` in `text`: the end (exclusive) of the string-aware\n * balanced JSON value opening there, or -1 (never balances). Each opener's\n * reading starts outside a string, exactly as if read alone; one right-to-left\n * pass reuses each nested opener's own answer (its reading from inside an\n * enclosing value is the same reading), so the whole table is linear — a\n * reading per opener was quadratic on thousands of unclosed `{` (round 11, P5).\n */\nexport function balancedEnds(text: string): Int32Array {\n  const ends = new Int32Array(text.length).fill(-1);\n  const stack: string[] = [];\n  for (let start = text.length - 1; start >= 0; start--) {\n    const open = text[start];\n    if (open !== \"{\" && open !== \"[\") continue;\n    stack.length = 0;\n    stack.push(open === \"{\" ? \"}\" : \"]\");\n    let inString = false;\n    for (let i = start + 1; i < text.length; i++) {\n      const ch = text[i]!;\n      if (inString) {\n        if (ch === \"\\\\\") i++;\n        else if (ch === '\"') inString = false;\n        continue;\n      }\n      if (ch === '\"') inString = true;\n      else if (ch === \"{\" || ch === \"[\") {\n        const end = ends[i]!;\n        if (end < 0) break;\n        i = end - 1;\n      } else if (ch === \"}\" || ch === \"]\") {\n        if (stack.pop() !== ch) break;\n        ends[start] = i + 1;\n        break;\n      }\n    }\n  }\n  return ends;\n}\n\n/** `matchingJsonObjectEnd` answered from ONE linear table, built on first use (a reading per opener is quadratic on thousands of unclosed `{`). */\nfunction lazyJsonEnds(source: string): (start: number) => number | null {\n  let table: Int32Array | undefined;\n  return (start) => {\n    if (source[start] !== \"{\" && source[start] !== \"[\") return null;\n    table ??= balancedEnds(source);\n    const end = table[start]!;\n    return end < 0 ? null : end;\n  };\n}\n\nfunction skipWhitespace(source: string, cursor: number): number {\n  while (/\\s/.test(source[cursor] ?? \"\")) cursor++;\n  return cursor;\n}\n\nfunction jsonStringEnd(source: string, start: number): number | null {\n  if (source[start] !== '\"') return null;\n\n  let escaped = false;\n  for (let cursor = start + 1; cursor < source.length; cursor++) {\n    const char = source[cursor];\n    if (escaped) {\n      escaped = false;\n    } else if (char === \"\\\\\") {\n      escaped = true;\n    } else if (char === '\"') {\n      return cursor + 1;\n    }\n  }\n  return null;\n}\n\nfunction jsonValueEnd(source: string, start: number): number | null {\n  const char = source[start];\n  if (char === '\"') return jsonStringEnd(source, start);\n  if (char === \"{\" || char === \"[\") return matchingJsonObjectEnd(source, start);\n\n  const end = source.slice(start).search(/[\\s,}\\]]/);\n  const tokenEnd = end === -1 ? source.length : start + end;\n  const token = source.slice(start, tokenEnd);\n  return /^(?:true|false|null|-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?)$/.test(\n    token,\n  )\n    ? tokenEnd\n    : null;\n}\n\n/**\n * Returns the structural boundary of an unfinished or malformed object whose\n * root directly declares `__kind`. That root owns all of its descendants even\n * though it cannot be promoted as a renderable JSON region itself.\n */\nfunction malformedKindOwnerEnd(\n  source: string,\n  start: number,\n  boundary = source.length,\n): number | null {\n  let cursor = skipWhitespace(source, start + 1);\n  let kindFound = false;\n  const ownerEnd = () => (kindFound ? boundary : null);\n\n  while (cursor < boundary) {\n    const keyStart = cursor;\n    const keyEnd = jsonStringEnd(source, keyStart);\n    if (keyEnd === null || keyEnd > boundary) return ownerEnd();\n\n    let key: unknown;\n    try {\n      key = JSON.parse(source.slice(keyStart, keyEnd));\n    } catch {\n      return ownerEnd();\n    }\n\n    cursor = skipWhitespace(source, keyEnd);\n    if (cursor >= boundary || source[cursor] !== \":\") return ownerEnd();\n    cursor = skipWhitespace(source, cursor + 1);\n\n    const valueStart = cursor;\n    const valueEnd = jsonValueEnd(source, valueStart);\n    if (valueEnd === null || valueEnd > boundary) return ownerEnd();\n\n    if (key === \"__kind\") {\n      try {\n        const value = JSON.parse(source.slice(valueStart, valueEnd));\n        kindFound ||= typeof value === \"string\" && value.trim().length > 0;\n      } catch {\n        return ownerEnd();\n      }\n    }\n\n    cursor = skipWhitespace(source, valueEnd);\n    if (source[cursor] === \"}\") return kindFound ? cursor + 1 : null;\n    if (cursor >= boundary || source[cursor] !== \",\") return ownerEnd();\n    cursor = skipWhitespace(source, cursor + 1);\n  }\n\n  return ownerEnd();\n}\n\n/** String literals in a valid anonymous JSON wrapper are never regions. */\nfunction jsonStringRanges(\n  source: string,\n  start: number,\n  end: number,\n): Array<[number, number]> {\n  const ranges: Array<[number, number]> = [];\n  for (let cursor = start; cursor < end; cursor++) {\n    if (source[cursor] !== '\"') continue;\n    const stringEnd = jsonStringEnd(source, cursor);\n    if (stringEnd === null || stringEnd > end) break;\n    ranges.push([cursor, stringEnd]);\n    cursor = stringEnd - 1;\n  }\n  return ranges;\n}\n\nfunction declaredKind(candidate: string): string | null {\n  try {\n    const parsed: unknown = JSON.parse(candidate);\n    if (\n      typeof parsed !== \"object\" ||\n      parsed === null ||\n      Array.isArray(parsed)\n    ) {\n      return null;\n    }\n    const kind = (parsed as Record<string, unknown>).__kind;\n    return typeof kind === \"string\" && kind.trim() ? kind : null;\n  } catch {\n    return null;\n  }\n}\n\n/**\n * Literal markdown/XML regions do not grant embedded JSON a new render owner:\n * code (fences and spans, by THE one code-range rule — @ai-matrx/content-ir/\n * source; an unpaired backtick is text, never \"literal to the end\"), HTML\n * comments, CDATA and XML tags.\n */\nfunction literalRanges(\n  source: string,\n  liftJsonFences = false,\n): Array<[number, number]> {\n  const ranges: Array<[number, number]> = [];\n  // A JSON-family fence inside an XML TAG is data, not an example (ruling (b),\n  // round 3): its body is searched; its fence lines become chrome around a kind.\n  const code = liftJsonFences\n    ? findCodeRanges(source).filter((range) => !isJsonFenceRange(source, range))\n    : findCodeRanges(source);\n  let next = 0;\n  let cursor = 0;\n  while (cursor < source.length) {\n    while (next < code.length && code[next]!.start < cursor) next++;\n    const range = code[next];\n    if (range && range.start === cursor) {\n      ranges.push([range.start, range.end]);\n      cursor = range.end;\n      next++;\n      continue;\n    }\n    if (source.startsWith(\"<!--\", cursor)) {\n      const end = source.indexOf(\"-->\", cursor + 4);\n      const rangeEnd = end === -1 ? source.length : end + 3;\n      ranges.push([cursor, rangeEnd]);\n      cursor = rangeEnd;\n      continue;\n    }\n    if (source.startsWith(\"<![CDATA[\", cursor)) {\n      const end = source.indexOf(\"]]>\", cursor + 9);\n      const rangeEnd = end === -1 ? source.length : end + 3;\n      ranges.push([cursor, rangeEnd]);\n      cursor = rangeEnd;\n      continue;\n    }\n    if (source[cursor] === \"<\") {\n      const tag = readXmlTag(source, cursor);\n      if (tag) {\n        const end = cursor + tag.raw.length;\n        ranges.push([cursor, end]);\n        cursor = end;\n        continue;\n      }\n      // An opening tag still arriving (`<custom value='{…` — no `>` yet): its\n      // attributes are literal to the end of the source, never a kind.\n      if (/^<[A-Za-z_][\\w.:-]*\\s/.test(source.slice(cursor, cursor + 64)) && !tagCloses(source, cursor)) {\n        ranges.push([cursor, source.length]);\n        break;\n      }\n    }\n    cursor++;\n  }\n  return ranges;\n}\n\n/** Whether the tag opening at `start` reaches its `>` (quoted attribute values honored). */\nfunction tagCloses(source: string, start: number): boolean {\n  let quote: string | null = null;\n  for (let i = start + 1; i < source.length; i++) {\n    const ch = source[i];\n    if (quote) {\n      if (ch === quote) quote = null;\n    } else if (ch === \"'\" || ch === '\"') quote = ch;\n    else if (ch === \">\") return true;\n  }\n  return false;\n}\n\n/** Whether a code range is a fence whose language makes its body JSON (unlabelled included). */\nfunction isJsonFenceRange(\n  source: string,\n  range: { start: number; end: number; kind: string },\n): boolean {\n  if (range.kind !== \"fence\") return false;\n  const raw = source.slice(range.start, range.end);\n  const newline = raw.indexOf(\"\\n\");\n  const opener = fenceOpenerOf((newline === -1 ? raw : raw.slice(0, newline)).trimStart());\n  return opener !== null && isJsonFenceLanguage(opener.lang);\n}\n\n/**\n * The fence lines around a kind that is the WHOLE body of a JSON-family fence\n * (`liftJsonFences`): opener through the object, and the object through the\n * closer, as chrome spans — never rendered, kept so the partition is lossless.\n */\nfunction jsonFenceChromeSpans(\n  source: string,\n  regions: EmbeddedKindJsonRegion[],\n): Array<[number, number]> {\n  const spans: Array<[number, number]> = [];\n  for (const range of findCodeRanges(source)) {\n    if (!isJsonFenceRange(source, range)) continue;\n    const inside = regions.filter((r) => r.start >= range.start && r.end <= range.end);\n    if (inside.length !== 1) continue;\n    const region = inside[0]!;\n    const head = source.slice(range.start, region.start);\n    const tail = source.slice(region.end, range.end);\n    // Opener line, then only whitespace; only whitespace, then the closer (or nothing yet).\n    if (!/^[^\\n]*\\n\\s*$/.test(head) || !/^\\s*(?:[`~]{3,}[ \\t]*)?$/.test(tail)) continue;\n    spans.push([range.start, region.start]);\n    if (region.end < range.end) spans.push([region.end, range.end]);\n  }\n  return spans;\n}\n\n/** Outermost complete self-described objects, in source order. */\n// Front matter is document properties (`frontMatterEnd`) — one definition,\n// in the detector's module, so the leaf gate and the frame judge read it too.\nexport { frontMatterEnd } from \"./json-kind-signal\";\n\nexport interface EmbeddedKindSearchOptions {\n  /** Generic XML: code, comments, CDATA and tags are literal (the XML card shows them). */\n  excludeLiteralContexts?: boolean;\n  /**\n   * With `excludeLiteralContexts` (an XML TAG — structure, ruling (b) round 3):\n   * a ```json / ```jsonc / ```json5 / unlabelled fence is NOT literal. A kind\n   * that is its whole body leaves with the fence's own lines as chrome, so\n   * the XML pieces around it hold no orphan fence marker.\n   */\n  liftJsonFences?: boolean;\n  /**\n   * Markdown: inline code spans and non-JSON fences are the model quoting\n   * source (`quotedSourceRanges`, the owner's ruling 2026-09-30) — never lifted.\n   */\n  excludeQuotedSource?: boolean;\n}\n\nexport function findEmbeddedKindJsonRegions(\n  source: string,\n  options: EmbeddedKindSearchOptions = {},\n): EmbeddedKindJsonRegion[] {\n  const regions: EmbeddedKindJsonRegion[] = [];\n  const endOf = lazyJsonEnds(source);\n  const excluded = [\n    ...(options.excludeLiteralContexts\n      ? literalRanges(source, options.liftJsonFences === true)\n      : []),\n    ...(options.excludeQuotedSource ? quotedSourceRanges(source) : []),\n  ].sort((a, b) => a[0] - b[0]);\n  const jsonStrings: Array<[number, number]> = [];\n  let excludedIndex = 0;\n  let jsonStringIndex = 0;\n\n  for (let start = frontMatterEnd(source); start < source.length; start++) {\n    while (\n      excludedIndex < excluded.length &&\n      excluded[excludedIndex]![1] <= start\n    ) {\n      excludedIndex++;\n    }\n    while (\n      jsonStringIndex < jsonStrings.length &&\n      jsonStrings[jsonStringIndex]![1] <= start\n    ) {\n      jsonStringIndex++;\n    }\n    if (\n      excludedIndex < excluded.length &&\n      start >= excluded[excludedIndex]![0] &&\n      start < excluded[excludedIndex]![1]\n    )\n      continue;\n    if (\n      jsonStringIndex < jsonStrings.length &&\n      start >= jsonStrings[jsonStringIndex]![0] &&\n      start < jsonStrings[jsonStringIndex]![1]\n    )\n      continue;\n    if (source[start] !== \"{\") continue;\n    const end = endOf(start);\n    if (end === null) {\n      // An unclosed object owns text only as far as its JSON grammar holds —\n      // to the end while still validly open, else to its cut (round 10, C1):\n      // a later kind in prose after it is still found.\n      const verdict = kindGrammar(source, \"json\", start);\n      const bound = verdict.status === \"broken\" ? verdict.cut : source.length;\n      const ownerEnd = bound > start ? malformedKindOwnerEnd(source, start, bound) : null;\n      if (ownerEnd !== null) start = ownerEnd - 1;\n      continue;\n    }\n\n    const content = source.slice(start, end);\n    const kind = declaredKind(content);\n    if (!kind) {\n      const ownerEnd = malformedKindOwnerEnd(source, start, end);\n      if (ownerEnd !== null) {\n        start = ownerEnd - 1;\n        continue;\n      }\n      // A loop, never a spread: a JSON value with ~100k strings overflowed the\n      // call stack (RangeError on a stored chat row — the splitter crashed).\n      for (const range of jsonStringRanges(source, start, end)) jsonStrings.push(range);\n      continue;\n    }\n\n    regions.push({ start, end, content, kind });\n    start = end - 1;\n  }\n\n  return regions;\n}\n\n/**\n * The array punctuation around runs of kinds: for every run of regions joined\n * only by commas, opened by a `[` (the last non-space byte before the run) and\n * closed by a `]` (the first one after it), the spans `[…`, `,` and `…]` are\n * chrome. Returned as [start, end) spans, in order.\n */\nfunction kindArrayChromeSpans(\n  source: string,\n  regions: EmbeddedKindJsonRegion[],\n): Array<[number, number]> {\n  const spans: Array<[number, number]> = [];\n  let first = 0;\n  while (first < regions.length) {\n    let last = first;\n    while (\n      last + 1 < regions.length &&\n      /^\\s*,\\s*$/.test(source.slice(regions[last]!.end, regions[last + 1]!.start))\n    ) {\n      last++;\n    }\n    const before = source.slice(0, regions[first]!.start);\n    const open = /\\[\\s*$/.exec(before);\n    const after = source.slice(regions[last]!.end);\n    const close = /^\\s*\\]/.exec(after);\n    if (open && close) {\n      spans.push([open.index, regions[first]!.start]);\n      for (let k = first; k < last; k++) {\n        spans.push([regions[k]!.end, regions[k + 1]!.start]);\n      }\n      spans.push([regions[last]!.end, regions[last]!.end + close[0].length]);\n    }\n    first = last + 1;\n  }\n  return spans;\n}\n\n/** True when a value is a JSON object that directly declares a non-empty `__kind`. */\nfunction isKindValue(value: unknown): boolean {\n  if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n    return false;\n  }\n  const kind = (value as Record<string, unknown>).__kind;\n  return typeof kind === \"string\" && kind.trim().length > 0;\n}\n\n/** The value with every kind object removed (array items and object members). */\nfunction withoutKinds(value: unknown): unknown {\n  if (Array.isArray(value)) {\n    return value.filter((item) => !isKindValue(item)).map(withoutKinds);\n  }\n  if (typeof value === \"object\" && value !== null) {\n    const out: Record<string, unknown> = {};\n    for (const [key, item] of Object.entries(value)) {\n      if (!isKindValue(item)) out[key] = withoutKinds(item);\n    }\n    return out;\n  }\n  return value;\n}\n\n/** Whether anything but empty containers is left. */\nfunction carriesData(value: unknown): boolean {\n  if (Array.isArray(value)) return value.some(carriesData);\n  if (typeof value === \"object\" && value !== null) {\n    return Object.values(value).some(carriesData);\n  }\n  return true;\n}\n\n/** Only braces, brackets, commas, colons, whitespace and object KEYS. */\nfunction isPureJsonStructure(span: string): boolean {\n  return /^[\\s{}[\\],:]*$/.test(\n    span.replace(/\"(?:[^\"\\\\]|\\\\.)*\"\\s*:/g, \"\"),\n  );\n}\n\n/**\n * A container that is, as a whole, a JSON object or array holding kinds (A7):\n * every non-kind span is chrome, and the wrapper's own data — the value with\n * its kinds removed — rides ONE residual piece at the first span that carries\n * any. Null when the source is not a parseable JSON wrapper.\n */\nfunction wrapperPieces(\n  source: string,\n  regions: EmbeddedKindJsonRegion[],\n): EmbeddedKindJsonPiece[] | null {\n  const trimmed = source.trim();\n  if (!/^[[{]/.test(trimmed)) return null;\n  let parsed: unknown;\n  try {\n    parsed = JSON.parse(trimmed);\n  } catch {\n    return null;\n  }\n  if (typeof parsed !== \"object\" || parsed === null || isKindValue(parsed)) {\n    return null;\n  }\n  const residual = withoutKinds(parsed);\n  const residualJson = carriesData(residual) ? JSON.stringify(residual, null, 2) : null;\n\n  const pieces: EmbeddedKindJsonPiece[] = [];\n  let residualPlaced = residualJson === null;\n  const pushSpan = (content: string) => {\n    if (!content) return;\n    if (!residualPlaced && !isPureJsonStructure(content)) {\n      pieces.push({ type: \"residual\", content, json: residualJson as string });\n      residualPlaced = true;\n      return;\n    }\n    pieces.push({ type: \"chrome\", content });\n  };\n  let cursor = 0;\n  for (const region of regions) {\n    pushSpan(source.slice(cursor, region.start));\n    pieces.push({ type: \"kind\", content: region.content, kind: region.kind });\n    cursor = region.end;\n  }\n  pushSpan(source.slice(cursor));\n  if (!residualPlaced) {\n    // Data the scan could not pin to a span (it sits between keys only):\n    // still shown, after the kinds.\n    pieces.push({ type: \"residual\", content: \"\", json: residualJson as string });\n  }\n  return pieces;\n}\n\n/** Losslessly partition a container around every recovered kind region. */\nexport function splitAroundEmbeddedKindJson(\n  source: string,\n  options: EmbeddedKindSearchOptions = {},\n): EmbeddedKindJsonPiece[] {\n  const regions = findEmbeddedKindJsonRegions(source, options);\n  if (regions.length === 0) return [{ type: \"container\", content: source }];\n\n  const wrapped = wrapperPieces(source, regions);\n  if (wrapped) return wrapped;\n\n  // Every boundary in order: kind regions and chrome spans never overlap.\n  const marks: Array<\n    { start: number; end: number } & (\n      | { type: \"kind\"; kind: string }\n      | { type: \"chrome\" }\n    )\n  > = [\n    ...regions.map((r) => ({ start: r.start, end: r.end, type: \"kind\" as const, kind: r.kind })),\n    ...[\n      ...kindArrayChromeSpans(source, regions),\n      ...(options.excludeLiteralContexts && options.liftJsonFences\n        ? jsonFenceChromeSpans(source, regions)\n        : []),\n    ].map(([start, end]) => ({\n      start,\n      end,\n      type: \"chrome\" as const,\n    })),\n  ].sort((a, b) => a.start - b.start);\n\n  const pieces: EmbeddedKindJsonPiece[] = [];\n  let cursor = 0;\n  for (const mark of marks) {\n    if (mark.start > cursor) {\n      pieces.push({\n        type: \"container\",\n        content: source.slice(cursor, mark.start),\n      });\n    }\n    if (mark.end > mark.start) {\n      pieces.push(\n        mark.type === \"kind\"\n          ? { type: \"kind\", content: source.slice(mark.start, mark.end), kind: mark.kind }\n          : { type: \"chrome\", content: source.slice(mark.start, mark.end) },\n      );\n    }\n    cursor = Math.max(cursor, mark.end);\n  }\n  if (cursor < source.length) {\n    pieces.push({ type: \"container\", content: source.slice(cursor) });\n  }\n  return pieces;\n}\n\n/**\n * A recovered PROSE piece, shaped exactly as the live stream shapes the same\n * bytes (A5, 2026-09-30): the stream splits `Here: {\"__kind\":…} after` into\n * three lines as it arrives, so its prose blocks are trimmed at the end (every\n * text block is) and, after a kind, start where the next character does — the\n * spaces after the object and the one line break that ended its line are the\n * boundary, not content. Both hosts call this on every text piece, so a live\n * message and its reload draw the same blocks.\n */\nexport function normalizeRecoveredProsePiece(\n  content: string,\n  followsKind: boolean,\n): string {\n  const start = followsKind ? content.replace(/^[ \\t]*(?:\\r?\\n)?/, \"\") : content;\n  return start.trimEnd();\n}\n\n/**\n * Every recovered container piece, by its container's block type: prose by\n * the rule above, code byte-verbatim, and a SECTION (`thinking`, `info`, …)\n * trimmed — the live stream splits a kind out of a section as it arrives\n * (A8) and each part is a section body, which is trimmed like a whole one.\n */\nexport function normalizeRecoveredContainerPiece(\n  content: string,\n  containerType: string,\n  followsKind: boolean,\n): string {\n  if (containerType === \"text\") {\n    return normalizeRecoveredProsePiece(content, followsKind);\n  }\n  if (containerType === \"code\") return content;\n  return content.trim();\n}\n\n/**\n * A complete JSON value (object or array) that holds at least one kind, as\n * one region: a recovered kind region widened to the OUTERMOST complete,\n * parseable JSON value that contains it — a kindless wrapper\n * (`{\"result\":{…kind…},\"note\":…}`, A7) or an array of kinds and plain values.\n * For DESTINATION transforms (export, copy, speech) that convert the value\n * whole; the renderer partitions the same bytes with\n * {@link splitAroundEmbeddedKindJson}. Built on THE region finder above.\n */\nexport interface KindCarryingJsonRegion {\n  start: number;\n  end: number;\n  content: string;\n  value: unknown;\n}\n\nexport function findKindCarryingJsonValues(\n  source: string,\n  options: { excludeLiteralContexts?: boolean } = {},\n): KindCarryingJsonRegion[] {\n  const kinds = findEmbeddedKindJsonRegions(source, options);\n  if (kinds.length === 0) return [];\n  const excluded = options.excludeLiteralContexts ? literalRanges(source) : [];\n  const inLiteral = (index: number) =>\n    excluded.some(([start, end]) => index >= start && index < end);\n  // One linear table of every opener's balanced end: a reading per opener was\n  // quadratic on thousands of unclosed `{` (round 11, P5).\n  const ends = balancedEnds(source);\n\n  const regions: KindCarryingJsonRegion[] = [];\n  let floor = frontMatterEnd(source);\n  for (const region of kinds) {\n    if (region.start < floor) continue; // inside a wrapper already taken\n    let best = { start: region.start, end: region.end, value: JSON.parse(region.content) as unknown };\n    for (let open = floor; open < region.start; open++) {\n      const char = source[open];\n      if ((char !== \"{\" && char !== \"[\") || inLiteral(open)) continue;\n      const found = ends[open]!;\n      if (found < 0 || found < region.end) continue;\n      const end = found;\n      try {\n        best = { start: open, end, value: JSON.parse(source.slice(open, end)) };\n        break; // the earliest opener that encloses it is the outermost\n      } catch {\n        continue;\n      }\n    }\n    regions.push({ ...best, content: source.slice(best.start, best.end) });\n    floor = best.end;\n  }\n  return regions;\n}\n\n/**\n * A kind that can never complete as written: [start, end) and the text of\n * its region. Two shapes, by the same ownership rule as the finder above:\n *  - a CLOSED object whose root declares `__kind` but does not parse (the\n *    finder's malformed owner) — bounded;\n *  - an UNCLOSED JSON object or array at the tail (a stream cut off, a\n *    truncated store) holding a `\"__kind\"` key anywhere — runs to the end,\n *    from its outermost opener (a kindless wrapper is cut with its kind).\n * For destinations that must say \"<Kind> did not finish\" instead of printing\n * the fragment. Complete values (kind or not) are skipped whole.\n */\nexport interface BrokenKindJsonRegion {\n  start: number;\n  end: number;\n  content: string;\n}\n\nconst KIND_KEY_TEXT = /(?<!\\\\)\"__kind\"\\s*:/;\nconst KIND_KEY_TEXT_G = /(?<!\\\\)\"__kind\"\\s*:/g;\n\n/**\n * Round 10 (C1): a broken region is bounded by its OWN JSON grammar. An opener\n * owns a kind key only when its grammar reaches the key; it runs to the end of\n * the text only while it is still validly open, else it ends at its cut. A\n * stray `[[`, `{\"`, `{{`, `[\"`, an unrelated earlier object or a pasted\n * schema never extends a region over the prose after it. A balanced span that\n * does not parse is a region only when it reads once trailing commas go.\n * Linear: key positions once, each opener's grammar stops at its break.\n */\nexport function findBrokenKindJsonRegions(\n  source: string,\n  options: { excludeLiteralContexts?: boolean } = {},\n): BrokenKindJsonRegion[] {\n  const broken: BrokenKindJsonRegion[] = [];\n  if (!KIND_KEY_TEXT.test(source)) return broken;\n  // A malformed region can only be widened to a lenient balanced value when\n  // the source contains a possible closer.  Do not allocate the whole balance\n  // table for a truncated stream of openers: every lookup would be -1.\n  const mayHaveBalancedValue = source.includes(\"}\") || source.includes(\"]\");\n  const endOf = mayHaveBalancedValue ? lazyJsonEnds(source) : null;\n  const keys: number[] = [];\n  KIND_KEY_TEXT_G.lastIndex = 0;\n  for (let m = KIND_KEY_TEXT_G.exec(source); m; m = KIND_KEY_TEXT_G.exec(source)) keys.push(m.index);\n  let keyIndex = 0;\n  const excluded = options.excludeLiteralContexts ? literalRanges(source) : [];\n  let excludedIndex = 0;\n\n  for (let start = frontMatterEnd(source); start < source.length; start++) {\n    while (excludedIndex < excluded.length && excluded[excludedIndex]![1] <= start) {\n      excludedIndex++;\n    }\n    if (\n      excludedIndex < excluded.length &&\n      start >= excluded[excludedIndex]![0] &&\n      start < excluded[excludedIndex]![1]\n    ) {\n      start = excluded[excludedIndex]![1] - 1;\n      continue;\n    }\n    const char = source[start];\n    if (char !== \"{\" && char !== \"[\") continue;\n    while (keyIndex < keys.length && keys[keyIndex]! < start) keyIndex++;\n    if (keyIndex >= keys.length) break;\n    const key = keys[keyIndex]!;\n\n    const verdict = kindGrammar(source, \"json\", start);\n    if (verdict.status === \"complete\") {\n      try {\n        JSON.parse(source.slice(start, verdict.end));\n        start = verdict.end - 1; // complete: nothing broken inside it\n      } catch {\n        // A JSON-shaped span JSON.parse still refuses: leave it as written.\n      }\n      continue;\n    }\n    if (verdict.status === \"prefix\") {\n      // Still validly open to the end of the text and holding a key: arriving.\n      broken.push({ start, end: source.length, content: source.slice(start) });\n      break;\n    }\n    // Broken: the opener owns the key only when its grammar reached it.\n    if (verdict.at <= key) continue;\n    const end = endOf?.(start) ?? null;\n    if (end !== null && lenientJson(source.slice(start, end))) {\n      broken.push({ start, end, content: source.slice(start, end) });\n      start = end - 1;\n      continue;\n    }\n    if (verdict.cut <= key) continue;\n    broken.push({ start, end: verdict.cut, content: source.slice(start, verdict.cut) });\n    start = verdict.cut - 1;\n  }\n  return broken;\n}\n\n/** Whether a balanced span reads as JSON once its trailing commas go. */\nfunction lenientJson(span: string): boolean {\n  try {\n    JSON.parse(span.replace(/,(\\s*[}\\]])/g, \"$1\"));\n    return true;\n  } catch {\n    return false;\n  }\n}\n","/**\n * KindSchema — the data-defined field model for a registered kind.\n *\n * `__kind` (KIND_KEY) is the carried discriminator: it is NOT part of a\n * kind's field map; the parser enforces it via `KindSchema.kind` and stamps\n * it onto every compliant snapshot.\n *\n * Moved from app/(dev)/demos/json-block-detector/kind-schemas.ts.\n *\n * 2026-07-15 expressivity extension (A2) — four constructs the Python-owned\n * pydantic schemas need that the v1 vocabulary could not express:\n *   - `{type:\"json\"}` / `{type:\"json[]\"}` — any JSON value / array of any\n *     JSON values (pydantic bare `Any` fields, `items: {}` arrays, `{}`\n *     schemas). A `json` value is implicitly nullable — `null` IS a JSON\n *     value — so `nullable` is meaningless (and ignored) on it.\n *   - `record` values widened to `\"json\"` (pydantic `dict[str, Any]` /\n *     `additionalProperties: true`).\n *   - `union` may now carry `kinds` (object unions — anyOf over kind refs,\n *     optionally mixed with scalars). Refs externalize to `kind_edge` rows\n *     exactly like `array.itemKinds`.\n *   - `KindSchema.root` — a NON-OBJECT root form: the kind's VALUE is the\n *     root field itself (scalar / array / json / open object), not a `__kind`\n *     object with fields. Root-form kinds are data-only: the streaming\n *     `__kind` parser cannot type them (a scalar cannot carry a\n *     discriminator) and refuses them loudly; validation goes through the\n *     emitted JSON Schema (ajv / Pydantic). `root` and a non-empty `fields`\n *     are mutually exclusive.\n *   - `inline_object.open` — `additionalProperties: true`; fixes the\n *     open-empty-object defect where an open `inline_object{fields:{}}`\n *     materialized as CLOSED (schema_proposal / item_presentation class).\n *\n * 2026-07-15 input-semantics extension (W3-A, agent-input bridge) — the\n * constructs the Wave-1 sufficiency survey of all 1,529 live agent variables\n * showed FieldSchema could not carry, added so `AgentVariable` ⇄ kind\n * conversion is faithful:\n *   - `FieldBase.description` — human guidance; round-trips JSON Schema\n *     `description` and VariableDefinition `helpText`.\n *   - `FieldBase.default` — the field's default VALUE (JSON Schema `default`,\n *     VariableDefinition `defaultValue`). Annotation-level: validators never\n *     apply it; emitters carry it verbatim.\n *   - `enum.open` — \"one of these options OR any string\" (the FE's\n *     `allowOther`). Emits as `anyOf: [{type:\"string\", enum}, {type:\"string\"}]`\n *     so the option set survives instead of widening to bare `string`.\n *   - `number` bounds `min`/`max`/`step` — JSON Schema\n *     `minimum`/`maximum`/`multipleOf` (number/slider components).\n *   - `string[].values` (+ `open`) — an items-enum: array of strings drawn\n *     from an option set (checkbox components), `open` meaning the set is\n *     advisory (`allowOther` on a multi-select).\n * Picklist bindings, scope bindings, and media component identity are\n * PROVENANCE, not structure — they never enter FieldSchema; the bridge\n * carries them out-of-band (see convert/kind-variable-bridge.ts sidecar).\n */\n\n/** System discriminator — hardcoded, not part of per-kind field schemas. */\nexport const KIND_KEY = \"__kind\";\n\nexport type ScalarFieldType = \"string\" | \"number\" | \"boolean\";\n\nexport type ArrayItemScalarType = \"string\" | \"number\" | \"boolean\";\n\n/** Value domain of a `record` field — typed scalars, or any JSON value. */\nexport type RecordValueType = ArrayItemScalarType | \"json\";\n\ntype FieldBase = {\n  required?: boolean;\n  nullable?: boolean;\n  /** Human guidance — JSON Schema `description` / variable `helpText`. */\n  description?: string;\n  /**\n   * Default VALUE (JSON Schema `default` / variable `defaultValue`).\n   * Annotation-level: validators never apply it; emitters carry it verbatim.\n   */\n  default?: unknown;\n};\n\nexport type FieldSchema =\n  | (FieldBase & { type: \"string\" | \"boolean\" })\n  | (FieldBase & {\n      type: \"number\";\n      /** Inclusive lower bound — JSON Schema `minimum`. */\n      min?: number;\n      /** Inclusive upper bound — JSON Schema `maximum`. */\n      max?: number;\n      /** Increment — JSON Schema `multipleOf`. Annotation-level in the parser. */\n      step?: number;\n    })\n  | (FieldBase & {\n      type: \"string[]\";\n      /** Items-enum: each item must be one of these values (checkbox option sets). */\n      values?: string[];\n      /** With `values`: the set is advisory — any string item is also legal (`allowOther`). */\n      open?: boolean;\n    })\n  | (FieldBase & { type: \"number[]\" | \"boolean[]\" })\n  | (FieldBase & { type: \"json\" })\n  | (FieldBase & { type: \"json[]\" })\n  | (FieldBase & { type: \"array\"; itemKinds: string[] })\n  | (FieldBase & { type: \"object\"; kind: string })\n  | (FieldBase & {\n      type: \"inline_object\";\n      fields: Record<string, FieldSchema>;\n      /** additionalProperties: true — unknown keys are legal, not residue-only. */\n      open?: boolean;\n    })\n  | (FieldBase & { type: \"record\"; values: RecordValueType })\n  | (FieldBase & {\n      type: \"enum\";\n      values: string[];\n      /** \"One of these OR any string\" — the option set is advisory (`allowOther`). */\n      open?: boolean;\n    })\n  | (FieldBase & {\n      type: \"union\";\n      scalars: Array<\"string\" | \"number\" | \"boolean\">;\n      /** Object union members — kind refs (anyOf of $refs), may mix with scalars. */\n      kinds?: string[];\n    });\n\n/**\n * Domain fields only — __kind is enforced by the parser via KindSchema.kind\n * (block slug). A kind with `root` set has NO field map (fields stays `{}`):\n * its value is the root field's type at the top level. See the module header.\n */\nexport type KindSchema = {\n  kind: string;\n  fields: Record<string, FieldSchema>;\n  /** Non-object root form — mutually exclusive with a non-empty `fields`. */\n  root?: FieldSchema;\n};\n\nexport function readObjectKind(value: Record<string, unknown>): string | null {\n  const kind = value[KIND_KEY];\n  return typeof kind === \"string\" ? kind : null;\n}\n\nexport function isScalarArrayType(\n  type: FieldSchema[\"type\"],\n): type is \"string[]\" | \"number[]\" | \"boolean[]\" {\n  return type === \"string[]\" || type === \"number[]\" || type === \"boolean[]\";\n}\n\nexport function scalarArrayItemType(\n  type: \"string[]\" | \"number[]\" | \"boolean[]\",\n): ArrayItemScalarType {\n  if (type === \"number[]\") return \"number\";\n  if (type === \"boolean[]\") return \"boolean\";\n  return \"string\";\n}\n\n/**\n * Does this field's value domain accept ANY JSON shape (object/array/scalar/\n * null alike)? True for `json` and `json[]` ITEMS — the parser treats the\n * subtree under such a field as opaque (no kind identification, no raw_object\n * degradation: unknown structure is the declared contract, not a failure).\n */\nexport function isJsonAnyField(field: FieldSchema): boolean {\n  return field.type === \"json\" || field.type === \"json[]\";\n}\n","/**\n * Instance TITLE derivation — pure, importable from server and client code\n * (no supabase import; `instance-service.ts` consumes it on the write path).\n *\n * CROSS-REPO MIRROR: aidream `kind_instance.py` (`_TITLE_KEYS` +\n * `derive_title` + `kind_shared.kind_title_key`) implements the SAME\n * derivation order — explicit title → the kind's `metadata.title_key` field\n * (per-kind override, non-empty scalar) → the shared key list → null.\n * Change BOTH sides together.\n */\n\n/** Mirrors aidream `kind_instance._TITLE_KEYS` — keep the two in lockstep. */\nexport const INSTANCE_TITLE_KEYS = [\n  \"title\",\n  \"name\",\n  \"label\",\n  \"heading\",\n  \"subject\",\n  \"customer\",\n] as const;\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\n/**\n * The kind's per-kind instance-title override —\n * `kind_definition.metadata.title_key` (a single data key naming the title\n * field, e.g. `wine_name`). Set by the creator agent via `kind_create`;\n * null when absent/blank/non-string. Server parity: `kind_shared.kind_title_key`.\n */\nexport function kindTitleKeyFromMetadata(metadata: unknown): string | null {\n  if (!isRecord(metadata)) return null;\n  const value = metadata[\"title_key\"];\n  return typeof value === \"string\" && value.trim() ? value.trim() : null;\n}\n\n/**\n * A non-empty scalar rendered as a title string; null for anything else.\n * Mirrors the server `_scalar_title` exactly (booleans → \"true\"/\"false\").\n */\nfunction scalarTitle(value: unknown): string | null {\n  if (typeof value === \"string\") return value.trim() || null;\n  if (typeof value === \"boolean\") return value ? \"true\" : \"false\";\n  if (typeof value === \"number\") return Number.isFinite(value) ? String(value) : null;\n  return null;\n}\n\n/**\n * Explicit title wins; else the kind's `metadata.title_key` field when it\n * holds a non-empty scalar; else the first non-empty string under a shared\n * title/name-ish key. The ORDER is a cross-repo contract — mirrored verbatim\n * by aidream `kind_instance.derive_title`.\n */\nexport function deriveInstanceTitle(\n  data: Record<string, unknown>,\n  explicit?: string | null,\n  titleKey?: string | null,\n): string | null {\n  if (explicit && explicit.trim()) return explicit.trim();\n  if (titleKey) {\n    const override = scalarTitle(data[titleKey]);\n    if (override) return override;\n  }\n  for (const key of INSTANCE_TITLE_KEYS) {\n    const value = data[key];\n    if (typeof value === \"string\" && value.trim()) return value.trim();\n  }\n  return null;\n}\n","/**\n * Shared plumbing for kind → markdown export facets (`toMarkdown`).\n *\n * The FORWARD leg of the artifact ⇄ markdown two-way layer: every facet\n * turns a kind's ZERO-LOSS value object into clean human-readable markdown\n * (headings / lists / bold — never a JSON dump), following two laws:\n *\n * 1. `__kind` discriminators are transport metadata — never rendered.\n * 2. Nothing silently vanishes: keys a facet doesn't understand (plus the\n *    declared `additionalDetails` bag every top-level kind schema carries)\n *    are appended under a small \"Additional details\" key: value section via\n *    `collectExtras` + `additionalDetailsSection`.\n *\n * `genericKindMarkdown` is the fallback for kinds WITHOUT a `toMarkdown`\n * facet (and for unregistered kinds): readable markdown built from the value\n * itself — headings, bold-label lists, tables — never a JSON dump.\n */\n\nimport { KIND_KEY } from \"../core/kind-schema.types\";\nimport {\n  deriveInstanceTitle,\n  INSTANCE_TITLE_KEYS,\n} from \"./instance-title\";\nimport { humanizeIdentifier } from \"@ai-matrx/kit/text-case\";\n\nexport function isRecordValue(\n  value: unknown,\n): value is Record<string, unknown> {\n  return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isScalar(value: unknown): value is string | number | boolean {\n  return (\n    typeof value === \"string\" ||\n    typeof value === \"number\" ||\n    typeof value === \"boolean\"\n  );\n}\n\n/**\n * One-line rendering of an arbitrary value for key: value lists. Scalars\n * render as text, scalar arrays join with \", \", anything structural falls\n * back to inline JSON in a code span (zero loss, still one line).\n */\nexport function formatInlineValue(value: unknown): string {\n  if (value === null || value === undefined) return \"—\";\n  if (isScalar(value)) return String(value);\n  if (Array.isArray(value) && value.every(isScalar)) {\n    return value.map(String).join(\", \");\n  }\n  try {\n    return `\\`${JSON.stringify(stripKindForDisplay(value))}\\``;\n  } catch {\n    return String(value);\n  }\n}\n\n/** Deep-copy with every `__kind` discriminator removed (display only). */\nfunction stripKindForDisplay(value: unknown): unknown {\n  if (Array.isArray(value)) return value.map(stripKindForDisplay);\n  if (isRecordValue(value)) {\n    const out: Record<string, unknown> = {};\n    for (const [key, child] of Object.entries(value)) {\n      if (key === KIND_KEY) continue;\n      out[key] = stripKindForDisplay(child);\n    }\n    return out;\n  }\n  return value;\n}\n\n/**\n * Collect the keys a facet does NOT understand. Skips `__kind`,\n * null/undefined, and the facet's known keys; merges the contents of a\n * declared `additionalDetails` object bag (the schema-blessed extras\n * channel) into the same flat map so both extra channels surface together.\n */\nexport function collectExtras(\n  value: Record<string, unknown>,\n  knownKeys: Iterable<string>,\n): Record<string, unknown> {\n  const known = new Set(knownKeys);\n  known.add(KIND_KEY);\n  known.add(\"additionalDetails\");\n\n  const extras: Record<string, unknown> = {};\n\n  const details = value.additionalDetails;\n  if (isRecordValue(details)) {\n    for (const [key, child] of Object.entries(details)) {\n      if (key === KIND_KEY || child === null || child === undefined) continue;\n      extras[key] = child;\n    }\n  } else if (details !== null && details !== undefined) {\n    extras.additionalDetails = details;\n  }\n\n  for (const [key, child] of Object.entries(value)) {\n    if (known.has(key) || child === null || child === undefined) continue;\n    extras[key] = child;\n  }\n\n  return extras;\n}\n\n/**\n * A field's own name, as words — `violations_not_fixed` → \"Violations not\n * fixed\", `wordCountAfter` → \"Word count after\".\n *\n * 🚨 WALK 18, DEFECT D. The finished Masterwork deliverable an Expert hands a\n * customer carried `violations_not_fixed: []` — a key out of a schema we\n * declared, printed at a person. A label is the one place a field name is\n * GUARANTEED to reach a reader, so the resolution lives here, beside the\n * extras plumbing, for every RENDERER that puts a structured field on a\n * screen: underscores and camel humps become spaces, the first letter is\n * capitalised, and nothing else changes.\n *\n * Deliberately NOT applied inside {@link extrasList}. That list is the\n * markdown/EXPORT leg (`features/canvas/export/exportArtifactMarkdown.ts`\n * writes a file somebody — or something — reads back), and a key spelled as\n * prose cannot be read back as a key. A screen resolves; a file keeps the key.\n */\nexport function plainFieldLabel(key: string): string {\n  const words = key\n    .replace(/([a-z0-9])([A-Z])/g, \"$1 $2\")\n    .replace(/[_-]+/g, \" \")\n    .trim()\n    .toLowerCase();\n  if (!words) return key;\n  return words.charAt(0).toUpperCase() + words.slice(1);\n}\n\n/** Render extras as a key: value bullet list (no heading). Null when empty. */\nexport function extrasList(extras: Record<string, unknown>): string | null {\n  const entries = Object.entries(extras);\n  if (entries.length === 0) return null;\n  return entries\n    .map(([key, value]) => `- **${key}:** ${formatInlineValue(value)}`)\n    .join(\"\\n\");\n}\n\n/**\n * The canonical \"Additional details\" section — appended at the END of a\n * kind's markdown so nothing silently vanishes. Null when there is nothing\n * to say (callers filter with `joinBlocks`).\n */\nexport function additionalDetailsSection(\n  extras: Record<string, unknown>,\n  headingLevel: \"##\" | \"###\" | \"####\" = \"##\",\n): string | null {\n  const list = extrasList(extras);\n  if (!list) return null;\n  return `${headingLevel} Additional details\\n\\n${list}`;\n}\n\n/** Join markdown blocks with blank lines, dropping empty/null ones. */\nexport function joinBlocks(\n  blocks: Array<string | null | undefined>,\n): string {\n  return blocks\n    .map((block) => (typeof block === \"string\" ? block.trim() : \"\"))\n    .filter((block) => block.length > 0)\n    .join(\"\\n\\n\");\n}\n\n/** \"flashcard_set\" → \"Flashcard Set\"; \"Artifact\" when there is nothing to say. */\nexport function humanizeKind(kind: string): string {\n  return humanizeIdentifier(kind) || \"Artifact\";\n}\n\n/** Renders a nested kind value as markdown (the registry's converter). */\nexport type NestedKindMarkdown = (value: Record<string, unknown>) => string;\n\nfunction isKindValue(value: unknown): value is Record<string, unknown> {\n  return (\n    isRecordValue(value) &&\n    typeof value[KIND_KEY] === \"string\" &&\n    (value[KIND_KEY] as string).trim().length > 0\n  );\n}\n\nfunction scalarText(value: unknown): string {\n  if (typeof value === \"boolean\") return value ? \"Yes\" : \"No\";\n  return String(value);\n}\n\nfunction cellText(value: unknown): string {\n  return scalarText(value).replace(/\\r?\\n/g, \" \").replace(/\\|/g, \"\\\\|\");\n}\n\n/** Visible fields of a record: never `__kind`, never empty. */\nfunction visibleEntries(value: Record<string, unknown>): [string, unknown][] {\n  return Object.entries(value).filter(\n    ([key, child]) =>\n      key !== KIND_KEY &&\n      child !== null &&\n      child !== undefined &&\n      !(typeof child === \"string\" && child.trim() === \"\") &&\n      !(Array.isArray(child) && child.length === 0),\n  );\n}\n\n/** A table when every element is a non-kind record of scalars over one key set. */\nfunction uniformTable(items: unknown[]): string | null {\n  if (items.length === 0) return null;\n  let columns: string[] | null = null;\n  for (const item of items) {\n    if (!isRecordValue(item) || isKindValue(item)) return null;\n    const keys = Object.keys(item).filter((key) => key !== KIND_KEY);\n    if (keys.length === 0) return null;\n    if (!keys.every((key) => item[key] === null || isScalar(item[key]))) return null;\n    if (columns === null) columns = keys;\n    else if (keys.length !== columns.length || !keys.every((k, i) => k === columns![i]))\n      return null;\n  }\n  const cols = columns!;\n  const head = `| ${cols.map(plainFieldLabel).join(\" | \")} |`;\n  const rule = `| ${cols.map(() => \"---\").join(\" | \")} |`;\n  const rows = items.map(\n    (item) =>\n      `| ${cols\n        .map((key) => {\n          const cell = (item as Record<string, unknown>)[key];\n          return cell === null || cell === undefined ? \"—\" : cellText(cell);\n        })\n        .join(\" | \")} |`,\n  );\n  return [head, rule, ...rows].join(\"\\n\");\n}\n\nfunction indentBlock(text: string, indent: string): string {\n  return text\n    .split(\"\\n\")\n    .map((line) => (line.trim() ? indent + line : line))\n    .join(\"\\n\");\n}\n\n/** Nested bullet lines for any value (lists inside lists, kinds as blocks). */\nfunction listLines(value: unknown, indent: string, nested: NestedKindMarkdown): string[] {\n  if (Array.isArray(value)) {\n    const lines: string[] = [];\n    for (const item of value) {\n      if (item === null || item === undefined) continue;\n      if (isScalar(item)) lines.push(`${indent}- ${scalarText(item)}`);\n      else if (isKindValue(item)) {\n        lines.push(`${indent}-`);\n        lines.push(indentBlock(nested(item), indent + \"  \"));\n      } else if (Array.isArray(item)) {\n        lines.push(`${indent}-`);\n        lines.push(...listLines(item, indent + \"  \", nested));\n      } else if (isRecordValue(item)) {\n        const fields = listLines(item, indent + \"  \", nested);\n        // The record's first field rides on the bullet itself.\n        if (fields.length > 0) {\n          lines.push(`${indent}- ${fields[0]!.trimStart().replace(/^- /, \"\")}`);\n          lines.push(...fields.slice(1));\n        }\n      }\n    }\n    return lines;\n  }\n  if (isRecordValue(value)) {\n    if (isKindValue(value)) return [indentBlock(nested(value), indent)];\n    const lines: string[] = [];\n    for (const [key, child] of visibleEntries(value)) {\n      const label = `**${plainFieldLabel(key)}:**`;\n      if (isScalar(child)) lines.push(`${indent}- ${label} ${scalarText(child)}`);\n      else if (Array.isArray(child) && child.every(isScalar))\n        lines.push(`${indent}- ${label} ${child.map(scalarText).join(\", \")}`);\n      else {\n        lines.push(`${indent}- ${label}`);\n        lines.push(...listLines(child, indent + \"  \", nested));\n      }\n    }\n    return lines;\n  }\n  return isScalar(value) ? [`${indent}- ${scalarText(value)}`] : [];\n}\n\nfunction headingFor(depth: number): string {\n  return \"#\".repeat(Math.min(Math.max(depth, 1), 6));\n}\n\n/** The body of a record: scalar list first, then one section per structure. */\nfunction recordBody(\n  value: Record<string, unknown>,\n  depth: number,\n  nested: NestedKindMarkdown,\n  skipKey: string | null,\n): string[] {\n  const scalars: string[] = [];\n  const sections: string[] = [];\n  for (const [key, child] of visibleEntries(value)) {\n    if (key === skipKey) continue;\n    const label = plainFieldLabel(key);\n    if (isScalar(child)) {\n      scalars.push(`- **${label}:** ${scalarText(child)}`);\n    } else if (Array.isArray(child) && child.every(isScalar)) {\n      scalars.push(`- **${label}:** ${child.map(scalarText).join(\", \")}`);\n    } else if (isKindValue(child)) {\n      sections.push(joinBlocks([`${headingFor(depth + 1)} ${label}`, nested(child)]));\n    } else if (Array.isArray(child)) {\n      sections.push(\n        joinBlocks([\n          `${headingFor(depth + 1)} ${label}`,\n          uniformTable(child) ?? listLines(child, \"\", nested).join(\"\\n\"),\n        ]),\n      );\n    } else if (isRecordValue(child)) {\n      sections.push(\n        joinBlocks([\n          `${headingFor(depth + 1)} ${label}`,\n          ...recordBody(child, depth + 1, nested, null),\n        ]),\n      );\n    }\n  }\n  return [scalars.length ? scalars.join(\"\\n\") : null, ...sections].filter(\n    (block): block is string => block !== null,\n  );\n}\n\n/** Which key the derived title was read from, so it is not repeated below. */\nfunction titleSourceKey(value: Record<string, unknown>, title: string | null): string | null {\n  if (!title) return null;\n  for (const key of INSTANCE_TITLE_KEYS) {\n    const v = value[key];\n    if (typeof v === \"string\" && v.trim() === title) return key;\n  }\n  return null;\n}\n\n/**\n * Fallback markdown for kinds with no `toMarkdown` facet (or unregistered\n * kinds): READABLE markdown built from the value itself (kind-never-raw,\n * Arman 2026-09-30 — a kind is never shown as raw JSON, an export included).\n * Heading = the instance title (`deriveInstanceTitle`), then the kind's\n * name; scalar fields as a bold-label list; arrays of uniform scalar records\n * as a table, other arrays as nested lists; nested plain objects as\n * sections; nested KINDS through `nested` (the registry converter —\n * `kindValueToMarkdown` passes itself; default: this function). Never the\n * `__kind` key, never a JSON fence. Every field still appears (zero loss in\n * content; the discriminator is named in words by the subtitle).\n */\nexport function genericKindMarkdown(\n  kind: string,\n  value: Record<string, unknown>,\n  nested?: NestedKindMarkdown,\n): string {\n  const renderNested: NestedKindMarkdown =\n    nested ??\n    ((child) =>\n      genericKindMarkdown(String(child[KIND_KEY] ?? \"artifact\"), child));\n  const title = deriveInstanceTitle(value);\n  return joinBlocks([\n    `# ${title ?? humanizeKind(kind)}`,\n    `*${humanizeKind(kind)}*`,\n    ...recordBody(value, 1, renderNested, titleSourceKey(value, title)),\n  ]);\n}\n\n/**\n * Readable markdown for a value that is NOT itself a kind — a kindless JSON\n * wrapper around kinds, or a run of plain values beside kinds in an array —\n * so a destination (export, copy) never prints it as JSON. Same rendering as\n * a kind's body in {@link genericKindMarkdown} (bold-label scalars, tables for\n * uniform records, nested lists, sections), nested kinds through `nested`.\n */\nexport function plainValueMarkdown(value: unknown, nested?: NestedKindMarkdown): string {\n  const renderNested: NestedKindMarkdown =\n    nested ??\n    ((child) => genericKindMarkdown(String(child[KIND_KEY] ?? \"artifact\"), child));\n  if (value === null || value === undefined) return \"\";\n  if (isKindValue(value)) return renderNested(value);\n  if (Array.isArray(value)) {\n    return uniformTable(value) ?? listLines(value, \"\", renderNested).join(\"\\n\");\n  }\n  if (isRecordValue(value)) return joinBlocks(recordBody(value, 1, renderNested, null));\n  return isScalar(value) ? scalarText(value) : String(value);\n}\n","/**\n * kind-value-markdown — a kind-carrying value object → markdown, through the host's\n * kind registry when it registers one (`registerKindValueMarkdown`), else the package's\n * generic readable rendering (never a JSON dump, never the `__kind` key).\n *\n * The registration lives on `globalThis` (dual-loader graphs split module state). An\n * unregistered host is announced once on the console, never silently.\n */\nimport { readObjectKind } from \"../core/kind-schema.types\";\nimport { genericKindMarkdown } from \"./kind-markdown-utils\";\n\nexport type KindValueToMarkdown = (value: Record<string, unknown>, fallbackKind?: string) => string;\n\ninterface KindValueMarkdownState {\n  impl: KindValueToMarkdown | null;\n  announced: boolean;\n}\n\nconst STATE_KEY = Symbol.for(\"ai-matrx.content-ir.kind-value-markdown\");\n\nfunction state(): KindValueMarkdownState {\n  const g = globalThis as unknown as Record<symbol, KindValueMarkdownState | undefined>;\n  let s = g[STATE_KEY];\n  if (!s) {\n    s = { impl: null, announced: false };\n    g[STATE_KEY] = s;\n  }\n  return s;\n}\n\n/** The host's registry-backed converter (matrx-frontend: `features/canvas/export/exportArtifactMarkdown`). */\nexport function registerKindValueMarkdown(impl: KindValueToMarkdown | null): void {\n  state().impl = impl;\n}\n\nexport function kindValueToMarkdown(\n  value: Record<string, unknown>,\n  fallbackKind = \"artifact\",\n): string {\n  const s = state();\n  if (s.impl) return s.impl(value, fallbackKind);\n  if (!s.announced) {\n    s.announced = true;\n    console.warn(\n      '[@ai-matrx/content-ir] No \"kindValueMarkdown\" registered, so kind values render through the generic readable form, not the host\\'s kind registry.',\n    );\n  }\n  const nested = (child: Record<string, unknown>) => kindValueToMarkdown(child);\n  return genericKindMarkdown(readObjectKind(value) ?? fallbackKind, value, nested);\n}\n","/**\n * Answer TEXT → the readable markdown a person meant, for DISPLAY and EXPORT\n * destinations only (a note, a task, a file, a print, a clipboard copy, the\n * speaker, a plain-text slot). Rule (Arman, 2026-09-30): a kind is never shown\n * as raw JSON — every `{\"__kind\":…}` region in the text (bare, or the whole\n * body of a ```json / unlabelled fence) becomes that kind's markdown through\n * the ONE kind → markdown converter (`kindValueToMarkdown`: the registry's\n * `toMarkdown` facet, else `genericKindMarkdown`).\n *\n * 🚨 Never call this on data that is STORED or PASSED to a machine: `__kind`\n * is part of the data. This is a destination transform, the same as\n * `unwrapKindEnvelopes`. Kindless text returns byte for byte.\n *\n * Regions come from the one embedded-kind region finder\n * (`findEmbeddedKindJsonRegions`); the signal is the one detector\n * (`hasKindKey`). Nobody writes a second one.\n */\n\nimport { findCodeRanges, fenceParts } from \"../source\";\nimport { kindValueToMarkdown } from \"./kind-value-markdown\";\nimport { humanizeKind, plainValueMarkdown } from \"./kind-markdown-utils\";\nimport {\n  balancedEnds,\n  findBrokenKindJsonRegions,\n  findKindCarryingJsonValues,\n  frontMatterEnd,\n} from \"./embedded-kind-json\";\nimport { firstKindSlug, hasKindKey, isKindJsonText, normalizeKindSpellings, valueCarriesKind } from \"./json-kind-signal\";\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isKindObject(value: unknown): value is Record<string, unknown> {\n  return (\n    isRecord(value) &&\n    typeof value.__kind === \"string\" &&\n    value.__kind.trim().length > 0\n  );\n}\n\n/**\n * The one-line broken state of a kind that never completed (≤60 chars) — the\n * SAME words the compact preview shows (`AnswerTextPreview`), so an export of\n * a cut-off answer says what the screen said.\n */\nexport function unfinishedKindLabel(kind: string | null): string {\n  return kind ? `${humanizeKind(kind)} did not finish` : \"Result did not finish\";\n}\n\n/** The one-line note for structured output whose `__kind` cannot name a kind. */\nexport const UNREADABLE_KIND_NOTE = \"Structured output could not be read\";\n\n/** A slug the kind loader may name: letters, digits and `_.:-` only. */\nconst KIND_SLUG_TEXT = /^[A-Za-z0-9_.:-]+$/;\n\n/** Does this parsed value hold an object whose `__kind` is not a readable slug, at any depth? */\nfunction carriesBrokenKind(value: unknown, depth = 0): boolean {\n  if (depth > 64 || value === null || typeof value !== \"object\") return false;\n  if (Array.isArray(value)) return value.some((item) => carriesBrokenKind(item, depth + 1));\n  const record = value as Record<string, unknown>;\n  if (Object.prototype.hasOwnProperty.call(record, \"__kind\")) {\n    const kind = record.__kind;\n    // An object / array under `__kind` is a shape (a pasted JSON schema's\n    // `properties`), not a kind — left as written (round 10).\n    // A list under `__kind` is broken output, not a shape (round 11, L2).\n    const shape = typeof kind === \"object\" && kind !== null && !Array.isArray(kind);\n    if (!shape && (typeof kind !== \"string\" || !KIND_SLUG_TEXT.test(kind))) return true;\n  }\n  return Object.values(record).some((item) => carriesBrokenKind(item, depth + 1));\n}\n\n\n/** Sorted, non-overlapping ranges → for each position, whether it lies inside one (a cursor, linear over a forward walk). */\nfunction rangeCursor(ranges: Array<[number, number]>): (at: number) => [number, number] | undefined {\n  const sorted = [...ranges].sort((a, b) => a[0] - b[0]);\n  let k = 0;\n  return (at) => {\n    while (k < sorted.length && sorted[k]![1] <= at) k++;\n    for (let j = k; j < sorted.length && sorted[j]![0] <= at; j++) if (at < sorted[j]![1]) return sorted[j];\n    return undefined;\n  };\n}\n\n/** Ranges whose text is quoted SOURCE (inline code, non-JSON fences) — never converted. */\nfunction quotedCodeRanges(text: string): Array<[number, number]> {\n  return findCodeRanges(text)\n    .filter((range) => {\n      if (range.kind !== \"fence\") return true;\n      const parts = fenceParts(text.slice(range.start, range.end));\n      return !parts || !JSON_FENCE_LANGS.has(parts.opener.lang.toLowerCase());\n    })\n    .map((range): [number, number] => [range.start, range.end]);\n}\n\n/**\n * Complete JSON values holding a `__kind` that cannot name a kind (a number,\n * null, empty, a non-slug) — broken structured output — become the one-line\n * unreadable note. A JSON fence that held only such a value goes with it.\n */\nfunction noteUnreadableKinds(text: string): string {\n  if (!hasKindKey(text)) return text;\n  // An unreadable kind must be a COMPLETE JSON value.  Avoid building code\n  // ranges and a balance table for an arriving/malformed stream that has no\n  // possible JSON closer at all; this is common in truncated exports and was\n  // still several full walks for every `{ \"__kind\"` opener.\n  if (!text.includes(\"}\") && !text.includes(\"]\")) return text;\n  const quoted = quotedCodeRanges(text);\n  const fences = findCodeRanges(text).filter((range) => range.kind === \"fence\");\n  const spans: Array<[number, number]> = [];\n  const ends = balancedEnds(text);\n  const quotedAt = rangeCursor(quoted);\n  for (let i = 0; i < text.length; i++) {\n    const ch = text[i];\n    if (ch !== \"{\" && ch !== \"[\") continue;\n    const range = quotedAt(i);\n    if (range) {\n      i = range[1] - 1;\n      continue;\n    }\n    const end = ends[i]!;\n    if (end < 0) continue;\n    let value: unknown;\n    try {\n      value = JSON.parse(text.slice(i, end));\n    } catch {\n      continue;\n    }\n    if (carriesBrokenKind(value)) spans.push([i, end]);\n    i = end - 1;\n  }\n  // `out` is `text.slice(0, kept) + tail`: spans are replaced last to first, so\n  // the prefix is always the original text and only the tail is rebuilt (no\n  // whole-text copy per span — linear in the text, round 11 P5).\n  let kept = text.length;\n  let tail = \"\";\n  let tailHead = \"\";\n  for (let k = spans.length - 1; k >= 0; k--) {\n    let [start, end] = spans[k]!;\n    const fence = fences.find((range) => start >= range.start && end <= range.end);\n    if (fence) {\n      const parts = fenceParts(text.slice(fence.start, fence.end));\n      const inner = parts\n        ? text\n            .slice(fence.start, fence.end)\n            .split(\"\\n\")\n            .slice(1, parts.closed ? -1 : undefined)\n            .join(\"\\n\")\n            .trim()\n        : \"\";\n      if (parts && inner === text.slice(start, end).trim()) {\n        start = fence.start;\n        end = fence.end;\n      }\n    }\n    const before = closeBeforeAt(text, start);\n    const following = end <= kept ? text.slice(end, kept) : \"\";\n    const after = end <= kept ? openAfterJoined(following, tail, tailHead) : openAfter(tail.slice(end - kept));\n    kept = before.cut;\n    tailHead = before.add + UNREADABLE_KIND_NOTE;\n    tail = tailHead + after;\n  }\n  return text.slice(0, kept) + tail;\n}\n\n/** A string field whose text is kind JSON → its parsed value (so it converts too). */\nfunction liftKindStrings(value: unknown, depth = 0): unknown {\n  if (depth > 64) return value;\n  if (typeof value === \"string\") {\n    if (!isKindJsonText(value)) return value;\n    try {\n      const parsed: unknown = JSON.parse(value);\n      return valueCarriesKind(parsed) ? parsed : value;\n    } catch {\n      return value;\n    }\n  }\n  if (Array.isArray(value)) return value.map((item) => liftKindStrings(item, depth + 1));\n  if (isRecord(value)) {\n    const out: Record<string, unknown> = {};\n    for (const [key, item] of Object.entries(value)) out[key] = liftKindStrings(item, depth + 1);\n    return out;\n  }\n  return value;\n}\n\n/**\n * Any parsed value that carries a kind → markdown: a kind through the ONE\n * converter (`kindValueToMarkdown`), a list element by element (runs of plain\n * values as readable markdown beside the kinds), a kindless wrapper as its\n * data in markdown with its kinds converted in place.\n */\nfunction valueMarkdown(raw: unknown): string {\n  const value = liftKindStrings(raw);\n  const nested = (child: Record<string, unknown>) => kindValueToMarkdown(child);\n  if (isKindObject(value)) return kindValueToMarkdown(value);\n  if (Array.isArray(value)) {\n    const blocks: string[] = [];\n    let run: unknown[] = [];\n    const flush = () => {\n      if (run.length) blocks.push(plainValueMarkdown(run, nested));\n      run = [];\n    };\n    for (const item of value) {\n      if (isKindObject(item)) {\n        flush();\n        blocks.push(kindValueToMarkdown(item));\n      } else if (Array.isArray(item) || isRecord(item)) {\n        if (valueCarriesKind(item)) {\n          flush();\n          blocks.push(valueMarkdown(item));\n        } else run.push(item);\n      } else run.push(item);\n    }\n    flush();\n    return blocks.filter((block) => block.trim()).join(\"\\n\\n\");\n  }\n  return plainValueMarkdown(value, nested);\n}\n\n/** JSON text that parses to a value carrying a kind → markdown; else null. */\nfunction jsonKindValueMarkdown(text: string): string | null {\n  const trimmed = text.trim();\n  if (!trimmed.startsWith(\"{\") && !trimmed.startsWith(\"[\")) return null;\n  let parsed: unknown;\n  try {\n    parsed = JSON.parse(trimmed);\n  } catch {\n    return null;\n  }\n  return valueCarriesKind(parsed) ? valueMarkdown(parsed) : null;\n}\n\n/** Text before a block: the block starts on its own line, after a blank line. */\nfunction closeBefore(text: string): string {\n  const { cut, add } = closeBeforeAt(text, text.length);\n  return text.slice(0, cut) + add;\n}\n\nconst isLineSpace = (ch: string | undefined) => ch === \" \" || ch === \"\\t\" || ch === \"\\r\";\n\n/** `closeBefore(text.slice(0, at))` as where the kept text ends and what is added (a backward walk, never a regex over the prefix). */\nfunction closeBeforeAt(text: string, at: number): { cut: number; add: string } {\n  let cut = at;\n  while (cut > 0 && isLineSpace(text[cut - 1])) cut--;\n  if (cut === 0) return { cut, add: \"\" };\n  if (text[cut - 1] !== \"\\n\") return { cut, add: \"\\n\\n\" };\n  return { cut, add: cut > 1 && text[cut - 2] === \"\\n\" ? \"\" : \"\\n\" };\n}\n\n/**\n * `openAfter(head + tail)` without flattening `tail`: `tailHead` is the start\n * of `tail` (a note, after its newlines), which never starts with a line space.\n */\nfunction openAfterJoined(head: string, tail: string, tailHead: string): string {\n  let from = 0;\n  while (from < head.length && isLineSpace(head[from])) from++;\n  const rest = head.slice(from);\n  const lead = rest + tailHead.slice(0, 4);\n  if (!lead) return \"\";\n  const joined = rest + tail;\n  if (lead.startsWith(\"\\n\\n\") || lead.startsWith(\"\\r\\n\\r\\n\")) return joined;\n  if (lead.startsWith(\"\\n\")) return `\\n${joined}`;\n  return `\\n\\n${joined}`;\n}\n\n/** Text after a block: whatever follows starts after a blank line. */\nfunction openAfter(text: string): string {\n  const out = text.replace(/^[ \\t\\r]+/, \"\");\n  if (!out) return out;\n  if (out.startsWith(\"\\n\\n\") || out.startsWith(\"\\r\\n\\r\\n\")) return out;\n  if (out.startsWith(\"\\n\")) return `\\n${out}`;\n  return `\\n\\n${out}`;\n}\n\ninterface ConvertOptions {\n  /** A kind that can never complete → its one-line note (exports), or left for the caller (previews). */\n  broken: \"note\" | \"keep\";\n}\n\n/**\n * Every kind region in `text` → markdown: complete kind-carrying JSON values\n * (THE region finder, widened to their outermost JSON value) and — when\n * `broken: \"note\"` — broken/cut-off kinds as their one-line note. `leftover`\n * reshapes the text between regions (identity for prose). Null when the text\n * holds no region.\n */\nfunction convertRegions(\n  text: string,\n  excludeLiteralContexts: boolean,\n  options: ConvertOptions,\n  leftover: (piece: string) => string = (piece) => piece,\n): string | null {\n  type Span = { start: number; end: number; md: string };\n  // A complete JSON kind value necessarily has a JSON closer.  Broken-kind\n  // recovery below still runs without one, but the complete-region finder\n  // would otherwise build another balance table that cannot produce a span.\n  const completeRegions = text.includes(\"}\") || text.includes(\"]\")\n    ? findKindCarryingJsonValues(text, { excludeLiteralContexts })\n    : [];\n  const spans: Span[] = completeRegions.map(\n    (region) => ({ start: region.start, end: region.end, md: valueMarkdown(region.value) }),\n  );\n  if (options.broken === \"note\") {\n    for (const region of findBrokenKindJsonRegions(text, { excludeLiteralContexts })) {\n      spans.push({\n        start: region.start,\n        end: region.end,\n        md: unfinishedKindLabel(firstKindSlug(region.content)),\n      });\n    }\n  }\n  if (spans.length === 0) return null;\n  spans.sort((a, b) => a.start - b.start);\n\n  // Built as parts: `closeBefore` of the whole output per span copied the growing\n  // string each time (quadratic on thousands of regions, round 11 P5).\n  const parts: string[] = [];\n  const push = (piece: string) => {\n    if (piece) parts.push(piece);\n  };\n  const closeBeforeParts = () => {\n    while (parts.length > 0) {\n      const last = parts[parts.length - 1]!;\n      const trimmed = last.replace(/[ \\t\\r]+$/, \"\");\n      if (trimmed) {\n        parts[parts.length - 1] = trimmed;\n        break;\n      }\n      parts.pop();\n    }\n    if (parts.length === 0) return;\n    const last = parts[parts.length - 1]!;\n    if (last[last.length - 1] !== \"\\n\") {\n      parts.push(\"\\n\\n\");\n      return;\n    }\n    const before = last.length > 1 ? last[last.length - 2] : parts.length > 1 ? parts[parts.length - 2]!.slice(-1) : \"\";\n    if (before !== \"\\n\") parts.push(\"\\n\");\n  };\n  let cursor = 0;\n  let afterBlock = false;\n  for (const span of spans) {\n    if (span.start < cursor) continue; // inside a span already taken\n    const between = leftover(text.slice(cursor, span.start));\n    push(afterBlock ? openAfter(between) : between);\n    closeBeforeParts();\n    push(span.md);\n    cursor = span.end;\n    afterBlock = true;\n  }\n  const tail = leftover(text.slice(cursor));\n  push(afterBlock ? openAfter(tail) : tail);\n  return parts.join(\"\");\n}\n\n/** Fence languages whose body is a JSON region (an unlabelled fence included). */\nconst JSON_FENCE_LANGS = new Set([\"\", \"json\", \"jsonc\", \"json5\"]);\n\n/** Blockquote markers that open a line (`> `, `>> `, `> > `). */\nconst QUOTE_PREFIX = /^(?: {0,3}> ?)*/;\n\n/**\n * A json / jsonc / json5 / unlabelled fence (THE code-range rule, CRLF and\n * blockquote-safe) holding kind regions → its markdown, quoted again when the\n * fence sat in a blockquote. Fences of any other language, and inline code\n * spans, are quoted SOURCE and stay as written (owner ruling, 2026-09-30).\n */\nfunction convertKindFences(text: string, options: ConvertOptions): string {\n  // Fences only use backticks or tildes.  The shared source scanner is\n  // intentionally thorough, so do not invoke it for ordinary prose or a\n  // malformed JSON stream that cannot contain a fence.\n  if (!text.includes(\"`\") && !text.includes(\"~\")) return text;\n  const fences = findCodeRanges(text).filter((range) => range.kind === \"fence\");\n  let out = text;\n  for (let i = fences.length - 1; i >= 0; i--) {\n    const range = fences[i]!;\n    const raw = text.slice(range.start, range.end);\n    if (!hasKindKey(raw)) continue;\n    const parts = fenceParts(raw);\n    if (!parts || !JSON_FENCE_LANGS.has(parts.opener.lang.toLowerCase())) continue;\n\n    const lines = raw.split(\"\\n\").map((line) => line.replace(/\\r$/, \"\"));\n    const prefix = QUOTE_PREFIX.exec(lines[0] ?? \"\")?.[0] ?? \"\";\n    const strip = (line: string) => (prefix ? line.replace(QUOTE_PREFIX, \"\") : line);\n    const opener = strip(lines[0] ?? \"\").trim();\n    const fence = parts.opener.char.repeat(parts.opener.ticks);\n    const body = lines.slice(1, parts.closed ? -1 : undefined).map(strip).join(\"\\n\");\n\n    const md =\n      jsonKindValueMarkdown(body) ??\n      convertRegions(body, false, options, (piece) =>\n        /^[\\s,[\\]{}]*$/.test(piece) ? \"\" : `${opener}\\n${piece.trim()}\\n${fence}`,\n      );\n    if (md === null) continue;\n    const block = prefix\n      ? md\n          .split(\"\\n\")\n          .map((line) => (line ? `${prefix}${line}` : prefix.trimEnd()))\n          .join(\"\\n\")\n      : md;\n    out = closeBefore(out.slice(0, range.start)) + block + openAfter(out.slice(range.end));\n  }\n  return out;\n}\n\nfunction convertKindText(text: string, options: ConvertOptions): string {\n  // 0. Front matter holding a kind, and kinds that cannot name themselves.\n  text = noteUnreadableKinds(convertFrontMatterKind(text, options));\n\n  // 1. The whole text is a value carrying kinds (a structured answer's stored JSON).\n  const whole = jsonKindValueMarkdown(text);\n  if (whole !== null) return whole;\n\n  // 2. JSON fences holding kinds.\n  let out = convertKindFences(text, options);\n\n  // 3. Bare kind values in prose (code fences and spans stay quoted source).\n  if (!hasKindKey(out)) return out;\n  out = convertRegions(out, true, options) ?? out;\n\n  // 4. HTML comments are literal to the region finder, but a person reading\n  //    plain text sees what is inside them.\n  out = convertCommentKinds(out, options);\n\n  // 5. A cut-off kind whose key is written escaped (`\"\\u005f_kind\"`).\n  return noteEscapedCutOffKind(out, options);\n}\n\n/** Front matter (`---` … `---`) whose body holds a kind → that kind's markdown. */\nfunction convertFrontMatterKind(text: string, options: ConvertOptions): string {\n  const end = frontMatterEnd(text);\n  if (end === 0 || !hasKindKey(text.slice(0, end))) return text;\n  const block = text.slice(0, end);\n  const lines = block.split(\"\\n\");\n  const body = lines.slice(1, -1).join(\"\\n\").replace(/\\r$/, \"\");\n  const md = convertRegions(body, false, options, (piece) =>\n    /^[\\s,[\\]{}]*$/.test(piece) ? \"\" : piece.trim(),\n  );\n  if (md === null) return text;\n  return md + openAfter(text.slice(end));\n}\n\n/** HTML comments (outside code) holding a kind → the kind's markdown; other comment text stays a comment. */\nfunction convertCommentKinds(text: string, options: ConvertOptions): string {\n  if (!text.includes(\"<!--\")) return text;\n  const quoted = quotedCodeRanges(text);\n  const comments = [...text.matchAll(/<!--[\\s\\S]*?(?:-->|$)/g)].filter(\n    (m) =>\n      hasKindKey(m[0]) && !quoted.some(([a, b]) => m.index! >= a && m.index! < b),\n  );\n  let out = text;\n  for (let i = comments.length - 1; i >= 0; i--) {\n    const m = comments[i]!;\n    const body = m[0].replace(/^<!--/, \"\").replace(/-->$/, \"\");\n    const md = convertRegions(body, false, options, (piece) =>\n      piece.trim() ? `<!-- ${piece.trim()} -->` : \"\",\n    );\n    if (md === null) continue;\n    const start = m.index!;\n    const end = start + m[0].length;\n    out = closeBefore(out.slice(0, start)) + md + openAfter(out.slice(end));\n  }\n  return out;\n}\n\nconst KIND_KEY_PLAIN = /(?<!\\\\)\"__kind\"\\s*:/;\n\n/** An unclosed JSON value at the tail whose `__kind` key is written escaped → its one-line note. */\nfunction noteEscapedCutOffKind(text: string, options: ConvertOptions): string {\n  if (options.broken !== \"note\" || !hasKindKey(text) || KIND_KEY_PLAIN.test(text)) return text;\n  const quotedAt = rangeCursor(quotedCodeRanges(text));\n  const ends = balancedEnds(text);\n  for (let i = 0; i < text.length; i++) {\n    const ch = text[i];\n    if (ch !== \"{\" && ch !== \"[\") continue;\n    const range = quotedAt(i);\n    if (range) {\n      i = range[1] - 1;\n      continue;\n    }\n    const end = ends[i]!;\n    if (end >= 0) {\n      i = end - 1;\n      continue;\n    }\n    const tail = text.slice(i);\n    if (/^[{[]\\s*[\"{[]/.test(tail) && hasKindKey(tail)) {\n      return closeBefore(text.slice(0, i)).trimEnd() + (i > 0 ? \"\\n\\n\" : \"\") + unfinishedKindLabel(firstKindSlug(tail));\n    }\n  }\n  return text;\n}\n\n/**\n * The export transform. Kindless text returns byte for byte; every kind\n * region becomes readable markdown, and a kind that can never complete (cut\n * off, malformed) becomes its one-line \"<Kind> did not finish\" note — never\n * the fragment.\n */\nexport function kindTextToMarkdown(raw: string | null | undefined): string {\n  if (!raw) return \"\";\n  // A Python-repr or zero-width-spelled kind converts like any other (K4).\n  const text = normalizeKindSpellings(raw);\n  if (!hasKindKey(text)) return text;\n  return convertKindText(text, { broken: \"note\" });\n}\n\nexport interface KindTextPreview {\n  /** The readable text: complete kinds as markdown, an arriving kind cut off. */\n  text: string;\n  /** The slug of a kind still arriving at the end of the text (its loader), else null. */\n  pendingKind: string | null;\n  /** True when a kind is arriving but its slug has not been read yet. */\n  pendingUnnamed: boolean;\n}\n\n/**\n * Where the object that OWNS the first `\"__kind\"` key starts — the outermost\n * `{` still open at that key — or -1. String contents are skipped.\n */\nfunction owningObjectStart(text: string, keyIndex: number): number {\n  const open: number[] = [];\n  let inString = false;\n  for (let i = 0; i < keyIndex; i++) {\n    const ch = text[i];\n    if (inString) {\n      if (ch === \"\\\\\") i++;\n      else if (ch === '\"') inString = false;\n      continue;\n    }\n    if (ch === '\"') inString = true;\n    else if (ch === \"{\") open.push(i);\n    else if (ch === \"}\") open.pop();\n  }\n  return open[0] ?? -1;\n}\n\n/**\n * Where the first `__kind` KEY starts (its opening quote), or -1 — found with\n * the shared detector (`hasKindKey`, which also sees the `\\u005f_kind` spelling):\n * the shortest prefix the detector accepts ends at the key's colon.\n */\nfunction kindKeyIndex(text: string): number {\n  if (!hasKindKey(text)) return -1;\n  let lo = 0;\n  let hi = text.length;\n  while (lo < hi) {\n    const mid = (lo + hi) >> 1;\n    if (hasKindKey(text.slice(0, mid))) hi = mid;\n    else lo = mid + 1;\n  }\n  let i = lo - 1; // the colon\n  while (i > 0 && /\\s/.test(text[i - 1]!)) i--;\n  const closing = i - 1; // the key's closing quote\n  return text.lastIndexOf('\"', closing - 1);\n}\n\n/**\n * A COMPACT, possibly still-streaming preview of answer text (a toast, a\n * hover card, a list row): complete kinds read as their markdown; a kind\n * still arriving is cut from the text and named in `pendingKind` so the\n * caller shows that kind's loader — the raw JSON never shows mid-stream.\n */\nexport function kindTextPreview(raw: string | null | undefined): KindTextPreview {\n  const text = raw ? normalizeKindSpellings(raw) : raw;\n  // An arriving kind is the caller's loader, not a note: keep it to cut below.\n  const md = !text ? \"\" : hasKindKey(text) ? convertKindText(text, { broken: \"keep\" }) : text;\n  const keyIndex = kindKeyIndex(md);\n  if (keyIndex < 0) return { text: md, pendingKind: null, pendingUnnamed: false };\n  const start = owningObjectStart(md, keyIndex);\n  const cutAt = start < 0 ? keyIndex : start;\n  // Drop an opening fence line that only introduces the arriving kind.\n  const head = md.slice(0, cutAt).replace(/(^|\\n)[ \\t]*(`{3,}|~{3,})[^\\n]*\\n?[ \\t]*$/, \"$1\");\n  const slug = firstKindSlug(md.slice(keyIndex));\n  return { text: head.trimEnd(), pendingKind: slug, pendingUnnamed: slug === null };\n}\n","/**\n * THE ONE-LINE FORM of a kind — what an INLINE surface shows where a kind\n * region sits in its text (P6, round 4): a collapsed card preview, a\n * notification body, an extraction cell, a table cell. An inline/preview level\n * cannot mount a kind component, so a kind reads as its instance title and\n * kind name (`**Cells** · Flashcard Set`), an unfinished one as its kind name\n * alone, and an unreadable one as \"Structured output\". Never the JSON.\n *\n * LIGHT on purpose — the inline level must not pull the kind registry or the\n * block pipeline: the region finder (`embedded-kind-json.ts`), the detector\n * and the title derivation (`studio/instance-title.ts`) only.\n */\n\nimport { humanizeIdentifier } from \"@ai-matrx/kit/text-case\";\nimport { deriveInstanceTitle } from \"./instance-title\";\nimport { UNREADABLE_KIND_NOTE } from \"./kind-text-to-markdown\";\nimport {\n  findBrokenKindJsonRegions,\n  findEmbeddedKindJsonRegions,\n} from \"./embedded-kind-json\";\nimport {\n  closedJson,\n  firstKindSlug,\n  hasKindKey,\n  kindGrammar,\n  mayHoldKindKey,\n  hasJsonKindKey,\n  normalizeKindSpellings,\n  quotedSourceRanges,\n  regionJson,\n  scanKindSpellingRegions,\n  type KindSpellingRegion,\n} from \"./json-kind-signal\";\n\nconst UNNAMED = \"Structured output\";\n\nfunction kindName(slug: string | null | undefined): string {\n  return (slug && humanizeIdentifier(slug)) || UNNAMED;\n}\n\n/**\n * One line for a kind VALUE: `**Title** · Kind Name`, or the kind name alone.\n * `plain` drops the markdown emphasis (`Title · Kind Name`) for slots that\n * draw text as written — a tooltip, a `title` attribute, a clamped caption.\n */\nexport function kindOneLine(value: unknown, options: { plain?: boolean } = {}): string {\n  if (!value || typeof value !== \"object\" || Array.isArray(value)) return UNNAMED;\n  const record = value as Record<string, unknown>;\n  const slug = typeof record.__kind === \"string\" ? record.__kind : null;\n  const title = deriveInstanceTitle(record);\n  const name = kindName(slug);\n  if (!(title && title !== name)) return name;\n  const clean = title.replace(/[*_`[\\]]/g, \"\");\n  return options.plain ? `${clean} · ${name}` : `**${clean}** · ${name}`;\n}\n\nfunction inside(ranges: Array<[number, number]>, at: number): boolean {\n  return ranges.some(([start, end]) => at >= start && at < end);\n}\n\n/**\n * The text with every kind region (complete, unfinished or unreadable) in\n * prose replaced by its one-line form. Quoted source (inline code, non-JSON\n * fences) stays as written. Text with no kind key comes back unchanged.\n */\nexport function inlineKindText(raw: string, options: { plain?: boolean } = {}): string {\n  // A zero-width or markdown-escaped key converts like the literal one; every\n  // non-JSON spelling stays exactly as written (round 10).\n  const source = raw ? normalizeKindSpellings(raw) : raw;\n  if (!source || !hasKindKey(source)) return source;\n  type Span = { start: number; end: number; line: string };\n  const spans: Span[] = [];\n  for (const region of findEmbeddedKindJsonRegions(source, { excludeQuotedSource: true })) {\n    let value: unknown = null;\n    try {\n      value = JSON.parse(region.content);\n    } catch {\n      value = { __kind: region.kind };\n    }\n    spans.push({ start: region.start, end: region.end, line: kindOneLine(value, options) });\n  }\n  const quoted = quotedSourceRanges(source);\n  for (const region of findBrokenKindJsonRegions(source)) {\n    if (inside(quoted, region.start)) continue;\n    spans.push({ start: region.start, end: region.end, line: kindName(firstKindSlug(region.content)) });\n  }\n  spans.sort((a, b) => a.start - b.start);\n  let out = \"\";\n  let cursor = 0;\n  for (const span of spans) {\n    if (span.start < cursor) continue;\n    out += source.slice(cursor, span.start) + span.line;\n    cursor = span.end;\n  }\n  out += source.slice(cursor);\n  // Anything the finders could not bound: the `{` right before the first\n  // remaining key, ONLY when its own JSON grammar reaches the key — to the end\n  // of the text while it is still validly open, else to where it breaks. A\n  // stray or unrelated earlier `{` (prose braces, a pasted schema) never owns\n  // it, and nothing past a grammar failure is ever touched (round 10, C1).\n  if (hasKindKey(out)) {\n    const key = out.search(/(?<!\\\\)\"(?:__kind|\\\\u005[fF]_kind)\"\\s*:/);\n    const brace = key >= 0 ? out.lastIndexOf(\"{\", key) : -1;\n    if (brace >= 0 && !inside(quotedSourceRanges(out), brace)) {\n      const verdict = kindGrammar(out, \"json\", brace);\n      const end =\n        verdict.status === \"prefix\" ? out.length : verdict.status === \"broken\" && verdict.at > key ? verdict.cut : -1;\n      if (end > key) out = out.slice(0, brace) + kindName(firstKindSlug(out.slice(key, end))) + out.slice(end);\n    }\n  }\n  return unreadableKindsAsNote(out);\n}\n\n/**\n * Whether parsed JSON text is an object whose `__kind` is not a string — a\n * list, number, boolean or null: broken structured output (round 11, L2). An\n * object under `__kind` is a shape (a pasted schema), not a kind (round 10).\n */\nfunction holdsUnreadableKind(json: string): boolean {\n  let value: unknown;\n  try {\n    value = JSON.parse(json);\n  } catch {\n    return false;\n  }\n  if (value === null || typeof value !== \"object\" || Array.isArray(value)) return false;\n  if (!Object.prototype.hasOwnProperty.call(value, \"__kind\")) return false;\n  const kind = (value as Record<string, unknown>).__kind;\n  if (typeof kind === \"string\") return false;\n  return !(typeof kind === \"object\" && kind !== null && !Array.isArray(kind));\n}\n\n/**\n * A complete JSON kind region whose `__kind` cannot name a kind (`{\"__kind\":\n * [\"x\"], …}`, `{\"__kind\": 5}`) → the one-line unreadable note, the words the\n * export writes (`UNREADABLE_KIND_NOTE`), instead of raw JSON (round 11, L2).\n */\nexport function unreadableKindsAsNote(text: string): string {\n  if (!text || !mayHoldKindKey(text) || !hasJsonKindKey(text)) return text;\n  let out = \"\";\n  let cursor = 0;\n  for (const region of scanKindSpellingRegions(text)) {\n    if (region.status !== \"complete\") continue;\n    const json = regionJson(region);\n    if (json === null || !holdsUnreadableKind(json)) continue;\n    out += text.slice(cursor, region.start) + UNREADABLE_KIND_NOTE;\n    cursor = region.end;\n  }\n  return cursor === 0 ? text : out + text.slice(cursor);\n}\n\n/**\n * CATALOG PROSE as a person reads it (ruling (a), round 6): a skill / agent /\n * tool description that shows an example kind JSON (`emit a\n * {\"__kind\": \"math_problem\"} block`) is documentation — the example reads as\n * its kind's one-line label, never the JSON. Plain text out, for text AND\n * attribute slots (`title`, tooltips). Display transform only: the stored\n * description is never rewritten.\n */\nexport function catalogProseText(text: string | null | undefined): string {\n  if (!text) return \"\";\n  return inlineKindText(text, { plain: true });\n}\n\n/** The one-line form of one broken JSON region (settled, unclosed — cut where its grammar broke). */\nfunction regionOneLine(region: KindSpellingRegion): string {\n  const json =\n    region.status === \"complete\" ? regionJson(region) : region.status === \"broken\" ? closedJson(region) : null;\n  if (json !== null) {\n    try {\n      const value: unknown = JSON.parse(json);\n      if (value !== null && typeof value === \"object\" && !Array.isArray(value)) return kindOneLine(value);\n    } catch {\n      // The kind's name alone, below.\n    }\n  }\n  return kindName(firstKindSlug(json ?? region.decoded));\n}\n\n/** Frames repeat (two leaves read every frame): the last few answers, by text. */\nconst ONE_LINE_CACHE = new Map<string, string>();\nconst ONE_LINE_CACHE_SIZE = 16;\n\n/**\n * THE PROSE LEAF's kind reading (round 10 boundary): a REAL JSON kind region\n * the pipeline cannot lift — a settled object whose grammar BROKE in prose\n * (`{\"__kind\":\"note\",\"title\":\"Hi\" and then…`), or a markdown-escaped key\n * (`\"\\_\\_kind\"`) — reads as its one-line label, then every character after\n * its cut as written. A complete literal kind is the pipeline's (lifted).\n * Every NON-JSON spelling (`{\\\"__kind\\\":…}` in prose, repr, a JS literal,\n * typographic quotes, entities) is left EXACTLY as written — detection only.\n * Called by the one prose leaf live and reloaded text both pass through, so\n * live ≡ reload. One linear pass, memoized per text; text with no such region\n * comes back as the same string.\n */\nexport function spelledKindsAsOneLine(text: string): string {\n  if (!text || !mayHoldKindKey(text)) return text;\n  const cached = ONE_LINE_CACHE.get(text);\n  if (cached !== undefined) return cached;\n  const out = computeSpelledKindsAsOneLine(text);\n  if (ONE_LINE_CACHE.size >= ONE_LINE_CACHE_SIZE) ONE_LINE_CACHE.delete(ONE_LINE_CACHE.keys().next().value!);\n  ONE_LINE_CACHE.set(text, out);\n  return out;\n}\n\nfunction computeSpelledKindsAsOneLine(text: string): string {\n  let out = \"\";\n  let cursor = 0;\n  for (const region of scanKindSpellingRegions(text)) {\n    // A literal key is lifted by the pipeline — unless it broke in prose, or\n    // its `__kind` cannot name a kind (round 11, L2: the unreadable note).\n    if (region.family === \"lifted\" && !region.markdown && region.status !== \"broken\") {\n      const json = region.status === \"complete\" ? regionJson(region) : null;\n      if (json === null || !holdsUnreadableKind(json)) continue;\n      out += text.slice(cursor, region.start) + UNREADABLE_KIND_NOTE;\n      cursor = region.end;\n      continue;\n    }\n    out += text.slice(cursor, region.start) + regionOneLine(region);\n    cursor = region.end;\n  }\n  return cursor === 0 ? text : out + text.slice(cursor);\n}\n\n\nconst AS_CODE_CACHE = new Map<string, string>();\n\n/**\n * Round 10, detection-only spellings drawn EXACTLY as written: a non-JSON\n * kind spelling in prose (`{\\\"__kind\\\":…}`, repr, a JS literal, typographic\n * quotes, entities) becomes an inline code span, so markdown neither eats its\n * backslashes nor decodes its entities — the screen shows the source byte for\n * byte, as quoted source. Nothing outside a region changes; text with no such\n * region comes back as the same string. One linear pass, memoized per text.\n * (A markdown-escaping pass did the same job and hung the renderer on nested\n * escapes — never reintroduce it.)\n */\nexport function nonJsonKindsAsCode(text: string): string {\n  if (!text || !mayHoldKindKey(text)) return text;\n  const cached = AS_CODE_CACHE.get(text);\n  if (cached !== undefined) return cached;\n  let out = \"\";\n  let cursor = 0;\n  let paragraphs: CodeSpanParagraph[] | null = null;\n  let p = 0;\n  for (const region of scanKindSpellingRegions(text, { families: \"all\" })) {\n    if (region.family === \"lifted\" || region.family === \"markdown\") continue;\n    paragraphs ??= codeSpanParagraphs(text);\n    while (p < paragraphs.length - 1 && paragraphs[p]!.end <= region.start) p++;\n    const fence = safeCodeSpanFence(text, region.start, region.end, paragraphs[p]!);\n    if (fence === null) continue; // detection only: left exactly as it was\n    out += text.slice(cursor, region.start) + fence + text.slice(region.start, region.end) + fence;\n    cursor = region.end;\n  }\n  const result = cursor === 0 ? text : out + text.slice(cursor);\n  if (AS_CODE_CACHE.size >= ONE_LINE_CACHE_SIZE) AS_CODE_CACHE.delete(AS_CODE_CACHE.keys().next().value!);\n  AS_CODE_CACHE.set(text, result);\n  return result;\n}\n\n/** One blank-line-bounded paragraph of the text, read once per call (round 11, H3). */\ninterface CodeSpanParagraph {\n  start: number;\n  end: number;\n  /** A line opening raw HTML: CommonMark draws an HTML block's text verbatim, backticks included. */\n  html: boolean;\n  /** A GFM table row in it: a `|` inside a code span would still split the cell. */\n  table: boolean;\n  /** Lengths of every backtick run in it. */\n  runs: Set<number>;\n}\n\n/** A line that can start (or interrupt with) an HTML block; inline tags mid-line keep markdown. */\nconst HTML_TAG = /^ {0,3}<\\/?[A-Za-z][A-Za-z0-9-]*(?:[\\s/>]|$)/m;\nconst TABLE_ROW = /^[ \\t]*\\|/m;\n\nfunction codeSpanParagraphs(text: string): CodeSpanParagraph[] {\n  const out: CodeSpanParagraph[] = [];\n  const blank = /\\n[ \\t]*\\n/g;\n  let start = 0;\n  for (;;) {\n    const m = blank.exec(text);\n    const end = m ? m.index + 1 : text.length;\n    const body = text.slice(start, end);\n    const runs = new Set<number>();\n    for (let i = 0; i < body.length; ) {\n      if (body[i] !== \"`\") {\n        i++;\n        continue;\n      }\n      let n = 0;\n      while (body[i + n] === \"`\") n++;\n      runs.add(n);\n      i += n;\n    }\n    out.push({ start, end, html: HTML_TAG.test(body), table: TABLE_ROW.test(body), runs });\n    if (!m) break;\n    start = m.index + m[0].length - 1;\n  }\n  return out;\n}\n\n/**\n * The backtick fence that draws `text[start, end)` as an inline code span\n * WITHOUT changing anything around it — or null when no fence can (round 11,\n * H3): the region crosses a blank line (a span cannot), sits in raw HTML (its\n * backticks would show), holds a backtick or a table pipe, or touches a\n * backtick (the runs would merge). The fence length is one no backtick run in\n * the paragraph has, so no stray backtick there can pair with it.\n */\nfunction safeCodeSpanFence(text: string, start: number, end: number, paragraph: CodeSpanParagraph): string | null {\n  const source = text.slice(start, end);\n  if (/\\n[ \\t]*\\n/.test(source) || source.includes(\"`\")) return null;\n  if (paragraph.html || (paragraph.table && source.includes(\"|\"))) return null;\n  if (text[start - 1] === \"`\" || text[end] === \"`\") return null;\n  let ticks = 1;\n  while (paragraph.runs.has(ticks)) ticks++;\n  return \"`\".repeat(ticks);\n}\n","/**\n * A JSON REGION INSIDE A BLOCKQUOTE leaves the quote (V1, the never-raw law).\n *\n * A model sometimes quotes its whole answer — `> ```json` / `> {\"__kind\":…}` —\n * and every line then starts with `>`. Neither host could see the region: the\n * live accumulator classifies a `>` line as prose, the static splitter keeps\n * the quote as one text block, so the kind was drawn as raw JSON inside a\n * blockquote in chat, on reload, on public shared pages and in tool results.\n *\n * THE RULE: a blockquote holds prose, never a data region. A JSON-family\n * fence (```json / ```jsonc / ```json5 / unlabelled, any case, ``` or ~~~)\n * opening on a quoted line, or a quoted line whose JSON could be a kind (the\n * first-key rule, `jsonKindSignal`), is LIFTED: its quote prefix is removed\n * from every line of the region, so the region becomes an ordinary top-level\n * fence / bare JSON object between two quotes. The quote before it renders as\n * a quote, the region as its kind, the quote after it as a new quote. Quoted\n * text that is not a JSON region is never touched — and a fence of another\n * language (```ts, ```xml, ```markdown, quoted or not) is the model quoting\n * SOURCE, so nothing inside it is lifted (the owner's ruling, 2026-09-30).\n *\n * ONE transform, both hosts: the live accumulator pushes every delta through\n * a `QuotedKindLift` before its line machine; the static splitter runs\n * `liftQuotedKindRegions` on the whole text first. The transform is\n * chunk-invariant (decisions are taken only at points every chunking reaches\n * with the same bytes), so live = reload byte for byte.\n */\n\nimport { FenceReader, fenceOpenerOf } from \"../source\";\nimport { jsonKindSignal } from \"./json-kind-signal\";\n\n/** Fence languages whose body is a JSON region (an unlabelled fence included). */\nconst JSON_FENCE_LANGS = new Set([\"\", \"json\", \"jsonc\", \"json5\"]);\n\n/** A blockquote prefix: up to three spaces, then one or more `>` (each with an optional space). */\nconst QUOTE_PREFIX = /^ {0,3}>(?: ?>)* ?/;\n\n/** How deep a matched quote prefix nests (`> >` is 2). */\nfunction quoteDepth(prefix: string): number {\n  return (prefix.match(/>/g) ?? []).length;\n}\n\n/** A prefix of exactly `depth` levels, or null. */\nfunction prefixOfDepth(line: string, depth: number): string | null {\n  const match = new RegExp(`^ {0,3}>(?: ?>){${depth - 1}} ?`).exec(line);\n  return match ? match[0] : null;\n}\n\ntype Mode =\n  /** Between regions. */\n  | { kind: \"none\" }\n  /** Inside an unquoted (or quoted, non-JSON) fence: everything passes as written. */\n  | { kind: \"source_fence\"; reader: FenceReader; depth: number }\n  /** Quoted JSON-ish lines held while the first key decides (multi-line `> {`). */\n  | { kind: \"candidate\"; depth: number; raw: string[]; stripped: string[] }\n  /** A lifted JSON-family fence: prefix stripped until its closing line. */\n  | { kind: \"lifted_fence\"; reader: FenceReader; depth: number }\n  /** A lifted bare JSON value: prefix stripped until its brackets balance. */\n  | { kind: \"lifted_bare\"; depth: number; balance: number };\n\n/** Structural bracket balance of one line (JSON strings are opaque; none spans a line). */\nfunction bracketDelta(line: string): number {\n  let delta = 0;\n  let inString = false;\n  let escaped = false;\n  for (const ch of line) {\n    if (inString) {\n      if (escaped) escaped = false;\n      else if (ch === \"\\\\\") escaped = true;\n      else if (ch === '\"') inString = false;\n      continue;\n    }\n    if (ch === '\"') inString = true;\n    else if (ch === \"{\" || ch === \"[\") delta++;\n    else if (ch === \"}\" || ch === \"]\") delta--;\n  }\n  return delta;\n}\n\n/**\n * The streaming lift. `push` returns the bytes that are safe to hand on now;\n * a line whose fate is not known yet (a quoted line that may open a JSON\n * region) is held — never shown raw — until it is. `flush` releases what is\n * held, as written, at the end of the stream (or a hard boundary).\n */\nexport class QuotedKindLift {\n  private mode: Mode = { kind: \"none\" };\n  /** The current line's bytes not yet handed on (held while undecided). */\n  private held = \"\";\n  /** The current line's bytes so far (handed on or not), as received. */\n  private line = \"\";\n  /** Whether the rest of the current line passes straight through. */\n  private passing = false;\n  /** Prefix stripped from the current line's handed-on bytes (passing lines). */\n  private stripping = 0;\n\n  push(text: string): string {\n    let out = \"\";\n    for (const ch of text) out += this.pushChar(ch);\n    return out;\n  }\n\n  flush(): string {\n    let out = \"\";\n    if (this.mode.kind === \"candidate\") {\n      out += this.mode.raw.join(\"\\n\") + (this.mode.raw.length ? \"\\n\" : \"\");\n      this.mode = { kind: \"none\" };\n    }\n    out += this.held;\n    this.held = \"\";\n    this.line = \"\";\n    this.passing = false;\n    this.stripping = 0;\n    return out;\n  }\n\n  private pushChar(ch: string): string {\n    if (ch === \"\\n\") return this.endLine();\n    this.line += ch;\n    if (this.passing) {\n      if (this.stripping > 0) {\n        // Still inside the prefix being removed.\n        this.stripping--;\n        return \"\";\n      }\n      return ch;\n    }\n    this.held += ch;\n    return this.decideMidLine();\n  }\n\n  /** Try to decide the current line before it ends; returns bytes released. */\n  private decideMidLine(): string {\n    const mode = this.mode;\n    if (mode.kind === \"source_fence\") {\n      // Pass as written; the closer is judged at line end.\n      return this.release(this.held, 0);\n    }\n    if (mode.kind === \"lifted_fence\" || mode.kind === \"lifted_bare\") {\n      const prefix = prefixOfDepth(this.held, mode.depth);\n      if (prefix !== null && (this.held.length > prefix.length || /> $/.test(prefix))) {\n        // The prefix is known and complete: strip it, pass the rest live.\n        // A lifted fence's closing line is judged at line end, so a fragment\n        // that may be that closer (it opens with a backtick or tilde) waits.\n        const rest = this.held.slice(prefix.length);\n        if (mode.kind === \"lifted_fence\" && /^\\s*[`~]/.test(rest)) return \"\";\n        return this.release(rest, 0);\n      }\n      if (!/^ {0,3}(?:> ?)*$/.test(this.held)) {\n        // A lazy line (no quote prefix) inside the region: passes as written.\n        return this.release(this.held, 0);\n      }\n      return \"\";\n    }\n    if (mode.kind === \"candidate\") return \"\";\n    // none: is this line a quote at all?\n    if (!/^ {0,3}(?:>|$)/.test(this.held) && !/^ {0,3}$/.test(this.held)) {\n      return this.release(this.held, 0);\n    }\n    const prefix = QUOTE_PREFIX.exec(this.held)?.[0];\n    if (!prefix) return \"\";\n    const rest = this.held.slice(prefix.length);\n    if (!rest.trim()) return \"\";\n    const first = rest.trimStart()[0];\n    if (first === \"`\" || first === \"~\") return \"\"; // decided at line end\n    if (first === \"{\" || first === \"[\") {\n      // Lift the moment the first key says kind (monotonic — a `__kind` key\n      // never un-arrives); anything else waits for the line to end.\n      if (jsonKindSignal(rest) === \"kind\") {\n        this.mode = { kind: \"lifted_bare\", depth: quoteDepth(prefix), balance: 0 };\n        return this.release(rest, 0);\n      }\n      return \"\";\n    }\n    // Quoted prose.\n    return this.release(this.held, 0);\n  }\n\n  /** Hand on `bytes` and let the rest of the line pass straight through. */\n  private release(bytes: string, strip: number): string {\n    this.held = \"\";\n    this.passing = true;\n    this.stripping = strip;\n    return bytes;\n  }\n\n  private endLine(): string {\n    const line = this.line;\n    const held = this.held;\n    this.line = \"\";\n    this.held = \"\";\n    this.passing = false;\n    this.stripping = 0;\n    const mode = this.mode;\n\n    if (mode.kind === \"source_fence\") {\n      const content = mode.depth > 0 ? line.replace(QUOTE_PREFIX, \"\") : line;\n      if (mode.reader.feed(content)) this.mode = { kind: \"none\" };\n      return held + \"\\n\";\n    }\n\n    if (mode.kind === \"lifted_fence\") {\n      const prefix = prefixOfDepth(line, mode.depth);\n      const content = prefix !== null ? line.slice(prefix.length) : line;\n      if (mode.reader.feed(content)) this.mode = { kind: \"none\" };\n      // What was not handed on yet (a held closer, or a prefix-only line).\n      const sent = line.length - held.length;\n      const contentSent = Math.max(0, sent - (prefix?.length ?? 0));\n      return content.slice(contentSent) + \"\\n\";\n    }\n\n    if (mode.kind === \"lifted_bare\") {\n      const prefix = prefixOfDepth(line, mode.depth);\n      const content = prefix !== null ? line.slice(prefix.length) : line;\n      mode.balance += bracketDelta(content);\n      if (mode.balance <= 0) this.mode = { kind: \"none\" };\n      const sent = line.length - held.length;\n      const contentSent = Math.max(0, sent - (prefix?.length ?? 0));\n      return content.slice(contentSent) + \"\\n\";\n    }\n\n    if (mode.kind === \"candidate\") {\n      const prefix = prefixOfDepth(line, mode.depth);\n      if (prefix === null) {\n        // The quote ended before the first key decided: it was prose.\n        const out = mode.raw.join(\"\\n\") + \"\\n\";\n        this.mode = { kind: \"none\" };\n        return out + this.lineFromNone(line);\n      }\n      mode.raw.push(line);\n      mode.stripped.push(line.slice(prefix.length));\n      return this.settleCandidate(mode);\n    }\n\n    return this.lineFromNone(line, held);\n  }\n\n  /**\n   * A complete line met with no region open. `held` is what was not handed\n   * on yet: the whole line when it was held to the end, otherwise \"\" (it was\n   * released mid-line as prose or as an unquoted line).\n   */\n  private lineFromNone(line: string, held = line): string {\n    const prefix = QUOTE_PREFIX.exec(line)?.[0];\n    if (held.length < line.length || !prefix) {\n      // Released mid-line (or never a quote). An unquoted fence opener starts\n      // a source region: nothing inside it is lifted.\n      if (!prefix) {\n        const opener = fenceOpenerOf(line);\n        if (opener) {\n          this.mode = { kind: \"source_fence\", reader: new FenceReader(opener), depth: 0 };\n        }\n      }\n      return held + \"\\n\";\n    }\n    const rest = line.slice(prefix.length);\n    const depth = quoteDepth(prefix);\n    const trimmed = rest.trimStart();\n    if (trimmed.startsWith(\"`\") || trimmed.startsWith(\"~\")) {\n      const opener = fenceOpenerOf(rest);\n      if (opener && JSON_FENCE_LANGS.has(opener.lang.toLowerCase())) {\n        this.mode = { kind: \"lifted_fence\", reader: new FenceReader(opener), depth };\n        return rest + \"\\n\";\n      }\n      if (opener) {\n        this.mode = { kind: \"source_fence\", reader: new FenceReader(opener), depth };\n      }\n      return held + \"\\n\";\n    }\n    if (trimmed.startsWith(\"{\") || trimmed.startsWith(\"[\")) {\n      const candidate: Mode = { kind: \"candidate\", depth, raw: [line], stripped: [rest] };\n      this.mode = candidate;\n      return this.settleCandidate(candidate);\n    }\n    return held + \"\\n\";\n  }\n\n  /** A held quoted JSON start, re-judged after each complete line. */\n  private settleCandidate(mode: Extract<Mode, { kind: \"candidate\" }>): string {\n    const signal = jsonKindSignal(mode.stripped.join(\"\\n\"));\n    if (signal === \"undecided\") return \"\";\n    if (signal === \"not_kind\") {\n      this.mode = { kind: \"none\" };\n      return mode.raw.join(\"\\n\") + \"\\n\";\n    }\n    const balance = mode.stripped.reduce((sum, l) => sum + bracketDelta(l), 0);\n    this.mode =\n      balance > 0\n        ? { kind: \"lifted_bare\", depth: mode.depth, balance }\n        : { kind: \"none\" };\n    return mode.stripped.join(\"\\n\") + \"\\n\";\n  }\n}\n\n/** The whole-text form, for the static splitter (identical bytes to any streaming of `source`). */\nexport function liftQuotedKindRegions(source: string): string {\n  if (!source.includes(\">\")) return source;\n  const lift = new QuotedKindLift();\n  return lift.push(source) + lift.flush();\n}\n\n","/**\n * THE MARKDOWN-ESCAPED KIND (P8, round 4). A model that escapes markdown in\n * its whole answer writes `{\"\\_\\_kind\":\"flashcard\\_set\",…}`. No JSON reader\n * sees a kind there (`\\_` is not even a JSON escape), but the markdown\n * renderer un-escapes it, so the reader saw `{\"__kind\":…}` drawn raw.\n *\n * THE RULE: the key `\"\\_\\_kind\"` IS the key `\"__kind\"` (the detector reads it\n * in text contexts, `hasKindKey(…, { markdown: true })`), and inside the JSON\n * object that holds it every `\\_` is `_`. ONE transform, both hosts: the live\n * accumulator pushes every delta through a `MarkdownEscapedKindJson` before\n * its line machine; the static splitter runs `unescapeMarkdownKindJson` on the\n * whole text first. Character-driven and chunk-invariant, so live = reload.\n *\n * Also here (decided, round 4): a DOUBLE-ENCODED kind — the whole answer is a\n * JSON string literal whose value is kind JSON (`\"{\\\"__kind\\\":…}\"`) — reads as\n * that kind (`decodeDoubleEncodedKindText`, whole text, settled readers only).\n */\n\nimport { isKindJsonText, withoutZeroWidth } from \"./json-kind-signal\";\n\nconst TARGET = '\"\\\\_\\\\_kind\"';\nconst KEY = '\"__kind\"';\nconst HAS_ZERO_WIDTH = /[\\u200B-\\u200D\\u2060\\uFEFF\\u00AD]/;\n\n/**\n * A ZERO-WIDTH character inside the key (`\"__\\u200Bkind\"`, round 8): the\n * screen reads `\"__kind\"`, so the key is rewritten as `\"__kind\"` before\n * anything else reads the text, and the normal kind route (fence, standalone,\n * prose) takes it. Only a complete key is rewritten — a zero-width character\n * anywhere else stays. Character-driven and chunk-invariant (live = reload).\n */\nexport class ZeroWidthKindKey {\n  /** Bytes that may still become the key — held, never shown. */\n  private pending = \"\";\n\n  push(text: string): string {\n    let out = \"\";\n    for (const ch of text) out += this.pushChar(ch);\n    return out;\n  }\n\n  flush(): string {\n    const out = this.pending;\n    this.pending = \"\";\n    return out;\n  }\n\n  private pushChar(ch: string): string {\n    let candidate = this.pending + ch;\n    let out = \"\";\n    while (candidate && !(candidate.startsWith('\"') && KEY.startsWith(withoutZeroWidth(candidate)))) {\n      const next = candidate.indexOf('\"', 1);\n      if (next < 0) {\n        out += candidate;\n        candidate = \"\";\n      } else {\n        out += candidate.slice(0, next);\n        candidate = candidate.slice(next);\n      }\n    }\n    if (withoutZeroWidth(candidate) === KEY) {\n      this.pending = \"\";\n      return out + KEY;\n    }\n    this.pending = candidate;\n    return out;\n  }\n}\n\nexport class MarkdownEscapedKindJson {\n  /** The zero-width key spelling is read first (round 8) — one transform, both hosts. */\n  private zeroWidth = new ZeroWidthKindKey();\n  /** Bytes that may still become the escaped key — held, never shown. */\n  private pending = \"\";\n  /** Inside the object holding a rewritten key: bracket depth (0 = outside). */\n  private depth = 0;\n  private inString = false;\n  /** A held backslash inside the object (its fate depends on the next char). */\n  private escape = false;\n\n  push(text: string): string {\n    return this.pushUnescape(this.zeroWidth.push(text));\n  }\n\n  private pushUnescape(text: string): string {\n    let out = \"\";\n    for (const ch of text) out += this.pushChar(ch);\n    return out;\n  }\n\n  flush(): string {\n    const held = this.pushUnescape(this.zeroWidth.flush());\n    const out = held + this.pending + (this.escape ? \"\\\\\" : \"\");\n    this.pending = \"\";\n    this.escape = false;\n    this.depth = 0;\n    this.inString = false;\n    return out;\n  }\n\n  private pushChar(ch: string): string {\n    if (this.depth > 0) return this.insideObject(ch);\n    let candidate = this.pending + ch;\n    let out = \"\";\n    // A zero-width character inside the escaped key reads through (L-1, round 9).\n    while (candidate && !(candidate.startsWith('\"') && TARGET.startsWith(withoutZeroWidth(candidate)))) {\n      const next = candidate.indexOf('\"', 1);\n      if (next < 0) {\n        out += candidate;\n        candidate = \"\";\n      } else {\n        out += candidate.slice(0, next);\n        candidate = candidate.slice(next);\n      }\n    }\n    if (withoutZeroWidth(candidate) === TARGET) {\n      this.pending = \"\";\n      this.depth = 1;\n      this.inString = false;\n      return out + KEY;\n    }\n    this.pending = candidate;\n    return out;\n  }\n\n  private insideObject(ch: string): string {\n    if (this.escape) {\n      this.escape = false;\n      return ch === \"_\" ? \"_\" : `\\\\${ch}`;\n    }\n    if (ch === \"\\\\\") {\n      this.escape = true;\n      return \"\";\n    }\n    if (this.inString) {\n      if (ch === '\"') this.inString = false;\n      return ch;\n    }\n    if (ch === '\"') this.inString = true;\n    else if (ch === \"{\" || ch === \"[\") this.depth += 1;\n    else if (ch === \"}\" || ch === \"]\") this.depth -= 1;\n    return ch;\n  }\n}\n\n/** The whole-text form, for the static splitter (identical bytes to any streaming of `source`). */\nexport function unescapeMarkdownKindJson(source: string): string {\n  if (!source.includes(TARGET) && !HAS_ZERO_WIDTH.test(source)) return source;\n  const transform = new MarkdownEscapedKindJson();\n  return transform.push(source) + transform.flush();\n}\n\n/**\n * A whole answer that is a JSON STRING literal holding kind JSON → that kind\n * JSON; anything else unchanged.\n */\nexport function decodeDoubleEncodedKindText(source: string): string {\n  const trimmed = source.trim();\n  if (!trimmed.startsWith('\"') || !trimmed.endsWith('\"') || !trimmed.includes('\\\\\"__kind\\\\\"')) return source;\n  try {\n    const inner: unknown = JSON.parse(trimmed);\n    return typeof inner === \"string\" && isKindJsonText(inner.trim()) ? inner.trim() : source;\n  } catch {\n    return source;\n  }\n}\n","/**\n * A KIND AS AN IMAGE'S ALT TEXT (P9, round 4): `![{\"__kind\":…}](url)`. The\n * prose split lifted the object out and left `!` and `(url)` behind as two\n * stray prose blocks after reload (and live). The model meant the kind: the\n * image wrapper is chrome — `![` before the object and `](url)` after it are\n * dropped, the object stays where it was and renders as its kind. A kindless\n * object in alt text (first key decided not `__kind`) is left as written.\n *\n * ONE transform, both hosts (like `quoted-kind-lift.ts`): the live accumulator\n * pushes every delta through a `KindImageAltUnwrap`; the static splitter runs\n * `unwrapKindImageAlt` on the whole text. Character-driven and chunk-invariant.\n */\n\nimport { jsonKindSignal } from \"./json-kind-signal\";\n\ntype Mode = \"scan\" | \"head\" | \"body\" | \"tail\";\n\n/** Past this, an alt text whose first key never arrived is left as written. */\nconst HEAD_LIMIT = 2000;\n\nexport class KindImageAltUnwrap {\n  private mode: Mode = \"scan\";\n  /** Held: `!` / `![` (scan), the object so far (head), `](…` (tail). */\n  private held = \"\";\n  private depth = 0;\n  private inString = false;\n  private escape = false;\n\n  push(text: string): string {\n    let out = \"\";\n    for (const ch of text) out += this.pushChar(ch);\n    return out;\n  }\n\n  flush(): string {\n    const out = this.mode === \"head\" ? `![${this.held}` : this.held;\n    this.mode = \"scan\";\n    this.held = \"\";\n    this.depth = 0;\n    this.inString = false;\n    this.escape = false;\n    return out;\n  }\n\n  /** Track JSON structure; returns true when the object just closed. */\n  private track(ch: string): boolean {\n    if (this.escape) {\n      this.escape = false;\n      return false;\n    }\n    if (this.inString) {\n      if (ch === \"\\\\\") this.escape = true;\n      else if (ch === '\"') this.inString = false;\n      return false;\n    }\n    if (ch === '\"') this.inString = true;\n    else if (ch === \"{\" || ch === \"[\") this.depth += 1;\n    else if (ch === \"}\" || ch === \"]\") {\n      this.depth -= 1;\n      return this.depth === 0;\n    }\n    return false;\n  }\n\n  private pushChar(ch: string): string {\n    switch (this.mode) {\n      case \"scan\": {\n        if (this.held === \"\" && ch === \"!\") {\n          this.held = \"!\";\n          return \"\";\n        }\n        if (this.held === \"!\" && ch === \"[\") {\n          this.held = \"![\";\n          return \"\";\n        }\n        if (this.held === \"![\" && ch === \"{\") {\n          this.mode = \"head\";\n          this.held = \"{\";\n          this.depth = 1;\n          this.inString = false;\n          this.escape = false;\n          return \"\";\n        }\n        if (this.held === \"\") return ch;\n        const out = this.held;\n        this.held = \"\";\n        return out + this.pushChar(ch);\n      }\n      case \"head\": {\n        this.held += ch;\n        const closed = this.track(ch);\n        const signal = jsonKindSignal(this.held);\n        if (signal === \"kind\") {\n          const out = this.held;\n          this.held = \"\";\n          if (closed) {\n            this.mode = \"tail\";\n            return out;\n          }\n          this.mode = \"body\";\n          return out;\n        }\n        if (signal === \"not_kind\" || closed || this.held.length > HEAD_LIMIT) {\n          const out = `![${this.held}`;\n          this.held = \"\";\n          this.mode = \"scan\";\n          return out;\n        }\n        return \"\";\n      }\n      case \"body\": {\n        if (this.track(ch)) this.mode = \"tail\";\n        return ch;\n      }\n      case \"tail\": {\n        this.held += ch;\n        if (/^\\]\\([^)\\n]*\\)$/.test(this.held)) {\n          this.held = \"\";\n          this.mode = \"scan\";\n          return \"\";\n        }\n        if (/^\\](?:\\([^)\\n]*)?$/.test(this.held)) return \"\";\n        // Not an image tail: hand it on as written.\n        const out = this.held;\n        this.held = \"\";\n        this.mode = \"scan\";\n        return out;\n      }\n    }\n  }\n}\n\n/** The whole-text form, for the static splitter (identical bytes to any streaming of `source`). */\nexport function unwrapKindImageAlt(source: string): string {\n  if (!source.includes(\"![{\")) return source;\n  const transform = new KindImageAltUnwrap();\n  return transform.push(source) + transform.flush();\n}\n","/**\n * Answer TEXT → ONE readable line, for a person's compact label (a card\n * subtitle, a rule name, a link-preview description, a list row). A kind is\n * never shown as raw JSON (Arman, 2026-09-30): a kind answer reads as\n * \"<Kind> · <instance title>\" (`deriveInstanceTitle`, the derivation saved\n * instances use); prose with a kind in it reads as the prose's first line;\n * a kind that never completed reads as its one-line broken note.\n * Kindless text is whitespace-collapsed and clipped, nothing else.\n *\n * Destination transform only — never call it on stored or machine-bound text.\n */\n\nimport { humanizeKind } from \"./kind-markdown-utils\";\nimport { deriveInstanceTitle } from \"./instance-title\";\nimport { firstKindSlug, hasJsonKindKey, hasKindKey, normalizeKindSpellings } from \"./json-kind-signal\";\nimport { kindTextToMarkdown } from \"./kind-text-to-markdown\";\n\nfunction clip(text: string, max: number): string {\n  return text.length > max ? `${text.slice(0, Math.max(0, max - 1)).trimEnd()}…` : text;\n}\n\nfunction wholeKindLabel(text: string): string | null {\n  let body = text.trim();\n  const fence = body.match(/^(?:`{3,}|~{3,})[a-zA-Z0-9]*\\s*\\n([\\s\\S]*?)\\n?(?:`{3,}|~{3,})$/);\n  if (fence) body = fence[1]!.trim();\n  if (!body.startsWith(\"{\")) return null;\n  try {\n    const parsed: unknown = JSON.parse(body);\n    if (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) return null;\n    const record = parsed as Record<string, unknown>;\n    if (typeof record.__kind !== \"string\" || !record.__kind.trim()) return null;\n    const name = humanizeKind(record.__kind.trim());\n    const title = deriveInstanceTitle(record);\n    return title ? `${name} · ${title}` : name;\n  } catch {\n    return null;\n  }\n}\n\nfunction firstReadableLine(markdown: string): string {\n  for (const raw of markdown.split(\"\\n\")) {\n    const line = raw\n      .replace(/^\\s*(?:#{1,6}\\s+|>\\s*|[-*+]\\s+|\\d+[.)]\\s+)/, \"\")\n      // A wrapper tag (`<artifact …>`, `<answer>`) names nothing.\n      .replace(/<\\/?[A-Za-z][\\w:-]*(\\s[^<>]*)?\\/?>/g, \"\")\n      .replace(/[*_`]+/g, \"\")\n      .replace(/\\s+/g, \" \")\n      .trim();\n    if (line) return line;\n  }\n  return \"\";\n}\n\n/** One line, at most `max` characters, never containing a `__kind` key. */\nexport function kindTextLabel(raw: string | null | undefined, max = 90): string {\n  if (!raw) return \"\";\n  // A real JSON spelling (zero-width / markdown-escaped key) reads as the literal one (round 10).\n  const text = normalizeKindSpellings(raw);\n  if (!hasKindKey(text)) return clip(text.replace(/\\s+/g, \" \").trim(), max);\n  const whole = wholeKindLabel(text);\n  if (whole) return clip(whole, max);\n  const line = firstReadableLine(kindTextToMarkdown(text));\n  // Nothing readable around the kind (a kind wrapped in an `<artifact>` tag,\n  // a kind that never completed): the kind's name, never \"\" (R4, round 6).\n  if (line) return clip(line, max);\n  const slug = firstKindSlug(text);\n  return clip(slug ? humanizeKind(slug) : \"Structured output\", max);\n}\n\n/**\n * A conversation TITLE as a person reads it (R4, round 6): a title that holds\n * kind JSON reads as its one-line kind label; any other title — and null —\n * comes back as it is. Read boundaries and title renderers call this; the\n * stored title is never rewritten.\n */\nexport function conversationTitleText(title: string | null | undefined): string | null {\n  if (title == null) return null;\n  return hasJsonKindKey(title) ? kindTextLabel(title, 200) : title;\n}\n","import type { CanonicalBlockIR } from \"../core/ir-types\";\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\n/** Mirror the server's legacy quiz adapter while keeping source aliases in IR residue. */\nexport function canonicalizeCompletedLegacyQuizEnvelope(\n  envelope: CanonicalBlockIR,\n  sourceText: string,\n): CanonicalBlockIR {\n  if (envelope.root.kind !== \"quiz_set\" || envelope.root.status !== \"complete\") {\n    return envelope;\n  }\n\n  let source: unknown;\n  try {\n    source = JSON.parse(sourceText);\n  } catch {\n    return envelope;\n  }\n  if (!isRecord(source)) return envelope;\n\n  // A declared modern kind already owns canonical fields and can legitimately\n  // contain nullable answers or future schema fields. Only the old root-key\n  // vocabulary gets translated.\n  const hasLegacyAliases =\n    typeof source.quiz_title === \"string\" ||\n    typeof source.quizTitle === \"string\" ||\n    Array.isArray(source.multiple_choice) ||\n    Array.isArray(source.multipleChoice);\n  if (source.__kind !== undefined || !hasLegacyAliases) return envelope;\n\n  const title =\n    typeof source.quiz_title === \"string\"\n      ? source.quiz_title\n      : typeof source.quizTitle === \"string\"\n        ? source.quizTitle\n        : null;\n  const sourceQuestions = source.questions ?? source.multiple_choice ?? source.multipleChoice;\n  if (title === null || !Array.isArray(sourceQuestions)) return envelope;\n  const questions = sourceQuestions.flatMap((candidate) => {\n    if (!isRecord(candidate)) return [];\n    // Legacy root-key quiz questions are scalar payload records, not declared\n    // nested kind instances. Python's adapter intentionally leaves their\n    // source vocabulary marker-free; do the same without affecting modern\n    // `quiz_set` documents (which return before this adapter runs).\n    const { __kind: _legacyKind, ...legacyQuestion } = candidate;\n    const options = Array.isArray(candidate.options) ? candidate.options : [];\n    const answer = candidate.correct_answer ?? candidate.correctAnswer ?? \"\";\n    const correctAnswer =\n      typeof answer === \"number\" &&\n      Number.isInteger(answer) &&\n      answer >= 0 &&\n      answer < options.length\n        ? options[answer]\n        : answer;\n    return [{\n      ...legacyQuestion,\n      type: typeof candidate.type === \"string\" ? candidate.type : \"multiple_choice\",\n      question: typeof candidate.question === \"string\" ? candidate.question : \"\",\n      options,\n      correct_answer:\n        typeof correctAnswer === \"string\" ? correctAnswer : String(correctAnswer),\n      explanation:\n        typeof candidate.explanation === \"string\" ? candidate.explanation : null,\n    }];\n  });\n\n  return {\n    ...envelope,\n    root: {\n      ...envelope.root,\n      value: { ...envelope.root.value, title, questions },\n    },\n  };\n}\n","/**\n * The canonical IR contract for structured content.\n *\n * Every source (live agent stream, DB reload, Python-preprocessed results,\n * notes, any future surface) is normalized into these shapes exactly once.\n * Anything already carrying this IR passes through downstream layers by\n * reference — see `core/normalize.ts` for the idempotence law.\n *\n * This file is pure types + path helpers. No React, no Redux, no IO.\n */\n\n/** Path of a value inside a parsed region (object keys + array indices). */\nexport type IrPath = Array<string | number>;\n\n/**\n * How a node's kind was (or wasn't) established.\n *\n * 🚨 `unverified` IS NOT `raw`, AND THE DIFFERENCE IS LOAD-BEARING (Arman's\n * ruling, 2026-08-29). \"We checked it and it is wrong\" and \"we had nothing to\n * check it with\" are opposite facts about a payload, and collapsing them cost\n * ~221 live kinds their component overnight: a kind whose schema never loaded\n * degraded to `raw`, the render route read `raw` as \"broken instance\", and\n * perfectly valid payloads were dumped as key/value lists instead of reaching\n * the component the user built. A consumer that treats `unverified` as a\n * failure is reintroducing that outage — the data is intact and MAY be\n * entirely valid; all that is missing is the schema that would prove it.\n */\nexport type IrKindState =\n  | \"resolved\" // __kind seen + schema validated\n  | \"speculative\" // committed from parent itemKinds before __kind arrived\n  | \"pending_kind\" // object open, no __kind yet, no speculation possible\n  | \"pending_schema\" // kind known, registry cold-fetch in flight\n  | \"unverified\" // kind known, NO schema was ever available — never checked\n  | \"raw\"; // checked and FAILED, or structurally broken\n\n/**\n * System-level zero-data-loss channel. Unknown keys are NEVER merged into a\n * node's `value` (they'd be indistinguishable from schema fields); they are\n * carried here verbatim — Protobuf unknown-fields discipline. Distinct from\n * any domain-level `additionalDetails` field, which is an ordinary schema\n * field inside `value`.\n */\nexport interface IrResidue {\n  /** Keys present in the source object but absent from the kind schema. */\n  extra: Record<string, unknown> | null;\n  /** Optional schema fields the source never provided. */\n  optionalMissing: string[] | null;\n  /** Structured warnings attached during parsing (speculation backtracks, truncation, …). */\n  notices: Array<{ code: string; message: string; at?: number }> | null;\n}\n\n/** Which wire syntax carried the kind discriminator for a node. */\nexport type IrDiscriminator =\n  | { format: \"json\"; key: \"__kind\" }\n  | { format: \"xml\"; tag: string }\n  | { format: \"fence\"; language: string };\n\n/** A schema-shaped structured node. Children live inside `value` (and carry their own metadata via `nodeIndex`). */\nexport interface IrStructuredNode {\n  role: \"structured\";\n  /** Canonical kind slug. Empty string while pending. */\n  kind: string;\n  kindState: IrKindState;\n  discriminator: IrDiscriminator;\n  /** Region-relative path ([] = region root). */\n  path: IrPath;\n  status: \"streaming\" | \"complete\" | \"error\";\n  /** Compliant snapshot: schema fields + __kind ONLY. Unknown keys → residue. */\n  value: Record<string, unknown>;\n  residue: IrResidue | null;\n}\n\n/** Envelope version. Bump = migration point for persisted envelopes. */\nexport const IR_VERSION = 1 as const;\n\n/** Reserved key carrying the envelope inside RenderBlockPayload.data. */\nexport const IR_ENVELOPE_KEY = \"__ir\" as const;\n\n/**\n * One parsed region's canonical form. Serializable (plain JSON), carried on\n * render blocks (`data.__ir`), persisted on artifacts and message metadata,\n * and — with `engine: \"py-block-detector\"` — accepted pre-built from Python.\n */\nexport interface CanonicalBlockIR {\n  v: typeof IR_VERSION;\n  /** Provenance: which implementation produced this envelope. */\n  engine: \"fe-kind-parser\" | \"py-block-detector\";\n  /** Stable hash of the region source text — the idempotence / cache key. */\n  fingerprint: string;\n  root: IrStructuredNode;\n  /**\n   * pathKey → node metadata for per-path readers (child kinds under root).\n   * Carries each child node's residue — child snapshot values inside\n   * `root.value` hold schema fields only, so WITHOUT this the envelope would\n   * silently drop nested unknown keys (zero-data-loss violation).\n   */\n  nodeIndex?: Record<\n    string,\n    Pick<IrStructuredNode, \"kind\" | \"kindState\" | \"status\"> & {\n      residue?: IrResidue | null;\n    }\n  >;\n}\n\n/** Normalizer output segment: prose stays raw text; structured regions carry IR. */\nexport type CanonicalSegment =\n  | { role: \"text\"; content: string }\n  | {\n      role: \"block\";\n      blockType: string;\n      content: string;\n      ir: CanonicalBlockIR | null;\n    };\n\nexport interface CanonicalContent {\n  v: typeof IR_VERSION;\n  segments: CanonicalSegment[];\n}\n\n// ---------------------------------------------------------------------------\n// Path helpers — the ONE implementation. Consumers must not roll their own.\n// ---------------------------------------------------------------------------\n\nexport function irPathKey(path: IrPath): string {\n  return path.map((segment) => String(segment)).join(\".\");\n}\n\nexport function irPathsEqual(left: IrPath, right: IrPath): boolean {\n  if (left.length !== right.length) return false;\n  for (let i = 0; i < left.length; i++) {\n    if (left[i] !== right[i]) return false;\n  }\n  return true;\n}\n\nexport function irPathIsUnderOrEqual(path: IrPath, prefix: IrPath): boolean {\n  if (path.length < prefix.length) return false;\n  for (let i = 0; i < prefix.length; i++) {\n    if (path[i] !== prefix[i]) return false;\n  }\n  return true;\n}\n\n/** Human label for a path (\"root\", \"cards[2].front\"). */\nexport function irPathLabel(path: IrPath): string {\n  if (path.length === 0) return \"root\";\n\n  const parts: string[] = [];\n  for (const segment of path) {\n    if (typeof segment === \"number\") {\n      parts[parts.length - 1] += `[${segment}]`;\n    } else {\n      parts.push(String(segment));\n    }\n  }\n  return parts.join(\".\");\n}\n\n/** True when every residue channel is empty — normalize to null instead. */\nexport function isEmptyResidue(residue: IrResidue): boolean {\n  return (\n    (residue.extra === null || Object.keys(residue.extra).length === 0) &&\n    (residue.optionalMissing === null ||\n      residue.optionalMissing.length === 0) &&\n    (residue.notices === null || residue.notices.length === 0)\n  );\n}\n","/**\n * Pure envelope→value functions (the zero-data-loss wire round-trip).\n *\n * These live in core/ (the pure kernel) because every layer needs them —\n * including kinds/legacy-bridge-utils, whose bridges are built at MODULE\n * SCOPE inside kinds/<slug>.ts files that system-kinds.ts imports. When these\n * functions lived in redux/render-block-envelope.ts, that file's memo/capture\n * imports closed a module cycle (kinds → bridge-utils → render-block-envelope\n * → region-envelope-memo → kind-registry → system-kinds → kinds), which made\n * SYSTEM_KIND_DEFINITIONS entry-point-fragile (undefined defs when a kinds\n * module was the import entry). Keeping them here makes every kinds module\n * cycle-free BY CONSTRUCTION. redux/render-block-envelope re-exports them for\n * its existing consumers.\n */\n\nimport { isEmptyResidue, type CanonicalBlockIR } from \"./ir-types\";\nimport { KIND_KEY } from \"./kind-schema.types\";\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\n/**\n * Rebuild the region's full data: walk the root value and merge each node's\n * residue extras back in (root residue + nodeIndex residues). This is the\n * zero-data-loss read: nothing the model emitted is missing, whether or not\n * a schema knew about it.\n */\nexport function reconstructRegionValue(\n  envelope: CanonicalBlockIR,\n): Record<string, unknown> {\n  const cloned = structuredClone(envelope.root.value);\n\n  const applyExtras = (\n    target: Record<string, unknown>,\n    extras: Record<string, unknown> | null | undefined,\n  ) => {\n    if (!extras) return;\n    for (const [key, value] of Object.entries(extras)) {\n      target[key] = structuredClone(value);\n    }\n  };\n\n  applyExtras(cloned, envelope.root.residue?.extra);\n\n  for (const [pathKey, meta] of Object.entries(envelope.nodeIndex ?? {})) {\n    const residue = meta.residue;\n    if (!residue || isEmptyResidue(residue) || !residue.extra) continue;\n\n    const segments = pathKey.split(\".\");\n    let cursor: unknown = cloned;\n    for (const segment of segments) {\n      if (Array.isArray(cursor)) {\n        cursor = cursor[Number(segment)];\n      } else if (isRecord(cursor)) {\n        cursor = cursor[segment];\n      } else {\n        cursor = undefined;\n        break;\n      }\n    }\n    if (isRecord(cursor)) {\n      applyExtras(cursor, residue.extra);\n    }\n  }\n\n  return cloned;\n}\n\n/**\n * Deep-remove the `__kind` discriminator.\n *\n * 🚨 NOT A TRANSFORM FOR PLATFORM DATA. `__kind` is part of the data\n * (KINDS_EVERYWHERE_PLAN §4.2) and stripping it from anything stored, passed or\n * rendered was annihilated on 2026-08-23. This helper survives for exactly two\n * shapes of caller, both of which are guarded:\n *   - a SYMMETRIC COMPARISON that reduces both sides and returns a boolean;\n *   - legacy validation TOLERANCE against a pre-2026-08-23 schema version.\n * Guards: aidream `scripts/check_kind_marker_law.py`,\n * matrx-frontend `pnpm check:kind-marker-law`.\n */\nexport function stripKindDeep(value: unknown): unknown {\n  if (Array.isArray(value)) {\n    return value.map(stripKindDeep);\n  }\n  if (isRecord(value)) {\n    const out: Record<string, unknown> = {};\n    for (const [key, child] of Object.entries(value)) {\n      if (key === KIND_KEY) continue;\n      out[key] = stripKindDeep(child);\n    }\n    return out;\n  }\n  return value;\n}\n","/**\n * Pure envelope helpers the chat package needs (chat-package-move P14): the Phase-2 shadow\n * parity check (\"does the envelope, reconstructed, deep-equal what JSON.parse sees?\").\n *\n * A COMPARISON, NEVER A TRANSFORM — the one lawful shape of `stripKindDeep` outside the two doors.\n * Markers are removed from BOTH sides, symmetrically, inside this predicate, so a marker the parser\n * INJECTED (speculation / expectedRootKind) is not reported as a mismatch against a source that did\n * not carry one. Only a boolean leaves; neither input is mutated and neither reduced value is ever\n * returned, stored, or rendered (KINDS_EVERYWHERE_PLAN §4.2).\n */\n\nimport type { CanonicalBlockIR } from \"../core/ir-types\";\nimport { reconstructRegionValue, stripKindDeep } from \"../core/envelope-value\";\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction deepEqual(left: unknown, right: unknown): boolean {\n  if (Object.is(left, right)) return true;\n\n  if (Array.isArray(left) && Array.isArray(right)) {\n    if (left.length !== right.length) return false;\n    for (let i = 0; i < left.length; i++) {\n      if (!deepEqual(left[i], right[i])) return false;\n    }\n    return true;\n  }\n\n  if (isRecord(left) && isRecord(right)) {\n    const leftKeys = Object.keys(left);\n    const rightKeys = Object.keys(right);\n    if (leftKeys.length !== rightKeys.length) return false;\n    for (const key of leftKeys) {\n      if (!(key in right)) return false;\n      if (!deepEqual(left[key], right[key])) return false;\n    }\n    return true;\n  }\n\n  return false;\n}\n\nexport function envelopeMatchesParsedSource(envelope: CanonicalBlockIR, parsedSource: unknown): boolean {\n  if (!isRecord(parsedSource)) return false;\n  return deepEqual(stripKindDeep(reconstructRegionValue(envelope)), stripKindDeep(parsedSource));\n}\n","/** The decision-answers block's stable wire ids (render-block type and kind slug). */\nexport const DECISION_ANSWERS_KIND = \"decision_answers\";\nexport const DECISION_ANSWERS_BLOCK_TYPE = \"decision_answers\";\n"]}