gastownhall/beads · error

newProxiedServerUOWProvider: resolve log path: %w

Error message

newProxiedServerUOWProvider: resolve log path: %w

What it means

newManagedProxiedServerUOWProvider resolves the proxied server log path (BEADS_PROXIED_SERVER_LOG env → proxied_server_client_info.json log_path → <root>/server.log) and wraps resolution failures with this message. As with root resolution, the primary failure mode is failing to load the client-info sidecar, which resolveProxiedServerLogPath reads unconditionally before falling back to defaults.

Source

Thrown at cmd/bd/uow_factory.go:503

		return nil, err
	}

	rootPath, err := resolveProxiedServerRootPath(beadsDir)
	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,

View on GitHub (pinned to 71377f2769)

Solutions

  1. Repair or delete .beads/proxied_server_client_info.json so resolution uses the default log location
  2. Export BEADS_PROXIED_SERVER_LOG to supply the log path without consulting the sidecar
  3. Fix read permissions on the sidecar for the user running bd
  4. Regenerate the sidecar with bd migrate-dolt-mode

Example fix

// before: unreadable sidecar
$ ls -l .beads/proxied_server_client_info.json  # owned by root, mode 0600
// after
sudo chown $USER .beads/proxied_server_client_info.json
# or: export BEADS_PROXIED_SERVER_LOG=$HOME/.beads/logs/server.log
Defensive patterns

Strategy: validation

Validate before calling

sidecar := filepath.Join(beadsDir, ".beads", "proxied_server_client_info.json")
if b, err := os.ReadFile(sidecar); err == nil {
	var v any
	if err := json.Unmarshal(b, &v); err != nil {
		return fmt.Errorf("unreadable sidecar %s: %v", sidecar, err)
	}
}

Prevention

When it happens

Trigger: LoadProxiedServerClientInfo fails (corrupt JSON, unreadable file) while the managed provider resolves the log path.

Common situations: Interrupted migration left a partial sidecar; permissions changed; sidecar edited by hand with syntax errors.

Related errors


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