alibaba/open-code-review · error
create session dir: %w
Error message
create session dir: %w
What it means
Thrown when os.MkdirAll fails to create the session directory ~/.opencodereview/<sessions>/<encoded-repo-path> with mode 0700. The writer needs this directory to exist before it can create the JSONL session file. The wrapped error carries the underlying os.PathError.
Source
Thrown at internal/session/persist.go:111
vol = strings.ReplaceAll(vol, ":", "_")
// Handle edge case where path was only separators or volume name
result := vol + p
if result == "" {
return "empty"
}
return result
}
func (jw *jsonlWriter) open() error {
home, err := os.UserHomeDir()
if err != nil {
return fmt.Errorf("resolve home dir: %w", err)
}
sessionDir := filepath.Join(home, ".opencodereview", sessionSubDir, encodeRepoPath(jw.repoDir))
if err := os.MkdirAll(sessionDir, 0700); err != nil {
return fmt.Errorf("create session dir: %w", err)
}
filename := filepath.Join(sessionDir, jw.sessionID+".jsonl")
f, err := os.OpenFile(filename, os.O_CREATE|os.O_WRONLY|os.O_TRUNC, 0600)
if err != nil {
return fmt.Errorf("open session file: %w", err)
}
jw.file = f
jw.writer = bufio.NewWriter(f)
return nil
}
func (jw *jsonlWriter) writeRecordLocked(rec map[string]any) {
data, err := json.Marshal(rec)
if err != nil {
fmt.Printf("[ocr session] failed to marshal record: %v\n", err)
returnView on GitHub (pinned to 5cf97d0d15)
Solutions
- Check whether ~/.opencodereview exists as a file and remove/rename it so it can be a directory (mkdir -p ~/.opencodereview)
- Ensure $HOME is writable by the current user (chmod u+w $HOME, or pick a different HOME)
- Check disk space/quota (df -h ~) and free space if the filesystem is full
- Inspect the wrapped PathError for the exact failing path and fix permissions (chown/chmod) or mounts
Example fix
// shell # before ls -la ~/.opencodereview # regular file -> blocks MkdirAll // after rm ~/.opencodereview && mkdir -p ~/.opencodereview
Defensive patterns
Strategy: validation
Validate before calling
home, err := os.UserHomeDir()
if err == nil {
dir := filepath.Join(home, ".opencodereview")
if fi, err := os.Stat(dir); err == nil && !fi.IsDir() {
return fmt.Errorf("%s exists as a file; remove it", dir)
}
if err := os.MkdirAll(dir, 0700); err != nil {
return err
}
} Try / catch
if err := runOCR(); err != nil {
if strings.Contains(err.Error(), "create session dir") {
log.Fatalf("Check that $HOME is writable and ~/.opencodereview is not a file: %v", err)
}
} Prevention
- Verify ~/.opencodereview is a directory with u+rwx permissions before running
- Monitor disk space and quota on $HOME
- Avoid running the tool on read-only or restrictive SELinux contexts
When it happens
Trigger: newJSONLWriter -> open() calls os.MkdirAll on the session dir and it fails: a parent path component is a regular file, or the process lacks write permission on $HOME, or the filesystem is read-only.
Common situations: $HOME is read-only or full (disk quota exceeded); ~/.opencodereview exists as a file instead of a directory (created accidentally); NFS/containers with read-only mounts; SELinux/AppArmor denials on $HOME.
Understand the failure class
Background: mkdir permission denied (EACCES): failed to create directory errors explained — this error's family across 32 libraries.
Related errors
AI-assisted analysis of alibaba/open-code-review@5cf97d0d15 (2026-09-02).
Data as JSON: /api/errors/8ea5ca3c4f350d12.
Report an issue: GitHub.