Hmbown/CodeWhale · error · anyhow::Error
Trigger ' ' cannot be canceled after admission (status: )
Error message
Trigger '{trigger_id}' cannot be canceled after admission (status: {:?}) What it means
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.
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.
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at crates/tui/src/automation_manager.rs:1998 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of Hmbown/CodeWhale@73e0f67d83 (2026-09-22).
Data as JSON: /api/errors/32d65d9257814757.
Report an issue: GitHub.
Appendix: source
Thrown at crates/tui/src/automation_manager.rs:1998
) -> Result<Vec<DelayedTriggerRecord>> {
let mut records = self.list_triggers(status_filter, None)?;
records.retain(|record| record.owner_session_id.as_deref() == Some(owner_session_id));
if let Some(limit) = limit {
records.truncate(limit);
}
Ok(records)
}
/// Cancel a pending trigger owned by the given session.
pub fn cancel_trigger_for_owner(
&self,
trigger_id: &str,
owner_session_id: &str,
) -> Result<DelayedTriggerRecord> {
self.with_transaction(|| {
let mut record = self.get_trigger_for_owner(trigger_id, owner_session_id)?;
if record.status != DelayedTriggerStatus::Pending || record.dispatch.is_some() {
bail!(
"Trigger '{trigger_id}' cannot be canceled after admission (status: {:?})",
record.status
);
}
record.status = DelayedTriggerStatus::Canceled;
self.save_trigger_unlocked(&record)?;
Ok(record)
})
}
/// Return due proposals and unfinished durable trigger admissions.
pub fn collect_due_triggers(&self, now: DateTime<Utc>) -> Result<Vec<DelayedTriggerRecord>> {
Ok(self
.list_triggers(None, None)?
.into_iter()
.filter(|trigger| {
trigger.status == DelayedTriggerStatus::Dispatching
|| (trigger.status == DelayedTriggerStatus::PendingView on GitHub (pinned to 73e0f67d83)