gastownhall/beads · error
uow: resolving server root dir: %w
Error message
uow: resolving server root dir: %w
What it means
The provider resolves serverRootDir to an absolute path with filepath.Abs before creating the server's working directory tree. This error wraps a failure of filepath.Abs itself. filepath.Abs only fails when the process cannot determine its current working directory (e.g. the cwd was deleted), so this error is rare and environmental rather than a config problem.
Source
Thrown at internal/storage/uow/external_doltserver_provider.go:47
expectedProjectID string,
opts ...ProviderOption,
) (UnitOfWorkProvider, error) {
if idleTimeout == 0 {
idleTimeout = defaultProxyIdleTimeout
}
if database == "" {
return nil, fmt.Errorf("uow: database name must not be empty (caller should default to %q)", "beads")
}
if rootUser == "" {
return nil, fmt.Errorf("uow: rootUser must not be empty")
}
if err := external.Validate(); err != nil {
return nil, fmt.Errorf("uow: external: %w", err)
}
absServerRootDir, err := filepath.Abs(serverRootDir)
if err != nil {
return nil, fmt.Errorf("uow: resolving server root dir: %w", err)
}
if err := os.MkdirAll(absServerRootDir, config.BeadsDirPerm); err != nil {
return nil, fmt.Errorf("uow: creating server root directory: %w", err)
}
tlsConfigName, err := registerExternalTLSConfig(external)
if err != nil {
return nil, fmt.Errorf("uow: external TLS: %w", err)
}
ep, err := proxy.GetCreateDatabaseProxyServerEndpoint(absServerRootDir, proxy.OpenOpts{
Backend: proxy.BackendExternal,
LogFilePath: serverLogFilePath,
External: external,
IdleTimeout: idleTimeout,
Port: proxyPort,
})View on GitHub (pinned to 71377f2769)
Solutions
- Pass an already-absolute path for serverRootDir so filepath.Abs does not need the cwd
- Ensure the process is started from a valid working directory (cd into an existing dir before launch)
- Inspect the wrapped error after "uow: resolving server root dir: " to confirm the underlying Getwd failure
Example fix
// before
provider, err := uow.NewExternalDoltServerUOWProvider(ctx, db, root, serverRootDir, external)
// after
absRoot, err := filepath.Abs(serverRootDir) // or use a hardcoded absolute path
if err != nil {
return err
}
provider, err := uow.NewExternalDoltServerUOWProvider(ctx, db, root, absRoot, external) Defensive patterns
Strategy: validation
Validate before calling
if _, err := os.Getwd(); err != nil {
// cwd unavailable: pass an absolute serverRootDir or chdir to a valid dir first
return fmt.Errorf("environment: working directory unavailable: %w", err)
}
if !filepath.IsAbs(serverRootDir) {
serverRootDir = filepath.Join(fallbackBaseDir, serverRootDir)
} Try / catch
provider, err := uow.NewExternalDoltServerUOWProvider(ctx, db, root, dir, ext)
if err != nil {
if strings.Contains(err.Error(), "resolving server root dir") {
return fmt.Errorf("environment: cannot resolve cwd; pass an absolute server root dir: %w", err)
}
return err
} Prevention
- Always pass absolute paths for serverRootDir, especially in daemons and tests
- Verify the working directory exists before launching long-running processes
- Recover from cwd-deletion in tests by chdir-ing to a fresh temp dir in setup
When it happens
Trigger: Calling NewExternalDoltServerUOWProvider when the process's current working directory no longer exists or os.Getwd() fails for permission/OS reasons.
Common situations: A test or daemon started in a temp directory that was later removed; running inside a container after its cwd was deleted; restrictive environments where Getwd fails.
Related errors
- uow: creating server root directory: %w
- uow: external: %w
- multiple .doltcfg directories detected
- dolt path is not executable
- resolve proxied server root: %w
AI-assisted analysis of gastownhall/beads@71377f2769 (2026-08-30).
Data as JSON: /api/errors/1ae6218d9534dc23.
Report an issue: GitHub.