@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.
- package/README.md +2 -2
- package/agents/fastcode.md +130 -0
- package/agents/scrum.md +65 -0
- package/package.json +4 -2
- package/readme/development.md +1 -1
- package/scripts/postinstall.js +41 -0
- package/skills/query/SKILL.md +112 -0
- package/skills/query/references/input.schema.json5 +25 -0
- package/skills/read-docs/references/superpowers/comparison.md +1 -1
- package/skills/read-docs/references/superpowers/index.md +1 -1
- package/agents/query.md +0 -42
- package/agents/todo.md +0 -119
- package/agents/work-explore.md +0 -50
- package/agents/work-general.md +0 -44
- package/agents/work.md +0 -188
- package/plugins/work-bootstrap.js +0 -77
- package/scripts/work-review-package +0 -50
- package/scripts/work-task-brief +0 -27
- package/scripts/work-workspace +0 -31
- package/skills/todo-dispatch/SKILL.md +0 -211
- package/skills/todo-finalize/SKILL.md +0 -238
- package/skills/todo-plan/SKILL.md +0 -174
- package/skills/todo-recovery/SKILL.md +0 -179
- package/skills/todo-review/SKILL.md +0 -259
- package/skills/work-dispatch/SKILL.md +0 -91
- package/skills/work-dispatch/references/dispatch-prompt.md +0 -96
- package/skills/work-dispatch/references/explore-prompt.md +0 -74
- package/skills/work-dispatch/references/prepare.md +0 -25
- package/skills/work-dispatch/references/report-handling.md +0 -65
- package/skills/work-finalize/SKILL.md +0 -83
- package/skills/work-finalize/references/acceptance.md +0 -19
- package/skills/work-finalize/references/final-review.md +0 -55
- package/skills/work-finalize/references/handover.md +0 -36
- package/skills/work-ledger/SKILL.md +0 -73
- package/skills/work-ledger/references/bootstrap.md +0 -36
- package/skills/work-ledger/references/layout.md +0 -25
- package/skills/work-ledger/references/ledger-format.md +0 -57
- package/skills/work-plan/SKILL.md +0 -81
- package/skills/work-plan/references/plan-file.md +0 -29
- package/skills/work-plan/references/self-review.md +0 -18
- package/skills/work-plan/references/split-rules.md +0 -23
- package/skills/work-plan/references/task-fields.md +0 -44
- package/skills/work-recovery/SKILL.md +0 -80
- package/skills/work-recovery/references/budget.md +0 -39
- package/skills/work-recovery/references/replan.md +0 -21
- package/skills/work-recovery/references/rollback.md +0 -20
- package/skills/work-review/SKILL.md +0 -95
- package/skills/work-review/references/breaker.md +0 -26
- package/skills/work-review/references/fix-loop.md +0 -123
- package/skills/work-review/references/review-package.md +0 -24
- package/skills/work-review/references/reviewer-prompt.md +0 -77
- package/skills/work-review/references/verdict-handling.md +0 -25
|
@@ -1,238 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: todo-finalize
|
|
3
|
-
description: 收尾阶段:全分支 Final Review + 最终验收 + 综合交付(整合产物 + 裁决清单 + 归档)。所有任务 review close 后加载。
|
|
4
|
-
license: MIT
|
|
5
|
-
metadata:
|
|
6
|
-
workflow: sequential
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
# todo-finalize 技能
|
|
10
|
-
|
|
11
|
-
## 输入
|
|
12
|
-
|
|
13
|
-
| 字段 | 说明 |
|
|
14
|
-
|------|------|
|
|
15
|
-
| `target` | 用户目标(验收标准) |
|
|
16
|
-
| `root_dir` | 工程根目录 |
|
|
17
|
-
| `doc_dir` | 本次 run 产物目录 |
|
|
18
|
-
| `initial_base` | 本次运行最初的 base |
|
|
19
|
-
| Ledger | `<doc_dir>/progress.md`,含全部进度 + rulings |
|
|
20
|
-
|
|
21
|
-
## 工作流程
|
|
22
|
-
|
|
23
|
-
### 步骤 1:Final Review
|
|
24
|
-
|
|
25
|
-
#### 1a:生成全分支 review package
|
|
26
|
-
|
|
27
|
-
```bash
|
|
28
|
-
merge_base=<initial_base> # 本次运行最初的 base
|
|
29
|
-
final_diff="<doc_dir>/final-review-<merge_base7>..<head7>.diff"
|
|
30
|
-
git log --oneline <merge_base>..HEAD > "$final_diff"
|
|
31
|
-
echo "" >> "$final_diff"
|
|
32
|
-
git diff --stat <merge_base>..HEAD >> "$final_diff"
|
|
33
|
-
echo "" >> "$final_diff"
|
|
34
|
-
git diff -U10 <merge_base>..HEAD >> "$final_diff"
|
|
35
|
-
```
|
|
36
|
-
|
|
37
|
-
#### 1b:派发 final reviewer(串行:全分支一个 reviewer)
|
|
38
|
-
|
|
39
|
-
用 `task` 工具派发,`subagent_type: "general"`,`background: true`。
|
|
40
|
-
|
|
41
|
-
#### Final reviewer prompt 模板
|
|
42
|
-
|
|
43
|
-
```
|
|
44
|
-
你是最终审查 subagent,审查整个分支的全部改动。这是全分支审查,不是单任务审查。
|
|
45
|
-
|
|
46
|
-
## What Was Requested
|
|
47
|
-
Target: <target>
|
|
48
|
-
|
|
49
|
-
## Diff Under Review
|
|
50
|
-
Base: <merge_base>
|
|
51
|
-
Head: <HEAD>
|
|
52
|
-
Diff file: <final_diff>
|
|
53
|
-
|
|
54
|
-
Read the diff file once. Do not re-run git commands. Do not crawl the broader codebase.
|
|
55
|
-
|
|
56
|
-
## Ledger
|
|
57
|
-
Read the ledger for context on parked findings and rulings: <doc_dir>/progress.md
|
|
58
|
-
|
|
59
|
-
## Your Job
|
|
60
|
-
1. Review the full branch diff for correctness, completeness, and quality
|
|
61
|
-
2. Triage parked findings and deferred minors: which must be fixed before delivery?
|
|
62
|
-
3. Check cross-task interactions and integration issues
|
|
63
|
-
|
|
64
|
-
## You Do Not Dispatch Subagents
|
|
65
|
-
## Read-only review. Do not mutate the working tree, index, HEAD, or branch.
|
|
66
|
-
|
|
67
|
-
## Output
|
|
68
|
-
Write your review to <doc_dir>/final-review.md:
|
|
69
|
-
|
|
70
|
-
### Branch Review
|
|
71
|
-
- Overall assessment of the complete change
|
|
72
|
-
|
|
73
|
-
### Parked/Deferred Triage
|
|
74
|
-
For each parked/deferred item from the ledger: must fix before delivery | safe to defer
|
|
75
|
-
|
|
76
|
-
### Issues
|
|
77
|
-
#### Critical (Must Fix)
|
|
78
|
-
#### Important (Should Fix)
|
|
79
|
-
#### Minor (Nice to Have)
|
|
80
|
-
|
|
81
|
-
### Assessment
|
|
82
|
-
**Branch quality:** Approved | Needs fixes
|
|
83
|
-
**Reasoning:** [1-2 sentences]
|
|
84
|
-
|
|
85
|
-
Then report back with ONLY (≤15 lines):
|
|
86
|
-
- Verdict: Approved | Needs fixes
|
|
87
|
-
- Finding count (Critical/Important/Minor)
|
|
88
|
-
- One-line summary
|
|
89
|
-
- Review file path
|
|
90
|
-
```
|
|
91
|
-
|
|
92
|
-
#### 1c:处理 final review 结论
|
|
93
|
-
|
|
94
|
-
| 结论 | 动作 |
|
|
95
|
-
|------|------|
|
|
96
|
-
| Approved | 进入步骤 2 |
|
|
97
|
-
| Needs fixes | 一次 fix dispatch + 一次 scoped re-review |
|
|
98
|
-
|
|
99
|
-
#### 1d:Final fix(如有 findings)
|
|
100
|
-
|
|
101
|
-
只做**一次** fix dispatch(不是 per-finding)+ **一次** scoped re-review。
|
|
102
|
-
|
|
103
|
-
```bash
|
|
104
|
-
final_review_head=<HEAD at final review time>
|
|
105
|
-
fix_base=$final_review_head
|
|
106
|
-
# 派发 fix implementer(general, background=true)
|
|
107
|
-
# 生成 scoped diff: <doc_dir>/final-fix-review-<fix_base7>..<head7>.diff
|
|
108
|
-
# 派发 scoped re-reviewer(general, background=true)
|
|
109
|
-
```
|
|
110
|
-
|
|
111
|
-
残留 load-bearing findings → 报告用户(这是唯一需要用户参与的情况)。
|
|
112
|
-
|
|
113
|
-
### 步骤 2:最终 target 验收(MUST 派 subagent 执行)
|
|
114
|
-
|
|
115
|
-
**MUST**:验收运行(跑测试 / 构建 / 执行 verify 命令)一律由 subagent 执行——这属于「跑测试」,主 agent 不亲自跑。
|
|
116
|
-
|
|
117
|
-
用 `task` 派发一个只读 verification subagent(`subagent_type: "general"`,`background=true`;单个,全 target 一个验证者,验收通常是整体命令,不并行):
|
|
118
|
-
|
|
119
|
-
```
|
|
120
|
-
你是只读验证 subagent,执行最终 target 级整体验收。
|
|
121
|
-
|
|
122
|
-
## Target
|
|
123
|
-
<target>
|
|
124
|
-
|
|
125
|
-
## Verify 命令
|
|
126
|
-
- 优先执行单一可执行验收命令
|
|
127
|
-
- 否则按 plan.md 汇总各任务 verify 命令,逐个执行
|
|
128
|
-
|
|
129
|
-
## Constraints
|
|
130
|
-
1. **只读**:不提交、不改写工作树/index/HEAD,只运行验证命令并记录结果
|
|
131
|
-
2. **不派发 subagent**:你的工作不嵌套
|
|
132
|
-
3. **工具调用上限**:最多 <N> 次,到限停止
|
|
133
|
-
|
|
134
|
-
## Report
|
|
135
|
-
把验收结果写入 <doc_dir>/final-verification.md:
|
|
136
|
-
- 每个 verify 命令的输出摘要(pass/fail + 关键行)
|
|
137
|
-
- 逐条对照 target 的验收结论
|
|
138
|
-
- 阻塞或顾虑
|
|
139
|
-
|
|
140
|
-
Then report back with ONLY (≤10 lines):
|
|
141
|
-
- Verdict: PASS | FAIL | BLOCKED
|
|
142
|
-
- 一行结论
|
|
143
|
-
- 报告文件路径
|
|
144
|
-
```
|
|
145
|
-
|
|
146
|
-
主 agent 读 `<doc_dir>/final-verification.md`,把结论写入 `final-review.md` 的「整体验收结果」段。
|
|
147
|
-
|
|
148
|
-
退出判据(三者缺一不可):
|
|
149
|
-
1. 所有任务 done + review 通过
|
|
150
|
-
2. final review 通过(或残留已报告用户)
|
|
151
|
-
3. 整体验收 PASS
|
|
152
|
-
|
|
153
|
-
### 步骤 3:综合交付
|
|
154
|
-
|
|
155
|
-
#### 3a:整合产物
|
|
156
|
-
|
|
157
|
-
收集提交历史 + diff 路径 + final-review 摘要:
|
|
158
|
-
|
|
159
|
-
```
|
|
160
|
-
提交历史: <initial_base7>..<head7>
|
|
161
|
-
全分支 diff: <doc_dir>/final-review-<merge_base7>..<head7>.diff
|
|
162
|
-
Final review: <doc_dir>/final-review.md
|
|
163
|
-
```
|
|
164
|
-
|
|
165
|
-
#### 3b:裁决清单
|
|
166
|
-
|
|
167
|
-
从 Ledger 收集全部 rulings,按发生顺序列出,每条附理由和代价:
|
|
168
|
-
|
|
169
|
-
```
|
|
170
|
-
## Rulings I made
|
|
171
|
-
|
|
172
|
-
1. Ruling: <决定> — <原因> — <错了的代价>
|
|
173
|
-
2. Ruling: <决定> — <原因> — <错了的代价>
|
|
174
|
-
...
|
|
175
|
-
```
|
|
176
|
-
|
|
177
|
-
**这是用户审阅 agent 决策的唯一入口**——用户看到完整清单,可以逐条否决。
|
|
178
|
-
|
|
179
|
-
#### 3c:向用户输出
|
|
180
|
-
|
|
181
|
-
```
|
|
182
|
-
全部 N 个任务完成,最终审查通过。
|
|
183
|
-
|
|
184
|
-
提交历史: <initial_base7>..<head7>
|
|
185
|
-
分支: <branch>
|
|
186
|
-
diff: <doc_dir>/final-review-<merge_base7>..<head7>.diff
|
|
187
|
-
|
|
188
|
-
## Rulings I made
|
|
189
|
-
<裁决清单>
|
|
190
|
-
|
|
191
|
-
## 残留问题(如有)
|
|
192
|
-
<load-bearing findings that need user attention>
|
|
193
|
-
```
|
|
194
|
-
|
|
195
|
-
#### 3d:归档
|
|
196
|
-
|
|
197
|
-
```bash
|
|
198
|
-
# 保留关键产物到归档目录
|
|
199
|
-
archive="<root_dir>/.webwork/todo/archive/<run_id>/"
|
|
200
|
-
mkdir -p "$archive"
|
|
201
|
-
cp <doc_dir>/plan.md "$archive/"
|
|
202
|
-
cp <doc_dir>/progress.md "$archive/"
|
|
203
|
-
cp <doc_dir>/task-*-report.md "$archive/" 2>/dev/null
|
|
204
|
-
cp <doc_dir>/task-*-review.md "$archive/" 2>/dev/null
|
|
205
|
-
cp <doc_dir>/final-review.md "$archive/" 2>/dev/null
|
|
206
|
-
cp <doc_dir>/final-verification.md "$archive/" 2>/dev/null
|
|
207
|
-
cp <doc_dir>/final-fix-report.md "$archive/" 2>/dev/null
|
|
208
|
-
|
|
209
|
-
# 删除临时文件(brief、主 review diff、rereview、final diff)
|
|
210
|
-
rm -f <doc_dir>/task-*-brief.md
|
|
211
|
-
rm -f <doc_dir>/task-*-review-*.diff
|
|
212
|
-
rm -f <doc_dir>/task-*-rereview-*.md
|
|
213
|
-
rm -f <doc_dir>/task-*-rereview-*.diff
|
|
214
|
-
rm -f <doc_dir>/final-review-*.diff
|
|
215
|
-
rm -f <doc_dir>/final-fix-review-*.diff
|
|
216
|
-
```
|
|
217
|
-
|
|
218
|
-
默认保留归档;用户显式要求清理时才删除。
|
|
219
|
-
|
|
220
|
-
## 输出
|
|
221
|
-
|
|
222
|
-
- `<doc_dir>/final-review.md`(含整体验收结果段)
|
|
223
|
-
- `<doc_dir>/final-verification.md`(最终验收报告)
|
|
224
|
-
- `<doc_dir>/final-fix-report.md`(若有 findings)
|
|
225
|
-
- `<doc_dir>/final-fix-review-*.diff`(若 scoped re-review)
|
|
226
|
-
- 向用户输出的结果摘要 + 全部裁决清单
|
|
227
|
-
- 归档目录 `<root_dir>/.webwork/todo/archive/<run_id>/`
|
|
228
|
-
|
|
229
|
-
## 约束
|
|
230
|
-
|
|
231
|
-
- final reviewer 最多 30 次工具调用,到限必须停止
|
|
232
|
-
- final reviewer 写操作白名单 = 仅 `<doc_dir>/final-review.md`
|
|
233
|
-
- final reviewer 不重跑测试
|
|
234
|
-
- 有 findings 时只做一次 fix dispatch + 一次 scoped re-review,无第二次
|
|
235
|
-
- 最终 target 验收运行强制,且**必须派只读 subagent 执行**(主 agent 不亲自跑测试),三者缺一不可
|
|
236
|
-
- 不 push / 不 merge——交付即当前分支上的提交串,推送由用户决定
|
|
237
|
-
- 裁决清单必须显式列出,不随归档消失
|
|
238
|
-
- 归档即终止本 run
|
|
@@ -1,174 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: todo-plan
|
|
3
|
-
description: 规划阶段:创建 doc_dir + Ledger、探索(派 explore)、拆分任务、写 plan.md、计划自审、todowrite 落单。解析 target 后、派发任何 subagent 前加载。
|
|
4
|
-
license: MIT
|
|
5
|
-
metadata:
|
|
6
|
-
workflow: sequential
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
# todo-plan 技能
|
|
10
|
-
|
|
11
|
-
## 输入
|
|
12
|
-
|
|
13
|
-
| 字段 | 说明 | 默认 |
|
|
14
|
-
|------|------|------|
|
|
15
|
-
| `target` | 要达成的目标 | 必填 |
|
|
16
|
-
| `root_dir` | 工程根目录 | 当前工作目录 |
|
|
17
|
-
| `constraints` | 约束(不改的文件、禁止的操作) | 无 |
|
|
18
|
-
|
|
19
|
-
## 工作流程
|
|
20
|
-
|
|
21
|
-
### 步骤 1:创建产物目录
|
|
22
|
-
|
|
23
|
-
```bash
|
|
24
|
-
# 生成 run_id(纯时间戳;目录已在 .webwork/todo/ 下,无需再前缀)
|
|
25
|
-
run_id="$(date +%Y%m%d-%H%M%S)"
|
|
26
|
-
doc_dir="<root_dir>/.webwork/todo/${run_id}"
|
|
27
|
-
mkdir -p "${doc_dir}"
|
|
28
|
-
|
|
29
|
-
# 写 .gitignore(如果不存在)
|
|
30
|
-
echo -e '*\n!.gitignore' > <root_dir>/.webwork/todo/.gitignore
|
|
31
|
-
```
|
|
32
|
-
|
|
33
|
-
### 步骤 2:起始检查
|
|
34
|
-
|
|
35
|
-
```bash
|
|
36
|
-
# 确认在 Git 仓库内
|
|
37
|
-
git rev-parse --is-inside-work-tree
|
|
38
|
-
|
|
39
|
-
# 记录运行元数据
|
|
40
|
-
branch=$(git branch --show-current)
|
|
41
|
-
initial_base=$(git rev-parse --short=7 HEAD)
|
|
42
|
-
```
|
|
43
|
-
|
|
44
|
-
**起始工作树检查(人工介入点)**:
|
|
45
|
-
- 干净(`git status --porcelain` 空)→ 继续
|
|
46
|
-
- **不干净 → 停止,报告脏文件并让人工介入处理**(由用户决定 stash / 保留 / 放弃)。这是**唯一的起始人工介入点**——之后的代码都是 agent 自主修改,提交也由 agent 自己完成,不再为工作树状态问用户
|
|
47
|
-
|
|
48
|
-
### 步骤 3:写 Ledger
|
|
49
|
-
|
|
50
|
-
写入 `<doc_dir>/progress.md`:
|
|
51
|
-
|
|
52
|
-
```
|
|
53
|
-
target: <用户目标摘要>
|
|
54
|
-
doc_dir: <doc_dir 绝对路径>
|
|
55
|
-
branch: <branch>
|
|
56
|
-
initial_base: <initial_base>
|
|
57
|
-
```
|
|
58
|
-
|
|
59
|
-
### 步骤 4:探索代码库(MUST 派 `explore`)
|
|
60
|
-
|
|
61
|
-
拆分任务前,只要 `target` 需要理解现有代码、文件结构、既有模式才能产出准确的 `files`/`accept`/`verify`,**你必须派发 `explore` subagent 去调研,绝不自己读源码**。
|
|
62
|
-
|
|
63
|
-
- 有 1% 需要读源码的可能 → 就派 subagent(禁止「我凭记忆/凭感觉能拆」的借口)
|
|
64
|
-
- 多个独立方向的调研 → **同一消息并行派发 ≤5 个 `explore` subagent**,每个 `background=true`
|
|
65
|
-
- 每个 explore 沿用 `todo-dispatch` 的「只读调研 prompt 模板」约束(只读、不提交、附 file:line 证据)
|
|
66
|
-
- 各 explore 结论写入报告文件;据此拆分任务,报告文件路径记入 Ledger
|
|
67
|
-
|
|
68
|
-
### 步骤 5:拆分任务
|
|
69
|
-
|
|
70
|
-
把 `target` 拆成任务列表,每个任务:
|
|
71
|
-
- ≤10 分钟可完成
|
|
72
|
-
- 能独立写出可布尔判定的 `accept`
|
|
73
|
-
- 有明确的 `verify` 命令
|
|
74
|
-
|
|
75
|
-
**拆分规则(强制)**:
|
|
76
|
-
- 第一约束:每个任务 ≤10 分钟 + 可独立验收
|
|
77
|
-
- **粒度强制**:任何任务拆出后若预估 >10 分钟,或包含多个可独立验收的子目标,**必须继续拆细,绝不塞给一个 subagent**
|
|
78
|
-
- **并行分型强制**:拆分时对每个任务判定 `readonly`——只读 + 无依赖的任务**必须**标 `readonly=true`(可并行),不得一律标可写串行
|
|
79
|
-
- 反模式:按 TDD 步骤拆 / 按文件数硬拆 / 一个任务塞多个不相关目标 / 把多个任务合并进一个 subagent
|
|
80
|
-
- 不需要拆分的情况:target 本身就是单个 ≤10 分钟可验收的任务
|
|
81
|
-
|
|
82
|
-
**并行分组**:拆分后把无依赖的 `readonly=true` 任务归组,作为 dispatch 并行派发依据(≤5 一批,见 todo-dispatch 步骤 3)。
|
|
83
|
-
|
|
84
|
-
**任务字段**(每个任务):
|
|
85
|
-
|
|
86
|
-
| 字段 | 说明 |
|
|
87
|
-
|------|------|
|
|
88
|
-
| `task_id` | T1, T2, ... |
|
|
89
|
-
| `goal` | 一句话目标 |
|
|
90
|
-
| `files` | 涉及文件 |
|
|
91
|
-
| `accept` | 可布尔判定的验收标准 |
|
|
92
|
-
| `verify` | 验证命令 |
|
|
93
|
-
| `agent` | `explore` / `general`(由 `readonly` 决定) |
|
|
94
|
-
| `readonly` | true=只读调研,false=可写实现 |
|
|
95
|
-
| `writable` | 可写文件白名单(readonly=false 时) |
|
|
96
|
-
| `forbidden` | 禁止改动的文件/操作(至少包含 constraints) |
|
|
97
|
-
| `depends` | 依赖的任务编号 |
|
|
98
|
-
| `budget` | 工具调用上限(默认 readonly=30, 可写=50) |
|
|
99
|
-
|
|
100
|
-
### 步骤 6:写 plan.md
|
|
101
|
-
|
|
102
|
-
写入 `<doc_dir>/plan.md`:
|
|
103
|
-
|
|
104
|
-
```markdown
|
|
105
|
-
# <target 摘要>
|
|
106
|
-
|
|
107
|
-
## Global Constraints
|
|
108
|
-
<constraints>
|
|
109
|
-
|
|
110
|
-
### T1: <goal>
|
|
111
|
-
- files: <files>
|
|
112
|
-
- accept: <accept>
|
|
113
|
-
- verify: <verify>
|
|
114
|
-
- agent: general
|
|
115
|
-
- readonly: true/false
|
|
116
|
-
- writable: <writable>
|
|
117
|
-
- forbidden: <forbidden>
|
|
118
|
-
- depends: -
|
|
119
|
-
- budget: <N>
|
|
120
|
-
|
|
121
|
-
### T2: <goal>
|
|
122
|
-
...
|
|
123
|
-
```
|
|
124
|
-
|
|
125
|
-
### 步骤 7:计划自审
|
|
126
|
-
|
|
127
|
-
产出 plan.md 后、todowrite 落单前,逐项自审。**任何一项不通过 → 修正计划后再继续,不派发**。
|
|
128
|
-
|
|
129
|
-
**范围闸门**:任务数 >20,或 `target` 无法在 ≤20 个独立验收单元内覆盖 → **自主裁决**:本次只规划第一批 ≤20 个任务,剩余范围记入 Ledger 待重规划(`Ruling: 缩小范围 — 本次先做前 20 个任务 — 错了的代价=余下目标延迟`)。不等待用户。
|
|
130
|
-
|
|
131
|
-
**逐项自检(8 项)**:
|
|
132
|
-
|
|
133
|
-
1. **Spec 覆盖**:`target` 每个要求都有对应任务?补上未被覆盖的 gap。
|
|
134
|
-
2. **接口一致性**:跨任务的类型名 / 函数签名 / 属性名是否一致(如 T1 产出的 `clearLayers()` 在 T3 也同名)?
|
|
135
|
-
3. **占位符扫描**:有无 "TBD"、"加错误处理"、"类似 T1"、"按需实现" 等模糊描述?有则写具体。
|
|
136
|
-
4. **依赖完整性**:`depends` 引用的 `task_id` 是否存在?无循环依赖?有依赖的任务是否串行?
|
|
137
|
-
5. **文件所有权分区**:只读任务(`readonly=true`)不产生变更;可写任务串行无写冲突;`files`/`writable` 不落在 `constraints` 禁改范围。
|
|
138
|
-
6. **路径合规**:`writable`/`forbidden`/`files` 都落在 `root_dir` 内且不与 `constraints` 冲突。
|
|
139
|
-
7. **验收可判定**:每条 `accept` 可布尔判定?`verify` 命令具体可执行?
|
|
140
|
-
8. **工时约束**:每个任务预估 ≤10 分钟?超出的必须继续拆。
|
|
141
|
-
|
|
142
|
-
### 步骤 8:todowrite 落单
|
|
143
|
-
|
|
144
|
-
用 `todowrite` 创建任务清单。每个任务一个 todo 项:
|
|
145
|
-
|
|
146
|
-
```json
|
|
147
|
-
[
|
|
148
|
-
{"content": "T1: <goal>", "status": "pending", "priority": "high"},
|
|
149
|
-
{"content": "T2: <goal>", "status": "pending", "priority": "high"}
|
|
150
|
-
]
|
|
151
|
-
```
|
|
152
|
-
|
|
153
|
-
### 步骤 9:输出进度
|
|
154
|
-
|
|
155
|
-
```
|
|
156
|
-
计划完成:T1 <goal> / T2 <goal> / ...(共 N 个任务)
|
|
157
|
-
工作区就绪:branch=<branch>, initial_base=<base7>(doc_dir=<doc_dir>)
|
|
158
|
-
```
|
|
159
|
-
|
|
160
|
-
## 并发规则
|
|
161
|
-
|
|
162
|
-
| 任务类型 | 并发 | 条件 |
|
|
163
|
-
|---------|------|------|
|
|
164
|
-
| 只读调研(readonly=true) | **必须并行 ≤5** | 无写冲突;多个独立调研不得串行 |
|
|
165
|
-
| 可写实现(readonly=false) | 必须串行 | 上一任务 review close 后才派下一个 |
|
|
166
|
-
| Review | 与下一个可写实现串行 | 并行会污染 HEAD,使 review diff 范围漂移 |
|
|
167
|
-
|
|
168
|
-
**串行纪律**:下一个可写任务的 base = 上一任务的 HEAD。
|
|
169
|
-
|
|
170
|
-
## 约束
|
|
171
|
-
|
|
172
|
-
- 不读写代码、不跑验证、不派发实现 subagent,只产出:产物目录 + Ledger + plan.md + todowrite 清单
|
|
173
|
-
- **MUST**:需探索代码库才能拆分时派 `explore` 调研(步骤 4),绝不自己读源码
|
|
174
|
-
- 短 SHA 一律取 7 位
|
|
@@ -1,179 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: todo-recovery
|
|
3
|
-
description: 恢复与护栏:崩溃/compaction 恢复、重规划(≤3 轮)、退出条件、预算与超时、中断与回滚、防失控护栏。运行期遇上下文丢失、计划级失败、超时、中断、需回滚时加载。
|
|
4
|
-
license: MIT
|
|
5
|
-
metadata:
|
|
6
|
-
workflow: on-demand
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
# todo-recovery 技能
|
|
10
|
-
|
|
11
|
-
## 触发场景
|
|
12
|
-
|
|
13
|
-
- compaction / 会话重启 / 上下文丢失 → 步骤 0 恢复
|
|
14
|
-
- 计划级失败(多任务失败 / 反复失败 / 依赖断裂)→ 步骤 1 重规划
|
|
15
|
-
- 判定退出(target 验收 / 重规划超限 / 阻塞 / 预算超限 / ESCALATE)→ 步骤 2 退出条件
|
|
16
|
-
- 单任务超时 / 总预算护栏触顶 → 步骤 3 预算与超时
|
|
17
|
-
- 用户中断 / 需回滚 / forbidden 文件被改 → 步骤 4 中断与回滚
|
|
18
|
-
- 防失控周期自检 → 步骤 5 护栏
|
|
19
|
-
|
|
20
|
-
## 输入
|
|
21
|
-
|
|
22
|
-
| 字段 | 说明 | 默认 |
|
|
23
|
-
|------|------|------|
|
|
24
|
-
| `target` | 用户目标 | 必填 |
|
|
25
|
-
| `root_dir` | 工程根目录 | 当前工作目录 |
|
|
26
|
-
| `doc_dir` | 产物目录 | 必填 |
|
|
27
|
-
| `run_id` | run id(重规划复用) | 必填 |
|
|
28
|
-
| `initial_base` | 本次运行最初的 base(回滚绝不 reset 早于它) | 必填 |
|
|
29
|
-
| `constraints` | 全局禁改/禁操作清单 | 无 |
|
|
30
|
-
|
|
31
|
-
## 工作流程
|
|
32
|
-
|
|
33
|
-
### 0. 恢复(compaction / 崩溃 / 上下文丢失后)
|
|
34
|
-
|
|
35
|
-
compaction、会话重启、或任何上下文丢失后,按本 SOP **无损续跑**:不重做已完成任务、不丢未提交改动、不误判在途任务。
|
|
36
|
-
|
|
37
|
-
1. **定位 doc_dir**:优先读 Ledger `doc_dir=` 绝对路径;读不到则退化 `<root_dir>/.webwork/todo/` 下时间戳最新目录。
|
|
38
|
-
2. **读 Ledger + plan.md**:Ledger 首行元数据(`target`/`doc_dir`/`branch`/`initial_base`)+ 全部任务条目 + `plan.md` 任务清单。
|
|
39
|
-
3. **工作树校验**(`git status --porcelain`):
|
|
40
|
-
- 干净 → 继续。
|
|
41
|
-
- 脏 → 判归属:脏文件落在「最近进行中任务」的 writable 白名单内 → 自动 `git add -A && git commit -m "resume: residual changes"`(不丢改动);超出白名单 → `git checkout -- <file>` 丢弃并记 Ruling。
|
|
42
|
-
- **绝不 `reset --hard`**(会连同未提交改动一起丢)。
|
|
43
|
-
4. **推断当前任务状态**(Ledger 与 `git log`/`git status` 交叉验证,**信任 git 胜过记忆**):
|
|
44
|
-
- 已 `complete` 的任务不改不动。
|
|
45
|
-
- 找 Ledger 最后一个有 `base=` 但无 `complete` 的任务 = 当前进行中。
|
|
46
|
-
- `git log <base>..HEAD` 有 commit 且无 review 结论 → 已实现,生成 review package 进入 todo-review。
|
|
47
|
-
- 无 commit 且工作树干净 → 无产出,重新派发该任务。
|
|
48
|
-
- 全部任务 `complete` → 进入 todo-finalize。
|
|
49
|
-
5. **todowrite 重建清单**:全量替换,已完成 `completed`、当前任务 `in_progress`。
|
|
50
|
-
6. **继续主循环派发**,**绝不直接实现**——从推断出的状态点续跑,不从头重做。
|
|
51
|
-
|
|
52
|
-
### 1. 重规划
|
|
53
|
-
|
|
54
|
-
#### 触发条件(3 种)
|
|
55
|
-
|
|
56
|
-
1. 多任务失败(≥2 个任务 BLOCKED 且无法通过换模型/拆任务解决)
|
|
57
|
-
2. 某任务反复失败(fix loop 5 轮 + Breaker STOP)
|
|
58
|
-
3. 计划自审结构性冲突在实现后成真(任务间依赖断裂)
|
|
59
|
-
|
|
60
|
-
#### 规则
|
|
61
|
-
|
|
62
|
-
- **复用同一 `run_id`/`doc_dir`/Ledger**——不新开 run
|
|
63
|
-
- **增量调整**——只对未完成目标重新拆分,已完成任务保留标记 done 不重派发
|
|
64
|
-
- 更新 `plan.md`,`todowrite` 重建清单(全量替换,仅未完成 + 新拆分的任务)
|
|
65
|
-
- Ledger 记 `replan round <R>/3`
|
|
66
|
-
- **最多 3 轮**,超限升级用户不再自动继续
|
|
67
|
-
|
|
68
|
-
#### 重规划流程
|
|
69
|
-
|
|
70
|
-
```
|
|
71
|
-
1. 读 Ledger 确认已完成任务(T<N>: complete 的不重派发)
|
|
72
|
-
2. 读 plan.md + 已有 explore 报告确认未完成任务及拆分依据
|
|
73
|
-
3. 对未完成目标重新拆分(遵循 todo-plan 的拆分规则)
|
|
74
|
-
4. 重新拆分若需探索代码库(已有报告不足)→ 派只读 explore subagent(遵循 todo-plan 步骤 4:只读、不提交、附 file:line 证据)
|
|
75
|
-
5. 更新 plan.md(追加新任务,标记旧任务为 superseded)
|
|
76
|
-
6. todowrite 重建清单(全量替换)
|
|
77
|
-
7. Ledger 记 replan round <R>/3
|
|
78
|
-
8. 继续主循环派发
|
|
79
|
-
```
|
|
80
|
-
|
|
81
|
-
### 2. 退出条件(5 种)
|
|
82
|
-
|
|
83
|
-
| 条件 | 动作 |
|
|
84
|
-
|------|------|
|
|
85
|
-
| target 验收通过 | 正常交付(todo-finalize) |
|
|
86
|
-
| 重规划 ≤3 轮仍失败 | 停止,报告用户:已尝试 N 轮重规划,以下任务仍无法完成 |
|
|
87
|
-
| 阻塞无法解除(含与 constraints 不可调和) | 停止,报告用户:阻塞原因 + 已尝试方案 |
|
|
88
|
-
| 总预算超限(见下) | 停止,报告用户:预算超限详情 |
|
|
89
|
-
| subagent ESCALATE 且无法通过拆分/换模型解决 | 停止,报告用户:升级原因 |
|
|
90
|
-
|
|
91
|
-
退出时 Ledger 记最终状态,向用户输出:
|
|
92
|
-
```
|
|
93
|
-
任务未完成,已停止。
|
|
94
|
-
|
|
95
|
-
已完成: T1, T2 (review clean)
|
|
96
|
-
未完成: T3 (BLOCKED: <reason>), T4 (not started)
|
|
97
|
-
|
|
98
|
-
Rulings I made:
|
|
99
|
-
<裁决清单>
|
|
100
|
-
|
|
101
|
-
建议下一步: <建议>
|
|
102
|
-
```
|
|
103
|
-
|
|
104
|
-
### 3. 预算与超时
|
|
105
|
-
|
|
106
|
-
#### 单任务超时
|
|
107
|
-
|
|
108
|
-
- prompt 软上限:只读调研 ≤30 次工具调用,可写实现 ≤50,fix ≤20,reviewer ≤15
|
|
109
|
-
- 超时立即记 Ledger `T<N>: timeout`,标 BLOCKED/ESCALATE
|
|
110
|
-
- 不无限同步等待
|
|
111
|
-
|
|
112
|
-
#### 等待纪律(有界等待)
|
|
113
|
-
|
|
114
|
-
- background 模式下主 agent 不阻塞
|
|
115
|
-
- 派发后继续做本地工作(写 Ledger、准备下一个 review package、读已返回的报告)
|
|
116
|
-
- 收到 subagent 完成通知后处理返回
|
|
117
|
-
- subagent 异常长时间未返回(超过该任务预算对应的 2 倍时长,或绝对上限 10 分钟,取先到者)→ 记 Ledger `T<N>: timeout` 并标 BLOCKED/ESCALATE
|
|
118
|
-
|
|
119
|
-
#### 总预算护栏(3 项)
|
|
120
|
-
|
|
121
|
-
| 护栏 | 上限 | 超限动作 |
|
|
122
|
-
|------|------|---------|
|
|
123
|
-
| 总任务数 | ≤20 | 记 Ledger,报告用户,停止派发 |
|
|
124
|
-
| 总运行时长 | ≤30 分钟 | 记 Ledger,报告用户,停止派发 |
|
|
125
|
-
| 最大并行 | ≤5(只读) | 记 Ledger,等待在途返回 |
|
|
126
|
-
|
|
127
|
-
每项超限如实写进 Ledger 并报告,不静默续跑。
|
|
128
|
-
|
|
129
|
-
### 4. 中断与回滚
|
|
130
|
-
|
|
131
|
-
#### 用户中断
|
|
132
|
-
|
|
133
|
-
- 立即停止派发 + cancel 在途 subagent
|
|
134
|
-
- 记 Ledger `T<N>: interrupted by user`
|
|
135
|
-
- 保留现场,不删除产物目录
|
|
136
|
-
- 向用户输出当前进度
|
|
137
|
-
|
|
138
|
-
#### 回滚规则
|
|
139
|
-
|
|
140
|
-
- **回滚仅限本任务 `base..HEAD`**(base 从 Ledger `T<N>: base=` 读取)
|
|
141
|
-
- 工作树脏时禁 `git reset --hard`,改用 `git revert` 或 `git reset --soft` + 手动 checkout
|
|
142
|
-
- forbidden 文件被改 → 强制 `git checkout -- <file>` 恢复
|
|
143
|
-
- **绝不 `reset` 到早于 `initial_base`**
|
|
144
|
-
|
|
145
|
-
```
|
|
146
|
-
回滚步骤:
|
|
147
|
-
1. 读 Ledger T<N>: base=<base>
|
|
148
|
-
2. git revert <base>..HEAD (或 git reset --soft <base> + git checkout -- .)
|
|
149
|
-
3. forbidden 文件: git checkout -- <forbidden_file>
|
|
150
|
-
4. 记 Ledger T<N>: reverted to <base>
|
|
151
|
-
5. 重新规划该任务(拆分/换模型/调整方案)
|
|
152
|
-
```
|
|
153
|
-
|
|
154
|
-
### 5. 防失控护栏(5 条)
|
|
155
|
-
|
|
156
|
-
| # | 护栏 | 检查 |
|
|
157
|
-
|---|------|------|
|
|
158
|
-
| 1 | 并发分型 | 只读任务可并行 ≤5;可写任务必须串行;下一个可写 base = 上一 HEAD |
|
|
159
|
-
| 2 | task 预算 | 每个 task ≤10 分钟;失败先换模型/拆任务再重规划 |
|
|
160
|
-
| 3 | scoped re-review | 每轮 fix 后必须 scoped re-review,不跳过 |
|
|
161
|
-
| 4 | Round 5 后才裁决 | Breaker 绝不在 Round 5 前提前裁决;每条裁决都是 Ledger 条目,禁止静默丢弃 |
|
|
162
|
-
| 5 | 外部信息 | 需要外部信息用 `explore` 调研,不嵌套再派发 |
|
|
163
|
-
|
|
164
|
-
## 输出
|
|
165
|
-
|
|
166
|
-
- Ledger 条目(`replan round <R>/3` / `T<N>: timeout` / `T<N>: interrupted` / `T<N>: reverted to <sha>` / 总预算超限记录)
|
|
167
|
-
- 更新后的 `plan.md`(重规划时)
|
|
168
|
-
- 不派发实现/任务 subagent(重规划后的派发由主流程按新 plan.md 进行);重新拆分若需探索代码库,按 todo-plan 步骤 4 派只读 explore subagent
|
|
169
|
-
- 不 push / 不 merge / 不 reset 早于 initial_base
|
|
170
|
-
|
|
171
|
-
## 约束
|
|
172
|
-
|
|
173
|
-
- 重规划复用同一 run,是增量调整,不重做已完成任务
|
|
174
|
-
- 退出条件 5 种,命中即停止并如实报告
|
|
175
|
-
- 单任务超时不无限等待
|
|
176
|
-
- 总预算护栏 3 项超限即停
|
|
177
|
-
- 用户中断保留现场
|
|
178
|
-
- 回滚仅限本任务范围,绝不 reset 早于 initial_base
|
|
179
|
-
- 防失控护栏 5 条周期自检
|