siyuan-note/siyuan · error
invalid new item template field value mode
Error message
invalid new item template field value mode [%s]
What it means
Field value modes are restricted to the known constants NewItemFieldValueStatic and NewItemFieldValueCurrentTime. Any other Mode string falls into the switch's default branch and rejects the configuration, because the template engine cannot interpret an unknown fill mode.
Solutions
- Set Mode to av.NewItemFieldValueStatic for fixed pre-filled values
- Set Mode to av.NewItemFieldValueCurrentTime (date fields only) for creation timestamps
- Leave Mode as empty string if unsure — it defaults to static automatically
Example fix
// before fv.Mode = "now" err := av.SetNewItemTemplates(config) // after fv.Mode = av.NewItemFieldValueCurrentTime err := av.SetNewItemTemplates(config)
Defensive patterns
Strategy: validation
Validate before calling
if fv.Mode != av.NewItemFieldValueStatic && fv.Mode != av.NewItemFieldValueCurrentTime && fv.Mode != "" {
return fmt.Errorf("unsupported mode %q", fv.Mode)
} Prevention
- Use only the exported NewItemFieldValue* constants
- Leave Mode empty to get the static default instead of inventing values
When it happens
Trigger: Calling SetNewItemTemplates with FieldValues[keyID].Mode set to an unrecognized string (typo, empty handled separately by defaulting to static — so this requires an explicit unknown value such as "now" or "formula").
Common situations: Plugins inventing custom fill modes not supported by the kernel; configs written by a newer/older version using modes that no longer exist; hand-editing persisted JSON with a misspelled mode.
Understand the failure class
Background: Invalid enum value errors: "Unknown type", "Invalid scope", "must be one of" — when a string is not on the library's allowed list — this error's family across 23 libraries.
Related errors
- ErrInvalidColumnAlign
- invalid card aspect ratio preset
- invalid card layout [ ]
- invalid card size preset
- invalid new item template target type
AI-assisted analysis of siyuan-note/siyuan@9f775e8a12 (2026-09-19).
Data as JSON: /api/errors/2c6b54ba06e5bba1.
Report an issue: GitHub.
Appendix: 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 9f775e8a12)