gastownhall/beads · error
server: NewDoltServer: failed to determine absolute path of
Error message
server: NewDoltServer: failed to determine absolute path of configPath
What it means
NewDoltServer resolves configPath (the dolt sql-server YAML config) to an absolute path before parsing it and passing it to the child process. filepath.Abs fails only when the process cwd cannot be determined (deleted cwd or getwd failure) and configPath was relative.
Source
Thrown at internal/storage/dbproxy/server/doltserver.go:83
return nil, errors.New("server: NewDoltServer: doltBinExec is required")
}
if rootDir == "" {
return nil, errors.New("server: NewDoltServer: rootDir is required")
}
if configPath == "" {
return nil, errors.New("server: NewDoltServer: configPath is required")
}
absDoltBinExec, err := filepath.Abs(doltBinExec)
if err != nil {
return nil, errors.New("server: NewDoltServer: failed to determine absolute path of doltBinExec")
}
absRootDir, err := filepath.Abs(rootDir)
if err != nil {
return nil, errors.New("server: NewDoltServer: failed to determine absolute path of rootDir")
}
absConfigPath, err := filepath.Abs(configPath)
if err != nil {
return nil, errors.New("server: NewDoltServer: failed to determine absolute path of configPath")
}
cfg, err := servercfg.YamlConfigFromFile(filesys.LocalFS, configPath)
if err != nil {
return nil, fmt.Errorf("server: NewDoltServer: parse config %q: %w", configPath, err)
}
var logFile *os.File
if logFilePath != "" {
absLogFilePath, err := filepath.Abs(logFilePath)
if err != nil {
return nil, errors.New("server: NewDoltServer: failed to determine absolute path of logFilePath")
}
logFile, err = os.OpenFile(absLogFilePath, os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0o600) //nolint:gosec // logFilePath is caller-derived, not user-request input
if err != nil {
return nil, fmt.Errorf("server: NewDoltServer: open log %q: %w", logFilePath, err)
}
}
if keepAlivePeriod == 0 {
keepAlivePeriod = defaultKeepAlivePeriodView on GitHub (pinned to 71377f2769)
Solutions
- Pass an absolute configPath, resolved at process startup while the cwd is valid
- Check whether the process cwd is deleted (ls /proc/<pid>/cwd) and restart from a valid directory if so
- Recreate the deleted working directory, then retry the operation
Example fix
// before
srv, err := server.NewDoltServer(bin, root, ".beads/server.yaml", logPath, 0, db)
// after
absCfg, err := filepath.Abs(".beads/server.yaml")
if err != nil { return err }
srv, err := server.NewDoltServer(bin, root, absCfg, logPath, 0, db) Defensive patterns
Strategy: validation
Validate before calling
cfg, err := filepath.Abs(configPath)
if err != nil { return fmt.Errorf("cannot resolve config path (cwd invalid?): %w", err) }
if _, err := os.Stat(cfg); err != nil { return fmt.Errorf("server config not found at %s: %w", cfg, err) } Prevention
- Resolve configPath to absolute at startup and pass the absolute value everywhere
- Check config file existence before calling NewDoltServer to get a clearer error
- Avoid launching services from ephemeral directories subject to cleanup
When it happens
Trigger: Calling NewDoltServer with a relative configPath (e.g. ".beads/server.yaml") after the process working directory has been deleted or getwd fails. Note the very next step parses the config from the original relative path, so an unreadable file surfaces as a different 'parse config' error instead.
Common situations: Long-running processes whose cwd was removed (tmp cleanup, CI teardown); launching from a shell in a directory that was subsequently deleted; chroot/container setups with erased working directories.
Related errors
- server: NewDoltServer: failed to determine absolute path of
- server: NewDoltServer: failed to determine absolute path of
- server: NewDoltServer: failed to determine absolute path of
- invalid workspace path: %w
- writing port file: %w
AI-assisted analysis of gastownhall/beads@71377f2769 (2026-08-30).
Data as JSON: /api/errors/9fcb2b5aac04f435.
Report an issue: GitHub.