@ai-matrx/content-ir 0.12.0 → 0.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,53 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.13.0 — 2026-09-25
4
+
5
+ **`/source` — fixes from the RC-B3 independent verification**
6
+ (common-docs `projects/rich-content-unification/evidence/verify-RC-B3.md`).
7
+ Every finding got a failing test first (`__tests__/source-verify-findings.test.ts`,
8
+ 14 of the 17 non-timing tests red on 0.12.0), then the fix:
9
+
10
+ - **THE nested-fence rule now lives here** (`source/fence-nesting.ts`, moved from
11
+ matrx-frontend `components/markdown-core/fence-nesting.ts`): inside a
12
+ ```` ```markdown ```` / `md` / `mdx` fence, ```` ```lang ```` opens a nested
13
+ fence and a bare ```` ``` ```` closes the innermost one; a nested fence still
14
+ open at the end of the text retries strict CommonMark. The tokenizer uses it,
15
+ so it ends a nested markdown fence exactly where the renderer does (real row:
16
+ note `f9b7e9a2-…`). Generated cross-language vectors
17
+ `__tests__/fence-nesting-vectors.json`; aidream matrx-ai's Python twin runs a
18
+ byte-identical copy and fails on drift.
19
+ - **Islands change only through `islandEdit(island, text)`.** A plain edit must
20
+ carry every island inside its range back byte-identical and in order —
21
+ otherwise `SourceSpliceError("island_edit")` names the island. Edits are
22
+ diffed segment by segment between islands, so anchors inside an edited
23
+ paragraph map exactly.
24
+ - **Integrity is refused by default.** `requireIntegrity` defaults to `true`;
25
+ `false` is documented as tooling-only.
26
+ - **Linear time on pathological input.** Every closer search goes through an
27
+ occurrence index; code spans use a per-paragraph run table; the single-`$`
28
+ scan stops at the rule's 400-character limit; embedded `__kind` probing has a
29
+ per-paragraph budget; `readXmlTag` takes a finder. 2 MB of `{{`: 21 s → 41 ms.
30
+ - **A tree's root label belongs to the tree island** (the renderer splitter's
31
+ `findTreeBlockStart`).
32
+ - **`$$` follows the core's pairing rule** (`source/math-pairs.ts`, ported from
33
+ `@ai-matrx/kit/delimiter-guard`): tokens outside code pair in order, prose
34
+ pairs are not math, an unpaired `$$` is literal. `$$` at the end of a line
35
+ pairs with a later closer, and a lone `$$` never locks the rest of a document.
36
+
37
+ ### Consumer action
38
+
39
+ - `spliceSave` now THROWS on an island change (`island_edit`) and on disturbed
40
+ integrity (`integrity`). Editors change islands with `islandEdit`; tooling
41
+ that wants the report passes `requireIntegrity: false`.
42
+ - matrx-frontend: import the fence rule from `@ai-matrx/content-ir/source`; the
43
+ local `components/markdown-core/fence-nesting.ts` is deleted.
44
+
45
+ ## 0.12.1
46
+
47
+ Automatic changed-only republish (docs/metadata drift since the last tag — see
48
+ `git diff npm/content-ir-core/v0.12.0..npm/content-ir-core/v0.12.1 -- apps/shared/content-ir-core`).
49
+ No source changes intended and no consumer action required.
50
+
3
51
  ## 0.12.0 — 2026-09-23
4
52
 
5
53
  **`/source` — the stored text is the truth, block by block** (rich-content