{"record":{"id":"5e03f2d673ee7d87","repo":"multica-ai/multica","slug":"max-concurrent-tasks-must-be-an-integer-w","errorCode":null,"errorMessage":"max_concurrent_tasks must be an integer: %w","messagePattern":"max_concurrent_tasks must be an integer: %w","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"server/cmd/multica/cmd_config.go","lineNumber":183,"sourceCode":"\tcase \"workspaces_root\":\n\t\tvalue = strings.TrimSpace(value)\n\t\tif value == \"\" {\n\t\t\tcfg.WorkspacesRoot = \"\"\n\t\t\treturn nil\n\t\t}\n\t\troot, err := filepath.Abs(value)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"resolve workspaces_root: %w\", err)\n\t\t}\n\t\tcfg.WorkspacesRoot = root\n\tcase \"max_concurrent_tasks\":\n\t\tif value == \"\" {\n\t\t\tcfg.MaxConcurrentTasks = 0\n\t\t\treturn nil\n\t\t}\n\t\tn, err := strconv.Atoi(value)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"max_concurrent_tasks must be an integer: %w\", err)\n\t\t}\n\t\tif n < 0 {\n\t\t\treturn fmt.Errorf(\"max_concurrent_tasks must be >= 0 (got %d)\", n)\n\t\t}\n\t\tcfg.MaxConcurrentTasks = n\n\tcase \"poll_interval\":\n\t\tif value == \"\" {\n\t\t\tcfg.PollInterval = \"\"\n\t\t\treturn nil\n\t\t}\n\t\td, err := time.ParseDuration(value)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"poll_interval must be a Go duration (e.g. 10s, 500ms): %w\", err)\n\t\t}\n\t\t// Reject zero and negative durations. Persisting \"0s\" would look\n\t\t// configured in `config show` but be silently ignored at daemon\n\t\t// start (the resolver only substitutes strictly positive values),\n\t\t// which is exactly the trap reported in #3824's review. Empty","sourceCodeStart":165,"sourceCodeEnd":201,"githubUrl":"https://github.com/multica-ai/multica/blob/2c0912b6ec764b373d44eeea1e80f0d9f11ab417/server/cmd/multica/cmd_config.go#L165-L201","documentation":"applyConfigSet parses the max_concurrent_tasks value with strconv.Atoi and rejects anything that is not a plain base-10 integer. Empty string is handled earlier as 'clear the field', so this error means a non-empty, non-integer value was supplied.","triggerScenarios":"`multica config set max_concurrent_tasks 4.0`, `... 2,5` (locale thousands separator), `... \"5 \"` with stray characters, or `0x10`.","commonSituations":"Floating-point values like 2.5 copied from docs or plans; locale-formatted numbers pasted from spreadsheets; trailing whitespace/newlines from echo in scripts.","solutions":["Use a plain integer: `multica config set max_concurrent_tasks 4`.","Strip whitespace/separators when generating the value in scripts (e.g. printf '%d' in shell).","To unset, pass an empty string: `multica config set max_concurrent_tasks \"\"`."],"exampleFix":"# before\nmultica config set max_concurrent_tasks 2.5\n# after\nmultica config set max_concurrent_tasks 3","handlingStrategy":"validation","validationCode":"# shell: validate integer shape before config set\n[[ \"$VAL\" =~ ^-?[0-9]+$ ]] || { echo \"max_concurrent_tasks must be an integer\" >&2; exit 2; }\nmultica config set max_concurrent_tasks \"$VAL\"","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Generate the value with printf '%d' rather than echo to avoid stray output.","Round or truncate floats upstream: printf '%.0f' 2.5 -> 2 (or reject)."],"tags":["cli","config","validation","go"],"backgroundTag":null,"analyzedSha":"2c0912b6ec764b373d44eeea1e80f0d9f11ab417","analyzedAt":"2026-08-15T13:25:18.241Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}