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

  1. Correct the setting name to one of the supported keys (exact spelling, camelCase).
  2. Check the UpdateAttributeViewKeyConfig switch statement (kernel/model/attribute_view_key_config.go:42-125) for the exact list of accepted settings.
  3. 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

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


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)