gastownhall/beads · error

GetStatistics: %w

Error message

GetStatistics: %w

What it means

Pass-through wrapper from GetStatistics in the issue use-case: wraps errors from issueRepo.GetStatistics, which aggregates issue counts by status/priority across the whole database. Any failure computing these aggregates in storage surfaces as 'GetStatistics: <root cause>'.

Source

Thrown at internal/storage/domain/issue.go:1825

			return ClaimReadyResult{}, fmt.Errorf("ClaimReadyWisp: %w", err)
		}
		return ClaimReadyResult{}, fmt.Errorf("ClaimReadyIssue: %w", err)
	}
	return ClaimReadyResult{Issue: issue, Claimed: issue != nil}, nil
}

func (u *issueUseCaseImpl) GetBlockedIssues(ctx context.Context, filter types.WorkFilter) ([]*types.BlockedIssue, error) {
	out, err := u.issueRepo.GetBlockedIssues(ctx, filter)
	if err != nil {
		return nil, fmt.Errorf("GetBlockedIssues: %w", err)
	}
	return out, nil
}

func (u *issueUseCaseImpl) GetStatistics(ctx context.Context) (*types.Statistics, error) {
	out, err := u.issueRepo.GetStatistics(ctx)
	if err != nil {
		return nil, fmt.Errorf("GetStatistics: %w", err)
	}
	return out, nil
}

func (u *issueUseCaseImpl) CountIssues(ctx context.Context, query string, filter types.IssueFilter) (int64, error) {
	out, err := u.issueRepo.CountIssues(ctx, query, filter)
	if err != nil {
		return 0, fmt.Errorf("CountIssues: %w", err)
	}
	return out, nil
}

func (u *issueUseCaseImpl) CountIssuesByGroup(ctx context.Context, filter types.IssueFilter, groupBy string) (map[string]int, error) {
	out, err := u.issueRepo.CountIssuesByGroup(ctx, filter, groupBy)
	if err != nil {
		return nil, fmt.Errorf("CountIssuesByGroup: %w", err)
	}
	return out, nil

View on GitHub (pinned to 71377f2769)

Solutions

  1. Inspect the wrapped error after 'GetStatistics:' for the root cause
  2. Retry on transient errors; verify database connectivity
  3. For timeouts on huge datasets, ensure indexes/compaction are up to date
  4. Confirm schema is fully migrated after upgrading beads
Defensive patterns

Strategy: try-catch

Try / catch

stats, err := uc.GetStatistics(ctx)
if err != nil {
    log.Warnf("statistics unavailable: %v", err)
    return nil
}

Prevention

When it happens

Trigger: Calling GetStatistics(ctx) when the repository's aggregate queries fail — typically database unavailability, timeout on large datasets, or schema mismatch in aggregate views.

Common situations: Dashboard/status commands run against a very large issue database timing out; DB connection dropped; partial migration leaving aggregate queries referencing missing columns.

Related errors


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