fix(goal-draft): keep drafts concise and verifiable - #11284
Conversation
E2E report: goal-draft qualityTested on macOS, Node.js 24.14.1, default model qwen3.8-max. Baseline used global qwen 0.23.0; verification used the locally built CLI. Four fixed Chinese prompts ran in a small isolated workspace containing a documented failing addition test and two documented audit surfaces. Runtime data was isolated from the fixture and real user config was unchanged. Both versions were invoked with
All fixture file hashes remained unchanged. Recorded calls were limited to Goal reads, file reads, searches and tool discovery; no task tests, shell execution, file modifications or Goal creation occurred during drafting. The tighten case supplied text without an active Goal; live active-Goal edit/replace was not exercised. No terminal or Web Shell approval interaction was exercised. Limits: the concrete-test draft still claimed that matching an assertion with grep proves the test was not modified. This overclaim also existed in the baseline and remains a model-quality limitation. Three completed samples are not a guarantee that every generated criterion is sound. Different baseline/source versions, stochastic outputs and retry limits also prevent a latency-improvement claim. The forced deepseek provider probe failed with HTTP 401 before producing tokens; subsequent samples used the working default provider. Deterministic checks passed: full build/bundle/typecheck, bundled-asset equality, 69 focused tests, formatting and changed-test lint. Local automated review timed out after six minutes without a verdict; an independent read-only diff review completed with no actionable findings. 中文摘要:四类真实模型采样中三类得到最终输出,确认了默认停止假设、草稿尚未应用提示,以及缺失判据时不交付可执行命令。审计场景两次超时,零缺陷和覆盖配额的实际输出尚未验证。所有样本只读,未创建 Goal。完整构建、类型检查和 69 个测试通过;自动审查超时后,独立只读 diff 审查未发现可操作问题。仍保留模型过度解读 grep 证据的既有局限,不宣称所有草稿都可靠或生成速度提升。 |
|
@qwen-code /takeover |
|
🤝 Takeover engaged: the autofix loop now manages this PR — it will address new review feedback and resolve base conflicts until the label is removed or the round cap is reached. This is a fork PR, so the first round comes from the next scheduled scan (usually within minutes). Remove the 中文说明🤝 已接管:autofix 循环现在管理此 PR —— 将持续处理新的评审反馈与 base 冲突,直到移除标签或达到轮次上限。本 PR 来自 fork,首轮处理将由下一次定时扫描执行(通常几分钟内)。移除 |
|
✅ Qwen Triage finished — CI landed green on ✅ Qwen Triage 已完成 —— |
|
Thanks for the PR! Template is complete ✓ — including the Chinese translation and an honest Tested-on table. Problem: partly observed, partly read off the prompt text, and one piece you've flagged as unverified yourself. The unmarked-budget issue is genuinely observed: your baseline samples added a "20 turns or 10 minutes" budget without saying it was only a convention. The headless-fallback issue is real but static rather than reproduced — the old text said "take the recommended default and mark it Direction: aligned. This is prompt and docs quality for a bundled skill this repo owns, not a new surface. CHANGELOG shows the area is actively shipped — Size: touches a core path ( Approach: scope feels right, and it matches what I'd have written independently — bound the reads, cap the check count without inventing quotas, allow a zero-finding audit, gate the hand-off on unresolved essentials, and label the default budget as a model convention. Two small things, both optional:
I'd rather neither of these triggered another round: Risk: no elevated risk signals — none of the changed files match the high-revert-correlation paths. Moving on to code review. 🔍 中文说明感谢贡献!模板完整 ✓ —— 包含中文翻译和如实填写的测试平台表格。 问题: 一部分是实测观测到的,一部分是从提示词文本直接读出的,还有一部分你自己已标注为未验证。未标注预算的问题确实是实测到的:基线样本添加了"20 回合或 10 分钟"预算,却没有说明它只是执行约定。headless fallback 的问题真实存在,但属于静态文本缺陷而非复现结果——旧文本写的是"take the recommended default and mark it 方向: 对齐。这是本仓库自有 bundled skill 的提示词与文档质量改进,不是新增面。CHANGELOG 显示该领域一直在持续交付—— 规模: 触及核心路径( 方案: 范围合理,和我独立想到的做法一致——限定读取范围、限制检查条数但不凭空设配额、允许审计零缺陷、在必要信息未解决时拦住交接、并把默认预算标注为模型执行约定。两点小建议,均为可选:
我更希望这两点不要触发新一轮修改:本 PR 已挂上 风险: 无升级风险信号——改动文件均未命中高回滚相关性路径。 进入代码审查 🔍 — Qwen Code · qwen3.8-max-2026-09-02 Reviewed at |
Code reviewNo critical blockers and no AGENTS.md violations. This is a prompt-and-docs change: no runtime code path, schema, tool registration, permission rule, or Goal storage is touched, so the review is about whether the text is accurate and whether the contract tests actually pin it. I wrote down my own approach before opening the diff — bound the reads to scope and verification, cap the check count without inventing quotas, allow a zero-finding audit, gate the hand-off on unresolved essentials, label the default budget as a model convention, then pin the wording in the colocated test and sync the user docs. Your diff lands on the same shape, and adds one thing I hadn't thought of that I think is right: routing the edit-versus-replace choice into the single question round instead of letting the skill pick, which is what makes "essential decision remains" in the new Step 5 gate actually reachable. Nothing here I'd have done materially simpler. The three factual claims in the new text all check out against the runtime, which is the part I cared about most — a prompt that asserts something false about the product is worse than no prompt:
Contract tests: I checked every assertion statically rather than trusting that CI would catch a mismatch. All 20 new assertions match the head SKILL.md text exactly, including the two ordering assertions (Step 5 heading → new gate → ready-objective hand-off) and the three that only look inside the sliced gate paragraph. I also pulled all 95 string literals out of the head test file and checked each against the head SKILL.md: every miss is a test name, an import path, or a Consumers I traced, since the file sits under a core path: the colocated Two non-blocking notes, both already raised in the gate comment and both fine to leave alone: the docs rewrite drops the mention that the skill may decide the request isn't a Goal at all, and the Web Shell/ACP clarification is strictly a separate concern from the PR title. One thing I want to say plainly rather than bury: the behavioural risk you disclose — that incomplete inputs now deliberately withhold an actionable hand-off — is a real trade, and it lands hardest on headless runs, which is exactly where Test evidenceUnattended CI run — I did not build, run, or execute anything from this PR. The evidence below is the PR's own CI, read through the API, plus the static text verification described above. Final CI results for
One row per check name (latest run); skipped checks omitted; failures sort first. / 每个检查名一行(取最新一次运行),省略 skipped,失败项排在最前。 Nothing is red on this commit. There are 96 check-runs in total; everything not listed above is bot orchestration ( Not verified, and why: real-scenario TUI testing is out of scope on an unattended CI run, so there is no terminal capture in this comment. The model-compliance question is covered by the lane below. Your own E2E report is your claim, not evidence I reproduced — I'm citing it only to say that it is unusually candid about its own gaps, and that the gap it names is the one worth closing. Sandboxed verification would settle this: 中文说明代码审查: 没有关键阻塞项,也没有违反 AGENTS.md 的地方。这是提示词与文档改动:没有触及任何运行时代码路径、schema、工具注册、权限规则或 Goal 存储,所以审查重点是文本是否准确、契约测试是否真的钉住了它。 我在看 diff 之前先写下了自己的方案——限定读取范围到 scope 与验证方式、限制检查条数但不凭空设配额、允许审计零缺陷、在必要信息未解决时拦住交接、把默认预算标注为模型约定,然后在同目录测试中钉住措辞并同步用户文档。你的 diff 与之一致,并且补了一点我没想到、但我认为是对的:把"编辑还是替换"的选择纳入唯一一轮提问,而不是让 skill 自己决定——正因为如此,Step 5 新增的"仍有必要决策未解决"这道闸才真的可达。这里没有我会做得明显更简的地方。 新文本中的三条事实性陈述都与运行时对得上,这是我最在意的部分——一个对产品做了错误断言的提示词比没有提示词更糟:
契约测试: 我用静态方式核对了每一条断言,而不是指望 CI 去发现不一致。20 条新增断言全部与 head 版本的 SKILL.md 文本精确匹配,包括两条顺序断言(Step 5 标题 → 新增闸门 → 完整目标交接)以及三条只在闸门段落切片内查找的断言。我还从 head 测试文件中提取了全部 95 个字符串字面量逐一比对:所有未命中项都是测试名、import 路径或 我追踪的下游消费方(该文件位于核心路径下):同目录的 两点非阻塞意见,闸门评论中已提出,放着不改也完全可以:文档改写删掉了"该 skill 可能判断这根本不是一个 Goal"的说明;Web Shell/ACP 澄清严格说与 PR 标题是两个关注点。 有一点我想直说而不是埋起来:你披露的行为风险——信息不完整时会刻意省略可执行交接——是真实的取舍,而且对 headless 运行影响最大,而 测试证据: 这是无人值守的 CI 运行——我没有构建、运行或执行本 PR 的任何代码。上面的证据来自通过 API 读取的 PR 自身 CI,加上我做的静态文本核对。 该 commit 上没有任何红灯。总共 96 个 check-run;未列出的都是机器人编排任务( 未验证项及原因:无人值守 CI 运行不做真实场景 TUI 测试,因此本评论没有终端截取输出。模型是否遵循指令的问题由下面的验证通道覆盖。 你自己的 E2E 报告属于你的陈述,不是我复现出的证据——我引用它只是为了说明它对自身局限的坦诚程度少见,而它点出的那个缺口正是值得补上的。 沙箱验证可以定论此事: — Qwen Code · qwen3.8-max-2026-09-02 Reviewed at |
|
Confidence: 4/5 — clean, accurate, and well-pinned; the two nits are cosmetic and the one open question is about model behaviour, not about this diff. Stepping back: this is 22 lines of prompt text, a matching set of contract tests, and a docs sync. It does not add machinery, does not abstract anything, and does not touch a runtime path. Six months from now the contract tests are what makes it maintainable — they pin the wording, so the next person who rewrites a sentence finds out immediately which guarantee they broke. That's the reason I'd thank the author rather than curse them. The approach matches what I proposed independently before reading the diff, and beats it in one place: routing the edit-versus-replace choice into the single question round is what makes the new "essential decision remains" gate reachable at all. I'd have left the skill choosing, which is precisely the failure mode the PR is about. On whether the problem exists — I want to be exact rather than generous. The unmarked-budget issue is observed in the author's baseline samples. The headless-fallback issue is a real defect but I confirmed it by reading the old text, not by watching it happen: the old fallback said to take the recommended default with no essential/nonessential distinction, so it did license inventing a success criterion. The audit-quota guidance has no runtime evidence, and the author says so. I'm comfortable shipping that third piece unproven because its worst case is "the model keeps behaving as it does today" — it cannot regress anything, since nothing it replaces was working either. On volume, because it deserves a straight answer: the author has nine PRs open, four of them in the Goal subsystem. I checked whether I was being worn down or whether this one stands on its own, and it stands on its own — the diff doesn't collide with the others, which touch the runtime, the continuation prompt, and Web Shell rather than the drafting skill. One sequencing note for whoever lands these, not a concern about this PR: a sibling proposal to pause a Goal after three no-progress turns would introduce a genuine runtime turn limit. The sentence added here is scoped to turn counts written in the objective, so it stays true either way — but if both land, worth a read-through of the docs paragraph so a user isn't left thinking prose budgets and runtime limits are the same thing. What I did not verify, stated plainly: real model compliance. The contract tests prove the text says what it should; they cannot prove a model follows it, and the author's own E2E report leaves the audit scenario unobserved after two timeouts. That gap is what the sandboxed lane named in the review comment is for, and it is the only thing standing between this and a 5. Verdict: approve. CI on this commit is still running ( 中文说明Confidence: 4/5 —— 干净、准确、钉得牢;两点意见属于表面问题,唯一悬而未决的是模型行为,而不是这个 diff 本身。 退一步看:这是 22 行提示词文本、一组配套的契约测试,加上一次文档同步。它没有新增机制、没有引入抽象、没有触及运行时路径。六个月后让它仍然可维护的正是那些契约测试——它们钉住了措辞,所以下一个改写句子的人会立刻知道自己打破了哪条保证。这也是我会感谢作者、而不是埋怨作者的原因。 方案与我在读 diff 之前独立提出的想法一致,并且有一处比我的更好:把"编辑还是替换"的选择纳入唯一一轮提问,正是这一点让新增的"仍有必要决策未解决"这道闸真正可达。我原本会让 skill 自己决定,而那恰恰就是本 PR 要解决的失效模式。 关于问题是否真实存在——我想说得准确,而不是宽厚。未标注预算的问题在作者的基线样本中是实测到的。headless fallback 的问题是真实缺陷,但我是通过阅读旧文本确认的,而不是看着它发生:旧的 fallback 说直接采用推荐默认值,且没有区分必要与非必要信息,因此确实允许了编造成功判据。审计配额这部分没有运行时证据,作者也这么说了。我可以接受第三部分未经证明就上线,因为它的最坏情况是"模型维持今天的行为"——它不会让任何东西退化,因为它替换掉的本来也没生效。 关于数量,值得给一个直接回答: 作者有九个 PR 处于开启状态,其中四个在 Goal 子系统。我确认了自己是被数量磨软了、还是这一个本身站得住——它站得住:这个 diff 与其他几个不冲突,后者动的是运行时、continuation prompt 和 Web Shell,而不是草拟 skill。给最终合并这些 PR 的人一条顺序上的提醒(不是对本 PR 的疑虑):其中一个兄弟提案会在三个无进展回合后暂停 Goal,那会引入真正的运行时回合限制。这里新增的句子限定于写在 objective 里 的回合数,所以两种情况下都依然成立——但如果两者都合并,建议把这段文档通读一遍,免得用户以为正文预算和运行时限制是同一回事。 我没有验证的部分,直说:真实的模型遵循度。契约测试证明文本说的是它该说的话;它们无法证明模型会照做,而作者自己的 E2E 报告在两次超时后也没有观测到审计场景。这个缺口正是审查评论里点名的沙箱验证通道要补的,也是本 PR 与 5 分之间唯一的距离。 结论:批准。该 commit 上的 CI 仍在运行( — Qwen Code · qwen3.8-max-2026-09-02 Reviewed at |
qwen-code-ci-bot
left a comment
There was a problem hiding this comment.
LGTM, looks ready to ship — CI landed green after the review. ✅
|
Qwen Code review timed out. Qwen review timed out after 10800 seconds (of the 180-minute budget). For large PRs, retry with a longer timeout by commenting: |
|
🔀 Base updated: red check(s) [review-pr] pass on current main — merged current main via update-branch; CI will re-run. 中文说明🔀 已更新 base:红色检查 [review-pr] 在当前 main 上通过 —— 已通过 update-branch 合入当前 main,CI 将重新运行。 |
qwen-code-dev-bot
left a comment
There was a problem hiding this comment.
Approved at head a253680b.
The claim this change rests on is true at the registration level, which is what makes it worth more than a wording tweak. ProposeGoalTool is registered only when resolveInteractionMode(this) === 'interactive' (packages/core/src/config/config.ts:9440-9446), so a Web Shell or other ACP session has no dialog to promise — and the only places Web Shell mentions the tool at all are a display label and a translation string (toolFormatting.ts:26, i18n.tsx:3703). Telling the skill to print a copyable command there, and to stop saying "I'll propose it for approval", is therefore correcting a promise the runtime cannot keep rather than simplifying prose. The same goes for Budget: nothing parses the objective for a turn or minute count, the enforced ceiling is model.goalTokenBudget, and the 1,500-character cap the docs cite matches PROPOSE_GOAL_OBJECTIVE_MAX_CHARACTERS.
I checked the guard suite mechanically instead of trusting that it passes. All 53 string assertions in SKILL.test.ts hold against the head's SKILL.md; the three that do not appear in the body are the deliberate not.toContain assertions on allowedTools (run_shell_command, write_file, edit, update_goal), which is the right polarity for a skill that must draft without doing. The new ordering pin is the one I would have asked for: it locates the Needs clarification gate relative to ## Step 5 and Then hand off, and nothing else: (10047 / 10909 / 11214 at this head) and then slices the text between them to confirm the withholding instructions live inside that window — so moving the gate below the hand-off, which would let the skill print a runnable /goal set for an incomplete draft, goes red. A missing anchor yields -1 and fails toBeGreaterThan, so the pin cannot pass by absence.
One free improvement this PR was the natural place for. The same page, at docs/users/features/goals.md:19, still says "the footer pill and every status card show what it has spent" and "Once a Goal has billed a turn". Neither holds: the legacy goal_status card renders no figure in both renderers, and the four implementations gate on recorded spend rather than turns. That text arrived from PR #11248 and is already on main, so it is not this diff's defect and I am not blocking on it — but since this PR is editing that file and that page is where a reader learns what the budget line means, scoping the sentence here would have cost one line. Worth folding into the follow-up on the other PR rather than leaving for a third pass.
CI facts. At this head Test (ubuntu-latest), Lint & Static and Integration Tests (no-AK) were still queued behind the merge of main that landed a few minutes earlier; Classify PR, both Desktop Shell lanes and the precheck/assign/label jobs are green, and nothing has reported red. There are no review threads on the PR, and the automated review on this head is already an approve — my decision is on the content, not waiting on the board.
qwen-code-ci-bot
left a comment
There was a problem hiding this comment.
Partially reviewed — gaps disclosed. Suggestions are inline.
1 Suggestion-level finding(s) this review confirmed are already reported on this PR and are not repeated:
- goals.md:66 dropped "is this a Goal at all" and self-check mentions — already raised in the triage gate comment (comment 5567492204) and the stage-2 review (comment 5567517976)
Not explored to full depth (tool budget reached): "agent 1d": none — no check was cut short by the ceiling..
Not reviewed: reverse audit — stopped before round 4 by the review time budget.
中文说明
仅完成部分审查,审查缺口已披露。 建议见行内评论。
本轮确认的 1 条建议级发现已在 PR 上报告过,不再重复发布(列表见上方英文部分)。
未探索到全部深度(达到工具调用预算):"agent 1d":none — no check was cut short by the ceiling.。
未审查:反向审计——评审时间预算不足,未能开始第 4 轮。
— qwen3.8-max via Qwen Code /review (v0.23.0)
4a2c036
|
🤖 Addressed the latest review feedback (round 1/100). What changed, and what I pushed back on: · 已处理最新评审反馈(第 1/100 轮)。改动内容与我反驳保留之处如下: Address-review round — PR #11284Commit: All seven inline findings were Suggestion-level, valuable, and inside this PR's own footprint ( Feedback dispositions
No finding was declined, deferred, or escalated; Notes: after the exemplar row grew, Prettier re-padded the Weak→strong table (whitespace-only; row wordings unchanged). No settings source changed, so no schema regeneration. Mutation probesEach probe mutated SKILL.md, re-ran the focused suite, and restored the file:
Verification
Integration tests were not run: the change is skill prose plus its contract tests, fully exercised by the focused Vitest suite; it is not behavior reachable only through the bundled CLI or integration harness. 中文说明评审处理轮次 — PR #11284提交: 七条行内发现均为 Suggestion 级别、有价值、且位于本 PR 自身足迹内( 各条发现的处理
没有发现被拒绝、推迟或升级;因此省略 说明:示例行变长后,Prettier 重新填充了 Weak→strong 表格(仅空白;各行措辞未变)。未改动 settings 源,无需重新生成 schema。 变异探测每个探测都修改 SKILL.md、重跑聚焦套件、然后还原文件:
验证
未运行集成测试:本次改动是 skill 正文及其契约测试,聚焦 Vitest 套件已完全覆盖;不属于只能通过打包 CLI 或集成框架触达的行为。 Base-conflict check · 基分支冲突检查: no conflict with main. · 与 main 无冲突。 🧵 Resolved all 7 selected review thread(s). · 已关闭全部选中的 7 条评审线程。 Re-review when you have a moment. After round 100 this bot stops and leaves the PR for a human. · 有空请复审;第 100 轮后本 bot 停止并将 PR 交给人工。 🧠 Handled by Qwen Code · model/模型 |
yiliang114
left a comment
There was a problem hiding this comment.
Approved at head 4a2c036. Contained change (+106/-16, 3 files): goal-draft guidance tightened toward concise, verifiable objectives, plus the last commit aligning the gate and budget default with the documented behavior. All checks green at head except review-pr, still running.
qwen-code-dev-bot
left a comment
There was a problem hiding this comment.
Approved at head 4a2c0363.
我上一张批准票挂在 a253680b 上,随着这次推送已被标记为过期,所以这是在新 head 上重投的一票。 增量只有一个提交、两个文件、+34/-14,内容是把 skill 的措辞对齐到它自己该遵守的契约,而不是加功能。
对齐方向我两边都读了,确实是对齐不是放宽。 SKILL.md:111 现在把"什么算 essential"列成三项——未知的成功判据、未验证的命令或输入路径、没定下来的 edit 还是 replace——这与本 PR 自己写进 docs/users/features/goals.md:70 的那句逐类对应;而旧写法是"只要还剩任何 <TODO: …> 或关键决定",跟同一份文件里的另一条规则(非必要默认值用 [ASSUMPTION] 标,<TODO> 只留给缺成功判据的情况)互相矛盾:按旧措辞,一个只带非必要 <TODO> 的草稿本该被拒绝交付,而按 marker 规则它又该正常交付。收窄成枚举是把这条自相矛盾消掉,方向是收紧口径而不是放宽闸门。
这条改动唯一可能开洞的地方,在同一个 hunk 里堵上了。 自检第 7 条从"Context 里的路径和命令都验证过或是 <TODO>"改成"未验证的路径或命令属于 essential,必须保持 <TODO: …>",所以不能再用"标个 [ASSUMPTION]"的方式把一个没验证过的命令带进可执行的交接里。Budget 那三处也自洽了:模板行、自检第 10 条、以及弱/强示例表——强例子现在带 Context: [ASSUMPTION] the 20-turn budget is the drafter's default, not the user's,不再出现"示例里写默认预算但不声明这是假设"这种自我打脸;同时正文没有把它说成运行时强制的轮数上限,和文档里"写进 objective 不会配置计时器或改动 token 预算"仍然一致。
守卫套件我重新逐条比过,不是只看它没红。 这个 head 上 SKILL.test.ts 里 58 个正向 toContain 字面量全部存在于 SKILL.md(重写后用脚本再核了一遍);顺序 pin 是升级不是削弱——gate 锚点跟着新句子搬了位置,另外补了两条切片断言:交付句只能在 ## Step 0 之前匹配到(因为 "Needs clarification" 现在同时出现在 gate 句里,全局 toContain 会串味),以及 gate 到交接之间那段必须含 success criterion。这两处都是我会在自己 review 里要求的形状。
之前那轮已核实的前提没有被这次推送改动:propose_goal 只在 resolveInteractionMode === 'interactive' 时注册(packages/core/src/config/config.ts:9442),所以 Web Shell/ACP 拿到可复制命令是事实而不是取舍;tokensUsed/tokenBudget 在 web-shell mapper 里走 getNumber + 可选展开、不进必填校验,这一点在 #11254 已核过,本 PR 不碰。
不阻塞、留个话头:同一页 goals.md:19 那句"footer pill 和每一张状态卡都显示花费"以及"Once a Goal has billed a turn"仍然不准确(legacy 状态卡不显示数字,实现判的是已记录花费),那是 #11248 带来的、本 PR 没动,值得顺手一个小 follow-up。
CI 事实。 这个 head 上 Test (ubuntu-latest) 24m15s、Lint & Static 13m55s、Integration Tests (no-AK) 10m13s 都绿,只有 review-pr 还在跑,没有任何红。页面仍是 REVIEW_REQUIRED/BLOCKED:还有 4 位被点名的真人 reviewer 没交票,机器人批准不满足这条要求——yiliang114 已经在这个 head 上 Approve 了,所以真正缺的是那四位里再补一张。
|
Post-merge review of head Verified
Executed: Cross-check: the earlier LGTM predates the alignment commit; nothing else open. Prompt-contract tests pin the text, not model compliance — as the PR itself discloses, including the E2E gap on the audit-quota behavior. No blockers found in what merged. Reviewed with AI assistance. |
|
Released in v0.23.1. |
What this PR does
Keeps
/goal-draftfocused on the reads needed to establish scope and verification, asks for compact completion checks, and explicitly allows an audit to find no defects. It preserves user requirements without adding arbitrary coverage or evidence quotas. Unresolved essential inputs produce a draft marked "Needs clarification", with no approval proposal or runnable Goal command.Default stopping assumptions are identified as model instructions rather than runtime-enforced limits. Ready drafts retain the existing terminal approval or manual-command handoff, with clear wording that the draft has not been applied.
Why it's needed
Drafting can expand into excessive investigation and add unsupported completion requirements, such as requiring an audit to find a defect. The previous fallback also allowed missing essential information to become assumptions in an actionable command. Users need a small, grounded objective and an accurate explanation of what remains unresolved before starting autonomous work.
Reviewer Test Plan
How to verify
/goal-draftto address a documented failing test. Expect a concise objective using the real verification command, with no test execution or implementation during drafting./goal set,/goal edit, or approval proposal.Evidence (Before & After)
Global CLI baseline samples added an unrequested "20 turns or 10 minutes" budget without identifying it as an execution convention. Three changed-bundle samples reached final output: the completed ready drafts marked the default budget as an assumption and said the draft was not applied; the missing-criterion sample returned TODOs without an actionable command. The audit sample timed out at both 120s and 240s, so zero-defect/coverage-quota behavior is not yet verified with real model output. Detailed results are in the separate E2E report comment.
Local validation passed: clean
npm ci, full build and bundle, full typecheck, 69 tests across the bundled skill and Goal tools, changed-test ESLint, changed-file Prettier, andgit diff --check. The bundled skill matches the edited source. Prompt-contract tests do not prove model compliance.Tested on
Environment (optional)
Node.js 24.14.1; global CLI baseline and local
node dist/cli.jsin isolated fixture/runtime directories. Model: qwen3.8-max.Risk & Scope
Linked Issues
None.
中文说明
此 PR 做了什么
让
/goal-draft只读取确定范围和验证方式所需的信息,生成简洁的完成条件,并明确允许审计未发现缺陷。保留用户要求,不额外添加覆盖量或证据数量指标。必要信息未解决时,只输出“待澄清”草稿,不发起目标批准,也不附可执行的 Goal 命令。默认停止条件会标记为假设,并说明它属于模型执行约定,不是运行时强制限制。完整草稿继续使用现有终端批准或手动命令交接,并明确草稿尚未应用。
为什么需要
草拟可能演变为过度调查,并附加缺乏依据的完成条件,例如要求审计必须发现缺陷。原有 fallback 还可能把缺失的必要信息当作假设写进可执行命令。用户需要在启动自主执行前,得到简洁、有依据的目标,并知道哪些信息尚未确定。
Reviewer 验证计划
如何验证
/goal-draft草拟修复已有文档说明的失败测试。应使用真实验证命令,目标简洁,草拟期间不运行测试或实现修复。/goal set、/goal edit,也不发起批准。修改前后证据
全局 CLI 基线样本增加了用户未要求的“20 回合或 10 分钟”预算,没有说明它只是执行约定。修改后 bundle 有三个样本得到最终输出:完整草稿标注了默认预算假设并说明尚未应用;缺失判据的样本只给 TODO,没有可执行命令。审计样本在 120 秒和 240 秒两次超时,因此零缺陷与覆盖配额的实际模型输出尚未验证。详细结果记录在单独的 E2E 报告评论中。
本地已通过:干净安装
npm ci、完整 build 和 bundle、完整 typecheck、bundled skill 与 Goal tools 共 69 个测试、修改测试文件的 ESLint、修改文件的 Prettier,以及git diff --check。打包 skill 与修改后的源码一致。提示词契约测试不能证明模型一定遵循指令。测试平台
环境
Node.js 24.14.1;全局 CLI 基线和本地
node dist/cli.js均在隔离的 fixture/runtime 目录运行。模型:qwen3.8-max。风险与范围
关联 Issue
无。