charmbracelet/crush · error
failed to create init flag file: %w
Error message
failed to create init flag file: %w
What it means
Returned by MarkProjectInitialized when os.Create fails to create the init flag file inside cfg.Options.DataDirectory. The wrap exposes the underlying OS error (permission denied, missing directory, read-only filesystem, etc.).
Source
Thrown at internal/config/init.go:111
// dirHasNoVisibleFiles returns true if the directory has no files/dirs after applying ignore rules.
func dirHasNoVisibleFiles(dir string) (bool, error) {
files, _, err := fsext.ListDirectory(dir, nil, 1, 1)
if err != nil {
return false, err
}
return len(files) == 0, nil
}
func MarkProjectInitialized(store *ConfigStore) error {
if store == nil {
return fmt.Errorf("config not loaded")
}
flagFilePath := filepath.Join(store.Config().Options.DataDirectory, InitFlagFilename)
file, err := os.Create(flagFilePath)
if err != nil {
return fmt.Errorf("failed to create init flag file: %w", err)
}
defer file.Close()
return nil
}
func HasInitialDataConfig(store *ConfigStore) bool {
if store == nil {
return false
}
cfgPath := GlobalConfigData()
if _, err := os.Stat(cfgPath); err != nil {
return false
}
return store.Config().IsConfigured()
}
View on GitHub (pinned to 7944b8e522)
Solutions
- Ensure the data directory exists (os.MkdirAll) before calling MarkProjectInitialized.
- Fix write permissions on the data directory for the running user.
- Check for read-only mounts or full disks and free space or remount writable.
- Run under the user that owns the data directory (avoid sudo/user mismatch).
Example fix
// before
err := config.MarkProjectInitialized(store) // fails: dir missing
// after
if err := os.MkdirAll(dataDir, 0o755); err != nil {
return fmt.Errorf("create data dir: %w", err)
}
err := config.MarkProjectInitialized(store) Defensive patterns
Strategy: validation
Validate before calling
if err := os.MkdirAll(dataDir, 0o755); err != nil {
return fmt.Errorf("cannot create data dir: %w", err)
} Type guard
func canWrite(path string) bool {
return unix.Access(path, unix.W_OK) == nil
} Try / catch
if err != nil && strings.Contains(err.Error(), "failed to create init flag file") {
// check disk space, permissions, and mount state before retry
} Prevention
- Create the data directory with os.MkdirAll before first use.
- Keep disks from filling; monitor free space.
- Run consistently as one user; avoid sudo-induced permission drift.
- Mount home/data volumes read-write in containers.
When it happens
Trigger: Calling MarkProjectInitialized when the data directory does not exist, is read-only, or the process lacks write permission for the flag file path.
Common situations: First-run on a system where the data directory was never created; running under a different user than the one owning the data dir; container/rootless setups with read-only home directories; disk full.
Related errors
- failed to create parent directories: %w
- failed to create output file: %w
- failed to access file: %w
- failed to create parent directories: %w
- session ID is required for accessing directories outside wor
AI-assisted analysis of charmbracelet/crush@7944b8e522 (2026-08-29).
Data as JSON: /api/errors/eefa1b74be38d1e5.
Report an issue: GitHub.