diff --git a/cmd/bd/compact.go b/cmd/bd/compact.go index 3c54e0d6..a482bb02 100644 --- a/cmd/bd/compact.go +++ b/cmd/bd/compact.go @@ -782,7 +782,7 @@ func init() { compactCmd.Flags().BoolVar(&compactApply, "apply", false, "Apply mode: accept agent-provided summary") compactCmd.Flags().BoolVar(&compactAuto, "auto", false, "Auto mode: AI-powered compaction (legacy)") compactCmd.Flags().BoolVar(&compactPrune, "prune", false, "Prune mode: remove expired tombstones from issues.jsonl (by age)") - compactCmd.Flags().IntVar(&compactOlderThan, "older-than", 0, "Prune tombstones older than N days (default: 30)") + compactCmd.Flags().IntVar(&compactOlderThan, "older-than", -1, "Prune tombstones older than N days (0=all, default: 30)") compactCmd.Flags().BoolVar(&compactPurgeTombstones, "purge-tombstones", false, "Purge mode: remove tombstones with no open deps (by dependency analysis)") compactCmd.Flags().StringVar(&compactSummary, "summary", "", "Path to summary file (use '-' for stdin)") compactCmd.Flags().StringVar(&compactActor, "actor", "agent", "Actor name for audit trail") diff --git a/cmd/bd/compact_tombstone.go b/cmd/bd/compact_tombstone.go index c0d4de30..3d5d26a2 100644 --- a/cmd/bd/compact_tombstone.go +++ b/cmd/bd/compact_tombstone.go @@ -175,10 +175,16 @@ func previewPruneTombstones(customTTL time.Duration) (*TombstonePruneResult, err func runCompactPrune() { start := time.Now() - // Calculate TTL from --older-than flag (0 means use default 30 days) + // Calculate TTL from --older-than flag + // -1 (default) = use 30 day default, 0 = expire all, >0 = N days var customTTL time.Duration - if compactOlderThan > 0 { - customTTL = time.Duration(compactOlderThan) * 24 * time.Hour + if compactOlderThan >= 0 { + if compactOlderThan == 0 { + // --older-than=0 means "expire all tombstones" + customTTL = 1 * time.Nanosecond + } else { + customTTL = time.Duration(compactOlderThan) * 24 * time.Hour + } } if compactDryRun {