diff --git a/src/hooks/atlas/system-reminder-templates.test.ts b/src/hooks/atlas/system-reminder-templates.test.ts index cc2aaee95..042a95165 100644 --- a/src/hooks/atlas/system-reminder-templates.test.ts +++ b/src/hooks/atlas/system-reminder-templates.test.ts @@ -1,5 +1,6 @@ import { describe, it, expect } from "bun:test" import { + BOULDER_COMPLETE_PROMPT, BOULDER_CONTINUATION_PROMPT, SINGLE_TASK_DIRECTIVE, VERIFICATION_REMINDER, @@ -47,6 +48,14 @@ describe("VERIFICATION_REMINDER", () => { }) }) +describe("BOULDER_COMPLETE_PROMPT", () => { + it("contains the required placeholders", () => { + expect(BOULDER_COMPLETE_PROMPT).toContain("{PLAN_NAME}") + expect(BOULDER_COMPLETE_PROMPT).toContain("{ELAPSED_HUMAN}") + expect(BOULDER_COMPLETE_PROMPT).toContain("{TASK_BREAKDOWN}") + }) +}) + describe("VERIFICATION_REMINDER_GEMINI", () => { it("contains node_modules exclusion pathspec in git diff command", () => { expect(VERIFICATION_REMINDER_GEMINI).toContain(":!node_modules") diff --git a/src/hooks/atlas/system-reminder-templates.ts b/src/hooks/atlas/system-reminder-templates.ts index 7f42a7acb..d6e3b0cbf 100644 --- a/src/hooks/atlas/system-reminder-templates.ts +++ b/src/hooks/atlas/system-reminder-templates.ts @@ -33,6 +33,17 @@ RULES: - Do not stop until all tasks are complete - If blocked, document the blocker and move to the next task` +export const BOULDER_COMPLETE_PROMPT = ` +BOULDER COMPLETE: plan "{PLAN_NAME}" is fully checked. + +Total elapsed: {ELAPSED_HUMAN} + +Per-task breakdown: +{TASK_BREAKDOWN} + +Per your instructions, print the final ORCHESTRATION COMPLETE summary in your next turn. This nudge fires at most once. +` + export const VERIFICATION_REMINDER = `**THE SUBAGENT JUST CLAIMED THIS TASK IS DONE. THEY ARE PROBABLY LYING.** Subagents say "done" when code has errors, tests pass trivially, logic is wrong, diff --git a/src/hooks/atlas/types.ts b/src/hooks/atlas/types.ts index 8b39867e8..4c03d3966 100644 --- a/src/hooks/atlas/types.ts +++ b/src/hooks/atlas/types.ts @@ -48,4 +48,5 @@ export interface SessionState { waitingForFinalWaveApproval?: boolean pendingFinalWaveTaskCount?: number approvedFinalWaveTaskCount?: number + boulderCompletionNudgedAt?: Record }