{"record":{"id":"58fb6fb3eeb596ca","repo":"gastownhall/beads","slug":"newproxiedserveruowprovider-proxied-server-log-f","errorCode":null,"errorMessage":"newProxiedServerUOWProvider: proxied server log (from env or %s): %w","messagePattern":"newProxiedServerUOWProvider: proxied server log \\(from env or (.+?)\\): %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"cmd/bd/uow_factory.go","lineNumber":507,"sourceCode":"\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(\n\t\tctx,\n\t\trootPath,\n\t\ttopology.database,\n\t\tlogPath,\n\t\tconfigPath,\n\t\tproxy.BackendLocalServer,\n\t\t\"root\",\n\t\t\"\", // proxy is loopback-only, no auth\n\t\tdoltBin,\n\t\ttopology.proxyPort,\n\t\ttopology.proxyIdle,\n\t\ttopology.teamServer,\n\t\ttopology.expectedProjectID,\n\t\topts...,","sourceCodeStart":489,"sourceCodeEnd":525,"githubUrl":"https://github.com/gastownhall/beads/blob/71377f276968b452ee607177637970a4ff888584/cmd/bd/uow_factory.go#L489-L525","documentation":"After resolving a custom log path in the managed proxied server flow, bd validates it with validateProxiedServerLogPath and wraps failures with this error, naming proxied_server_client_info.json as the usual source of the custom path. The path must have an existing, directory parent, and if the log file exists it must be a regular file; anything else (missing parent, parent is a file, log path is a directory or special file, stat error other than NotExist) is rejected.","triggerScenarios":"Sidecar log_path or BEADS_PROXIED_SERVER_LOG names a path whose parent directory is absent or is itself a file; the log path exists as a directory/FIFO/socket; stat fails with EACCES or similar.","commonSituations":"Custom log path under a mount that is not mounted; log_path set to a directory by mistake; rotated log replaced by a directory; restrictive ACLs on the log directory.","solutions":["Ensure the parent directory exists: mkdir -p \"$(dirname <logpath>)\" and that it is a real directory","Check the target with ls -la; remove/rename if it is a directory or special file rather than a regular file","Unset BEADS_PROXIED_SERVER_LOG or remove log_path from .beads/proxied_server_client_info.json to use the default <root>/server.log","Fix permissions/ACLs so the bd user can stat the parent and log path"],"exampleFix":"// before: log_path is a directory\n{\"log_path\": \"/var/log/bd/server.log/\"}\n// after\n{\"log_path\": \"/var/log/bd/server.log\"}  # and ensure /var/log/bd exists","handlingStrategy":"validation","validationCode":"lp := os.Getenv(\"BEADS_PROXIED_SERVER_LOG\")\nif lp != \"\" {\n\tparent := filepath.Dir(lp)\n\tif fi, err := os.Stat(parent); err != nil || !fi.IsDir() {\n\t\treturn fmt.Errorf(\"parent %s of log %s must be an existing directory\", parent, lp)\n\t}\n\tif fi, err := os.Stat(lp); err == nil && !fi.Mode().IsRegular() {\n\t\treturn fmt.Errorf(\"log %s must be a regular file\", lp)\n\t}\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["mkdir -p the log directory before setting BEADS_PROXIED_SERVER_LOG","Never point log_path at directories, sockets, or FIFOs","Mount log volumes before services start, and check mounts in startup scripts","Keep custom log paths on filesystems the bd user can stat and write"],"tags":["go","proxied-server","log-path","validation"],"backgroundTag":"invalid-log-path","analyzedSha":"71377f276968b452ee607177637970a4ff888584","analyzedAt":"2026-08-30T18:55:39.744Z","schemaVersion":2},"datasetVersion":"2026-08-30T23:17:21.991Z"}