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

  1. Check the local working directory is writable (mounts, permissions, disk space)
  2. Inspect/repair the local .bd metadata store (bd doctor) and re-run bd init
  3. 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

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


AI-assisted analysis of gastownhall/beads@71377f2769 (2026-08-30). Data as JSON: /api/errors/8152008f86f3faea. Report an issue: GitHub.