Fix: Unknown subcommands now error instead of silently showing help

Parent commands (mol, mail, crew, polecat, etc.) previously showed help
and exited 0 for unknown subcommands like "gt mol foobar". This masked
errors in scripts and confused users.

Added requireSubcommand() helper to root.go and applied it to all parent
commands. Now unknown subcommands properly error with exit code 1.

Example before: gt mol unhook → shows help, exits 0
Example after:  gt mol unhook → "Error: unknown command "unhook"", exits 1

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
gastown/crew/joe
2025-12-30 20:52:23 -08:00
committed by Steve Yegge
parent 3d09c679e2
commit df46e75a51
16 changed files with 29 additions and 0 deletions

View File

@@ -2,6 +2,7 @@
package cmd
import (
"fmt"
"strings"
"github.com/spf13/cobra"
@@ -85,3 +86,14 @@ func buildCommandPath(cmd *cobra.Command) string {
}
return strings.Join(parts, " ")
}
// requireSubcommand returns a RunE function for parent commands that require
// a subcommand. Without this, Cobra silently shows help and exits 0 for
// unknown subcommands like "gt mol foobar", masking errors.
func requireSubcommand(cmd *cobra.Command, args []string) error {
if len(args) == 0 {
return fmt.Errorf("requires a subcommand\n\nRun '%s --help' for usage", buildCommandPath(cmd))
}
return fmt.Errorf("unknown command %q for %q\n\nRun '%s --help' for available commands",
args[0], buildCommandPath(cmd), buildCommandPath(cmd))
}