gastownhall/beads · error
writing %s: %w
Error message
writing %s: %w
What it means
After marshaling succeeds, SaveProxiedServerClientInfo writes the JSON to the sidecar file (mode 0600) via os.WriteFile. This error wraps any filesystem write failure, prefixed with the sidecar filename. It is the standard I/O failure path for persisting proxied-server client info.
Source
Thrown at internal/configfile/proxied_server_client_info.go:52
}
var info ProxiedServerClientInfo
if err := json.Unmarshal(data, &info); err != nil {
return nil, fmt.Errorf("parsing %s: %w", ProxiedServerClientInfoFileName, err)
}
return &info, nil
}
func SaveProxiedServerClientInfo(beadsDir string, info *ProxiedServerClientInfo) error {
if info == nil {
info = &ProxiedServerClientInfo{}
}
data, err := json.MarshalIndent(info, "", " ")
if err != nil {
return fmt.Errorf("marshaling %s: %w", ProxiedServerClientInfoFileName, err)
}
path := ProxiedServerClientInfoPath(beadsDir)
if err := os.WriteFile(path, data, 0o600); err != nil {
return fmt.Errorf("writing %s: %w", ProxiedServerClientInfoFileName, err)
}
return nil
}
func resolveSidecarPath(beadsDir, p string) string {
if p == "" {
return ""
}
if filepath.IsAbs(p) {
return p
}
return filepath.Join(beadsDir, p)
}
func (i *ProxiedServerClientInfo) ResolvedRootPath(beadsDir string) string {
if i == nil {
return ""
}View on GitHub (pinned to 71377f2769)
Solutions
- Read the wrapped %w error — typically 'permission denied' or 'no such file or directory'.
- Ensure the beads directory exists (bd normally creates it; mkdir -p the path if needed).
- Fix filesystem permissions (chown/chmod the .beads dir, mode 0700) or free disk space.
- Verify BEADS_DIR / beadsDir points to a writable location.
Example fix
// before
err := configfile.SaveProxiedServerClientInfo(beadsDir, info)
// after
if err := os.MkdirAll(beadsDir, 0o700); err != nil {
return err
}
err := configfile.SaveProxiedServerClientInfo(beadsDir, info) Defensive patterns
Strategy: validation
Validate before calling
if st, err := os.Stat(beadsDir); err != nil || !st.IsDir() {
return fmt.Errorf("beads dir %s not usable: %w", beadsDir, err)
} Prevention
- Ensure the beads directory is created (os.MkdirAll beadsDir 0700) before saving.
- Run bd under the same user that owns ~/.beads.
- Check free disk space and that the filesystem is not mounted read-only.
- Confirm BEADS_DIR points at a writable location.
When it happens
Trigger: os.WriteFile fails on ProxiedServerClientInfoPath(beadsDir): the .beads directory does not exist, the file/dir is read-only, disk is full, or permission is denied for the current user.
Common situations: Running bd as a different user than the one who owns ~/.beads; read-only filesystem or container; disk quota exceeded; beadsDir pointing at a deleted or never-created directory.
Related errors
- failed to read backup state: %w
- failed to write temp file: %w
- failed to sync temp file: %w
- failed to write issue %s: %w
- failed to create output file: %w
AI-assisted analysis of gastownhall/beads@71377f2769 (2026-08-30).
Data as JSON: /api/errors/455d0c920c6ef457.
Report an issue: GitHub.