diff --git a/src/resources/extensions/gsd/auto-prompts.ts b/src/resources/extensions/gsd/auto-prompts.ts index 0dddb841a..ad389c2f7 100644 --- a/src/resources/extensions/gsd/auto-prompts.ts +++ b/src/resources/extensions/gsd/auto-prompts.ts @@ -716,6 +716,12 @@ export async function buildExecuteTaskPrompt( const activeOverrides = await loadActiveOverrides(base); const overridesSection = formatOverridesSection(activeOverrides); + // Compute verification budget for the executor's context window (issue #707) + const prefs = loadEffectiveGSDPreferences(); + const contextWindow = resolveExecutorContextWindow(undefined, prefs?.preferences); + const budgets = computeBudgets(contextWindow); + const verificationBudget = `~${Math.round(budgets.verificationBudgetChars / 1000)}K chars`; + return loadPrompt("execute-task", { overridesSection, workingDirectory: base, @@ -730,6 +736,7 @@ export async function buildExecuteTaskPrompt( priorTaskLines: priorLines, taskSummaryPath, inlinedTemplates, + verificationBudget, }); } diff --git a/src/resources/extensions/gsd/tests/context-compression.test.ts b/src/resources/extensions/gsd/tests/context-compression.test.ts index df48dc148..8b70da3a4 100644 --- a/src/resources/extensions/gsd/tests/context-compression.test.ts +++ b/src/resources/extensions/gsd/tests/context-compression.test.ts @@ -74,6 +74,19 @@ test("compression: buildExecuteTaskPrompt minimal truncates prior summaries", () ); }); +test("compression: buildExecuteTaskPrompt passes verificationBudget to loadPrompt (#707)", () => { + // The execute-task template declares {{verificationBudget}} — the builder must supply it + assert.ok( + promptsSrc.includes("verificationBudget"), + "buildExecuteTaskPrompt should pass verificationBudget in the loadPrompt vars object", + ); + // Verify it computes the budget from computeBudgets + assert.ok( + promptsSrc.includes("computeBudgets(contextWindow)"), + "buildExecuteTaskPrompt should compute budgets from the executor context window", + ); +}); + test("compression: buildPlanMilestonePrompt minimal drops project/requirements/decisions files", () => { // The plan-milestone builder should gate root file inlining on inlineLevel assert.ok(