nautechsystems/nautilus_trader · error · IncompleteOrderReports
IncompleteOrderReports { reports, detail: detail.into() }
Error message
IncompleteOrderReports { reports, detail: detail.into() } What it means
The Lighter execution adapter received an incomplete set of order status reports (e.g. during mass status or reconciliation) and bails out with a typed IncompleteOrderReports error that carries the partial reports and a detail string. The helper shown constructs this error.
Source
Thrown at crates/adapters/lighter/src/execution.rs:4845
// account, so a market-scoped sweep can serve nothing while older trades for that
// market have already been evicted by newer trades in other markets.
struct FillSweep {
reports: Vec<FillReport>,
covers_window: bool,
}
#[derive(Debug, thiserror::Error)]
#[error("incomplete Lighter order reports: {detail}")]
struct IncompleteOrderReports {
reports: Vec<OrderStatusReport>,
detail: String,
}
fn incomplete_order_reports(
reports: Vec<OrderStatusReport>,
detail: impl Into<String>,
) -> anyhow::Error {
anyhow::Error::new(IncompleteOrderReports {
reports,
detail: detail.into(),
})
}
fn partial_order_reports(error: &anyhow::Error) -> Vec<OrderStatusReport> {
error
.downcast_ref::<IncompleteOrderReports>()
.map(|incomplete| incomplete.reports.clone())
.unwrap_or_default()
}
fn is_commission_error(error: &anyhow::Error) -> bool {
error
.chain()
.any(|cause| cause.downcast_ref::<LighterCommissionError>().is_some())
}
View on GitHub (pinned to d1527c24af)
Solutions
- Read detail (the wrapped message) — it states which request was incomplete
- Retry the mass status request; transient venue-side gaps often resolve
- Use partial_order_reports(error) to recover the reports that did arrive and reconcile what you can
- If persistent, check Lighter API announcements for endpoint changes
Defensive patterns
Strategy: retry
Type guard
fn is_incomplete_reports(e: &anyhow::Error) -> bool {
e.downcast_ref::<IncompleteOrderReports>().is_some()
} Try / catch
match run_mass_status().await {
Err(e) if is_incomplete_reports(&e) => {
let partial = partial_order_reports(&e);
reconcile_partial(partial).await?;
}
other => other?,
} Prevention
- Handle IncompleteOrderReports as a typed case and reconcile partials
- Retry mass status with backoff on transient gaps
- Pin adapter version against known-good Lighter API behavior
When it happens
Trigger: Calling a Lighter mass-order-status or reconciliation flow where the venue returns fewer/malformed order reports than expected for the requested order IDs.
Common situations: Venue API changes or pagination quirks dropping reports, network interruption mid-poll, or requesting status for orders the venue no longer tracks.
Related errors
- IncompleteOrderReports: {detail}
- Lighter position snapshot does not cover the requested instr
- no Lighter market_index for position report instrument {inst
- Lighter fill reconciliation exceeded {MAX_RECONCILIATION_PAG
- Execution mass status client ID {} did not match source clie
AI-assisted analysis of nautechsystems/nautilus_trader@d1527c24af (2026-08-27).
Data as JSON: /api/errors/c300e02b143e45aa.
Report an issue: GitHub.