siyuan-note/siyuan · error
unknown field setting
Error message
unknown field setting: %s
What it means
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>'.
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.
Example fix
// before
UpdateAttributeViewKeyConfig(avID, keyID, {"numberformet": "commas"})
// after
UpdateAttributeViewKeyConfig(avID, keyID, {"numberFormat": "commas"}) Defensive patterns
Strategy: validation
Validate before calling
// JS: whitelist of accepted settings
const SETTINGS = ["name","type","icon","desc","numberFormat","dateFormat","template","renderTemplate","autoFillNow","fillSpecificTime","includeTime","options","optionUpdate","optionRemove","relation","rollup","relationFilters","rollupFilters"];
if (!SETTINGS.includes(setting)) throw new Error("unknown field setting: " + setting); Type guard
null
Try / catch
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; } Prevention
- 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
When it happens
Trigger: Calling UpdateAttributeViewKeyConfig with a misspelled or unsupported setting, e.g. {"numberformet": "commas"}, {"filter": [...]}, or {"values": [...]}.
Common situations: 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.
Understand the failure class
Background: "Must be a positive integer", "Invalid value", "Unsupported": the invalid-argument-value error family, when a library rejects the value you pass — this error's family across 35 libraries.
Related errors
- at least one visible view is required
- attribute view custom color index
- attribute view custom color must not be null
- attribute view custom colors count exceeds the
- attribute view custom colors must not be empty
AI-assisted analysis of siyuan-note/siyuan@9f775e8a12 (2026-09-19).
Data as JSON: /api/errors/a7a15babac45906f.
Report an issue: GitHub.
Appendix: source
Thrown at kernel/model/attribute_view_key_config.go:125
if av.KeyTypeSelect != key.Type && av.KeyTypeMSelect != key.Type {
return errors.New("option settings require a select or mSelect field")
}
return updateAttributeViewKeyOptions(attrView, key, op, setting, value)
case "relation":
return updateAttributeViewKeyRelation(key, op, value)
case "rollup":
return updateAttributeViewKeyRollup(attrView, key, op, value)
case "relationFilters", "rollupFilters":
filters, ok := value.([]any)
if !ok {
return errors.New("filters must be an array")
}
if err = validateAttributeViewKeyFilters(attrView, key, setting, filters); nil != err {
return err
}
return setAttrViewColFilters(avID, "", keyID, filters, "relationFilters" == setting)
default:
return fmt.Errorf("unknown field setting: %s", setting)
}
}
return
}
func validateAttributeViewKeyFilters(attrView *av.AttributeView, key *av.Key, setting string, value []any) error {
relationKey := key
if "rollupFilters" == setting {
if av.KeyTypeRollup != key.Type || nil == key.Rollup {
return errors.New("rollupFilters requires a configured rollup field")
}
var err error
relationKey, err = attrView.GetKey(key.Rollup.RelationKeyID)
if nil != err {
return err
}
}
if av.KeyTypeRelation != relationKey.Type || nil == relationKey.Relation {View on GitHub (pinned to 9f775e8a12)