zeroclaw-labs/zeroclaw · error
create_ticket requires a non-empty summary
Error message
create_ticket requires a non-empty summary
What it means
Client-side guard in create_ticket: after the project key passes validation, the summary argument is checked with trim() and the call aborts before any HTTP request if it is empty or whitespace-only. Jira itself requires a summary, so the tool rejects the request early. This is purely an input-validation error.
Source
Thrown at crates/zeroclaw-tools/src/jira_tool.rs:848
.into(),
error: None,
})
}
#[allow(clippy::too_many_arguments)]
async fn create_ticket(
&self,
project_key: &str,
issue_type: &str,
summary: &str,
description: Option<&str>,
assignee: Option<&str>,
labels: Option<&[String]>,
parent_key: Option<&str>,
) -> anyhow::Result<ToolResult> {
validate_project_key(project_key)?;
if summary.trim().is_empty() {
anyhow::bail!("create_ticket requires a non-empty summary");
}
if issue_type.trim().is_empty() {
anyhow::bail!("create_ticket requires a non-empty issue_type");
}
if let Some(parent) = parent_key {
validate_issue_key(parent)?;
}
let mut fields = serde_json::Map::new();
fields.insert("project".into(), json!({ "key": project_key }));
fields.insert("issuetype".into(), json!({ "name": issue_type }));
fields.insert("summary".into(), json!(summary));
if let Some(desc) = description {
let value = if self.is_cloud() {
build_adf(desc, &HashMap::new())
} else {
json!(desc)View on GitHub (pinned to 88bb9c8533)
Solutions
- Supply a non-empty summary (any non-whitespace text works; Jira truncates display but accepts long summaries).
- Trim user input and fall back to a generated default like "Untitled" when the source field is blank.
- Validate required fields in your own layer before invoking the tool (see defense below).
Example fix
// before
jira.create_ticket("PROJ", "Bug", " ", None, None, None, None).await?; // -> error
// after
let summary = user_title.trim();
let summary = if summary.is_empty() { format!("Automated report {}", chrono_today()) } else { summary };
jira.create_ticket("PROJ", "Bug", &summary, None, None, None, None).await?; Defensive patterns
Strategy: validation
Validate before calling
let summary = raw_summary.trim();
assert!(!summary.is_empty(), "summary required");
jira.create_ticket("PROJ", "Task", summary, None, None, None, None).await?; Prevention
- Validate required string fields in your payload layer before calling the tool.
- Generate fallback summaries from context (timestamp + source) instead of sending blanks.
- Trim input at the edge (CLI/JSON parsing) so whitespace-only never reaches the tool.
When it happens
Trigger: Calling create_ticket with summary="" or summary=" "; a tool-caller/LLM omitting the summary field and the wrapper defaulting it to an empty string; templates that substitute an empty variable (e.g. missing bug title) into the summary.
Common situations: Agent-generated ticket payloads where the model left the summary out; form handling that passes uninitialized strings; CI scripts creating tickets from commit messages when the message is blank.
Understand the failure class
Background: "Missing required field" and "field is required" errors: why libraries reject payloads that omit mandatory fields — this error's family across 20 libraries.
Related errors
- create_ticket requires a non-empty issue_type
- transition_ticket requires exactly one of transition_id or t
- Jira create_ticket failed ({status}): {}
- jira.base_url must not be empty when jira.enabled = true
- jira.api_token must be set (or JIRA_API_TOKEN env var) when
AI-assisted analysis of zeroclaw-labs/zeroclaw@88bb9c8533 (2026-08-23).
Data as JSON: /api/errors/944d58913811e9b5.
Report an issue: GitHub.