{"record":{"id":"1ab73658a7554a63","repo":"charmbracelet/crush","slug":"failed-to-initialize-config-w-1ab736","errorCode":null,"errorMessage":"failed to initialize config: %w","messagePattern":"failed to initialize config: %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/cmd/session.go","lineNumber":113,"sourceCode":"\tsessionCmd.AddCommand(sessionShowCmd)\n\tsessionCmd.AddCommand(sessionLastCmd)\n\tsessionCmd.AddCommand(sessionDeleteCmd)\n\tsessionCmd.AddCommand(sessionRenameCmd)\n}\n\ntype sessionServices struct {\n\tsessions session.Service\n\tmessages message.Service\n\tcfg      *config.ConfigStore\n}\n\nfunc sessionSetup(cmd *cobra.Command) (context.Context, *sessionServices, func(), error) {\n\tdataDir, _ := cmd.Flags().GetString(\"data-dir\")\n\tctx := cmd.Context()\n\n\tcfg, err := config.Init(\"\", dataDir, false)\n\tif err != nil {\n\t\treturn nil, nil, nil, fmt.Errorf(\"failed to initialize config: %w\", err)\n\t}\n\tif dataDir == \"\" {\n\t\tdataDir = cfg.Config().Options.DataDirectory\n\t}\n\tif shouldEnableMetrics(cfg.Config()) {\n\t\tevent.Init()\n\t}\n\n\tconn, err := db.Connect(ctx, dataDir)\n\tif err != nil {\n\t\treturn nil, nil, nil, fmt.Errorf(\"failed to connect to database: %w\", err)\n\t}\n\n\tqueries := db.New(conn)\n\tsvc := &sessionServices{\n\t\tsessions: session.NewService(queries, conn),\n\t\tmessages: message.NewService(queries),\n\t\tcfg:      cfg,","sourceCodeStart":95,"sourceCodeEnd":131,"githubUrl":"https://github.com/charmbracelet/crush/blob/7944b8e52225d8805e31eacbf7ef24856b0dfb7a/internal/cmd/session.go#L95-L131","documentation":"sessionSetup initializes configuration via config.Init before any session subcommand (list/show/delete/rename/last) runs. If config loading or validation fails, the setup is aborted and this wrapped error is returned, stopping the subcommand.","triggerScenarios":"config.Init(\"\", dataDir, false) fails: malformed crushrc/crush.json, unreadable config file, invalid provider or options in config, or filesystem permission errors on the data directory.","commonSituations":"Syntax error in ~/.config/crush/crush.json or crushrc after hand-editing; CRUSH_DATA_DIR pointing to a non-writable path; deprecated/unknown keys left in config after a version upgrade.","solutions":["Run `crush` or the config validation command to see the underlying validation error from the wrapped chain","Validate JSON syntax of crush.json / crushrc (jq . or bash -n)","Check file permissions on the config file and the data directory","Temporarily move the config aside and rerun to confirm it is the config content vs environment"],"exampleFix":null,"handlingStrategy":"validation","validationCode":"// validate config before invoking the command\nif _, err := os.Stat(configPath); err != nil {\n    return fmt.Errorf(\"config file missing: %w\", err)\n}\nif f, err := os.Open(configPath); err == nil {\n    defer f.Close()\n    if err := json.NewDecoder(f).Decode(&struct{}{}); err != nil {\n        return fmt.Errorf(\"invalid config JSON: %w\", err)\n    }\n}","typeGuard":null,"tryCatchPattern":"cfg, err := config.Init(\"\", dataDir, false)\nif err != nil {\n    slog.Error(\"Config initialization failed\", \"error\", err)\n    os.Exit(1)\n}","preventionTips":["Validate crushrc/crush.json after every manual edit (bash -n / jq .)","Keep config paths and data-dir flags consistent across commands","After upgrading crush, review changelogs for renamed/removed config keys","Ensure config and data directories have correct read/write permissions"],"tags":["go","config","cli","session"],"backgroundTag":"config-init-failed","analyzedSha":"7944b8e52225d8805e31eacbf7ef24856b0dfb7a","analyzedAt":"2026-08-29T12:48:59.079Z","schemaVersion":2},"datasetVersion":"2026-08-29T17:17:51.833Z"}