zeroclaw-labs/zeroclaw · error
Transition '{name}' not found for {issue_key}. Available: {}
Error message
Transition '{name}' not found for {issue_key}. Available: {} What it means
Thrown by transition_ticket when resolving a transition by name: the tool fetched the issue's available transitions, case-insensitively matched each name against the requested transition_name, and found no match. The message lists every transition name actually available on the issue, which reflects the issue's current workflow status. This is a client-side resolution failure before any POST is made.
Source
Thrown at crates/zeroclaw-tools/src/jira_tool.rs:774
(_, Some(name)) if !name.trim().is_empty() => {
let transitions = self.fetch_transitions(issue_key).await?;
let needle = name.trim().to_ascii_lowercase();
let found = transitions.iter().find_map(|t| {
let n = t["name"].as_str()?;
if n.eq_ignore_ascii_case(&needle) || n.to_ascii_lowercase() == needle {
t["id"].as_str().map(String::from)
} else {
None
}
});
match found {
Some(id) => id,
None => {
let available: Vec<&str> = transitions
.iter()
.filter_map(|t| t["name"].as_str())
.collect();
anyhow::bail!(
"Transition '{name}' not found for {issue_key}. Available: {}",
available.join(", ")
);
}
}
}
_ => {
anyhow::bail!(
"transition_ticket requires exactly one of transition_id or transition_name"
);
}
};
let ver = self.api_version();
let url = format!(
"{}/rest/api/{}/issue/{}/transitions",
self.base_url, ver, issue_key
);View on GitHub (pinned to 88bb9c8533)
Solutions
- Read the 'Available:' list in the error and re-run with one of those exact names (matching is case-insensitive).
- Call list_transitions(issue_key) first and select the id or name dynamically instead of hardcoding.
- If the transition should exist, check the issue's current status in Jira — the workflow may not allow this transition from that status.
- Prefer transition_id over name for scripted automation, since ids are stable per workflow while names can be renamed.
- If projects use different workflows, make the transition name a per-project configuration value.
Example fix
// before
jira.transition_ticket("PROJ-42", None, Some("Done")).await?; // workflow says "Close Issue"
// after
let result = jira.list_transitions("PROJ-42").await?;
// pick from the returned transitions, e.g. the one whose `to_status` is what you want
jira.transition_ticket("PROJ-42", None, Some("Close Issue")).await?; Defensive patterns
Strategy: validation
Validate before calling
// Fetch transitions first and match the name yourself before calling transition_ticket
let transitions = jira.list_transitions("PROJ-42").await?; // returns {transitions:[{id,name,to_status}]}
let wanted = "done"; // desired target, lowercase
let chosen = transitions.iter().find(|t| {
t["name"].as_str().map(|n| n.to_ascii_lowercase().contains(wanted)).unwrap_or(false)
});
if chosen.is_none() {
anyhow::bail!("no transition leads to {wanted}; issue may already be there");
}
let name = chosen.unwrap()["name"].as_str().unwrap(); Try / catch
match jira.transition_ticket("PROJ-42", None, Some(name)).await {
Ok(_) => {}
Err(e) if e.to_string().starts_with("Transition '") => {
// workflow moved on: re-fetch transitions and retry once with a fresh pick
}
Err(e) => return Err(e),
} Prevention
- Never hardcode transition names across projects; resolve them per issue via list_transitions.
- Match on to_status rather than the transition name when you care about the destination state.
- Remember matching is case-insensitive but exact-word: 'Done' != 'Close Issue'.
When it happens
Trigger: Calling transition_ticket with a name like "Done" when the issue's current status only offers e.g. "In Progress", "In Review"; using a workflow-specific name ("Close Issue") from a different workflow scheme; trailing/leading whitespace is trimmed but different wording ("Resolve" vs "Resolved") will not match.
Common situations: Hardcoding transition names from one project's workflow into scripts reused on another project; the issue is already in the target status so the transition no longer applies; Jira Cloud workflows renamed by admins; localized or custom workflow steps (e.g. Jira Service Management queues) that differ from software-project defaults.
Related errors
- Jira transition_ticket failed ({status}): {}
- statuses request returned {}
- Jira list_transitions failed ({status}): {}
- transition_ticket requires exactly one of transition_id or t
- jira.base_url must not be empty when jira.enabled = true
AI-assisted analysis of zeroclaw-labs/zeroclaw@88bb9c8533 (2026-08-23).
Data as JSON: /api/errors/1eda4079802c62e3.
Report an issue: GitHub.