### lane_preserve_branch
[] rc=0
[]
[factory/abandoned/T-1-20261018-000000]
again (idempotent) [factory/abandoned/T-1-20261018-000000]
-- worktrees:
   worktree <T>/ctl
   HEAD <base>
   branch refs/heads/main
   worktree <T>/ctl/harness/state/lanes/1
   HEAD <T-1 work>
   branch refs/heads/factory/task/T-1
-- branches: factory/task/T-1 main 
-- tags: factory/abandoned/T-1-20261018-000000 
### lane_worktree_is_dirty / lane_free_slot
clean: dirty rc=1
empty: dirty rc=1
untracked file: dirty rc=0
free a dirty slot rc=1 kept=[yes]
free a clean slot rc=0 gone=[yes]
free a missing slot rc=0
free nothing rc=0
-- worktrees:
   worktree <T>/ctl
   HEAD <base>
   branch refs/heads/main
-- branches: factory/task/T-1 main 
-- tags: factory/abandoned/T-1-20261018-000000 
### the prune verb's inputs
-- lane_abandoned_tags:
   factory/abandoned/T-1-20260901-000000
   factory/abandoned/T-1-20261018-000000
   factory/abandoned/T-GONE-20260904-000000
   factory/abandoned/T-MOVED-20260902-000000
   factory/abandoned/T-WT-20260903-000000
   factory/abandoned/T-YOUNG-20261015-000000
   factory/abandoned/handmade
   factory/abandoned/T-1-20260901-000000 branch=[factory/task/T-1]
   factory/abandoned/T-MOVED-20260902-000000 branch=[factory/task/T-MOVED]
   factory/abandoned/T-GONE-20260904-000000 branch=[]
   factory/abandoned/handmade branch=[]
   T-1 preserved rc=0
   T-MOVED preserved rc=1
   missing branch rc=1
   worktree on T-WT=[<T>/wt-T-WT] on T-1=[]
### lane_prune_abandoned (plan only, explicit clock)
REMOVE	factory/abandoned/T-1-20260901-000000	47	factory/task/T-1		tag + branch
KEEP	factory/abandoned/T-1-20261018-000000	0	factory/task/T-1		younger than the 14d threshold
REMOVE	factory/abandoned/T-GONE-20260904-000000	44			tag
REMOVE	factory/abandoned/T-MOVED-20260902-000000	46			tag only — factory/task/T-MOVED has moved past the tag and is NOT deleted
REMOVE	factory/abandoned/T-WT-20260903-000000	45	factory/task/T-WT	<T>/wt-T-WT	tag + branch + worktree
KEEP	factory/abandoned/T-YOUNG-20261015-000000	3	factory/task/T-YOUNG		younger than the 14d threshold
KEEP	factory/abandoned/handmade	?			no readable age — never pruned on a guess
-- junk threshold falls back to 14:
REMOVE	factory/abandoned/T-1-20260901-000000
KEEP	factory/abandoned/T-1-20261018-000000
REMOVE	factory/abandoned/T-GONE-20260904-000000
REMOVE	factory/abandoned/T-MOVED-20260902-000000
REMOVE	factory/abandoned/T-WT-20260903-000000
KEEP	factory/abandoned/T-YOUNG-20261015-000000
KEEP	factory/abandoned/handmade
-- threshold 0:
REMOVE	factory/abandoned/T-1-20260901-000000
REMOVE	factory/abandoned/T-1-20261018-000000
REMOVE	factory/abandoned/T-GONE-20260904-000000
REMOVE	factory/abandoned/T-MOVED-20260902-000000
REMOVE	factory/abandoned/T-WT-20260903-000000
REMOVE	factory/abandoned/T-YOUNG-20261015-000000
KEEP	factory/abandoned/handmade
### run_prune_abandoned: dry run
Abandoned lane pruning — tags older than 14 day(s)
======================================================
MODE: DRY RUN — nothing is deleted. Re-run with --yes to apply.

REMOVE factory/abandoned/T-1-20260901-000000                  47d  tag + branch
       branch:   factory/task/T-1
KEEP   factory/abandoned/T-1-20261018-000000                   0d  younger than the 14d threshold
       branch:   factory/task/T-1
REMOVE factory/abandoned/T-GONE-20260904-000000               44d  tag
REMOVE factory/abandoned/T-MOVED-20260902-000000              46d  tag only — factory/task/T-MOVED has moved past the tag and is NOT deleted
REMOVE factory/abandoned/T-WT-20260903-000000                 45d  tag + branch + worktree
       branch:   factory/task/T-WT
       worktree: <T>/wt-T-WT
KEEP   factory/abandoned/T-YOUNG-20261015-000000               3d  younger than the 14d threshold
       branch:   factory/task/T-YOUNG
KEEP   factory/abandoned/handmade                              ?d  no readable age — never pruned on a guess

------------------------------------------------------
4 removable, 3 kept.
A branch is deleted only when the abandoned TAG still contains every
commit on it. A branch that moved past its tag is live work and is left
alone; an untagged branch is never touched at all.

To apply: orchestrate.sh --prune-abandoned 14 --yes
-- worktrees:
   worktree <T>/ctl
   HEAD <base>
   branch refs/heads/main
   worktree <T>/ctl/harness/state/lanes/2
   HEAD <T-MOVED later work>
   detached
   worktree <T>/wt-T-WT
   HEAD <base>
   branch refs/heads/factory/task/T-WT
-- branches: factory/task/T-1 factory/task/T-MOVED factory/task/T-WT factory/task/T-YOUNG main 
-- tags: factory/abandoned/T-1-20260901-000000 factory/abandoned/T-1-20261018-000000 factory/abandoned/T-GONE-20260904-000000 factory/abandoned/T-MOVED-20260902-000000 factory/abandoned/T-WT-20260903-000000 factory/abandoned/T-YOUNG-20261015-000000 factory/abandoned/handmade 
### run_prune_abandoned: apply
Abandoned lane pruning — tags older than 14 day(s)
======================================================
MODE: APPLY — the REMOVE rows below are being deleted.

REMOVE factory/abandoned/T-1-20260901-000000                  47d  tag + branch
       branch:   factory/task/T-1
KEEP   factory/abandoned/T-1-20261018-000000                   0d  younger than the 14d threshold
REMOVE factory/abandoned/T-GONE-20260904-000000               44d  tag
REMOVE factory/abandoned/T-MOVED-20260902-000000              46d  tag only — factory/task/T-MOVED has moved past the tag and is NOT deleted
REMOVE factory/abandoned/T-WT-20260903-000000                 45d  tag + branch + worktree
       branch:   factory/task/T-WT
       worktree: <T>/wt-T-WT
KEEP   factory/abandoned/T-YOUNG-20261015-000000               3d  younger than the 14d threshold
       branch:   factory/task/T-YOUNG
KEEP   factory/abandoned/handmade                              ?d  no readable age — never pruned on a guess

------------------------------------------------------
4 removable, 3 kept.
A branch is deleted only when the abandoned TAG still contains every
commit on it. A branch that moved past its tag is live work and is left
alone; an untagged branch is never touched at all.
-- worktrees:
   worktree <T>/ctl
   HEAD <base>
   branch refs/heads/main
   worktree <T>/ctl/harness/state/lanes/2
   HEAD <T-MOVED later work>
   detached
-- branches: factory/task/T-MOVED factory/task/T-YOUNG main 
-- tags: factory/abandoned/T-1-20261018-000000 factory/abandoned/T-YOUNG-20261015-000000 factory/abandoned/handmade 
### run_prune_abandoned: nothing left to remove
Abandoned lane pruning — tags older than 30 day(s)
======================================================
MODE: DRY RUN — nothing is deleted. Re-run with --yes to apply.

KEEP   factory/abandoned/T-1-20261018-000000                   0d  younger than the 30d threshold
KEEP   factory/abandoned/T-YOUNG-20261015-000000               3d  younger than the 30d threshold
       branch:   factory/task/T-YOUNG
KEEP   factory/abandoned/handmade                              ?d  no readable age — never pruned on a guess

------------------------------------------------------
0 removable, 3 kept.
A branch is deleted only when the abandoned TAG still contains every
commit on it. A branch that moved past its tag is live work and is left
alone; an untagged branch is never touched at all.
