{"record":{"id":"84ea240f7016d930","repo":"siyuan-note/siyuan","slug":"name-is-required-84ea24","errorCode":null,"errorMessage":"--name is required","messagePattern":"--name is required","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"kernel/cli/cmd/template.go","lineNumber":140,"sourceCode":"\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tfmt.Print(dom)\n\t\treturn nil\n\t},\n}\n\nvar templateSaveAsCmd = &cobra.Command{\n\tUse:   \"save-as --id <id> --name <name>\",\n\tShort: \"Save a document as a template\",\n\tRunE: func(cmd *cobra.Command, args []string) error {\n\t\tid, _ := cmd.Flags().GetString(\"id\")\n\t\tname, _ := cmd.Flags().GetString(\"name\")\n\t\tif id == \"\" {\n\t\t\treturn fmt.Errorf(\"--id is required\")\n\t\t}\n\t\tif name == \"\" {\n\t\t\treturn fmt.Errorf(\"--name is required\")\n\t\t}\n\t\toverwrite, _ := cmd.Flags().GetBool(\"overwrite\")\n\t\tif dryRun {\n\t\t\tfmt.Printf(\"[dry-run] Would save document %s as template \\\"%s\\\"\\n\", id, name)\n\t\t\treturn nil\n\t\t}\n\t\tcode, err := model.DocSaveAsTemplate(id, name, overwrite)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif code == 1 {\n\t\t\treturn fmt.Errorf(\"template already exists, use --overwrite to replace: %s\", name)\n\t\t}\n\t\tfmt.Printf(\"%s.md\\n\", name)\n\t\treturn nil\n\t},\n}\n","sourceCodeStart":122,"sourceCodeEnd":158,"githubUrl":"https://github.com/siyuan-note/siyuan/blob/251596fc0de2f9528c00c224252fd073a99973f4/kernel/cli/cmd/template.go#L122-L158","documentation":"Thrown by the `template save-as` cobra subcommand when `--name` is empty (after `--id` passed). `--name` is the template name (without extension); the resulting file is `<name>.md` under `data/templates/`. An empty name would create an invalid filename, so it is rejected before `model.DocSaveAsTemplate` runs. `--dry-run` is honored only after both required flags pass.","triggerScenarios":"Running `siyuan template save-as --id <id>` with no `--name`, or `--name \"\"`.","commonSituations":"Providing the document but forgetting to name the template; passing an unset shell variable as the name.","solutions":["Provide a non-empty template name: `siyuan template save-as --id <id> --name <name>`.","Add `--overwrite` if a template with that name already exists."],"exampleFix":"// before\nsiyuan template save-as --id 20240101000000abc123\n// after\nsiyuan template save-as --id 20240101000000abc123 --name daily","handlingStrategy":"validation","validationCode":"if name == \"\" {\n    return errors.New(\"--name is required: pass a template name without extension\")\n}\n// siyuan template save-as --id <id> --name <name>","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Provide a non-empty template name (no `.md` extension needed).","Add `--overwrite` if re-saving an existing template name."],"tags":["cli","validation","template","argument-required"],"backgroundTag":null,"analyzedSha":"251596fc0de2f9528c00c224252fd073a99973f4","analyzedAt":"2026-08-12T21:18:37.123Z","schemaVersion":2},"datasetVersion":"2026-08-12T23:17:12.415Z"}