diff --git a/package.json b/package.json index 24e7b4b..65cce02 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@getpipher/armory-fleet", - "version": "0.9.3", + "version": "0.9.4", "private": false, "description": "The armory suite's subagent orchestrator for the pi coding agent \u2014 a cross-harness, superpowers-native fleet where every agent is armory-native from birth.", "license": "MIT", diff --git a/src/engine/turn-budget.ts b/src/engine/turn-budget.ts index cbbc54e..84fd1ac 100644 --- a/src/engine/turn-budget.ts +++ b/src/engine/turn-budget.ts @@ -1,5 +1,8 @@ // src/engine/turn-budget.ts -export const DEFAULT_MAX_TURNS = 20; +/** Default per-run turn budget. Effectively uncapped for normal work — a very complex + * multi-file task rarely exceeds ~100 turns; 1000 bounds runaway loops while never clipping + * legit work. Callers may pass a tighter `maxTurns` (e.g. 5) for trivial lookups. (v0.9.4: was 20.) */ +export const DEFAULT_MAX_TURNS = 1000; export interface TurnBudget { /** Returns true when the just-consumed turn meets/exceeds the cap. */ diff --git a/test/turn-budget.test.mts b/test/turn-budget.test.mts index f31713f..5b44204 100644 --- a/test/turn-budget.test.mts +++ b/test/turn-budget.test.mts @@ -17,8 +17,8 @@ test("exhausted at max", () => { strictEqual(b.count(), 2); }); -test("default max is 20", () => { +test("default max is 1000 (v0.9.4: effectively uncapped for normal work)", () => { const b = createTurnBudget(); - for (let i = 0; i < 19; i++) ok(!b.consume(), `turn ${i + 1} not exhausted`); + for (let i = 0; i < 999; i++) ok(!b.consume(), `turn ${i + 1} not exhausted`); strictEqual(b.consume(), true); }); \ No newline at end of file