gastownhall/beads · error

newProxiedServerUOWProvider: proxied server log (from env or

Error message

newProxiedServerUOWProvider: proxied server log (from env or %s): %w

What it means

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.

Source

Thrown at cmd/bd/uow_factory.go:507

	if err != nil {
		return nil, fmt.Errorf("newProxiedServerUOWProvider: resolve root path: %w", err)
	}
	if err := validateProxiedServerRootPath(rootPath); err != nil {
		return nil, fmt.Errorf("newProxiedServerUOWProvider: proxied server root (from env or %s): %w", configfile.ProxiedServerClientInfoFileName, err)
	}

	configPath, err := ensureProxiedServerConfig(beadsDir)
	if err != nil {
		return nil, err
	}

	logPath, isCustomLog, err := resolveProxiedServerLogPath(beadsDir)
	if err != nil {
		return nil, fmt.Errorf("newProxiedServerUOWProvider: resolve log path: %w", err)
	}
	if isCustomLog {
		if err := validateProxiedServerLogPath(logPath); err != nil {
			return nil, fmt.Errorf("newProxiedServerUOWProvider: proxied server log (from env or %s): %w", configfile.ProxiedServerClientInfoFileName, err)
		}
	}

	return uow.NewDoltServerUOWProvider(
		ctx,
		rootPath,
		topology.database,
		logPath,
		configPath,
		proxy.BackendLocalServer,
		"root",
		"", // proxy is loopback-only, no auth
		doltBin,
		topology.proxyPort,
		topology.proxyIdle,
		topology.teamServer,
		topology.expectedProjectID,
		opts...,

View on GitHub (pinned to 71377f2769)

Solutions

  1. Ensure the parent directory exists: mkdir -p "$(dirname <logpath>)" and that it is a real directory
  2. Check the target with ls -la; remove/rename if it is a directory or special file rather than a regular file
  3. Unset BEADS_PROXIED_SERVER_LOG or remove log_path from .beads/proxied_server_client_info.json to use the default <root>/server.log
  4. Fix permissions/ACLs so the bd user can stat the parent and log path

Example fix

// before: log_path is a directory
{"log_path": "/var/log/bd/server.log/"}
// after
{"log_path": "/var/log/bd/server.log"}  # and ensure /var/log/bd exists
Defensive patterns

Strategy: validation

Validate before calling

lp := os.Getenv("BEADS_PROXIED_SERVER_LOG")
if lp != "" {
	parent := filepath.Dir(lp)
	if fi, err := os.Stat(parent); err != nil || !fi.IsDir() {
		return fmt.Errorf("parent %s of log %s must be an existing directory", parent, lp)
	}
	if fi, err := os.Stat(lp); err == nil && !fi.Mode().IsRegular() {
		return fmt.Errorf("log %s must be a regular file", lp)
	}
}

Prevention

When it happens

Trigger: 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.

Common situations: 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.

Related errors


AI-assisted analysis of gastownhall/beads@71377f2769 (2026-08-30). Data as JSON: /api/errors/58fb6fb3eeb596ca. Report an issue: GitHub.