nautechsystems/nautilus_trader · error
order list {} is missing {} child reports
Error message
order list {} is missing {} child reports What it means
Raised by prepare_cancel_order while processing a Binance cancel-all/cancel-list response: the count of successfully canceled orders in the response does not match the number of child order reports included. Binance aggregates cancel requests per order list; each canceled child order must report its own result. A mismatch means the HTTP response is incomplete or malformed relative to the cancel request.
Source
Thrown at crates/adapters/binance/src/spot/execution.rs:2611
}
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()
&& !response.orig_client_order_id.is_empty(),
"cancel-all response has an invalid order ID, symbol, or original client order ID",
);
anyhow::ensure!(
response.status == SbeOrderStatus::Canceled,
"order {} reports status {:?}, expected Canceled",
response.order_id,
response.status,
);
let client_order_id = decode_client_order_id(
&response.orig_client_order_id,
BINANCE_NAUTILUS_SPOT_BROKER_ID,
)?;
let instrument_id = InstrumentId::new(response.symbol.as_str().into(), *BINANCE_VENUE);
anyhow::ensure!(
order_ids.insert((instrument_id, response.order_id)),View on GitHub (pinned to 18893faf8b)
Solutions
- Retry the cancel operation; the next response is usually well-formed
- Upgrade to the latest nautilus_trader version in case of an SBE decode fix
- Log and report the raw response if reproducible; verify Binance API status
- Fall back to canceling orders individually via cancel_order
Defensive patterns
Strategy: retry
Try / catch
match result { Err(e) if e.to_string().contains("missing") && e.to_string().contains("child reports") => retry_with_backoff(), Err(e) => halt_and_report(e), Ok(_) => continue } Prevention
- Keep nautilus_trader and its Binance adapter up to date
- Monitor Binance API changelog for SBE schema changes
- Fall back to per-order cancels when batch cancels fail
When it happens
Trigger: Calling cancel_all_orders or cancel_order_list through the Binance spot execution client when the SBE-decoded response's child report list length is less than the declared canceled-order count — e.g. a truncated/corrupt response payload or an adapter decode bug.
Common situations: Rare in practice; seen during Binance SBE API migrations, partial network reads, or when Binance returns an unexpected response shape during cancel-all on many open orders.
Related errors
- cancel-all response has an invalid order ID, symbol, or orig
- cancel-all response contains duplicate order ID {} for {}
- WS cancel order failed: {e}
- WS cancel order failed: {e}
- cancel-all response contains an order for a different instru
AI-assisted analysis of nautechsystems/nautilus_trader@18893faf8b (2026-09-08).
Data as JSON: /api/errors/d15d86f933b3a509.
Report an issue: GitHub.