{"record":{"id":"e03b2b50b5144750","repo":"zeroclaw-labs/zeroclaw","slug":"last-draft-edit-lock","errorCode":null,"errorMessage":"last_draft_edit lock","messagePattern":"last_draft_edit lock","errorType":"panic","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/zeroclaw-channels/src/slack.rs","lineNumber":751,"sourceCode":"\n    fn legacy_progress_event(text: &str) -> Option<ProgressEvent> {\n        let line = text.trim().lines().last()?.trim();\n        match line {\n            line if line.starts_with('\\u{1f914}') => Some(ProgressEvent::WaitingOnModel),\n            line if line.starts_with('\\u{23f3}') => Some(ProgressEvent::RunningTool),\n            line if line.starts_with('\\u{1f4ac}') => Some(ProgressEvent::Planning),\n            line if line.starts_with('\\u{2705}')\n                || line.starts_with('\\u{274c}')\n                || line.starts_with('\\u{270f}') =>\n            {\n                Some(ProgressEvent::Planning)\n            }\n            _ => None,\n        }\n    }\n\n    fn progress_rate_limited(&self, message_id: &str) -> bool {\n        let last_edits = self.last_draft_edit.lock().expect(\"last_draft_edit lock\");\n        last_edits.get(message_id).is_some_and(|last_time| {\n            let elapsed_ms = u64::try_from(last_time.elapsed().as_millis()).unwrap_or(u64::MAX);\n            elapsed_ms < self.draft_update_interval_ms\n        })\n    }\n\n    fn record_progress_update(&self, message_id: &str) {\n        self.last_draft_edit\n            .lock()\n            .expect(\"last_draft_edit lock\")\n            .insert(message_id.to_string(), Instant::now());\n    }\n\n    /// Hand `message_id` the current generation for `target`, displacing any\n    /// older draft. Called when a draft is created for an Assistant thread.\n    ///\n    /// Claiming also repairs a target whose previous clear failed: the retained\n    /// generation is replaced, and this turn's own terminal path clears the","sourceCodeStart":733,"sourceCodeEnd":769,"githubUrl":"https://github.com/zeroclaw-labs/zeroclaw/blob/88bb9c8533fc57ed7a03e36ca7c9ed2bf8336dcc/crates/zeroclaw-channels/src/slack.rs#L733-L769","documentation":"Error \"last_draft_edit lock\" thrown in zeroclaw-labs/zeroclaw.","triggerScenarios":"Thrown at crates/zeroclaw-channels/src/slack.rs:751 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Restart the Slack channel process; a poisoned lock indicates a previous panic while holding it.","Report a bug with the preceding panic backtrace so the underlying poisoning cause can be fixed."],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"88bb9c8533fc57ed7a03e36ca7c9ed2bf8336dcc","analyzedAt":"2026-08-23T01:07:41.857Z","schemaVersion":2},"datasetVersion":"2026-08-23T08:06:27.607Z"}