nautechsystems/nautilus_trader · error
order-list report {} is absent from list {}
Error message
order-list report {} is absent from list {} What it means
During cancel-all preparation, each order report in an OrderList response must correspond to one of the child orders listed in the same payload. This error fires when a report's orderId is not found among the list's orders, i.e. the exchange returned a report for an order that the list payload never described, breaking the one-to-one report/order pairing invariant.
Source
Thrown at crates/adapters/binance/src/spot/execution.rs:2585
response.order_list_id,
);
}
for report in response.order_reports {
anyhow::ensure!(
report.order_list_id == Some(response.order_list_id),
"order {} reports order-list ID {:?}, expected {}",
report.order_id,
report.order_list_id,
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(())
}
View on GitHub (pinned to 18893faf8b)
Solutions
- Update the nautilus_binance adapter to align with the current Binance SBE schema
- Log the offending report.order_id and the set of orders[] IDs from the payload and report the inconsistency upstream
- Retry the cancel-all request to check whether the mismatch is transient
- Inspect for proxies or serialization layers that could corrupt the binary response
Defensive patterns
Strategy: validation
Validate before calling
let order_ids: AHashSet<i64> = response.orders.iter().map(|o| o.order_id).collect();
let unmatched: Vec<_> = response.order_reports.iter().filter(|r| !order_ids.contains(&r.order_id)).collect();
if !unmatched.is_empty() {
return Err(anyhow!("{} reports unmatched to list orders", unmatched.len()));
} Type guard
fn reports_match_listed_orders(resp: &BinanceCancelOrderListResponse) -> bool {
let ids: AHashSet<i64> = resp.orders.iter().map(|o| o.order_id).collect();
resp.orders.len() == resp.order_reports.len()
&& resp.order_reports.iter().all(|r| ids.contains(&r.order_id))
} Try / catch
match prepare_cancel_all_orders(...) {
Ok(p) => handle(p),
Err(e) if e.to_string().contains("absent from list") => log::error!("unpaired cancel report: {e}"),
Err(e) => return Err(e),
} Prevention
- Keep the SBE decoder aligned with Binance's current schema
- Capture raw responses for order-list cancels to debug payload pairing
- Avoid intermediary layers that could truncate binary payloads
When it happens
Trigger: Binance cancel-open-orders OrderList response includes an order_report whose orderId does not match any entry in response.orders — caused by decoding drift, payload truncation/mixing, or a genuine exchange-side inconsistency.
Common situations: SBE schema mismatch after a Binance update shifting field boundaries so order IDs decode incorrectly; partial response assembly; adapter bug in mapping orders[] vs orderReports[].
Understand the failure class
Background: 'Could not be found', 'does not exist', 'not found in database': the resource-not-found family when an ID, slug, key, or URI lookup comes back empty — this error's family across 20 libraries.
Related errors
- order list {} contains order {} for symbol {}, expected {}
- order list {} contains a duplicate order ID
- order {} reports order-list ID {:?}, expected {}
- order-list report {} does not match its order identity
- Unsupported `OrderSide` for Binance: {value:?}
AI-assisted analysis of nautechsystems/nautilus_trader@18893faf8b (2026-09-08).
Data as JSON: /api/errors/608f7e096bb8ed78.
Report an issue: GitHub.