@wwkit/harness 1.0.18 → 1.0.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/README.md +2 -2
  2. package/agents/fastcode.md +130 -0
  3. package/agents/scrum.md +65 -0
  4. package/package.json +4 -2
  5. package/readme/development.md +1 -1
  6. package/scripts/postinstall.js +41 -0
  7. package/skills/query/SKILL.md +112 -0
  8. package/skills/query/references/input.schema.json5 +25 -0
  9. package/skills/read-docs/references/superpowers/comparison.md +1 -1
  10. package/skills/read-docs/references/superpowers/index.md +1 -1
  11. package/agents/query.md +0 -42
  12. package/agents/todo.md +0 -119
  13. package/agents/work-explore.md +0 -50
  14. package/agents/work-general.md +0 -44
  15. package/agents/work.md +0 -188
  16. package/plugins/work-bootstrap.js +0 -77
  17. package/scripts/work-review-package +0 -50
  18. package/scripts/work-task-brief +0 -27
  19. package/scripts/work-workspace +0 -31
  20. package/skills/todo-dispatch/SKILL.md +0 -211
  21. package/skills/todo-finalize/SKILL.md +0 -238
  22. package/skills/todo-plan/SKILL.md +0 -174
  23. package/skills/todo-recovery/SKILL.md +0 -179
  24. package/skills/todo-review/SKILL.md +0 -259
  25. package/skills/work-dispatch/SKILL.md +0 -91
  26. package/skills/work-dispatch/references/dispatch-prompt.md +0 -96
  27. package/skills/work-dispatch/references/explore-prompt.md +0 -74
  28. package/skills/work-dispatch/references/prepare.md +0 -25
  29. package/skills/work-dispatch/references/report-handling.md +0 -65
  30. package/skills/work-finalize/SKILL.md +0 -83
  31. package/skills/work-finalize/references/acceptance.md +0 -19
  32. package/skills/work-finalize/references/final-review.md +0 -55
  33. package/skills/work-finalize/references/handover.md +0 -36
  34. package/skills/work-ledger/SKILL.md +0 -73
  35. package/skills/work-ledger/references/bootstrap.md +0 -36
  36. package/skills/work-ledger/references/layout.md +0 -25
  37. package/skills/work-ledger/references/ledger-format.md +0 -57
  38. package/skills/work-plan/SKILL.md +0 -81
  39. package/skills/work-plan/references/plan-file.md +0 -29
  40. package/skills/work-plan/references/self-review.md +0 -18
  41. package/skills/work-plan/references/split-rules.md +0 -23
  42. package/skills/work-plan/references/task-fields.md +0 -44
  43. package/skills/work-recovery/SKILL.md +0 -80
  44. package/skills/work-recovery/references/budget.md +0 -39
  45. package/skills/work-recovery/references/replan.md +0 -21
  46. package/skills/work-recovery/references/rollback.md +0 -20
  47. package/skills/work-review/SKILL.md +0 -95
  48. package/skills/work-review/references/breaker.md +0 -26
  49. package/skills/work-review/references/fix-loop.md +0 -123
  50. package/skills/work-review/references/review-package.md +0 -24
  51. package/skills/work-review/references/reviewer-prompt.md +0 -77
  52. package/skills/work-review/references/verdict-handling.md +0 -25
@@ -1,80 +0,0 @@
1
- ---
2
- name: work-recovery
3
- description: |
4
- [work 专属 runbook] 仅供 work agent 通过 skill 工具显式调用(name=work-recovery),其他 agent / 普通对话禁止触发
5
- 恢复与护栏技能:覆盖重规划(触发条件 3 种、规则=复用 session_id/增量调整/不重做已完成、上限 3 轮超限升级用户)+ 退出条件(target 验收/重规划≤3/阻塞/预算超限/ESCALATE)+ 预算与超时(单任务超时=prompt 软上限硬兜底、等待纪律有界等待不静默阻塞、总预算护栏 3 项≤20 任务/≤30 分钟/并行≤5)+ 中断与回滚(用户中断保留现场、回滚限本任务 BASE..HEAD/工作树脏禁--hard/forbidden 文件强制 checkout/绝不 reset 早于 initial_base)+ 防失控护栏 5 条。
6
- 适用:work agent 运行期遇到计划级失败 / 超时 / 中断 / 需回滚 / 防失控检查时加载。
7
- 不适用:单任务 review fix(用 work-review);最终交付(用 work-finalize);非 work 流程的普通恢复。
8
- license: MIT
9
- metadata:
10
- workflow: on-demand
11
- ---
12
-
13
- # work-recovery 技能
14
-
15
- ## 触发时机
16
-
17
- work agent 运行期遇到以下任一情况时加载本技能对应阶段:
18
-
19
- - 计划级失败(多任务失败 / 某任务反复失败且换模型拆任务均无效 / 计划自审结构性冲突在实现后成真)→ 加载 `references/replan.md`
20
- - 判定退出(target 验收 / 重规划超限 / 阻塞 / 预算超限 / ESCALATE)→ 加载 `references/budget.md` 退出条件段
21
- - 单任务超时 / 等待 child / 总预算护栏检查 → 加载 `references/budget.md` 预算段
22
- - 用户中断 / implementer 提交有误需回滚 / forbidden 文件被改 → 加载 `references/rollback.md`
23
- - 防失控周期自检 → 加载 `references/rollback.md` 护栏段
24
-
25
- ## 输入
26
-
27
- 从 work.md 流程传入:
28
-
29
- | 字段 | 说明 | 默认 |
30
- |------|------|------|
31
- | `target` | 要达成的目标(退出条件按其验收标准判定) | 必填 |
32
- | `root_dir` | 工程根目录 | 当前工作目录 |
33
- | `doc_dir` | 本次 session 产物目录(Ledger / plan.md 所在) | 必填 |
34
- | `session_id` | 本次 session id(重规划复用,不新开) | 必填 |
35
- | `initial_base` | 本次运行最初的 base(回滚绝不 reset 早于它) | 必填 |
36
- | `constraints` | 全局禁改/禁操作清单(forbidden 文件判定基准) | 无 |
37
-
38
- ## 工作流程
39
-
40
- ### 阶段 1:加载 references
41
-
42
- 用 `read` 工具按触发原因加载本技能 `references/` 下对应文件(相对路径基于本 skill 目录):
43
-
44
- - `references/replan.md` → 重规划(触发条件 3 种、规则=复用 session_id/增量调整/不重做已完成、上限 3 轮超限升级用户)
45
- - `references/budget.md` → 退出条件(5 种)+ 预算与超时(单任务超时 / 等待纪律 / 总预算护栏 3 项)
46
- - `references/rollback.md` → 中断与回滚(用户中断 / 回滚规则 / forbidden 强制 checkout)+ 防失控护栏 5 条
47
-
48
- ### 阶段 2:按触发分支执行
49
-
50
- - **重规划**:按 `references/replan.md` 复用同一 `session_id`/`doc_dir`/Ledger,只重走第二步对未完成目标重新拆分并更新 `plan.md`,已完成任务保留标记 done 不重派发;Ledger 记 `replan round <R>/3`;最多 3 轮,超限升级用户。
51
- - **退出判定**:按 `references/budget.md` 退出条件 5 种逐项检查,命中即停止派发并如实报告。
52
- - **预算与超时**:派发 subagent 时用 prompt 软上限(implementer ≤50 / fix ≤20 / reviewer ≤15)硬兜底;等待期有界等待不静默阻塞;总预算护栏 3 项超限即停派发记 Ledger 报告用户。
53
- - **中断与回滚**:用户中断立即停派发 + cancel 在途 + 记 Ledger + 保留现场;回滚限本任务 `BASE..HEAD`(BASE 从 Ledger `T<N>: base=` 读取),工作树脏禁 `--hard` 改用 `git revert` 或 `git reset --soft` + 手动 checkout,forbidden 文件强制 `git checkout -- <file>`,绝不 reset 早于 `initial_base`。
54
- - **防失控自检**:按 `references/rollback.md` 护栏 5 条周期自检(并发分型 / task 预算 / scoped re-review / Round 5 后裁决 / 外部信息用 general+webfetch)。
55
-
56
- ## 输出
57
-
58
- - Ledger 条目(`replan round <R>/3` / `T<N>: timeout` / `T<N>: interrupted by user ...` / `T<N>: reverted to <sha>` / `T<N>: reverted forbidden <file>` / 总预算超限记录)
59
- - 更新后的 `plan.md`(重规划时)
60
- - 本技能**不派发新 subagent**(重规划后的派发由 work agent 主流程按新 plan.md 进行);**不 push / 不 merge / 不 reset 早于 initial_base**
61
-
62
- ## 约束
63
-
64
- - 重规划复用同一 `session_id`/`doc_dir`/Ledger,是针对失败与未完成部分的增量调整,不重做已完成任务;最多 3 轮,超限升级用户不再自动继续。
65
- - 退出条件 5 种:target 验收通过 / 重规划 ≤3 轮 / 阻塞无法解除(含与 `constraints` 不可调和)/ 总预算超限 / subagent ESCALATE 且无法通过拆分任务/换模型解决。
66
- - 单任务超时:prompt 软上限(implementer ≤50 / fix ≤20 / reviewer ≤15)硬兜底;超时立即记 Ledger `T<N>: timeout` 标 BLOCKED/ESCALATE,不无限同步等待。
67
- - 等待纪律:background 模式下主 agent 不阻塞,无需轮询;派发后继续做本地工作(写 Ledger、准备下一个 review package、读已返回的报告),收到 subagent 完成通知后处理返回。如果 subagent 异常长时间未返回(超过预算时间的 2 倍),记 Ledger `T<N>: timeout` 并标 BLOCKED/ESCALATE。
68
- - 总预算护栏 3 项:总任务数 ≤20 / 总运行时长 ≤30 分钟 / 最大并行 work-explore ≤5;每项超限如实写进 Ledger 并报告,不静默续跑。
69
- - 用户中断保留现场,不删除产物目录。
70
- - 回滚仅限本任务 `BASE..HEAD`;工作树脏禁 `--hard`;forbidden 文件强制 `git checkout -- <file>` 恢复;**绝不 `reset` 到早于 `initial_base`**。
71
- - 防失控护栏 5 条:只读 work-explore 可并行 ≤5 / 可写 work-general 必须串行;每个 task ≤10 分钟,失败先换模型/拆任务再重规划;每轮 fix 后必须 scoped re-review;Round 5 后才裁决,每条裁决都是 Ledger 条目禁止静默丢弃;需要外部信息用 `work-general` + `webfetch` 调研不嵌套再派发。
72
-
73
- ## 资源目录
74
-
75
- ```
76
- references/
77
- ├── replan.md # 重规划(触发 3 种/规则/上限 3 轮)
78
- ├── budget.md # 退出条件 5 种 + 预算与超时(单任务超时/等待纪律/总预算护栏 3 项)
79
- └── rollback.md # 中断与回滚(用户中断/回滚规则/forbidden 强制 checkout)+ 防失控护栏 5 条
80
- ```
@@ -1,39 +0,0 @@
1
- # 退出条件
2
-
3
- - 对照 `target` 验收标准,所有任务 `done`、review 通过 **且整体验收通过**
4
- - 重规划 ≤3 轮
5
- - 阻塞无法解除(含与 `constraints` 不可调和)
6
- - 总预算超限(见「预算与超时」)
7
- - subagent 返回 ESCALATE 且无法通过拆分任务/换模型解决 → 如实向用户报告
8
-
9
- # 预算与超时(总预算 + 单任务超时)
10
-
11
- ## 单任务超时(技术强制优先)
12
-
13
- - 所有 `task` 派发**必须**在 `task` 调用中显式传 `background=true` 参数——这是 agent 行为约束。环境变量 `OPENCODE_EXPERIMENTAL_BACKGROUND_SUBAGENTS=true` 由 opm harness 自动注入,使 `background=true` 参数生效。agent 只需在 task 调用中传 `background=true`,环境变量由 opm harness 自动注入。
14
- - background 模式下主 agent 不阻塞,subagent 异步运行,完成时自动通知注入结果。
15
- - prompt 中的工具调用上限(implementer ≤50 / work-explore ≤30 / fix ≤20 / reviewer ≤15 / re-reviewer ≤10 / final reviewer ≤30)是**软约束**,是唯一的行为限制——没有平台级硬超时兜底。
16
- - 如果 subagent 长时间未返回(超过预期时间),主 agent 可继续做本地工作,不阻塞。
17
-
18
- ## subagent 强制退出配置(实施细节)
19
-
20
- 1. **background 模式启用**:`OPENCODE_EXPERIMENTAL_BACKGROUND_SUBAGENTS=true` 已由 opm harness 默认注入,task 工具的 `background=true` 参数直接生效——subagent 异步运行,主 agent 不 block,完成时自动通知注入结果。环境变量由 opm harness 自动注入,agent 只需在 task 调用中传 `background=true`。
21
- 2. **escape 中断语义**:TUI `session_interrupt`(escape)中断的是**整个 session**(含所有子 session),不是只中断子 session。中断后可通过 `git log` + Ledger 恢复续跑。
22
- 3. **subagent_depth**:限制嵌套深度(默认 1),防止 subagent 无限递归派发——限制的是嵌套层级,不是工具调用次数。
23
-
24
- ## 等待纪律(不静默阻塞)
25
-
26
- - background 模式下主 agent 不阻塞,无需轮询。派发后继续做本地工作(写 Ledger、准备下一个 review package、读已返回的报告),收到 subagent 完成通知后处理返回。
27
- - 如果 subagent 异常长时间未返回(超过预算时间的 2 倍),记 Ledger `T<N>: timeout` 并标 BLOCKED/ESCALATE。
28
-
29
- ## 总预算护栏(防失控)
30
-
31
- 主 agent 侧维护一份总预算,超限即停止派发、记 Ledger、报告用户:
32
-
33
- | 预算项 | 建议值 | 超限动作 |
34
- |--------|--------|---------|
35
- | 总任务数 | ≤ 20 | 规划期由 2.3 范围闸门拦截;运行时超限停止拆分,评估重规划或升级用户 |
36
- | 总运行时长 | ≤ 30 分钟 | 停止派发,记 Ledger,报告用户 |
37
- | 最大并行 explore | ≤ 5(见 2.4) | 等待,不超额派发 |
38
-
39
- 每项超限都**如实写进 Ledger** 并报告,不静默续跑。
@@ -1,21 +0,0 @@
1
- # 重规划(计划级失败恢复)
2
-
3
- 计划级失败时主 agent **自主重新规划**,只针对失败/未完成的目标,不打断用户、不重做已完成任务。
4
-
5
- ## 触发
6
-
7
- 单任务失败先走第四步的「换模型 / 拆任务」;当以下任一成立,进入重规划:
8
-
9
- - 一轮计划中多个任务失败,暴露计划本身的问题(任务边界 / 依赖 / 验收标准定义错误);
10
- - 某任务反复失败,且「换模型 / 拆任务」均无效;
11
- - 计划自审(2.3)发现的结构性冲突在实现后成真。
12
-
13
- ## 规则
14
-
15
- - 复用同一 `session_id` / `doc_dir` / Ledger:历史与已完成提交不丢;重规划是**针对失败与未完成部分的增量调整**。
16
- - 只重走第二步:重读 `target`,对未完成目标重新拆分,更新 `plan.md`;已完成任务条目保留并标记 done,不重新派发。
17
- - Ledger 记 `replan round <R>/3`(`<R>` = 第几轮);重规划后照常走派发 → review → fix 循环。
18
-
19
- ## 上限
20
-
21
- - 最多 3 轮重规划;超限 → 升级用户,如实报告,不再自动继续(见「退出条件」)。
@@ -1,20 +0,0 @@
1
- # 中断与回滚
2
-
3
- ## 用户中断
4
-
5
- - 收到用户中断后:立即停止派发新 subagent;对在途 subagent 发送 cancel;记 Ledger `T<N>: interrupted by user (commits <base7>..<head7>, uncommitted: <files>)`。
6
- - **保留现场**:不删除产物目录,便于续跑或复盘。
7
-
8
- ## 回滚
9
-
10
- - implementer 提交有误:回滚限定在本任务 `BASE..HEAD`(BASE 从 Ledger `T<N>: base=` 读取)。起始检查已保证工作树干净(用户已 commit/stash),不存在起始脏文件。**若工作树干净**可用 `git reset --hard <BASE>`;**若工作树脏**(任务执行期间产生),禁止 `--hard`(会连同脏文件一起丢弃),改用 `git revert <task commits>` 或 `git reset --soft <BASE>` + 手动 checkout 目标文件。回滚后在 Ledger 记 `T<N>: reverted to <sha>`。
11
- - **forbidden 文件被改**:reviewer 检测到 `writable` 白名单外的变更(含 `constraints` 禁改文件)→ 记 Critical finding,强制 `git checkout -- <file>` 恢复,并在 Ledger 记 `T<N>: reverted forbidden <file>`。
12
- - 回滚仅限本运行产生的提交,**绝不 `reset` 到早于 `initial_base`**。
13
-
14
- # 防失控护栏
15
-
16
- 1. 并发分型:只读 `work-explore` 可并行 ≤5;可写 `work-general` 必须串行(同一轮最多 1 个),杜绝并发写冲突与 review diff 污染。
17
- 2. 每个 task 预算 ≤10 分钟;worker 失败先换模型/拆任务重试,仍失败则重规划失败部分(见「重规划」)。
18
- 3. 每轮 fix 后必须 scoped re-review,未审查的 fix 是回归的来源。
19
- 4. Round 5 后才裁决,每条裁决都是 Ledger 条目,禁止静默丢弃。
20
- 5. 需要外部信息时用 `work-general` + `webfetch` 调研,不在子代理里嵌套再派发。
@@ -1,95 +0,0 @@
1
- ---
2
- name: work-review
3
- description: |
4
- [work 专属 runbook] 仅供 work agent 通过 skill 工具显式调用(name=work-review),其他 agent / 普通对话禁止触发
5
- 审查与修复阶段技能:5.1 生成 review package(Commits/Files changed/Diff 上下文 10 行 + 7 位短 SHA);
6
- 5.2 派发 reviewer(两阶段 Spec Compliance+Code Quality、≤15 次、写白名单仅 REVIEW_FILE、不重跑测试);
7
- 5.3 结论处理(✅+Approved→complete / ❌或有 Critical/Important→fix loop / ⚠️→主 agent 核查;Minor→deferred;Plan-mandated→主 agent 裁决 ruled 不打断);
8
- 6.2 fix 轮次策略(1-3 复用 session,4-5 新 implementer,能力假设退化);
9
- 6.3 scoped re-review(FIX_BASE=最后 reviewed_head、re-reviewer ≤10 次、写 rereview-<R>.md);
10
- 6.4 Ledger 记录两条;6.5 异常分支状态机;6.6 Breaker(round 5 才裁决 park/STOP,绝不 round 5 前裁决)。
11
- 适用:work agent 第五步「Task Review」与第六步「Fix Loop」。
12
- 不适用:派发 implementer(用 work-dispatch);规划(用 work-plan);非 work 流程的普通审查。
13
- license: MIT
14
- metadata:
15
- workflow: sequential
16
- ---
17
-
18
- # work-review 技能
19
-
20
- ## 触发时机
21
-
22
- work agent 完成第四步派发、implementer 返回 `DONE` 或 `DONE_WITH_CONCERNS` 后,进入第五步「Task Review」时加载本技能;review 报告 Spec ❌ 或有 Critical/Important finding 时进入第六步「Fix Loop」,沿用本技能至 review close 或 Breaker 裁决。
23
-
24
- ## 输入
25
-
26
- 从 work.md 流程传入:
27
-
28
- | 输入 | 说明 |
29
- |------|------|
30
- | `doc_dir` | 产物目录绝对路径(来自 work-ledger),review/diff/rereview 文件均写其下 |
31
- | `task_id` (`T<N>`) | 当前任务编号 |
32
- | `BASE` / `HEAD` | review package 的 diff 起止;`BASE` 取 Ledger 中该任务的 `base=` 值,`HEAD` = 当前 HEAD |
33
- | `BRIEF_FILE` | `<doc_dir>/task-<N>-brief.md`,reviewer/re-reviewer 读取验收标准 |
34
- | `REPORT_FILE` | `<doc_dir>/task-<N>-report.md`,reviewer 读取实现者声称 |
35
- | Ledger 句柄 | review/re-review 后写 `T<N>: reviewed_head=`/fix round 条目 |
36
-
37
- ## 工作流程
38
-
39
- ### 阶段 1:加载 references
40
-
41
- 用 `read` 工具加载本技能 `references/` 下的全部流程文件(相对路径基于本 skill 目录):
42
-
43
- - `references/review-package.md` → 5.1 生成 review package(三段结构 + 7 位短 SHA)
44
- - `references/reviewer-prompt.md` → 5.2 派发 reviewer(两阶段 prompt + 执行边界 ≤15 次 + 写白名单仅 REVIEW_FILE + 不重跑测试 + 报告格式)
45
- - `references/verdict-handling.md` → 5.3 Review 结论处理(✅/❌/⚠️ + Minor deferred + Plan-mandated ruled)
46
- - `references/fix-loop.md` → 6.2 fix 轮次策略 + 6.3 scoped re-review + 6.4 Ledger 记录 + 6.5 异常分支状态机
47
- - `references/breaker.md` → 6.6 Breaker(Round 5 仍有 open findings 时裁决 park/STOP)
48
-
49
- ### 阶段 2:生成 review package
50
-
51
- 按 `references/review-package.md`:取 Ledger 中该任务 `base=` 作为 `BASE`,`HEAD` = 当前 HEAD,写入 `<doc_dir>/task-<N>-review-<base7>..<head7>.diff`,内容含三段(Commits / Files changed / Diff 上下文 10 行)。
52
-
53
- ### 阶段 3:派发 reviewer
54
-
55
- 按 `references/reviewer-prompt.md` 渲染两阶段审查 prompt(Spec Compliance + Code Quality),用 `task` 工具派发,`subagent_type` 取 `work-general`(需写入 REVIEW_FILE)。reviewer 写入 `<doc_dir>/task-<N>-review.md`。
56
-
57
- ### 阶段 4:处理结论
58
-
59
- 按 `references/verdict-handling.md` 读取 `task-<N>-review.md` 分派:✅+Approved→complete;❌或有 Critical/Important→fix loop;⚠️→主 agent 核查;Minor→deferred;Plan-mandated→主 agent 裁决 ruled 不打断。
60
-
61
- ### 阶段 5:Fix Loop(如触发)
62
-
63
- 按 `references/fix-loop.md` 执行最多 5 轮 fix:每轮按轮次策略派发 fix implementer(1-3 复用 session,4-5 新 implementer),fix 后做 scoped re-review(`FIX_BASE` = 最后一条 `reviewed_head=`),写 Ledger 两条;异常分支按 6.5 状态机处理。
64
-
65
- ### 阶段 6:Breaker(如 Round 5 仍有 open findings)
66
-
67
- 按 `references/breaker.md`:停止派发,读 `task-<N>-rereview-5.md`,主 agent 裁决每条 open finding(park with ruling / STOP)。**绝不**在 Round 5 前提前裁决。
68
-
69
- ## 输出
70
-
71
- - `<doc_dir>/task-<N>-review-<base7>..<head7>.diff`(review package)
72
- - `<doc_dir>/task-<N>-review.md`(reviewer 报告)
73
- - fix loop 期间:`<doc_dir>/task-<N>-review-<fix_base7>..<head7>.diff`(scoped package)、`<doc_dir>/task-<N>-rereview-<R>.md`(re-reviewer 报告)
74
- - Ledger 条目:`T<N>: reviewed_head=`、`T<N>: complete`、`T<N>: fix round <R>/5`、`T<N>: minor (deferred)`、`T<N>: ruled`、`T<N>: parked`、`T<N>: BLOCKED`
75
- - 本技能**不派发 implementer 初次执行**(属 work-dispatch),只派发 reviewer / fix implementer / re-reviewer
76
-
77
- ## 约束
78
-
79
- - reviewer/re-reviewer 只读约束写在 prompt 里,不体现在工具权限:唯一允许的写操作是写入对应 REVIEW_FILE/REREVIEW_FILE,不得改源码、不得 add/commit、不得改工作树/index/HEAD/分支。
80
- - reviewer 不重跑测试:信任 Ledger 记录的测试结果。
81
- - fix prompt 引用 review 文件路径,不内联 findings——compaction 后 findings 可能丢失,文件不会。
82
- - fix 轮次硬上限 5 轮;Breaker 绝不在 Round 5 前提前裁决(6.5 即时 ESCALATE/BLOCKED 是技术与边界问题,不属「提前裁决 finding 正确性」)。
83
- - 能力假设退化:每轮新 implementer;不假定模型可切换,退化为「新 implementer + 更详细 brief」,不许静默失效。
84
- - 本技能只审查与 fix,不规划、不派发初次 implementer、不改源码。
85
-
86
- ## 资源目录
87
-
88
- ```
89
- references/
90
- ├── review-package.md # 5.1 review package 三段结构
91
- ├── reviewer-prompt.md # 5.2 reviewer prompt 模板 + 执行边界 + 报告格式
92
- ├── verdict-handling.md # 5.3 结论处理(✅/❌/⚠️/Minor/Plan-mandated)
93
- ├── fix-loop.md # 6.2 轮次策略 + 6.3 scoped re-review + 6.4 Ledger + 6.5 异常状态机
94
- └── breaker.md # 6.6 Breaker(Round 5 裁决 park/STOP)
95
- ```
@@ -1,26 +0,0 @@
1
- # 6.6 Breaker(Round 5 仍有 open findings)
2
-
3
- ## 触发条件
4
-
5
- Fix loop 跑完 Round 5 仍有 open findings 时触发。**绝不**在 Round 5 前提前裁决——那是 pre-judging。6.5 中的即时 ESCALATE/BLOCKED 是技术与边界问题,不属于「提前裁决 finding 正确性」。
6
-
7
- ## 步骤
8
-
9
- 1. 停止派发。
10
- 2. 读取 `task-<N>-rereview-5.md`。
11
- 3. 自己裁决每条 open finding,按下表分派:
12
-
13
- ## 裁决表
14
-
15
- | 情况 | 动作 |
16
- |------|------|
17
- | reviewer 错误/可争议 | park with ruling: `T<N>: parked — <finding> — ruling: <why>` |
18
- | 真问题但不 load-bearing | park with ruling(同上) |
19
- | 真问题且 load-bearing | STOP: `T<N>: BLOCKED — <reason>`,报告用户 |
20
-
21
- ## 约束
22
-
23
- - 仅 Round 5 后触发,Round 1-4 不裁决 finding 正确性。
24
- - park 不打断用户;STOP 才报告用户。
25
- - load-bearing 判定:该 finding 不修复会导致 `target` 未达成或后续任务无法进行。
26
- - 6.5 即时 ESCALATE/BLOCKED(fix implementer 返回 BLOCKED/ESCALATE、finding retry 2 次未解决等)是技术与边界问题,与本 Breaker 的 finding 正确性裁决不同,不视为「提前裁决」。
@@ -1,123 +0,0 @@
1
- # 6.2-6.5 Fix Loop
2
-
3
- ## 6.1 触发条件
4
-
5
- Review 报告 Spec ❌、任何 Critical/Important finding、或你确认的 ⚠️ 项。
6
-
7
- ## 6.2 Fix 轮次策略
8
-
9
- | 轮次 | 正常策略 | 理由 |
10
- |------|----------|------|
11
- | Round 1-3 | 复用原 implementer session(传 `task_id` 续接) | context 完整,知道自己的代码和选择 |
12
- | Round 4-5 | 新 implementer + 更强模型(若平台支持模型切换) | fresh eyes + capability bump |
13
-
14
- **平台能力分支**(正常策略依赖平台能力;若缺失则退化,不许静默失效):
15
-
16
- **正常策略**(平台能力完整时):
17
- - Round 1-3:复用原 implementer session,传 `task_id` 续接(同一 session 内 context 完整)。
18
- - Round 4-5:新 implementer + 更强模型(若平台支持模型切换)。
19
-
20
- **退化策略**(平台能力不完整时,按缺失项退化):
21
- - 若不支持 session 续接(`task_id` 不生效):每轮新 implementer,附完整 brief + report + review 文件路径,prompt 自包含。
22
- - 若不支持模型切换:退化为「新 implementer + 更详细 brief」,Round 4-5 仍用新 implementer 但不切换模型。
23
-
24
- ### 每轮 fix 的 prompt
25
-
26
- ```
27
- 你之前实现了 T<N>,review 发现了以下问题需要修复。
28
-
29
- ## 任务详情
30
-
31
- 读取你的任务 brief:<BRIEF_FILE>
32
-
33
- ## 审查发现
34
-
35
- 读取审查报告:<REVIEW_FILE>
36
- 其中的 Critical 和 Important findings 是你需要修复的。
37
-
38
- ## 执行边界(硬约束)
39
-
40
- - **最多 20 次工具调用**:到 20 次仍未完成必须停止并报告 ESCALATE。
41
- - **只修 open findings**:不要重构未涉及的代码,不要"顺手改进"。
42
- - **每条 finding 最多重试 2 次**:如果同一 finding 修了 2 次仍未解决,停止并报告该 finding 为 ESCALATE。
43
-
44
- ## 修复要求
45
-
46
- 1. 逐条修复 review 中的 Critical/Important findings
47
- 2. 运行 brief 中的 verify 命令验证修复
48
- 3. 将 fix report 追加到 <REPORT_FILE>(不要覆盖之前的报告)
49
- 4. 返回 ≤10 行状态:fix 了哪些 finding、verify 结果、commits、工具调用次数
50
- ```
51
-
52
- **关键**:fix prompt 引用 review 文件路径,不内联 findings——compaction 后 findings 可能丢失,文件不会。
53
-
54
- ## 6.3 Scoped Re-review
55
-
56
- 每轮 fix 后,取 Ledger 中该任务**最后一条** `reviewed_head=` 的值作为 `FIX_BASE`,`HEAD` = 当前 HEAD,生成 scoped review package 到 `<doc_dir>/task-<N>-review-<fix_base7>..<head7>.diff`(结构同 5.1)。
57
-
58
- 派发 re-reviewer(`subagent_type` 取 `work-general`;唯一写操作是 `<REREVIEW_FILE>`,不得改源码/add/commit):
59
-
60
- ```
61
- 你是一个 scoped re-reviewer。验证上一轮 review 的 findings 是否被解决,检查 fix diff 是否引入新问题。
62
-
63
- ## Task
64
- 读取 brief:<BRIEF_FILE>
65
-
66
- ## 审查发现
67
- 读取审查报告:<REVIEW_FILE>
68
- 其中的 Critical/Important findings 是你需要验证的。
69
-
70
- ## Fix
71
- 读取实现者报告(fix report 在末尾):<REPORT_FILE>
72
- Fix base: <FIX_BASE_SHA> Head: <HEAD_SHA>
73
- Diff 文件:<DIFF_FILE>
74
-
75
- ## 执行边界(硬约束)
76
-
77
- - **最多 10 次工具调用**:到 10 次仍未完成必须停止并报告未完成。
78
- - **只验证 findings + fix diff**:不重新审查未改动代码。
79
- - **写操作白名单 = 仅 `<REREVIEW_FILE>`**:不修改源码、不 add、不 commit、不改工作树/index/HEAD/分支;唯一允许的写是写入 `<REREVIEW_FILE>`。
80
-
81
- ## 范围
82
- - 只验证 findings 是否解决 + 检查 fix diff 新问题
83
- - 范围外的观察记为 out-of-scope,不阻塞
84
-
85
- ## 报告格式
86
-
87
- 将完整 re-review 报告写入 <REREVIEW_FILE>,然后用 ≤10 行回报:
88
- - 逐条 finding: ADDRESSED / NOT ADDRESSED
89
- - New breakage: None / <描述>
90
- - Verdict: All findings addressed | Findings remain open
91
- - 工具调用次数(如 "used 6/10")
92
- ```
93
-
94
- re-reviewer 写入文件:`<doc_dir>/task-<N>-rereview-<R>.md`(R = 轮次编号)
95
-
96
- ## 6.4 Ledger 记录
97
-
98
- 每轮 fix 后、re-review 结束后立即追加两条:
99
-
100
- ```
101
- T<N>: fix round <R>/5 (<X> addressed, <Y> open — <finding one-liners>; commits <a7>..<b7>)
102
- T<N>: reviewed_head=<re-review 时的 HEAD>
103
- ```
104
-
105
- ## 6.5 Fix loop 异常分支状态机
106
-
107
- fix 过程中出现的非正常返回按以下状态表处理(不分轮次,即时触发):
108
-
109
- | 事件 | 处理 |
110
- |------|------|
111
- | fix implementer 返回 `BLOCKED`/`ESCALATE` | 停止本任务 fix,写 Ledger `T<N>: fix blocked/escale (<reason>)`,按 6.6 Breaker 裁决或升级用户 |
112
- | re-review 报 **New breakage**(Critical/Important) | 作为新 finding 并入下一 fix round(不单独重启流程);Minor → park |
113
- | fix 后 `verify` 失败 | 视为该 finding 未解决;该 finding 计 retry+1,累计 >2 次 → 该 finding 单独 `ESCALATE` |
114
- | 部分 `ADDRESSED` / 部分 `NOT ADDRESSED` | 仅未解决项进入下一轮;已解决项在 Ledger 标注 `fixed` |
115
- | 某 finding retry 2 次仍未解决 | 该 finding 单独 `ESCALATE`,不阻塞其他 finding 继续 |
116
- | re-reviewer 返回空 / 无 verdict | 记 Ledger `T<N>: rereview missing`,从 rereview 文件读取;文件亦无 → 按该轮 findings 未解决处理 |
117
-
118
- ## 约束
119
-
120
- - fix 轮次硬上限 5 轮。
121
- - `FIX_BASE` 语义:取 Ledger 中该任务**最后一条** `reviewed_head=` 的值(不是初始 `base=`),保证 scoped re-review 只看 fix diff。
122
- - re-reviewer 工具调用上限 10 次;写白名单仅 `<REREVIEW_FILE>`。
123
- - fix prompt 引用 review 文件路径,不内联 findings。
@@ -1,24 +0,0 @@
1
- # 5.1 生成 review package
2
-
3
- ## 步骤
4
-
5
- 1. 取 Ledger 中该任务的 `base=` 值作为 `BASE`;`HEAD` = 当前 HEAD。
6
- 2. 写入 `<doc_dir>/task-<N>-review-<base7>..<head7>.diff`(`<base7>`/`<head7>` 为 7 位短 SHA),内容必须含三段:
7
-
8
- ## 三段结构
9
-
10
- 1. `## Commits`:`BASE..HEAD` 的 commit 列表
11
- 2. `## Files changed`:`BASE..HEAD` 的变更文件统计
12
- 3. `## Diff`:`BASE..HEAD` 的完整 diff(上下文取 10 行)
13
-
14
- ## 产物
15
-
16
- | 产物 | 位置 | 用途 |
17
- |------|------|------|
18
- | review package diff | `<doc_dir>/task-<N>-review-<base7>..<head7>.diff` | reviewer 读取审查 |
19
-
20
- ## 约束
21
-
22
- - 短 SHA 一律取 7 位(`${sha:0:7}`)。
23
- - diff 上下文固定 10 行(`git diff -U10` 或等价)。
24
- - `BASE` 必须来自 Ledger `base=` 条目,不取记忆值(compaction 恢复安全)。
@@ -1,77 +0,0 @@
1
- # 5.2 派发 task reviewer
2
-
3
- 使用 `task` 工具,`subagent_type` 取 `work-general`(reviewer 需写入 REVIEW_FILE,explore 无写工具)。**只读约束写在 prompt 里,不体现在工具权限**:唯一允许的写操作是写入 `<REVIEW_FILE>`,不得改源码、不得 add/commit。
4
-
5
- ## prompt 结构
6
-
7
- ```
8
- 你是一个任务审查者。审查 T<N> 的实现:先检查是否符合需求,再检查代码质量。
9
-
10
- ## 需求
11
-
12
- 读取任务 brief:<BRIEF_FILE>
13
- 它包含 goal、files、interfaces、accept(验收标准)、verify(验证命令)。
14
-
15
- 全局约束:
16
- <GLOBAL_CONSTRAINTS — 从 constraints 原样复制;constraints 为空时写(无额外约束)>
17
-
18
- ## 实现者声称做了什么
19
-
20
- 读取实现者报告:<REPORT_FILE>
21
-
22
- ## 待审查的 Diff
23
-
24
- Base: <BASE_SHA>
25
- Head: <HEAD_SHA>
26
- Diff 文件:<DIFF_FILE>
27
-
28
- 读取 diff 文件——它包含 commit 列表、统计摘要和完整 diff。
29
-
30
- ## 执行边界(硬约束)
31
-
32
- - **最多 15 次工具调用**:到 15 次仍未完成审查必须停止并报告未完成。
33
- - **禁止爬取代码库**:只在 diff 内审查,除非有具体命名风险需要检查(每次外部检查计 1 次工具调用)。
34
- - **不重跑测试**:信任 Ledger 记录的测试结果,不运行测试。
35
- - **写操作白名单 = 仅 `<REVIEW_FILE>`**:不修改源码、不 add、不 commit、不改工作树/index/HEAD/分支;唯一允许的写是写入 `<REVIEW_FILE>`。
36
-
37
- ## 审查原则
38
-
39
- - **不信任实现者报告**:它是未验证的声明,对照 diff 验证
40
- - diff 的上下文行就是被改的文件——不要单独 Read 已在 diff 中的文件,除非某段 hunk 被截断
41
-
42
- ## Part 1: Spec Compliance
43
-
44
- 对照 brief 的 accept 验收标准逐条检查:
45
- - 每条 accept 是否满足?附 file:line 证据
46
- - Missing:跳过/遗漏的要求
47
- - Extra:未要求的过度工程
48
- - Misunderstood:方向错误
49
-
50
- ## Part 2: Code Quality
51
-
52
- - 关注分离是否清晰
53
- - 错误处理是否恰当
54
- - DRY 且无过度抽象
55
- - 边界情况是否处理
56
- - 测试是否验证真实行为
57
- - interfaces 声明的签名是否与实现匹配
58
-
59
- ## 报告格式
60
-
61
- 将完整审查报告写入 <REVIEW_FILE>,然后用 ≤10 行回报:
62
- - Spec Compliance: ✅ | ❌
63
- - Task quality: Approved | Needs fixes
64
- - Critical/Important 数量
65
- - 工具调用次数(如 "used 8/15")
66
- - Review 文件路径
67
- ```
68
-
69
- ## reviewer 写入文件
70
-
71
- `<doc_dir>/task-<N>-review.md`
72
-
73
- ## 约束
74
-
75
- - 两阶段顺序固定:先 Spec Compliance,再 Code Quality。
76
- - 工具调用上限 15 次;写白名单仅 `<REVIEW_FILE>`;不重跑测试。
77
- - 不信任实现者报告,对照 diff 验证;diff 上下文行即被改文件,不单独 Read(除非 hunk 截断)。
@@ -1,25 +0,0 @@
1
- # 5.3 Review 结论处理
2
-
3
- 读取 `task-<N>-review.md`,按结论处理:
4
-
5
- ## 分支表
6
-
7
- | 结论 | 动作 |
8
- |------|------|
9
- | **Spec ✅ + Approved** | 写 Ledger `T<N>: reviewed_head=<head7>`、`T<N>: complete (commits <base7>..<head7>, review clean)`,勾单,下一任务 |
10
- | **Spec ❌ 或有 Critical/Important** | 先写 Ledger `T<N>: reviewed_head=<head7>`,再进入 fix loop(第六步) |
11
- | **⚠️ Cannot verify from diff** | 你自己核查(你持有计划和跨任务上下文);若核查需读文件超过 3 次,改为派 `work-explore` 子任务核查,避免污染 context |
12
-
13
- ## Minor findings
14
-
15
- 记入 Ledger(`T<N>: minor (deferred): <one-liner>`),不进入 fix loop,留给 final review 处理。
16
-
17
- ## Plan-mandated findings
18
-
19
- finding 与计划文本冲突时 → 你以 spec/`target` 为最高权威**自行裁决**(计划那句话 vs finding,谁更符合 spec),记 Ledger `T<N>: ruled — <finding> — <裁决与理由>`,不打断用户。仅当 finding 与用户给的 `constraints`(而非 AI 生成的 plan)冲突时,才升级用户。
20
-
21
- ## 约束
22
-
23
- - `reviewed_head=` 必须在进入 fix loop 前先写,作为后续 scoped re-review 的 `FIX_BASE` 来源。
24
- - Minor 不阻塞、不 fix,仅 deferred。
25
- - Plan-mandated 裁决不打断用户:spec/`target` 是最高权威,AI 生成的 plan 不是。仅与用户 `constraints` 冲突才升级。