{"record":{"id":"8b56ce27c5fff8f2","repo":"siyuan-note/siyuan","slug":"icon-is-required","errorCode":null,"errorMessage":"--icon is required","messagePattern":"--icon is required","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"kernel/cli/cmd/notebook.go","lineNumber":226,"sourceCode":"\tfor _, b := range boxes {\n\t\tfmt.Fprintf(w, \"%s\\t%s\\t%v\\t%d\\n\", b.ID, b.Name, b.Closed, b.Sort)\n\t}\n\tw.Flush()\n}\n\n// notebookSetIconCmd 设置笔记本图标。\n// icon 取值格式：emoji hex 码点（如 \"1f4ca\"）、emoji 字符、自定义图片路径、网络图片 URL 或动态图标 URL。\nvar notebookSetIconCmd = &cobra.Command{\n\tUse:   \"set-icon --id <id> --icon <icon>\",\n\tShort: \"Set a notebook icon\",\n\tRunE: func(cmd *cobra.Command, args []string) error {\n\t\tid, _ := cmd.Flags().GetString(\"id\")\n\t\ticon, _ := cmd.Flags().GetString(\"icon\")\n\t\tif id == \"\" {\n\t\t\treturn fmt.Errorf(\"--id is required\")\n\t\t}\n\t\tif icon == \"\" {\n\t\t\treturn fmt.Errorf(\"--icon is required\")\n\t\t}\n\n\t\t// 校验笔记本存在，避免对一个不存在的 id 静默写入图标。\n\t\texists := false\n\t\tnotebooks, err := model.ListNotebooks()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tfor _, nb := range notebooks {\n\t\t\tif nb.ID == id {\n\t\t\t\texists = true\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tif !exists {\n\t\t\treturn fmt.Errorf(\"notebook not found: %s\", id)\n\t\t}\n","sourceCodeStart":208,"sourceCodeEnd":244,"githubUrl":"https://github.com/siyuan-note/siyuan/blob/9f775e8a12daef8255556097396f9b2739078892/kernel/cli/cmd/notebook.go#L208-L244","documentation":"Argument validation in the cobra notebookSetIcon RunE: fires when the --icon flag is empty (the --id check precedes it). Setting a notebook icon requires an icon value — an emoji hex codepoint, emoji character, image path, or URL; omitting --icon is the faulting usage.","triggerScenarios":"Running `notebook set-icon --id <id>` without `--icon`, or with `--icon \"\"`.","commonSituations":"Shell variable holding the icon name is unset; forgetting the emoji/icon argument in batch scripts.","solutions":["Re-run with `--icon <icon>` (the notebook icon value)","Confirm the icon argument is a valid icon identifier for the configured icon set","Test with `--dry-run` to preview the change"],"exampleFix":"// before\nsiyuan notebook set-icon --id 20240101120000-abcdefg\n// after\nsiyuan notebook set-icon --id 20240101120000-abcdefg --icon \"1f4d8\"","handlingStrategy":"validation","validationCode":"if [ -z \"$ICON\" ]; then echo \"--icon is required\"; exit 1; fi\nsiyuan notebook set-icon --id \"$NB_ID\" --icon \"$ICON\"","typeGuard":"const hasIcon = (v) => typeof v === \"string\" && v.length > 0;","tryCatchPattern":"try { run(`siyuan notebook set-icon --id ${id} --icon ${icon}`); } catch (e) { console.error(e.message); }","preventionTips":["Set the icon variable explicitly in scripts","Use quoted emoji/icon values to avoid shell stripping","Confirm with --dry-run first"],"tags":["cli","flag-validation","notebook"],"backgroundTag":"missing-cli-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"}