{"record":{"id":"fb3234adbc3a6ba9","repo":"charmbracelet/crush","slug":"failed-to-configure-providers-during-reload-w","errorCode":null,"errorMessage":"failed to configure providers during reload: %w","messagePattern":"failed to configure providers during reload: %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/config/store.go","lineNumber":1252,"sourceCode":"\n\t// Reconfigure providers\n\tenv := env.New()\n\tresolver := NewShellVariableResolver(env)\n\n\t// Apply top-level env vars before configuring providers so variables\n\t// like AWS_PROFILE are visible to the AWS SDK credential chain.\n\tcfg.applyEnv(resolver)\n\n\tproviders, err := Providers(cfg)\n\tif err != nil {\n\t\tif len(providers) == 0 {\n\t\t\treturn fmt.Errorf(\"failed to load providers during reload: %w\", err)\n\t\t}\n\t\tslog.Warn(\"Reload continuing with the previously known providers\", \"error\", err)\n\t}\n\n\tif err := cfg.configureProviders(ctx, s, env, resolver, providers); err != nil {\n\t\treturn fmt.Errorf(\"failed to configure providers during reload: %w\", err)\n\t}\n\n\t// Update store state BEFORE running model/agent setup (so they see new config)\n\ts.setConfig(cfg)\n\ts.loadedPaths = loadedPaths\n\ts.resolver = resolver\n\ts.knownProviders = providers\n\ts.overrides = overrides\n\ts.workspacePath = workspacePath\n\n\t// Mirror startup flow: setup models and agents against NEW config.\n\tvar setupErr error\n\tif !cfg.IsConfigured() {\n\t\tslog.Warn(\"No providers configured after reload\")\n\t} else {\n\t\tresolved, resolveErr := resolveSelectedModels(cfg, providers)\n\t\tif resolveErr != nil {\n\t\t\tsetupErr = fmt.Errorf(\"failed to configure selected models during reload: %w\", resolveErr)","sourceCodeStart":1234,"sourceCodeEnd":1270,"githubUrl":"https://github.com/charmbracelet/crush/blob/7944b8e52225d8805e31eacbf7ef24856b0dfb7a/internal/config/store.go#L1234-L1270","documentation":"After providers load, cfg.configureProviders wires OAuth token handling, env, and per-provider clients into the reloaded config. If that setup fails, reload aborts with this wrapped error and the store rolls back to its previous state. Unlike provider loading, this is always fatal — there is no partial-success path.","triggerScenarios":"cfg.configureProviders(ctx, s, env, resolver, providers) returns an error: OAuth token application/persistence fails for a provider, an auth callback setup fails, or provider-specific configuration (e.g. base URL resolution, credential discovery like Copilot/LSP token lookup) errors out.","commonSituations":"A stored OAuth token is corrupt so applyToken fails; credential helper (e.g. Copilot CLI) not installed; data directory became read-only between load and configure.","solutions":["Read the wrapped cause: fix the specific provider setup failure (re-auth OAuth, install the credential helper, restore file permissions).","Remove the problematic provider's oauth/api_key entry and re-add it cleanly, then reload.","Retry reload after fixing the data directory permissions or disk condition.","If triggered by a transient credential helper failure, restart the helper/CLI and reload again."],"exampleFix":"// before: corrupt oauth block breaks configureProviders\nproviders.copilot.oauth = {access_token: \"\", refresh_token: \"garbage\"}\n// after: clear it and re-auth\nproviders.copilot.oauth = null  // then run the login flow","handlingStrategy":"try-catch","validationCode":"if hasCorruptOAuth(cfg) || !isDataDirWritable(dataDir) { repairBeforeReload() }","typeGuard":null,"tryCatchPattern":"if err := reload(); err != nil {\n    var perr *ProviderConfigError\n    if errors.As(err, &perr) { resetProviderAuth(perr.ProviderID); reload() }\n}","preventionTips":["Re-auth providers whose tokens look corrupt before reloading","Install required credential helpers (e.g. Copilot CLI)","Keep the data directory writable at all times"],"tags":["providers","configuration","oauth"],"backgroundTag":"provider-configuration-failed","analyzedSha":"7944b8e52225d8805e31eacbf7ef24856b0dfb7a","analyzedAt":"2026-08-29T12:48:59.079Z","schemaVersion":2},"datasetVersion":"2026-08-29T17:17:51.833Z"}