@wwkit/harness 1.0.18 → 1.0.20

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,83 +0,0 @@
1
- ---
2
- name: work-finalize
3
- description: |
4
- [work 专属 runbook] 仅供 work agent 通过 skill 工具显式调用(name=work-finalize),其他 agent / 普通对话禁止触发
5
- 收尾阶段技能:执行第七步 Final Review(全分支 review package、final reviewer ≤30 次工具调用/写白名单仅 final-review.md/不重跑测试、parked/minor triage、一次 fix + 一次 scoped re-review、final_review_head 记录、残留 load-bearing 报告用户)与第八步 综合交付(最终 target 验收运行强制、三者缺一不可、整合产物=提交历史+diff 路径、不 push/merge、裁决清单显式列出、产物目录清理/归档规则)。
6
- 适用:work agent 所有任务 review close 后的「最终审查 → 整体验收 → 交付」环节。
7
- 不适用:单任务 review(用 work-review);重规划/预算/回滚(用 work-recovery);非 work 流程的普通收尾。
8
- license: MIT
9
- metadata:
10
- workflow: sequential
11
- ---
12
-
13
- # work-finalize 技能
14
-
15
- ## 触发时机
16
-
17
- work agent 所有任务 review close 后、向用户交付前加载本技能,执行「全分支 Final Review → 最终 target 验收 → 综合交付」。
18
-
19
- ## 输入
20
-
21
- 从 work.md 流程传入:
22
-
23
- | 字段 | 说明 | 默认 |
24
- |------|------|------|
25
- | `target` | 要达成的目标(第五步按它判定成败;第八步按其验收标准做整体验收) | 必填 |
26
- | `root_dir` | 工程根目录(产物目录、diff 路径、归档目录的基准) | 当前工作目录 |
27
- | `doc_dir` | 本次 session 的产物目录(plan.md / progress.md(Ledger) / 各 task report 所在) | 必填 |
28
- | `session_id` | 本次 session id(归档目录命名用) | 必填 |
29
- | `merge_base` | Ledger 首行元数据中的 `merge_base`(起始检查时记录) | 必填 |
30
- | `initial_base` | 本次运行最初的 base(整合产物 commit 列表范围 `initial_base..HEAD`) | 必填 |
31
-
32
- ## 工作流程
33
-
34
- ### 阶段 1:加载 references
35
-
36
- 用 `read` 工具加载本技能 `references/` 下的全部流程文件(相对路径基于本 skill 目录):
37
-
38
- - `references/final-review.md` → 第七步 Final Review(MERGE_BASE 取值、review package 生成、final reviewer prompt 与硬约束、一次 fix + 一次 scoped re-review、final_review_head 记录、残留 load-bearing 处理)
39
- - `references/acceptance.md` → 第八步 综合交付 第 1-2 点(最终 target 验收运行强制、三者缺一不可退出判据)
40
- - `references/handover.md` → 第八步 综合交付 第 3-5 点(整合产物=提交历史+diff 路径、不 push/merge、裁决清单显式列出、产物目录清理/归档规则)
41
-
42
- ### 阶段 2:Final Review
43
-
44
- 按 `references/final-review.md` 取 `MERGE_BASE` = Ledger 首行 `merge_base`,生成全分支 review package 到 `<doc_dir>/final-review-<merge_base7>..<head7>.diff`;派发 final reviewer(`work-general`,唯一写操作 `<doc_dir>/final-review.md`,≤30 次工具调用,不重跑测试)让其 triage parked/minor 项;有 findings → 一次 fix dispatch + 一次 scoped re-review(`FIX_BASE` = `final_review_head`);残留 load-bearing → 报告用户。
45
-
46
- ### 阶段 3:最终 target 验收
47
-
48
- 按 `references/acceptance.md` 在 final review 通过后由主 agent 执行一次 target 级整体验收命令(单一可执行命令优先,否则汇总各任务 `verify`),结果写入 `final-review.md` 的「整体验收结果」段;对照 `target` 验收标准确认「所有任务 done + review 通过 + 整体验收通过」三者缺一不可。
49
-
50
- ### 阶段 4:综合交付
51
-
52
- 按 `references/handover.md` 整合产物(提交历史 `initial_base..HEAD` + `final-review-<merge_base7>..<head7>.diff` 路径 + final-review 摘要)写入最终交付文件;向用户输出结果摘要 + 本运行全部裁决清单(parked/ruled/blocked/escalate/reverted/interrupted/replan,按发生顺序,每条附理由);按归档规则保留 `plan.md`/`progress.md`/各 `task-<N>-report.md`/`final-fix-report.md`/各 review/`final-review.md` 到 `<root_dir>/.webwork/harness/archive/<session_id>/`,删除临时 task brief 与 diff 包;默认保留归档,仅当用户显式要求清理时才删除。
53
-
54
- ## 输出
55
-
56
- - `<doc_dir>/final-review.md`(含整体验收结果段)
57
- - `<doc_dir>/final-fix-report.md`(若有 findings)
58
- - `<doc_dir>/final-fix-review-<final_review_head7>..<head7>.diff`(若 scoped re-review)
59
- - 最终交付文件(提交历史 + diff 路径 + final-review 摘要)
60
- - 向用户输出的结果摘要 + 全部裁决清单
61
- - 归档目录 `<root_dir>/.webwork/harness/archive/<session_id>/`(默认保留)
62
- - 本技能**不 push / 不 merge**(那是 worktree 外的副作用,由用户自行决定)
63
-
64
- ## 约束
65
-
66
- - final reviewer 最多 30 次工具调用,到 30 次仍未完成必须停止并报告未完成。
67
- - final reviewer 写操作白名单 = 仅 `<doc_dir>/final-review.md`:不修改源码、不 add、不 commit、不改工作树/index/HEAD/分支。
68
- - final reviewer 不重跑测试:信任 Ledger 记录的测试结果;整体验收由主 agent 在第八步执行。
69
- - 有 findings 时只做**一次** fix dispatch(不是 per-finding)+ **一次** scoped re-review;final fix 一律派新 `work-general`(findings 可能跨多任务,无原 session 可复用)。
70
- - 派发 final fix 前必须写 Ledger 首段 `final_review_head=<sha>`;scoped re-review 的 `FIX_BASE` 取该值。
71
- - 最终 target 验收运行**强制**:任务级 accept 通过并不代表 target 整体可用;退出判据三者缺一不可(所有任务 done + review 通过 + 整体验收通过)。
72
- - 本 agent 不 push / merge;交付即当前分支上的提交串,是否推送到远端由用户决定。
73
- - 裁决清单必须显式列出(parked/ruled/blocked/escalate/reverted/interrupted/replan,按发生顺序,每条附理由),不随产物目录归档而消失。
74
- - 归档即终止本 session,不再支持 compaction 续跑。
75
-
76
- ## 资源目录
77
-
78
- ```
79
- references/
80
- ├── final-review.md # 第七步 Final Review(MERGE_BASE/review package/final reviewer prompt/一次 fix+一次 re-review/final_review_head)
81
- ├── acceptance.md # 第八步 第 1-2 点(最终 target 验收运行强制/三者缺一不可)
82
- └── handover.md # 第八步 第 3-5 点(整合产物/不 push merge/裁决清单/产物目录清理归档)
83
- ```
@@ -1,19 +0,0 @@
1
- # 最终 target 验收(第八步 第 1-2 点)
2
-
3
- ## 1. 最终 target 验收运行(强制)
4
-
5
- final review 通过后,由你(主 agent)执行一次 **target 级整体验收命令**,任务级 accept 通过并不代表 target 整体可用:
6
-
7
- - 若 target 有单一可执行验收命令(如 `npm test` / `make check`)→ 运行它;
8
- - 否则汇总所有任务的 `verify` 结果,逐一确认通过;
9
- - 将验收命令与结果写入 `final-review.md` 的「整体验收结果」段,作为退出判据。
10
-
11
- ## 2. 退出判据(三者缺一不可)
12
-
13
- 对照 `target` 验收标准:
14
-
15
- - 所有任务 `done`
16
- - review 通过
17
- - **整体验收通过**
18
-
19
- 三者缺一不可。
@@ -1,55 +0,0 @@
1
- # Final Review(第七步)
2
-
3
- 所有任务完成后,进行全分支审查。
4
-
5
- ## 流程
6
-
7
- 1. 定义 `MERGE_BASE`:取 Ledger 首行元数据中的 `merge_base`(取值规则见「起始检查」)。生成全分支 review package(`${MERGE_BASE}..HEAD`)到 `<doc_dir>/final-review-<merge_base7>..<head7>.diff`
8
- 2. 派发 final reviewer(`subagent_type` 取 `work-general`;唯一写操作是 `<doc_dir>/final-review.md`,不得改源码/add/commit),指向 Ledger 的 parked/minor 项让它 triage
9
- 3. final reviewer 写入 `<doc_dir>/final-review.md`
10
- 4. 有 findings → **一次** fix dispatch(不是 per-finding)+ **一次** scoped re-review:
11
- - **final fix 一律派新 `work-general`**(findings 可能跨多任务,无原 session 可复用)。
12
- - final fix implementer 工具调用上限 ≤20(同 fix 标准,非 work-general 默认的 50)。
13
- - 派发前写 Ledger 首段 `final_review_head=<sha>`(= 上次 final review 时的 HEAD)。
14
- - fix report 写入 `<doc_dir>/final-fix-report.md`(不覆盖 final-review.md)。
15
- - **final fix 返回后执行工作区验证**(同 work-dispatch 的任务后工作区验证):检查 `git status --porcelain`,脏文件在 fix 的 writable 内 → 主 agent 自动提交;不在 writable 内 → `git checkout` 恢复 + Critical finding。
16
- - fix 后 scoped re-review 的 `FIX_BASE` 取该 `final_review_head` 值,HEAD = 当前 HEAD,diff 写入 `<doc_dir>/final-fix-review-<final_review_head7>..<head7>.diff`。
17
- 5. 残留 load-bearing findings → 报告用户
18
-
19
- ## final reviewer prompt
20
-
21
- ```
22
- 你是全分支审查者。审查整个开发分支的最终质量。
23
-
24
- ## 计划与进度
25
-
26
- 读取计划:<doc_dir>/plan.md
27
- 读取进度:<doc_dir>/progress.md
28
- Ledger 中的 parked/minor 项需要你 triage:哪些必须在合并前修复,哪些可延期。
29
-
30
- ## Diff
31
-
32
- 全分支 diff 文件:<doc_dir>/final-review-<merge_base7>..<head7>.diff
33
-
34
- ## 执行边界(硬约束)
35
-
36
- - **最多 30 次工具调用**:到 30 次仍未完成必须停止并报告未完成。
37
- - **写操作白名单 = 仅 `<doc_dir>/final-review.md`**:不修改源码、不 add、不 commit、不改工作树/index/HEAD/分支;唯一允许的写是写入 final-review 报告。
38
- - **不重跑测试**:信任 Ledger 记录的测试结果;整体验收由主 agent 在第八步执行。
39
-
40
- ## 审查范围
41
-
42
- - 全分支的 spec 覆盖完整性
43
- - 跨任务接口一致性
44
- - parked findings 的 triage
45
- - 整体代码质量
46
-
47
- ## 报告格式
48
-
49
- 将完整审查报告写入 <doc_dir>/final-review.md,然后用 ≤15 行回报:
50
- - 总体评估: Approved | Needs fixes
51
- - Critical/Important 数量
52
- - parked triage 结果
53
- - 工具调用次数(如 "used 22/30")
54
- - Final review 文件路径
55
- ```
@@ -1,36 +0,0 @@
1
- # 综合交付(第八步 第 3-5 点)
2
-
3
- ## 3. 整合产物
4
-
5
- 交付物 = 提交历史(`initial_base..HEAD` 的 commit 列表)+ `final-review-<merge_base7>..<head7>.diff` 文件路径,连同 final-review 摘要一并写入最终交付文件,报告用户。
6
-
7
- **交付即当前分支上的这串提交;本 agent 不 push / merge(那是 worktree 外的副作用),是否推送到远端由用户自行决定。**
8
-
9
- ## 3.1 残留改动自动提交
10
-
11
- target 交付后检查 `git status --porcelain`,若有残留 tracked 改动,自动执行 `git add -A && git commit -m "[auto] target 交付后残留提交"`。
12
-
13
- - 保证下一个 target 起始时工作区干净,无需用户确认。
14
- - `.webwork/` 产物目录已被 `.gitignore` 忽略,不触发脏检查。
15
- - 所有改动均为计划内、review 过的改动,自动 commit 即可。
16
-
17
- ## 4. 裁决清单(显式列出)
18
-
19
- 向用户输出结果摘要:交付物 + **本运行全部裁决**(parked / ruled / blocked / escalate / reverted / interrupted / replan,按发生顺序,每条附理由)。
20
-
21
- 这些是主 agent 替你拍板的决定,必须显式列出,不随产物目录归档而消失。
22
-
23
- ## 5. 产物目录清理(可恢复)
24
-
25
- 删除临时产物(task brief、diff 包);**归档保留** 以下文件到 `<root_dir>/.webwork/harness/archive/<session_id>/`:
26
-
27
- - `plan.md`
28
- - `progress.md`(Ledger)
29
- - 各 `task-<N>-report.md`(含 fix 追加记录,是 reviewer 判断依据、复盘核对的关键)
30
- - `final-fix-report.md`
31
- - 各 review
32
- - `final-review.md`
33
-
34
- `diff` 包可重新生成、brief 可从 `plan.md` 重建,故只删它们。
35
-
36
- **默认保留归档;仅当用户显式要求清理时才删除。归档即终止本 session,不再支持 compaction 续跑。**
@@ -1,73 +0,0 @@
1
- ---
2
- name: work-ledger
3
- description: |
4
- [work 专属 runbook] 仅供 work agent 通过 skill 工具显式调用(name=work-ledger),其他 agent / 普通对话禁止触发
5
- 运行会话管理技能:创建产物目录(doc_dir 树 + .gitignore)、生成/恢复 session_id、起始检查(git 仓库 / 工作树 stash / 运行元数据 branch+initial_base+merge_base)、
6
- 以及 Ledger(progress.md)的格式与读写恢复规则(短 SHA 7 位 + 大小写映射约定)。
7
- 适用:work agent 第三步「产物目录与 Ledger」及 compaction 后恢复进度。
8
- 不适用:规划阶段(用 work-plan);任务派发/审查正文;非 work 流程的普通文档管理。
9
- license: MIT
10
- metadata:
11
- workflow: sequential
12
- ---
13
-
14
- # work-ledger 技能
15
-
16
- ## 触发时机
17
-
18
- work agent 进入第三步「产物目录与 Ledger」时(创建运行时)、以及 compaction 后需要恢复进度时加载本技能。
19
-
20
- ## 输入
21
-
22
- 从 work.md 流程传入:
23
-
24
- | 输入 | 说明 |
25
- |------|------|
26
- | `root_dir` | 工程根目录,产物目录位于 `<root_dir>/.webwork/harness/work/<session_id>/` |
27
- | `target` | 目标摘要,写入 Ledger 首行命名、plan.md 标题 |
28
- | `constraints` | 约束(每个任务 brief 的 `forbidden` 至少包含其全部内容) |
29
- | git 状态 | 起始检查时读取的分支名、HEAD、工作树状态 |
30
-
31
- ## 工作流程
32
-
33
- ### 阶段 1:加载 references
34
-
35
- 用 `read` 工具加载本技能 `references/` 下的全部流程文件(相对路径基于本 skill 目录):
36
-
37
- - `references/layout.md` → 产物目录结构(doc_dir 树 + `.gitignore` + archive 约定)
38
- - `references/bootstrap.md` → session_id 生成与恢复、产物目录创建、起始检查、后续约束
39
- - `references/ledger-format.md` → Ledger(progress.md)格式、条目规则、恢复逻辑、短 SHA/大小写约定
40
-
41
- ### 阶段 2:创建产物目录
42
-
43
- 按 `references/layout.md` 与 `references/bootstrap.md`:生成 `session_id`,创建 `<root_dir>/.webwork/harness/work/<session_id>/`,写入 `<root_dir>/.webwork/harness/work/.gitignore`(内容 `*` + `!.gitignore`)。
44
-
45
- ### 阶段 3:起始检查(仅此一次)
46
-
47
- 按 `references/bootstrap.md`:确认在 Git 仓库内;检查工作树干净(非空则**停止,不自动 stash**,向用户输出脏文件清单,要求用户先 commit 或 stash,用户确认工作树干净后才继续,此为人工确认点之一);记录运行元数据 `branch`/`initial_base`/`merge_base` 并写入 Ledger 首行。
48
-
49
- ### 阶段 4:Ledger 读写维护
50
-
51
- 按 `references/ledger-format.md`:每次派发前写 `T<N>: base=` 与 `T<N>: session=`,review/re-review 后写 `T<N>: reviewed_head=`,implementer 返回后写状态行;恢复时按该文件的恢复逻辑执行(先读 `plan.md` 恢复计划,再读 `progress.md` 恢复进度)。
52
-
53
- ## 输出
54
-
55
- - `<root_dir>/.webwork/harness/work/` 目录树(`.gitignore` + `<session_id>/` 下的 plan.md/progress.md 等文件)
56
- - Ledger 首行元数据块(`doc_dir`/`branch`/`initial_base`/`merge_base`),作为恢复入口
57
- - 按阶段 4 维护的 `T<N>: key=value` 进度条目
58
-
59
- ## 约束
60
-
61
- - 唯一约束:Ledger 字段名与产物文件格式固定(对照 `references/ledger-format.md`),不得改动。
62
- - 短 SHA 一律取 7 位(`${sha:0:7}`);大小写映射约定(见 ledger-format):Ledger 元数据字段小写、任务条目 `T<N>: key=value`、内存/命令变量大写。
63
- - 产物目录绝对路径是恢复入口,compaction 后以 Ledger 首行 `doc_dir=` 为准,不以记忆为准。
64
- - 本技能只维护产物目录与 Ledger,不派发/审查任务、不写任务 brief。
65
-
66
- ## 资源目录
67
-
68
- ```
69
- references/
70
- ├── layout.md # 产物目录结构(doc_dir 树 + .gitignore + archive)
71
- ├── bootstrap.md # session_id 生成与恢复、创建产物目录、起始检查、后续约束
72
- └── ledger-format.md # Ledger 格式、条目规则、恢复逻辑、短 SHA/大小写约定
73
- ```
@@ -1,36 +0,0 @@
1
- # session_id 生成与恢复 + 起始检查(提取自 docs/plans/work-copy.md L225-249)
2
-
3
- ## session_id 生成与恢复(L225-234)
4
-
5
- `session_id` 唯一标识一次编排运行的产物目录,由创建时生成(要求:唯一、可排序、含时间戳)并**写入 Ledger 首行**作为恢复入口。
6
-
7
- **恢复规则**:
8
- - compaction 后从 Ledger 头部元数据块的 `doc_dir=` 读取绝对路径恢复;无法读取时退化为:定位 `<root_dir>/.webwork/harness/work/` 中时间戳最新的 `<session_id>` 目录。
9
- - **产物目录绝对路径是 Ledger 首条元数据**(见 Ledger 格式),恢复时以它为准,不以记忆为准。
10
- - 并发隔离:不同运行用不同 `session_id` 目录,天然隔离,无额外机制。
11
-
12
- **创建产物目录**:创建 `<root_dir>/.webwork/harness/work/<session_id>/` 目录,并写入 `<root_dir>/.webwork/harness/work/.gitignore`(内容为 `*` + `!.gitignore`:忽略所有中间产物,但保留 `.gitignore` 自身)。归档目录 `<root_dir>/.webwork/harness/archive/` **不写** `.gitignore`——保留审计产物,可纳入版本控制。
13
-
14
- ## 起始检查(每个 target 开始时执行)
15
-
16
- 派发任何 subagent 前,先确认工作树安全并记录运行元数据。区分**首次 target**(编排启动后的第一个 target)与**非首次 target**(后续 target 切换):
17
-
18
- 1. **在 Git 仓库内**:非 Git 仓 → 报告用户并停止。
19
- 2. **工作树是否干净**(`git status --porcelain`)——按首次/非首次分别处理:
20
-
21
- **首次 target**:
22
- - **空(干净)**:继续。
23
- - **非空(脏)**:**停止,不自动 stash**。向用户输出脏文件清单,要求用户先 commit 或 stash。这是人工确认点——用户确认工作树干净后才继续。在 `--auto --pure` 模式下(无交互用户),脏工作树直接报错终止并输出脏文件清单,不继续派发。
24
- - 清理后再次检查 `git status --porcelain`,如果仍非空则继续等待用户确认。
25
-
26
- **非首次 target**(上一步 handover 已自动 commit 残留改动,工作区应已干净):
27
- - **空(干净)**:跳过 stash/用户确认流程,直接进入记录元数据。
28
- - **非空(脏)**:**不应发生**——报错终止并输出脏文件清单,不继续派发。不等待用户确认,不自动 stash。
29
- 3. **记录运行元数据**(写入 Ledger 首行,字段语义如下):
30
- - `branch` = 当前分支名
31
- - `initial_base` = 当前 HEAD
32
- - `merge_base` = `initial_base`(本次启动时的 HEAD;使 `MERGE_BASE..HEAD` 恰好覆盖**本次编排产出的提交**,不混入运行前已有提交)。仅当用户**显式要求审查整个分支**时才取 `git merge-base HEAD <main_branch>`。
33
-
34
- ## 后续约束(L247-249)
35
-
36
- - 回滚锚点:`initial_base` 是本运行所有提交的回滚参照(见「中断与回滚」)。
@@ -1,25 +0,0 @@
1
- # 产物目录(提取自 docs/plans/work-copy.md L204-223、L234)
2
-
3
- 所有中间产物统一存放在 `doc_dir`(`<root_dir>/.webwork/harness/work/<session_id>/`)目录:
4
-
5
- ```
6
- <root_dir>/.webwork/harness/work/
7
- .gitignore # 内容: * + !.gitignore(忽略所有产物,保留 .gitignore 自身)
8
- <session_id>/
9
- plan.md # 完整计划(第二步产出,compaction 后恢复用)
10
- progress.md # Ledger(进度持久化)
11
- task-<N>-brief.md # 任务 N 的完整文本(implementer 读取)
12
- task-<N>-report.md # 任务 N implementer 的报告(fix 追加到同一文件)
13
- task-<N>-review.md # 任务 N reviewer 的审查结果
14
- task-<N>-rereview-<R>.md # 任务 N 第 R 轮 re-review 结果
15
- task-<N>-review-<base7>..<head7>.diff # 任务 N 的 review package(diff 包)
16
- final-review.md # 全分支 final review 结果
17
- final-fix-report.md # final 阶段一次 fix 的 report(第七步)
18
- final-review-<merge_base7>..<head7>.diff # final review package
19
- final-fix-review-<final_review_head7>..<head7>.diff # 该 fix 的 scoped re-review diff
20
- ```
21
-
22
- ## .gitignore 约定
23
-
24
- - `<root_dir>/.webwork/harness/work/.gitignore`:内容为 `*` + `!.gitignore` —— 忽略所有中间产物,但保留 `.gitignore` 自身。
25
- - 归档目录 `<root_dir>/.webwork/harness/archive/` **不写** `.gitignore`——保留审计产物,可纳入版本控制。
@@ -1,57 +0,0 @@
1
- # Ledger 格式(提取自 docs/plans/work-copy.md L251-294;全局约束 L27)
2
-
3
- Ledger 是你的恢复地图——compaction 后你的 context 会丢失,但文件不会。Ledger 即 `<doc_dir>/progress.md`。
4
-
5
- ## 全局约束(L27)
6
-
7
- - 短 SHA 一律取 7 位(`${sha:0:7}`)。
8
- - **大小写映射约定**:
9
- - Ledger **元数据字段**小写(`doc_dir`/`branch`/`initial_base`/`merge_base`);
10
- - **任务条目**用 `T<N>: key=value` 形式(如 `T1: base=...`);
11
- - 内存/命令变量同名大写(`BASE`/`HEAD`/`FIX_BASE`/`MERGE_BASE`/`INITIAL_BASE`)。
12
- - 唯一约束:Ledger 字段名与产物文件格式固定,不得改动。
13
-
14
- ## 模板
15
-
16
- ```markdown
17
- # Work ledger — target: <target 摘要>
18
- doc_dir: <root_dir>/.webwork/harness/work/<session_id>
19
- branch: <branch name>
20
- initial_base: <sha — 启动时 HEAD>
21
- merge_base: <sha — 本次运行起点,= initial_base>
22
-
23
- T1: base=a1b2c3d
24
- T1: session=abc123
25
- T1: complete (commits a1b2c3d..d4e5f6a, review clean)
26
- T1: reviewed_head=d4e5f6a
27
- T2: base=d4e5f6a
28
- T2: session=def456
29
- T2: fix round 1/5 (2 addressed, 0 open; commits d4e5f6a..b7c8d9e)
30
- T2: reviewed_head=b7c8d9e
31
- T2: complete (commits d4e5f6a..b7c8d9e, review clean)
32
- T3: base=b7c8d9e
33
- T3: session=ghi789
34
- T3: reviewed_head=e8f9a0b
35
- T3: parked — <finding> — ruling: <why the code stands>
36
- T3: complete (commits b7c8d9e..e8f9a0b, 1 parked)
37
- ```
38
-
39
- ## 每条规则
40
-
41
- - 创建 `doc_dir` 时:写首行元数据块(`doc_dir`/`branch`/`initial_base`/`merge_base`),这是恢复入口。
42
- - 派发 implementer 前:写 `T<N>: base=<BASE_SHA>`(review 和 fix 依赖此 SHA)与 `T<N>: session=<session_ref>`(fix 复用 / 重派时更新)。
43
- - 每次 review / re-review 结束后:写 `T<N>: reviewed_head=<REVIEW_HEAD_SHA>`(供 FIX_BASE 取用)。
44
- - final review 结束后、final fix 派发前:写 `final_review_head=<sha>`(= final review 时的 HEAD,供 final fix 的 scoped re-review 作 `FIX_BASE`)。
45
- - implementer 返回后:立即写状态行(complete/fix round/blocked)。
46
- - compaction 后恢复:先读 `plan.md` 恢复计划,再读 `progress.md` 恢复进度,信任 Ledger 和 `git log` 胜过你的记忆。
47
-
48
- ## 恢复逻辑
49
-
50
- - 首行元数据 `doc_dir=` → 定位会话产物目录绝对路径(恢复入口)。
51
- - 首行命名 target → 确认归属。
52
- - `initial_base` → 启动时的 HEAD;`merge_base` → diff 的起点(默认 = `initial_base`)。
53
- - `T<N>: base=<sha>` → 该任务的 BASE SHA(用于生成 review package)。
54
- - `T<N>: reviewed_head=<sha>` → 该任务上次 review 看到的 HEAD(用于 fix 的 scoped re-review)。
55
- - `final_review_head=<sha>` → final review 时的 HEAD(final fix 的 `FIX_BASE`)。
56
- - `T<N>: complete` → 已完成,不重新派发。
57
- - 最后一行是 fix round → 中断在 loop 中,从下一轮恢复。
@@ -1,81 +0,0 @@
1
- ---
2
- name: work-plan
3
- description: |
4
- [work 专属 runbook] 仅供 work agent 通过 skill 工具显式调用(name=work-plan),其他 agent / 普通对话禁止触发
5
- 规划阶段技能:按 1.1 任务拆分把 target 拆成 ≤10 分钟、可布尔验收的任务,按 2.1 填写 11 字段任务计划,
6
- 按 2.2 写入 plan.md,按 2.3 自审(范围闸门 + 8 项),核对 2.4 并发硬规则(work-explore ≤5 并行 / work-general 串行 / BASE=上一 HEAD)。
7
- 适用:work agent 第一步规划到派发前的「规划 → 落单」环节。
8
- 不适用:执行/派发/审查/产物目录与 Ledger(用 work-ledger);非 work 流程的普通规划。
9
- license: MIT
10
- metadata:
11
- workflow: sequential
12
- ---
13
-
14
- # work-plan 技能
15
-
16
- ## 触发时机
17
-
18
- work agent 完成第一步解析用户输入(`target`/`root_dir`/`constraints` 三字段)后、派发任何 subagent 前加载本技能,执行「任务拆分 → 字段填写 → plan.md 落盘 → 计划自审」。
19
-
20
- ## 输入
21
-
22
- 从 work.md 流程传入三个贯穿全程的字段:
23
-
24
- | 字段 | 说明 | 默认 |
25
- |------|------|------|
26
- | `target` | 要达成的目标(定义验收标准,第五步按它判定成败) | 必填 |
27
- | `root_dir` | 工程根目录(所有任务路径、`writable`/`forbidden`、prompt 内路径、bash 命令的基准) | 当前工作目录 |
28
- | `constraints` | 约束(不改的文件、禁止的操作等;展开为全局禁改/禁操作清单,每个任务的 `forbidden` 至少包含它的全部内容) | 无 |
29
- | `doc_dir` | 产物目录绝对路径(来自 work-ledger,`plan.md` 写入其下) | 必填 |
30
-
31
- ## 工作流程
32
-
33
- ### 阶段 1:加载 references
34
-
35
- 用 `read` 工具加载本技能 `references/` 下的全部流程文件(相对路径基于本 skill 目录):
36
-
37
- - `references/split-rules.md` → 1.1 任务拆分规则(第一约束、拆分维度、3 个反模式、不需要拆分的情况)
38
- - `references/task-fields.md` → 2.1 任务 11 字段 + agent 类型选择 + 2.4 并发硬性规则
39
- - `references/plan-file.md` → 2.2 plan.md 持久化格式
40
- - `references/self-review.md` → 2.3 计划自审(范围闸门 + 8 项)
41
-
42
- ### 阶段 2:任务拆分
43
-
44
- 按 `references/split-rules.md` 的规则,把 `target` 拆成任务列表(可能仅 1 个任务)。
45
-
46
- ### 阶段 3:填写任务字段
47
-
48
- 按 `references/task-fields.md` 为每个任务填写全部 11 个字段:
49
- `task_id`/`goal`/`files`/`interfaces`/`accept`/`verify`/`agent`/`writable`/`forbidden`/`depends`/`budget`。`agent` 类型与并发安排按同一文件的规则与 2.4 硬性规则确定。
50
-
51
- ### 阶段 4:写 plan.md
52
-
53
- 按 `references/plan-file.md` 的模板,将完整计划写入 `<doc_dir>/plan.md`(`doc_dir` 的确定见 work-ledger skill)。
54
-
55
- ### 阶段 5:计划自审
56
-
57
- 按 `references/self-review.md` 先查范围闸门(任务数 >20 暂停向用户确认),再逐项自检 8 项;任何一项不通过则修正计划后再进入派发。
58
-
59
- ## 输出
60
-
61
- - 完整任务计划(写入 `<doc_dir>/plan.md`,compaction 后恢复用)
62
- - 每个任务的 11 字段已确定,可供派发 implementer / reviewer 使用
63
- - 本技能**不派发、不执行、不写任务 brief**(派发与 Ledger 属 work agent 流程的其他环节)
64
-
65
- ## 约束
66
-
67
- - 拆分第一约束:每个任务 ≤10 分钟可完成,且能独立写出可布尔判定的 `accept`;超预算必须继续拆,宁可多小任务串行。
68
- - 反模式禁止:按 TDD 步骤拆 / 按文件数硬拆 / 一个任务塞多个不相关目标。
69
- - 并发硬规则:`work-explore`(只读)可并行且 ≤5 个/轮;`work-general`(可写)必须串行,须在上一任务 review close 后才派发下一个;下一个 `work-general` 的 `BASE` 自动等于上一任务 `HEAD`。
70
- - 范围闸门:任务数 >20 或 `target` 无法在 ≤20 个独立验收单元内覆盖 → 暂停规划,向用户确认拆分范围。
71
- - 本技能不读写代码、不执行验证命令,只产出计划与 plan.md。
72
-
73
- ## 资源目录
74
-
75
- ```
76
- references/
77
- ├── split-rules.md # 1.1 任务拆分(第一约束/维度/反模式/不需拆分)
78
- ├── task-fields.md # 2.1 任务 11 字段 + 1.2 agent 类型选择 + 2.4 并发硬规则
79
- ├── plan-file.md # 2.2 plan.md 持久化格式
80
- └── self-review.md # 2.3 计划自审(范围闸门 + 8 项)
81
- ```
@@ -1,29 +0,0 @@
1
- # 2.2 计划文件持久化(提取自 docs/plans/work-copy.md L154-176)
2
-
3
- 规划完成后,将完整计划写入 `<doc_dir>/plan.md`(`doc_dir` 见 work-ledger 第三步,即 `<root_dir>/.webwork/harness/work/<session_id>/`)。
4
-
5
- ## plan.md 格式
6
-
7
- ```markdown
8
- # Plan — target: <target>
9
- ## Global Constraints
10
- <constraints 原文>
11
- ## Tasks
12
- ### T1: <goal>
13
- files: ...
14
- interfaces: ...
15
- accept: ...
16
- verify: ...
17
- agent: ...
18
- writable: ...
19
- forbidden: ...
20
- depends: ...
21
- budget: ...
22
- ### T2: ...
23
- ```
24
-
25
- 结构要点:`# Plan — target: <target>` 标题 + `## Global Constraints`(constraints 原文)+ `## Tasks`(下挂 `### T<N>: <goal>` 及全部任务字段)。
26
-
27
- ## 恢复约定
28
-
29
- compaction 后:先读 `plan.md` 恢复计划,再读 `progress.md` 恢复进度。
@@ -1,18 +0,0 @@
1
- # 2.3 计划自审(提取自 docs/plans/work-copy.md L178-191)
2
-
3
- ## 范围闸门(先于逐项自检,人工确认点之一)
4
-
5
- 若任务数 > 20,或 `target` 无法在 ≤20 个独立验收单元内覆盖 → **暂停规划**,向用户确认拆分范围(本次只做 A 部分,还是分批多次运行)。避免大 target 在规划期就写爆 plan、派出一堆任务,直到运行时总预算才触发。
6
-
7
- ## 逐项自检(8 项)
8
-
9
- 产出计划后逐项自检,**任何一项不通过则修正后再派发**:
10
-
11
- 1. **Spec 覆盖**:`target` 的每个要求是否有任务覆盖?列出未覆盖的 gap 并补任务。
12
- 2. **接口一致性**:跨任务的类型名、函数签名、属性名是否匹配?T1 Produces 的 `clearLayers()` 在 T3 中是否也叫 `clearLayers()` 而非 `clearFullLayers()`?
13
- 3. **占位符扫描**:有无 "TBD"、"加错误处理"、"类似 T1"、"按需实现" 等模糊描述?有则补具体。
14
- 4. **依赖完整性**:`depends` 引用的 `task_id` 是否存在?有无循环依赖?有依赖的任务是否串行?
15
- 5. **文件所有权分区**:可写任务(`work-general`)强制串行,故无并发写冲突;只读任务(`work-explore`)不产生文件变更。此条仅用于校验 `files`/`writable` 不落在 `constraints` 禁改范围之内。
16
- 6. **路径合规**:`writable`/`forbidden`/`files` 都落在 `root_dir` 内且不与 `constraints` 冲突。
17
- 7. **验收可判定**:每条 `accept` 是否可布尔判定?`verify` 命令是否具体可执行?
18
- 8. **工时约束**:每个任务的 `budget` 是否 ≤10 分钟?超过的必须继续拆。
@@ -1,23 +0,0 @@
1
- # 1.1 任务拆分(提取自 docs/plans/work-copy.md L65-82)
2
-
3
- 所有任务都必须经过规划→派发→review 流程,无论任务是 1 个还是多个。
4
-
5
- ## 拆分第一约束
6
-
7
- 每个任务必须在 10 分钟内可完成,且能独立写出可布尔判定的 `accept`。这是 subagent 的硬预算(implementer 最多 50 次工具调用);超过预算的任务必须继续拆,直到每个子任务都在预算内。宁可拆成多个小任务串行,也不要留 1 个超出预算的任务。工具调用次数通过 prompt 软约束控制。
8
-
9
- ## 拆分维度
10
-
11
- 按可独立验收的单元拆。一个任务拆出来后,必须能独立写出 `accept` 验收标准,reviewer 能不依赖其他任务的结果就判断它是否完成。如果 accept 必须引用其他任务的中间产物,说明拆错了边界。
12
-
13
- ## 拆分反模式(禁止)
14
-
15
- | 反模式 | 问题 |
16
- |--------|------|
17
- | 按 TDD 步骤拆(RED 一个任务、GREEN 一个任务) | TDD 是一个任务内的流程,拆开导致 RED 任务的测试代码无法独立验收 |
18
- | 按文件数硬拆(每个文件一个任务) | 一个验收单元可能跨多文件,强行按文件拆产生大量微依赖 |
19
- | 一个任务塞多个不相关目标 | subagent context 膨胀,focus 下降 |
20
-
21
- ## 不需要拆分的情况
22
-
23
- - 单一验收单元,预计 ≤10 分钟,不可再分(派 1 个 subagent)。
@@ -1,44 +0,0 @@
1
- # 2.1 任务字段(提取自 docs/plans/work-copy.md L133-151)
2
-
3
- 产出任务计划,每项含全部 11 个字段:
4
-
5
- ```
6
- task_id: T1 / T2 / ...
7
- goal: 目标,≤1 句话,可验收(必须服务于 target 的验收标准)
8
- files: Create: path/to/new.ts | Modify: path/to/existing.ts:120-145 | Touch: path/to/config.json
9
- (路径相对 root_dir;为空 ⇒ 该任务不涉及文件改动)
10
- interfaces: Consumes: funcA(x: string) → number(来自 T1,T2 需调用)
11
- Produces: class Foo { bar(): void }(本任务产出,供后续任务使用)
12
- (无跨任务接口依赖时填 无)
13
- accept: 验收标准,≤3 条,每条可布尔判定(如 "Foo.bar() 返回 true"、"npm test 通过")
14
- verify: 验证命令(如 `npm test -- src/foo.test.ts`;无测试时填 `无`)
15
- agent: work-explore(只读调研)| work-general(执行改动/多步)— 选择规则见下
16
- writable: 可写文件白名单(为空 ⇒ 该任务只读;路径相对 root_dir;须与 files 的 Create/Modify 一致)
17
- forbidden: 禁改文件清单(至少含 constraints 全部内容)
18
- depends: 依赖任务:T1, T3(必须先完成)| 无
19
- budget: 预计 ≤10 分钟
20
- ```
21
-
22
- ## 1.2 agent 类型选择(提取自 L84-100)
23
-
24
- | agent 类型 | 适用场景 | 工具权限 |
25
- |-----------|---------|---------|
26
- | `work-explore` | 只读调研:搜索代码、读取文件、理解结构、验证假设 | read/grep/glob(只读) |
27
- | `work-general` | 可写改动:编辑代码、执行命令、多步实现、写测试 | 全部工具 |
28
-
29
- **选择规则**:
30
- - 任务涉及任何文件创建/修改/删除 → `work-general`
31
- - 任务只读不改(调研、审查、验证) → `work-explore`
32
- - 不确定时按 `work-general`(权限更大不会卡住)
33
-
34
- **注意**:审查类 subagent 取 `work-general`(需写审查文件),以 prompt 强约束「只读源码 + 写白名单仅审查文件」;审查处于任务串行链上,天然满足串行。
35
-
36
- ## 2.4 并发硬性规则(提取自 L193-200)
37
-
38
- - **并发分型(Git 隔离的核心约束)**:
39
- - `work-explore`(只读)**绝不提交、绝不改写工作树/index/HEAD**,只做搜索/读取/理解;可并行,**≤ 5 个/轮**。
40
- - `work-general`(可写)**必须串行**,同一轮最多 1 个在跑,且须在上一任务的 review close 后才派发下一个;下一个 work-general 的 `BASE` 自动等于上一任务的 `HEAD`,保证 `BASE..HEAD` 恰好是本任务自己的改动。
41
- - 凡任务可能产生任何文件或 git 变更,一律 `work-general`(从而落入串行)。
42
- - 串行还是并行由 `depends` 字段 + agent 类型共同决定:有依赖必须串行;无依赖但写操作同样串行;仅只读任务可并行。
43
- - 一个 subagent 对应一个可独立验收的任务,不把多个不相关目标塞给一个 subagent。
44
- - 状态如需跨轮保留,把状态写进 Ledger/文件,不要依赖子代理记忆。