{"record":{"id":"a7a15babac45906f","repo":"siyuan-note/siyuan","slug":"unknown-field-setting-s","errorCode":null,"errorMessage":"unknown field setting: %s","messagePattern":"unknown field setting: (.+?)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"kernel/model/attribute_view_key_config.go","lineNumber":125,"sourceCode":"\t\t\tif av.KeyTypeSelect != key.Type && av.KeyTypeMSelect != key.Type {\n\t\t\t\treturn errors.New(\"option settings require a select or mSelect field\")\n\t\t\t}\n\t\t\treturn updateAttributeViewKeyOptions(attrView, key, op, setting, value)\n\t\tcase \"relation\":\n\t\t\treturn updateAttributeViewKeyRelation(key, op, value)\n\t\tcase \"rollup\":\n\t\t\treturn updateAttributeViewKeyRollup(attrView, key, op, value)\n\t\tcase \"relationFilters\", \"rollupFilters\":\n\t\t\tfilters, ok := value.([]any)\n\t\t\tif !ok {\n\t\t\t\treturn errors.New(\"filters must be an array\")\n\t\t\t}\n\t\t\tif err = validateAttributeViewKeyFilters(attrView, key, setting, filters); nil != err {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\treturn setAttrViewColFilters(avID, \"\", keyID, filters, \"relationFilters\" == setting)\n\t\tdefault:\n\t\t\treturn fmt.Errorf(\"unknown field setting: %s\", setting)\n\t\t}\n\t}\n\treturn\n}\n\nfunc validateAttributeViewKeyFilters(attrView *av.AttributeView, key *av.Key, setting string, value []any) error {\n\trelationKey := key\n\tif \"rollupFilters\" == setting {\n\t\tif av.KeyTypeRollup != key.Type || nil == key.Rollup {\n\t\t\treturn errors.New(\"rollupFilters requires a configured rollup field\")\n\t\t}\n\t\tvar err error\n\t\trelationKey, err = attrView.GetKey(key.Rollup.RelationKeyID)\n\t\tif nil != err {\n\t\t\treturn err\n\t\t}\n\t}\n\tif av.KeyTypeRelation != relationKey.Type || nil == relationKey.Relation {","sourceCodeStart":107,"sourceCodeEnd":143,"githubUrl":"https://github.com/siyuan-note/siyuan/blob/9f775e8a12daef8255556097396f9b2739078892/kernel/model/attribute_view_key_config.go#L107-L143","documentation":"UpdateAttributeViewKeyConfig accepts a fixed set of setting names (name, type, icon, desc, numberFormat, dateFormat, template, renderTemplate, autoFillNow, fillSpecificTime, includeTime, options, optionUpdate, optionRemove, relation, rollup, relationFilters, rollupFilters). Any other key in the one-entry config map hits the default branch and returns 'unknown field setting: <key>'.","triggerScenarios":"Calling UpdateAttributeViewKeyConfig with a misspelled or unsupported setting, e.g. {\"numberformet\": \"commas\"}, {\"filter\": [...]}, or {\"values\": [...]}.","commonSituations":"Typos or camelCase variations in hand-written clients; APIs guessed from older kernel versions whose setting names changed; copying settings from a different API (e.g. view filter config) that uses different keys.","solutions":["Correct the setting name to one of the supported keys (exact spelling, camelCase).","Check the UpdateAttributeViewKeyConfig switch statement (kernel/model/attribute_view_key_config.go:42-125) for the exact list of accepted settings.","Ensure the config map contains exactly one setting per call, and split multiple changes into separate calls."],"exampleFix":"// before\nUpdateAttributeViewKeyConfig(avID, keyID, {\"numberformet\": \"commas\"})\n// after\nUpdateAttributeViewKeyConfig(avID, keyID, {\"numberFormat\": \"commas\"})","handlingStrategy":"validation","validationCode":"// JS: whitelist of accepted settings\nconst SETTINGS = [\"name\",\"type\",\"icon\",\"desc\",\"numberFormat\",\"dateFormat\",\"template\",\"renderTemplate\",\"autoFillNow\",\"fillSpecificTime\",\"includeTime\",\"options\",\"optionUpdate\",\"optionRemove\",\"relation\",\"rollup\",\"relationFilters\",\"rollupFilters\"];\nif (!SETTINGS.includes(setting)) throw new Error(\"unknown field setting: \" + setting);","typeGuard":"null","tryCatchPattern":"try { await updateKeyConfig(avID, keyID, cfg); } catch (e) { if (String(e).startsWith(\"unknown field setting\")) { console.error(\"Bad setting key:\", Object.keys(cfg)[0]); } throw e; }","preventionTips":["Copy setting names from the switch in kernel/model/attribute_view_key_config.go:42-125","Send exactly one setting per call","Use a shared constant/enum for setting names instead of inline strings"],"tags":["attribute-view","unknown-key","validation"],"backgroundTag":"invalid-argument-value","analyzedSha":"9f775e8a12daef8255556097396f9b2739078892","analyzedAt":"2026-09-19T03:17:15.984Z","contentChangedAt":"2026-09-19T03:17:15.984Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}