需求描述
dispatch-contract 的 %%DONE%% 门禁(hooks/subagent-done-gate.sh)只校验标记在场,不校验产物完整性。子 agent 预算耗尽时不是静默失败,而是回传一行中间进展后正常结束并带上标记——「预算耗尽的进展行 + 标记」与「真定稿 + 标记」在机器侧同形,门禁放行。
现场记录(claude-config PR #167 开发过程,三个 dev 实例连续截断)
| 实例 |
回传原文 |
实际落地 |
| 第 1 个 |
44 passed, 0 failed (43 baseline + 1 new file). Now verifying git status cleanliness. |
代码+测试确实完成 |
| 第 2 个 |
Now write the DoD judgment functions. Insert before audit_q0: |
代码落地,测试文件与四处文档全未创建 |
| 第 3 个 |
Now I have enough understanding. Let me design the 13 test cases... |
零产出 |
三个都触发了 SubagentStop 门禁并正常退出。
追问同一实例无效
对第 1、2 个实例用 SendMessage 恢复并明确要求定稿。第 1 个给出完整报告(它本来就做完了,只差报告),第 2 个恢复后再次截断——预算已耗尽,恢复不补充预算。判据:同一形态连续出现两次即应视为规模问题,停止追问。
更危险的:自报数字与磁盘不符
第 1 个实例自报 44 passed 是真的,但那个数字恰好等于改动前基线(43 + 第一批新文件),因为第二批承诺的测试文件从未创建。数字对、结论错——不实跑发现不了。
同源问题另一面:另一实例在报告里描述它用 itertools.permutations 验证了 tie-break 顺序无关性。那是过程中的一次性临场执行、未落盘,被当成交付物写进 PR 描述,被 grok 评审当作超售抓出(PR #167 Major 1/2)。
报告里「我验证了 X」≠ 仓库里存在 X 的回归测试。
建议方向(优先级递减)
方向 1:subagent-dispatch skill 补「分段落盘」派发侧约束(最廉价,建议优先)
铁律③「渐进产出」现在的表述是「分段读、尽早吐中间进展」——治的是 watchdog stall,而非产物丢失。第 3 个实例正是把全部产出堆在末尾导致零产出,它并不违反现有铁律③的字面要求。
建议在 references/dispatch-contract.md 铁律③节补一条与「吐进展」并列的落盘要求:大任务派发 prompt 应写明「按交付物清单顺序逐批落盘,每完成一批立即写入,禁止攒到最后一次写入」。两者关注点不同——吐进展防 stall 误判,逐批落盘防预算截断丢产物。
注:pr-review 的 grok-review 场景是已知反例(cc-plugins #140 记录),脚本产物只在 stdout、不落盘,需前台同步跑完。补充表述时应说明「逐批落盘」的前提是产物形态本身可分批落盘,避免与 #140 的结论冲撞。
方向 2:己方端核验纪律(属 skill 文档,同一处可一并补)
铁律④定稿纪律的前提是能拿到定稿;拿不到时验证责任回到派发端。建议明确:收到中间进展行时直接 ls/grep/实跑核验落地状态,而非追问同一实例。
方向 3:%%DONE%% 门禁加产物形态校验(需评估,可能不值得做)
设想:派发 prompt 声明产出文件清单时,SubagentStop 侧校验这些路径存在。
风险,请连同收益一起评估:
- 把门禁变复杂,且需要一套「如何在 prompt 里声明产物清单」的机器可解析约定
- 「文件存在」仍不等于「内容正确」——可能只是把假绿推后一层
- 与门禁现有的严格 fail-open 风格是否协调,需按插件既有取舍定
方向 1+2 或已足够,方向 3 可作为观察后再定。
涉及文件
plugins/dispatch-contract/skills/subagent-dispatch/references/dispatch-contract.md(方向 1、2)
plugins/dispatch-contract/skills/subagent-dispatch/SKILL.md(铁律速查表若需同步)
plugins/dispatch-contract/hooks/subagent-done-gate.sh + tests/subagent-done-gate.bats(仅方向 3)
验证方法
方向 1、2 为文档变更,验证点是表述与 #140 的 grok-review 反例不冲突。方向 3 若实施,需 bats 覆盖:prompt 声明清单且文件齐全 → 放行;声明清单但缺文件 → 拦一次;未声明清单 → 沿用现判据;清单声明格式不合规 → fail-open。
相关
需求描述
dispatch-contract的%%DONE%%门禁(hooks/subagent-done-gate.sh)只校验标记在场,不校验产物完整性。子 agent 预算耗尽时不是静默失败,而是回传一行中间进展后正常结束并带上标记——「预算耗尽的进展行 + 标记」与「真定稿 + 标记」在机器侧同形,门禁放行。现场记录(claude-config PR #167 开发过程,三个 dev 实例连续截断)
44 passed, 0 failed (43 baseline + 1 new file). Now verifying git status cleanliness.Now write the DoD judgment functions. Insert before audit_q0:Now I have enough understanding. Let me design the 13 test cases...三个都触发了 SubagentStop 门禁并正常退出。
追问同一实例无效
对第 1、2 个实例用
SendMessage恢复并明确要求定稿。第 1 个给出完整报告(它本来就做完了,只差报告),第 2 个恢复后再次截断——预算已耗尽,恢复不补充预算。判据:同一形态连续出现两次即应视为规模问题,停止追问。更危险的:自报数字与磁盘不符
第 1 个实例自报
44 passed是真的,但那个数字恰好等于改动前基线(43 + 第一批新文件),因为第二批承诺的测试文件从未创建。数字对、结论错——不实跑发现不了。同源问题另一面:另一实例在报告里描述它用
itertools.permutations验证了 tie-break 顺序无关性。那是过程中的一次性临场执行、未落盘,被当成交付物写进 PR 描述,被 grok 评审当作超售抓出(PR #167 Major 1/2)。报告里「我验证了 X」≠ 仓库里存在 X 的回归测试。
建议方向(优先级递减)
方向 1:
subagent-dispatchskill 补「分段落盘」派发侧约束(最廉价,建议优先)铁律③「渐进产出」现在的表述是「分段读、尽早吐中间进展」——治的是 watchdog stall,而非产物丢失。第 3 个实例正是把全部产出堆在末尾导致零产出,它并不违反现有铁律③的字面要求。
建议在
references/dispatch-contract.md铁律③节补一条与「吐进展」并列的落盘要求:大任务派发 prompt 应写明「按交付物清单顺序逐批落盘,每完成一批立即写入,禁止攒到最后一次写入」。两者关注点不同——吐进展防 stall 误判,逐批落盘防预算截断丢产物。注:
pr-review的 grok-review 场景是已知反例(cc-plugins #140 记录),脚本产物只在 stdout、不落盘,需前台同步跑完。补充表述时应说明「逐批落盘」的前提是产物形态本身可分批落盘,避免与 #140 的结论冲撞。方向 2:己方端核验纪律(属 skill 文档,同一处可一并补)
铁律④定稿纪律的前提是能拿到定稿;拿不到时验证责任回到派发端。建议明确:收到中间进展行时直接
ls/grep/实跑核验落地状态,而非追问同一实例。方向 3:
%%DONE%%门禁加产物形态校验(需评估,可能不值得做)设想:派发 prompt 声明产出文件清单时,SubagentStop 侧校验这些路径存在。
风险,请连同收益一起评估:
方向 1+2 或已足够,方向 3 可作为观察后再定。
涉及文件
plugins/dispatch-contract/skills/subagent-dispatch/references/dispatch-contract.md(方向 1、2)plugins/dispatch-contract/skills/subagent-dispatch/SKILL.md(铁律速查表若需同步)plugins/dispatch-contract/hooks/subagent-done-gate.sh+tests/subagent-done-gate.bats(仅方向 3)验证方法
方向 1、2 为文档变更,验证点是表述与 #140 的 grok-review 反例不冲突。方向 3 若实施,需 bats 覆盖:prompt 声明清单且文件齐全 → 放行;声明清单但缺文件 → 拦一次;未声明清单 → 沿用现判据;清单声明格式不合规 → fail-open。
相关