{"record":{"id":"00a714fec9d0b9f5","repo":"gastownhall/beads","slug":"proxied-server-provider-t-does-not-offer-the-neig","errorCode":null,"errorMessage":"proxied-server provider %T does not offer the neighbor-query surface","messagePattern":"proxied-server provider %T does not offer the neighbor-query surface","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"cmd/bd/dep_proxied_server.go","lineNumber":48,"sourceCode":"\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\n// proxied-server provider, through the provider's own capability accessor.\nfunc proxiedEdgeReader() (issueops.EdgeReader, error) {\n\tif uowProvider == nil {\n\t\treturn nil, errors.New(\"proxied-server UOW provider not initialized\")\n\t}\n\tsrc, ok := uowProvider.(uow.EdgeReaderSource)\n\tif !ok {\n\t\treturn nil, fmt.Errorf(\"proxied-server provider %T does not offer the stored-edge surface\", uowProvider)\n\t}\n\treturn src.EdgeReader()\n}\n\n// addDependencyEdgesProxied asserts edges through the DependencyEditor role.","sourceCodeStart":30,"sourceCodeEnd":66,"githubUrl":"https://github.com/gastownhall/beads/blob/71377f276968b452ee607177637970a4ff888584/cmd/bd/dep_proxied_server.go#L30-L66","documentation":"proxiedIssueRelations checks that the proxied-server UOW provider implements uow.RelationsSource before handing back the neighbor-query surface for `bd dep list`. If the provider type lacks it, this error names the type. It protects list operations from providers that cannot enumerate issue relations.","triggerScenarios":"Running `bd dep list` via the proxied-server route (runDepListProxiedServer) when the provider's concrete type does not implement RelationsSource.","commonSituations":"Older server daemon predating the relations surface; a minimal/custom provider implementing only edge writes but not neighbor queries; wrong provider wired in embedded/proxied configuration.","solutions":["Upgrade the bd server daemon and restart so RelationsSource is available.","Check version parity between client and server (bd --version; bd doctor).","If using a custom provider, implement uow.RelationsSource (IssueRelations() accessor).","Query dependencies directly against the local database (non-proxied route) as an interim workaround."],"exampleFix":"// before: minimal provider without relations\n// proxied-server provider *server.MinimalProvider does not offer the neighbor-query surface\n\n// after: full provider via server restart\nbd server stop && bd server start  # provider implements uow.RelationsSource","handlingStrategy":"type-guard","validationCode":"if _, ok := uowProvider.(uow.RelationsSource); !ok {\n\tfmt.Fprintln(os.Stderr, \"server lacks neighbor-query surface; upgrade bd server\")\n\tos.Exit(1)\n}","typeGuard":"func hasRelationsSource(p any) bool {\n\t_, ok := p.(uow.RelationsSource)\n\treturn ok\n}","tryCatchPattern":"rel, err := proxiedIssueRelations()\nif err != nil {\n\tif strings.Contains(err.Error(), \"neighbor-query surface\") {\n\t\treturn fmt.Errorf(\"`bd dep list` unavailable via this server; upgrade server or query locally: %w\", err)\n\t}\n\treturn err\n}","preventionTips":["Upgrade and restart the server daemon before using proxied dep list in scripts.","Compile-time assert custom providers implement uow.RelationsSource.","Fall back to local database queries when the proxied provider is minimal.","Monitor bd release notes for new capability surfaces and gate tooling on them."],"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"}