gastownhall/beads · error
proxied-server provider %T does not offer the dependency-edg
Error message
proxied-server provider %T does not offer the dependency-edge surface
What it means
proxiedDependencyEditor guards the dependency mutation surface: in proxied-server mode the UOW provider must implement uow.DependencyEditorSource before add/remove dependency edges can run. If the concrete provider type lacks that interface, this error reports the type via %T.
Source
Thrown at cmd/bd/dep_proxied_server.go:35
type depAddResult struct {
fromTitle string
toTitle string
cycles []issueops.Cycle
cycleErr error
}
// proxiedDependencyEditor hands back the guarded dependency-edge surface for
// the proxied-server provider, through the provider's OWN capability accessor
// — the same two-step proxiedIssueReader and proxiedBatchCloser perform, and
// for the same reason: the accessor is where each layer is added, so a command
// that reached for the constructor would get an unlayered editor.
func proxiedDependencyEditor() (issueops.DependencyEditor, error) {
if uowProvider == nil {
return nil, errors.New("proxied-server UOW provider not initialized")
}
src, ok := uowProvider.(uow.DependencyEditorSource)
if !ok {
return nil, fmt.Errorf("proxied-server provider %T does not offer the dependency-edge surface", uowProvider)
}
return src.DependencyEditor()
}
// proxiedIssueRelations hands back the guarded neighbor-query surface for the
// proxied-server provider, through the provider's own capability accessor.
func proxiedIssueRelations() (issueops.Relations, error) {
if uowProvider == nil {
return nil, errors.New("proxied-server UOW provider not initialized")
}
src, ok := uowProvider.(uow.RelationsSource)
if !ok {
return nil, fmt.Errorf("proxied-server provider %T does not offer the neighbor-query surface", uowProvider)
}
return src.IssueRelations()
}
// proxiedEdgeReader hands back the guarded stored-edge surface for theView on GitHub (pinned to 71377f2769)
Solutions
- Upgrade and restart the bd server so its provider implements uow.DependencyEditorSource.
- Confirm client/server version parity (bd --version on both; bd doctor).
- If a custom provider is in use, add the DependencyEditor() accessor satisfying uow.DependencyEditorSource.
- Fall back to direct local (non-proxied) dependency add/remove if the server cannot be upgraded.
Example fix
// before: read-only provider in proxied mode // proxied-server provider *server.ROProvider does not offer the dependency-edge surface // after: run server with full provider bd server stop && bd server start # full provider implements uow.DependencyEditorSource
Defensive patterns
Strategy: type-guard
Validate before calling
if _, ok := uowProvider.(uow.DependencyEditorSource); !ok {
fmt.Fprintln(os.Stderr, "server lacks dependency-edge surface; upgrade bd server")
os.Exit(1)
} Type guard
func hasDependencyEditor(p any) bool {
_, ok := p.(uow.DependencyEditorSource)
return ok
} Try / catch
editor, err := proxiedDependencyEditor()
if err != nil {
if strings.Contains(err.Error(), "dependency-edge surface") {
return fmt.Errorf("server cannot edit dependencies; upgrade bd server or edit locally: %w", err)
}
return err
} Prevention
- Avoid read-only providers in proxied mode if writes are needed.
- Pin matching client/server versions in deployment manifests.
- Verify provider interfaces in custom-provider unit tests with compile-time assertions (var _ uow.DependencyEditorSource = (*MyProvider)(nil)).
When it happens
Trigger: Running dependency add/remove through the proxied server route (addDependencyEdgesProxied or runDepRemoveProxiedServer) when uowProvider does not satisfy DependencyEditorSource.
Common situations: Version skew: old server daemon without the dependency-edge surface serving a newer client; a read-only or custom provider plugged in that only supports queries; embedded mode wiring the wrong provider implementation.
Related errors
- proxied-server provider %T does not offer the neighbor-query
- proxied-server provider %T does not offer the cycle-report s
- load blocking info: %w
- no store is open for this workspace
- no absolute native user directory is available
AI-assisted analysis of gastownhall/beads@71377f2769 (2026-08-30).
Data as JSON: /api/errors/d691273589e496d5.
Report an issue: GitHub.