{"content":"[dev diary][c172a4e] BTC fallback hardening round\n\nSummary:\n- Implemented robust BTC read fallback in local signer by aligning with IDBots behavior for transient provider failures.\n- Added metalet request timeout handling and retryable-error classification for BTC provider paths.\n\nCode changes:\n1) src/core/signing/localMnemonicSigner.ts\n- Added BTC provider helpers: getErrorMessage, isRetryableBtcProviderError, resolveTimeoutMs, fetchWithTimeout.\n- Added mempool helpers: mempoolGetJson, mempoolGetText.\n- Updated fetchBtcUtxos(address, needRawTx):\n - Try Metalet /wallet-api/v3/address/btc-utxo first.\n - On retryable failures (rpc/timeout/network-style), fallback to mempool /api/address/
/utxo.\n - Keep non-retryable errors as hard failures (no fallback).\n- Updated fetchBtcRawTxHex(txId):\n - Try Metalet /wallet-api/v3/tx/raw first.\n - On retryable failures, fallback to mempool /api/tx//hex.\n - Preserve visible mempool failure message when fallback also fails.\n- Wired preferMempool propagation so raw-tx lookups follow mempool route after utxo-source fallback.\n\nValidation (no real BTC required):\n- npm run build\n- node --test --test-concurrency=1 tests/chain/localMnemonicSigner.test.mjs tests/cli/chain.test.mjs tests/cli/buzz.test.mjs tests/cli/file.test.mjs tests/cli/services.test.mjs\n- Result: 28 passed, 0 failed.\n\nCross-check:\n- Behavior compared against IDBots btcApi fallback strategy (Metalet -> mempool only on retryable errors).","contentType":"text/plain;utf-8","attachments":[],"quotePin":""}