gastownhall/beads · error
dolt.shared-server must be "true" or "false", got %q
Error message
dolt.shared-server must be "true" or "false", got %q
What it means
validateYamlConfigValue rejects a dolt.shared-server value that is not "true" or "false" (case-insensitive). The %q shows the rejected string. bd throws it because the key is stored as a string and later read as a strict boolean; anything else would silently misbehave.
Source
Thrown at internal/config/yaml_config.go:891
}
// validateYamlConfigValue validates a configuration value before setting.
// Returns an error if the value is invalid for the given key.
func validateYamlConfigValue(key, value string) error {
switch key {
case "hierarchy.max-depth":
// Must be a positive integer >= 1 (GH#995)
depth, err := strconv.Atoi(value)
if err != nil {
return fmt.Errorf("hierarchy.max-depth must be a positive integer, got %q", value)
}
if depth < 1 {
return fmt.Errorf("hierarchy.max-depth must be at least 1, got %d", depth)
}
case "dolt.shared-server":
lower := strings.ToLower(value)
if lower != "true" && lower != "false" {
return fmt.Errorf("dolt.shared-server must be \"true\" or \"false\", got %q", value)
}
case "dolt.debug":
lower := strings.ToLower(value)
if lower != "true" && lower != "false" {
return fmt.Errorf("dolt.debug must be \"true\" or \"false\", got %q", value)
}
case "dolt.mode":
lower := strings.ToLower(value)
if lower != "server" && lower != "embedded" {
return fmt.Errorf("dolt.mode must be \"server\" or \"embedded\", got %q", value)
}
case "prime.max-memories":
n, err := strconv.Atoi(value)
if err != nil {
return fmt.Errorf("prime.max-memories must be a non-negative integer (0 = unlimited), got %q", value)
}
if n < 0 {
return fmt.Errorf("prime.max-memories must be a non-negative integer (0 = unlimited), got %q", value)View on GitHub (pinned to 71377f2769)
Solutions
- Set an explicit boolean string: bd config set dolt.shared-server true (or false)
- Normalize yes/no and 1/0 to true/false in scripts before calling
- Trim whitespace and surrounding quotes from the value
- Note case-insensitivity: True/FALSE are accepted; 'yes'/'on' are not
Example fix
// before
SetYamlConfig("dolt.shared-server", "yes") // error
// after
SetYamlConfig("dolt.shared-server", "true") Defensive patterns
Strategy: validation
Validate before calling
l := strings.ToLower(strings.TrimSpace(v))
if l != "true" && l != "false" {
return fmt.Errorf("dolt.shared-server must be true or false, got %q", v)
} Type guard
func isBoolString(s string) bool {
switch strings.ToLower(strings.TrimSpace(s)) {
case "true", "false":
return true
}
return false
} Try / catch
if err := SetYamlConfig("dolt.shared-server", v); err != nil {
if strings.Contains(err.Error(), "dolt.shared-server must be") {
// normalize yes/1/on -> true, no/0/off -> false, retry
}
return err
} Prevention
- Normalize yes/no and 1/0 inputs to true/false before setting
- Trim whitespace and quotes from values coming from flags or env vars
- Prefer boolean-typed CLI flags that serialize to true/false
When it happens
Trigger: SetYamlConfig / SetYamlConfigInDir / SetUserYamlConfig with key "dolt.shared-server" and values like "yes", "1", "on", "TRUE " (trailing space), or empty string.
Common situations: Using YAML-style 'yes'/'no'; shell scripts passing 1/0; copy-pasting values with trailing whitespace or quotes from docs.
Related errors
- dolt.debug must be "true" or "false", got %q
- server: NewDoltServer: doltBinExec is required
- server: NewDoltServer: rootDir is required
- server: NewDoltServer: configPath is required
- hierarchy.max-depth must be a positive integer, got %q
AI-assisted analysis of gastownhall/beads@71377f2769 (2026-08-30).
Data as JSON: /api/errors/ad35723d2047b1b8.
Report an issue: GitHub.