siyuan-note/siyuan · error

text value is missing

Error message

text value is missing

What it means

normalizeNewItemTemplateValue for KeyTypeText requires value.Text != nil — the Text sub-struct holds the cell's rendered block content. If a Static-mode value on a Text column omits the Text pointer, normalization cannot proceed.

Source

Thrown at kernel/av/new_item_template.go:361

		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")
		}
		value.Number, value.Date, value.MSelect, value.URL, value.Email, value.Phone, value.MAsset, value.Checkbox, value.Relation = nil, nil, nil, nil, nil, nil, nil, nil, nil
	case KeyTypeNumber:
		if nil == value.Number {
			return nil, errors.New("number value is missing")
		}
		value.Text, value.Date, value.MSelect, value.URL, value.Email, value.Phone, value.MAsset, value.Checkbox, value.Relation = nil, nil, nil, nil, nil, nil, nil, nil, nil
	case KeyTypeDate:
		if nil == value.Date {
			return nil, errors.New("date value is missing")
		}
		value.Text, value.Number, value.MSelect, value.URL, value.Email, value.Phone, value.MAsset, value.Checkbox, value.Relation = nil, nil, nil, nil, nil, nil, nil, nil, nil
	case KeyTypeSelect, KeyTypeMSelect:
		var selections []*ValueSelect
		for _, selection := range value.MSelect {
			if nil != selection && "" != strings.TrimSpace(selection.Content) {
				selections = append(selections, selection)
			}

View on GitHub (pinned to 251596fc0d)

Solutions

  1. Set Value.Text = &av.ValueText{Content: "..."} when key.Type is KeyTypeText.
  2. Match the Value sub-pointer to key.Type exactly (see the switch in normalizeNewItemTemplateValue).
  3. Validate the shape client-side before submit.

Example fix

// before
&av.Value{}  // key.Type == KeyTypeText
// after
&av.Value{Text: &av.ValueText{Content: "Note"}}
Defensive patterns

Strategy: type-guard

Validate before calling

if key.Type == av.KeyTypeText && value.Text == nil {
    value.Text = &av.ValueText{Content: ""}
}

Type guard

func hasTextValue(v *av.Value) bool { return v != nil && v.Text != nil }

Prevention

When it happens

Trigger: Static mode on a Text column but the Value carries only Number/Date/MSelect/... sub-fields; client sent a freshly allocated &av.Value{} with no sub-pointer; import mismatch.

Common situations: Partial Value from a client that populated the wrong sub-field; type change after the template was authored.

Related errors


AI-assisted analysis of siyuan-note/siyuan@251596fc0d (2026-08-12). Data as JSON: /api/errors/a22d2c0b4a2f08da. Report an issue: GitHub.