Zerowidth CleanerMeasured guides

CLAUDE WATERMARK REMOVER · MARKDOWN TEST

Why did a row of asterisks turn into a horizontal rule?

Removing U+200B leaves three adjacent asterisks, which CommonMark renders as a thematic break.

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

What changed in the preview

The test puts U+200B after the first asterisk on a standalone line. The original render produces a paragraph with emphasis around the hidden character and one literal asterisk. The cleaned render is a single horizontal-rule element. The cleaner changed one code point; the parser changed the block type. If you mean to document the asterisks themselves, show them as inline code or escape a marker in the Markdown. A source diff and a rendered preview reveal different parts of this change: one shows the deletion, the other shows the new divider.

What this test covers

This standalone asterisk line is the only measured divider. Adjacent list context and the dash-based setext heading rule were not tested.

Measured HTML

The first preview contains a literal U+200B, displayed below as \u200B. The HTML is shown as text.

Before cleanup

<p><em>\u200B</em>*</p>

After cleanup

<hr />

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.