What we found
When the agent stops to ask and the user answers, we re-prompt it to continue. That continuation prompt exists in three places, identical except for one clause:
prompt-run.ts:150 "You paused to ask: "X". The user chose: Y. Continue with that decision, and do not ask again unless a genuinely new choice comes up."
todo-loop.ts:315 "... Continue the backlog entry with that decision, ..."
steps.ts:166 "... Continue building "" with that decision, ..."
Three copies of one sentence means a reword lands in one path and not the others. That is the #563 failure mode applied to wording instead of code.
What we can do better
Collapse the three into one shared constant. The varying clause does not need to vary: the agent already knows what it is working on from the session, so "Continue" / "Continue the backlog entry" / "Continue building X" all carry the same meaning for it.
If the clause ever does need to vary, the same move works as one template with a single slot instead of a constant.
#569 shares the loop mechanics around this and deliberately leaves all three literals untouched at their call sites, so this can be decided on its own.
What we found
When the agent stops to ask and the user answers, we re-prompt it to continue. That continuation prompt exists in three places, identical except for one clause:
prompt-run.ts:150"You paused to ask: "X". The user chose: Y. Continue with that decision, and do not ask again unless a genuinely new choice comes up."todo-loop.ts:315"... Continue the backlog entry with that decision, ..."steps.ts:166"... Continue building "" with that decision, ..."Three copies of one sentence means a reword lands in one path and not the others. That is the #563 failure mode applied to wording instead of code.
What we can do better
Collapse the three into one shared constant. The varying clause does not need to vary: the agent already knows what it is working on from the session, so "Continue" / "Continue the backlog entry" / "Continue building X" all carry the same meaning for it.
If the clause ever does need to vary, the same move works as one template with a single slot instead of a constant.
#569 shares the loop mechanics around this and deliberately leaves all three literals untouched at their call sites, so this can be decided on its own.