7e3d2d3b13
Two spend-safety fixes from the gap audit (#4814): - Client.Do refused a 402 only on the budget check, but parsed maxAmountRequired with a swallowed error, so a non-decimal, overflowing or negative amount became 0 and passed the cap trivially while Payer.Pay still signed against the string. Now reject any amount that is not a positive integer before signing. - Require settled only when the facilitator implemented Settler; a verify-only facilitator served the resource while no funds moved. Add Config.RequireSettlement to fail closed in that case. Tests cover invalid/negative/overflow amounts and the verify-only fail-closed path. Claude-Session: https://claude.ai/code/session_01CmdEY7pYmV5zzwCjNJ4ykL Co-authored-by: Claude <noreply@anthropic.com>