siyuan-note/siyuan · error
new item template field
Error message
new item template field [%s] value mode is invalid
What it means
resolveNewItemFieldValues supports only two value modes: NewItemFieldValueCurrentTime and NewItemFieldValueStatic. A FieldValues entry with any other Mode value (including 0/zero-value when the mode was never set) falls into the default branch and returns this error. It guards against unknown or unset mode enums in template configuration.
Solutions
- Set Mode explicitly to av.NewItemFieldValueStatic or av.NewItemFieldValueCurrentValue on every FieldValues entry
- Upgrade the kernel if the template was produced by a newer version introducing a new mode
- Regenerate the template through the UI instead of hand-editing the .av JSON
Example fix
// before
&av.NewItemFieldValue{Value: av.NewValueText("x")} // Mode unset
// after
&av.NewItemFieldValue{Mode: av.NewItemFieldValueStatic, Value: av.NewValueText("x")} Defensive patterns
Strategy: validation
Validate before calling
switch fv.Mode {
case av.NewItemFieldValueCurrentTime, av.NewItemFieldValueStatic:
// ok
default:
return fmt.Errorf("unsupported field value mode for %s", keyID)
} Prevention
- Set Mode explicitly on every FieldValues entry; never rely on the zero value
- Regenerate templates via the UI instead of hand-editing JSON
- Keep kernel and clients on compatible versions so mode enums match
When it happens
Trigger: createAttributeViewItem with a template FieldValues entry whose Mode is an unrecognized integer — typically omitted Mode (zero value) in hand-written or older template JSON, or a mode added in a newer version and read by an older kernel.
Common situations: Template JSON authored by hand or by a plugin that forgot to set Mode; forward-compatibility issue where a newer client wrote a mode value this kernel version does not know; copy-paste between template definitions losing the Mode field.
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
- invalid create attribute view item documents save mode
- bind attribute view item
- clone attribute view item failed
- clone attribute view item
- invalid card cover source
AI-assisted analysis of siyuan-note/siyuan@9f775e8a12 (2026-09-19).
Data as JSON: /api/errors/aa2aaaee68018111.
Report an issue: GitHub.
Appendix: source
Thrown at kernel/model/attribute_view_new_item.go:611
}
isNotTime := true
if nil != key.Date {
isNotTime = !key.Date.FillSpecificTime
}
value = &av.Value{Type: av.KeyTypeDate, Date: av.NewFormattedValueDate(createdAt.UnixMilli(), 0, av.DateFormatNone, isNotTime, false)}
case av.NewItemFieldValueStatic:
if nil == fieldValue.Value || fieldValue.Value.Type != key.Type {
return nil, fmt.Errorf("new item template field [%s] value is invalid", keyID)
}
value = fieldValue.Value.Clone()
if av.KeyTypeRelation == key.Type {
filterNewItemTemplateRelationValue(attrView, key, value, carrierBoxID)
if nil == value.Relation || 0 == len(value.Relation.BlockIDs) {
continue
}
}
default:
return nil, fmt.Errorf("new item template field [%s] value mode is invalid", keyID)
}
ret[keyID] = value
}
return
}
func filterNewItemTemplateRelationValue(attrView *av.AttributeView, key *av.Key, value *av.Value,
carrierBoxID string) {
if nil == key.Relation || nil == value.Relation {
return
}
targetAv := attrView
if key.Relation.AvID != attrView.ID {
contextFilter := &av.AttributeViewContextFilter{
Spec: av.AttributeViewContextFilterSpec, KeyID: key.ID,
}
targetAv, _ = resolveAttributeViewContextFilterTarget(attrView, contextFilter, carrierBoxID)
}View on GitHub (pinned to 9f775e8a12)