CLAUDE WATERMARK REMOVER · DESTINATION TEST
Why does an export object appear to contain text it never stored itself?
The in check sees inherited AB; Object.hasOwn correctly reports false.
What the test establishes
The destination inherits the cleaned value through its prototype and has no own text property. Property lookup and the in operator still see the inherited value, but the JSON record is empty in this observation. A form preview can therefore display a value that does not appear in its serialized export. Inspect ownership when the preview and downloaded record disagree. Store required export fields explicitly on the record rather than relying on inherited defaults to satisfy a schema. The cleaner output itself remains AB throughout this test; ownership determines what the destination serializes.
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.
{
"value": "AB",
"inCheck": true,
"hasOwn": false,
"json": "{}"
}Capability boundary
One ordinary prototype chain is measured. Proxies, getters and custom toJSON methods 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.