{"record":{"id":"264474486d0193ac","repo":"gastownhall/beads","slug":"create-embeddeddolt-directory-w","errorCode":null,"errorMessage":"create embeddeddolt directory: %w","messagePattern":"create embeddeddolt directory: %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"cmd/bd/bootstrap.go","lineNumber":928,"sourceCode":"\t\t}\n\t\treturn remoteCloneEmbedded\n\t}\n\n\tswitch doltserver.ResolveServerMode(beadsDir) {\n\tcase doltserver.ServerModeEmbedded:\n\t\treturn remoteCloneEmbedded\n\tcase doltserver.ServerModeExternal:\n\t\treturn remoteCloneExternalServer\n\tdefault:\n\t\treturn remoteCloneCLI\n\t}\n}\n\n// cloneViaEmbedded clones using the embedded Dolt engine (CGO required).\nfunc cloneViaEmbedded(ctx context.Context, beadsDir, remoteURL, dbName string) error {\n\tdataDir := filepath.Join(beadsDir, \"embeddeddolt\")\n\tif err := os.MkdirAll(dataDir, 0o750); err != nil {\n\t\treturn fmt.Errorf(\"create embeddeddolt directory: %w\", err)\n\t}\n\tdb, cleanup, err := embeddeddolt.OpenSQL(ctx, dataDir, \"\", \"\")\n\tif err != nil {\n\t\treturn fmt.Errorf(\"open embedded engine for clone: %w\", err)\n\t}\n\tdefer func() { _ = cleanup() }()\n\n\tif err := versioncontrolops.DoltClone(ctx, db, remoteURL, dbName, os.Getenv(\"DOLT_REMOTE_USER\")); err != nil {\n\t\treturn fmt.Errorf(\"clone from remote: %w\", err)\n\t}\n\tfmt.Fprintf(os.Stderr, \"Synced database from %s\\n\", remoteURL)\n\treturn nil\n}\n\n// cloneViaServer clones by connecting to the external Dolt server and\n// executing CALL DOLT_CLONE. The server places the database in its own\n// data directory, which is the correct behavior for externally managed\n// servers where bd does not know the filesystem layout.","sourceCodeStart":910,"sourceCodeEnd":946,"githubUrl":"https://github.com/gastownhall/beads/blob/71377f276968b452ee607177637970a4ff888584/cmd/bd/bootstrap.go#L910-L946","documentation":"Wrapped by cloneViaEmbedded in cmd/bd/bootstrap.go:928 when os.MkdirAll fails to create <beadsDir>/embeddeddolt (mode 0750), the data directory for the embedded Dolt engine. The clone cannot proceed without this directory. The wrapped error is an OS-level mkdir failure.","triggerScenarios":"bd init/bootstrap resolves to embedded clone mode and calls cloneViaEmbedded; MkdirAll fails because a file named embeddeddolt already exists in .beads, the parent directory is not writable, or the path is on a read-only filesystem.","commonSituations":"A stray embeddeddolt file from a previous corrupted run; cloning into a shared/locked directory; read-only CI workspace; full disk.","solutions":["Check whether .beads/embeddeddolt is a file and remove it (rm -f .beads/embeddeddolt)","Fix permissions on the .beads directory so the current user can create directories","Ensure the filesystem is writable and has free space","Re-run bd init/bd bootstrap"],"exampleFix":"// before\n$ bd init --remote https://doltremoteapi.dolthub.com/org/beads\n// error: create embeddeddolt directory: not a directory\n$ file .beads/embeddeddolt   # shows a regular file\n// after\n$ rm -f .beads/embeddeddolt\n$ bd init --remote ...","handlingStrategy":"validation","validationCode":"import \"os\"\nfunc canCreateDir(beadsDir string) error {\n\tif fi, err := os.Stat(beadsDir + \"/embeddeddolt\"); err == nil && !fi.IsDir() {\n\t\treturn fmt.Errorf(\"%s/embeddeddolt is a file\", beadsDir)\n\t}\n\treturn os.MkdirTemp(beadsDir, \".wtest\") != nil // probe writability via MkdirTemp then remove\n}","typeGuard":null,"tryCatchPattern":"if err := clone(); err != nil {\n\tvar pe *fs.PathError\n\tif errors.As(err, &pe) && strings.Contains(err.Error(), \"embeddeddolt\") {\n\t\t// remove stray file and retry\n\t}\n}","preventionTips":["Ensure .beads/embeddeddolt does not exist as a regular file before bootstrap","Verify free disk space in the target filesystem","Use the same user account consistently for the repo workspace","Avoid read-only mounts for workspaces that will run bd bootstrap"],"tags":["filesystem","mkdir","embedded-dolt"],"backgroundTag":"filesystem-write-permission-denied","analyzedSha":"71377f276968b452ee607177637970a4ff888584","analyzedAt":"2026-08-30T18:55:39.744Z","schemaVersion":2},"datasetVersion":"2026-08-30T23:17:21.991Z"}