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

  1. Set Mode explicitly to av.NewItemFieldValueStatic or av.NewItemFieldValueCurrentValue on every FieldValues entry
  2. Upgrade the kernel if the template was produced by a newer version introducing a new mode
  3. 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

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


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)