fix: round-trip fidelity for inline TOC macros, nbsp emphasis, and strikethrough Surfaced by `verify` on outside-doc-core-v2.xml (real Confluence XML). - A TOC macro inside a heading round-trips as `# <!-- ac:toc ... -->`, where goldmark parses the comment as inline RawHTML. renderRawHTML now calls convertComment (like the block path) so the macro is reconstructed instead of leaking back out as a literal comment. - Confluence stores structured-macro attributes in no fixed order (TOC is macro-id,name,schema-version on one page, name,schema-version,macro-id on another) and the verify formatter preserves order, so no reconstruction order matches everything; sortMacroAttrs canonicalizes them on both sides. - Bold applied to a lone nbsp (`<strong> </strong>`) emitted `** **`: the writeEmphasis trim cutset now includes U+00A0, and normalizeForVerify drops whitespace-only emphasis. - `<s>` and `<del>` (both strikethrough) are canonicalized to `<del>`. Adds regression tests for each and documents the gotchas in CLAUDE.md.
fix: round-trip fidelity for heading comments, literal tags, and emphasis Surfaced by `verify` on two real documents that aren't in the justfile set. - Heading-only HTML comment (a TOC macro marker, `<h1><!-- ac:toc ... --></h1>`) was dropped by xml2md — a CommentNode is neither text nor element, so it fell through walkChildren and vanished, collapsing `# <!-- ... -->` to `#`. - Literal angle-bracket text stored as `<table>` (e.g. `box.backup.start(<table>)`) round-tripped into a phantom `<table>` element that swallowed the rest of the document: xml2md now backslash-escapes a tag-like `<` in both the TextNode and walkChildrenInline paths, and renderText unescapes only `\<` (never a blanket UnescapePunctuations, which would eat the deliberate `\|` table-pipe escaping). - `<strong> x </strong>` (whitespace inside the markers) rendered as literal `** x **`; writeEmphasis now moves the whitespace outside the markers. - normalizeForVerify canonicalizes values Markdown can't carry — task ids, <ul>/<ol> bullet styling, and a trailing nbsp before </ac:task-body>. Adds regression tests for each and documents the new gotchas in CLAUDE.md.
fix: preserve inline spacing in fmt and code-block round-trip Three related round-trip/formatting bugs, each pinned by a regression test that fails on the prior code: - fmt dropped the significant space between two inline elements (</strong> <code>): a lone-space text node was always treated as indentation. Keep it mid-line; drop it only at a block boundary. - fmt's line-wrapper dropped a word's trailing space before a tag (strings.Fields discards it) and broke inside <code>...</code>, injecting indent that xml2md collapses into a spurious in-span space. Rewrote wrapLine around an atom model with a per-atom spaceBefore flag and keeps an inline code span whole. - verify.normalizeForVerify's reBareTextAfterHeading used \S for its "visible char" token; \S matches '<', so the capture swallowed a following <ac:structured-macro> and wrapped it in <p>...</p>, splitting a code macro from its body and breaking round-trip for a no-language fenced code block after a heading. Use [^\s<] instead. Full RFC-0010 document now verifies as lossless.
feat: improve round-trip fidelity for panels, tables, and verify - Preserve panel name (info/note/warning), macro-id, parameters, and body-bare layout via HTML comment markers so blockquotes round-trip back to the original ac:structured-macro form. - Serialize tables with complex cell content (nested lists, structured macros, row-header th, page links) as raw XML inside the markdown so GFM table limits don't lossily flatten them. - Distinguish ac:toc inside <p> from bare ac:toc, restoring the wrapper. - Strip inline-comment-marker wrappers and decorative <span>s inside code spans where markdown can't represent them. - Normalize self-closing tags to "<tag />" and unify "/' with "/' so the pretty printer doesn't introduce cosmetic diffs. - Apply verify normalization to both input and round-trip output, and add rules for trailing whitespace, <br/> before </li>, <p>-wrapped image runs, and bare text after headings.
feat: add verify command, improve round-trip fidelity Add verify command for XML validation. Merge adjacent <code> elements during XML→MD conversion. Preserve macro attribute order for round-trip fidelity. Fix list item trailing whitespace and normalize <hr /> format. false