@modus-ai/modus 0.2.4 → 0.2.5

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 (49) hide show
  1. package/README.md +45 -4
  2. package/dist/cli/index.js +2 -2
  3. package/dist/cli/index.js.map +1 -1
  4. package/dist/commands/config.d.ts.map +1 -1
  5. package/dist/commands/config.js +9 -8
  6. package/dist/commands/config.js.map +1 -1
  7. package/dist/commands/global.js +1 -1
  8. package/dist/commands/global.js.map +1 -1
  9. package/dist/commands/init.d.ts.map +1 -1
  10. package/dist/commands/init.js +0 -1
  11. package/dist/commands/init.js.map +1 -1
  12. package/dist/commands/status.js +2 -2
  13. package/dist/generators/claude.d.ts.map +1 -1
  14. package/dist/generators/claude.js +0 -36
  15. package/dist/generators/claude.js.map +1 -1
  16. package/dist/generators/copilot.d.ts.map +1 -1
  17. package/dist/generators/copilot.js +0 -1
  18. package/dist/generators/copilot.js.map +1 -1
  19. package/dist/utils/config.d.ts +32 -0
  20. package/dist/utils/config.d.ts.map +1 -1
  21. package/dist/utils/config.js +10 -2
  22. package/dist/utils/config.js.map +1 -1
  23. package/dist/utils/file-system.d.ts.map +1 -1
  24. package/dist/utils/file-system.js +2 -1
  25. package/dist/utils/file-system.js.map +1 -1
  26. package/package.json +1 -1
  27. package/schemas/knowledge-schema.yaml +111 -1
  28. package/templates/behavior-guard.md +165 -0
  29. package/templates/commands/auto.md +3 -1
  30. package/templates/commands/commit.md +63 -0
  31. package/templates/commands/harness.md +15 -8
  32. package/templates/commands/vibe.md +1 -1
  33. package/templates/knowledge-catalog.md +61 -32
  34. package/templates/skills/modus-agents/analyst/SKILL.md +16 -0
  35. package/templates/skills/modus-agents/deployer/SKILL.md +114 -62
  36. package/templates/skills/modus-agents/designer/SKILL.md +104 -92
  37. package/templates/skills/modus-agents/developer/SKILL.md +106 -67
  38. package/templates/skills/modus-agents/perf-auditor/SKILL.md +98 -61
  39. package/templates/skills/modus-agents/reviewer/SKILL.md +25 -2
  40. package/templates/skills/modus-agents/security-auditor/SKILL.md +111 -67
  41. package/templates/skills/modus-agents/skill-creator/SKILL.md +30 -12
  42. package/templates/skills/modus-agents/tester/SKILL.md +100 -54
  43. package/templates/skills/modus-auto/SKILL.md +16 -1
  44. package/templates/skills/modus-design-brief/SKILL.md +31 -13
  45. package/templates/skills/modus-harness/SKILL.md +78 -12
  46. package/templates/skills/modus-init/SKILL.md +783 -172
  47. package/templates/skills/modus-plan/SKILL.md +109 -43
  48. package/templates/skills/modus-spec/SKILL.md +175 -331
  49. package/templates/skills/modus-vibe/SKILL.md +147 -44
@@ -1,26 +1,39 @@
1
1
  ---
2
2
  name: modus-spec
3
- description: Use this skill when executing /modus:spec command for OpenSpec-style spec-driven development. Generates delta specs (ADDED/MODIFIED/REMOVED requirements with GIVEN/WHEN/THEN scenarios), design, and tasks. Supports --lite flag to skip design-brief for low-risk changes. Trigger on /modus:spec command or when user wants behavior specifications before coding.
3
+ description: Use this skill when executing /modus:spec command for spec-driven development. Loads and updates business Skills, generates delta specs (ADDED/MODIFIED/REMOVED requirements with GIVEN/WHEN/THEN scenarios), technical design, and task list. Detects conflicts against existing spec library. Archives delta specs by merging into the main spec library. Post-archives knowledge back to Skills. Trigger on /modus:spec command or when user wants specification-driven development with testable acceptance criteria.
4
4
  allowed-tools: Read, Write, Glob, Bash
5
5
  disable: false
6
+ supported_platforms:
7
+ claude:
8
+ status: full
9
+ notes: "全功能支持。delta specs 生成、冲突检测、归档合并均完整执行。"
10
+ codebuddy:
11
+ status: full
12
+ notes: "全功能支持,与 Claude 能力对等。"
13
+ cursor:
14
+ status: partial
15
+ notes: "核心 spec 流程可用(Steps 1-8),Step 9 归档后 Skill 写回需手动触发。"
16
+ limitations:
17
+ - "Step 9 知识写回:Cursor 无 post-commit hook,需手动运行 /modus:commit 触发"
18
+ copilot:
19
+ status: minimal
20
+ notes: "spec 流程退化为基础文档生成,无 Skill 前置更新和后置写回。"
6
21
  ---
7
22
 
8
- # modus-spec(OpenSpec 规范驱动开发)
23
+ # modus-spec(规范驱动开发)
9
24
 
10
25
  **触发条件:** 用户运行 `/modus:spec [需求描述]` 时使用此 Skill。
11
26
 
12
- 支持轻量模式:`/modus:spec --lite [描述]` 跳过 design-brief,适用于低风险小变更。
27
+ ---
13
28
 
14
29
  ## 职责
15
30
 
16
- 规范驱动开发入口。在 `/modus:plan` 的基础上增加 OpenSpec 风格的行为规格(delta specs),明确「系统的 WHAT」而非「HOW」。通过**三级渐进加载**获取业务上下文,产出物包含 proposal、delta specs、design、tasks,归档前可选执行实现验证(verify),归档时自动检测规格冲突,合并 delta specs 到主规格库,并从中提取带类型标签的知识回写到 Skill。
17
-
18
- ### 规格级别
31
+ 规范驱动开发的执行引擎。在需求实现前,先生成结构化的行为规格文档(delta specs),包含可直接转化为测试用例的 GIVEN/WHEN/THEN 场景。规格稳定后归档合并到主规格库(`modus/specs/`),作为后续 vibe/harness 的知识来源。
19
32
 
20
- | 模式 | 标志 | 产出物 | 适用场景 |
21
- |------|------|--------|---------|
22
- | Full(默认) | 无 | proposal + delta specs + design + design-brief + tasks | 接口契约变更、高风险、跨域需求 |
23
- | Lite | `--lite` | proposal + delta specs + tasks(无 design-brief) | 低风险内部逻辑变更、简单新增 |
33
+ **适用场景:**
34
+ - 涉及对外接口契约变更(新增/修改/废弃接口)
35
+ - 需要可测试验收标准的功能需求
36
+ - 高风险变更(支付/权限/多租户)需要先规格再编码
24
37
 
25
38
  ---
26
39
 
@@ -29,419 +42,250 @@ disable: false
29
42
  ### Step 0:读取项目宪法 + 断点续跑检查
30
43
 
31
44
  **读取 constitution:**
32
- 读取 `modus/config.yaml` 的 `constitution` 字段,作为 Spec 编写的最高优先级约束。`hard_rules` 中的规则必须体现在 Scenario 的 THEN 断言中。
45
+ 读取 `modus/config.yaml` 的 `constitution` 字段,将 `hard_rules` 作为最高优先级约束贯穿整个规范流程。
33
46
 
34
47
  **断点续跑检查:**
35
- 扫描 `modus/changes/` 目录,检查是否存在同名的 `.modus-state.yaml`:
36
- - 若存在且 `status: in-progress`,提示用户恢复或重新开始
37
- - 若用户选择继续,跳到对应未完成步骤
38
-
39
- ### Step 1:Level 1 加载——读知识目录(~200 tokens)
40
-
41
- 读取 `modus/knowledge-catalog.md`,了解当前可用 Skill 及状态。
42
- 若不存在,与 vibe/plan 模式相同的降级提示。
43
-
44
- ### Step 2:域匹配与确认(有则更新,无则新增)
45
-
46
- 基于 catalog 目录信息,结合用户 prompt,判断涉及的业务域:
47
-
48
+ 扫描 `modus/changes/` 目录,检查是否存在同名的未完成变更:
48
49
  ```
49
- 根据你的需求,我认为涉及以下业务域:
50
-
51
- order(订单域) [verified] → 将在前置步骤中更新
52
- ✓ payment(支付域) [proven] → 将在前置步骤中更新
53
- ? export(导出域) [未初始化] → 将在前置步骤中新建
50
+ 检测到未完成的变更:{name}
51
+ 已完成:{completed 列表}
52
+ 待完成:{pending 列表}
54
53
 
55
- 确认?
54
+ 是否继续上次的规范,还是重新开始?
56
55
  ```
57
56
 
58
- ### Step 3:澄清用户意图(AskUserQuestion)
59
-
60
- 确认域后,在规范编写前,提出 1-3 个关键澄清问题。
61
-
62
- **Spec 模式特别关注的澄清方向:**
63
-
64
- ```
65
- 为了写出准确的行为规格,我需要确认:
57
+ ---
66
58
 
67
- 1. [行为边界] {具体业务场景的边界情况},系统应该怎么处理?
68
- (直接影响 GIVEN/WHEN/THEN 场景的编写)
59
+ ### Step 1:Level 1 加载——读知识目录(~200 tokens)
69
60
 
70
- 2. [MODIFIED vs ADDED] 这是修改 {已有需求名称} 的行为,
71
- 还是新增一个独立的需求?(影响 delta spec 使用 MODIFIED 还是 ADDED)
61
+ 读取 `modus/knowledge-catalog.md`,了解当前可用 Skill 及其状态。
72
62
 
73
- 3. [REMOVED 确认] 原有的 {已有功能} 是否明确废弃,
74
- 还是保留并共存?
63
+ 若不存在,输出降级提示并继续(使用平台规则文件扫描替代)。
75
64
 
76
- 4. [验收标准] 你期望的测试 Scenario 中,有哪些边界情况必须覆盖?
65
+ ---
77
66
 
78
- 5. [已知风险] ⚠️ Skill 中记录了:{pitfall},Spec 中是否需要为此添加保护性场景?
79
- ```
67
+ ### Step 2:域匹配与确认
80
68
 
81
- 等待用户回答后,输出意图摘要:
69
+ 基于 catalog 和用户 prompt,判断涉及的业务域,展示确认:
82
70
 
83
71
  ```
84
- 理解已确认:
85
- - 核心行为变更: {ADDED/MODIFIED/REMOVED 各几条}
86
- - 关键 Scenario: {用户明确提及的测试场景}
87
- - 废弃内容: {若有}
88
- - 项目约束: {来自 constitution 的关键规则}
89
-
90
- 开始前置更新 Skill,然后生成规范文档。
72
+ 根据你的需求,以下域相关:
73
+ order(订单域) [verified] 将前置更新后使用
74
+ ? payment(支付域) [proven] → 请确认是否涉及
91
75
  ```
92
76
 
93
- ### Step 4:前置 Skill 更新(Level 2 加载,含 hash 检查,同 /modus:plan Step 5)
94
-
95
- 对每个涉及的业务域执行以下流程(**先 hash 检查,再决定是否全量更新**):
96
-
97
- #### Step 4a:读取 Skill frontmatter(轻量操作,仅读前 20 行)
98
-
99
- 读取 `.codebuddy/skills/modus-biz-{domain}/SKILL.md` 的 YAML frontmatter,提取:
100
- - `last_hash`:上次记录的 key_files 内容摘要
101
- - `key_files`:关键源文件列表
77
+ ---
102
78
 
103
- Skill 不存在,跳到 Step 4d(新建)。
79
+ ### Step 3:Skill 前置更新(hash 检查,仅 hash 不一致时全量更新)
104
80
 
105
- #### Step 4b:计算当前 key_files 的 hash
81
+ 对每个确认的业务域:
82
+ 1. 读取 Skill frontmatter 的 `last_hash` 和 `key_files`
83
+ 2. 计算当前 key_files 的 SHA-1 摘要
84
+ 3. hash 一致 → 跳过,仅更新 `last_referenced`
85
+ 4. hash 不一致 → 调用 `modus-skill-creator` 模式 B 增量更新
106
86
 
107
- 使用 Bash 对 `key_files` 列出的文件内容做 SHA-1 摘要:
87
+ ---
108
88
 
109
- ```bash
110
- shasum -a 1 {file1} {file2} ... | awk '{print $1}' | sort | shasum -a 1 | awk '{print $1}'
111
- ```
89
+ ### Step 4:复杂度评估与规格级别选择
112
90
 
113
- - 若某个文件不存在,视为「已变化」,强制更新
114
- - 若 `key_files` 为空或缺失,视为「已变化」,强制更新
91
+ 评估需求复杂度,推荐规格级别:
115
92
 
116
- #### Step 4c:对比 hash,决定是否跳过
93
+ | 规格级别 | 适用场景 | 产出物 |
94
+ |---------|---------|-------|
95
+ | **Full**(默认)| 接口契约变更、高风险变更 | proposal.md + delta specs + design-brief.md + tasks.md |
96
+ | **Lite**(`--lite`)| 内部逻辑变更、低风险功能 | proposal.md + delta specs(精简版)|
117
97
 
98
+ 复杂度为 Complex 时,建议升级为 `/modus:harness`:
118
99
  ```
119
- 当前 hash == last_hash(且 last_hash 非空)
120
- modus-biz-{domain} Skill 无变化(hash 匹配),跳过前置更新(节省 ~2000 tokens)
121
- 仅更新 last_referenced 日期,继续 Step 5
122
-
123
- 当前 hash != last_hash OR last_hash 为空
124
- → 进入 Step 4d 执行完整更新
100
+ ⚠️ 此需求复杂度较高(跨 3+ / 涉及数据迁移),建议考虑:
101
+ A. 继续使用 /modus:spec(生成完整规格文档)
102
+ B. 升级为 /modus:harness(全自动双 Loop 流程)
125
103
  ```
126
104
 
127
- #### Step 4d:完整前置更新(仅在 hash 不匹配时执行)
128
-
129
- 调用 `modus-skill-creator` 模式 B,执行:
130
-
131
- 1. **Level 2 加载**:读取完整 SKILL.md 文件
132
- 2. 扫描该域相关的最新代码文件(近期变更的文件)
133
- 3. 对比 Skill 内容与代码现实,识别差异
134
- 4. 更新 Skill 文件中过时的信息,更新 `last_referenced`、`usage_count` 和 `last_hash`
135
- 5. 输出更新摘要:`✓ modus-biz-order Skill 已更新(新增: OrderStatus.PENDING_REVIEW | maturity: draft→verified)`
136
-
137
- 若有未初始化的域,调用模式 A 新建 Skill(`last_hash` 留空,`key_files` 由 AI 填写)。
138
-
139
- ### Step 5:生成规范文档
140
-
141
- 基于已澄清的意图,生成文档到 `modus/changes/{name}/`。
142
-
143
- **写入状态文件:**
144
- 创建 `modus/changes/{name}/.modus-state.yaml`:
145
- ```yaml
146
- mode: spec
147
- name: {name}
148
- status: in-progress
149
- lite_mode: false # --lite flag 时为 true,跳过 design-brief
150
- domains: [{domain1}]
151
- delta_stats:
152
- added: 0
153
- modified: 0
154
- removed: 0
155
- tasks_completed: "0/?"
156
- scenarios_covered: "0/?"
157
- verify_status: skipped # skipped | passed | passed_with_warnings
158
- completed: []
159
- pending: [proposal, specs, design, design-brief, tasks] # lite_mode 时 pending 不含 design-brief
160
- created: {ISO8601时间戳}
161
- ```
105
+ ---
162
106
 
163
- **产出物依赖:**
107
+ ### Step 5:读取现有主规格库(冲突检测准备)
164
108
 
165
- ```
166
- proposal.md
167
-
168
- ├──► specs/{domain}/spec.md (delta specs)
169
-
170
- └──► design.md
171
-
172
-
173
- design-brief.md ← 设计方案(代码开发前的精确实现指南)
174
-
175
-
176
- tasks.md
177
- ```
109
+ 读取 `modus/specs/{domain}/spec.md`(若存在),为后续冲突检测做准备:
110
+ - 了解现有 Requirements 的编号体系
111
+ - 识别可能被新需求影响的已有 Scenario
178
112
 
179
- **1. proposal.md** — 意图与范围(同 /plan)
113
+ ---
180
114
 
181
- **2. specs/{domain}/spec.md** Delta 规格(核心差异)
115
+ ### Step 6:精准澄清问(≤ 3 个,需求清晰时可为 0)
182
116
 
183
- 使用 ADDED/MODIFIED/REMOVED 三段式描述行为变更:
117
+ 基于已加载的 Skill 和需求描述,提出真正有歧义的问题:
184
118
 
185
- ```markdown
186
- # Delta: {域名} — {功能名称}
119
+ **必须提问的条件:**
120
+ 1. Skill 中有关联 `[pitfall]`,需确认对策
121
+ 2. 存在接口向后兼容性决策(v1 保留 or 废弃)
122
+ 3. 验收标准缺少明确的边界条件(如批量上限、并发策略)
187
123
 
188
- ## ADDED Requirements(新增行为)
124
+ 等待用户回答后,输出意图确认摘要。
189
125
 
190
- ### Requirement: {需求名称}
191
- 系统 SHALL {可观测的行为描述,不涉及实现细节}。
126
+ ---
192
127
 
193
- #### Scenario: Happy Path — {场景名称}
194
- - GIVEN {前置条件}
195
- - WHEN {触发动作}
196
- - THEN {预期结果}
197
- - AND {附加结果}
128
+ ### Step 7:生成规格文档
198
129
 
199
- #### Scenario: 边界条件 {上限/下限场景}
200
- - GIVEN {处于边界的前置条件}
201
- - WHEN {触发动作}
202
- - THEN {边界行为}
130
+ 确定 change 名称(kebab-case),创建目录 `modus/changes/{name}/`,生成以下文件:
203
131
 
204
- #### Scenario: 异常场景 — {错误处理}
205
- - GIVEN {前置条件}
206
- - WHEN {错误触发}
207
- - THEN 系统 SHALL 返回 {错误码} 和明确的错误提示
132
+ #### 7-1:proposal.md(意图说明)
208
133
 
209
- ## MODIFIED Requirements(修改行为)
134
+ ```markdown
135
+ # Proposal: {功能名称}
210
136
 
211
- ### Requirement: {已有需求名称}
212
- {新的完整描述}
213
- (原描述:{原来的描述})
137
+ ## 业务意图
138
+ {2-3 句话,说明做什么、为什么做}
214
139
 
215
- ## REMOVED Requirements(废弃行为)
140
+ ## 影响范围
141
+ - 域: {domain1}, {domain2}
142
+ - 变更类型: {接口新增 / 逻辑修改 / 数据结构变更}
216
143
 
217
- ### Requirement: {已废弃需求}
218
- (废弃原因:{原因}
144
+ ## 关键约束
145
+ {来自 constitution.hard_rules + 业务 Skill pitfall 的约束}
219
146
  ```
220
147
 
221
- 生成 delta specs 后更新 `.modus-state.yaml` 的 `delta_stats`。
148
+ #### 7-2:specs/{domain}/spec.md(delta specs,核心产出物)
222
149
 
223
- **3. design.md** — 技术方案(同 /plan)
150
+ ```markdown
151
+ # Delta Spec: {功能名称} — {domain}
224
152
 
225
- **4. design-brief.md** — 设计方案(代码开发前的精确实现指南)
153
+ ## ADDED Requirements
226
154
 
227
- **跳过条件:** `--lite` 模式时直接跳过此步骤,在 `.modus-state.yaml` 中标记 `lite_mode: true`。
155
+ ### REQ-{domain}-{N+1}: {需求标题}
156
+ {需求描述}
228
157
 
229
- 调用 `modus-design-brief` Skill,传入:
230
- - `mode: spec`
231
- - `output_path: modus/changes/{name}/design-brief.md`
232
- - `analysis_doc: proposal.md + specs/{domain}/spec.md 内容`
233
- - `business_skills: 已加载的 Skill 内容`
234
- - `constitution: constitution 字段`
158
+ #### Scenario: {场景名}
159
+ - GIVEN {前置条件}
160
+ - WHEN {操作,含具体输入}
161
+ - THEN {预期结果,含具体输出字段和值}
235
162
 
236
- 重点:spec 模式的 design-brief 需在节 6(边界条件)中覆盖所有 delta spec 里的 Scenario 失败路径,节 9(追踪矩阵)中每个 ADDED/MODIFIED Requirement 都必须出现。
163
+ #### Scenario: {失败场景名}
164
+ - GIVEN {前置条件}
165
+ - WHEN {无效输入}
166
+ - THEN {错误码 + 错误消息}
237
167
 
238
- 生成后更新 `.modus-state.yaml`,追加 `design-brief` 到 `completed`。
168
+ ## MODIFIED Requirements
239
169
 
240
- **5. tasks.md** — 实现清单(含场景驱动的规格验证章节)
170
+ ### REQ-{domain}-{已有编号}: {需求标题}(修改)
171
+ {修改前后对比}
241
172
 
242
- tasks.md 末尾加入**场景驱动的验证章节**——每个 TODO 项直接追踪到 delta spec 中对应的 Scenario:
173
+ ## REMOVED Requirements
243
174
 
244
- ```markdown
245
- ## N. 规格验证(场景驱动)
246
- # 每一项对应 delta spec 中的一个 Scenario,确保代码与规格一致
247
-
248
- - [ ] N.1 [Happy Path] {Scenario名称} 有对应单元测试(GIVEN: X, WHEN: Y, THEN: Z)
249
- - [ ] N.2 [边界条件] {上限=50} 的边界场景有单元测试,超出时返回 {错误码}
250
- - [ ] N.3 [异常场景] {失败回滚} 场景有集成测试,验证事务完整性
251
- - [ ] N.4 [接口一致性] {POST /api/v1/{domain}/xxx} 接口行为与 Scenario 一致(通过 API 测试验证)
252
- - [ ] N.5 [宪法约束] {constitution.hard_rules 中与本次相关的规则} 在代码中得到体现
175
+ ### REQ-{domain}-{已有编号}: {废弃理由}
253
176
  ```
254
177
 
255
- 生成每份文档后更新 `.modus-state.yaml` 的 `completed` 列表和 `scenarios_covered`。
256
-
257
- ### Step 6:可选实现验证(verify)
258
-
259
- 文档生成后,询问用户是否执行实现验证(适用于代码已开发完成、准备归档前的场景):
178
+ **每个 Scenario 必须包含:**
179
+ - 具体输入值(不能只说"合法数据")
180
+ - 具体预期输出(状态码、关键响应字段)
181
+ - 关键的前置条件(数据库状态、权限)
260
182
 
183
+ **冲突检测:**
184
+ 若新 delta spec 中的 MODIFIED/REMOVED 涉及主规格库中的已有 Requirement:
261
185
  ```
262
- 规范文档已生成。是否对当前代码实现执行验证?
263
-
264
- Y 执行验证(推荐:确保代码与规格一致)
265
- N — 跳过验证,直接进入归档(文档阶段可跳过)
186
+ ⚠️ 检测到规格冲突:
187
+ - REQ-order-042 (已有) 与 本次 MODIFIED 冲突
188
+ - 建议:将已有 REQ-order-042 标记为 deprecated,并在本次 spec 中说明替代关系
266
189
  ```
267
190
 
268
- 若用户选择执行验证,从三个维度检查:
191
+ #### 7-3:design-brief.md(技术方案,Full 级别)
269
192
 
270
- #### 维度一:完整性(Completeness)
193
+ 调用 `modus-design-brief` Skill(mode: spec,落盘输出到 design-brief.md)。
271
194
 
272
- 检查内容:
273
- - `tasks.md` 中的规格验证章节每一项是否已有对应测试或代码
274
- - delta spec 中每个 ADDED/MODIFIED Requirement 是否有对应实现
275
- - 每个 Scenario 是否有对应的测试用例(单元测试或接口测试)
195
+ #### 7-4:tasks.md(任务清单,Full 级别)
276
196
 
277
- ```bash
278
- # 扫描近期修改的测试文件
279
- git diff --name-only HEAD~3 | grep -E 'Test\.java|Spec\.java|test.*\.py'
280
- ```
281
-
282
- 输出格式:
283
- ```
284
- 完整性检查:
285
- ✓ 12/12 tasks.md 任务已完成
286
- ✓ 3/3 ADDED Requirements 有对应代码
287
- ⚠ Scenario "边界条件 — 批量上限 50 条" 未找到对应测试
288
- ```
289
-
290
- #### 维度二:正确性(Correctness)
291
-
292
- 检查内容:
293
- - 代码中的主要逻辑是否与 Scenario 的 THEN 断言一致
294
- - 错误处理是否覆盖 Scenario 中的异常路径
295
- - constitution 的 `hard_rules` 是否在代码中得到体现
197
+ ```markdown
198
+ # Tasks: {功能名称}
296
199
 
297
- #### 维度三:一致性(Coherence)
200
+ ## 实现任务
298
201
 
299
- 检查内容:
300
- - design.md 中的架构决策是否反映在代码结构中
301
- - 命名约定是否与 design.md 一致
302
- - 若有 design-brief.md,其追踪矩阵中每个 Requirement 是否均已实现
202
+ - [ ] Sprint 1:{数据层任务}
203
+ - [ ] Sprint 2:{服务层任务}
204
+ - [ ] Sprint 3:{接口层任务}
303
205
 
304
- **验证输出摘要:**
206
+ ## 规格验证任务(必须,用于确认 Scenario 实现正确)
305
207
 
208
+ - [ ] 验证 Scenario: {场景名}(测试命令: `{测试命令}`)
209
+ - [ ] 验证 Scenario: {错误场景名}(预期: HTTP 400 + {错误码})
306
210
  ```
307
- 📋 实现验证结果 — {name}
308
- ─────────────────────────────────────────
309
- 完整性 ✓ 12/12 任务已完成 | 3/3 需求有实现 | ⚠ 1 个 Scenario 缺测试
310
- 正确性 ✓ 主要逻辑与规格一致 | ✓ 错误处理完整
311
- 一致性 ✓ 架构决策已反映 | ⚠ design.md 提到事件驱动但代码使用同步调用
312
-
313
- 严重问题: 0 | 警告: 2
314
- 建议:
315
- 1. 为 "边界条件 — 批量上限 50 条" 添加单元测试
316
- 2. 更新 design.md 说明改为同步调用的原因,或重构为事件驱动
317
-
318
- 可以归档(有警告)[Y/n]
319
- ```
320
-
321
- 验证不阻断归档,但警告需用户显式确认后方可继续。
322
211
 
323
- ### Step 7:规格冲突检测 + 询问归档 ⏸️ 【人工审批节点】
324
-
325
- **归档前冲突检测(自动执行):**
326
-
327
- 在执行归档前,检查主规格库中是否存在冲突条目:
212
+ ---
328
213
 
329
- ```bash
330
- # 检查主规格库是否存在同名 Requirement
331
- grep -l "### Requirement:" modus/specs/{domain}/spec.md 2>/dev/null
332
- ```
214
+ ### Step 8:归档确认 ⏸️ 【人工审批节点】
333
215
 
334
- 对 delta spec 中每个 MODIFIED/REMOVED Requirement,在主规格库 `modus/specs/{domain}/spec.md` 中查找同名条目:
216
+ 文档生成后,展示结果并等待用户决定:
335
217
 
336
218
  ```
337
- 冲突检测结果:
338
- 主规格库存在 "单个审批接口" MODIFIED 操作可正常执行
339
- ✓ 主规格库存在 "Remember Me" → REMOVED 操作可正常执行
340
- ⚠ 主规格库不存在 "批量审批订单" 的 MODIFIED 目标 → 建议改为 ADDED
341
- (若此需求是全新的,请将 delta spec 中 MODIFIED 改为 ADDED)
342
- ```
219
+ ✅ 规格文档已就绪:modus/changes/{name}/
220
+ proposal.md | specs/{domain}/spec.md | design-brief.md | tasks.md
343
221
 
344
- 若检测到冲突,询问用户如何处理(修改 delta spec 或强制执行)。
222
+ 你可以:
223
+ [修改] 提出修改意见,更新规格文档
224
+ [归档] 将 delta specs 合并到主规格库 modus/specs/
225
+ [跳过归档] 仅保留 changes/ 下的文档,不合并主规格库
345
226
 
227
+ 等待你的指令。
346
228
  ```
347
- 规范文档已生成:
348
- modus/changes/{name}/proposal.md
349
- modus/changes/{name}/specs/{domain}/spec.md ← delta specs(ADDED:{A} MODIFIED:{M} REMOVED:{R},共{N}个场景)
350
- modus/changes/{name}/design.md
351
- modus/changes/{name}/design-brief.md ← 设计方案({N}节 | 追踪矩阵 {N}行)[lite 模式时不生成]
352
- modus/changes/{name}/tasks.md
353
- modus/changes/{name}/.modus-state.yaml
354
-
355
- 实现验证: {passed_with_warnings / passed / skipped} [Step 6 结果]
356
- 冲突检测: {通过 / N 项需确认}
357
-
358
- 是否归档?归档后:
359
- 1. delta specs 将合并到 modus/specs/{domain}/spec.md(主规格库)
360
- 2. 变更文件夹移动到 modus/changes/archive/{YYYY-MM-DD}-{name}/
361
- ```
362
-
363
- ⏸️ **等待人工确认**(支持异步:可以在任意时间回复)
364
-
365
- **归档时的 delta 合并规则:**
366
- - `## ADDED Requirements` → 追加到主 spec 对应章节末尾
367
- - `## MODIFIED Requirements` → 替换主 spec 中对应的 Requirement
368
- - `## REMOVED Requirements` → 从主 spec 中删除对应 Requirement
369
229
 
370
- 如果主 spec 不存在,创建新文件并填入所有 ADDED 内容。
230
+ **归档执行(用户选择归档时):**
231
+ 1. 将 `specs/{domain}/spec.md` 中的 ADDED 追加到 `modus/specs/{domain}/spec.md`
232
+ 2. MODIFIED 更新对应的已有 Requirement(追加修订记录,不删除原内容)
233
+ 3. REMOVED 在主规格库对应条目追加 `~~deprecated: {YYYY-MM-DD}~~` 标记
234
+ 4. 将变更目录移动到 `modus/changes/archive/{YYYY-MM-DD}-{name}/`
235
+ 5. 输出归档摘要:
236
+ ```
237
+ 📚 归档完成:
238
+ 新增 {N} 条 Requirement
239
+ 修改 {N} 条 Requirement
240
+ 废弃 {N} 条 Requirement
241
+ 主规格库已更新: modus/specs/{domain}/spec.md
242
+ ```
371
243
 
372
- 归档完成后更新 `.modus-state.yaml`:`status: archived`。
373
-
374
- ### Step 8:后置 Skill 更新(知识提取与回写)
244
+ ---
375
245
 
376
- 归档完成后,调用 `modus-skill-creator` 模式 C,从 delta specs 中系统性提取知识:
246
+ ### Step 9:后置 Skill 知识写回(归档后执行)
377
247
 
378
- 1. `## ADDED Requirements` 中的新业务流程 `[process]` 追加到业务 Skill
379
- 2. 新增实体/字段/枚举 → `[model]` 追加到业务 Skill
380
- 3. 新约束规则(SHALL/SHALL NOT 描述) → `[guideline]` 追加到业务 Skill
381
- 4. Scenario 中暴露的边界条件/失败模式 → `[pitfall]` 追加到业务 Skill
382
- 5. 更新 `modus/knowledge-catalog.md` 的 `last_referenced`
248
+ 从 proposal.md + design-brief.md 中提取可沉淀的知识,**请求用户确认后**写回 Skill(调用 `modus-skill-creator` 模式 C):
383
249
 
384
- 输出知识提取摘要:
385
250
  ```
386
- 📚 知识已提取并回写到 Skill
387
- - [process] order 域:新增批量审批流程(提交→校验→执行→通知)
388
- - [guideline] order 域:批量操作上限 50 条(来自 Scenario: 边界条件)
389
- - [pitfall] order 域:全批失败回滚逻辑需配合 @Transactional + 分布式锁
390
- - knowledge-catalog.md 已更新(order 域 maturity: draft→verified)
251
+ 📚 发现 {N} 条可沉淀到 Skill 的新知识,是否写入?[Y/n]
252
+ · [decision] tech-wiki:{技术决策摘要}
253
+ · [process] order 域:{新增业务流程}
254
+ · [guideline] order 域:{接口规范约束}
391
255
  ```
392
256
 
393
- ### Step 9:多平台 Skill 同步(后置)
394
-
395
- 知识提取与回写完成后,对本次涉及的业务域执行多平台同步。
396
-
397
- **逻辑:**
398
-
399
- 1. 读取 `modus/config.yaml` 的 `platforms` 字段
400
- 2. 对 Step 4 前置更新 / 新建的每个业务域,按以下规则同步:
401
- - **Claude** → 写入 `.claude/agents/modus-biz-{domain}.md`(覆盖旧版本)
402
- - **Cursor** → 写入 `.cursor/rules/modus-biz-{domain}.mdc`(带 frontmatter,覆盖旧版本)
403
- - **Copilot** → 在 `.github/copilot-instructions.md` 中替换对应域的标记段落
404
- 3. 若 `platforms` 只含 `codebuddy`(或字段不存在),跳过
257
+ ---
405
258
 
406
- **输出示例:**
259
+ ### Step 10:多平台 Skill 同步(后置)
407
260
 
408
- ```
409
- 📡 多平台 Skill 同步:
410
- ✓ Claude .claude/agents/modus-biz-order.md(已更新)
411
- ✓ Cursor .cursor/rules/modus-biz-order.mdc(已更新)
412
- ✓ Copilot .github/copilot-instructions.md(order 域段落已更新)
413
- ```
261
+ 与 `modus-plan` Step 10 相同逻辑,对本次更新/新建的业务 Skill 执行多平台同步(根据 `modus/config.yaml` 的 `platforms` 字段)。
414
262
 
415
263
  ---
416
264
 
417
- ## 主规格库结构
265
+ ## 产出物目录结构
418
266
 
419
267
  ```
420
268
  modus/
421
- ├── specs/ ← 当前系统行为的真相来源
422
- │ ├── order/spec.md
423
- └── payment/spec.md
424
- ├── changes/ 进行中的变更
425
- └── add-batch-approve/
426
- ├── .modus-state.yaml 状态文件(断点续跑)
427
- ├── proposal.md
428
- ├── specs/order/spec.md delta specs
429
- ├── design.md
430
- │ ├── design-brief.md ← 设计方案(代码开发前的实现指南)
431
- └── tasks.md
432
- └── changes/archive/
433
- └── 2026-04-20-add-batch-approve/
434
- ├── .modus-state.yaml ← status: archived
435
- └── ...
269
+ ├── changes/
270
+ │ ├── {name}/ ← 活跃变更(未归档)
271
+ │ ├── proposal.md
272
+ │ │ ├── specs/{domain}/spec.md delta specs(核心)
273
+ │ ├── design-brief.md ← 技术方案(Full 级别,由 modus-design-brief 生成)
274
+ │ └── tasks.md 任务清单(Full 级别)
275
+ └── archive/
276
+ └── {YYYY-MM-DD}-{name}/ 已归档变更
277
+
278
+ └── specs/
279
+ └── {domain}/
280
+ └── spec.md ← 主规格库(唯一权威来源)
436
281
  ```
437
282
 
438
283
  ---
439
284
 
440
- ## Spec 质量原则
285
+ ## 规格质量标准
441
286
 
442
- - Spec 描述「什么」,design 描述「怎么做」
443
- - 每个 Scenario 必须可测试(可直接写成自动化测试)
444
- - 使用 SHALL(必须)、SHOULD(应该)、MAY(可以)
445
- - 避免在 spec 中出现类名、方法名、框架名
446
- - tasks.md 的规格验证章节**必须与 Scenario 一一对应**,不得遗漏
447
- - constitution 的 hard_rules 必须在 Scenario 中得到体现
287
+ - 每个 Scenario 必须有具体输入值,不能写「合法数据」
288
+ - GIVEN/WHEN/THEN 三步缺一不可
289
+ - 错误场景必须覆盖:必填为空、格式错误、权限不足、资源不存在
290
+ - delta specs 中的 REQ 编号必须与主规格库保持连续不重复
291
+ - **归档操作不可逆**,执行前必须等待用户明确确认