{"record":{"id":"219043ecba570b84","repo":"siyuan-note/siyuan","slug":"invalid-box-id","errorCode":null,"errorMessage":"invalid box id","messagePattern":"invalid box id","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"kernel/av/av.go","lineNumber":1295,"sourceCode":"\tav := filepath.Join(util.DataDir, \"storage\", \"av\")\n\tret = filepath.Join(av, avID+\".json\")\n\tif !gulu.File.IsDir(av) {\n\t\tif err := os.MkdirAll(av, 0755); err != nil {\n\t\t\tlogging.LogErrorf(\"create attribute view dir failed: %s\", err)\n\t\t\treturn\n\t\t}\n\t}\n\treturn\n}\n\nfunc GetAttributeViewI18n(key string) string {\n\treturn util.AttrViewLangs[util.Lang][key].(string)\n}\n\nvar (\n\tErrAttributeViewNotFound  = errors.New(\"attribute view not found\")\n\tErrInvalidAttributeViewID = errors.New(\"invalid attribute view id\")\n\tErrInvalidBoxID           = errors.New(\"invalid box id\")\n\tErrViewNotFound           = errors.New(\"view not found\")\n\tErrKeyNotFound            = errors.New(\"key not found\")\n\tErrItemNotFound           = errors.New(\"item not found\")\n\tErrWrongLayoutType        = errors.New(\"wrong layout type\")\n\tErrInvalidColumnAlign     = errors.New(\"invalid column align\")\n\tErrSpecTooNew             = errors.New(\"attribute view spec is too new\")\n\tErrFilterTooDeep          = errors.New(\"filter nesting depth exceeds the maximum allowed\")\n)\n\nconst (\n\tNodeAttrNameAvs        = \"custom-avs\"                 // 用于标记块所属的属性视图，逗号分隔 av id\n\tNodeAttrView           = \"custom-sy-av-view\"          // 用于标记块所属的属性视图视图 view id Database block support specified view https://github.com/siyuan-note/siyuan/issues/10443\n\tNodeAttrVisibleViewIDs = \"custom-sy-av-visible-views\" // 用于标记数据库块显示的视图 ID，逗号分隔\n\tNodeAttrViewStaticText = \"custom-sy-av-s-text\"        // 用于标记块所属的属性视图静态文本 Database-bound block primary key supports setting static anchor text https://github.com/siyuan-note/siyuan/issues/10049\n\n\tNodeAttrViewNames = \"av-names\" // 用于临时标记块所属的属性视图名称，空格分隔\n)\n","sourceCodeStart":1277,"sourceCodeEnd":1313,"githubUrl":"https://github.com/siyuan-note/siyuan/blob/251596fc0de2f9528c00c224252fd073a99973f4/kernel/av/av.go#L1277-L1313","documentation":"Sentinel ErrInvalidBoxID. Returned by ParseAttributeViewInBox and encrypted_hook.go when a non-empty boxID fails ast.IsNodeIDPattern. The box id must be a valid node id or empty (empty means global/normal notebook); any other shape is rejected before lookup.","triggerScenarios":"Calling ParseAttributeViewInBox (or an AV API that forwards boxID) with a boxID like 'abc', a notebook name, a path, or a malformed string. Passing a block id as boxID also fails the pattern.","commonSituations":"Confusing notebook id with notebook name; passing a view id or block id in the boxID slot; frontend sending the URL slug instead of the id.","solutions":["Pass the notebook's actual id (matches ^\\d{14}[0-9a-z]+$), or pass empty string for the global/normal case.","Do not send notebook display names or paths as boxID.","Validate with the same IsNodeIDPattern check before the call."],"exampleFix":"// before\nParseAttributeViewInBox(avID, \"my-notebook\")  // name, not id\n\n// after: use the notebook id, or empty for global\nParseAttributeViewInBox(avID, notebookID)      // valid id\nParseAttributeViewInBox(avID, \"\")              // global lookup","handlingStrategy":"validation","validationCode":"if boxID != \"\" && !ast.IsNodeIDPattern(boxID) {\n    return fmt.Errorf(\"not a valid box id: %q\", boxID)\n}","typeGuard":"// TypeScript guard\nfunction isValidBoxID(boxID: string): boolean {\n  return boxID === \"\" || /^\\d{14}[0-9a-z]+$/.test(boxID)\n}","tryCatchPattern":null,"preventionTips":["Pass the notebook id (node-id pattern) or empty string for the global case.","Do not send notebook names, slugs, or paths as boxID.","Validate at the API boundary in the client."],"tags":["attribute-view","validation","id","notebook","api"],"backgroundTag":null,"analyzedSha":"251596fc0de2f9528c00c224252fd073a99973f4","analyzedAt":"2026-08-12T21:18:37.123Z","schemaVersion":2},"datasetVersion":"2026-08-12T23:17:12.415Z"}