gastownhall/beads · error
record bd_version: %w
Error message
record bd_version: %w
What it means
Wraps failure of cfg.SetLocalMetadata(ctx, workapi.MetadataKeyVersion, Version) — recording the bd binary version in LOCAL (clone-only) metadata during proxied init. Unlike the shared metadata keys, this one is per-clone, so failure points at the local side of the store. The wrapped error is the actual cause.
Source
Thrown at cmd/bd/init_proxied_server.go:383
cfg := uw.ConfigUseCase()
// An absent fingerprint is recorded as nothing rather than as "": an
// empty row reads back to cross-project verification as a clone whose
// fingerprint failed to compute.
if repoID != "" {
if err := cfg.SetMetadata(ctx, "repo_id", repoID); err != nil {
return "", fmt.Errorf("record repo_id: %w", err)
}
}
if cloneID != "" {
if err := cfg.SetMetadata(ctx, "clone_id", cloneID); err != nil {
return "", fmt.Errorf("record clone_id: %w", err)
}
}
if err := cfg.SetMetadata(ctx, "last_import_time", time.Now().UTC().Format(time.RFC3339)); err != nil {
return "", fmt.Errorf("record last_import_time: %w", err)
}
if err := cfg.SetLocalMetadata(ctx, workapi.MetadataKeyVersion, Version); err != nil {
return "", fmt.Errorf("record bd_version: %w", err)
}
return "bd init", nil
})
}
// configureProxiedInitDoltRemote adds the sync remote, skipping a name that is
// already taken.
func configureProxiedInitDoltRemote(ctx context.Context, provider uow.UnitOfWorkProvider, remoteURL string) error {
return uow.RunTx(ctx, provider, func(ctx context.Context, uw uow.UnitOfWork) (string, error) {
remotes, err := uw.DoltRemoteUseCase().ListRemotes(ctx)
if err != nil {
return "", fmt.Errorf("list remotes: %w", err)
}
for _, r := range remotes {
if r.Name == "origin" {
return "", nil
}
}View on GitHub (pinned to 71377f2769)
Solutions
- Check the local working directory is writable (mounts, permissions, disk space)
- Inspect/repair the local .bd metadata store (bd doctor) and re-run bd init
- Read the wrapped underlying error for the storage-level cause
Example fix
// before err: "record bd_version: permission denied" chmod u+w .bd # or fix the read-only mount // after bd init
Defensive patterns
Strategy: validation
Validate before calling
// ensure the local .bd store is writable before init
info, err := os.Stat(filepath.Join(root, ".bd"))
if err == nil && info.IsDir() {
if f, e := os.CreateTemp(filepath.Join(root, ".bd"), "w"); e != nil {
return fmt.Errorf(".bd not writable: %w", e)
} else { f.Close(); os.Remove(f.Name()) }
} Try / catch
if err != nil && strings.Contains(err.Error(), "record bd_version:") {
log.Printf("local metadata write failed: %v", errors.Unwrap(err))
// check filesystem permissions/mounts, run bd doctor, retry
} Prevention
- Run bd init from a writable working directory/mount
- Check disk space before init in CI containers
- Run bd doctor if local metadata may be corrupted
- Don't run init against read-only checkouts
When it happens
Trigger: bd init in team-server mode where the local metadata write of the bd version fails — local .bd metadata store corrupted, disk full, or local transaction failure after the shared writes succeeded.
Common situations: Corrupted or partially-migrated local metadata file; read-only working directory or filesystem; running init from a container with a read-only mount.
Related errors
- record repo_id: %w
- record clone_id: %w
- failed to load %s: %w; refusing to reinitialize automaticall
- record last_import_time: %w
- db: GetLocalMetadata %s: %w
AI-assisted analysis of gastownhall/beads@71377f2769 (2026-08-30).
Data as JSON: /api/errors/8152008f86f3faea.
Report an issue: GitHub.