fix(ci): seed the dist-rebuild warning on every retryable A/B exit - #8958
Conversation
The baseline leg rebuilds dist/ from baseline sources, and every retryable exit of the verify gate hands that tree to the repair agent — but the "run npm run build first" steering note only reached the green-baseline rejection. The comm -23 comparison failure and different-signature exits sent the repair agent in blind, free to trust or test against stale baseline artifacts (the different-signature exit carried the note on #8765's branch; the #8878 port kept it on the green exit only). #8765's post-close round-3 review flagged the comm path as Critical. Append the note on both missing exits and pin all three paths: the DIFFERENT-reason test now asserts the note, a new test stubs comm to fail and asserts the same, and the pre-existing test pins the note OUT of its document — no repair runs for that verdict. Mutation-tested, 3 of 3 caught: comm-path note dropped, different-reason note dropped, note leaked into the pre-existing document.
|
|
|
Thanks for the PR! Template looks good ✓ Problem: real and verified, not theoretical. On Direction: aligned — this is the gate's own repair-handoff contract. Without the note, the repair agent can trust or test against baseline-built Size: not applicable — no core paths touched. ~17 production lines (CI script) + 32 test lines, 2 files. Approach: the scope is right and minimal. Two echo lines mirroring the existing green-path note, a relocated comment documenting which exits seed the note and why the pre-existing exit stays out, and harness coverage pinning both new exits positively plus a negative assertion on the pre-existing document. The duplication-over-helper tradeoff matches the script's self-contained-exit style and is called out honestly in the description. Risk: no elevated risk signals — no high-risk paths matched. Moving on to code review. 🔍 中文说明感谢贡献! 模板完整 ✓ 问题:真实且已验证,不是理论性问题。在 方向:对齐——这是 gate 自身与 repair agent 的交接契约。缺少该提示时,repair agent 可能信任或基于 baseline 构建的 规模:不适用——未触及核心路径。约 17 行生产代码(CI 脚本)+ 32 行测试,共 2 个文件。 方案:范围合理且最小。两行与既有全绿路径一致的 echo、一处注释移动(说明哪些出口注入提示、以及 pre-existing 出口为何不注入),测试台对两个新增出口做正向断言、并对 pre-existing 文档做反向断言。重复而非 helper 的取舍与脚本自包含出口的风格一致,PR 描述也如实说明了这一点。 风险:无升级风险信号——未命中高风险路径。 进入代码审查 🔍 — Qwen Code · qwen3.8-max Reviewed at |
Code reviewBefore reading the diff I'd have done exactly this: seed the same warning at every retryable exit that runs after the baseline leg rebuilt
No blockers, no convention issues. Testing (PR's own CI, read via API — PR code not executed here)CI on the reviewed commit is still in flight: Final CI results for
One row per check name (latest run); skipped checks omitted; failures sort first. / 每个检查名一行(取最新一次运行),省略 skipped,失败项排在最前。 中文说明代码审查读 diff 之前我的独立方案正是如此:在每个 baseline 分支重建过
无阻塞项,无规范问题。 测试(读取 PR 自身 CI——本审查未执行 PR 代码)被审 commit 的 CI 仍在进行:包含该测试台的 — Qwen Code · qwen3.8-max Reviewed at |
|
Confidence: 5/5 — clean across every stage: the gap is verified on Stepping back: this restores a note the #8878 port dropped — one the #8765 post-close review flagged as Critical — and nothing more. My independent proposal was exactly what the PR does, and I looked for a cheaper path: there isn't one, the exits share no handoff point before the rejection document is rendered. Every edit in the diff serves the stated goal; no drive-bys. The boundary is the part that could have gone wrong — seeding an exit that runs before the baseline leg, or leaking the note into the pre-existing document where no repair agent ever runs — and both sides are pinned by assertions, including the negative one. If I were maintaining this gate in six months, the relocated comment telling me which exits seed the note and why is exactly what I'd want. Approval is deferred until CI lands green: 中文说明置信度:5/5 —— 每个阶段都干净:缺口已在 退一步看:本 PR 恢复了 #8878 移植时丢失的一条提示——#8765 关闭后的 review 曾将其标为 Critical——除此之外别无其他。我的独立方案与 PR 所做完全一致,也找过更便宜的路径:不存在,各出口在拒绝文档渲染之前没有共享交接点。diff 中每处改动都服务于既定目标,无夹带。容易出错的是边界——给 baseline 分支运行之前的出口注入提示、或把提示泄漏进根本没有 repair agent 运行的 pre-existing 文档——两侧都有断言固定,包括反向断言。若六个月后由我维护这个 gate,移动后的注释(说明哪些出口注入提示及原因)正是我需要的。 批准推迟到 CI 全绿: — Qwen Code · qwen3.8-max Reviewed at |
Code Coverage Summary
CLI Package - Full Text ReportCore Package - Full Text ReportFor detailed HTML reports, please see the 'coverage-reports-22.x-ubuntu-latest' artifact from the main CI run. |
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-ci-bot
left a comment
There was a problem hiding this comment.
Reviewed. Suggestions are inline.
Not explored to full depth (tool budget reached): This PR seeds the dist-rebuild warning on the two remaini...: none — all planned checks completed; the only unfinished item is identifying the exact kernel-level trigger of the transient detach failure, which is disclosed ….
中文说明
已审查。 建议见行内评论。
未探索到全部深度(达到工具调用预算):This PR seeds the dist-rebuild warning on the two remaini...:none — all planned checks completed; the only unfinished item is identifying the exact kernel-level trigger of the transient detach failure, which is disclosed …。
— qwen3.8-max via Qwen Code /review (v0.21.10)
doudouOUC
left a comment
There was a problem hiding this comment.
Reviewed — no blockers. Suggestions are inline. 1 Suggestion-level finding(s) could not be anchored to a changed line and were dropped; nothing further to act on here.
中文说明
已审查——无阻断问题。 建议见行内评论。 1 条建议级发现无法锚定到改动行,已丢弃;此处无需进一步处理。
— deepseek-v4-flash via Qwen Code /review (v0.21.8)
|
@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. Remove the 中文说明🤝 已接管:autofix 循环现在管理此 PR —— 将持续处理新的评审反馈与 base 冲突,直到移除标签或达到轮次上限。移除 |
Address the two review suggestions on #8958: - The steering note existed as three byte-identical copies, and the "every retryable exit seeds the note" invariant depended on copy-paste — the exact drift this PR was patching (one exit seeded on #8765's branch, one lost in the #8878 port). Both reviewers flagged it. The string now lives in seed_dist_note(), called from all three exits. - The comm-failure exit seeded the note but, unlike its sibling retryable exits, emitted no verdict-rationale line — an oncall could not distinguish "the comparison itself failed" from "baseline is green" without re-running the A/B. It now says so. Mutation-tested: mutating the string inside the helper fails all three path assertions at once; mutating the rationale line fails the comm-exit test.
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
|
🤖 Addressed the latest review feedback (round 1/100). What changed, and what I pushed back on: · 已处理最新评审反馈(第 1/100 轮)。改动内容与我反驳保留之处如下: Feedback points
Changes
Conflict notes
Verification
中文说明反馈要点
改动
冲突说明
验证
Base-conflict check · 基分支冲突检查: no conflict with main. · 与 main 无冲突。 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/模型 |
qwen-code-ci-bot
left a comment
There was a problem hiding this comment.
No issues found. LGTM! ✅
Not explored to full depth (tool budget reached): 背景:本 PR 在 verify gate 脚本 baseline_also_fails() 的另外两个可重试出口...: couldn't run the actual vitest harness (no node_modules in the worktree or parent; monorepo-wide install exceeds the budget) — substituted with a direct bash re…; 背景:本 PR 在 verify gate 脚本 baseline_also_fails() 的另外两个可重试出口...: could not run the actual vitest harness ( scripts/tests/qwen-autofix-workflow.test.js ) — no node_modules in the worktree or parent checkout and a monorepo in….
中文说明
未发现问题。LGTM!✅
未探索到全部深度(达到工具调用预算):背景:本 PR 在 verify gate 脚本 baseline_also_fails() 的另外两个可重试出口...:couldn't run the actual vitest harness (no node_modules in the worktree or parent; monorepo-wide install exceeds the budget) — substituted with a direct bash re…;背景:本 PR 在 verify gate 脚本 baseline_also_fails() 的另外两个可重试出口...:could not run the actual vitest harness ( scripts/tests/qwen-autofix-workflow.test.js ) — no node_modules in the worktree or parent checkout and a monorepo in…。
— qwen3.8-max via Qwen Code /review (v0.21.10)
wenshao
left a comment
There was a problem hiding this comment.
中文说明
— gpt-5.6-sol via Qwen Code /review (v0.21.10)
Independent verification report (local real-environment run)Verdict: the change does what it claims, the tests genuinely pin it, and both gaps are confirmed live on Environment. Clean 1. PR's advertised suite — all pass (note: 19 tests, not 18)
2. A/B control — the gaps are live on main, and the tests pin exactly themRunning the PR's test file against 3. Mutation testing — 5/5 killed, one test per call site
Every call site and the helper body are individually load-bearing, and the note provably cannot leak into the pre-existing document. 4. Real-script fixture run (outside vitest) — what the repair agent actually receivesI ran the actual gate script directly against a hand-built fixture (bare origin + clone + pushed pre-round ref + unpushed round commit + HEAD-keyed failing
5. Static checks
Nits (non-blocking, description-only)
中文版本 (Chinese version)独立验证报告(本地真实环境)结论:改动与声明一致,测试真实钉住了行为,两处缺口确认存在于 环境。 干净的 1. PR 声明的测试套件全过(实为 19 个而非 18)。 同一过滤器在 2. A/B 对照证明缺口活在 main 上。 用 PR 的测试文件跑 3. 变异测试 5/5 击杀。 分别删掉三个 4. 脱离 vitest 的真实脚本运行。 手搭 fixture(bare origin + clone + 已推送 pre-round ref + 未推送本轮提交 + 按 HEAD 键控失败的 5. 静态检查。 两个版本的 非阻塞小问题(仅描述层面): ① Risk 一节说"警告在三个出口各复制一行而非通过 helper",与最终代码相反——代码恰恰引入了 |
|
🤖 Reviewed the latest feedback — no changes needed. Why, point by point: · 已审阅最新反馈——无需改动。逐点说明原因如下: Autofix round report — no code changesNo code changes were made this round. The new feedback consists of an informational review (empty findings list) and an independent verification report whose verdict confirms the change, plus two explicitly non-blocking nits that target the PR description text only, not the code. There are no failed or still-red checks. Feedback triage
Verification of the two nits
Why these are not fixed hereBoth nits target the PR description on GitHub. This address-review round runs without GitHub credentials, and the workflow only consumes the PR title/body when the PR is first created — an address-review round has no path to edit the published description. The fixes are two small text edits in the PR body, left to the PR author:
Verification
中文说明Autofix 本轮报告 — 无代码改动本轮未做任何代码改动。新反馈包括一条信息性评审(发现列表为空)和一份独立验证报告(其结论确认了本 PR 的改动),外加两个明确标注为非阻塞的小问题(nit),它们都只针对 PR 描述文本,与代码无关。没有失败或持续失败的检查项。 反馈分类
两个 nit 的核实
为什么不在这里修复这两个 nit 针对的都是 GitHub 上的 PR 描述。本轮 address-review 运行时不持有 GitHub 凭据,且工作流只在 PR 首次创建时使用 PR 标题/正文 —— address-review 轮次没有任何途径修改已发布的描述。修复方式是 PR 正文中的两处小文本编辑,留给 PR 作者处理:
验证
Base-conflict check · 基分支冲突检查: no conflict with main. · 与 main 无冲突。 🧠 Handled by Qwen Code · model/模型 |
yiliang114
left a comment
There was a problem hiding this comment.
LGTM. Small, well-pinned CI-gate fix.
seed_dist_notegives the dist-rebuild steering note one emit point, and both remaining retryable exits (comm comparison failing fail-closed, baseline failing for a different reason / empty signature) now seed it; the pre-existing exit correctly stays without it since no repair runs.- The comm-failure exit now names its verdict ("signature comparison failed — fail-closed, charged to the round"), so oncall can distinguish it from the green-baseline exit without re-running the A/B.
- Tests cover all three directions: note present on the two new exits, note absent from the pre-existing document, plus the baseline-no-identity mirror shape; harness runs the real script in a fixture repo.
- CI on head is fully green.
|
Released in v0.21.11. |




What this PR does
When the review-address verify gate rejects a fix as retryable, it warns the repair agent that the baseline A/B leg rebuilt
dist/from baseline sources, so the agent rebuilds before trusting any dist-consuming check. That warning only reached the green-baseline rejection; this PR seeds it on the two remaining retryable exits — the failure-signature comparison erroring, and the baseline failing for a different reason — and pins the coverage with tests.Why it's needed
Every retryable exit hands the repair agent a tree whose
dist/was rebuilt from baseline sources (the restore checkout brings back tracked files only). Without the warning, the repair agent can trust or test against stale baseline artifacts and burn its budget on phantom dist-consuming failures. #8765's post-close round-3 review flagged the comparison-failure exit as Critical; that PR closed as subsumed by #8878, and the port kept the warning on the green exit only — the different-reason exit had the note on #8765's branch but lost it in the port. Both gaps are live on main today.Reviewer Test Plan
How to verify
Run the gate's executable harness:
npx vitest run --config ./scripts/tests/vitest.config.ts scripts/tests/qwen-autofix-workflow.test.js -t 'baseline A/B'— 18 tests, all passing. Three assertions carry the change: the different-reason test now expects the warning in the rejection document, a new test stubscommto fail and expects the same, and the pre-existing test pins the warning OUT of its document (no repair runs for that verdict). Mutation-tested, 3 of 3 caught: dropping either added echo fails its test, and leaking the note into the pre-existing document fails the negative assertion.Evidence (Before & After)
N/A (CI workflow script, not user-visible)
Tested on
Environment (optional)
Unit tests only (real-git fixture harness under
scripts/tests).Risk & Scope
Linked Issues
References #8765 (post-close round-3 review finding, Critical) and #8878.
中文说明
本 PR 做了什么
当 review-address 的 verify gate 以可重试为由拒绝修复时,它会警告 repair agent:baseline A/B 分支已经用 baseline 源码重建了
dist/,agent 在信任任何消费 dist 的检查前必须先重新构建。此前这个警告只出现在 baseline 全绿的拒绝路径上;本 PR 把它补到另外两个可重试出口——失败签名比较本身出错、以及 baseline 因不同原因失败——并用测试固定了这些覆盖。为什么需要
每一个可重试出口交给 repair agent 的工作树里,
dist/都是用 baseline 源码重建的(恢复 checkout 只带回受跟踪文件)。缺少警告时,repair agent 可能信任或基于陈旧的 baseline 产物做测试,把预算烧在假性的 dist 消费失败上。#8765 关闭后的第 3 轮 review 把比较失败出口标为 Critical;该 PR 以被 #8878 涵盖而关闭,而移植只保留了 baseline 全绿出口的警告——不同原因失败出口在 #8765 分支上原本有这条提示,移植时丢了。这两个缺口今天都活在 main 上。Reviewer 测试计划
如何验证
运行 gate 的可执行测试台:
npx vitest run --config ./scripts/tests/vitest.config.ts scripts/tests/qwen-autofix-workflow.test.js -t 'baseline A/B'——18 个测试全部通过。三处断言承载本次改动:不同原因失败测试现在断言拒绝文档包含警告;新增测试 stubcomm使其失败并做同样断言;pre-existing 测试反向断言警告不出现在其文档中(该判定不会触发 repair)。已做变异测试,3/3 被捕获:删掉任一新增 echo 会让对应测试失败;把警告泄漏进 pre-existing 文档会触发反向断言失败。证据(Before & After)
N/A(CI 工作流脚本,非用户可见)
测试平台
环境(可选)
仅单元测试(
scripts/tests下的真实 git fixture 测试台)。风险与范围
关联 Issue
关联 #8765(关闭后第 3 轮 review 的 Critical 发现)与 #8878。