{"record":{"id":"1d04290d7d2277a9","repo":"gastownhall/beads","slug":"newproxiedserveruowprovider-resolve-root-path-w","errorCode":null,"errorMessage":"newProxiedServerUOWProvider: resolve root path: %w","messagePattern":"newProxiedServerUOWProvider: resolve root path: %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"cmd/bd/uow_factory.go","lineNumber":490,"sourceCode":"\t// it: an env/sidecar override that is explicitly named but broken\n\t// should fail loudly here rather than surface as a confusing spawn\n\t// failure downstream. See internal/doltversion for the resolution\n\t// precedence (env > sidecar > PATH) and probe hardening (timeout,\n\t// output cap, pre-exec validation).\n\t//\n\t// The error label names this function rather than the proxied-server\n\t// entry point: since upstream's server-mode path (bd serve ->\n\t// newSQLServerUOWProvider) also lands here, a hardcoded\n\t// \"newProxiedServerUOWProvider\" would mislabel a `bd serve` failure as a\n\t// proxied-server one.\n\tdoltBin, err := resolveAndProbeDolt(ctx, \"newManagedProxiedServerUOWProvider\", quietFlag)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\trootPath, err := resolveProxiedServerRootPath(beadsDir)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"newProxiedServerUOWProvider: resolve root path: %w\", err)\n\t}\n\tif err := validateProxiedServerRootPath(rootPath); err != nil {\n\t\treturn nil, fmt.Errorf(\"newProxiedServerUOWProvider: proxied server root (from env or %s): %w\", configfile.ProxiedServerClientInfoFileName, err)\n\t}\n\n\tconfigPath, err := ensureProxiedServerConfig(beadsDir)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tlogPath, isCustomLog, err := resolveProxiedServerLogPath(beadsDir)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"newProxiedServerUOWProvider: resolve log path: %w\", err)\n\t}\n\tif isCustomLog {\n\t\tif err := validateProxiedServerLogPath(logPath); err != nil {\n\t\t\treturn nil, fmt.Errorf(\"newProxiedServerUOWProvider: proxied server log (from env or %s): %w\", configfile.ProxiedServerClientInfoFileName, err)\n\t\t}","sourceCodeStart":472,"sourceCodeEnd":508,"githubUrl":"https://github.com/gastownhall/beads/blob/71377f276968b452ee607177637970a4ff888584/cmd/bd/uow_factory.go#L472-L508","documentation":"The managed variant newManagedProxiedServerUOWProvider (cmd/bd/uow_factory.go) also resolves the proxied server root via resolveProxiedServerRootPath (env → proxied_server_client_info.json sidecar → default Dolt dir) and wraps resolution errors with this message. Unlike the validation error that follows, this fires during resolution itself: most commonly when the client-info sidecar exists but cannot be loaded/parsed, since the resolver reads it to find root_path.","triggerScenarios":"LoadProxiedServerClientInfo fails because .beads/proxied_server_client_info.json is corrupt JSON, unreadable, or unparsable while resolving the root for the managed proxied server.","commonSituations":"Truncated sidecar after an interrupted bd migrate-dolt-mode run; sidecar hand-edited with invalid JSON; sidecar permissions exclude the current user.","solutions":["Inspect and repair .beads/proxied_server_client_info.json, or delete it so resolution falls back to the default Dolt dir","Set BEADS_PROXIED_SERVER_ROOT_PATH explicitly to bypass sidecar-based root resolution","Fix file permissions on the sidecar and .beads directory for the running user","Re-run bd migrate-dolt-mode to regenerate a valid sidecar"],"exampleFix":"// before: corrupt sidecar blocks resolution\n{\"root_path\": \"/var/lib/beads\", \"log_path\": \n// after: remove or repair\nrm .beads/proxied_server_client_info.json\n# or: export BEADS_PROXIED_SERVER_ROOT_PATH=/var/lib/beads/shared-server/dolt","handlingStrategy":"validation","validationCode":"b, err := os.ReadFile(filepath.Join(beadsDir, \".beads\", \"proxied_server_client_info.json\"))\nif err == nil {\n\tvar v map[string]any\n\tif err := json.Unmarshal(b, &v); err != nil {\n\t\treturn fmt.Errorf(\"client info sidecar invalid: %v\", err)\n\t}\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Treat proxied_server_client_info.json as generated output; regenerate rather than repair by hand","Keep a pre-migration copy of .beads so a failed migration can be rolled back","Set BEADS_PROXIED_SERVER_ROOT_PATH in scripted environments to avoid sidecar parsing entirely","Ensure the bd process user can read every file in .beads"],"tags":["go","proxied-server","config","path-resolution"],"backgroundTag":"corrupt-client-info-sidecar","analyzedSha":"71377f276968b452ee607177637970a4ff888584","analyzedAt":"2026-08-30T18:55:39.744Z","schemaVersion":2},"datasetVersion":"2026-08-30T23:17:21.991Z"}