Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

## Unreleased

- Clarify the textual completion protocol so models keep evidence and completion on consecutive plain-text lines instead of wrapping markers in Markdown or separating them with blank lines.

## 0.6.2 — 2026-07-11

- Keep paused, blocked, and crash-recovered goals inert in model turns with a stopped-goal system guard, and enforce status/history/list/pause/clear control turns as read-only through the host's tool-execution hook so routed command text cannot mutate or resurrect work.
Expand Down
9 changes: 7 additions & 2 deletions src/goal-plugin.js
Original file line number Diff line number Diff line change
Expand Up @@ -1756,11 +1756,16 @@ function buildContinueMessage(
)
} else {
lines.push(
"Continue with the next concrete step; inspect current state and repair failures.",
"Continue the next concrete step; inspect and repair failures.",
)
}

lines.push("Complete only after verification: `[goal:evidence] …` then `[goal:complete]`. If only user input can unblock work, state why then `[goal:blocked]`.")
lines.push(
"Completion format—consecutive plain lines; no Markdown/backticks/blank line:",
"[goal:evidence] <proof>",
"[goal:complete]",
"Need user input? State why before [goal:blocked].",
)
const limitWarning = buildLimitWarning(goal)
if (limitWarning) lines.push(limitWarning.trim())

Expand Down
11 changes: 9 additions & 2 deletions test/goal-plugin.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -409,8 +409,15 @@ test("continue message includes budget context and completion audit", () => {
})
assert.match(messageText, /<progress_budget>/)
assert.match(messageText, /tokens_remaining: 75/)
assert.match(messageText, /Complete only after verification/)
assert.match(messageText, /\[goal:evidence\].*\[goal:complete\]/)
assert.match(messageText, /Completion format/)
assert.match(
messageText,
/consecutive plain lines; no Markdown\/backticks\/blank line/,
)
assert.match(
messageText,
/\[goal:evidence\] <proof>\n\[goal:complete\]/,
)
assert.match(messageText, /Limits are near:/)
})

Expand Down
Loading