Skip to content

[FEAT] %%DONE%% 门禁不校验产物完整性:预算截断的中间进展行与真定稿同形 #163

Description

@WooDragon

需求描述

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。

相关

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions