{"record":{"id":"69cad119e8644b7d","repo":"gastownhall/beads","slug":"proxied-server-idle-timeout-must-be-0-never-or","errorCode":null,"errorMessage":"--proxied-server-idle-timeout must be 0 (never) or a positive duration, got %s","messagePattern":"--proxied-server-idle-timeout must be 0 \\(never\\) or a positive duration, got (.+?)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"cmd/bd/init.go","lineNumber":493,"sourceCode":"\t\t\t}\n\t\t\tif err := validateProxiedServerRootPath(serverRootPath); err != nil {\n\t\t\t\treturn fmt.Errorf(\"--proxied-server-root-path %v\", err)\n\t\t\t}\n\t\t}\n\t\tif serverProxyPort != 0 {\n\t\t\tif !initProxiedServer {\n\t\t\t\treturn fmt.Errorf(\"--proxied-server-port requires --proxied-server\")\n\t\t\t}\n\t\t\tif serverProxyPort < 1 || serverProxyPort > 65535 {\n\t\t\t\treturn fmt.Errorf(\"--proxied-server-port must be between 1 and 65535, got %d\", serverProxyPort)\n\t\t\t}\n\t\t}\n\t\tif idleTimeoutSet {\n\t\t\tif !initProxiedServer {\n\t\t\t\treturn fmt.Errorf(\"--proxied-server-idle-timeout requires --proxied-server\")\n\t\t\t}\n\t\t\tif serverProxyIdleTimeout < 0 {\n\t\t\t\treturn fmt.Errorf(\"--proxied-server-idle-timeout must be 0 (never) or a positive duration, got %s\", serverProxyIdleTimeout)\n\t\t\t}\n\t\t\tif serverProxyIdleTimeout == 0 {\n\t\t\t\tserverProxyIdleTimeout = proxy.IdleTimeoutNever\n\t\t\t}\n\t\t}\n\n\t\texternalProvided := externalHost != \"\" || externalPort != 0 || externalSocketPath != \"\" ||\n\t\t\texternalUser != \"\" ||\n\t\t\texternalTLS || externalTLSCACertPath != \"\" || externalTLSCertPath != \"\" || externalTLSKeyPath != \"\" ||\n\t\t\texternalTLSServerName != \"\" || externalTLSSkipVerify || externalKeepAlive != 0\n\t\tif externalProvided && !initProxiedServer {\n\t\t\treturn fmt.Errorf(\"--proxied-server-external-* flags require --proxied-server\")\n\t\t}\n\t\tif externalProvided && serverConfigPath != \"\" {\n\t\t\treturn fmt.Errorf(\"--proxied-server-external-* flags cannot be combined with --proxied-server-config-path (external mode has no managed dolt sql-server to configure)\")\n\t\t}\n\t\tif externalProvided && debugMode {\n\t\t\treturn fmt.Errorf(\"--debug cannot be combined with --proxied-server-external-* (debug applies to the managed dolt sql-server only)\")","sourceCodeStart":475,"sourceCodeEnd":511,"githubUrl":"https://github.com/gastownhall/beads/blob/71377f276968b452ee607177637970a4ff888584/cmd/bd/init.go#L475-L511","documentation":"The idle timeout must be either 0 (meaning \"never time out\", mapped internally to proxy.IdleTimeoutNever) or a positive duration. Negative durations are rejected because they have no valid semantics for a connection idle timeout (cmd/bd/init.go:492-497).","triggerScenarios":"Running `bd init --proxied-server --proxied-server-idle-timeout -30s` (or any negative Go duration) — the check is `serverProxyIdleTimeout < 0`.","commonSituations":"Sign errors or shell variable interpolation producing a negative value (e.g. `--idle-timeout $NEG_TIMEOUT`); misunderstanding that 0 means \"immediately\" when it actually means \"never\"; generated configs with sentinel -1 values.","solutions":["Use a positive duration like 30s, 5m, or 1h.","Use 0 explicitly if connections should never be idled out.","Fix the script/env var that computed the negative value."],"exampleFix":"// before\nbd init --proxied-server --proxied-server-idle-timeout -30s\n// after\nbd init --proxied-server --proxied-server-idle-timeout 5m   // or 0 for \"never\"","handlingStrategy":"validation","validationCode":"#!/usr/bin/env bash\n# parse Go duration and reject negatives\nif [[ \"$IDLE_TIMEOUT\" == -* ]]; then\n  echo \"idle timeout must be 0 (never) or positive, got $IDLE_TIMEOUT\" >&2; exit 2\nfi","typeGuard":"func validIdleTimeout(d time.Duration) bool { return d >= 0 }","tryCatchPattern":"if out, err := exec.Command(\"bd\", \"init\", args...).CombinedOutput(); err != nil {\n    if strings.Contains(string(out), \"must be 0 (never) or a positive duration\") {\n        // replace with positive duration or 0\n    }\n}","preventionTips":["Treat 0 as \"never\", not \"immediately\"; use positive durations otherwise.","Guard env-derived values against sign errors before passing them on the command line.","Avoid -1 style sentinels; use 0 for \"never\" per the flag's contract."],"tags":["cli","flag-validation","duration","timeout"],"backgroundTag":"invalid-flag-value","analyzedSha":"71377f276968b452ee607177637970a4ff888584","analyzedAt":"2026-08-30T18:55:39.744Z","schemaVersion":2},"datasetVersion":"2026-08-30T23:17:21.991Z"}