Some checks failed
CI / typecheck + vitest (Node 20) (push) Has been cancelled
runOcrOneShot posted the escrow before calling the supplier, so a busy supplier's 409 stranded an already-paid escrow until reclaim - and the buyer-side busy-retry multiplies this into several stranded escrows per page. Add a live /status check per candidate, immediately before its escrow posts, mirroring sessions.ts's startChat pre-check: "working" skips to the next candidate without posting, anything else (free, unreachable, malformed, slow) is treated as usable so the check is an optimisation, never a gate. Bounded to a 2s timeout so a stalled supplier cannot meaningfully delay the request. Existing candidate-fallback, escrow-ref capture, usage recording, and receipt labels are unchanged.