CLAUDE WATERMARK REMOVER · DESTINATION TEST
How can I keep a cleaned row beside a failed review job?
Promise.allSettled returns a fulfilled record and a rejected record in input order.
What the test establishes
The fixture records both the successful string and a deliberately rejected reason. These outcomes have different fields: value belongs to the fulfilled record and reason belongs to the rejected record. A consuming exporter should branch on status before reading either field. Treating every record as a successful text row would introduce undefined data into a later export. This is a coordination choice after removal, rather than a different removal mode. The cleaned AB value is preserved exactly in its own result record. The test uses a string reason for a stable JSON observation; real failures may carry objects that need a separate serialization policy.
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.
{
"outcomes": [
{
"status": "fulfilled",
"value": "AB"
},
{
"status": "rejected",
"reason": "review failed"
}
]
}Capability boundary
Two jobs with string values and reasons are measured; Error serialization is 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.