specline 2.0.2 → 2.0.3
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/core/bootstrap/using-specline.md +8 -0
- package/core/skills/specline-apply-change/SKILL.md +64 -64
- package/core/skills/specline-archive-change/SKILL.md +128 -63
- package/core/skills/specline-explore/SKILL.md +100 -100
- package/core/skills/specline-knowledge/SKILL.md +28 -16
- package/core/skills/specline-pipeline/SKILL.md +49 -45
- package/core/skills/specline-pipeline/references/event-log-spec.md +1 -1
- package/core/skills/specline-pipeline/templates/subagent-prompts.md +3 -3
- package/core/skills/specline-propose/SKILL.md +13 -13
- package/core/skills/specline-quickfix/SKILL.md +16 -16
- package/package.json +1 -1
|
@@ -9,7 +9,7 @@ description: >-
|
|
|
9
9
|
|
|
10
10
|
---
|
|
11
11
|
|
|
12
|
-
##
|
|
12
|
+
## 第 0 层:Session 绑定
|
|
13
13
|
|
|
14
14
|
Session 通过 `specline gate bind <session_id> <change>` 绑定到 Pipeline。
|
|
15
15
|
绑定后 sessionStart Hook 自动注入阶段上下文,归档时自动解绑。
|
|
@@ -17,7 +17,7 @@ Session 通过 `specline gate bind <session_id> <change>` 绑定到 Pipeline。
|
|
|
17
17
|
|
|
18
18
|
---
|
|
19
19
|
|
|
20
|
-
##
|
|
20
|
+
## 第 1 层:速览与定位
|
|
21
21
|
|
|
22
22
|
你是**流水线编排者**,不是执行者。
|
|
23
23
|
|
|
@@ -30,7 +30,7 @@ Session 通过 `specline gate bind <session_id> <change>` 绑定到 Pipeline。
|
|
|
30
30
|
**你不做:**
|
|
31
31
|
- 需求判断/Spec 编写、代码编写、代码审查、测试编写、门禁判断——这些都交给子 Agent 和 Gate 脚本
|
|
32
32
|
|
|
33
|
-
###
|
|
33
|
+
### 阶段流程图
|
|
34
34
|
|
|
35
35
|
```
|
|
36
36
|
SPEC ──→ CODING ──→ CODE REVIEW ──→ TEST ──→ ARCHIVE
|
|
@@ -71,7 +71,9 @@ Session 通过 `specline gate bind <session_id> <change>` 绑定到 Pipeline。
|
|
|
71
71
|
|
|
72
72
|
### 最终产出
|
|
73
73
|
|
|
74
|
-
归档到 `specline/changes/archive/YYYY-MM-DD-<name
|
|
74
|
+
归档到 `specline/changes/archive/YYYY-MM-DD-<name>/`。
|
|
75
|
+
|
|
76
|
+
归档完成后,如果本次 change 包含重大架构、接口、工作流或设计决策影响,可能由 `specline-archive-change` 提示用户是否将相关内容更新到项目知识库。该动作发生在归档成功之后,用户可跳过,不影响 pipeline 成功状态。
|
|
75
77
|
|
|
76
78
|
### Quickfix vs Pipeline 边界判断
|
|
77
79
|
|
|
@@ -79,16 +81,16 @@ Session 通过 `specline gate bind <session_id> <change>` 绑定到 Pipeline。
|
|
|
79
81
|
|
|
80
82
|
---
|
|
81
83
|
|
|
82
|
-
##
|
|
84
|
+
## 核心行为守则
|
|
83
85
|
|
|
84
86
|
以下守则对编排者自身和所有派发的子 Agent 均生效。编排者在决策(跳过 Gate、手动修复、忽略警告)时同样接受这些守则的约束。
|
|
85
87
|
|
|
86
|
-
### 1.
|
|
88
|
+
### 1. 显式暴露假设
|
|
87
89
|
|
|
88
90
|
执行任何非平凡操作前,显式列出假设:
|
|
89
91
|
|
|
90
92
|
```
|
|
91
|
-
|
|
93
|
+
我当前基于这些假设继续:
|
|
92
94
|
1. [关于需求的假设]
|
|
93
95
|
2. [关于架构的假设]
|
|
94
96
|
3. [关于范围的假设]
|
|
@@ -97,7 +99,7 @@ ASSUMPTIONS I'M MAKING:
|
|
|
97
99
|
|
|
98
100
|
不要默默填补模糊需求。错误的假设是最昂贵的返工来源。
|
|
99
101
|
|
|
100
|
-
### 2.
|
|
102
|
+
### 2. 主动处理困惑
|
|
101
103
|
|
|
102
104
|
遇到矛盾、冲突需求或模糊规范时:
|
|
103
105
|
|
|
@@ -109,7 +111,7 @@ ASSUMPTIONS I'M MAKING:
|
|
|
109
111
|
**错误做法**:默默选择一种解释,祈祷它是正确的。
|
|
110
112
|
**正确做法**:"Spec 说 X 但现有代码是 Y。以哪个为准?"
|
|
111
113
|
|
|
112
|
-
### 3.
|
|
114
|
+
### 3. 必要时提出异议
|
|
113
115
|
|
|
114
116
|
你不是应声虫。当一个方案有明显问题时:
|
|
115
117
|
|
|
@@ -120,7 +122,7 @@ ASSUMPTIONS I'M MAKING:
|
|
|
120
122
|
|
|
121
123
|
谄媚是失败模式。"当然可以!"然后实现一个糟糕的方案对谁都没好处。
|
|
122
124
|
|
|
123
|
-
### 4.
|
|
125
|
+
### 4. 坚持简单性
|
|
124
126
|
|
|
125
127
|
主动抵抗复杂化的自然倾向。完成任何实现前问自己:
|
|
126
128
|
|
|
@@ -130,7 +132,7 @@ ASSUMPTIONS I'M MAKING:
|
|
|
130
132
|
|
|
131
133
|
1000 行能做的事用了 100 行是成功,100 行能做的事用了 1000 行是失败。
|
|
132
134
|
|
|
133
|
-
### 5.
|
|
135
|
+
### 5. 维护范围纪律
|
|
134
136
|
|
|
135
137
|
只碰你被要求碰的。不:
|
|
136
138
|
- "清理"与你任务无关的代码
|
|
@@ -140,17 +142,17 @@ ASSUMPTIONS I'M MAKING:
|
|
|
140
142
|
|
|
141
143
|
你的工作是外科手术式精确修改,不是主动翻新。
|
|
142
144
|
|
|
143
|
-
### 6.
|
|
145
|
+
### 6. 验证,不靠猜测
|
|
144
146
|
|
|
145
147
|
"看起来对"永远不够——必须有证据(通过的测试、构建输出、运行时数据)。编排者自身在 Gate 决策中也不例外:Gate 脚本的 exit code 是唯一判断依据,"看着应该通过了"不算数。
|
|
146
148
|
|
|
147
149
|
---
|
|
148
150
|
|
|
149
|
-
##
|
|
151
|
+
## 第 2 层:新建流水线主流程
|
|
150
152
|
|
|
151
|
-
###
|
|
153
|
+
### 阶段 1:SPEC
|
|
152
154
|
|
|
153
|
-
####
|
|
155
|
+
#### 步骤 1:创建 Change
|
|
154
156
|
|
|
155
157
|
```bash
|
|
156
158
|
specline gate new --change "<kebab-case-name>"
|
|
@@ -167,14 +169,14 @@ specline gate new --change "<kebab-case-name>"
|
|
|
167
169
|
|
|
168
170
|
> 📋 完整 JSON Schema 见 [附录 A](#附录-a-pipeline-statejson-完整-schema)
|
|
169
171
|
|
|
170
|
-
####
|
|
172
|
+
#### 步骤 2:Ambiguity Scan(风险触发,不是默认问卷)
|
|
171
173
|
|
|
172
174
|
在启动 `specline-spec-creator` 前,编排者先做一次轻量 Ambiguity Scan。它只判断用户需求中是否存在会改变实现方向的模糊点,不把正常缺省信息变成问卷。
|
|
173
175
|
|
|
174
176
|
分类规则:
|
|
175
177
|
|
|
176
|
-
1. **Default path
|
|
177
|
-
2. **Non-blocking ambiguity(非阻断模糊)**:如果不确定性不会改变实现方向、公开行为、数据模型、安全姿态、兼容性或任务排序,则记录为 assumptions/risks
|
|
178
|
+
1. **Default path(无实质模糊)**:如果现有需求足以选择实现方向,直接进入步骤 3,不提问,也不传额外澄清上下文。
|
|
179
|
+
2. **Non-blocking ambiguity(非阻断模糊)**:如果不确定性不会改变实现方向、公开行为、数据模型、安全姿态、兼容性或任务排序,则记录为 assumptions/risks,继续进入步骤 3,不打断用户。
|
|
178
180
|
3. **Blocking ambiguity(阻断模糊)**:仅当不问清楚可能改变实现方向、公开行为、数据模型、安全姿态、兼容性或任务排序时才判定为 blocking。
|
|
179
181
|
4. **Explicit strict/grill path(显式严格澄清)**:只有用户明确要求 strict、grill、深度追问或面试式澄清时,才扩大问题预算;普通 pipeline 请求绝不自动进入该路径。
|
|
180
182
|
|
|
@@ -210,7 +212,7 @@ clarification_context:
|
|
|
210
212
|
|
|
211
213
|
约束:`confirmed_decisions` 只能放用户明确回答或明确同意的内容;`minimal` 和 `none` 模式下不得制造用户中断,必须把未确认内容记录为 assumption、warning 或 deferred question。
|
|
212
214
|
|
|
213
|
-
####
|
|
215
|
+
#### 步骤 3:启动 specline-spec-creator
|
|
214
216
|
|
|
215
217
|
specline-spec-creator 子 Agent 的职责是根据内联模板直接生成全部规划文件:
|
|
216
218
|
- `proposal.md` — 需求提案(What/Why/Scope)
|
|
@@ -235,7 +237,7 @@ NOW=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
|
|
|
235
237
|
jq --arg time "$NOW" '.updated_at = $time | .phases.spec.sub_phases["specline-spec-creator"] = {"status": "completed", "completed_at": $time}' "$STATE_FILE" > tmp && mv tmp "$STATE_FILE"
|
|
236
238
|
```
|
|
237
239
|
|
|
238
|
-
####
|
|
240
|
+
#### 步骤 4:审核全部规划文件(specline-spec-reviewer)
|
|
239
241
|
|
|
240
242
|
specline-spec-reviewer 审核三份文件:
|
|
241
243
|
1. `specs/` 下所有 spec.md 的完整性和一致性
|
|
@@ -246,7 +248,7 @@ specline-spec-reviewer 审核三份文件:
|
|
|
246
248
|
|
|
247
249
|
若 rejected:将 feedback 反馈给用户修改,或手动编辑相应文件后重新审核(最多 3 次循环)。
|
|
248
250
|
|
|
249
|
-
####
|
|
251
|
+
#### 步骤 5:Spec Gate
|
|
250
252
|
|
|
251
253
|
```bash
|
|
252
254
|
specline gate spec --change "<name>"
|
|
@@ -256,9 +258,9 @@ specline gate spec --change "<name>"
|
|
|
256
258
|
|
|
257
259
|
exit code 0 = 通过,写入 passed。exit code != 0 = 失败,读取 stderr 展示给用户。
|
|
258
260
|
|
|
259
|
-
####
|
|
261
|
+
#### 步骤 6:人工确认 (Human Gate 1) 🟡
|
|
260
262
|
|
|
261
|
-
> **策略判断**:读取 `specline/config.yaml` → `pipeline.human_gate_policy`。若为 `minimal` 或 `none` → 跳过此 HG,直接写入 `human_gate_1.passed = true
|
|
263
|
+
> **策略判断**:读取 `specline/config.yaml` → `pipeline.human_gate_policy`。若为 `minimal` 或 `none` → 跳过此 HG,直接写入 `human_gate_1.passed = true`,进入阶段 2;同时把 `clarification_context` 中的 assumptions、deferred questions、warning defaults 和风险摘要记录到事件日志或阶段摘要,不能静默丢弃。
|
|
262
264
|
|
|
263
265
|
Spec Gate 通过后,`full` 策略使用 {{CONFIRM}} 请求确认。展示内容包括:需求提案摘要、功能需求列表、任务拆解概览(含并行组),以及 Ambiguity Scan/Spec Creator 产出的:
|
|
264
266
|
|
|
@@ -268,11 +270,11 @@ Spec Gate 通过后,`full` 策略使用 {{CONFIRM}} 请求确认。展示内
|
|
|
268
270
|
|
|
269
271
|
Human Gate 1 具体交互:使用 {{CONFIRM}},title="确认 Spec 和任务规划",选项:`approve`(确认通过,继续编码)/ `reject`(不通过,手动修改后重新审核)。若 HG1 因 `minimal` 或 `none` 跳过,编排者不得补问用户;只记录 warnings/assumptions,并保证后续 reviewer/gate 能看到这些风险。
|
|
270
272
|
|
|
271
|
-
###
|
|
273
|
+
### 阶段 2:CODING
|
|
272
274
|
|
|
273
275
|
> **并行加速**:Human Gate 1 通过后,**同时**启动 coding 和 specline-test-writer。specline-test-writer 是黑盒的——读取 Spec(验收标准)和 design.md(对外接口契约),不需要实现代码。两者并行可节省 specline-test-writer 的编写时间。
|
|
274
276
|
|
|
275
|
-
####
|
|
277
|
+
#### 步骤 6:并行启动(test-writer + DAG 构建)
|
|
276
278
|
|
|
277
279
|
时序图:
|
|
278
280
|
|
|
@@ -285,7 +287,7 @@ Track A (test-writer):
|
|
|
285
287
|
Track B (coding):
|
|
286
288
|
6b 解析 tasks.md ──→ 6c 冲突检测 ──→ 7a 派发批次1 ──→ 7b 更新状态 ──→ 7c 派发批次2...
|
|
287
289
|
↓
|
|
288
|
-
|
|
290
|
+
步骤 8:Build Gate
|
|
289
291
|
|
|
290
292
|
Track A 和 Track B 同时启动,互不阻塞。test-writer 在 Coding 全部完成后、TEST 阶段前被检查(Step 12)。
|
|
291
293
|
```
|
|
@@ -310,7 +312,7 @@ Track A 和 Track B 同时启动,互不阻塞。test-writer 在 Coding 全部
|
|
|
310
312
|
|
|
311
313
|
将当前批次所有任务的 `Files` 按路径前缀分为三类(`implementation` / `unit_test` / `other_test`),同类型文件重叠视为冲突。跨类型重叠不冲突(测试目录与实现目录天然隔离)。
|
|
312
314
|
|
|
313
|
-
####
|
|
315
|
+
#### 步骤 7:按 Type 分组后并发派发 Coding Agent
|
|
314
316
|
|
|
315
317
|
对每个批次依次处理:
|
|
316
318
|
|
|
@@ -374,7 +376,7 @@ sed -i '' "s/^## ${task_id}\. \[ \]/## ${task_id}. [x]/" specline/changes/<name>
|
|
|
374
376
|
|
|
375
377
|
**7c. 检查是否有下一批次**。如有,回到 6c(冲突检测)→ 7a 继续派发。
|
|
376
378
|
|
|
377
|
-
####
|
|
379
|
+
#### 步骤 8:Build Gate
|
|
378
380
|
|
|
379
381
|
全部批次完成后,运行 Build Gate:
|
|
380
382
|
|
|
@@ -390,11 +392,11 @@ Build Gate 校验内容:
|
|
|
390
392
|
- 有契约 → 逐项检查 CLI 命令注册、HTTP 路径注册、模块导出声明是否存在(只检查签名存在性,不检查语义正确性)
|
|
391
393
|
- 无 test-writer 任务 → 跳过
|
|
392
394
|
|
|
393
|
-
exit code 0 =
|
|
395
|
+
exit code 0 = 通过,进入阶段 3。失败处理见 [第 3 层:异常与恢复](#第-3-层异常与恢复)。
|
|
394
396
|
|
|
395
|
-
###
|
|
397
|
+
### 阶段 3:CODE REVIEW
|
|
396
398
|
|
|
397
|
-
####
|
|
399
|
+
#### 步骤 9:启动审查 Agent
|
|
398
400
|
|
|
399
401
|
根据 tasks.md 中任务类型决定审查方式:
|
|
400
402
|
|
|
@@ -418,7 +420,7 @@ code-review.json 中 unit test 相关的 finding 标注 `type` 为 `"unit_test_q
|
|
|
418
420
|
|
|
419
421
|
> 两种审查 Agent 可并发启动。产出均为 `specline/changes/<name>/.tmp/code-review.json`(`{ "findings": [{ "severity": "error"|"warning", "type": "unit_test_quality"|"style"|"security"|"logic", "file": "...", "covers": "Requirement: xxx", "message": "..." }] }`)。
|
|
420
422
|
|
|
421
|
-
####
|
|
423
|
+
#### 步骤 10:Lint Gate
|
|
422
424
|
|
|
423
425
|
```bash
|
|
424
426
|
specline gate lint --change "<name>"
|
|
@@ -428,19 +430,19 @@ specline gate lint --change "<name>"
|
|
|
428
430
|
|
|
429
431
|
失败 → 根据 findings 的 `file` 和 `covers` 字段定位到具体任务,只回对应 coding agent 修复(最多 2 次)。
|
|
430
432
|
|
|
431
|
-
####
|
|
433
|
+
#### 步骤 11:可选人工复核 (Human Gate 2) 🟡
|
|
432
434
|
|
|
433
|
-
> **策略判断**:读取 `specline/config.yaml` → `pipeline.human_gate_policy`。若为 `minimal` 或 `none` → 跳过此 HG,直接写入 `human_gate_2.passed = true
|
|
435
|
+
> **策略判断**:读取 `specline/config.yaml` → `pipeline.human_gate_policy`。若为 `minimal` 或 `none` → 跳过此 HG,直接写入 `human_gate_2.passed = true`,进入阶段 4。
|
|
434
436
|
|
|
435
437
|
仅当 code-review.json 中 warnings > 0 且 errors = 0 时,使用 {{CONFIRM}} 询问是否人工复核(`skip` 自动继续 / `review` 展示警告详情)。
|
|
436
438
|
|
|
437
|
-
###
|
|
439
|
+
### 阶段 4:TEST
|
|
438
440
|
|
|
439
441
|
> **config/docs 跳过测试**:如果 tasks.md 中所有任务均为 `Type: config` 或 `Type: docs`(无应用代码变更),TEST 阶段自动跳过——test-unit/integration/e2e Gate 在无测试目录时自动放行。流水线直接从 CODE REVIEW 进入 ARCHIVE。
|
|
440
442
|
|
|
441
|
-
####
|
|
443
|
+
#### 步骤 12:确认 specline-test-writer 完成
|
|
442
444
|
|
|
443
|
-
specline-test-writer 已在
|
|
445
|
+
specline-test-writer 已在 阶段 2(步骤 6a)与 Coding 并行启动。进入 TEST 阶段时,检查 specline-test-writer 是否已完成:
|
|
444
446
|
|
|
445
447
|
- 已完成 → 读取 `specline/changes/<name>/.tmp/test-code-result.json` 获取 `test_framework`,写入 `.pipeline-state.json`:
|
|
446
448
|
```bash
|
|
@@ -454,7 +456,7 @@ specline-test-writer 已在 Phase 2(Step 6a)与 Coding 并行启动。进入
|
|
|
454
456
|
|
|
455
457
|
> **黑盒约束回顾**:specline-test-writer 只能基于 Spec 文档(验收标准)和 design.md 的「对外接口契约」章节(接口签名)编写测试,不能读取任何实现源代码。specline-test-writer 会自动检测项目测试框架(Jest/pytest/go test 等),按项目实际语言编写测试。
|
|
456
458
|
|
|
457
|
-
####
|
|
459
|
+
#### 步骤 13:测试门禁链(串行)
|
|
458
460
|
|
|
459
461
|
```bash
|
|
460
462
|
# 单元测试
|
|
@@ -465,17 +467,17 @@ specline gate test-integration --change "<name>"
|
|
|
465
467
|
specline gate test-e2e --change "<name>"
|
|
466
468
|
```
|
|
467
469
|
|
|
468
|
-
exit code 全 0 =
|
|
470
|
+
exit code 全 0 = 通过,进入阶段 5。失败处理见 [第 3 层:异常与恢复](#第-3-层异常与恢复)。
|
|
469
471
|
|
|
470
|
-
###
|
|
472
|
+
### 阶段 5:ARCHIVE
|
|
471
473
|
|
|
472
|
-
####
|
|
474
|
+
#### 步骤 14:归档确认 (Human Gate 3) 🟡
|
|
473
475
|
|
|
474
476
|
> **策略判断**:读取 `specline/config.yaml` → `pipeline.human_gate_policy`。若为 `none` → 跳过此 HG,直接写入 `human_gate_3.passed = true`,执行归档。`minimal` 策略下 HG3 保留人工确认。
|
|
475
477
|
|
|
476
478
|
全部测试通过后,使用 {{CONFIRM}} 请求归档确认(`archive` 执行归档 / `cancel` 暂停流水线)。
|
|
477
479
|
|
|
478
|
-
####
|
|
480
|
+
#### 步骤 15:归档
|
|
479
481
|
|
|
480
482
|
```bash
|
|
481
483
|
specline gate archive --execute --change "<name>"
|
|
@@ -483,6 +485,8 @@ specline gate archive --change "<name>"
|
|
|
483
485
|
```
|
|
484
486
|
|
|
485
487
|
> 归档的详细逻辑(Delta spec sync 决策、目录移动、摘要展示)由 **specline-archive-change** Skill 负责。编排者只需确认 Human Gate 3 通过后调用上述归档命令。
|
|
488
|
+
>
|
|
489
|
+
> 归档成功后,**specline-archive-change** 可能执行“归档后知识库更新建议”。该动作是可选的,必须由用户确认,且绝不阻塞 pipeline 完成;项目存在 `specline-knowledge` 结构时可使用它,否则应询问其他知识落点。
|
|
486
490
|
|
|
487
491
|
---
|
|
488
492
|
|
|
@@ -503,7 +507,7 @@ specline gate archive --change "<name>"
|
|
|
503
507
|
|
|
504
508
|
---
|
|
505
509
|
|
|
506
|
-
##
|
|
510
|
+
## 第 3 层:异常与恢复
|
|
507
511
|
|
|
508
512
|
### Build 失败差异化处理
|
|
509
513
|
|
|
@@ -623,7 +627,7 @@ done
|
|
|
623
627
|
|
|
624
628
|
---
|
|
625
629
|
|
|
626
|
-
##
|
|
630
|
+
## 第 4 层:参考文档
|
|
627
631
|
|
|
628
632
|
> 以下文档为完整参考信息,根据需要查阅:
|
|
629
633
|
|
|
@@ -647,7 +651,7 @@ done
|
|
|
647
651
|
| "Build 失败看起来是子 Agent 的问题,我先继续往下" | 错误会传播。修复当前阶段再向下,否则下游建立在错误的基座上。 |
|
|
648
652
|
| "影响范围看起来不大,全重置就行" | 接口不兼容只应重置受影响的下游任务。全重置浪费已完成的工作,且破坏断点续跑的状态完整性。 |
|
|
649
653
|
|
|
650
|
-
##
|
|
654
|
+
## 验证清单
|
|
651
655
|
|
|
652
656
|
每阶段完成后,编排者自查:
|
|
653
657
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
## Purpose
|
|
4
4
|
|
|
5
|
-
定义 Pipeline 编排者写入状态和事件日志的规范——谁在何时写入什么内容。这是编排者在 SPE
|
|
5
|
+
定义 Pipeline 编排者写入状态和事件日志的规范——谁在何时写入什么内容。这是编排者在 SPE 编码阶段(步骤 7)和异常恢复阶段(第 3 层)写入 `.pipeline-state.json` 和 `pipeline-events.jsonl` 时必须遵循的规则。
|
|
6
6
|
|
|
7
7
|
## 状态写入规则
|
|
8
8
|
|
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
## Purpose
|
|
4
4
|
|
|
5
|
-
4 套子 Agent prompt 模板,供 SKILL.md
|
|
5
|
+
4 套子 Agent prompt 模板,供 SKILL.md 步骤 7 的编排者按需读取。编排者根据 `task.type` 和 `task.testable` 选择对应模板,填充 `${变量}` 后作为子 Agent 的 prompt。
|
|
6
6
|
|
|
7
7
|
## 使用说明
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
编排者在步骤 7 中执行以下逻辑:
|
|
10
10
|
|
|
11
11
|
1. 读取本文件(`templates/subagent-prompts.md`)
|
|
12
12
|
2. 根据 `task.type` 和 `task.testable` 选择模板:
|
|
@@ -120,7 +120,7 @@
|
|
|
120
120
|
1. 分析 Spec 中本任务覆盖的 Scenario,提取需要测试的逻辑单元
|
|
121
121
|
2. 在 tests/unit/<module>/test_<feature>.{ext} 下编写测试文件
|
|
122
122
|
3. 每个 Scenario 至少 1 个测试函数/方法
|
|
123
|
-
4.
|
|
123
|
+
4. 覆盖:正常路径(Happy Path)+ 边界条件(空值、极值、边界值)+ 异常路径(错误输入、异常状态)
|
|
124
124
|
5. 运行测试,确认全部 FAIL(RED)
|
|
125
125
|
|
|
126
126
|
### GREEN 阶段
|
|
@@ -5,7 +5,7 @@ description: >-
|
|
|
5
5
|
直接按内联模板创建全部 Artifact,不依赖外部 CLI。
|
|
6
6
|
---
|
|
7
7
|
|
|
8
|
-
##
|
|
8
|
+
## 第 1 层:速览
|
|
9
9
|
|
|
10
10
|
> **一句话**:根据自然语言需求生成完整的 Spec 规划文件。
|
|
11
11
|
> **入口**:`/specline-pipeline <需求>` 或由编排者通过 Task 工具派发
|
|
@@ -28,15 +28,15 @@ specline/changes/<change-name>/
|
|
|
28
28
|
|
|
29
29
|
---
|
|
30
30
|
|
|
31
|
-
##
|
|
31
|
+
## 第 2 层:主流程
|
|
32
32
|
|
|
33
|
-
|
|
33
|
+
**输入**:用户需求描述(自然语言),由编排者传入 change-name。
|
|
34
34
|
|
|
35
|
-
###
|
|
35
|
+
### 步骤 1:理解需求并推导 change name
|
|
36
36
|
|
|
37
37
|
如果编排者没有传入明确的 change name,从需求描述推导 kebab-case 名称(如 "添加用户登录功能" → `add-user-login`)。
|
|
38
38
|
|
|
39
|
-
###
|
|
39
|
+
### 步骤 2:创建 Change 目录
|
|
40
40
|
|
|
41
41
|
```bash
|
|
42
42
|
specline gate new --change "<name>"
|
|
@@ -44,7 +44,7 @@ specline gate new --change "<name>"
|
|
|
44
44
|
|
|
45
45
|
创建 `specline/changes/<name>/` 目录及必要的元数据文件。
|
|
46
46
|
|
|
47
|
-
###
|
|
47
|
+
### 步骤 3:按顺序生成 4 个 Artifact
|
|
48
48
|
|
|
49
49
|
| 顺序 | Artifact | 路径 | 内容要点 |
|
|
50
50
|
|------|----------|------|---------|
|
|
@@ -63,7 +63,7 @@ specline gate new --change "<name>"
|
|
|
63
63
|
|
|
64
64
|
还包括:Impact(影响哪些系统)
|
|
65
65
|
|
|
66
|
-
- **spec.md**:H1 标题含 "Specification",包含 `## Purpose` 和 `## Requirements`,每个 Requirement 至少 1 个 Scenario,每个 Scenario 含 `**WHEN**`/`**THEN**`
|
|
66
|
+
- **spec.md**:H1 标题含 "Specification",包含 `## Purpose` 和 `## Requirements`,每个 Requirement 至少 1 个 Scenario,每个 Scenario 含 `**WHEN**`/`**THEN**` 配对,至少覆盖正常路径(Happy Path)和 1 个异常场景
|
|
67
67
|
|
|
68
68
|
- **design.md**:包含 Architecture Overview、Key Design Decisions(每项说明选择理由和替代方案)、Data Flow、Component Interaction、**Architecture Impact Analysis**(侵入点/模块边界/依赖方向/数据影响/接口兼容性分析,每项标注置信度 ✅/⚠️)、**对外接口契约**(如有 specline-test-writer 负责的集成/E2E 测试;CLI 命令/HTTP 端点/模块导出签名)
|
|
69
69
|
|
|
@@ -81,7 +81,7 @@ specline gate new --change "<name>"
|
|
|
81
81
|
|
|
82
82
|
> 💡 **并行度自检**:统计 tasks.md 中 `Depends: (none)` 的任务占比 — ≥ 60% 通过,< 60% 则重新拆解(最多 2 次),仍不达标则记录警告。
|
|
83
83
|
|
|
84
|
-
###
|
|
84
|
+
### 步骤 4:验证完整性
|
|
85
85
|
|
|
86
86
|
```bash
|
|
87
87
|
specline gate artifacts --change "<name>" --json
|
|
@@ -89,7 +89,7 @@ specline gate artifacts --change "<name>" --json
|
|
|
89
89
|
|
|
90
90
|
确保 proposal/design/tasks/specs 四个文件都已存在。
|
|
91
91
|
|
|
92
|
-
###
|
|
92
|
+
### 步骤 5:输出完成摘要
|
|
93
93
|
|
|
94
94
|
- Change 名称和位置
|
|
95
95
|
- 4 个文件生成确认
|
|
@@ -97,7 +97,7 @@ specline gate artifacts --change "<name>" --json
|
|
|
97
97
|
|
|
98
98
|
---
|
|
99
99
|
|
|
100
|
-
##
|
|
100
|
+
## 第 3 层:规范详解
|
|
101
101
|
|
|
102
102
|
### tasks.md 拆分规范
|
|
103
103
|
|
|
@@ -152,7 +152,7 @@ specline-spec-creator 生成的 tasks.md 末尾会包含「测试文件归属」
|
|
|
152
152
|
|
|
153
153
|
---
|
|
154
154
|
|
|
155
|
-
###
|
|
155
|
+
### 约束
|
|
156
156
|
|
|
157
157
|
- 所有文件直接写入 `specline/changes/<name>/`,不调用外部 CLI
|
|
158
158
|
- 先读已有 dependency 再生成后续文件
|
|
@@ -174,12 +174,12 @@ specline-spec-creator 生成的 tasks.md 末尾会包含「测试文件归属」
|
|
|
174
174
|
| "并行度 50% 够了,不用追求 60%" | 60% 不是硬指标,但 <50% 意味着功能边界划分不合理——大概率任务之间耦合太紧。 |
|
|
175
175
|
| "测试文件归属表格我后面补" | 补的从来不会补。没有归属表格,coding agent 和 test-writer 会踩到对方的文件。 |
|
|
176
176
|
|
|
177
|
-
##
|
|
177
|
+
## 验证清单
|
|
178
178
|
|
|
179
179
|
生成 Spec 规划文件后,自查:
|
|
180
180
|
|
|
181
181
|
- [ ] proposal.md 包含:What / Why / In Scope / Out of Scope(两段显式分开)/ Impact
|
|
182
|
-
- [ ] spec.md 包含:Purpose + Requirements,每个 Requirement ≥1 Scenario(含 WHEN/THEN
|
|
182
|
+
- [ ] spec.md 包含:Purpose + Requirements,每个 Requirement ≥1 Scenario(含 WHEN/THEN),正常路径(Happy Path)+ 至少 1 个异常场景
|
|
183
183
|
- [ ] design.md 包含:Architecture Overview、Key Design Decisions(理由+替代方案)、Data Flow、Component Interaction、**Architecture Impact Analysis**(侵入点/模块边界/依赖方向/数据影响/接口兼容性,每项带置信度 ✅/⚠️)、**对外接口契约**(如有 test-writer 测试任务;CLI/HTTP/模块导出表格)
|
|
184
184
|
- [ ] tasks.md 每个任务标注完整(Type/Depends/Covers/Testable/Files),Depends: (none) 占比 ≥ 60%,第 1 批次 Files 无重叠
|
|
185
185
|
- [ ] 测试文件归属表格存在:单元测试归属 coding agent,集成/E2E 归属 test-writer
|
|
@@ -7,7 +7,7 @@ description: 轻量修改 Skill —— 小改动用 quickfix,大功能用 pipe
|
|
|
7
7
|
|
|
8
8
|
---
|
|
9
9
|
|
|
10
|
-
##
|
|
10
|
+
## 第 1 层:速览与定位
|
|
11
11
|
|
|
12
12
|
**一句话定位**:小改动用 quickfix,大功能用 pipeline。
|
|
13
13
|
|
|
@@ -45,13 +45,13 @@ Quickfix 不绑定 Pipeline session,所有 Hook(sessionStart、preToolUse、
|
|
|
45
45
|
|
|
46
46
|
---
|
|
47
47
|
|
|
48
|
-
##
|
|
48
|
+
## 第 2 层:主流程
|
|
49
49
|
|
|
50
|
-
###
|
|
50
|
+
### 阶段 1:UNDERSTAND
|
|
51
51
|
|
|
52
52
|
**目标**:理解变更上下文,明确修改范围。
|
|
53
53
|
|
|
54
|
-
|
|
54
|
+
**步骤**:
|
|
55
55
|
|
|
56
56
|
1. 解析用户描述,提取关键词(文件名、函数名、错误信息等)
|
|
57
57
|
<!-- platform:cursor -->
|
|
@@ -67,15 +67,15 @@ Quickfix 不绑定 Pipeline session,所有 Hook(sessionStart、preToolUse、
|
|
|
67
67
|
- 不需要新测试 ✓
|
|
68
68
|
4. **意图模糊时**:使用 {{CONFIRM}} 向用户确认变更范围和目标,不要猜测
|
|
69
69
|
|
|
70
|
-
**准入条件**:变更范围已验证在 quickfix
|
|
70
|
+
**准入条件**:变更范围已验证在 quickfix 适用范围内(参见第 3 层边界判断)
|
|
71
71
|
|
|
72
72
|
---
|
|
73
73
|
|
|
74
|
-
###
|
|
74
|
+
### 阶段 2:IMPLEMENT
|
|
75
75
|
|
|
76
76
|
**目标**:直接编辑源文件,完成修改。
|
|
77
77
|
|
|
78
|
-
|
|
78
|
+
**步骤**:
|
|
79
79
|
|
|
80
80
|
<!-- platform:cursor -->
|
|
81
81
|
1. 使用 Write / StrReplace 工具直接编辑文件
|
|
@@ -95,11 +95,11 @@ Quickfix 不绑定 Pipeline session,所有 Hook(sessionStart、preToolUse、
|
|
|
95
95
|
|
|
96
96
|
---
|
|
97
97
|
|
|
98
|
-
###
|
|
98
|
+
### 阶段 3:REVIEW
|
|
99
99
|
|
|
100
100
|
**目标**:通过 Lint 检查和 Agent 自审确保代码质量。
|
|
101
101
|
|
|
102
|
-
|
|
102
|
+
**步骤**:
|
|
103
103
|
|
|
104
104
|
<!-- platform:cursor -->
|
|
105
105
|
1. 运行 ReadLints 收集所有 lint 问题
|
|
@@ -120,11 +120,11 @@ Quickfix 不绑定 Pipeline session,所有 Hook(sessionStart、preToolUse、
|
|
|
120
120
|
|
|
121
121
|
---
|
|
122
122
|
|
|
123
|
-
###
|
|
123
|
+
### 阶段 4:TEST
|
|
124
124
|
|
|
125
125
|
**目标**:运行项目已有单元测试,确保不引入回归。
|
|
126
126
|
|
|
127
|
-
|
|
127
|
+
**步骤**:
|
|
128
128
|
|
|
129
129
|
1. **自动检测测试框架**:
|
|
130
130
|
- 检查 `package.json` scripts → Jest / Mocha / Vitest
|
|
@@ -139,11 +139,11 @@ Quickfix 不绑定 Pipeline session,所有 Hook(sessionStart、preToolUse、
|
|
|
139
139
|
|
|
140
140
|
---
|
|
141
141
|
|
|
142
|
-
###
|
|
142
|
+
### 阶段 5:ARCHIVE
|
|
143
143
|
|
|
144
144
|
**目标**:生成轻量归档,提供变更可追溯性。
|
|
145
145
|
|
|
146
|
-
|
|
146
|
+
**步骤**:
|
|
147
147
|
|
|
148
148
|
1. 在 `specline/changes/archive/` 下创建归档目录:
|
|
149
149
|
```
|
|
@@ -182,7 +182,7 @@ Quickfix 不绑定 Pipeline session,所有 Hook(sessionStart、preToolUse、
|
|
|
182
182
|
|
|
183
183
|
---
|
|
184
184
|
|
|
185
|
-
##
|
|
185
|
+
## 第 3 层:异常与边界
|
|
186
186
|
|
|
187
187
|
### Quickfix vs Pipeline 边界判断
|
|
188
188
|
|
|
@@ -223,7 +223,7 @@ Quickfix 不绑定 Pipeline session,所有 Hook(sessionStart、preToolUse、
|
|
|
223
223
|
|
|
224
224
|
---
|
|
225
225
|
|
|
226
|
-
##
|
|
226
|
+
## 第 4 层:附录
|
|
227
227
|
|
|
228
228
|
### 与 Pipeline 的关系
|
|
229
229
|
|
|
@@ -276,7 +276,7 @@ Quickfix 的极简流程容易让人产生"反正很快,随便点"的心态:
|
|
|
276
276
|
| "不用归档了,就是个小修,没记录无所谓" | 不归档意味着不可追溯。三个月后没人记得这个修改是谁做的、为什么做的。 |
|
|
277
277
|
| "不用询问用户 git commit,我自己提交了" | Commit 是用户的决定,不是 Agent 的。擅自 commit 剥夺了用户的审查机会。 |
|
|
278
278
|
|
|
279
|
-
##
|
|
279
|
+
## 验证清单
|
|
280
280
|
|
|
281
281
|
Quickfix 完成后,自查:
|
|
282
282
|
|