gastownhall/beads · warning
issue %s is not eligible for Tier 1 compaction
Error message
issue %s is not eligible for Tier 1 compaction
What it means
Same policy rejection as the reasoned variant, but CheckEligibility returned eligible=false with an empty reason, so only the generic ineligibility message is produced. The store declined the compaction without explaining why.
Source
Thrown at internal/compact/compactor.go:102
}, nil
}
// CompactTier1 compacts a single issue at Tier 1 (basic summarization).
func (c *Compactor) CompactTier1(ctx context.Context, issueID string) error {
if ctx.Err() != nil {
return ctx.Err()
}
// Check eligibility before fetching issue (fail fast)
eligible, reason, err := c.store.CheckEligibility(ctx, issueID, 1)
if err != nil {
return fmt.Errorf("failed to verify eligibility: %w", err)
}
if !eligible {
if reason != "" {
return fmt.Errorf("issue %s is not eligible for Tier 1 compaction: %s", issueID, reason)
}
return fmt.Errorf("issue %s is not eligible for Tier 1 compaction", issueID)
}
issue, err := c.store.GetIssue(ctx, issueID)
if err != nil {
return fmt.Errorf("failed to fetch issue: %w", err)
}
// Calculate original size
originalSize := len(issue.Description) + len(issue.Design) + len(issue.Notes) + len(issue.AcceptanceCriteria)
if c.config.DryRun {
return fmt.Errorf("dry-run: would compact %s (original size: %d bytes)", issueID, originalSize)
}
// Get summary from AI
summary, err := c.summarizer.SummarizeTier1(ctx, issue)
if err != nil {
return fmt.Errorf("failed to summarize: %w", err)View on GitHub (pinned to 71377f2769)
Solutions
- Check the issue's state/size/compaction history manually to determine why it was rejected
- Call CheckEligibility directly to confirm the (bool, string) return values
- Upgrade or fix the store implementation so it populates the reason string
- Treat as a benign skip in batch workflows
Defensive patterns
Strategy: validation
Validate before calling
eligible, reason, err := store.CheckEligibility(ctx, issueID, 1)
if err == nil && !eligible {
// inspect the issue manually: closed? already compacted? too small?
iss, _ := store.GetIssue(ctx, issueID)
log.Printf("skip %s (reason empty, status=%v)", issueID, iss)
} Try / catch
if err := c.CompactTier1(ctx, id); err != nil {
if strings.Contains(err.Error(), "not eligible for Tier 1 compaction") {
return nil
}
return err
} Prevention
- Pre-check eligibility in batch scripts so generic rejections are expected
- Don't assume the reason will be populated — handle empty reasons in your store
- Inspect issue state directly when the store gives no explanation
When it happens
Trigger: Calling CompactTier1 on an issue where store.CheckEligibility(ctx, issueID, 1) returns (false, "", nil) — the default rejection path when the store provides no detailed reason.
Common situations: Storage backends that implement eligibility checks but return no reason string; older store implementations without detailed reason reporting; issue fails a rule the backend does not describe.
Related errors
- issue %s is not eligible for Tier 1 compaction: %s
- no store is open for this workspace
- not found
- no absolute native user directory is available
- ExternalDoltConfig: set either Socket OR (Host, Port), not b
AI-assisted analysis of gastownhall/beads@71377f2769 (2026-08-30).
Data as JSON: /api/errors/4ed1d2ab7c46d696.
Report an issue: GitHub.