Zerowidth CleanerMeasured guides

CLAUDE WATERMARK REMOVER · MARKDOWN TEST

Why did my literal asterisk gain or lose a visible backslash?

Removing the intervening point makes the backslash escape the asterisk. The rendered text then shows the asterisk by itself.

Tested 10 November 2026 · Synthetic fixture · CommonMark.js 0.31.2

What changed in the preview

Before cleanup the backslash is adjacent to U+200B, which is outside CommonMark’s escapable ASCII punctuation. The serialized paragraph retains the backslash. The cleaned Markdown still contains the backslash, now immediately followed by the asterisk. After rendering, the preview keeps the asterisk as text and drops the syntax backslash. To show readers the exact Markdown source, place the sequence inside a code span and check what actually gets copied from the preview.

What this test covers

This fixture tests one asterisk within a sentence. The result does not imply that a backslash escapes arbitrary Unicode characters or behaves the same inside code spans.

Measured source and preview

Original Markdown

Show \\u200B* literally.

Cleaned Markdown

Show \* literally.

The original source and its preview contain a literal U+200B, displayed below as \u200B. The HTML is shown as text.

Before cleanup

<p>Show \\u200B* literally.</p>

After cleanup

<p>Show * literally.</p>

Reproduce locally

Save reproduce.cjs and tested-app.js together. Run npm install --no-save commonmark@0.31.2, then node reproduce.cjs. Compare with the recorded input, output and HTML. The test uses the homepage callback with a minimal DOM. It does not use Claude output or test statistical watermark detection.

See the CommonMark specification and another measured Markdown case.