gastownhall/beads · error

load blocking info: %w

Error message

load blocking info: %w

What it means

renderProxiedListText decorates listed issues with blocking info via the BlockingAnnotator; this wraps AnnotateBlocking failures. The core list query succeeded, but fetching which issues block the listed ones failed while rendering text output.

Source

Thrown at cmd/bd/list_proxied_server.go:267

	labelsMap := make(map[string][]string, len(issues))
	for i, issue := range issues {
		issueIDs[i] = issue.ID
		if len(issue.Labels) > 0 {
			labelsMap[issue.ID] = issue.Labels
		}
	}

	// The decoration, onto issueops.BlockingAnnotator. This route FAILS on the
	// read where the direct one swallows it, and both are kept exactly as they
	// were: converging them is a behavior decision recorded for the owner
	// (AMBIGUITIES.md, A-blk-1) rather than taken here.
	annotator, err := proxiedBlockingAnnotator()
	if err != nil {
		return err
	}
	result, err := annotator.AnnotateBlocking(ctx, issueops.BlockingRequest{IDs: issueIDs})
	if err != nil {
		return fmt.Errorf("load blocking info: %w", err)
	}
	blocking := newListBlocking(result)

	var buf strings.Builder
	switch {
	case ui.IsAgentMode():
		for _, issue := range issues {
			formatAgentIssue(&buf, issue, blocking.blockedBy[issue.ID], blocking.blocks[issue.ID], blocking.parent[issue.ID])
		}
		fmt.Print(buf.String())
		printTruncationHint(truncated, in.effectiveLimit)
		return nil
	case in.longFormat:
		buf.WriteString(fmt.Sprintf("\nFound %d issues:\n\n", len(issues)))
		for _, issue := range issues {
			formatIssueLong(&buf, issue, labelsMap[issue.ID], in.SkipLabels)
		}
	default:

View on GitHub (pinned to 71377f2769)

Solutions

  1. Retry the command — often transient
  2. Check daemon/storage health (`bd doctor`)
  3. Reduce --limit so fewer IDs are annotated per request
  4. Use --json output, which may skip text-only blocking decoration
Defensive patterns

Strategy: retry

Validate before calling

# Check storage/daemon health before large annotated lists
bd doctor >/dev/null 2>&1 || exit 1
bd list --limit 500 >/dev/null 2>&1 || { echo "list backend failing"; exit 1; }

Try / catch

for i in 1 2 3; do
  bd list --status open && break
  sleep $((i*i))  # 'load blocking info' is often transient
done

Prevention

When it happens

Trigger: Any proxied text-mode list render (pretty/agent/compact) where annotator.AnnotateBlocking(ctx, BlockingRequest{IDs: ...}) errors — storage/daemon failure during the blocking-relationship query for the listed IDs.

Common situations: Daemon connection lost mid-command, large ID batches timing out, or backend storage errors while reading dependency/blocking relationships.

Related errors


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