SIGN IN SIGN UP

fix: size the deposit to the shortfall, and clear the remaining audit findings

Inline shielding ignored what the payer already held, so a payer with 5 of the
11 they needed was asked for 17 instead of 12 and the extra 5 was stranded in
the pool behind another fee to get out. depositNeededFor now takes the balance
and returns the top-up plus one fee for the deposit that delivers it.

- A `watching` row is always polled. Gating that on a grace window meant a
  watcher down across the window came back to rows that would never be looked
  at again: not polled, not deletable, not cancellable once anything arrived.
- A row whose createdBlock call failed at create time is backfilled on the
  first poll that can reach the chain, instead of being stuck on the weaker
  balance-delta accounting forever with no route to repair it.
- The watcher refuses non-loopback Host headers, like its dev-server sibling:
  it binds loopback, so any other hostname reaching it is DNS rebinding.
- The store's doc comment said sessionStorage, which stopped being true, and
  said nothing about what localStorage persists on a shared origin. Both fixed,
  and the probe key is blanked rather than left behind.
- The dashboard's shared-origin guard missed a trailing-dot hostname, which is
  a legal spelling of the same host and a different origin to a browser.

117 tests.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
B
bongbongcrypto committed
57076aa6b4042779af621a79500e507618417fdb
Parent: baab82c