From 09d38de6dfecb59c55d68944b737bd7af6fe3bc7 Mon Sep 17 00:00:00 2001 From: beads/crew/emma Date: Thu, 1 Jan 2026 14:20:01 -0800 Subject: [PATCH] feat(create): add --validate flag for template validation (bd-ik1b) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add opt-in strict mode that fails creation if required sections are missing. Uses ValidateTemplate() under the hood. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- cmd/bd/create.go | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/cmd/bd/create.go b/cmd/bd/create.go index 3969d248..80178db7 100644 --- a/cmd/bd/create.go +++ b/cmd/bd/create.go @@ -165,6 +165,15 @@ var createCmd = &cobra.Command{ } estimatedMinutes = &est } + + // Validate template if --validate flag is set + validateTemplate, _ := cmd.Flags().GetBool("validate") + if validateTemplate { + if err := validation.ValidateTemplate(types.IssueType(issueType), description); err != nil { + FatalError("%v", err) + } + } + // Use global jsonOutput set by PersistentPreRun // Determine target repository using routing logic @@ -548,6 +557,7 @@ func init() { createCmd.Flags().IntP("estimate", "e", 0, "Time estimate in minutes (e.g., 60 for 1 hour)") createCmd.Flags().Bool("ephemeral", false, "Create as ephemeral (ephemeral, not exported to JSONL)") createCmd.Flags().String("mol-type", "", "Molecule type: swarm (multi-polecat), patrol (recurring ops), work (default)") + createCmd.Flags().Bool("validate", false, "Validate description contains required sections for issue type") // Agent-specific flags (only valid when --type=agent) createCmd.Flags().String("role-type", "", "Agent role type: polecat|crew|witness|refinery|mayor|deacon (requires --type=agent)") createCmd.Flags().String("agent-rig", "", "Agent's rig name (requires --type=agent)")