CLAUDE WATERMARK REMOVER · DESTINATION TEST
Why does a successful cleaned promise reject after finally?
A throwing finally callback replaces the successful outcome with its error.
What the test establishes
The first promise successfully holds AB. The audit callback deliberately throws, and the awaited chain enters the catch branch with that audit error. This can make a successful transformation appear to fail at a later pipeline stage. Record the stage as well as the error when diagnosing an export. The source result remains AB, which the final observation checks independently. A finally callback used for logging or cleanup needs its own failure policy if its exceptions should not replace the primary outcome. This experiment supplies a deterministic exception and makes no assertion about real log servers, storage permissions or clipboard access.
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.
{
"error": "audit failed",
"sourceResult": "AB"
}Capability boundary
One synchronous exception in finally is measured; returned rejected promises are not separately tested.
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.