{"record":{"id":"a058cbdaebca80a8","repo":"nautechsystems/nautilus_trader","slug":"order-list-report-does-not-match-its-order-iden","errorCode":null,"errorMessage":"order-list report {} does not match its order identity","messagePattern":"order-list report (.+?) does not match its order identity","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/adapters/binance/src/spot/execution.rs","lineNumber":2595,"sourceCode":"            response.order_list_id,\n        );\n        let order = list_orders.remove(&report.order_id).with_context(|| {\n            format!(\n                \"order-list report {} is absent from list {}\",\n                report.order_id, response.order_list_id\n            )\n        })?;\n        anyhow::ensure!(\n            report.symbol == response.symbol\n                && report.symbol == order.symbol\n                && report.orig_client_order_id == order.client_order_id,\n            \"order-list report {} does not match its order identity\",\n            report.order_id,\n        );\n        prepare_cancel_order(&report, true, order_ids, client_order_ids, prepared)?;\n    }\n\n    anyhow::ensure!(\n        list_orders.is_empty(),\n        \"order list {} is missing {} child reports\",\n        response.order_list_id,\n        list_orders.len(),\n    );\n    Ok(())\n}\n\nfn prepare_cancel_order(\n    response: &BinanceCancelOrderResponse,\n    order_list: bool,\n    order_ids: &mut AHashSet<(InstrumentId, i64)>,\n    client_order_ids: &mut AHashSet<ClientOrderId>,\n    prepared: &mut Vec<PreparedCancelOrder>,\n) -> anyhow::Result<()> {\n    anyhow::ensure!(\n        response.order_id >= 0\n            && !response.symbol.is_empty()","sourceCodeStart":2577,"sourceCodeEnd":2613,"githubUrl":"https://github.com/nautechsystems/nautilus_trader/blob/18893faf8b356be3320add8de2f861b0b647cf06/crates/adapters/binance/src/spot/execution.rs#L2577-L2613","documentation":"For each order report in an OrderList cancel response, the adapter verifies that the report's symbol matches the list's symbol and the order's symbol, and that the report's origClientOrderId equals the listed order's clientOrderId. This cross-check detects mis-paired or corrupted data; it fires when the report and its corresponding order entry disagree on identity.","triggerScenarios":"Binance cancel-open-orders OrderList response pairs an order_report with a matching orderId entry, but the report's symbol or origClientOrderId disagrees with the order's symbol/clientOrderId — typically from SBE field-shift decoding bugs or an anomalous exchange payload.","commonSituations":"Schema drift after a Binance protocol update misaligning clientOrderId/symbol fields; binary payload corruption through intermediary layers; adapter regression in report-to-order mapping.","solutions":["Update the nautilus_binance adapter and nautilus_trader to the latest versions","Dump the report and matching order entry (symbol, clientOrderId, origClientOrderId) and report the mismatch to maintainers if the raw payload looks valid","Retry the request to exclude transient corruption","Verify no proxy/middleware alters the SBE response bytes"],"exampleFix":null,"handlingStrategy":"validation","validationCode":"let by_id: AHashMap<i64, _> = response.orders.iter().map(|o| (o.order_id, o)).collect();\nfor r in &response.order_reports {\n    if let Some(o) = by_id.get(&r.order_id) {\n        if r.symbol != response.symbol || r.symbol != o.symbol || r.orig_client_order_id != o.client_order_id {\n            return Err(anyhow!(\"report {} identity mismatch\", r.order_id));\n        }\n    }\n}","typeGuard":"fn report_identities_consistent(resp: &BinanceCancelOrderListResponse) -> bool {\n    let by_id: AHashMap<i64, _> = resp.orders.iter().map(|o| (o.order_id, o)).collect();\n    resp.order_reports.iter().all(|r| match by_id.get(&r.order_id) {\n        Some(o) => r.symbol == resp.symbol && r.orig_client_order_id == o.client_order_id,\n        None => false,\n    })\n}","tryCatchPattern":"match prepare_cancel_all_orders(...) {\n    Ok(p) => handle(p),\n    Err(e) if e.to_string().contains(\"order identity\") => log::error!(\"report/order identity mismatch: {e}\"),\n    Err(e) => return Err(e),\n}","preventionTips":["Update nautilus_binance whenever Binance changes its SBE schema","Log symbol and client-order-ID pairs on failure to spot field misalignment","Test against recorded real payloads after adapter upgrades","Keep network paths free of binary-altering intermediaries"],"tags":["binance","validation","identity-mismatch","order-list"],"backgroundTag":"unexpected-api-response-shape","analyzedSha":"18893faf8b356be3320add8de2f861b0b647cf06","analyzedAt":"2026-09-08T20:49:34.690Z","contentChangedAt":"2026-09-08T20:49:34.690Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}