{"record":{"id":"622038cf7531aac9","repo":"nautechsystems/nautilus_trader","slug":"execution-client-client-id-disappeared-during-st","errorCode":null,"errorMessage":"Execution client {client_id} disappeared during startup reconciliation","messagePattern":"Execution client (.+?) disappeared during startup reconciliation","errorType":"validation","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"crates/live/src/node/mod.rs","lineNumber":908,"sourceCode":"                )\n            })?;\n\n            match mass_status_result {\n                Ok(Some(mass_status)) => {\n                    log_info!(\n                        \"Reconciling ExecutionMassStatus for {}\",\n                        client_id,\n                        color = LogColor::Blue\n                    );\n\n                    let exec_engine_rc = self.kernel.exec_engine.clone();\n\n                    let result = self\n                        .exec_manager\n                        .reconcile_execution_mass_status(mass_status, exec_engine_rc)\n                        .await;\n\n                    anyhow::ensure!(\n                        self.kernel\n                            .exec_engine\n                            .borrow()\n                            .get_client(&client_id)\n                            .is_some(),\n                        \"Execution client {client_id} disappeared during startup reconciliation\",\n                    );\n\n                    if result.events.is_empty() {\n                        log_info!(\n                            \"Reconciliation for {} succeeded\",\n                            client_id,\n                            color = LogColor::Blue\n                        );\n                    } else {\n                        log::info!(\n                            color = LogColor::Blue as u8;\n                            \"Reconciliation for {} processed {} events\",","sourceCodeStart":890,"sourceCodeEnd":926,"githubUrl":"https://github.com/nautechsystems/nautilus_trader/blob/18893faf8b356be3320add8de2f861b0b647cf06/crates/live/src/node/mod.rs#L890-L926","documentation":"After reconciling an execution client's mass status, the node re-checks that the client is still registered in the exec engine (anyhow::ensure! with get_client(&client_id).is_some()). If it vanished — for example a disconnect or adapter failure occurred while reconciliation was awaited — startup aborts with this error. This is a defensive invariant: reconciliation results must still map to a live registered client.","triggerScenarios":"In perform_startup_reconciliation, after reconcile_execution_mass_status completes, self.kernel.exec_engine.borrow().get_client(&client_id) returns None (mod.rs:908-915), i.e. the client was removed between mass-status generation and post-reconcile validation.","commonSituations":"Broker WebSocket disconnects mid-reconciliation and the adapter deregisters the client; venue session expires during long mass-status generation; flaky network drops the client while its report is being processed.","solutions":["Investigate adapter/venue logs to find why the client disconnected during reconciliation (session expiry, network drop) and fix the root cause.","Retry startup once connections are stable; the client should remain registered throughout reconciliation.","Update adapter credentials/session handling (auto-reconnect, keepalive) so clients are not deregistered mid-startup.","Check adapter version for known disconnect/deregistration bugs and upgrade."],"exampleFix":null,"handlingStrategy":"validation","validationCode":"// Before reconciliation, confirm client is registered and connection is healthy\nlet engine = node.kernel().exec_engine.borrow();\nassert!(engine.get_client(&client_id).is_some(), \"client {client_id} must be registered before reconciliation\");\nassert!(engine.get_client(&client_id).unwrap().is_connected(), \"client {client_id} not connected\");","typeGuard":null,"tryCatchPattern":"match node.start().await {\n    Err(e) if e.to_string().contains(\"disappeared during startup reconciliation\") => {\n        // reconnect/inspect adapter stability, then retry startup\n    }\n    other => other?,\n}","preventionTips":["Enable adapter auto-reconnect and session keepalive","Ensure credentials/session TTL outlasts startup reconciliation","Run nodes on stable network links; avoid VPN drops mid-startup","Check adapter changelogs for disconnect-during-report bugs"],"tags":["trading","reconciliation","disconnect","state"],"backgroundTag":"entity-not-found","analyzedSha":"18893faf8b356be3320add8de2f861b0b647cf06","analyzedAt":"2026-09-08T20:49:34.690Z","contentChangedAt":"2026-09-08T20:49:34.690Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}