{"record":{"id":"d691273589e496d5","repo":"gastownhall/beads","slug":"proxied-server-provider-t-does-not-offer-the-depe","errorCode":null,"errorMessage":"proxied-server provider %T does not offer the dependency-edge surface","messagePattern":"proxied-server provider %T does not offer the dependency-edge surface","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"cmd/bd/dep_proxied_server.go","lineNumber":35,"sourceCode":"type depAddResult struct {\n\tfromTitle string\n\ttoTitle   string\n\tcycles    []issueops.Cycle\n\tcycleErr  error\n}\n\n// proxiedDependencyEditor hands back the guarded dependency-edge surface for\n// the proxied-server provider, through the provider's OWN capability accessor\n// — the same two-step proxiedIssueReader and proxiedBatchCloser perform, and\n// for the same reason: the accessor is where each layer is added, so a command\n// that reached for the constructor would get an unlayered editor.\nfunc proxiedDependencyEditor() (issueops.DependencyEditor, error) {\n\tif uowProvider == nil {\n\t\treturn nil, errors.New(\"proxied-server UOW provider not initialized\")\n\t}\n\tsrc, ok := uowProvider.(uow.DependencyEditorSource)\n\tif !ok {\n\t\treturn nil, fmt.Errorf(\"proxied-server provider %T does not offer the dependency-edge surface\", uowProvider)\n\t}\n\treturn src.DependencyEditor()\n}\n\n// proxiedIssueRelations hands back the guarded neighbor-query surface for the\n// proxied-server provider, through the provider's own capability accessor.\nfunc proxiedIssueRelations() (issueops.Relations, error) {\n\tif uowProvider == nil {\n\t\treturn nil, errors.New(\"proxied-server UOW provider not initialized\")\n\t}\n\tsrc, ok := uowProvider.(uow.RelationsSource)\n\tif !ok {\n\t\treturn nil, fmt.Errorf(\"proxied-server provider %T does not offer the neighbor-query surface\", uowProvider)\n\t}\n\treturn src.IssueRelations()\n}\n\n// proxiedEdgeReader hands back the guarded stored-edge surface for the","sourceCodeStart":17,"sourceCodeEnd":53,"githubUrl":"https://github.com/gastownhall/beads/blob/71377f276968b452ee607177637970a4ff888584/cmd/bd/dep_proxied_server.go#L17-L53","documentation":"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.","triggerScenarios":"Running dependency add/remove through the proxied server route (addDependencyEdgesProxied or runDepRemoveProxiedServer) when uowProvider does not satisfy DependencyEditorSource.","commonSituations":"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.","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."],"exampleFix":"// before: read-only provider in proxied mode\n// proxied-server provider *server.ROProvider does not offer the dependency-edge surface\n\n// after: run server with full provider\nbd server stop && bd server start  # full provider implements uow.DependencyEditorSource","handlingStrategy":"type-guard","validationCode":"if _, ok := uowProvider.(uow.DependencyEditorSource); !ok {\n\tfmt.Fprintln(os.Stderr, \"server lacks dependency-edge surface; upgrade bd server\")\n\tos.Exit(1)\n}","typeGuard":"func hasDependencyEditor(p any) bool {\n\t_, ok := p.(uow.DependencyEditorSource)\n\treturn ok\n}","tryCatchPattern":"editor, err := proxiedDependencyEditor()\nif err != nil {\n\tif strings.Contains(err.Error(), \"dependency-edge surface\") {\n\t\treturn fmt.Errorf(\"server cannot edit dependencies; upgrade bd server or edit locally: %w\", err)\n\t}\n\treturn err\n}","preventionTips":["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))."],"tags":["capability-mismatch","proxied-server","version-mismatch","dependencies"],"backgroundTag":"unsupported-capability","analyzedSha":"71377f276968b452ee607177637970a4ff888584","analyzedAt":"2026-08-30T18:55:39.744Z","schemaVersion":2},"datasetVersion":"2026-08-30T23:17:21.991Z"}