{"record":{"id":"6e7a38bcc8a58bd9","repo":"siyuan-note/siyuan","slug":"phone-value-is-missing","errorCode":null,"errorMessage":"phone value is missing","messagePattern":"phone value is missing","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"kernel/av/new_item_template.go","lineNumber":398,"sourceCode":"\t\t}\n\t\tif KeyTypeSelect == key.Type && 1 < len(selections) {\n\t\t\tselections = selections[:1]\n\t\t}\n\t\tvalue.MSelect = selections\n\t\tvalue.Text, value.Number, value.Date, value.URL, value.Email, value.Phone, value.MAsset, value.Checkbox, value.Relation = nil, nil, nil, nil, nil, nil, nil, nil, nil\n\tcase KeyTypeURL:\n\t\tif nil == value.URL {\n\t\t\treturn nil, errors.New(\"URL value is missing\")\n\t\t}\n\t\tvalue.Text, value.Number, value.Date, value.MSelect, value.Email, value.Phone, value.MAsset, value.Checkbox, value.Relation = nil, nil, nil, nil, nil, nil, nil, nil, nil\n\tcase KeyTypeEmail:\n\t\tif nil == value.Email {\n\t\t\treturn nil, errors.New(\"email value is missing\")\n\t\t}\n\t\tvalue.Text, value.Number, value.Date, value.MSelect, value.URL, value.Phone, value.MAsset, value.Checkbox, value.Relation = nil, nil, nil, nil, nil, nil, nil, nil, nil\n\tcase KeyTypePhone:\n\t\tif nil == value.Phone {\n\t\t\treturn nil, errors.New(\"phone value is missing\")\n\t\t}\n\t\tvalue.Text, value.Number, value.Date, value.MSelect, value.URL, value.Email, value.MAsset, value.Checkbox, value.Relation = nil, nil, nil, nil, nil, nil, nil, nil, nil\n\tcase KeyTypeMAsset:\n\t\tvar assets []*ValueAsset\n\t\tfor _, asset := range value.MAsset {\n\t\t\tif nil != asset && \"\" != strings.TrimSpace(asset.Content) {\n\t\t\t\tif AssetTypeFile != asset.Type && AssetTypeImage != asset.Type {\n\t\t\t\t\treturn nil, fmt.Errorf(\"invalid asset type [%s]\", asset.Type)\n\t\t\t\t}\n\t\t\t\tassets = append(assets, asset)\n\t\t\t}\n\t\t}\n\t\tvalue.MAsset = assets\n\t\tvalue.Text, value.Number, value.Date, value.MSelect, value.URL, value.Email, value.Phone, value.Checkbox, value.Relation = nil, nil, nil, nil, nil, nil, nil, nil, nil\n\tcase KeyTypeCheckbox:\n\t\tif nil == value.Checkbox {\n\t\t\treturn nil, errors.New(\"checkbox value is missing\")\n\t\t}","sourceCodeStart":380,"sourceCodeEnd":416,"githubUrl":"https://github.com/siyuan-note/siyuan/blob/9f775e8a12daef8255556097396f9b2739078892/kernel/av/new_item_template.go#L380-L416","documentation":"ForKeyTypePhone values, normalizeNewItemTemplateValue demands a non-nil Value.Phone object and otherwise returns 'phone value is missing'. Phone-typed template values lacking the phone payload are structurally invalid and are rejected.","triggerScenarios":"PruneInvalidNewItemTemplateFieldValues / normalizeNewItemTemplateFieldValues receives a value with key type KeyTypePhone and a nil Value.Phone pointer (phone object absent from the template payload).","commonSituations":"Programmatic row creation that sets only Value.Type=\"phone\" and stores the number in Value.Text; generated templates from older schema versions that used a different value shape.","solutions":["Provide the phone object: {\"phone\":{\"content\":\"+1...\"}}","Switch the field/value to text if a plain number was intended","Remove the malformed value before normalization","Check nil Value.Phone in callers and fill or skip accordingly"],"exampleFix":"// before\n{\"type\":\"phone\"}\n// after\n{\"type\":\"phone\",\"phone\":{\"content\":\"+8613800000000\"}}","handlingStrategy":"validation","validationCode":"if v.Type == av.KeyTypePhone && v.Phone == nil {\n    return fmt.Errorf(\"phone value requires a phone object\")\n}","typeGuard":"func hasPhone(v *av.Value) bool { return v != nil && v.Type == av.KeyTypePhone && v.Phone != nil }","tryCatchPattern":null,"preventionTips":["Store the number in Value.Phone.Content","Do not zero-initialize typed sub-objects after setting Value.Type","Normalize templates in CI to catch missing payloads early"],"tags":["attribute-view","validation","nil-value"],"backgroundTag":"null-argument","analyzedSha":"9f775e8a12daef8255556097396f9b2739078892","analyzedAt":"2026-09-19T03:17:15.984Z","contentChangedAt":"2026-09-19T03:17:15.984Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}