gastownhall/beads · error

proxied-server provider %T does not offer the blocking-decor

Error message

proxied-server provider %T does not offer the blocking-decoration surface

What it means

proxiedBlockingAnnotator requires the configured UOW provider to implement uow.BlockingAnnotatorSource. This error fires when a provider implementation lacks that capability surface, meaning blocking decoration cannot be performed in this proxied setup. It's a capability/capability-mismatch error, not a transient failure.

Source

Thrown at cmd/bd/list_roles.go:88

	if err != nil {
		return newListBlocking(issueops.BlockingResult{})
	}
	result, err := annotator.AnnotateBlocking(ctx, issueops.BlockingRequest{IDs: ids})
	if err != nil {
		return newListBlocking(issueops.BlockingResult{})
	}
	return newListBlocking(result)
}

// proxiedBlockingAnnotator hands back the guarded blocking-decoration surface
// for the proxied-server provider, through the provider's own accessor.
func proxiedBlockingAnnotator() (issueops.BlockingAnnotator, error) {
	if uowProvider == nil {
		return nil, errors.New("proxied-server UOW provider not initialized")
	}
	src, ok := uowProvider.(uow.BlockingAnnotatorSource)
	if !ok {
		return nil, fmt.Errorf("proxied-server provider %T does not offer the blocking-decoration surface", uowProvider)
	}
	return src.BlockingAnnotator()
}

View on GitHub (pinned to 71377f2769)

Solutions

  1. Upgrade bd (client and daemon/server) so both sides support the blocking-decoration surface
  2. Verify no custom/test UOW provider is being injected (build tags, env, config)
  3. If the provider can't be changed, use --json output to avoid text blocking decoration
  4. File/check an issue if your provider should implement BlockingAnnotatorSource

Example fix

// before: provider missing the surface
func (p *MyProvider) NewUOW(ctx) (uow.UnitOfWork, error) {...}
// after: implement the source interface
func (p *MyProvider) BlockingAnnotator() (issueops.BlockingAnnotator, error) {...}
var _ uow.BlockingAnnotatorSource = (*MyProvider)(nil)
Defensive patterns

Strategy: type-guard

Validate before calling

// bd-side check is internal; scripts can probe by behavior:
// if text list fails with 'blocking-decoration surface', switch to --json
out=$(bd list 2>&1) || case "$out" in
  *"blocking-decoration surface"*) exec bd list --json;; *) echo "$out";; esac

Type guard

// Go-side capability check mirroring the library's guard
src, ok := uowProvider.(uow.BlockingAnnotatorSource)
if !ok { /* provider lacks blocking decoration; skip decoration or use json */ }

Try / catch

// Degrade gracefully when the capability is absent
if bd list 2>&1 | grep -q 'blocking-decoration surface'; then
  bd list --json # fall back to output without text decoration
fi

Prevention

When it happens

Trigger: renderProxiedListText → proxiedBlockingAnnotator when the registered uowProvider's concrete type does not implement BlockingAnnotatorSource — e.g. an older or alternative provider wired in proxied mode.

Common situations: Mixed-version setup (daemon/provider built without the blocking-decoration interface), custom or test provider injected via uowProvider, or running a new bd client against an older proxied server.

Related errors


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