MBMarket BenderSpecification system
12.01 · Policy

Unknown financial state stops new risk

Provider failure produces no new intent. Unknown signing/exchange state pauses risk and reconciles before retry. Match state reloads from persisted revision/timestamps. Settlement decisions are immutable and effects retry idempotently. Replay corruption never changes authority.

12.02 · Catalogue

Required operational response

FailureDetectionContainmentRecoveryUser stateTelemetry
Model timeoutTurn deadline exceededNo intent; keep prior exposureRetry next cadence only if state remains freshAgent delayed; controls remain activeturn_timeout, provider, session, duration
Invalid model outputSchema/semantic validation failsReject before risk/signingReturn bounded correction once, then waitDecision rejected as invalidintent_invalid, safe validation codes
Duplicate tool invocationRepeated intent/request idempotency keyReturn prior result; do not resubmitReconcile prior request stateNo duplicate actionduplicate_intent, original request
Signing failureSigner/policy service errorNo exchange submission; pause writes after thresholdVerify signer registration/expiry, rotate through master pathTrading temporarily unavailablesign_failure without key material
Stale market dataFreshness exceeds policyReject risk-increasing intentsReconnect and fetch authoritative snapshotMarket data stale; reduce/exit controls prioritizedmarket_stale, feed, age
WebSocket disconnectClose/heartbeat timeoutMark projection staleReconnect, consume snapshot, reconcile info endpointsReconnecting; state may be delayedws_disconnect, attempts, gap
Missed fillReconcile result differs from projectionFreeze new risk if exposure uncertainInsert deduplicated fill and rebuild portfolioPortfolio reconcilingfill_gap, trade/order IDs
Nonce conflictExchange nonce rejection/duplicateStop signer submissionsSingle-writer atomic counter fast-forward; rotate only by runbookExecution paused for signer recoverynonce_conflict, signer reference
Partial order executionRemaining size/open status after fillRecompute exposure from fillsPolicy decides cancel/reprice/reduce; never assume full fillPartially filledpartial_fill, filled/remaining
Cancel failureCancel rejected/unknown and order remains openNo conflicting new riskQuery order status; retry idempotently until deadline/escalationCancel pending verificationcancel_failure, order ID
Flatten failureOpen position/order after flatten planTerminal state becomes flatten_failed/manual_reviewRepeat cancel and reduce-only plans with fresh sizes; operator escalationExit incomplete; recovery activeflatten_failure, residual exposure
Hyperliquid outageHTTP/WS error budget exceededStop new risk; preserve authoritative local stateBackoff, health probe, reconcile before resumeExchange unavailablevenue_outage, endpoint/status
Privy outageAuth/wallet API failuresExisting verified sessions may read; sensitive wallet actions fail closedBackoff and reauthenticate; never bypass policyWallet service unavailableidentity_outage, operation
Cloudflare restartNew isolate/object activationNever rely on memory for critical stateLoad persisted revision, reconcile pending effectsUsually transparent; recovery state if neededactivation, recovered revision
Durable Object migrationSchema version mismatch/migration errorReject state mutationsBackward-compatible migrator, backup/export, canary and rollbackMatch temporarily unavailabledo_migration, from/to/version
Settlement retryWorkflow/payout result unknown or failedDecision immutable; no new decisionRetry effect with decision idempotency key; reconcile ledgerSettlement pendingsettlement_retry, decision/effect IDs
Replay corruptionManifest checksum/gap failsReplay labeled incomplete; authority unaffectedRebuild from indexed source events or retain evidence gapReplay temporarily incompletereplay_corrupt, segment/hash
User disconnectionClient WebSocket closesServer session/match continues by policyReconnect with latest snapshot/revisionRejoining live stateclient_disconnect, role/duration
Opponent disconnectionOpponent connection absentDo not change timer or trading authority automaticallyApply published abandonment rule; reconnect snapshotOpponent offline; match continues/terminal rule shownopponent_disconnect, match/revision
Reference-price unavailableRequired price sources stale/missing at snapshotNo winner decisionUse preapproved fallback hierarchy or manual_review/refundSettlement review requiredreference_price_missing, sources
12.03 · Verification

Fault drills are release evidence

Inject provider timeouts, malformed tool calls, stream gaps, unknown submissions, partial fills, cancel/flatten failures, exchange/Privy outage, isolate/DO restart, alarm delay, queue duplicate/DLQ, settlement retry and replay corruption. Record state transitions, exchange/account reconciliation, alerts, user UI and runbook results.

Navigate specification

Search pages and sections