From 59414834ec21e17e26b1fbf4600a730d0b9d5ae4 Mon Sep 17 00:00:00 2001 From: julianknutsen Date: Sun, 4 Jan 2026 20:12:05 -0800 Subject: [PATCH 1/2] fix(sling): remove obsolete --quality flag MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The --quality flag (basic|shiny|chrome) referenced mol-polecat-* formulas that were removed in c47a746 ("Remove obsolete polecat formula files") but the flag code was left behind, causing errors when used. Rather than restore the formulas, remove the flag entirely since: - The default `gt sling ` is now the standard workflow - Formula-on-bead via `--on` or `--molecule` covers custom workflows - The quality-level formulas were intentionally deprecated Removes: - --quality/-q flag and help text - qualityToFormula() function - Quality Levels section from command documentation 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- internal/cmd/sling.go | 36 ------------------------------------ 1 file changed, 36 deletions(-) diff --git a/internal/cmd/sling.go b/internal/cmd/sling.go index 797c243f..736f83d2 100644 --- a/internal/cmd/sling.go +++ b/internal/cmd/sling.go @@ -74,11 +74,6 @@ Formula-on-Bead (--on flag): gt sling mol-review --on gt-abc # Apply formula to existing work gt sling shiny --on gt-abc crew # Apply formula, sling to crew -Quality Levels (shorthand for polecat workflows): - gt sling gp-abc greenplace --quality=basic # mol-polecat-basic (trivial fixes) - gt sling gp-abc greenplace --quality=shiny # mol-polecat-shiny (standard) - gt sling gp-abc greenplace --quality=chrome # mol-polecat-chrome (max rigor) - Compare: gt hook # Just attach (no action) gt sling # Attach + start now (keep context) @@ -109,7 +104,6 @@ var ( slingMolecule string // --molecule: workflow to instantiate on the bead slingForce bool // --force: force spawn even if polecat has unread mail slingAccount string // --account: Claude Code account handle to use - slingQuality string // --quality: shorthand for polecat workflow (basic|shiny|chrome) slingNoConvoy bool // --no-convoy: skip auto-convoy creation ) @@ -127,7 +121,6 @@ func init() { slingCmd.Flags().StringVar(&slingMolecule, "molecule", "", "Molecule workflow to instantiate on the bead") slingCmd.Flags().BoolVar(&slingForce, "force", false, "Force spawn even if polecat has unread mail") slingCmd.Flags().StringVar(&slingAccount, "account", "", "Claude Code account handle to use") - slingCmd.Flags().StringVarP(&slingQuality, "quality", "q", "", "Polecat workflow quality level (basic|shiny|chrome)") slingCmd.Flags().BoolVar(&slingNoConvoy, "no-convoy", false, "Skip auto-convoy creation for single-issue sling") rootCmd.AddCommand(slingCmd) @@ -162,22 +155,6 @@ func runSling(cmd *cobra.Command, args []string) error { } } - // --quality is shorthand for formula-on-bead with polecat workflow - // Convert: gt sling gp-abc greenplace --quality=shiny - // To: gt sling mol-polecat-shiny --on gt-abc gastown - if slingQuality != "" { - qualityFormula, err := qualityToFormula(slingQuality) - if err != nil { - return err - } - // The first arg should be the bead, and we wrap it with the formula - if slingOnTarget != "" { - return fmt.Errorf("--quality cannot be used with --on (both specify formula)") - } - slingOnTarget = args[0] // The bead becomes --on target - args[0] = qualityFormula // The formula becomes first arg - } - // Determine mode based on flags and argument types var beadID string var formulaName string @@ -1003,19 +980,6 @@ func agentIDToBeadID(agentID string) string { } } -// qualityToFormula converts a quality level to the corresponding polecat workflow formula. -func qualityToFormula(quality string) (string, error) { - switch strings.ToLower(quality) { - case "basic", "b": - return "mol-polecat-basic", nil - case "shiny", "s": - return "mol-polecat-shiny", nil - case "chrome", "c": - return "mol-polecat-chrome", nil - default: - return "", fmt.Errorf("invalid quality level '%s' (use: basic, shiny, or chrome)", quality) - } -} // IsDogTarget checks if target is a dog target pattern. // Returns the dog name (or empty for pool dispatch) and true if it's a dog target. From e30ebaf8acef0c7d9ccf650a1b1a2ac717e7eb00 Mon Sep 17 00:00:00 2001 From: julianknutsen Date: Sun, 4 Jan 2026 20:19:44 -0800 Subject: [PATCH 2/2] fix(sling): remove dead --molecule flag MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The --molecule flag was defined but never wired up - the slingMolecule variable was set by the flag parser but never read by any code path. Users should use --on instead, which is fully implemented: gt sling --on The --on flag properly instantiates the formula (cook + wisp + bond) and applies it to the target bead before slinging. Keeping --on as the canonical way to apply formulas to beads since it's actually wired up and working. The --molecule flag can be re-added later if a different argument order is desired. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- docs/reference.md | 2 +- internal/cmd/sling.go | 3 --- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/docs/reference.md b/docs/reference.md index 35aa79d6..6dcca841 100644 --- a/docs/reference.md +++ b/docs/reference.md @@ -242,7 +242,7 @@ Note: "Swarm" is ephemeral (workers on a convoy's issues). See [Convoys](convoy. # Standard workflow: convoy first, then sling gt convoy create "Feature X" gt-abc gt-def gt sling gt-abc # Assign to polecat -gt sling gt-def --molecule= # With workflow template +gt sling --on gt-def # With workflow template # Quick sling (auto-creates convoy) gt sling # Auto-convoy for dashboard visibility diff --git a/internal/cmd/sling.go b/internal/cmd/sling.go index 736f83d2..de39626b 100644 --- a/internal/cmd/sling.go +++ b/internal/cmd/sling.go @@ -53,7 +53,6 @@ Target Resolution: gt sling gt-abc deacon/dogs/alpha # Specific dog Spawning Options (when target is a rig): - gt sling gp-abc greenplace --molecule mol-review # Use specific workflow gt sling gp-abc greenplace --create # Create polecat if missing gt sling gp-abc greenplace --naked # No-tmux (manual start) gt sling gp-abc greenplace --force # Ignore unread mail @@ -101,7 +100,6 @@ var ( // Flags migrated for polecat spawning (used by sling for work assignment slingNaked bool // --naked: no-tmux mode (skip session creation) slingCreate bool // --create: create polecat if it doesn't exist - slingMolecule string // --molecule: workflow to instantiate on the bead slingForce bool // --force: force spawn even if polecat has unread mail slingAccount string // --account: Claude Code account handle to use slingNoConvoy bool // --no-convoy: skip auto-convoy creation @@ -118,7 +116,6 @@ func init() { // Flags for polecat spawning (when target is a rig) slingCmd.Flags().BoolVar(&slingNaked, "naked", false, "No-tmux mode: assign work but skip session creation (manual start)") slingCmd.Flags().BoolVar(&slingCreate, "create", false, "Create polecat if it doesn't exist") - slingCmd.Flags().StringVar(&slingMolecule, "molecule", "", "Molecule workflow to instantiate on the bead") slingCmd.Flags().BoolVar(&slingForce, "force", false, "Force spawn even if polecat has unread mail") slingCmd.Flags().StringVar(&slingAccount, "account", "", "Claude Code account handle to use") slingCmd.Flags().BoolVar(&slingNoConvoy, "no-convoy", false, "Skip auto-convoy creation for single-issue sling")