{"record":{"id":"e012312d66b7663b","repo":"wavetermdev/waveterm","slug":"invalid-config-key-s","errorCode":null,"errorMessage":"invalid config key: %s","messagePattern":"invalid config key: (.+?)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/wconfig/settingsconfig.go","lineNumber":856,"sourceCode":"\t}\n\tif reflect.String == ctype.Kind() {\n\t\treturn num.String(), nil\n\t}\n\treturn nil, fmt.Errorf(\"cannot convert number to %s\", ctype)\n}\n\nfunc SetBaseConfigValue(toMerge waveobj.MetaMapType) error {\n\tm, cerrs := ReadWaveHomeConfigFile(SettingsFile)\n\tif len(cerrs) > 0 {\n\t\treturn fmt.Errorf(\"error reading config file: %v\", cerrs[0])\n\t}\n\tif m == nil {\n\t\tm = make(waveobj.MetaMapType)\n\t}\n\tfor configKey, val := range toMerge {\n\t\tctype := getConfigKeyType(configKey)\n\t\tif ctype == nil {\n\t\t\treturn fmt.Errorf(\"invalid config key: %s\", configKey)\n\t\t}\n\t\tif val == nil {\n\t\t\tdelete(m, configKey)\n\t\t} else {\n\t\t\trtype := reflect.TypeOf(val)\n\t\t\tif rtype == reflect.TypeOf(dummyNumber) {\n\t\t\t\tconvertedVal, err := convertJsonNumber(val.(json.Number), ctype)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn fmt.Errorf(\"cannot convert %s: %v\", configKey, err)\n\t\t\t\t}\n\t\t\t\tval = convertedVal\n\t\t\t\trtype = reflect.TypeOf(val)\n\t\t\t}\n\t\t\tif rtype != ctype {\n\t\t\t\tif ctype == reflect.PointerTo(rtype) {\n\t\t\t\t\tm[configKey] = &val\n\t\t\t\t} else {\n\t\t\t\t\treturn fmt.Errorf(\"invalid value type for %s: %T\", configKey, val)","sourceCodeStart":838,"sourceCodeEnd":874,"githubUrl":"https://github.com/wavetermdev/waveterm/blob/a4447c1563b2df285ab89e76c82f91e1a1a49c1e/pkg/wconfig/settingsconfig.go#L838-L874","documentation":"SetBaseConfigValue rejects config keys that are not present in the known config key type registry: getConfigKeyType returns nil and the function returns 'invalid config key: %s'. Wave only accepts keys declared in its meta-constant schema.","triggerScenarios":"Calling SetBaseConfigValue with a MetaMapType containing a key not in the settings schema — misspelled keys, wrong prefix ('app:' vs 'term:'), or keys introduced in newer/older Wave versions.","commonSituations":"Typos like 'term:fontsize' vs the real key name; copying config from documentation for a different version; invented keys that were never registered.","solutions":["Check the exact key name against the generated settings meta constants (wconfig) or docs","Verify the key's domain prefix is correct (app:, term:, editor:, etc.)","If the key exists in a newer Wave version, upgrade the dependency/app"],"exampleFix":"// before\nwconfig.SetBaseConfigValue(waveobj.MetaMapType{\"term:fontsz\": 14})\n// after\nwconfig.SetBaseConfigValue(waveobj.MetaMapType{\"term:fontsize\": 14})","handlingStrategy":"validation","validationCode":"// check against generated valid keys before setting\nvalidKeys := wconfig.GetAllConfigKeys() // or generated map\nif _, ok := validKeys[key]; !ok {\n    return fmt.Errorf(\"unknown config key %q\", key)\n}","typeGuard":null,"tryCatchPattern":"if err := wconfig.SetBaseConfigValue(m); err != nil {\n    if strings.Contains(err.Error(), \"invalid config key\") {\n        return fmt.Errorf(\"check key spelling/prefix against docs: %w\", err)\n    }\n    return err\n}","preventionTips":["Copy key names from the generated meta constants, never by hand","Double-check the domain prefix (app:, term:, editor:)","Keep the Wave version in sync with documentation you follow"],"tags":["config","invalid-key","validation","settings","go"],"backgroundTag":"invalid-config-key","analyzedSha":"a4447c1563b2df285ab89e76c82f91e1a1a49c1e","analyzedAt":"2026-09-01T15:26:23.972Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T15:18:49.778Z"}