From 1458b09449469ed2171a328a479cb02d3db8bc81 Mon Sep 17 00:00:00 2001 From: Lilleman auf Larv Date: Sat, 3 Oct 2026 14:22:14 +0200 Subject: [PATCH] Index a plain refusal's path in the caller's document: normalize only the reduction's output --- src/markdown/emit/plain-reduction.test.ts | 1 + src/markdown/emit/plain-reduction.ts | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/markdown/emit/plain-reduction.test.ts b/src/markdown/emit/plain-reduction.test.ts index 8308214..2a3e15a 100644 --- a/src/markdown/emit/plain-reduction.test.ts +++ b/src/markdown/emit/plain-reduction.test.ts @@ -64,6 +64,7 @@ test('refuses what the document guard refuses, and nothing else', () => { let deep: AdfNode = said('x') for (let level = 0; level <= largestNesting; level += 1) deep = { content: [deep], type: 'layoutColumn' } assert.match(plainDocument(document(deep)), /^unsupported-nesting-depth at \/content\/0(\/content\/0)+$/) + assert.match(plainDocument(document(paragraph(text('a'), text('b')), text('c'), text('d'), deep)), /^unsupported-nesting-depth at \/content\/3(\/content\/0)+$/) let deepInline: AdfNode = text('x') for (let level = 0; level <= largestNesting; level += 1) deepInline = { content: [deepInline], type: 'unknownInline' } assert.match(plainDocument(document(paragraph(deepInline))), /^unsupported-nesting-depth at /) diff --git a/src/markdown/emit/plain-reduction.ts b/src/markdown/emit/plain-reduction.ts index 30d82bb..fb8916b 100644 --- a/src/markdown/emit/plain-reduction.ts +++ b/src/markdown/emit/plain-reduction.ts @@ -51,8 +51,8 @@ export function reduceToPlain(document: AdfDocument): Result { const fault = adfDocumentFault(document) if (fault !== undefined) return faulted(fault, []) if (document.version !== 1) return failure('unsupported-document-version', `no markdown spelling carries ADF version ${document.version}`, []) - // docs/decisions.md §Equality is deep: the plain flavour reads and writes editor-normal ADF. - const blocks = reduceBlocks(nodeContent(toEditorNormal(document)), { depth: 0, memo: new Map(), path: [] }) + // A refusal's path indexes the caller's document, so only the reduction's output normalizes (docs/decisions.md §Equality is deep). + const blocks = reduceBlocks(nodeContent(document), { depth: 0, memo: new Map(), path: [] }) return blocks.ok ? success({ content: nodeContent(toEditorNormal({ content: blocks.value, type: 'doc', version: 1 })).slice(), type: 'doc', version: 1 }) : blocks }