{"record":{"id":"eb982513a7cebf5a","repo":"nautechsystems/nautilus_trader","slug":"failed-to-start-polymarket-task-generation-e-eb9825","errorCode":null,"errorMessage":"Failed to start Polymarket task generation: {e}","messagePattern":"Failed to start Polymarket task generation: (.+?)","errorType":"exception","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"crates/adapters/polymarket/src/execution/lifecycle.rs","lineNumber":646,"sourceCode":"    }\n\n    pub(super) async fn connect_client(&mut self) -> anyhow::Result<()> {\n        if self.core.is_connected() && self.pending_tasks.is_open() && self.session_tasks.is_open()\n        {\n            return Ok(());\n        }\n\n        log::info!(\"Connecting Polymarket execution client\");\n\n        if !self.pending_tasks.is_open() || !self.session_tasks.is_open() {\n            self.teardown_partial_connect().await?;\n        }\n\n        if !self.pending_tasks.is_open() {\n            self.await_pending_tasks().await?;\n            self.pending_tasks\n                .start_generation()\n                .map_err(|e| anyhow::anyhow!(\"Failed to start Polymarket task generation: {e}\"))?;\n        }\n\n        if !self.session_tasks.is_open() {\n            self.await_session_tasks().await?;\n            self.session_tasks.start_generation().map_err(|e| {\n                anyhow::anyhow!(\"Failed to start Polymarket session generation: {e}\")\n            })?;\n        }\n        self.stopping.store(false, Ordering::Release);\n        let ws_shutdown = self.ws_client.shutdown_handle();\n        let stopping = Arc::clone(&self.stopping);\n        let setup_guard =\n            TaskGroupGuard::new(&[&self.session_tasks, &self.pending_tasks], move || {\n                stopping.store(true, Ordering::Release);\n                ws_shutdown.begin_shutdown();\n            });\n\n        let version = self","sourceCodeStart":628,"sourceCodeEnd":664,"githubUrl":"https://github.com/nautechsystems/nautilus_trader/blob/18893faf8b356be3320add8de2f861b0b647cf06/crates/adapters/polymarket/src/execution/lifecycle.rs#L628-L664","documentation":"`connect_client` lazily starts a new generation of the pending (execution) task group when it is not open. Before restarting, it drains prior tasks via await_pending_tasks. If `pending_tasks.start_generation()` fails (the task group runtime rejects the restart — e.g. still shutting down or already running), this error wraps the cause.","triggerScenarios":"First connect or reconnect when pending_tasks is closed; start_generation called while the previous generation has not fully terminated (await_pending_tasks returned but the group still rejects a new generation).","commonSituations":"Rapid reconnect loops where the abort timeout has not yet completed; task-group runtime misconfiguration; calling connect after a failed teardown left the group in a half-shutdown state.","solutions":["Wait for the pending task group's shutdown/abort to fully complete before reconnecting (increase abort timeout if needed)","Inspect the wrapped `{e}` for the task-group's rejection reason","Avoid rapid connect/disconnect cycles; add backoff between reconnect attempts","Recreate the execution client if the task group is permanently wedged"],"exampleFix":"// before: immediate reconnect loop\nloop { adapter.connect().await?; }\n// after: back off between generations\nloop {\n    adapter.connect().await?;\n    tokio::time::sleep(Duration::from_secs(1)).await;\n}","handlingStrategy":"retry","validationCode":"// add reconnect backoff to avoid racing previous generation shutdown\nlet delay = Duration::from_millis(500 * attempts);","typeGuard":null,"tryCatchPattern":"match adapter.connect().await {\n    Err(e) if e.to_string().contains(\"task generation\") => {\n        tokio::time::sleep(backoff).await;\n        adapter.connect().await?;\n    }\n    other => other?,\n}","preventionTips":["Use exponential backoff on reconnects","Ensure abort timeouts complete before starting a new generation","Log the wrapped error chain to identify task-group rejection causes"],"tags":["rust","async","lifecycle","task-group"],"backgroundTag":"invalid-state-transition","analyzedSha":"18893faf8b356be3320add8de2f861b0b647cf06","analyzedAt":"2026-09-08T20:49:34.690Z","contentChangedAt":"2026-09-08T20:49:34.690Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}