Parent: #431
Part of epic: "Compensate the branch a failed worker abandons"
At dispatch, when a saga is created for a worker that plants a loop/ branch, append Compensation(kind=DELETE_BRANCH, target='loop/') to the saga's compensation tuple alongside the existing REMOVE_WORKTREE compensation. Primary falsifiable acceptance: a saga created by the dispatch path for issue #n carries a DELETE_BRANCH compensation whose target equals the exact branch name planted for that worker.
Customer story
As an operator dispatching workers on a real repository: every branch a worker creates must be registered for reclamation at the moment it is created, so no failed worker can leak a branch the control plane doesn't know to delete.
Parent: #431
Part of epic: "Compensate the branch a failed worker abandons"
At dispatch, when a saga is created for a worker that plants a loop/ branch, append Compensation(kind=DELETE_BRANCH, target='loop/') to the saga's compensation tuple alongside the existing REMOVE_WORKTREE compensation. Primary falsifiable acceptance: a saga created by the dispatch path for issue #n carries a DELETE_BRANCH compensation whose target equals the exact branch name planted for that worker.
Customer story
As an operator dispatching workers on a real repository: every branch a worker creates must be registered for reclamation at the moment it is created, so no failed worker can leak a branch the control plane doesn't know to delete.