{"record":{"id":"183c5ba4cf8726d4","repo":"nautechsystems/nautilus_trader","slug":"e-183c5b","errorCode":null,"errorMessage":"{e}","messagePattern":"\\{e\\}","errorType":"exception","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"crates/adapters/binance/src/futures/websocket/streams/recovery.rs","lineNumber":266,"sourceCode":"\n/// Emits `OrderStatusReport`s for every open order and open algo order on the\n/// venue so the engine can repair any order state missed during the rotation\n/// window. Uses the Arc-backed HTTP instruments cache for precision lookups,\n/// which does not require `&self` access.\n///\n/// This does not cover orders that filled or canceled during the rotation\n/// gap, because `query_open_orders` returns open orders only. The engine's\n/// periodic open-order reconciliation is expected to repair that state.\n///\n/// # Errors\n///\n/// Returns an error if both the open-order and open-algo-order REST queries\n/// fail, so `recover_with_retry` schedules another attempt instead of\n/// silently leaving the gap unrepaired.\nasync fn emit_open_order_reports(ctx: &RecoveryCtx) -> anyhow::Result<()> {\n    let params = BinanceOpenOrdersParamsBuilder::default()\n        .build()\n        .map_err(|e| anyhow::anyhow!(\"{e}\"))\n        .context(\"failed to build open orders params for recovery reconcile\")?;\n\n    let open_orders_result = ctx.http_client.query_open_orders(&params).await;\n    let algo_orders_result = ctx.http_client.query_open_algo_orders(None).await;\n\n    let ts_init = ctx.dispatch_ctx.clock.get_time_ns();\n    let instruments = ctx.http_client.instruments_cache();\n    let product_type = ctx.dispatch_ctx.product_type;\n    let mut emitted = 0usize;\n\n    let open_ok = match open_orders_result {\n        Ok(orders) => {\n            for order in orders {\n                let symbol_ustr = order.symbol;\n                let (instrument_id, price_precision, size_precision) =\n                    resolve_precision(&instruments, &symbol_ustr, product_type);\n\n                match order.to_order_status_report(","sourceCodeStart":248,"sourceCodeEnd":284,"githubUrl":"https://github.com/nautechsystems/nautilus_trader/blob/a4b06ed870971b5671d12754ea138a3ab99b1dec/crates/adapters/binance/src/futures/websocket/streams/recovery.rs#L248-L284","documentation":"While recovering the user data stream, the adapter builds default open-orders REST parameters; this error means BinanceOpenOrdersParamsBuilder's own validation rejected the parameters (the builder's error {e} is wrapped with the context 'failed to build open orders params for recovery reconcile'). Because only defaults are used, hitting it points to an adapter-internal bug or version regression, not user configuration.","triggerScenarios":"emit_open_order_reports during stream recovery runs BinanceOpenOrdersParamsBuilder::default().build() and the builder returns Err from its validation rules.","commonSituations":"Essentially unreachable via user config; can appear after upgrading to a version where the builder's validation rules regressed or a required-by-default field was added.","solutions":["Upgrade (or pin back to) a NautilusTrader version where the default open-orders params builder validates cleanly","If reproducible, open an issue with the full error chain (the context wraps the builder's {e}) and the recovery logs"],"exampleFix":null,"handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":"Let the recovery driver retry; if the identical builder error recurs on every attempt (it will, since defaults are deterministic), treat it as a version regression: pin a known-good version and report upstream with the full error chain.","preventionTips":["Pin dependency versions and test recovery paths in staging after upgrades","Alert when recovery reconcile failures repeat with identical messages"],"tags":["binance","futures","recovery","builder-validation","internal-error"],"backgroundTag":"builder-validation-failed","analyzedSha":"a4b06ed870971b5671d12754ea138a3ab99b1dec","analyzedAt":"2026-08-16T22:54:50.089Z","schemaVersion":2},"datasetVersion":"2026-08-16T23:17:17.608Z"}