{"record":{"id":"0435f9b4ede6e2bd","repo":"gastownhall/beads","slug":"newproxiedserveruowprovider-proxied-server-root","errorCode":null,"errorMessage":"newProxiedServerUOWProvider: proxied server root (from env or %s): %w","messagePattern":"newProxiedServerUOWProvider: proxied server root \\(from env or (.+?)\\): %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"cmd/bd/uow_factory.go","lineNumber":493,"sourceCode":"\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}\n\t}\n\n\treturn uow.NewDoltServerUOWProvider(","sourceCodeStart":475,"sourceCodeEnd":511,"githubUrl":"https://github.com/gastownhall/beads/blob/71377f276968b452ee607177637970a4ff888584/cmd/bd/uow_factory.go#L475-L511","documentation":"In the managed proxied server path, after resolving the root, bd validates it with validateProxiedServerRootPath and wraps failures with this error. Validation passes only when the path does not exist yet, or exists as a directory; it fails when the root exists but is not a directory (regular file, symlink-to-file, socket) or when os.Stat returns a non-NotExist error (e.g. permission denied on a parent). The message mentions proxied_server_client_info.json because that sidecar commonly supplies the root path.","triggerScenarios":"Sidecar root_path or BEADS_PROXIED_SERVER_ROOT_PATH points at an existing non-directory; stat fails with EACCES/EBUSY etc. on the path or a parent.","commonSituations":"A file was placed where the shared-server Dolt root should live; stale sidecar from a previous machine layout; backup restore replaced the directory with a file; permission changes on ~/.beads.","solutions":["ls -la the resolved root path; if it is a file, remove or move it so the directory can exist","Correct BEADS_PROXIED_SERVER_ROOT_PATH or the sidecar's root_path to a real (or creatable) directory","Restore traversal permissions on parent directories (chmod +x on each ancestor for the running user)","Delete the stale sidecar to fall back to the default Dolt data dir"],"exampleFix":"// before: sidecar root_path points at a file\n{\"root_path\": \"/var/lib/beads/old-server.tar\"}\n// after\n{\"root_path\": \"/var/lib/beads/shared-server/dolt\"}","handlingStrategy":"validation","validationCode":"root := os.Getenv(\"BEADS_PROXIED_SERVER_ROOT_PATH\")\nif root == \"\" {\n\troot = \"<path from sidecar>\"\n}\nif fi, err := os.Stat(root); err == nil && !fi.IsDir() {\n\treturn fmt.Errorf(\"root %s exists and is not a directory\", root)\n} else if err != nil && !os.IsNotExist(err) {\n\treturn fmt.Errorf(\"cannot stat root %s: %v\", root, err)\n}","typeGuard":"func usableRoot(path string) bool {\n\tfi, err := os.Stat(path)\n\treturn err == nil && fi.IsDir() || os.IsNotExist(err)\n}","tryCatchPattern":null,"preventionTips":["Confirm the resolved root is a directory after restores, copies, or machine migrations","Delete stale sidecars when moving workspaces between machines","Keep ancestor directories (home, .beads) traversable (o+x) for the runtime user","Use bd migrate-dolt-mode for all root relocation instead of manual edits"],"tags":["go","proxied-server","path-validation"],"backgroundTag":"invalid-server-root-path","analyzedSha":"71377f276968b452ee607177637970a4ff888584","analyzedAt":"2026-08-30T18:55:39.744Z","schemaVersion":2},"datasetVersion":"2026-08-30T23:17:21.991Z"}