siyuan-note/siyuan · error
invalid new item template field value mode [%s]
Error message
invalid new item template field value mode [%s]
What it means
fieldValue.Mode is neither NewItemFieldValueCurrentTime nor NewItemFieldValueStatic. An empty Mode is silently defaulted to Static (new_item_template.go:319), so this branch only fires for an explicit, unrecognized mode string — typically a value from a newer or typo'd client.
Source
Thrown at kernel/av/new_item_template.go:344
}
fieldValue.Value = nil
case NewItemFieldValueStatic:
if nil == fieldValue.Value {
continue
}
fieldValue.Value, err = normalizeNewItemTemplateValue(fieldValue.Value, key)
if nil != err {
return fmt.Errorf("new item template field [%s] value is invalid: %w", keyID, err)
}
if KeyTypeSelect == key.Type || KeyTypeMSelect == key.Type {
for _, selection := range fieldValue.Value.MSelect {
if nil != selection && nil == key.GetOption(selection.Content) {
return fmt.Errorf("new item template field [%s] option [%s] not found", keyID, selection.Content)
}
}
}
default:
return fmt.Errorf("invalid new item template field value mode [%s]", fieldValue.Mode)
}
fieldValues[keyID] = fieldValue
}
if 0 == len(fieldValues) {
itemTemplate.FieldValues = nil
} else {
itemTemplate.FieldValues = fieldValues
}
return nil
}
func normalizeNewItemTemplateValue(value *Value, key *Key) (*Value, error) {
value = value.Clone()
switch key.Type {
case KeyTypeText:
if nil == value.Text {
return nil, errors.New("text value is missing")
}View on GitHub (pinned to 251596fc0d)
Solutions
- Send one of the two canonical mode constants defined in the av package.
- Leave Mode empty ("") if you want the default Static behavior.
- Upgrade the kernel if a newer mode is required.
Example fix
// before
FieldValues["k"] = &av.NewItemFieldValue{Mode: "auto"}
// after
FieldValues["k"] = &av.NewItemFieldValue{Mode: av.NewItemFieldValueStatic} Defensive patterns
Strategy: type-guard
Type guard
func isValidFieldValueMode(m string) bool {
return m == "" || m == av.NewItemFieldValueStatic || m == av.NewItemFieldValueCurrentTime
} Prevention
- Reference the av package mode constants, never literals.
- Leave Mode empty ("") to get the Static default.
- Upgrade the kernel if a newer mode is required.
When it happens
Trigger: Client sends a future mode value the running kernel does not recognize; a typo in the mode string; corrupted payload or version skew.
Common situations: Version skew after a new mode is added on the client but the kernel is not upgraded; manually authored JSON with a wrong mode literal.
Related errors
- invalid new item template target type [%s]
- new item template field [%s] current time mode requires date
- new item templates config is nil
- new item template name is empty
- invalid new item template id [%s]
AI-assisted analysis of siyuan-note/siyuan@251596fc0d (2026-08-12).
Data as JSON: /api/errors/2c6b54ba06e5bba1.
Report an issue: GitHub.