Zerowidth CleanerMeasured guides

CLAUDE WATERMARK REMOVER · DESTINATION TEST

Why can one cleaned object export differently at the root and inside a field?

toJSON receives an empty key at the root and text when nested under text.

Tested 7 November 2026 · Synthetic fixtures · Minimal DOM

What the test establishes

The same object is passed to two serializations. Its hook returns both the cleaned value and the key argument so the surrounding context becomes visible in the output. A custom export hook can therefore produce context-dependent records even when its stored text never changes. This is separate from cleanup and from a replacer whitelist. When debugging inconsistent payloads, record the hook arguments and exact container shape before rerunning removal. The fixture intentionally keeps the hook deterministic and free of side effects. Both outputs retain AB; their key fields differ because the serialization positions differ, not because a marker reappears.

Reproduce the observation

Save tested-app.js and reproduce.cjs together, then run node reproduce.cjs. Compare its output with the recorded observation. The harness executes the actual homepage callback in a minimal DOM and records its resulting field values and method calls. Destination operations run in Node.js; the homepage DOM is a controlled substitute. Runtime: v24.22.1. No submitted text or genuine Claude output is used.

{
  "root": "{\"key\":\"\",\"value\":\"AB\"}",
  "nested": "{\"text\":{\"key\":\"text\",\"value\":\"AB\"}}"
}

Capability boundary

One deterministic toJSON hook is measured. Arrays, replacers and side-effecting hooks are excluded.

This Claude watermark remover edits a small selected character set. These callback observations do not establish authorship, detector scores, statistical-watermark removal or end-to-end browser behavior. For real work, keep the original and compare the exact result at its destination.

Primary material and next step

The tested first-party source snapshot and complete harness are the primary material for this page. For broader scope, read invisible Unicode versus AI watermarks, or return to the cleaner.