Merge pull request #7175 from SparkofSpike/codex/goal-yield-on-question

fix(goal): name the ask-the-user exit in continuation prompts
This commit is contained in:
Hunter Bown authored and GitHub committed 2026-11-01 06:27:50 +08:00
commit 711075a941
2 files changed
+8 -5

No files matched your search

+7 -4
View File
@@ -187,10 +187,13 @@ state — files, command output, tests, runtime behavior, issue or PR state, or
other authoritative evidence — then call `update_goal` with
`status: "complete"` and concise evidence. If something genuinely prevents
progress, call `update_goal` with `status: "blocked"` and explain it. If you
finished a stage and the next step is the user's call, call `update_goal` with
`status: "yield"`, say what you need from them, and end your answer there;
their reply resumes the goal. If `update_goal` is not in your tool list, load
it with `tool_search` first.
finished a stage and the next step is the user's call, or you need the user's
answer before the next pass can do anything useful, call `update_goal` with
`status: "yield"`, ask what you need in your answer, and end there; their reply
resumes the goal. Asking in prose without calling `update_goal` does not pause
this goal: the next pass starts with your question still unanswered, so do not
invent an answer to keep the loop moving. If `update_goal` is not in your tool list,
load it with `tool_search` first.
"#;
/// Memory hygiene guidance — appended to the system prompt only when the
/// session has a non-empty user-memory block. Steers the model toward
+1 -1
View File
@@ -820,7 +820,7 @@ pub fn thread_goal_status_projection(
pub fn render_continuation_prompt(snapshot: &GoalSnapshot, continuation_index: u32) -> String {
let goal_json = serde_json::to_string_pretty(snapshot).unwrap_or_else(|_| "{}".to_string());
format!(
"{}\n\n## Active Goal State\n\n```json\n{}\n```\n\nContinuation pass #{}.\nIf a critical verifier finds remaining work, call `update_goal` with `status: \"not_achieved\"` and its concrete `verification.gaps`; {} equivalent gap sets in a row pause this goal (`no progress`) for inspection instead of spending indefinitely, so report what actually still fails rather than restating the previous pass. If the goal is complete, first run or cite a concrete verifier/check when one applies, then call `update_goal` with `status: \"complete\"`, concrete evidence, and `verification: {{\"status\":\"passed\",\"check\":\"...\",\"summary\":\"...\"}}`. For non-verifiable work (docs, research, writing), use `verification: {{\"status\":\"not_applicable\",\"check\":\"...\",\"summary\":\"...\"}}` with a clear rationale instead of fabricating a verifier receipt. If it is blocked, call `update_goal` with `status: \"blocked\"` and the blocker. Otherwise continue making progress toward the objective.",
"{}\n\n## Active Goal State\n\n```json\n{}\n```\n\nContinuation pass #{}.\nIf a critical verifier finds remaining work, call `update_goal` with `status: \"not_achieved\"` and its concrete `verification.gaps`; {} equivalent gap sets in a row pause this goal (`no progress`) for inspection instead of spending indefinitely, so report what actually still fails rather than restating the previous pass. If the goal is complete, first run or cite a concrete verifier/check when one applies, then call `update_goal` with `status: \"complete\"`, concrete evidence, and `verification: {{\"status\":\"passed\",\"check\":\"...\",\"summary\":\"...\"}}`. For non-verifiable work (docs, research, writing), use `verification: {{\"status\":\"not_applicable\",\"check\":\"...\",\"summary\":\"...\"}}` with a clear rationale instead of fabricating a verifier receipt. If it is blocked, call `update_goal` with `status: \"blocked\"` and the blocker. If the next pass cannot make useful progress without an answer or decision only the user can give, call `update_goal` with `status: \"yield\"`, ask for it, and stop; do not invent the answer and continue. Otherwise continue making progress toward the objective.",
crate::prompts::GOAL_CONTINUATION_PROMPT.trim(),
goal_json,
continuation_index,