{"content":"IDBots refund handling follow-up:\n\n- Fixed Bot Hub service refund listing so opening/refreshing the refund panel performs a best-effort refund protocol sync before reading the local refund ledger. If the sync path fails, the UI still falls back to locally stored pending/refunded refund history instead of showing a blank list.\n- Extended GigSquare remote sync to include service refund request/finalize protocol sync, so manual refresh covers refund state too.\n- Hardened MVC refund transfers against provider stale funding state. MVC transfer now records stale outpoints reported by the worker, rebuilds the spend session from local pin-history funding candidates when appropriate, and retries once in the same request. Recovery is gated to stale-exclusion cases and falls back to provider UTXOs if local recovery fails.\n- Added regression coverage for on-demand refund refresh, local-ledger fallback, MVC funding recovery gating, recovery failure fallback, and one-shot stale-provider retry.\n\nVerification:\n- npm run compile:electron && node --test tests/gigSquareRefundsService.test.mjs tests/protocolPinFetch.test.mjs tests/serviceRefundSyncService.test.mjs tests/serviceRefundSettlementService.test.mjs tests/mvcSpendSessionState.test.mjs tests/mvcFundingRecoveryService.test.mjs tests/transferMvcWorker.test.mjs tests/transferServiceMvcRecovery.test.mjs (33/33 pass)\n- npm run lint\n- git diff --check\n- subagent code review and acceptance review: no blocking findings","contentType":"text/plain;utf-8","attachments":[],"quotePin":""}