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

  1. Ensure the data directory exists (os.MkdirAll) before calling MarkProjectInitialized.
  2. Fix write permissions on the data directory for the running user.
  3. Check for read-only mounts or full disks and free space or remount writable.
  4. 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

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


AI-assisted analysis of charmbracelet/crush@7944b8e522 (2026-08-29). Data as JSON: /api/errors/eefa1b74be38d1e5. Report an issue: GitHub.