6aspec 2.0.0-dev.18 → 2.0.0-dev.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.
@@ -18,45 +18,88 @@
18
18
  根据 `flowDepth` 读取不同的前置文档:
19
19
 
20
20
  **轻量级流程**:
21
- - `6aspecdoc/brown/<name>/requirement.md`
22
21
  - `6aspecdoc/brown/<name>/artifacts/proposal.md`
23
22
  - `6aspecdoc/brown/<name>/artifacts/specs.md`
24
23
 
25
24
  **标准级/完整级流程**:
26
- - `6aspecdoc/brown/<name>/requirement.md`
27
- - `6aspecdoc/brown/<name>/artifacts/proposal.md`
28
- - `6aspecdoc/brown/<name>/artifacts/understanding.md`
29
25
  - `6aspecdoc/brown/<name>/artifacts/specs.md`
26
+ - `6aspecdoc/brown/<name>/artifacts/understanding.md`
30
27
  - `6aspecdoc/brown/<name>/artifacts/impact-analysis.md`
31
28
 
32
- 3. **设计数据库变更方案**
29
+ 3. **按需探索代码库(可选)**
30
+
31
+ **触发条件**:
32
+ - 需要了解现有架构模式、技术选型
33
+ - 需要了解现有的数据库设计模式(如字段类型、索引策略)
34
+ - 需要了解现有的前端组件和交互模式
35
+ - 需要了解现有的测试框架和测试模式
36
+ - 用户明确要求探索(例如:"先了解一下现有架构")
37
+ - 信息不足,需要参考现有代码才能设计准确的技术方案
38
+
39
+ **探索方式**:
40
+
41
+ a. **简单搜索**(使用Grep/Glob工具):
42
+ ```bash
43
+ # 搜索相关Service类的实现模式
44
+ rg "class.*Service" --type java -g "*Service.java"
45
+
46
+ # 搜索相关Controller类的实现模式
47
+ rg "class.*Controller" --type java -g "*Controller.java"
48
+
49
+ # 搜索配置文件
50
+ rg "spring.datasource|mybatis" --type yaml -g "*.yml"
51
+
52
+ # 搜索测试框架使用
53
+ rg "@Test|@SpringBootTest" --type java -g "*Test.java"
54
+
55
+ # 搜索前端组件
56
+ rg "export.*component" --type typescript -g "*.tsx"
57
+ ```
58
+
59
+ b. **复杂探索**(使用Task工具调用Explore agent):
60
+ - 当需要深入理解现有架构模式时
61
+ - 当需要跨多个文件理解技术选型时
62
+ - 当需要了解复杂的集成方案时
63
+
64
+ **探索结果处理**:
65
+ - 探索发现直接用于技术方案设计
66
+ - 不生成独立文档
67
+ - 在design.md中可以标注"参考现有实现:<文件路径>"
68
+
69
+ **注意**:
70
+ - 探索是可选的,不是强制的
71
+ - 如果前置文档(specs、understanding、impact)已经提供了足够信息,可以跳过探索
72
+ - 探索应该聚焦、快速,避免过度探索
73
+ - 重点关注架构模式、技术选型、实现风格,而不是具体业务逻辑
74
+
75
+ 4. **设计数据库变更方案**
33
76
 
34
77
  - 字段名、类型、约束
35
78
  - 默认值和历史数据处理
36
79
  - 索引建议
37
80
  - 数据迁移脚本(如需要)
38
81
 
39
- 4. **设计代码实现方案**
82
+ 5. **设计代码实现方案**
40
83
 
41
84
  - 实体类字段添加(含注解)
42
85
  - 业务逻辑实现(含关键代码示例)
43
86
  - 校验逻辑(必填、值域、约束)
44
87
  - 错误提示(使用多语言资源)
45
88
 
46
- 5. **设计前端 UI 方案**
89
+ 6. **设计前端 UI 方案**
47
90
 
48
91
  - 各页面字段状态(可编辑/只读/隐藏)
49
92
  - 交互逻辑(下拉选择、提示信息)
50
93
  - 错误提示
51
94
  - 多语言支持
52
95
 
53
- 6. **设计测试方案**
96
+ 7. **设计测试方案**
54
97
 
55
98
  - 单元测试(函数级别)
56
99
  - 集成测试(流程级别)
57
100
  - 数据一致性验证(SQL 验证)
58
101
 
59
- 7. **架构决策记录(涉及架构决策时创建)**
102
+ 8. **架构决策记录(涉及架构决策时创建)**
60
103
 
61
104
  如果需求涉及重要的架构决策(如技术选型、数据模型设计、集成方案等),创建 ADR:
62
105
 
@@ -92,7 +135,7 @@
92
135
  <如何验证这个决策是正确的>
93
136
  ```
94
137
 
95
- 8. **技术债务识别**
138
+ 9. **技术债务识别**
96
139
 
97
140
  识别实现过程中可能引入的技术债务:
98
141
 
@@ -100,7 +143,7 @@
100
143
  |--------|------|------|------|----------|--------|
101
144
  | DEBT-001 | 临时的硬编码逻辑 | 代码质量 | 中 | 2人日 | P1 |
102
145
 
103
- 9. **创建技术方案文档**
146
+ 10. **创建技术方案文档**
104
147
 
105
148
  创建 `6aspecdoc/brown/<name>/artifacts/design.md`
106
149
 
@@ -140,6 +183,13 @@
140
183
  }
141
184
  ```
142
185
 
186
+ 同时更新 `6aspecdoc/brown/<name>/requirement.md`:
187
+ - 更新"状态"字段为 `📋 Tasks 待开始`
188
+ - 更新"最后修改"时间戳为 `<timestamp>`
189
+ - 更新"当前阶段"为 `Design - 技术方案设计(已完成)`
190
+ - 更新"下一步操作"为 `运行 /6aspec:brown:tasks 继续下一阶段`
191
+ - 在"进度概览"中标记 Design 阶段为已完成 `[x]`
192
+
143
193
  **输出**
144
194
 
145
195
  根据 `flowDepth` 显示不同的输出信息:
@@ -21,10 +21,10 @@
21
21
  2. **读取前置文档**
22
22
 
23
23
  读取以下文档获取上下文:
24
- - `6aspecdoc/brown/<name>/requirement.md` - 需求描述
24
+ - `6aspecdoc/brown/<name>/artifacts/original-requirement.md` - 原始需求
25
25
  - `6aspecdoc/brown/<name>/artifacts/understanding.md` - 现状分析(含业务规则答案)
26
26
 
27
- **注意**:Impact 阶段不依赖 proposal,基于需求描述和现状分析来评估影响面。
27
+ **注意**:Impact 阶段不依赖 proposal,基于原始需求和现状分析来评估影响面。
28
28
 
29
29
  3. **执行影响面分析**
30
30
 
@@ -274,6 +274,13 @@
274
274
  }
275
275
  ```
276
276
 
277
+ 同时更新 `6aspecdoc/brown/<name>/requirement.md`:
278
+ - 更新"状态"字段为 `📋 Proposal 待开始`
279
+ - 更新"最后修改"时间戳为 `<timestamp>`
280
+ - 更新"当前阶段"为 `Impact - 影响面分析(已完成)`
281
+ - 更新"下一步操作"为 `运行 /6aspec:brown:proposal 继续下一阶段`
282
+ - 在"进度概览"中标记 Impact 阶段为已完成 `[x]`
283
+
277
284
  8. **停止并等待用户指令**
278
285
 
279
286
  **输出**
@@ -73,6 +73,35 @@
73
73
  mkdir -p "6aspecdoc/brown/<name>/tasks"
74
74
  ```
75
75
 
76
+ 创建原始需求文件 `6aspecdoc/brown/<name>/artifacts/original-requirement.md`:
77
+
78
+ **情况A:直接文字描述(inputSource.type = "text")**:
79
+ ```markdown
80
+ # 原始需求
81
+
82
+ <用户输入的原始需求描述,原文记录,不做加工>
83
+
84
+ ---
85
+
86
+ > **需求来源**: text
87
+ > **创建时间**: <timestamp>
88
+ ```
89
+
90
+ **情况B:文件引用(inputSource.type = "file")**:
91
+ ```markdown
92
+ # 原始需求
93
+
94
+ > **需求来源文件**: `<文件路径>`
95
+ >
96
+ > 完整需求内容请参考上述文件。
97
+
98
+ ---
99
+
100
+ > **需求来源**: file
101
+ > **来源文件**: <文件路径>
102
+ > **创建时间**: <timestamp>
103
+ ```
104
+
76
105
  创建状态文件 `6aspecdoc/brown/<name>/status.json`:
77
106
 
78
107
  **注意**:所有时间戳必须使用东八区(北京时间)格式:`yyyy-MM-dd HH:mm:ss`(例如:`2026-02-20 12:36:23`)
@@ -164,25 +193,14 @@
164
193
 
165
194
  ## 原始需求
166
195
 
167
- <!-- 根据输入类型选择以下其一 -->
168
-
169
- <!-- 情况A:直接文字描述(inputSource.type = "text") -->
170
- <用户输入的原始需求描述,原文记录,不做加工>
171
-
172
- <!-- 情况B:文件引用(inputSource.type = "file") -->
173
- > **需求来源文件**:`<文件路径>`
174
- >
175
- > 完整需求内容请参考上述文件。
196
+ 详见:[artifacts/original-requirement.md](artifacts/original-requirement.md)
176
197
 
177
- ## 快速导航
198
+ ## 当前阶段
178
199
 
179
- **需求详情**:
180
- - 轻量级流程:[proposal.md](artifacts/proposal.md) - 需求提案(Why、What、Impact)
181
- - 标准级/完整级流程:[understanding.md](artifacts/understanding.md) - 需求理解与现状分析
200
+ <当前阶段名称>
182
201
 
183
- **当前阶段**:<当前阶段名称>
202
+ ## 下一步操作
184
203
 
185
- **下一步操作**:
186
204
  - 运行 `/6aspec:brown:<next-command>` 继续下一阶段
187
205
  - 或运行 `/6aspec:brown:continue` 自动进入下一阶段
188
206
 
@@ -25,15 +25,109 @@
25
25
  根据 `flowDepth` 读取不同的前置文档:
26
26
 
27
27
  **轻量级流程**:
28
- - `6aspecdoc/brown/<name>/requirement.md` - 原始需求
28
+ - `6aspecdoc/brown/<name>/artifacts/original-requirement.md` - 原始需求
29
29
  - `6aspecdoc/brown/<name>/explore-summary.md` - 探索摘要(如果存在)
30
30
 
31
31
  **标准级/完整级流程**:
32
- - `6aspecdoc/brown/<name>/requirement.md` - 原始需求
32
+ - `6aspecdoc/brown/<name>/artifacts/original-requirement.md` - 原始需求
33
33
  - `6aspecdoc/brown/<name>/artifacts/understanding.md` - 现状分析
34
34
  - `6aspecdoc/brown/<name>/artifacts/impact-analysis.md` - 影响面分析
35
35
 
36
- 3. **创建提案文档(OpenSpec 格式)**
36
+ 3. **执行轻量级探索并识别待明确问题**(仅轻量级流程)
37
+
38
+ **触发条件**:`flowDepth` 为 "lightweight" **且满足以下任一条件**:
39
+ - 不存在 `explore-summary.md` **且** 对话上下文中没有探索内容
40
+ - 用户明确要求探索(例如:"先了解一下现有实现"、"需要探索代码库")
41
+
42
+ **上下文识别**:
43
+
44
+ 在执行探索前,先检查是否已有探索内容:
45
+
46
+ a. **检查explore-summary.md**:
47
+ - 如果存在 `6aspecdoc/brown/<name>/explore-summary.md`,读取它
48
+ - 除非用户明确要求重新探索,否则使用已有的探索摘要
49
+
50
+ b. **检查对话上下文**:
51
+ - 检查对话历史中是否包含探索内容(用户之前执行了 `/6aspec:brown:explore` 命令)
52
+ - 即使没有生成explore-summary.md文件,探索内容仍在对话上下文中
53
+ - 如果发现对话上下文中有探索内容,可以直接利用这些信息,不需要重新探索
54
+
55
+ c. **判断是否需要执行新的探索**:
56
+ - 如果既没有explore-summary.md,也没有对话上下文中的探索内容 → 执行轻量级探索
57
+ - 如果用户明确要求探索(即使已有探索内容) → 执行轻量级探索
58
+ - 如果已有探索内容(explore-summary.md或对话上下文)且用户未明确要求 → 跳过探索,直接使用已有内容
59
+
60
+ **步骤**:
61
+
62
+ a. **执行轻量级探索**(如果需要)
63
+
64
+ 从需求描述中提取关键词(实体名、功能名、业务术语),然后执行快速搜索:
65
+
66
+ ```bash
67
+ # 搜索相关实体类
68
+ rg "class.*<关键词>.*Entity" --type java -g "*Entity.java"
69
+
70
+ # 搜索相关服务类
71
+ rg "class.*<关键词>.*Service" --type java -g "*Service.java"
72
+
73
+ # 搜索相关Controller类
74
+ rg "class.*<关键词>.*Controller" --type java -g "*Controller.java"
75
+
76
+ # 搜索关键业务逻辑
77
+ rg "<关键方法名>" --type java -C 3
78
+ ```
79
+
80
+ 识别受影响的核心文件(3-5个),快速阅读关键代码片段。
81
+
82
+ b. **识别待明确问题**
83
+
84
+ 基于探索结果(explore-summary.md、对话上下文中的探索内容、或刚刚执行的轻量级探索)和需求描述,识别不清楚的地方,生成待明确问题清单:
85
+
86
+ **问题类型**:
87
+ - 字段设计问题(名称、类型、必填、默认值、值域)
88
+ - 业务规则问题(是否可修改、是否继承、是否同步)
89
+ - 权限和统计问题(权限控制、统计报表)
90
+ - 集成和兼容问题(与其他模块的集成、数据迁移)
91
+
92
+ **问题数量**:2-5个最重要的问题(保持轻量)
93
+
94
+ c. **询问用户**
95
+
96
+ 如果有待明确问题,展示问题清单并等待用户回答:
97
+
98
+ ```
99
+ ## 需要明确的问题
100
+
101
+ 基于代码库探索,发现以下问题需要明确:
102
+
103
+ ### 字段设计
104
+ 1. <问题1>
105
+ 2. <问题2>
106
+
107
+ ### 业务规则
108
+ 3. <问题3>
109
+ 4. <问题4>
110
+
111
+ 请回答上述问题,我会基于你的回答生成proposal。
112
+ ```
113
+
114
+ **等待用户回答**,不要自动进入下一步。
115
+
116
+ d. **处理用户回答**
117
+
118
+ 当用户回答问题后:
119
+ - 记录用户的回答(用于proposal生成)
120
+ - 继续执行步骤4(创建提案文档)
121
+
122
+ **注意**:
123
+ - 探索结果和用户回答不生成独立文档,直接用于proposal生成
124
+ - 如果没有待明确问题,直接跳过询问步骤,继续生成proposal
125
+ - 优先使用explore-summary.md(如果存在且用户未明确要求重新探索)
126
+ - 其次利用对话上下文中的探索内容(如果用户之前执行了explore命令)
127
+ - 最后才执行新的轻量级探索(如果既没有explore-summary.md也没有对话上下文中的探索内容)
128
+ - 即使已有探索内容,如果用户明确要求探索,也应该执行新的探索
129
+
130
+ 4. **创建提案文档(OpenSpec 格式)**
37
131
 
38
132
  创建 `6aspecdoc/brown/<name>/artifacts/proposal.md`:
39
133
  ```markdown
@@ -88,10 +182,11 @@
88
182
  - What Changes 部分:列出主要变更点
89
183
  - Capabilities 部分:列出新增或修改的系统能力(每个 capability 将对应一个 spec 文件)
90
184
  - Impact 部分:列出受影响的文件和简要描述
91
- - 轻量级流程的 Impact 基于需求描述或 explore 摘要(高层次评估)
185
+ - 轻量级流程的 Impact 基于需求描述、explore 摘要或轻量级探索结果(高层次评估)
92
186
  - 标准级/完整级流程的 Impact 基于 impact-analysis.md(详细分析的摘要)
187
+ - 如果轻量级流程在步骤3中询问了用户问题,基于用户的回答生成proposal
93
188
 
94
- 4. **更新状态**
189
+ 5. **更新状态**
95
190
 
96
191
  更新 `6aspecdoc/brown/<name>/status.json`:
97
192
 
@@ -149,13 +244,51 @@
149
244
  }
150
245
  ```
151
246
 
152
- 5. **停止并等待用户指令**
247
+ 同时更新 `6aspecdoc/brown/<name>/requirement.md`:
248
+ - 更新"状态"字段为 `📋 Specs 待开始`
249
+ - 更新"最后修改"时间戳为 `<timestamp>`
250
+ - 更新"当前阶段"为 `Proposal - 需求提案(已完成)`
251
+ - 更新"下一步操作"为 `运行 /6aspec:brown:specs 继续下一阶段`
252
+ - 在"进度概览"中标记 Proposal 阶段为已完成 `[x]`
253
+
254
+ 6. **停止并等待用户指令**
153
255
 
154
256
  **输出**
155
257
 
156
- 根据 `flowDepth` 显示不同的输出信息:
258
+ 根据 `flowDepth` 和执行阶段显示不同的输出信息:
259
+
260
+ **轻量级流程 - 待明确问题阶段**(如果步骤3中发现有待明确问题):
261
+ ```
262
+ ## 需要明确的问题:<name>
263
+
264
+ **流程**: 轻量级
265
+ **阶段**: Proposal(探索中)
266
+
267
+ ### 代码库探索结果
268
+ - 相关实体类:<数量>
269
+ - 相关服务类:<数量>
270
+ - 受影响文件:<数量>
271
+
272
+ ### 待明确问题
273
+
274
+ 基于代码库探索,发现以下问题需要明确:
275
+
276
+ #### 字段设计
277
+ 1. <问题1>
278
+ 2. <问题2>
157
279
 
158
- **轻量级流程**:
280
+ #### 业务规则
281
+ 3. <问题3>
282
+ 4. <问题4>
283
+
284
+ #### 其他
285
+ 5. <问题5>
286
+
287
+ ### 下一步
288
+ 请回答上述问题,我会基于你的回答生成proposal。
289
+ ```
290
+
291
+ **轻量级流程 - Proposal完成**:
159
292
  ```
160
293
  ## Proposal 完成:<name>
161
294
 
@@ -233,3 +366,13 @@
233
366
  - 提案应聚焦高层次的业务目标和核心能力,不包含详细的功能需求(FR)和验收标准(AC)
234
367
  - 详细的功能需求和验收标准应该在specs阶段定义
235
368
  - 风险评估不能省略
369
+
370
+ **轻量级流程的特殊防护措施**:
371
+ - 如果没有explore-summary.md,必须执行轻量级探索(步骤3)
372
+ - 轻量级探索应该快速、聚焦,只搜索关键实体类、服务类和受影响文件
373
+ - 轻量级探索不生成独立文档,探索结果直接用于proposal生成
374
+ - 如果探索过程中发现待明确问题,必须询问用户,不能基于假设生成proposal
375
+ - 待明确问题数量应该控制在2-5个,保持轻量(与标准级/完整级的5-10个问题相比)
376
+ - 如果没有待明确问题,可以直接生成proposal
377
+ - 不要在轻量级流程中执行过于深入的分析(如绘制ERD图、流程图等),这些应该在标准级/完整级流程中完成
378
+ - 轻量级探索的目标是"快速理解现有实现",而不是"深入分析系统架构"
@@ -20,11 +20,9 @@
20
20
  根据 `flowDepth` 读取不同的前置文档:
21
21
 
22
22
  **轻量级流程**:
23
- - `6aspecdoc/brown/<name>/requirement.md`
24
23
  - `6aspecdoc/brown/<name>/artifacts/proposal.md`
25
24
 
26
25
  **标准级/完整级流程**:
27
- - `6aspecdoc/brown/<name>/requirement.md`
28
26
  - `6aspecdoc/brown/<name>/artifacts/proposal.md`
29
27
  - `6aspecdoc/brown/<name>/artifacts/understanding.md`
30
28
  - `6aspecdoc/brown/<name>/artifacts/impact-analysis.md`
@@ -39,38 +37,125 @@
39
37
 
40
38
  注意:specs 阶段不再提出新问题,所有需求问题应该在 understand 阶段提出并收集。
41
39
 
42
- 4. **定义功能需求**
40
+ 4. **按需探索代码库(可选)**
43
41
 
44
- 基于需求理解和问题答案,使用 Requirement + Scenario 格式明确定义系统应该具备的能力:
42
+ **触发条件**:
43
+ - 需要了解现有字段定义、验证逻辑、Scenario实现方式
44
+ - 需要了解现有的非功能需求实现(如权限控制、性能优化)
45
+ - 用户明确要求探索(例如:"先了解一下现有实现")
46
+ - 信息不足,需要参考现有代码才能定义准确的需求规格
45
47
 
46
- **功能需求格式**(借鉴 OpenSpec 的 WHEN/THEN 格式):
48
+ **探索方式**:
49
+
50
+ a. **简单搜索**(使用Grep/Glob工具):
51
+ ```bash
52
+ # 搜索相关Entity类的字段定义
53
+ rg "private.*<字段名>" --type java -g "*Entity.java" -C 3
54
+
55
+ # 搜索相关验证注解
56
+ rg "@NotNull|@NotEmpty|@Valid" --type java -g "*Entity.java"
57
+
58
+ # 搜索现有的测试场景
59
+ rg "test.*<功能名>" --type java -g "*Test.java"
60
+ ```
61
+
62
+ b. **复杂探索**(使用Task工具调用Explore agent):
63
+ - 当需要深入理解现有架构模式时
64
+ - 当需要跨多个文件理解业务逻辑时
65
+
66
+ **探索结果处理**:
67
+ - 探索发现直接用于需求规格定义
68
+ - 不生成独立文档
69
+ - 在specs.md中可以标注"基于现有实现:<文件路径>"
70
+
71
+ **注意**:
72
+ - 探索是可选的,不是强制的
73
+ - 如果前置文档(proposal、understanding、impact)已经提供了足够信息,可以跳过探索
74
+ - 探索应该聚焦、快速,避免过度探索
75
+
76
+ 5. **基于 Capabilities 定义功能需求**
77
+
78
+ 从 proposal.md 中读取 Capabilities 列表,按 Capability 组织功能需求:
79
+
80
+ **功能需求格式**(按 Capability 组织):
47
81
  ```markdown
48
- ### Requirement: <需求名称>
82
+ ### Capability: <capability-name> [ADD/MODIFY/REMOVE]
83
+
84
+ <Capability 描述,说明这个能力是做什么的>
85
+
86
+ #### Requirement: <需求名称>
49
87
 
50
88
  <需求描述,使用 SHALL/MUST 关键字表示强制性要求>
51
89
 
52
- #### Scenario: <场景名称>
90
+ ##### Scenario: <场景名称>
53
91
 
54
92
  - **WHEN** <触发条件>
55
93
  - **THEN** <预期结果>
56
94
  - **AND** <额外的预期结果>(可选)
57
95
 
58
- #### Scenario: <另一个场景名称>
96
+ ##### Scenario: <另一个场景名称>
97
+
98
+ - **WHEN** <触发条件>
99
+ - **THEN** <预期结果>
100
+
101
+ #### Requirement: <另一个需求名称>
102
+
103
+ <需求描述>
104
+
105
+ ##### Scenario: <场景名称>
59
106
 
60
107
  - **WHEN** <触发条件>
61
108
  - **THEN** <预期结果>
62
109
  ```
63
110
 
64
- **拆解原则**:
111
+ 5. **基于 Capabilities 定义功能需求**
112
+
113
+ 从 proposal.md 中读取 Capabilities 列表,按 Capability 组织功能需求:
114
+
115
+ **功能需求格式**(按 Capability 组织):
116
+ ```markdown
117
+ ### Capability: <capability-name> [ADD/MODIFY/REMOVE]
118
+
119
+ <Capability 描述,说明这个能力是做什么的>
120
+
121
+ #### Requirement: <需求名称>
122
+
123
+ <需求描述,使用 SHALL/MUST 关键字表示强制性要求>
124
+
125
+ ##### Scenario: <场景名称>
126
+
127
+ - **WHEN** <触发条件>
128
+ - **THEN** <预期结果>
129
+ - **AND** <额外的预期结果>(可选)
130
+
131
+ ##### Scenario: <另一个场景名称>
132
+
133
+ - **WHEN** <触发条件>
134
+ - **THEN** <预期结果>
135
+
136
+ #### Requirement: <另一个需求名称>
137
+
138
+ <需求描述>
139
+
140
+ ##### Scenario: <场景名称>
141
+
142
+ - **WHEN** <触发条件>
143
+ - **THEN** <预期结果>
144
+ ```
145
+
146
+ **组织原则**:
147
+ - 每个 Capability 对应 proposal.md 中的一个能力
148
+ - 在 Capability 级别标识变更类型:[ADD](新增)、[MODIFY](修改)、[REMOVE](移除)
149
+ - 每个 Capability 下包含多个 Requirements
65
150
  - 每个 Requirement 应该是独立的、可验证的
66
151
  - 每个 Scenario 使用 WHEN/THEN 格式,天然可测试
67
152
  - 使用 SHALL/MUST 关键字表示强制性要求,SHOULD 表示推荐性要求
68
153
  - 功能需求应该从用户视角描述(做什么,而不是怎么做)
69
154
  - 避免技术实现细节(技术细节放在 design 阶段)
70
155
 
71
- 5. **定义非功能需求**
156
+ 6. **定义非功能需求(可选)**
72
157
 
73
- 明确系统应该满足的质量标准:
158
+ 明确系统应该满足的质量标准。**注意:只写有明确要求的项,不要为了完整性而写空泛内容。**
74
159
 
75
160
  **非功能需求格式**:
76
161
  ```markdown
@@ -91,22 +176,41 @@
91
176
  - 数据库:SHALL 兼容现有数据库版本
92
177
  ```
93
178
 
94
- 注意:使用 SHALL/MUST 表示强制性要求,SHOULD 表示推荐性要求
179
+ **注意事项**:
180
+ - 使用 SHALL/MUST 表示强制性要求,SHOULD 表示推荐性要求
181
+ - 如果某个类别(如性能、安全)没有明确要求,可以省略该小节
182
+ - 避免写"遵循最佳实践"等空泛描述
95
183
 
96
- 6. **定义范围和约束**
184
+ 7. **定义范围边界(可选)**
97
185
 
98
- 明确做什么、不做什么:
186
+ 明确做什么、不做什么,以及关键约束:
99
187
 
100
- **范围定义**:
101
- - 包含:<明确包含的功能>
102
- - 不包含:<明确不包含的功能>
188
+ **范围边界格式**:
189
+ ```markdown
190
+ ## 1. 范围边界
191
+
192
+ **本次实现**:
193
+ - <明确包含的核心功能>
194
+ - <明确包含的核心功能>
195
+
196
+ **明确不包含**:
197
+ - <明确排除的功能或场景>
198
+ - <明确排除的功能或场景>
199
+
200
+ **关键约束**(可选):
201
+ - <技术约束:如必须使用某技术栈、兼容某版本>
202
+ - <业务约束:如必须满足某业务规则>
203
+ - <时间约束:如必须在某时间前完成>
204
+ ```
103
205
 
104
- **约束条件**:
105
- - 技术约束:<技术上的限制>
106
- - 业务约束:<业务上的限制>
107
- - 时间约束:<时间上的限制>
206
+ **注意事项**:
207
+ - 范围边界用于明确需求边界,避免范围蔓延
208
+ - "本次实现"应该简洁列出核心功能点
209
+ - "明确不包含"用于排除容易混淆的功能
210
+ - "关键约束"只写有实际影响的约束,如果没有可以省略
211
+ - 如果范围已经很明确(如简单的 bug 修复),整个章节可以省略
108
212
 
109
- 7. **创建需求规格文档**
213
+ 8. **创建需求规格文档**
110
214
 
111
215
  注意:使用 WHEN/THEN 格式定义的 Scenario 本身就是验证标准,无需单独定义验收标准。
112
216
 
@@ -115,51 +219,74 @@
115
219
  # 需求规格定义
116
220
 
117
221
  > **需求**: <name>
222
+ > **基于提案**: proposal.md
118
223
  > **流程**: <flowDepth>
119
224
  > **阶段**: Specs
120
225
  > **状态**: ✅ 已完成
121
226
  > **完成时间**: <timestamp>
122
227
 
123
- ## 1. 需求概述
228
+ ## 1. 范围边界
124
229
 
125
- ### 1.1 业务目标
126
- <为什么需要这个功能>
230
+ **本次实现**:
231
+ - <明确包含的核心功能>
232
+ - <明确包含的核心功能>
127
233
 
128
- ### 1.2 范围定义
129
- **包含**:
130
- - <明确包含的功能>
234
+ **明确不包含**:
235
+ - <明确排除的功能或场景>
236
+ - <明确排除的功能或场景>
131
237
 
132
- **不包含**:
133
- - <明确不包含的功能>
238
+ **关键约束**(可选):
239
+ - <技术约束:如必须使用某技术栈、兼容某版本>
240
+ - <业务约束:如必须满足某业务规则>
241
+ - <时间约束:如必须在某时间前完成>
134
242
 
135
243
  ## 2. 功能需求
136
244
 
137
- ### Requirement: <需求名称>
245
+ ### Capability: <capability-name> [ADD]
246
+
247
+ <Capability 描述,说明这个能力是做什么的>
248
+
249
+ #### Requirement: <需求名称>
138
250
 
139
251
  <需求描述,使用 SHALL/MUST 关键字表示强制性要求>
140
252
 
141
- #### Scenario: <场景名称>
253
+ ##### Scenario: <场景名称>
142
254
 
143
255
  - **WHEN** <触发条件>
144
256
  - **THEN** <预期结果>
145
257
  - **AND** <额外的预期结果>(可选)
146
258
 
147
- #### Scenario: <另一个场景名称>
259
+ ##### Scenario: <另一个场景名称>
260
+
261
+ - **WHEN** <触发条件>
262
+ - **THEN** <预期结果>
263
+
264
+ #### Requirement: <另一个需求名称>
265
+
266
+ <需求描述>
267
+
268
+ ##### Scenario: <场景名称>
148
269
 
149
270
  - **WHEN** <触发条件>
150
271
  - **THEN** <预期结果>
151
272
 
152
- ### Requirement: <另一个需求名称>
273
+ ### Capability: <another-capability-name> [MODIFY]
274
+
275
+ <Capability 描述>
276
+
277
+ #### Requirement: <需求名称>
153
278
 
154
279
  <需求描述>
155
280
 
156
- #### Scenario: <场景名称>
281
+ ##### Scenario: <场景名称>
157
282
 
158
283
  - **WHEN** <触发条件>
159
284
  - **THEN** <预期结果>
160
285
 
161
286
  ## 3. 非功能需求
162
287
 
288
+ > **注意**:只写有明确要求的项,如果某个类别没有明确要求,可以省略该小节。
289
+
163
290
  ### 性能需求
164
291
  - 响应时间 SHALL < <具体值>
165
292
  - 并发量 SHALL 支持 <具体值>
@@ -176,21 +303,9 @@
176
303
  - 浏览器:SHALL 支持 <具体版本>
177
304
  - 数据库:SHALL 兼容 <具体版本>
178
305
 
179
- ## 4. 约束条件
306
+ ## 4. 下一步
180
307
 
181
- ### 技术约束
182
- - <技术上的限制>
183
-
184
- ### 业务约束
185
- - <业务上的限制>
186
-
187
- ### 时间约束
188
- - <时间上的限制>
189
-
190
- ## 5. 下一步
191
-
192
- - 轻量级流程:运行 `/6aspec:brown:design` 进行技术方案设计
193
- - 标准级/完整级流程:运行 `/6aspec:brown:impact` 进行影响面分析
308
+ 运行 `/6aspec:brown:design` 进行技术方案设计
194
309
  ```
195
310
 
196
311
  9. **更新状态**
@@ -251,6 +366,13 @@
251
366
  }
252
367
  ```
253
368
 
369
+ 同时更新 `6aspecdoc/brown/<name>/requirement.md`:
370
+ - 更新"状态"字段为 `📋 Design 待开始`
371
+ - 更新"最后修改"时间戳为 `<timestamp>`
372
+ - 更新"当前阶段"为 `Specs - 需求规格定义(已完成)`
373
+ - 更新"下一步操作"为 `运行 /6aspec:brown:design 继续下一阶段`
374
+ - 在"进度概览"中标记 Specs 阶段为已完成 `[x]`
375
+
254
376
  **输出**
255
377
 
256
378
  根据 `flowDepth` 显示不同的输出信息:
@@ -263,15 +385,13 @@
263
385
  **进度**: 2/5 阶段完成
264
386
 
265
387
  ### 需求概要
266
- - 功能需求:<数量> 个 Requirement
267
- - 测试场景:<数量> 个 Scenario
388
+ - Capabilities:<数量> 个能力
389
+ - Requirements:<数量> 个需求
390
+ - Scenarios:<数量> 个测试场景
268
391
  - 非功能需求:<数量> 项
269
392
 
270
- ### 核心功能
271
- <列出 2-3 个核心 Requirement>
272
-
273
- ### 关键约束
274
- <列出 1-2 个关键约束>
393
+ ### 核心 Capabilities
394
+ <列出 2-3 个核心 Capability 及其变更类型(ADD/MODIFY/REMOVE)>
275
395
 
276
396
  ### 文档位置
277
397
  6aspecdoc/brown/<name>/artifacts/specs.md
@@ -290,15 +410,13 @@
290
410
  **进度**: 4/6 阶段完成
291
411
 
292
412
  ### 需求概要
293
- - 功能需求:<数量> 个 Requirement
294
- - 测试场景:<数量> 个 Scenario
413
+ - Capabilities:<数量> 个能力
414
+ - Requirements:<数量> 个需求
415
+ - Scenarios:<数量> 个测试场景
295
416
  - 非功能需求:<数量> 项
296
417
 
297
- ### 核心功能
298
- <列出 2-3 个核心 Requirement>
299
-
300
- ### 关键约束
301
- <列出 1-2 个关键约束>
418
+ ### 核心 Capabilities
419
+ <列出 2-3 个核心 Capability 及其变更类型(ADD/MODIFY/REMOVE)>
302
420
 
303
421
  ### 文档位置
304
422
  6aspecdoc/brown/<name>/artifacts/specs.md
@@ -317,15 +435,13 @@
317
435
  **进度**: 4/8 阶段完成
318
436
 
319
437
  ### 需求概要
320
- - 功能需求:<数量> 个 Requirement
321
- - 测试场景:<数量> 个 Scenario
438
+ - Capabilities:<数量> 个能力
439
+ - Requirements:<数量> 个需求
440
+ - Scenarios:<数量> 个测试场景
322
441
  - 非功能需求:<数量> 项
323
442
 
324
- ### 核心功能
325
- <列出 2-3 个核心 Requirement>
326
-
327
- ### 关键约束
328
- <列出 1-2 个关键约束>
443
+ ### 核心 Capabilities
444
+ <列出 2-3 个核心 Capability 及其变更类型(ADD/MODIFY/REMOVE)>
329
445
 
330
446
  ### 文档位置
331
447
  6aspecdoc/brown/<name>/artifacts/specs.md
@@ -348,10 +464,14 @@
348
464
  - 适用于所有流程(轻量级、标准级、完整级)
349
465
  - 根据flowDepth检查不同的前置阶段:
350
466
  - 轻量级:必须先完成proposal阶段
351
- - 标准级/完整级:必须先完成understand阶段
467
+ - 标准级/完整级:必须先完成impact阶段
468
+ - 功能需求必须按 Capability 组织,结构为:Capability > Requirement > Scenario
469
+ - 每个 Capability 必须标识变更类型:[ADD](新增)、[MODIFY](修改)、[REMOVE](移除)
470
+ - 每个 Capability 应该对应 proposal.md 中的一个能力
352
471
  - 功能需求必须使用 Requirement + Scenario (WHEN/THEN) 格式
353
472
  - 使用 SHALL/MUST 表示强制性要求,SHOULD 表示推荐性要求
354
473
  - 每个 Scenario 必须可测试、可验证
355
474
  - 功能需求必须从用户视角描述,避免技术实现细节
356
475
  - 需求问题的答案应该体现在功能需求定义中,而不是单独列出
476
+ - 非功能需求和范围边界只写有明确要求的内容,避免空泛描述
357
477
  - specs的详细程度保持一致,不区分流程深度
@@ -17,18 +17,12 @@ Phase 4: 任务拆解与排期
17
17
  根据 `flowDepth` 读取不同的前置文档:
18
18
 
19
19
  **轻量级流程**:
20
- - `6aspecdoc/brown/<name>/requirement.md`
21
- - `6aspecdoc/brown/<name>/artifacts/proposal.md`
22
- - `6aspecdoc/brown/<name>/artifacts/specs.md`
23
20
  - `6aspecdoc/brown/<name>/artifacts/design.md`
21
+ - `6aspecdoc/brown/<name>/artifacts/specs.md`
24
22
 
25
23
  **标准级/完整级流程**:
26
- - `6aspecdoc/brown/<name>/requirement.md`
27
- - `6aspecdoc/brown/<name>/artifacts/proposal.md`
28
- - `6aspecdoc/brown/<name>/artifacts/understanding.md`
29
- - `6aspecdoc/brown/<name>/artifacts/impact-analysis.md`
30
- - `6aspecdoc/brown/<name>/artifacts/specs.md`
31
24
  - `6aspecdoc/brown/<name>/artifacts/design.md`
25
+ - `6aspecdoc/brown/<name>/artifacts/specs.md`
32
26
 
33
27
  3. **原子任务拆解**
34
28
 
@@ -176,6 +170,13 @@ Phase 4: 任务拆解与排期
176
170
  }
177
171
  ```
178
172
 
173
+ 同时更新 `6aspecdoc/brown/<name>/requirement.md`:
174
+ - 更新"状态"字段为 `📋 Implement 待开始`
175
+ - 更新"最后修改"时间戳为 `<timestamp>`
176
+ - 更新"当前阶段"为 `Tasks - 任务拆解(已完成)`
177
+ - 更新"下一步操作"为 `运行 /6aspec:brown:implement 开始执行任务`
178
+ - 在"进度概览"中标记 Tasks 阶段为已完成 `[x]`
179
+
179
180
  **输出**
180
181
 
181
182
  ```
@@ -29,11 +29,11 @@
29
29
 
30
30
  3. **读取需求描述**
31
31
 
32
- 读取 `6aspecdoc/brown/<name>/requirement.md` 获取原始需求内容:
33
- - 如果 `inputSource.type = "text"`:读取文档中的"原始需求"部分
34
- - 如果 `inputSource.type = "file"`:读取记录的来源文件路径,获取完整需求内容
32
+ 读取 `6aspecdoc/brown/<name>/artifacts/original-requirement.md` 获取原始需求内容:
33
+ - 如果 `inputSource.type = "text"`:文档中包含用户输入的原始需求描述
34
+ - 如果 `inputSource.type = "file"`:文档中包含来源文件路径的引用
35
35
 
36
- **注意**:Understand 阶段不依赖 proposal,直接基于需求描述分析现有系统
36
+ **注意**:Understand 阶段不依赖 proposal,直接基于原始需求分析现有系统
37
37
 
38
38
  4. **分析现有系统**
39
39
 
@@ -195,6 +195,13 @@
195
195
  }
196
196
  ```
197
197
 
198
+ 同时更新 `6aspecdoc/brown/<name>/requirement.md`:
199
+ - 更新"状态"字段为 `📋 Impact 待开始`
200
+ - 更新"最后修改"时间戳为 `<timestamp>`
201
+ - 更新"当前阶段"为 `Understand - 需求理解与现状分析(已完成)`
202
+ - 更新"下一步操作"为 `运行 /6aspec:brown:impact 继续下一阶段`
203
+ - 在"进度概览"中标记 Understand 阶段为已完成 `[x]`
204
+
198
205
  8. **停止并等待用户指令**
199
206
 
200
207
  **输出**
@@ -19,7 +19,10 @@
19
19
  "Bash(git mv 6A_clarify_sop.md green_clarify_sop.md)",
20
20
  "Bash(git mv 6A_status_sop.md green_status_sop.md)",
21
21
  "Bash(ls -la .6aspec/rules/green/6A_*.md)",
22
- "Bash(xargs sed -i '' 's/6A_\\\\\\([a-z_]*\\\\\\)\\\\.md/green_\\\\1.md/g')"
22
+ "Bash(xargs sed -i '' 's/6A_\\\\\\([a-z_]*\\\\\\)\\\\.md/green_\\\\1.md/g')",
23
+ "Bash(openspec --help)",
24
+ "Bash(openspec schemas --json 2>/dev/null | head -100)",
25
+ "Bash(openspec status --json 2>/dev/null | head -50)"
23
26
  ]
24
27
  }
25
28
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "6aspec",
3
- "version": "2.0.0-dev.18",
3
+ "version": "2.0.0-dev.20",
4
4
  "description": "6Aspec - 轻量级 spec 驱动开发框架,支持 Cursor 和 Claude Code",
5
5
  "main": "lib/installer.js",
6
6
  "bin": {