nautechsystems/nautilus_trader · error

order-list report {} does not match its order identity

Error message

order-list report {} does not match its order identity

What it means

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.

Source

Thrown at crates/adapters/binance/src/spot/execution.rs:2595

            response.order_list_id,
        );
        let order = list_orders.remove(&report.order_id).with_context(|| {
            format!(
                "order-list report {} is absent from list {}",
                report.order_id, response.order_list_id
            )
        })?;
        anyhow::ensure!(
            report.symbol == response.symbol
                && report.symbol == order.symbol
                && report.orig_client_order_id == order.client_order_id,
            "order-list report {} does not match its order identity",
            report.order_id,
        );
        prepare_cancel_order(&report, true, order_ids, client_order_ids, prepared)?;
    }

    anyhow::ensure!(
        list_orders.is_empty(),
        "order list {} is missing {} child reports",
        response.order_list_id,
        list_orders.len(),
    );
    Ok(())
}

fn prepare_cancel_order(
    response: &BinanceCancelOrderResponse,
    order_list: bool,
    order_ids: &mut AHashSet<(InstrumentId, i64)>,
    client_order_ids: &mut AHashSet<ClientOrderId>,
    prepared: &mut Vec<PreparedCancelOrder>,
) -> anyhow::Result<()> {
    anyhow::ensure!(
        response.order_id >= 0
            && !response.symbol.is_empty()

View on GitHub (pinned to 18893faf8b)

Solutions

  1. Update the nautilus_binance adapter and nautilus_trader to the latest versions
  2. Dump the report and matching order entry (symbol, clientOrderId, origClientOrderId) and report the mismatch to maintainers if the raw payload looks valid
  3. Retry the request to exclude transient corruption
  4. Verify no proxy/middleware alters the SBE response bytes
Defensive patterns

Strategy: validation

Validate before calling

let by_id: AHashMap<i64, _> = response.orders.iter().map(|o| (o.order_id, o)).collect();
for r in &response.order_reports {
    if let Some(o) = by_id.get(&r.order_id) {
        if r.symbol != response.symbol || r.symbol != o.symbol || r.orig_client_order_id != o.client_order_id {
            return Err(anyhow!("report {} identity mismatch", r.order_id));
        }
    }
}

Type guard

fn report_identities_consistent(resp: &BinanceCancelOrderListResponse) -> bool {
    let by_id: AHashMap<i64, _> = resp.orders.iter().map(|o| (o.order_id, o)).collect();
    resp.order_reports.iter().all(|r| match by_id.get(&r.order_id) {
        Some(o) => r.symbol == resp.symbol && r.orig_client_order_id == o.client_order_id,
        None => false,
    })
}

Try / catch

match prepare_cancel_all_orders(...) {
    Ok(p) => handle(p),
    Err(e) if e.to_string().contains("order identity") => log::error!("report/order identity mismatch: {e}"),
    Err(e) => return Err(e),
}

Prevention

When it happens

Trigger: 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.

Common situations: Schema drift after a Binance protocol update misaligning clientOrderId/symbol fields; binary payload corruption through intermediary layers; adapter regression in report-to-order mapping.

Understand the failure class

Background: "invalid response format", "malformed payload", "missing data field": when an API returns 200 but the response shape is wrong — this error's family across 23 libraries.

Related errors


AI-assisted analysis of nautechsystems/nautilus_trader@18893faf8b (2026-09-08). Data as JSON: /api/errors/a058cbdaebca80a8. Report an issue: GitHub.