fix(worktree): force-remove leftover dir so claims don't loop on 'already exists' #21
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "fix/remove-worktree-fs-fallback"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Probleem
SPRINT_IMPLEMENTATION-jobs (en in principe elke job met een worktree) konden permanent vastlopen in een loop: claim →getFullJobContextgeeftnull→ rollback → re-queue → opnieuw. Waargenomen op 2026-05-27: jobcmpnyil26000pvi7rjjncv5szdeed 20 mislukte runs tot hij met de hand op CANCELLED ging.Oorzaak
Na een mislukte run (bv. Anthropic 529 "Overloaded") bleef de worktree-map
/home/agent/.scrum4me-agent-worktrees/<jobId>staan.removeWorktreeForJobdeed alleengit worktree remove --force. Als git het pad niet (meer) als worktree kent — half-afgebrokengit worktree add, handmatige leftover, of een container-recreate die de clone wiste — faalt dat commando, blijft de map staan, en gooitcreateWorktreeForJobvervolgensWorktree path already exists(src/git/worktree.ts) →getFullJobContextgeeftnull.Dit is de defense-in-depth aanvulling op #20, dat
rollbackClaimal de sprint-worktree +sprint_task_executionslaat opruimen. Die fix dekt de happy-path rollback; deze PR dekt het geval waarin het pad bestaat maar git het niet als worktree herkent.Fix
removeWorktreeForJob: alsgit worktree remove --forcefaalt, fallback naarfs.rm(path, { recursive, force })+git worktree prune, zodat het pad altijd verdwijnt en een volgende claim niet opnieuw loopt.Test
Nieuwe vitest-case in
__tests__/git/worktree.test.ts: een plain directory op het worktree-pad die git niet als worktree kent, wordt nu force-verwijderd (removed: true, map weg). Faalde vóór de fix metfatal: '…' is not a working tree.tsc --noEmit: clean