gastownhall/beads · error

proxied-server provider %T does not offer the dependency-tre

Error message

proxied-server provider %T does not offer the dependency-tree surface

What it means

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.

Source

Thrown at cmd/bd/dep_tree.go:74

// THIS ROUTE GAINS PARTIAL-ID RESOLUTION, which it has never had: it passed the
// argument to the use case verbatim, so `bd dep tree a1b2` worked on a direct
// workspace and failed on a team server.
func proxiedTreeTarget(ctx context.Context, arg string) (treeTarget, error) {
	uw, err := proxiedOpenReadUOW(ctx)
	if err != nil {
		return treeTarget{}, err
	}
	rootID, err := utils.ResolvePartialID(ctx, uowMolReader{uw: uw}, arg)
	uw.Close(ctx)
	if err != nil {
		return treeTarget{}, fmt.Errorf("resolving issue ID %s: %w", arg, err)
	}
	if uowProvider == nil {
		return treeTarget{}, errors.New("proxied-server UOW provider not initialized")
	}
	src, ok := uowProvider.(uow.TreeWalkerSource)
	if !ok {
		return treeTarget{}, fmt.Errorf("proxied-server provider %T does not offer the dependency-tree surface", uowProvider)
	}
	walker, err := src.TreeWalker()
	if err != nil {
		return treeTarget{}, err
	}
	return treeTarget{rootID: rootID, walker: walker, cleanup: func() {}}, nil
}

// runDepTree is the whole of `bd dep tree` on both routes.
func runDepTree(cmd *cobra.Command, ctx context.Context, args []string) error {
	maxDepth, _ := cmd.Flags().GetInt("max-depth")
	reverse, _ := cmd.Flags().GetBool("reverse")
	directionFlag, _ := cmd.Flags().GetString("direction")
	statusFilter, _ := cmd.Flags().GetString("status")
	formatStr, _ := cmd.Flags().GetString("format")
	if strings.EqualFold(formatStr, "json") {
		jsonOutput = true
		formatStr = ""

View on GitHub (pinned to 71377f2769)

Solutions

  1. Check the concrete provider type in the error message and add/implement uow.TreeWalkerSource (TreeWalker() method) on it.
  2. Rebuild bd from current source so the standard provider with the tree surface is used.
  3. Ensure no test or embedded override replaces the default Dolt-backed provider for tree commands.
  4. If the surface is genuinely unsupported in your build, run the equivalent operation against a full storage backend.

Example fix

// before: provider lacks tree surface
// after: satisfy the capability interface
func (p *myProvider) TreeWalker() (uow.TreeWalker, error) { return newWalker(p.store), nil }
var _ uow.TreeWalkerSource = (*myProvider)(nil)
Defensive patterns

Strategy: type-guard

Validate before calling

if uowProvider == nil { return errors.New("UOW provider not initialized") }
if _, ok := uowProvider.(uow.TreeWalkerSource); !ok {
    return fmt.Errorf("provider %T lacks TreeWalkerSource", uowProvider)
}

Type guard

func hasTreeWalker(p uow.Provider) bool { _, ok := p.(uow.TreeWalkerSource); return ok }

Try / catch

target, err := proxiedTreeTarget(ctx, arg)
if err != nil {
    return fmt.Errorf("tree surface unavailable: %w", err)
}

Prevention

When it happens

Trigger: 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.

Common situations: 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.

Related errors


AI-assisted analysis of gastownhall/beads@71377f2769 (2026-08-30). Data as JSON: /api/errors/c1a6e761b473f335. Report an issue: GitHub.