v1.7.5 (2026-08-07)
对齐上游 v6.2.0 的 B 块 + D 块(#19)。
🐛 worktree 清理静默空转(真 bug,我们与上游同样存在)
finishing-a-development-branch 的步骤 6 在步骤 5 已经 cd 到主仓库根之后,才用 git rev-parse --show-toplevel 重算 WORKTREE_PATH —— 于是拿到主根路径,.worktrees/ 溯源判断永远匹配不上,清理静默空转,随后分支删除还会因为 worktree 仍挂着而失败。上游记录说测试对象不得不偏离 skill 原文才能跑通。
修法:步骤 2 趁还在工作区内就捕获,步骤 6 消费该值并加显式警告说明为何不能重算;去掉步骤 6 冗余的 MAIN_ROOT 推导与 cd;选项 2 补上菜单已声称的分离 HEAD 推送变体。
已实际复现验证(临时仓库 + .worktrees/feature):旧逻辑算得 main → 溯源未命中 → 清理空转;新逻辑捕获到 main/.worktrees/feature → 命中 → worktree remove 与 branch -D 均成功。
🐛 我们把 Gemini 的子智能体支持写错了
gemini-tools.md 原文称 Gemini CLI 没有 Task 等价物、依赖子智能体的 skill「退化为 executing-plans 单会话执行」。这是错的 —— Gemini CLI 通过 invoke_agent(agent_name: "generalist",也可用 @generalist 聊天语法)支持子智能体,且支持同一响应内多调用并行分派。
这个错误会让 Gemini CLI 用户的 subagent-driven-development / dispatching-parallel-agents / requesting-code-review 全部瘸腿。按上游重写(33 → 62 行),补齐指令文件层级加载、~/.gemini/skills 与 ~/.agents/skills 优先级、模板填写、并行分派,以及此前缺失的 20 个工具名。已全仓扫描确认无别处重复该说法。
🔄 testing-anti-patterns.md → writing-good-tests.md
上游把 299 行的反模式枚举重写为 198 行的两条原则:
- 原则 1「点名它要抓的破坏」 —— 写测试体前先答"什么生产改动会让它失败,那是 bug 还是决定"。含镜像断言、变更探测器、测行为不测文本、测你的代码不测框架
- 原则 2「跑真东西」 —— mock 不配拥有断言、在正确层级 mock、替身要具体、完整镜像真实数据、生产类只承载生产方法
- 新增变异检查:收尾前在脑中变异生产代码,每种现实变异都应至少让一个测试失败
- 触发条件放宽到「编写或修改任何测试时」
TDD SKILL.md 同步:删掉「为什么顺序很重要」整节长散文(论点折进合理化借口表,5 行扩写)、删掉末尾已失效的「测试反模式」一节。
🔧 audit 结构漂移度量修正(此前一直在虚报欠账)
audit.sh 用 grep -cE '^#\{1,4\} ' 数标题,但这会把 ``` 围栏内的 shell 注释(# 运行测试)当成 markdown 标题 —— 多几行 bash 注释就能凭空造出「结构漂移」。
用正确口径(awk 逐行跟踪围栏)重算 14 个 skill,3 条告警里 2 条是假阳性:
| skill | 旧口径 | 新口径 |
|---|---|---|
executing-plans | 9/16 WARN | 9/11 pass |
finishing-a-development-branch | 21/31 WARN | 14/17 pass |
using-git-worktrees | 21/28 WARN | 14/21 WARN(真漂移) |
双向验证:给 brainstorming 加 5 个真标题会触发告警,加 5 行围栏内 shell 注释不触发。
✅ 验证
- 两个新/改文件章节均与上游一一对应;
writing-good-tests.md指标精确一致(12 bold 要点 / 11 行表格 / 11 条危险信号 / 14 项代码记号) - 行为 eval 8 个判断场景:8/8 全对。附带一个有价值的对照:agent 拿不到
writing-good-tests.md、只能退回 SKILL.md 四条摘要时得分 6/8 —— 错的恰好是只存在于参考文件里的两条规则(部分 mock 静默失败、琐碎转发 getter 不配有测试)。说明参考文件承载着摘要覆盖不到的承重规则。 scripts/audit.sh152 pass / 1 warn / 0 fail(原 150/3)、scripts/verify-release.sh82 pass / 0 fail