{"record":{"id":"6e24c8923b4d89f2","repo":"charmbracelet/crush","slug":"failed-to-get-debug-flag-v","errorCode":null,"errorMessage":"failed to get debug flag: %v","messagePattern":"failed to get debug flag: (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/cmd/server.go","lineNumber":37,"sourceCode":"\nvar serverHost string\n\nfunc init() {\n\tserverCmd.Flags().StringVarP(&serverHost, \"host\", \"H\", server.DefaultHost(), \"Server host (TCP or Unix socket)\")\n\trootCmd.AddCommand(serverCmd)\n}\n\nvar serverCmd = &cobra.Command{\n\tUse:   \"server\",\n\tShort: \"Start the Crush server\",\n\tRunE: func(cmd *cobra.Command, _ []string) error {\n\t\tdataDir, err := cmd.Flags().GetString(\"data-dir\")\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"failed to get data directory: %v\", err)\n\t\t}\n\t\tdebug, err := cmd.Flags().GetBool(\"debug\")\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"failed to get debug flag: %v\", err)\n\t\t}\n\n\t\tcfg, err := config.Load(config.GlobalWorkspaceDir(), dataDir, debug)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"failed to load configuration: %v\", err)\n\t\t}\n\n\t\thostURL, err := server.ParseHostURL(serverHost)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"invalid server host: %v\", err)\n\t\t}\n\n\t\tlogFile := filepath.Join(config.GlobalCacheDir(), \"server-\"+safeHostName(hostURL), \"crush.log\")\n\n\t\tif term.IsTerminal(os.Stderr.Fd()) {\n\t\t\tcrushlog.Setup(logFile, debug, os.Stderr)\n\t\t} else {\n\t\t\tcrushlog.Setup(logFile, debug)","sourceCodeStart":19,"sourceCodeEnd":55,"githubUrl":"https://github.com/charmbracelet/crush/blob/7944b8e52225d8805e31eacbf7ef24856b0dfb7a/internal/cmd/server.go#L19-L55","documentation":"After reading --data-dir, the server command reads the --debug boolean via cmd.Flags().GetBool. An error here means the flag lookup itself failed — the flag was never registered or was registered with a non-bool type — again a command-wiring defect rather than a runtime condition.","triggerScenarios":"Executing serverCmd.RunE where `debug` was not added via flags.Bool(\"debug\", ...) in init(), or was registered as a different type (e.g. a string flag) so GetBool returns a type error.","commonSituations":"Refactors that rename or retype the --debug flag; forks with custom flag sets; tests invoking RunE on a bare cobra.Command without flag registration.","solutions":["Use an official binary; stock builds register --debug correctly.","When building from source, verify `serverCmd.Flags().Bool(\"debug\", false, ...)` exists in internal/cmd/server.go.","If calling RunE from code, register the flag with the bool type before invocation."],"exampleFix":"// before\nserverCmd.Flags().String(\"debug\", \"\", \"debug mode\")   // wrong type\n// after\nserverCmd.Flags().Bool(\"debug\", false, \"enable debug\")","handlingStrategy":"validation","validationCode":"if serverCmd.Flags().Lookup(\"debug\") == nil {\n    return fmt.Errorf(\"debug flag not registered on this build\")\n}","typeGuard":"func hasBoolFlag(cmd *cobra.Command, name string) bool {\n    f := cmd.Flags().Lookup(name)\n    return f != nil && f.Value.Type() == \"bool\"\n}","tryCatchPattern":"if err := serverCmd.RunE(serverCmd, args); err != nil {\n    if strings.HasPrefix(err.Error(), \"failed to get debug flag\") {\n        return fmt.Errorf(\"--debug flag misconfigured; rebuild from an official source\")\n    }\n    return err\n}","preventionTips":["Keep flag name and type consistent (Bool for debug) across refactors.","Add unit tests that invoke RunE with all flags registered.","Prefer official release binaries over ad-hoc local builds for servers."],"tags":["cli","flags","cobra"],"backgroundTag":"flag-not-defined","analyzedSha":"7944b8e52225d8805e31eacbf7ef24856b0dfb7a","analyzedAt":"2026-08-29T12:48:59.079Z","schemaVersion":2},"datasetVersion":"2026-08-29T17:17:51.833Z"}