diff --git a/package-lock.json b/package-lock.json index 3fa58666..a1ad386e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "antfarm", - "version": "0.4.1", + "version": "0.5.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "antfarm", - "version": "0.4.1", + "version": "0.5.1", "dependencies": { "json5": "^2.2.3", "yaml": "^2.4.5" diff --git a/package.json b/package.json index c3af3fbf..46971731 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,9 @@ }, "scripts": { "build": "tsc -p tsconfig.json && cp src/server/index.html dist/server/index.html && chmod +x dist/cli/cli.js && node scripts/inject-version.js", - "start": "node dist/cli/cli.js" + "start": "node dist/cli/cli.js", + "test": "node --test dist/**/*.test.js", + "typecheck": "tsc --noEmit" }, "dependencies": { "json5": "^2.2.3", diff --git a/src/installer/step-ops.ts b/src/installer/step-ops.ts index bf47b057..61a3eee4 100644 --- a/src/installer/step-ops.ts +++ b/src/installer/step-ops.ts @@ -497,11 +497,22 @@ export function claimStep(agentId: string): ClaimResult { JOIN runs r ON r.id = s.run_id WHERE s.agent_id = ? AND s.status = 'pending' AND r.status NOT IN ('failed', 'cancelled') - AND NOT EXISTS ( - SELECT 1 FROM steps prev - WHERE prev.run_id = s.run_id - AND prev.step_index < s.step_index - AND prev.status NOT IN ('done', 'skipped') + AND ( + -- Normal case: all previous steps must be done/skipped + NOT EXISTS ( + SELECT 1 FROM steps prev + WHERE prev.run_id = s.run_id + AND prev.step_index < s.step_index + AND prev.status NOT IN ('done', 'skipped') + ) + -- Special case: allow claiming verify step when loop step is running (verify_each mode) + OR EXISTS ( + SELECT 1 FROM steps loop_step + WHERE loop_step.run_id = s.run_id + AND loop_step.type = 'loop' + AND loop_step.status = 'running' + AND loop_step.loop_config IS NOT NULL + ) ) ORDER BY s.step_index ASC, s.step_id ASC LIMIT 1`