{"record":{"id":"423a64b6825f7068","repo":"siyuan-note/siyuan","slug":"createdoctree-document-title-exceeds-d-characters","errorCode":null,"errorMessage":"createDocTree document title exceeds %d characters","messagePattern":"createDocTree document title exceeds (.+?) characters","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"kernel/model/template_doc_tree.go","lineNumber":160,"sourceCode":"\t\t\tdefault:\n\t\t\t\treturn nil, fmt.Errorf(\"createDocTree document contains unknown field [%s]\", key)\n\t\t\t}\n\t\t}\n\n\t\ttitleValue, ok := definition[\"title\"]\n\t\tif !ok {\n\t\t\treturn nil, errors.New(\"createDocTree document title is required\")\n\t\t}\n\t\ttitle, ok := titleValue.(string)\n\t\tif !ok {\n\t\t\treturn nil, errors.New(\"createDocTree document title must be a string\")\n\t\t}\n\t\ttitle = normalizeDocTitle(title)\n\t\tif \"\" == title {\n\t\t\treturn nil, errors.New(\"createDocTree document title must not be empty\")\n\t\t}\n\t\tif 512 < utf8.RuneCountInString(title) {\n\t\t\treturn nil, fmt.Errorf(\"createDocTree document title exceeds %d characters\", 512)\n\t\t}\n\n\t\ttemplateName, err := templateDocTreeStringField(definition, \"template\")\n\t\tif nil != err {\n\t\t\treturn nil, err\n\t\t}\n\t\tdefineName, err := templateDocTreeStringField(definition, \"define\")\n\t\tif nil != err {\n\t\t\treturn nil, err\n\t\t}\n\t\tif \"\" != templateName && \"\" != defineName {\n\t\t\treturn nil, errors.New(\"createDocTree document template and define are mutually exclusive\")\n\t\t}\n\n\t\tstate.count++\n\t\tif maxTemplateDocTreeDocs < state.count {\n\t\t\treturn nil, fmt.Errorf(\"createDocTree exceeds the maximum document count of %d\", maxTemplateDocTreeDocs)\n\t\t}","sourceCodeStart":142,"sourceCodeEnd":178,"githubUrl":"https://github.com/siyuan-note/siyuan/blob/9f775e8a12daef8255556097396f9b2739078892/kernel/model/template_doc_tree.go#L142-L178","documentation":"Document titles in createDocTree definitions are capped at 512 Unicode characters (rune count, measured after normalization). parseNodes enforces this to keep document paths and the filesystem/database sane. The error message interpolates the limit value.","triggerScenarios":"A title longer than 512 characters, e.g. pasted long text used as a document name or an unbounded template variable expanded into the title. Raised from parseTemplateDocTreeDefinition.","commonSituations":"Pasting an entire paragraph as a title; a generator embedding long content in the title field; localized titles concatenated from several parts.","solutions":["Shorten the title to 512 characters or fewer (rune count, not bytes).","Truncate programmatically in the generator with a rune-aware slice.","Move long content into the document body/template and keep the title short."],"exampleFix":"// before\n{\"title\": <600-char string>}\n// after\nconst t = longString.slice(0, 512); // rune-aware truncation\n{\"title\": t, \"template\": \"note.md\"}","handlingStrategy":"validation","validationCode":"const within512 = (s) => [...s].length <= 512;\ndocs.forEach(d => { if (!within512(d.title)) d.title = [...d.title].slice(0, 512).join(''); });","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Truncate titles to 512 runes before building the definition.","Never paste long text directly into a title field.","Count runes, not bytes, when measuring title length."],"tags":["template","validation","limit"],"backgroundTag":"value-out-of-range","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"}