PBI-49: review-fixes — primary_worktree order, idea-claim rollback, sprint mark-ready fallback
Three findings from PBI-47 review: P1 — primary_worktree_path scheiden van lock-volgorde setupProductWorktrees acquired locks in alphabetical order (deadlock prevention) but also returned worktrees in that order, so worktrees[0] could point at a secondary product when its id sorted before the primary's. Lock-acquire stays sorted; output now preserves caller's input order so worktrees[0] is always the primary. P1 — Idea-claim rollback bij worktree setup failure setupProductWorktrees runs after tryClaimJob has already flipped the job to CLAIMED. A failure in lock-acquire/git-fetch/reset/sync left the job hanging until the 30-min stale-reset and the lock-map populated. Wrapped in try/catch with releaseLocksOnTerminal + rollbackClaim mirror of the task-pad behaviour. P2 — SPRINT mark-ready fallback when last task didn't push The mark-ready path used updated.pr_url, which is null when the closing task was verify-only or had no diff. Now falls back to a Prisma findFirst on the SprintRun's earliest job with pr_url IS NOT NULL. Tests: 31 files, 243 passing (incl. new input-order regression for setupProductWorktrees). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
f7f5a487ec
commit
d2f43fe8e6
4 changed files with 71 additions and 18 deletions
|
|
@ -118,4 +118,19 @@ describe('job-locks: setupProductWorktrees', () => {
|
|||
// Lock was still acquired and registered — release cleans up
|
||||
await releaseLocksOnTerminal('j3')
|
||||
})
|
||||
|
||||
it('output preserves input order regardless of alphabetical lock-acquire order', async () => {
|
||||
// 'z-primary' sorts AFTER 'a-secondary' alphabetically, but caller passes
|
||||
// primary first → output[0] must be 'z-primary' so wait_for_job's
|
||||
// primary_worktree_path = worktrees[0]?.worktreePath points at the right repo.
|
||||
const result = await setupProductWorktrees(
|
||||
'j4',
|
||||
['z-primary', 'a-secondary'],
|
||||
async () => originRepo,
|
||||
)
|
||||
expect(result).toHaveLength(2)
|
||||
expect(result[0].productId).toBe('z-primary')
|
||||
expect(result[1].productId).toBe('a-secondary')
|
||||
await releaseLocksOnTerminal('j4')
|
||||
})
|
||||
})
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue