Budget the handoff action for the two lines it is made of
parseHandoffAnswer joins the agent's NEXT and WHY answers with " — ", and the prompt asks for a sentence each without naming any budget. Validate then held that join to one authored line's 200 characters. Two ordinary sentences do not fit, so every rotation failed. The failure was invisible twice over. The message said "prose smuggled into list", which named a branch the answer cannot reach: parseHandoffAnswer splits on newlines and trims, so no authored field ever contains "\n#". The only reachable cause was length, and the agent was never told what to shorten. Seen live on two tasks, and it left the release transaction stuck at "prepared" that pinned workpc-claude's only session slot (F30). Give Action the budget of both lines, name the length in the error, and put the limit in the prompt the agent actually reads. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011xsXyr5J1RACo71YeKG3Pu
This commit is contained in:
@@ -195,9 +195,9 @@ func (a CLIAdapter) prompt(ctx context.Context, s Session, text string, wait tim
|
||||
|
||||
const handoffPrompt = `Orchestra is about to rotate this task. Write ONLY the following labelled answers to ` + HandoffReportFile + `, then stop. Output nothing else.
|
||||
|
||||
NEXT: the single next action (one line).
|
||||
WHY: why that is next (one line).
|
||||
REMAINING: outstanding items, one line each. If none: NONE.
|
||||
NEXT: the single next action (one line, at most 200 characters).
|
||||
WHY: why that is next (one line, at most 200 characters).
|
||||
REMAINING: outstanding items, one line each, at most 200 characters each. If none: NONE.
|
||||
DEAD ENDS: approaches tried that failed — "tried X → failed because Y", one per line. If none: NONE.
|
||||
OPEN Q: unresolved decisions, one line each. If none: NONE.
|
||||
LEARNED: constraints discovered that are NOT in TASK.md, one line each. If none: NONE.
|
||||
|
||||
Reference in New Issue
Block a user