{"record":{"id":"c1a6e761b473f335","repo":"gastownhall/beads","slug":"proxied-server-provider-t-does-not-offer-the-depe-c1a6e7","errorCode":null,"errorMessage":"proxied-server provider %T does not offer the dependency-tree surface","messagePattern":"proxied-server provider %T does not offer the dependency-tree surface","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"cmd/bd/dep_tree.go","lineNumber":74,"sourceCode":"// THIS ROUTE GAINS PARTIAL-ID RESOLUTION, which it has never had: it passed the\n// argument to the use case verbatim, so `bd dep tree a1b2` worked on a direct\n// workspace and failed on a team server.\nfunc proxiedTreeTarget(ctx context.Context, arg string) (treeTarget, error) {\n\tuw, err := proxiedOpenReadUOW(ctx)\n\tif err != nil {\n\t\treturn treeTarget{}, err\n\t}\n\trootID, err := utils.ResolvePartialID(ctx, uowMolReader{uw: uw}, arg)\n\tuw.Close(ctx)\n\tif err != nil {\n\t\treturn treeTarget{}, fmt.Errorf(\"resolving issue ID %s: %w\", arg, err)\n\t}\n\tif uowProvider == nil {\n\t\treturn treeTarget{}, errors.New(\"proxied-server UOW provider not initialized\")\n\t}\n\tsrc, ok := uowProvider.(uow.TreeWalkerSource)\n\tif !ok {\n\t\treturn treeTarget{}, fmt.Errorf(\"proxied-server provider %T does not offer the dependency-tree surface\", uowProvider)\n\t}\n\twalker, err := src.TreeWalker()\n\tif err != nil {\n\t\treturn treeTarget{}, err\n\t}\n\treturn treeTarget{rootID: rootID, walker: walker, cleanup: func() {}}, nil\n}\n\n// runDepTree is the whole of `bd dep tree` on both routes.\nfunc runDepTree(cmd *cobra.Command, ctx context.Context, args []string) error {\n\tmaxDepth, _ := cmd.Flags().GetInt(\"max-depth\")\n\treverse, _ := cmd.Flags().GetBool(\"reverse\")\n\tdirectionFlag, _ := cmd.Flags().GetString(\"direction\")\n\tstatusFilter, _ := cmd.Flags().GetString(\"status\")\n\tformatStr, _ := cmd.Flags().GetString(\"format\")\n\tif strings.EqualFold(formatStr, \"json\") {\n\t\tjsonOutput = true\n\t\tformatStr = \"\"","sourceCodeStart":56,"sourceCodeEnd":92,"githubUrl":"https://github.com/gastownhall/beads/blob/71377f276968b452ee607177637970a4ff888584/cmd/bd/dep_tree.go#L56-L92","documentation":"After resolving the tree target, proxiedTreeTarget type-asserts uowProvider to uow.TreeWalkerSource to obtain a dependency-tree walker. If the provider does not implement that capability interface, this error is returned. It means the active provider lacks the dependency-tree surface, so tree traversal cannot proceed on the proxied route.","triggerScenarios":"Calling resolveTreeTarget when uowProvider is non-nil but does not implement uow.TreeWalkerSource — e.g. a minimal or legacy provider implementation without a TreeWalker() accessor, or test scaffolding substituting an incomplete provider.","commonSituations":"Stale bd binary predating the TreeWalkerSource capability; custom embedded providers implementing only read/write basics; test fakes missing TreeWalker(); build-tag variants excluding the tree surface from the provider.","solutions":["Check the concrete provider type in the error message and add/implement uow.TreeWalkerSource (TreeWalker() method) on it.","Rebuild bd from current source so the standard provider with the tree surface is used.","Ensure no test or embedded override replaces the default Dolt-backed provider for tree commands.","If the surface is genuinely unsupported in your build, run the equivalent operation against a full storage backend."],"exampleFix":"// before: provider lacks tree surface\n// after: satisfy the capability interface\nfunc (p *myProvider) TreeWalker() (uow.TreeWalker, error) { return newWalker(p.store), nil }\nvar _ uow.TreeWalkerSource = (*myProvider)(nil)","handlingStrategy":"type-guard","validationCode":"if uowProvider == nil { return errors.New(\"UOW provider not initialized\") }\nif _, ok := uowProvider.(uow.TreeWalkerSource); !ok {\n    return fmt.Errorf(\"provider %T lacks TreeWalkerSource\", uowProvider)\n}","typeGuard":"func hasTreeWalker(p uow.Provider) bool { _, ok := p.(uow.TreeWalkerSource); return ok }","tryCatchPattern":"target, err := proxiedTreeTarget(ctx, arg)\nif err != nil {\n    return fmt.Errorf(\"tree surface unavailable: %w\", err)\n}","preventionTips":["Add compile-time checks: var _ uow.TreeWalkerSource = (*myProvider)(nil).","Keep test fakes in sync with the full capability interface set.","Rebuild bd after pulling changes that add new provider surfaces.","Avoid substituting minimal providers for tree commands."],"tags":["go","type-assertion","capability-interface","dependency-tree"],"backgroundTag":"provider-missing-capability-surface","analyzedSha":"71377f276968b452ee607177637970a4ff888584","analyzedAt":"2026-08-30T18:55:39.744Z","schemaVersion":2},"datasetVersion":"2026-08-30T23:17:21.991Z"}