Skip to content

Commit 2dd6a0b

Browse files
committed
docs: pre-release coherence pass — READMEs surface 1.6.0, honest divergence note, release-notes accuracy
Release-readiness review (3 auditors: publish surface / docs coherence / diff sweep). Publish surface and diff hygiene came back clean (attw green, purely-additive d.ts vs published 1.5.1, pack contents sane, deps correct, release workflow gate green locally); every finding was documentation: - both READMEs now surface the release: incrementalParseEnabled row in the config tables (the npm front page omitted 1.6.0's headline flag) and a createRemendPreprocessor pointer on contentPreprocessors - release-highlights 1.6.0: headline number relabeled (84–94% MEASURED pipeline saving, superseding the 70–89% parse-only estimate that was misattributed to the benchmark); the v1-era "footnote bypass became sticky" line qualified as superseded by v2's injection replay; a v2 hardening bullet added (two review rounds, terminator + mention gate, table-first regression, plan cache, throw fence, SSR guard, checkpoint slimming) so the new splice capabilities don't read as unaudited - experiments/prefixFreeze README + detectorConsistency pin: the "shipped rule is strictly TIGHTER" claim was probe-FALSIFIED (inline code-span masking makes production LOOSER than L4 on bracket-bearing spans); reworded to the honest two-way divergence with the pin scoped to its corpora and safety authority assigned to the arbiter - fifth stale v1 fallback claim fixed (IncrementalParseCompare story JSDoc); remend JSDoc "both overridable" contradiction fixed; p50 rounding unified to 32.4→7.5 ms across three docs; bare bracket pseudo-links in benchmark methodology unwrapped 810 tests green; lint/prettier/typechecks clean.
1 parent 1bcabae commit 2dd6a0b

10 files changed

Lines changed: 68 additions & 50 deletions

File tree

README.md

Lines changed: 22 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -388,23 +388,23 @@ The README covers the 90% case. For deep customization — replacing element ren
388388

389389
The full list with all subtleties lives in [`@ai-react-markdown/core` README](./packages/core/README.md). Quick reference:
390390

391-
| Prop | Type | Default | Purpose |
392-
| ---------------------- | -------------------------------- | ------------------------------- | ------------------------------------------------------------------------------------------------- |
393-
| `content` | `string` | **required** | Raw markdown to render |
394-
| `streaming` | `boolean` | `false` | Propagated via context for streaming-aware renderers |
395-
| `fontSize` | `number \| string` | `'0.9375rem'` | Base font size (numbers → px). Anchors `--aim-font-size-root` |
396-
| `variant` | `AIMarkdownVariant` | `'default'` | Typography variant name |
397-
| `colorScheme` | `AIMarkdownColorScheme` | `'light'` | `'light'`, `'dark'`, or custom |
398-
| `config` | `PartialDeep<TConfig>` || Partial render config, deep-merged with defaults |
399-
| `defaultConfig` | `TConfig` | `defaultAIMarkdownRenderConfig` | Base config (sub-packages can override) |
400-
| `metadata` | `TRenderData` || Arbitrary data for custom components (separate context) |
401-
| `contentPreprocessors` | `AIMDContentPreprocessor[]` | `[]` | Extra string transforms applied after the LaTeX preprocessor |
402-
| `customComponents` | `AIMarkdownCustomComponents` || `react-markdown` component overrides |
403-
| `Typography` | `AIMarkdownTypographyComponent` | `DefaultTypography` | Typography wrapper |
404-
| `ExtraStyles` | `AIMarkdownExtraStylesComponent` || Optional wrapper between typography and content |
405-
| `documentId` | `string` | auto via `useId()` | Stable id namespace for clobberable attributes; share across chunks for cross-chunk coordination |
406-
| `urlTransform` | `UrlTransform \| null` | `defaultUrlTransform` | Second sanitization gate — per-attribute URL rewriter (runs at render time) |
407-
| `sanitizeSchema` | `SanitizeSchema` | library default | First gate — `rehype-sanitize` schema, per-protocol allowlist (build with `extendSanitizeSchema`) |
391+
| Prop | Type | Default | Purpose |
392+
| ---------------------- | -------------------------------- | ------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
393+
| `content` | `string` | **required** | Raw markdown to render |
394+
| `streaming` | `boolean` | `false` | Propagated via context for streaming-aware renderers |
395+
| `fontSize` | `number \| string` | `'0.9375rem'` | Base font size (numbers → px). Anchors `--aim-font-size-root` |
396+
| `variant` | `AIMarkdownVariant` | `'default'` | Typography variant name |
397+
| `colorScheme` | `AIMarkdownColorScheme` | `'light'` | `'light'`, `'dark'`, or custom |
398+
| `config` | `PartialDeep<TConfig>` || Partial render config, deep-merged with defaults |
399+
| `defaultConfig` | `TConfig` | `defaultAIMarkdownRenderConfig` | Base config (sub-packages can override) |
400+
| `metadata` | `TRenderData` || Arbitrary data for custom components (separate context) |
401+
| `contentPreprocessors` | `AIMDContentPreprocessor[]` | `[]` | Extra string transforms applied after the LaTeX preprocessor. Ships an optional `createRemendPreprocessor()` factory for streaming tail repair — see [Content Preprocessors](./docs/content-preprocessors.md) |
402+
| `customComponents` | `AIMarkdownCustomComponents` || `react-markdown` component overrides |
403+
| `Typography` | `AIMarkdownTypographyComponent` | `DefaultTypography` | Typography wrapper |
404+
| `ExtraStyles` | `AIMarkdownExtraStylesComponent` || Optional wrapper between typography and content |
405+
| `documentId` | `string` | auto via `useId()` | Stable id namespace for clobberable attributes; share across chunks for cross-chunk coordination |
406+
| `urlTransform` | `UrlTransform \| null` | `defaultUrlTransform` | Second sanitization gate — per-attribute URL rewriter (runs at render time) |
407+
| `sanitizeSchema` | `SanitizeSchema` | library default | First gate — `rehype-sanitize` schema, per-protocol allowlist (build with `extendSanitizeSchema`) |
408408

409409
> The Mantine package extends this with `codeBlock.*` config options. See its [props table](./packages/mantine/README.md#props-api-reference).
410410
@@ -429,10 +429,11 @@ The full list with all subtleties lives in [`@ai-react-markdown/core` README](./
429429

430430
### Other config fields
431431

432-
| Field | Type | Default | Purpose |
433-
| -------------------------- | --------- | ------- | ---------------------------------------------------------------------------------------------------------------- |
434-
| `blockMemoEnabled` | `boolean` | `true` | Per-block memoization. Output is byte-identical when disabled; set `false` only for debugging |
435-
| `preserveOrphanReferences` | `boolean` | `true` | Protect orphan `[^x]: …` defs from being silently dropped during streaming when the reference hasn't arrived yet |
432+
| Field | Type | Default | Purpose |
433+
| -------------------------- | --------- | ------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
434+
| `blockMemoEnabled` | `boolean` | `true` | Per-block memoization. Output is byte-identical when disabled; set `false` only for debugging |
435+
| `incrementalParseEnabled` | `boolean` | `false` | EXPERIMENTAL. Prefix-freeze incremental parsing: append-only streaming re-parses only the tail (84–94% less pipeline stage time on the benchmark payloads). Output stays deep-equal to a full parse; see [Streaming & Performance](./docs/streaming-and-performance.md) |
436+
| `preserveOrphanReferences` | `boolean` | `true` | Protect orphan `[^x]: …` defs from being silently dropped during streaming when the reference hasn't arrived yet |
436437

437438
The Mantine package additionally surfaces:
438439

docs/benchmark.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ methodology section tells you exactly which story and which toggles.
1515
## Methodology
1616

1717
- **Harness**: the Storybook A/B stories under `Core/AIMarkdown`
18-
[`BlockMemoCompare`], [`IncrementalParseCompare`], [`BoostCompare`] (plus
18+
`BlockMemoCompare`, `IncrementalParseCompare`, `BoostCompare` (plus
1919
`*Isolated` process-isolated variants, not used for this run — same-page
2020
is the fairest JS-layer A/B since both sides share one main thread and
2121
receive the same stream in the same commit).
@@ -124,7 +124,7 @@ memo-enabled baseline).
124124
large ones** (7% commit total, −12 ms p95 at 16×) — exactly the regime
125125
split its documentation describes. Its role is the render-layer
126126
guardrail and the host for incremental parsing.
127-
3. **The user-perceivable number is boost p50: 33 ms → 7.6 ms per commit at
127+
3. **The user-perceivable number is boost p50: 32.4 ms → 7.5 ms per commit at
128128
16×** — from consistently blowing the frame budget to comfortably inside
129129
it.
130130

0 commit comments

Comments
 (0)