{"record":{"id":"0f03b6dac84b6eac","repo":"siyuan-note/siyuan","slug":"parent-is-required","errorCode":null,"errorMessage":"--parent is required","messagePattern":"--parent is required","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"kernel/cli/cmd/block.go","lineNumber":195,"sourceCode":"\t\t\tfmt.Printf(\"Blocks:     %d\\n\", stat.BlockCount)\n\t\t\tfmt.Printf(\"Links:      %d\\n\", stat.LinkCount)\n\t\t\tfmt.Printf(\"Images:     %d\\n\", stat.ImageCount)\n\t\t\tfmt.Printf(\"Refs:       %d\\n\", stat.RefCount)\n\t\t}\n\t\treturn nil\n\t},\n}\n\n// ─── Write ─────────────────────────────────────────────────────────────────────\n\nvar blockInsertCmd = &cobra.Command{\n\tUse:   \"insert --parent <id> [--data <markdown> | --file <path>]\",\n\tShort: \"Insert block\",\n\tRunE: func(cmd *cobra.Command, args []string) error {\n\t\tparentID, _ := cmd.Flags().GetString(\"parent\")\n\t\tpreviousID, _ := cmd.Flags().GetString(\"previous\")\n\t\tif parentID == \"\" {\n\t\t\treturn fmt.Errorf(\"--parent is required\")\n\t\t}\n\n\t\tif dryRun {\n\t\t\tfmt.Printf(\"[dry-run] Would insert block under parent %s\\n\", parentID)\n\t\t\tif previousID != \"\" {\n\t\t\t\tfmt.Printf(\"         after previous sibling %s\\n\", previousID)\n\t\t\t}\n\t\t\treturn nil\n\t\t}\n\n\t\t// 仅靠 parentID 定位目标时（无 previousID），目标必须是容器块，否则非法嵌套\n\t\tif previousID == \"\" {\n\t\t\tif err := treenode.CheckContainerParent(parentID); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\n\t\tdata, err := resolveData(cmd)","sourceCodeStart":177,"sourceCodeEnd":213,"githubUrl":"https://github.com/siyuan-note/siyuan/blob/9f775e8a12daef8255556097396f9b2739078892/kernel/cli/cmd/block.go#L177-L213","documentation":"Argument validation in the cobra blockInsert RunE: fires when the --parent flag is empty. Inserting a block requires a parent block ID to position the new content (with --previous or as last child); running `block insert` without --parent is the faulting usage.","triggerScenarios":"Running `siyuan block insert` without --parent, or with `--parent \"\"` (empty value).","commonSituations":"Forgetting the flag when scripting; shell variable holding the parent ID is unset/empty; confusing --parent with --previous and omitting the required one.","solutions":["Add --parent <blockID> specifying the block under which to insert.","Ensure the variable feeding --parent is non-empty before invoking (e.g. `${PARENT_ID:?parent required}`).","Use --file or --data to supply content once --parent is set."],"exampleFix":"// before\nsiyuan block insert --data \"new text\"\n// after\nsiyuan block insert --parent 20240101120000-h1x2y3z --data \"new text\"","handlingStrategy":"validation","validationCode":": \"${PARENT_ID:?--parent is required}\"\nsiyuan block insert --parent \"$PARENT_ID\" --data \"$DATA\"","typeGuard":null,"tryCatchPattern":"siyuan block insert --parent \"$PARENT_ID\" --data \"$DATA\" || exit $?","preventionTips":["Always pass --parent explicitly in scripts","Fail fast on empty variables with ${VAR:?msg}","Remember --previous is optional, --parent is not"],"tags":["cli","validation","flag"],"backgroundTag":"missing-required-flag","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"}