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

  1. Retry the cancel operation; the next response is usually well-formed
  2. Upgrade to the latest nautilus_trader version in case of an SBE decode fix
  3. Log and report the raw response if reproducible; verify Binance API status
  4. 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

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


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