{"record":{"id":"2bb1ac02b942140e","repo":"gastownhall/beads","slug":"proxied-server-provider-t-does-not-offer-the-stor","errorCode":null,"errorMessage":"proxied-server provider %T does not offer the stored-edge surface","messagePattern":"proxied-server provider %T does not offer the stored-edge surface","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"cmd/bd/dep_proxied_server.go","lineNumber":61,"sourceCode":"\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.\n//\n// skipPerEdgeCycleCheck is a separate argument from the --no-cycle-check flag\n// on purpose. That flag has never turned the per-edge probe off for a single\n// edge on either route — it turns off the whole-graph sweep this command\n// prints warnings from. Only the bulk path trades the per-edge probe away, and\n// only because it always has.\nfunc addDependencyEdgesProxied(ctx context.Context, edges []issueops.DependencyEdge, skipPerEdgeCycleCheck bool) error {\n\teditor, err := proxiedDependencyEditor()\n\tif err != nil {\n\t\treturn err\n\t}\n\t_, err = editor.AddDependencies(ctx, issueops.AddDependenciesRequest{\n\t\tActor:                 actor,","sourceCodeStart":43,"sourceCodeEnd":79,"githubUrl":"https://github.com/gastownhall/beads/blob/71377f276968b452ee607177637970a4ff888584/cmd/bd/dep_proxied_server.go#L43-L79","documentation":"In direct-storage mode, dependency commands that need stored edges call proxiedEdgeReader, which type-asserts the global uowProvider to the uow.EdgeReaderSource capability interface. If the provider was initialized as something that does not implement EdgeReader (no EdgeReader() accessor), the assertion fails and this error is returned. It signals a provider/backend wiring problem: the active provider implementation lacks the stored-edge capability surface required by bd dep list.","triggerScenarios":"Running a proxied-server-route command (runDepListProxiedServer or runDepListRecordsProxiedServer) when uowProvider is non-nil but does not implement uow.EdgeReaderSource; e.g. a custom or older provider implementation injected before the EdgeReaderSource surface was added, or a test/stub provider missing EdgeReader().","commonSituations":"A stale or hand-built bd binary whose provider wiring predates the EdgeReaderSource interface; unit-test fakes for uowProvider that implement only part of the capability set; plugin or embedded use of bd where a minimal provider type is substituted for the real Dolt-backed provider.","solutions":["Check the concrete type printed in the error (%T) and confirm it implements uow.EdgeReaderSource with an EdgeReader() method.","Rebuild bd from current source so the standard Dolt-backed provider (which implements all capability sources) is used.","If a custom/stub provider is intentionally injected, add an EdgeReader() accessor that satisfies uow.EdgeReaderSource.","Verify uowProvider is initialized by the normal startup path, not overridden by test scaffolding or an env/config override."],"exampleFix":"// before: stub provider missing the edge surface\ntype stubProvider struct{}\n// after: add the capability accessor\nfunc (p *stubProvider) EdgeReader() (issueops.EdgeReader, error) { return p.store, nil }\nvar _ uow.EdgeReaderSource = (*stubProvider)(nil)","handlingStrategy":"type-guard","validationCode":"if uowProvider == nil { return errors.New(\"UOW provider not initialized\") }\nif _, ok := uowProvider.(uow.EdgeReaderSource); !ok {\n    return fmt.Errorf(\"provider %T lacks EdgeReaderSource\", uowProvider)\n}","typeGuard":"func hasEdgeReader(p uow.Provider) bool { _, ok := p.(uow.EdgeReaderSource); return ok }","tryCatchPattern":"reader, err := proxiedEdgeReader()\nif err != nil {\n    return fmt.Errorf(\"stored-edge surface unavailable: %w\", err)\n}","preventionTips":["Assert compile-time interface conformance: var _ uow.EdgeReaderSource = (*myProvider)(nil).","Use the standard Dolt-backed provider instead of hand-rolled stubs in production paths.","When adding a capability source, update all test fakes to implement it.","Log the provider's concrete type at startup to catch wiring regressions early."],"tags":["go","type-assertion","capability-interface","dependency-commands"],"backgroundTag":"provider-missing-capability-surface","analyzedSha":"71377f276968b452ee607177637970a4ff888584","analyzedAt":"2026-08-30T18:55:39.744Z","schemaVersion":2},"datasetVersion":"2026-08-30T23:17:21.991Z"}