sweep_once() has never actually swept anything: `tollgate wallet drain cashu` (no flags) blocks on an interactive y/N confirmation that Router::run can never answer over a non-PTY SSH exec (empty stdin -> EOF -> defaults to N -> "Operation cancelled." with exit code 0), so the drain_code != 0 check can't catch it and every tick silently no-ops. The obvious fix isn't safe either: `--json` skips the prompt, but confirmed live against archy-x250-pa3 that on a wallet.db with a stale duplicate per-mint entry (trailing-slash leftover from before the mint_url fix), it completes a real swap against the good entry, then aborts on the second (empty, stale) entry and reports "success": false without ever printing or persisting the resulting token anywhere. 50 sats went from spendable balance to gone in that one call. Documented so nobody "fixes" this by wiring in --json before upstream fixes the partial-failure data loss. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KTdMfVJChCwCCYF1ZTRQLc