Recorded from the executed test command on October 30, 2026:
node --test deliverables/base-transfer-watch/watch.test.mjs

✔ confirmation depth excludes newer events and later admits them (18.2542ms)
✔ incoming, outgoing and self-transfer are classified; duplicate self logs deliver once (14.85ms)
✔ full uint256 values retain exact six-decimal formatting (13.0047ms)
✔ cursor and queued event survive close/reopen without duplicate scan (19.493ms)
✔ outbox retries after backoff, persists attempts and ends in dead-letter state (20.105ms)
✔ commit failure rolls back BOTH inserted alerts and cursor; retry recovers (17.3258ms)
✔ failed second RPC log request cannot advance the cursor (12.6388ms)
✔ changed persisted block halts before sending a pending alert (15.9191ms)
✔ block change during scan cannot commit alerts (14.1064ms)
✔ wrong chain and a database reopened with another wallet are refused (14.309ms)
✔ malformed token, removed flag, data and block hash are refused (14.2463ms)
✔ conflicting duplicates and unrelated log rows cannot be silently accepted (14.4601ms)
✔ concurrent ticks are refused while an RPC is in flight (16.5991ms)
✔ bounded scans advance through empty blocks without skipping later events (18.8625ms)
✔ a webhook can receive twice after an uncertain response; event ID remains stable (19.9626ms)
✔ real local HTTP exercises JSON-RPC envelopes, webhook 503 retry and idempotency header (213.574ms)
✔ RPC errors, mismatched request IDs and signing methods are refused (4.1693ms)
ℹ tests 17
ℹ suites 0
ℹ pass 17
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 560.216

Exit code: 0. Output transcribed from the original execution receipt; this
packaging step does not claim an additional test run. See validation.json
for the hashes of the exact source and test file and the separate historical
read-only RPC compatibility check.
