specline 2.0.1 → 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.
Files changed (51) hide show
  1. package/core/agents/specline-spec-creator.yaml +16 -0
  2. package/core/agents/specline-spec-reviewer.yaml +14 -2
  3. package/core/bootstrap/using-specline.md +8 -0
  4. package/core/skills/specline-apply-change/SKILL.md +64 -64
  5. package/core/skills/specline-archive-change/SKILL.md +128 -63
  6. package/core/skills/specline-explore/SKILL.md +100 -100
  7. package/core/skills/specline-knowledge/SKILL.md +28 -16
  8. package/core/skills/specline-pipeline/SKILL.md +104 -46
  9. package/core/skills/specline-pipeline/references/event-log-spec.md +1 -1
  10. package/core/skills/specline-pipeline/templates/subagent-prompts.md +3 -3
  11. package/core/skills/specline-propose/SKILL.md +13 -13
  12. package/core/skills/specline-quickfix/SKILL.md +16 -16
  13. package/package.json +1 -1
  14. package/templates/.cursor/README.md +0 -18
  15. package/templates/.cursor/agents/specline-backend-dev.md +0 -47
  16. package/templates/.cursor/agents/specline-code-reviewer.md +0 -110
  17. package/templates/.cursor/agents/specline-config-dev.md +0 -52
  18. package/templates/.cursor/agents/specline-config-reviewer.md +0 -79
  19. package/templates/.cursor/agents/specline-explore-assistant.md +0 -81
  20. package/templates/.cursor/agents/specline-frontend-dev.md +0 -47
  21. package/templates/.cursor/agents/specline-spec-creator.md +0 -376
  22. package/templates/.cursor/agents/specline-spec-reviewer.md +0 -144
  23. package/templates/.cursor/agents/specline-test-runner.md +0 -107
  24. package/templates/.cursor/agents/specline-test-writer.md +0 -170
  25. package/templates/.cursor/hooks/specline-agent-guard.sh +0 -131
  26. package/templates/.cursor/hooks/specline-auto-format.sh +0 -12
  27. package/templates/.cursor/hooks/specline-phase-guard.sh +0 -201
  28. package/templates/.cursor/hooks/specline-pipeline-gate-checks/a1-covers-ref.sh +0 -125
  29. package/templates/.cursor/hooks/specline-pipeline-gate-checks/a2-a3-reverse.sh +0 -171
  30. package/templates/.cursor/hooks/specline-pipeline-gate-checks/c1-exception.sh +0 -71
  31. package/templates/.cursor/hooks/specline-pipeline-gate-checks/c2-vague.sh +0 -60
  32. package/templates/.cursor/hooks/specline-pipeline-gate-checks/common.sh +0 -68
  33. package/templates/.cursor/hooks/specline-pipeline-gate-checks/d1-cycle.sh +0 -149
  34. package/templates/.cursor/hooks/specline-pipeline-gate-checks/d3-type-file.sh +0 -260
  35. package/templates/.cursor/hooks/specline-pipeline-gate.sh +0 -1569
  36. package/templates/.cursor/hooks/specline-reminder.sh +0 -147
  37. package/templates/.cursor/hooks/specline-session-start.sh +0 -259
  38. package/templates/.cursor/hooks/specline-shell-guard.sh +0 -18
  39. package/templates/.cursor/hooks.json +0 -46
  40. package/templates/.cursor/skills/specline-apply-change/SKILL.md +0 -197
  41. package/templates/.cursor/skills/specline-archive-change/SKILL.md +0 -173
  42. package/templates/.cursor/skills/specline-explore/SKILL.md +0 -504
  43. package/templates/.cursor/skills/specline-knowledge/SKILL.md +0 -539
  44. package/templates/.cursor/skills/specline-pipeline/SKILL.md +0 -616
  45. package/templates/.cursor/skills/specline-pipeline/references/error-recovery-details.md +0 -49
  46. package/templates/.cursor/skills/specline-pipeline/references/event-log-spec.md +0 -59
  47. package/templates/.cursor/skills/specline-pipeline/references/pipeline-state-schema.md +0 -87
  48. package/templates/.cursor/skills/specline-pipeline/templates/subagent-prompts.md +0 -253
  49. package/templates/.cursor/skills/specline-propose/SKILL.md +0 -186
  50. package/templates/.cursor/skills/specline-quickfix/SKILL.md +0 -265
  51. package/templates/specline/config.yaml +0 -64
@@ -9,7 +9,7 @@ description: >-
9
9
 
10
10
  ---
11
11
 
12
- ## Layer 0: Session 绑定
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
- ## Layer 1: 速览与定位
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
- ### Phase 流程图
33
+ ### 阶段流程图
34
34
 
35
35
  ```
36
36
  SPEC ──→ CODING ──→ CODE REVIEW ──→ TEST ──→ ARCHIVE
@@ -56,6 +56,13 @@ Session 通过 `specline gate bind <session_id> <change>` 绑定到 Pipeline。
56
56
 
57
57
  **子 Agent 确认行为**:当策略为 `minimal` 或 `none` 时,编排者应在派发子 Agent 时传递 `HUMAN_GATE_POLICY=<policy>` 上下文,告知子 Agent 跳过所有 {{CONFIRM}} 交互(如 spec_ambiguity 暂停、skill 级确认等),直接采用默认安全选项继续执行。编排者自身在测试失败处理中的 spec_ambiguity 暂停也应改为记录 WARNING 事件日志后继续。
58
58
 
59
+ **SPEC 澄清中断行为**:`pipeline.human_gate_policy` 同时控制 SPEC 阶段 Ambiguity Scan 是否可以打断用户:
60
+ - `full`:仅在 blocking ambiguity 存在时允许打断,最多 1-3 个聚焦问题;HG1 必须展示确认过的决策、假设、未解决项和 warning default。
61
+ - `minimal`:不打断用户;采用安全推荐默认值继续,并把 warning default、假设和风险写入 `clarification_context`,HG1 自动通过时记录 WARNING 事件。
62
+ - `none`:不打断用户;只记录假设、风险和 deferred questions,不要求用户确认,也不引入任何 {{CONFIRM}}。
63
+
64
+ 普通 `/specline-pipeline` 请求默认保持自动化,不展示默认问卷。只有用户明确要求 `strict`、`grill`、深度追问或面试式澄清时,才进入扩展澄清预算;即使在 strict/grill 路径,每个问题也必须是决策型问题,包含推荐答案和选项。
65
+
59
66
  ### 入口模式
60
67
 
61
68
  1. **新建流水线**: `/specline-pipeline <自然语言需求>`
@@ -64,7 +71,9 @@ Session 通过 `specline gate bind <session_id> <change>` 绑定到 Pipeline。
64
71
 
65
72
  ### 最终产出
66
73
 
67
- 归档到 `specline/changes/archive/YYYY-MM-DD-<name>/`
74
+ 归档到 `specline/changes/archive/YYYY-MM-DD-<name>/`。
75
+
76
+ 归档完成后,如果本次 change 包含重大架构、接口、工作流或设计决策影响,可能由 `specline-archive-change` 提示用户是否将相关内容更新到项目知识库。该动作发生在归档成功之后,用户可跳过,不影响 pipeline 成功状态。
68
77
 
69
78
  ### Quickfix vs Pipeline 边界判断
70
79
 
@@ -72,16 +81,16 @@ Session 通过 `specline gate bind <session_id> <change>` 绑定到 Pipeline。
72
81
 
73
82
  ---
74
83
 
75
- ## Core Operating Behaviors
84
+ ## 核心行为守则
76
85
 
77
86
  以下守则对编排者自身和所有派发的子 Agent 均生效。编排者在决策(跳过 Gate、手动修复、忽略警告)时同样接受这些守则的约束。
78
87
 
79
- ### 1. Surface Assumptions
88
+ ### 1. 显式暴露假设
80
89
 
81
90
  执行任何非平凡操作前,显式列出假设:
82
91
 
83
92
  ```
84
- ASSUMPTIONS I'M MAKING:
93
+ 我当前基于这些假设继续:
85
94
  1. [关于需求的假设]
86
95
  2. [关于架构的假设]
87
96
  3. [关于范围的假设]
@@ -90,7 +99,7 @@ ASSUMPTIONS I'M MAKING:
90
99
 
91
100
  不要默默填补模糊需求。错误的假设是最昂贵的返工来源。
92
101
 
93
- ### 2. Manage Confusion Actively
102
+ ### 2. 主动处理困惑
94
103
 
95
104
  遇到矛盾、冲突需求或模糊规范时:
96
105
 
@@ -102,7 +111,7 @@ ASSUMPTIONS I'M MAKING:
102
111
  **错误做法**:默默选择一种解释,祈祷它是正确的。
103
112
  **正确做法**:"Spec 说 X 但现有代码是 Y。以哪个为准?"
104
113
 
105
- ### 3. Push Back When Warranted
114
+ ### 3. 必要时提出异议
106
115
 
107
116
  你不是应声虫。当一个方案有明显问题时:
108
117
 
@@ -113,7 +122,7 @@ ASSUMPTIONS I'M MAKING:
113
122
 
114
123
  谄媚是失败模式。"当然可以!"然后实现一个糟糕的方案对谁都没好处。
115
124
 
116
- ### 4. Enforce Simplicity
125
+ ### 4. 坚持简单性
117
126
 
118
127
  主动抵抗复杂化的自然倾向。完成任何实现前问自己:
119
128
 
@@ -123,7 +132,7 @@ ASSUMPTIONS I'M MAKING:
123
132
 
124
133
  1000 行能做的事用了 100 行是成功,100 行能做的事用了 1000 行是失败。
125
134
 
126
- ### 5. Maintain Scope Discipline
135
+ ### 5. 维护范围纪律
127
136
 
128
137
  只碰你被要求碰的。不:
129
138
  - "清理"与你任务无关的代码
@@ -133,17 +142,17 @@ ASSUMPTIONS I'M MAKING:
133
142
 
134
143
  你的工作是外科手术式精确修改,不是主动翻新。
135
144
 
136
- ### 6. Verify, Don't Assume
145
+ ### 6. 验证,不靠猜测
137
146
 
138
147
  "看起来对"永远不够——必须有证据(通过的测试、构建输出、运行时数据)。编排者自身在 Gate 决策中也不例外:Gate 脚本的 exit code 是唯一判断依据,"看着应该通过了"不算数。
139
148
 
140
149
  ---
141
150
 
142
- ## Layer 2: Happy Path — 新建流水线
151
+ ## 2 层:新建流水线主流程
143
152
 
144
- ### Phase 1: SPEC
153
+ ### 阶段 1SPEC
145
154
 
146
- #### Step 1: 创建 Change
155
+ #### 步骤 1:创建 Change
147
156
 
148
157
  ```bash
149
158
  specline gate new --change "<kebab-case-name>"
@@ -160,7 +169,50 @@ specline gate new --change "<kebab-case-name>"
160
169
 
161
170
  > 📋 完整 JSON Schema 见 [附录 A](#附录-a-pipeline-statejson-完整-schema)
162
171
 
163
- #### Step 2: 启动 specline-spec-creator
172
+ #### 步骤 2:Ambiguity Scan(风险触发,不是默认问卷)
173
+
174
+ 在启动 `specline-spec-creator` 前,编排者先做一次轻量 Ambiguity Scan。它只判断用户需求中是否存在会改变实现方向的模糊点,不把正常缺省信息变成问卷。
175
+
176
+ 分类规则:
177
+
178
+ 1. **Default path(无实质模糊)**:如果现有需求足以选择实现方向,直接进入步骤 3,不提问,也不传额外澄清上下文。
179
+ 2. **Non-blocking ambiguity(非阻断模糊)**:如果不确定性不会改变实现方向、公开行为、数据模型、安全姿态、兼容性或任务排序,则记录为 assumptions/risks,继续进入步骤 3,不打断用户。
180
+ 3. **Blocking ambiguity(阻断模糊)**:仅当不问清楚可能改变实现方向、公开行为、数据模型、安全姿态、兼容性或任务排序时才判定为 blocking。
181
+ 4. **Explicit strict/grill path(显式严格澄清)**:只有用户明确要求 strict、grill、深度追问或面试式澄清时,才扩大问题预算;普通 pipeline 请求绝不自动进入该路径。
182
+
183
+ Blocking ambiguity 的处理由 `pipeline.human_gate_policy` 决定:
184
+
185
+ - `full`:可以先问 1-3 个聚焦问题。每个问题必须说明被决定的事项、为什么会改变实现方向、推荐答案、小选项集,以及如果后续必须继续时采用的默认值。
186
+ - `minimal`:不得打断用户。采用安全推荐默认值继续,把默认值、理由和风险作为 warning default 写入 `clarification_context`,并在 HG1 自动通过时记录 warning/assumption。
187
+ - `none`:不得打断用户。只记录 assumptions、risks 和 deferred questions,不把默认值包装成用户已确认决策。
188
+
189
+ 若 Ambiguity Scan 产生上下文,传给 `specline-spec-creator` 的 prompt 中必须包含:
190
+
191
+ ```yaml
192
+ clarification_context:
193
+ risk_level: none | low | medium | high
194
+ confirmed_decisions:
195
+ - decision: "..."
196
+ source: "user"
197
+ assumed_decisions:
198
+ - decision: "..."
199
+ recommended_answer: "..."
200
+ rationale: "..."
201
+ risk: "..."
202
+ policy: "full|minimal|none"
203
+ deferred_questions:
204
+ - question: "..."
205
+ default: "..."
206
+ reason_deferred: "..."
207
+ implementation_constraint: "..."
208
+ blocking: true|false
209
+ warnings:
210
+ - "..."
211
+ ```
212
+
213
+ 约束:`confirmed_decisions` 只能放用户明确回答或明确同意的内容;`minimal` 和 `none` 模式下不得制造用户中断,必须把未确认内容记录为 assumption、warning 或 deferred question。
214
+
215
+ #### 步骤 3:启动 specline-spec-creator
164
216
 
165
217
  specline-spec-creator 子 Agent 的职责是根据内联模板直接生成全部规划文件:
166
218
  - `proposal.md` — 需求提案(What/Why/Scope)
@@ -168,7 +220,7 @@ specline-spec-creator 子 Agent 的职责是根据内联模板直接生成全部
168
220
  - `tasks.md` — 任务拆解清单(含 Type/Depends/Covers/Files 标注)
169
221
  - `specs/<capability>/spec.md` — 功能规格(Requirements/Scenarios)
170
222
 
171
- {{DISPATCH}},role="specline-spec-creator",描述中传入 change name 和自然语言需求,让 specline-spec-creator 根据内联模板直接生成。
223
+ {{DISPATCH}},role="specline-spec-creator",描述中传入 change name、自然语言需求、`HUMAN_GATE_POLICY=<policy>`,以及 Ambiguity Scan 产生的可选 `clarification_context`。让 specline-spec-creator 根据内联模板直接生成,并把 confirmed decisions、assumptions、deferred questions、risk level 和 warnings 写入规划 Artifact。
172
224
 
173
225
  > **任务标注规范**:tasks.md 每个任务必须包含:
174
226
  > - `Type`: frontend | backend | infra | db | config | docs
@@ -185,7 +237,7 @@ NOW=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
185
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"
186
238
  ```
187
239
 
188
- #### Step 3: 审核全部规划文件(specline-spec-reviewer)
240
+ #### 步骤 4:审核全部规划文件(specline-spec-reviewer)
189
241
 
190
242
  specline-spec-reviewer 审核三份文件:
191
243
  1. `specs/` 下所有 spec.md 的完整性和一致性
@@ -196,7 +248,7 @@ specline-spec-reviewer 审核三份文件:
196
248
 
197
249
  若 rejected:将 feedback 反馈给用户修改,或手动编辑相应文件后重新审核(最多 3 次循环)。
198
250
 
199
- #### Step 4: Spec Gate
251
+ #### 步骤 5:Spec Gate
200
252
 
201
253
  ```bash
202
254
  specline gate spec --change "<name>"
@@ -206,19 +258,23 @@ specline gate spec --change "<name>"
206
258
 
207
259
  exit code 0 = 通过,写入 passed。exit code != 0 = 失败,读取 stderr 展示给用户。
208
260
 
209
- #### Step 5: 人工确认 (Human Gate 1) 🟡
261
+ #### 步骤 6:人工确认 (Human Gate 1) 🟡
262
+
263
+ > **策略判断**:读取 `specline/config.yaml` → `pipeline.human_gate_policy`。若为 `minimal` 或 `none` → 跳过此 HG,直接写入 `human_gate_1.passed = true`,进入阶段 2;同时把 `clarification_context` 中的 assumptions、deferred questions、warning defaults 和风险摘要记录到事件日志或阶段摘要,不能静默丢弃。
210
264
 
211
- > **策略判断**:读取 `specline/config.yaml` `pipeline.human_gate_policy`。若为 `minimal` `none` 跳过此 HG,直接写入 `human_gate_1.passed = true`,进入 Phase 2。
265
+ Spec Gate 通过后,`full` 策略使用 {{CONFIRM}} 请求确认。展示内容包括:需求提案摘要、功能需求列表、任务拆解概览(含并行组),以及 Ambiguity Scan/Spec Creator 产出的:
212
266
 
213
- Spec Gate 通过后,使用 {{CONFIRM}} 请求确认。展示内容包括:需求提案摘要、功能需求列表、任务拆解概览(含并行组)。
267
+ - 用户已确认的关键决策。
268
+ - 未经确认但将采用的 assumptions 和 recommended defaults。
269
+ - deferred questions、unresolved items、warning defaults 及其实现风险。
214
270
 
215
- Human Gate 1 具体交互:使用 {{CONFIRM}},title="确认 Spec 和任务规划",选项:`approve`(确认通过,继续编码)/ `reject`(不通过,手动修改后重新审核)。
271
+ Human Gate 1 具体交互:使用 {{CONFIRM}},title="确认 Spec 和任务规划",选项:`approve`(确认通过,继续编码)/ `reject`(不通过,手动修改后重新审核)。若 HG1 因 `minimal` 或 `none` 跳过,编排者不得补问用户;只记录 warnings/assumptions,并保证后续 reviewer/gate 能看到这些风险。
216
272
 
217
- ### Phase 2: CODING
273
+ ### 阶段 2CODING
218
274
 
219
275
  > **并行加速**:Human Gate 1 通过后,**同时**启动 coding 和 specline-test-writer。specline-test-writer 是黑盒的——读取 Spec(验收标准)和 design.md(对外接口契约),不需要实现代码。两者并行可节省 specline-test-writer 的编写时间。
220
276
 
221
- #### Step 6: 并行启动(test-writer + DAG 构建)
277
+ #### 步骤 6:并行启动(test-writer + DAG 构建)
222
278
 
223
279
  时序图:
224
280
 
@@ -231,7 +287,7 @@ Track A (test-writer):
231
287
  Track B (coding):
232
288
  6b 解析 tasks.md ──→ 6c 冲突检测 ──→ 7a 派发批次1 ──→ 7b 更新状态 ──→ 7c 派发批次2...
233
289
 
234
- Step 8: Build Gate
290
+ 步骤 8Build Gate
235
291
 
236
292
  Track A 和 Track B 同时启动,互不阻塞。test-writer 在 Coding 全部完成后、TEST 阶段前被检查(Step 12)。
237
293
  ```
@@ -256,7 +312,7 @@ Track A 和 Track B 同时启动,互不阻塞。test-writer 在 Coding 全部
256
312
 
257
313
  将当前批次所有任务的 `Files` 按路径前缀分为三类(`implementation` / `unit_test` / `other_test`),同类型文件重叠视为冲突。跨类型重叠不冲突(测试目录与实现目录天然隔离)。
258
314
 
259
- #### Step 7: Type 分组后并发派发 Coding Agent
315
+ #### 步骤 7:按 Type 分组后并发派发 Coding Agent
260
316
 
261
317
  对每个批次依次处理:
262
318
 
@@ -320,7 +376,7 @@ sed -i '' "s/^## ${task_id}\. \[ \]/## ${task_id}. [x]/" specline/changes/<name>
320
376
 
321
377
  **7c. 检查是否有下一批次**。如有,回到 6c(冲突检测)→ 7a 继续派发。
322
378
 
323
- #### Step 8: Build Gate
379
+ #### 步骤 8Build Gate
324
380
 
325
381
  全部批次完成后,运行 Build Gate:
326
382
 
@@ -336,11 +392,11 @@ Build Gate 校验内容:
336
392
  - 有契约 → 逐项检查 CLI 命令注册、HTTP 路径注册、模块导出声明是否存在(只检查签名存在性,不检查语义正确性)
337
393
  - 无 test-writer 任务 → 跳过
338
394
 
339
- exit code 0 = 通过,进入 Phase 3。失败处理见 [Layer 3: Build Gate 失败处理](#build-gate-失败处理)。
395
+ exit code 0 = 通过,进入阶段 3。失败处理见 [ 3 层:异常与恢复](#第-3-层异常与恢复)。
340
396
 
341
- ### Phase 3: CODE REVIEW
397
+ ### 阶段 3CODE REVIEW
342
398
 
343
- #### Step 9: 启动审查 Agent
399
+ #### 步骤 9:启动审查 Agent
344
400
 
345
401
  根据 tasks.md 中任务类型决定审查方式:
346
402
 
@@ -364,7 +420,7 @@ code-review.json 中 unit test 相关的 finding 标注 `type` 为 `"unit_test_q
364
420
 
365
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": "..." }] }`)。
366
422
 
367
- #### Step 10: Lint Gate
423
+ #### 步骤 10Lint Gate
368
424
 
369
425
  ```bash
370
426
  specline gate lint --change "<name>"
@@ -374,19 +430,19 @@ specline gate lint --change "<name>"
374
430
 
375
431
  失败 → 根据 findings 的 `file` 和 `covers` 字段定位到具体任务,只回对应 coding agent 修复(最多 2 次)。
376
432
 
377
- #### Step 11: 可选人工复核 (Human Gate 2) 🟡
433
+ #### 步骤 11:可选人工复核 (Human Gate 2) 🟡
378
434
 
379
- > **策略判断**:读取 `specline/config.yaml` → `pipeline.human_gate_policy`。若为 `minimal` 或 `none` → 跳过此 HG,直接写入 `human_gate_2.passed = true`,进入 Phase 4。
435
+ > **策略判断**:读取 `specline/config.yaml` → `pipeline.human_gate_policy`。若为 `minimal` 或 `none` → 跳过此 HG,直接写入 `human_gate_2.passed = true`,进入阶段 4。
380
436
 
381
437
  仅当 code-review.json 中 warnings > 0 且 errors = 0 时,使用 {{CONFIRM}} 询问是否人工复核(`skip` 自动继续 / `review` 展示警告详情)。
382
438
 
383
- ### Phase 4: TEST
439
+ ### 阶段 4TEST
384
440
 
385
441
  > **config/docs 跳过测试**:如果 tasks.md 中所有任务均为 `Type: config` 或 `Type: docs`(无应用代码变更),TEST 阶段自动跳过——test-unit/integration/e2e Gate 在无测试目录时自动放行。流水线直接从 CODE REVIEW 进入 ARCHIVE。
386
442
 
387
- #### Step 12: 确认 specline-test-writer 完成
443
+ #### 步骤 12:确认 specline-test-writer 完成
388
444
 
389
- specline-test-writer 已在 Phase 2(Step 6a)与 Coding 并行启动。进入 TEST 阶段时,检查 specline-test-writer 是否已完成:
445
+ specline-test-writer 已在 阶段 2(步骤 6a)与 Coding 并行启动。进入 TEST 阶段时,检查 specline-test-writer 是否已完成:
390
446
 
391
447
  - 已完成 → 读取 `specline/changes/<name>/.tmp/test-code-result.json` 获取 `test_framework`,写入 `.pipeline-state.json`:
392
448
  ```bash
@@ -400,7 +456,7 @@ specline-test-writer 已在 Phase 2(Step 6a)与 Coding 并行启动。进入
400
456
 
401
457
  > **黑盒约束回顾**:specline-test-writer 只能基于 Spec 文档(验收标准)和 design.md 的「对外接口契约」章节(接口签名)编写测试,不能读取任何实现源代码。specline-test-writer 会自动检测项目测试框架(Jest/pytest/go test 等),按项目实际语言编写测试。
402
458
 
403
- #### Step 13: 测试门禁链(串行)
459
+ #### 步骤 13:测试门禁链(串行)
404
460
 
405
461
  ```bash
406
462
  # 单元测试
@@ -411,17 +467,17 @@ specline gate test-integration --change "<name>"
411
467
  specline gate test-e2e --change "<name>"
412
468
  ```
413
469
 
414
- exit code 全 0 = 通过,进入 Phase 5。失败处理见 [Layer 3: 测试失败处理](#测试失败处理)。
470
+ exit code 全 0 = 通过,进入阶段 5。失败处理见 [ 3 层:异常与恢复](#第-3-层异常与恢复)。
415
471
 
416
- ### Phase 5: ARCHIVE
472
+ ### 阶段 5ARCHIVE
417
473
 
418
- #### Step 14: 归档确认 (Human Gate 3) 🟡
474
+ #### 步骤 14:归档确认 (Human Gate 3) 🟡
419
475
 
420
476
  > **策略判断**:读取 `specline/config.yaml` → `pipeline.human_gate_policy`。若为 `none` → 跳过此 HG,直接写入 `human_gate_3.passed = true`,执行归档。`minimal` 策略下 HG3 保留人工确认。
421
477
 
422
478
  全部测试通过后,使用 {{CONFIRM}} 请求归档确认(`archive` 执行归档 / `cancel` 暂停流水线)。
423
479
 
424
- #### Step 15: 归档
480
+ #### 步骤 15:归档
425
481
 
426
482
  ```bash
427
483
  specline gate archive --execute --change "<name>"
@@ -429,6 +485,8 @@ specline gate archive --change "<name>"
429
485
  ```
430
486
 
431
487
  > 归档的详细逻辑(Delta spec sync 决策、目录移动、摘要展示)由 **specline-archive-change** Skill 负责。编排者只需确认 Human Gate 3 通过后调用上述归档命令。
488
+ >
489
+ > 归档成功后,**specline-archive-change** 可能执行“归档后知识库更新建议”。该动作是可选的,必须由用户确认,且绝不阻塞 pipeline 完成;项目存在 `specline-knowledge` 结构时可使用它,否则应询问其他知识落点。
432
490
 
433
491
  ---
434
492
 
@@ -449,7 +507,7 @@ specline gate archive --change "<name>"
449
507
 
450
508
  ---
451
509
 
452
- ## Layer 3: 异常与恢复
510
+ ## 3 层:异常与恢复
453
511
 
454
512
  ### Build 失败差异化处理
455
513
 
@@ -569,7 +627,7 @@ done
569
627
 
570
628
  ---
571
629
 
572
- ## Layer 4: 参考文档
630
+ ## 4 层:参考文档
573
631
 
574
632
  > 以下文档为完整参考信息,根据需要查阅:
575
633
 
@@ -593,11 +651,11 @@ done
593
651
  | "Build 失败看起来是子 Agent 的问题,我先继续往下" | 错误会传播。修复当前阶段再向下,否则下游建立在错误的基座上。 |
594
652
  | "影响范围看起来不大,全重置就行" | 接口不兼容只应重置受影响的下游任务。全重置浪费已完成的工作,且破坏断点续跑的状态完整性。 |
595
653
 
596
- ## Verification Checklist
654
+ ## 验证清单
597
655
 
598
656
  每阶段完成后,编排者自查:
599
657
 
600
- - [ ] **SPEC 阶段**:4 Artifact 齐全(proposal/design/tasks/specs);Spec Gate 通过;HG1 已确认;spec-review.json status=approved
658
+ - [ ] **SPEC 阶段**:4 Artifact 齐全(proposal/design/tasks/specs);Ambiguity Scan 已完成且必要的 `clarification_context` 已传递;Spec Gate 通过;HG1 已确认或按策略记录 warnings/assumptions 后跳过;spec-review.json status=approved
601
659
  - [ ] **CODING 阶段**:全部批次完成;每个 task 产出报告存在;tasks.md checkbox 全部 [x];Build Gate 通过(含契约签名检查);Testable=true 任务的 test_files 非空
602
660
  - [ ] **CODE REVIEW 阶段**:code-review.json 存在;error 计数 = 0;Lint Gate 通过;HG2 已处理
603
661
  - [ ] **TEST 阶段**:test_framework 已写入状态文件;test-unit/integration/e2e Gate 全绿
@@ -2,7 +2,7 @@
2
2
 
3
3
  ## Purpose
4
4
 
5
- 定义 Pipeline 编排者写入状态和事件日志的规范——谁在何时写入什么内容。这是编排者在 SPE 编码阶段(Step 7)和异常恢复阶段(Layer 3)写入 `.pipeline-state.json` 和 `pipeline-events.jsonl` 时必须遵循的规则。
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 Step 7 的编排者按需读取。编排者根据 `task.type` 和 `task.testable` 选择对应模板,填充 `${变量}` 后作为子 Agent 的 prompt。
5
+ 4 套子 Agent prompt 模板,供 SKILL.md 步骤 7 的编排者按需读取。编排者根据 `task.type` 和 `task.testable` 选择对应模板,填充 `${变量}` 后作为子 Agent 的 prompt。
6
6
 
7
7
  ## 使用说明
8
8
 
9
- 编排者在 Step 7 中执行以下逻辑:
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. 覆盖:Happy Path + 边界条件(空值、极值、边界值)+ 异常路径(错误输入、异常状态)
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
- ## Layer 1: TL;DR
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
- ## Layer 2: Happy Path
31
+ ## 2 层:主流程
32
32
 
33
- **Input**: 用户需求描述(自然语言),由编排者传入 change-name。
33
+ **输入**:用户需求描述(自然语言),由编排者传入 change-name。
34
34
 
35
- ### Step 1: 理解需求并推导 change name
35
+ ### 步骤 1:理解需求并推导 change name
36
36
 
37
37
  如果编排者没有传入明确的 change name,从需求描述推导 kebab-case 名称(如 "添加用户登录功能" → `add-user-login`)。
38
38
 
39
- ### Step 2: 创建 Change 目录
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
- ### Step 3: 按顺序生成 4 个 Artifact
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**` 配对,至少覆盖 Happy Path 1 个异常场景
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
- ### Step 4: 验证完整性
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
- ### Step 5: 输出完成摘要
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
- ## Layer 3: 规范详解
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
- ### Guardrails
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
- ## Verification Checklist
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),Happy Path + 至少 1 个异常场景
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
- ## Layer 1: 速览与定位
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
- ## Layer 2: Happy Path
48
+ ## 2 层:主流程
49
49
 
50
- ### Phase 1: UNDERSTAND
50
+ ### 阶段 1UNDERSTAND
51
51
 
52
52
  **目标**:理解变更上下文,明确修改范围。
53
53
 
54
- **Steps**:
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 适用范围内(参见 Layer 3 边界判断)
70
+ **准入条件**:变更范围已验证在 quickfix 适用范围内(参见第 3 层边界判断)
71
71
 
72
72
  ---
73
73
 
74
- ### Phase 2: IMPLEMENT
74
+ ### 阶段 2IMPLEMENT
75
75
 
76
76
  **目标**:直接编辑源文件,完成修改。
77
77
 
78
- **Steps**:
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
- ### Phase 3: REVIEW
98
+ ### 阶段 3REVIEW
99
99
 
100
100
  **目标**:通过 Lint 检查和 Agent 自审确保代码质量。
101
101
 
102
- **Steps**:
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
- ### Phase 4: TEST
123
+ ### 阶段 4TEST
124
124
 
125
125
  **目标**:运行项目已有单元测试,确保不引入回归。
126
126
 
127
- **Steps**:
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
- ### Phase 5: ARCHIVE
142
+ ### 阶段 5ARCHIVE
143
143
 
144
144
  **目标**:生成轻量归档,提供变更可追溯性。
145
145
 
146
- **Steps**:
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
- ## Layer 3: 异常与边界
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
- ## Layer 4: 附录
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
- ## Verification Checklist
279
+ ## 验证清单
280
280
 
281
281
  Quickfix 完成后,自查:
282
282
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "specline",
3
- "version": "2.0.1",
3
+ "version": "2.0.3",
4
4
  "description": "Spec-driven AI coding pipeline with deterministic quality gates for Cursor IDE",
5
5
  "bin": {
6
6
  "specline": "./cli.mjs"
@@ -1,18 +0,0 @@
1
- # ⚠️ DEPRECATED
2
-
3
- This directory is a legacy compatibility layer. **Do not edit files here directly.**
4
-
5
- ## Source of Truth
6
-
7
- - Skills: `core/skills/`
8
- - Agents: `core/agents/`
9
- - Gates: `core/gates/`
10
- - Hooks: `core/hooks/`
11
- - Adapters: `adapters/{cursor,claude,codex,opencode}/`
12
-
13
- ## Migration
14
-
15
- Files in this directory are no longer the primary source. They will be maintained
16
- for backward compatibility during the v1→v2 transition period.
17
-
18
- Use `specline sync` to update your project from the new `core/` + `adapters/` structure.