fix(bifrost/solana): omit minContextSlot when scanning with an until-cursor
Problem
A SOL bifrost scanner can wedge fleet-wide with no operator halt set. scanVault sends getSignaturesForAddress(vault, {minContextSlot: <near-tip>, until: <cursor sig>}). minContextSlot tracks the scanner's advancing scan position; the until cursor stays at the vault's last observed signature. For an idle vault (no new tx — e.g. a RetiringVault waiting to migrate) the cursor's slot falls behind minContextSlot. Once minContextSlot > cursor-sig-slot, the RPC returns -32020 "Transaction not found" → scanVault calls setUnhealthy() → the whole SOL scanner goes unhealthy → sign.go then gates all signing and suppresses observation/network-fee submission for the chain.
Observed on mainnet: 4 RetiringVaults stranded with ~1014 SOL un-migratable, SOL observed height frozen, with no Halt*/Solvency* mimir set.
Fix
The until cursor already bounds the query, so minContextSlot is redundant once a cursor is set. Only pin minContextSlot on the cursor-less path (first scan / start-block floor). One guard, no schema change; the normal forward-scan and start-block bootstrap paths are unchanged. Only downside: a lagging RPC may return a slightly smaller gap when a cursor is set — self-corrects next scan, no missed txs (the cursor bounds the bottom).
Test
TestScanVaultOmitsMinContextSlotWithUntilCursor drives scanVault and captures the literal on-wire params, asserting minContextSlot is omitted with an until-cursor and kept without — a true regression guard on the serialized request, not just the Go struct.