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
- Upgrade bd (client and daemon/server) so both sides support the blocking-decoration surface
- Verify no custom/test UOW provider is being injected (build tags, env, config)
- If the provider can't be changed, use --json output to avoid text blocking decoration
- 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
- Keep bd client and daemon on the same version
- Only inject UOW providers that implement BlockingAnnotatorSource
- Design consumers to degrade to --json when decoration is unavailable
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
- proxied-server provider %T does not offer the batch-create s
- storage backend does not support backup operations
- proxied-server provider %T does not offer the batch-close su
- proxied-server provider %T does not offer the add-comment su
- resolve proxied server root: %w
AI-assisted analysis of gastownhall/beads@71377f2769 (2026-08-30).
Data as JSON: /api/errors/38738809144b6d54.
Report an issue: GitHub.