{"record":{"id":"8f053a7e5e7010fb","repo":"multica-ai/multica","slug":"unknown-config-key-q-supported-s","errorCode":null,"errorMessage":"unknown config key %q (supported: %s)","messagePattern":"unknown config key %q \\(supported: (.+?)\\)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"server/cmd/multica/cmd_config.go","lineNumber":252,"sourceCode":"\t\t}\n\tcase \"codex_handshake_timeout\":\n\t\tif err := assignPositiveDuration(&cfg.CodexHandshakeTimeout, key, value); err != nil {\n\t\t\treturn err\n\t\t}\n\tcase \"disable_auto_update\":\n\t\tif err := assignBool(&cfg.DisableAutoUpdate, key, value); err != nil {\n\t\t\treturn err\n\t\t}\n\tcase \"auto_update_check_interval\":\n\t\tif err := assignPositiveDuration(&cfg.AutoUpdateCheckInterval, key, value); err != nil {\n\t\t\treturn err\n\t\t}\n\tcase \"disable_auto_reload\":\n\t\tif err := assignBool(&cfg.DisableAutoReload, key, value); err != nil {\n\t\t\treturn err\n\t\t}\n\tdefault:\n\t\treturn fmt.Errorf(\"unknown config key %q (supported: %s)\", key, joinKeys(configSetSupportedKeys))\n\t}\n\treturn nil\n}\n\n// assignBool parses value as a strict bool into dst. Shared by the\n// disable_* toggles. Empty string clears the field (false).\nfunc assignBool(dst *bool, key, value string) error {\n\tif value == \"\" {\n\t\t*dst = false\n\t\treturn nil\n\t}\n\tb, err := strconv.ParseBool(value)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"%s must be 'true' or 'false' (got %q)\", key, value)\n\t}\n\t*dst = b\n\treturn nil\n}","sourceCodeStart":234,"sourceCodeEnd":270,"githubUrl":"https://github.com/multica-ai/multica/blob/2c0912b6ec764b373d44eeea1e80f0d9f11ab417/server/cmd/multica/cmd_config.go#L234-L270","documentation":"applyConfigSet is a closed switch over the supported config keys (server_url, app_url, workspace_id, device_name, runtime_name, workspaces_root, max_concurrent_tasks, poll_interval, heartbeat_interval, agent_timeout, codex_* timeouts, disable_* toggles, auto_update_check_interval, disable_auto_reload). Any other key hits the default branch; the message lists the supported set via joinKeys(configSetSupportedKeys).","triggerScenarios":"`multica config set timeout 30s` (key renamed to agent_timeout), `... poll-interval` (dash vs underscore), or a key from a newer/older CLI version than the running binary supports.","commonSituations":"Following outdated docs or a teammate's notes; version skew between the CLI binary and documentation; muscle-memory abbreviations of key names.","solutions":["Read the supported list in the error message and use the exact key (keys are snake_case).","Check `multica config show` to see current keys and `config set --help` for the authoritative list.","If the key should exist, upgrade the CLI binary — you may be on an older version."],"exampleFix":"# before\nmultica config set poll-interval 30s\n# after\nmultica config set poll_interval 30s","handlingStrategy":"validation","validationCode":"# validate the key against the supported set before setting\nSUPPORTED=\"server_url app_url workspace_id device_name runtime_name workspaces_root max_concurrent_tasks poll_interval heartbeat_interval agent_timeout codex_semantic_inactivity_timeout codex_handshake_timeout disable_auto_update auto_update_check_interval disable_auto_reload\"\necho \"$SUPPORTED\" | tr ' ' '\\n' | grep -qx \"$KEY\" || { echo \"unsupported key: $KEY\" >&2; exit 2; }\nmultica config set \"$KEY\" \"$VAL\"","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Run `multica config set --help` (or read the error's supported list) once per CLI upgrade and update scripts.","Prefer snake_case keys and never abbreviate; pin automation docs to the CLI version in use."],"tags":["cli","config","validation","versioning","go"],"backgroundTag":null,"analyzedSha":"2c0912b6ec764b373d44eeea1e80f0d9f11ab417","analyzedAt":"2026-08-15T13:25:18.241Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}