{"record":{"id":"32d65d9257814757","repo":"Hmbown/CodeWhale","slug":"trigger-trigger-id-cannot-be-canceled-after-admission-status","errorCode":null,"errorMessage":"Trigger '{trigger_id}' cannot be canceled after admission (status: {:?})","messagePattern":"Trigger '(.+?)' cannot be canceled after admission \\(status: (.+?)\\)","errorType":"exception","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"crates/tui/src/automation_manager.rs","lineNumber":1998,"sourceCode":"    ) -> Result<Vec<DelayedTriggerRecord>> {\n        let mut records = self.list_triggers(status_filter, None)?;\n        records.retain(|record| record.owner_session_id.as_deref() == Some(owner_session_id));\n        if let Some(limit) = limit {\n            records.truncate(limit);\n        }\n        Ok(records)\n    }\n\n    /// Cancel a pending trigger owned by the given session.\n    pub fn cancel_trigger_for_owner(\n        &self,\n        trigger_id: &str,\n        owner_session_id: &str,\n    ) -> Result<DelayedTriggerRecord> {\n        self.with_transaction(|| {\n            let mut record = self.get_trigger_for_owner(trigger_id, owner_session_id)?;\n            if record.status != DelayedTriggerStatus::Pending || record.dispatch.is_some() {\n                bail!(\n                    \"Trigger '{trigger_id}' cannot be canceled after admission (status: {:?})\",\n                    record.status\n                );\n            }\n            record.status = DelayedTriggerStatus::Canceled;\n            self.save_trigger_unlocked(&record)?;\n            Ok(record)\n        })\n    }\n\n    /// Return due proposals and unfinished durable trigger admissions.\n    pub fn collect_due_triggers(&self, now: DateTime<Utc>) -> Result<Vec<DelayedTriggerRecord>> {\n        Ok(self\n            .list_triggers(None, None)?\n            .into_iter()\n            .filter(|trigger| {\n                trigger.status == DelayedTriggerStatus::Dispatching\n                    || (trigger.status == DelayedTriggerStatus::Pending","sourceCodeStart":1980,"sourceCodeEnd":2016,"githubUrl":"https://github.com/Hmbown/CodeWhale/blob/73e0f67d83c59909b571efdfc88c4bc28c309cb1/crates/tui/src/automation_manager.rs#L1980-L2016","documentation":"cancel_trigger_for_owner guard: once a trigger has been admitted for dispatch, cancellation is refused and the current status is reported in the message; this prevents revoking work the runtime has already committed to run.","triggerScenarios":"Thrown at crates/tui/src/automation_manager.rs:1998 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Cancel the trigger earlier, before it transitions from Pending to an admitted/running state.","Let the trigger complete and act on its result instead of canceling."],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"73e0f67d83c59909b571efdfc88c4bc28c309cb1","analyzedAt":"2026-09-22T01:30:00.501Z","contentChangedAt":"2026-09-22T01:30:00.501Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}