{"record":{"id":"7e443e9d23cd489c","repo":"AlistGo/alist","slug":"doubao-new-create-folder-failed-empty-response","errorCode":null,"errorMessage":"[doubao_new] create folder failed: empty response","messagePattern":"\\[doubao_new\\] create folder failed: empty response","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"drivers/doubao_new/util.go","lineNumber":266,"sourceCode":"\t\t\terr,\n\t\t)\n\t\treturn Node{}, fmt.Errorf(msg)\n\t}\n\n\tvar node Node\n\tif len(resp.Data.NodeList) > 0 {\n\t\tif n, ok := resp.Data.Entities.Nodes[resp.Data.NodeList[0]]; ok {\n\t\t\tnode = n\n\t\t}\n\t}\n\tif node.Token == \"\" {\n\t\tfor _, n := range resp.Data.Entities.Nodes {\n\t\t\tnode = n\n\t\t\tbreak\n\t\t}\n\t}\n\tif node.Token == \"\" && node.ObjToken == \"\" && node.NodeToken == \"\" {\n\t\treturn Node{}, fmt.Errorf(\"[doubao_new] create folder failed: empty response\")\n\t}\n\tif node.NodeToken == \"\" {\n\t\tif node.Token != \"\" {\n\t\t\tnode.NodeToken = node.Token\n\t\t} else if node.ObjToken != \"\" {\n\t\t\tnode.NodeToken = node.ObjToken\n\t\t}\n\t}\n\tif node.ObjToken == \"\" && node.Token != \"\" {\n\t\tnode.ObjToken = node.Token\n\t}\n\treturn node, nil\n}\n\nfunc (d *DoubaoNew) renameFolder(ctx context.Context, token, name string) error {\n\tif token == \"\" {\n\t\treturn fmt.Errorf(\"[doubao_new] rename folder missing token\")\n\t}","sourceCodeStart":248,"sourceCodeEnd":284,"githubUrl":"https://github.com/AlistGo/alist/blob/843d9dc8149126976b2625911e45a4d3ffd6f2f5/drivers/doubao_new/util.go#L248-L284","documentation":"Doubao_new create-folder empty-result error: the API responded successfully (Code=0) and the body matched CreateFolderResp, but no node in the response carried a usable token (Token/ObjToken/NodeToken all empty after the fallback scan of Entities.Nodes). The folder was apparently created but no identifier for it can be extracted.","triggerScenarios":"CreateFolderResp where NodeList is empty, NodeList[0] missing from Entities.Nodes, and every Node entity lacking all three token fields — server-side anomaly, response shape change where tokens moved to a new field, or the 'create' actually being deduplicated into a pre-existing node represented differently.","commonSituations":"API change renaming token fields, folder name collision handling returning a reference node without tokens, partial server-side failure still returning Code=0, or A/B variants of the endpoint. Rare and typically affects all mkdir calls when it's a schema change.","solutions":["Retry the mkdir — transient empty responses occur","Check whether the folder actually got created (list the parent); if yes, the token extraction is the problem, not creation","Update the doubao_new driver — token field fallbacks (Token/ObjToken/NodeToken) have been extended as the API changed","Capture the raw response body and report upstream so the new token field can be added","Avoid characters in folder names that Doubao may normalize/reject"],"exampleFix":null,"handlingStrategy":"validation","validationCode":"// pre-check the decoded response carries an identifier\nfunc hasNodeToken(n Node) bool {\n    return n.Token != \"\" || n.ObjToken != \"\" || n.NodeToken != \"\"\n}\n// after decode:\nif !hasNodeToken(node) {\n    if folderExists(parent, name) { return lookupFolder(parent, name) }\n    return Node{}, fmt.Errorf(\"create folder failed: empty response\")\n}","typeGuard":"func hasNodeToken(n Node) bool {\n    return n.Token != \"\" || n.ObjToken != \"\" || n.NodeToken != \"\"\n}","tryCatchPattern":"if err := createFolder(...); err != nil {\n    if strings.Contains(err.Error(), \"empty response\") {\n        // folder may exist despite the empty payload; resolve by name instead of failing\n        if n, lerr := lookupByName(parent, name); lerr == nil { return n, nil }\n    }\n    return err\n}","preventionTips":["After this error, list the parent before retrying — the folder often exists","Update the driver whenever Doubao renames token fields","Avoid folder names Doubao normalizes (trailing spaces, forbidden chars)"],"tags":["doubao-new","create-folder","empty-response","schema-change","go"],"backgroundTag":null,"analyzedSha":"843d9dc8149126976b2625911e45a4d3ffd6f2f5","analyzedAt":"2026-08-15T12:14:11.722Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}