Zerowidth CleanerMeasured guides

CLAUDE WATERMARK REMOVER · MARKDOWN TEST

Why can identical Markdown link labels open different paths?

The visible label can stay identical while the href changes. In this fixture the path loses the encoded form of U+200B.

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

What changed in the preview

Before cleanup both the original and cleaned Markdown are valid inline links labeled notes. CommonMark serializes the hidden point inside the first path as %E2%80%8B, the percent-encoded UTF-8 bytes. In the second render the href ends in /review. If a copied link appears right but opens the wrong page, inspect the exact destination including its percent escapes. Preserve the original if you do not know whether the hidden character belongs in the destination.

What this test covers

The fixture contains a literal Unicode point, and no request is sent to either path. A string already containing the visible characters %E2%80%8B is a different input and the character cleaner does not URL-decode it.

Measured source and preview

Original Markdown

Read [notes](https://example.com/re\u200Bview).

Cleaned Markdown

Read [notes](https://example.com/review).

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

Before cleanup

<p>Read <a href="https://example.com/re%E2%80%8Bview">notes</a>.</p>

After cleanup

<p>Read <a href="https://example.com/review">notes</a>.</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.