@modus-ai/modus 0.2.3 → 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.
- package/README.md +45 -4
- package/dist/cli/index.js +2 -2
- package/dist/cli/index.js.map +1 -1
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +9 -8
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/global.js +1 -1
- package/dist/commands/global.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +0 -1
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/status.js +2 -2
- package/dist/generators/claude.d.ts.map +1 -1
- package/dist/generators/claude.js +0 -36
- package/dist/generators/claude.js.map +1 -1
- package/dist/generators/copilot.d.ts.map +1 -1
- package/dist/generators/copilot.js +0 -1
- package/dist/generators/copilot.js.map +1 -1
- package/dist/utils/config.d.ts +32 -0
- package/dist/utils/config.d.ts.map +1 -1
- package/dist/utils/config.js +10 -2
- package/dist/utils/config.js.map +1 -1
- package/dist/utils/file-system.d.ts.map +1 -1
- package/dist/utils/file-system.js +2 -1
- package/dist/utils/file-system.js.map +1 -1
- package/package.json +1 -1
- package/schemas/knowledge-schema.yaml +123 -1
- package/templates/behavior-guard.md +165 -0
- package/templates/commands/auto.md +3 -1
- package/templates/commands/commit.md +63 -0
- package/templates/commands/harness.md +15 -8
- package/templates/commands/vibe.md +1 -1
- package/templates/knowledge-catalog.md +66 -10
- package/templates/skills/modus-agents/analyst/SKILL.md +16 -0
- package/templates/skills/modus-agents/deployer/SKILL.md +114 -62
- package/templates/skills/modus-agents/designer/SKILL.md +104 -92
- package/templates/skills/modus-agents/developer/SKILL.md +106 -67
- package/templates/skills/modus-agents/perf-auditor/SKILL.md +98 -61
- package/templates/skills/modus-agents/reviewer/SKILL.md +25 -2
- package/templates/skills/modus-agents/security-auditor/SKILL.md +111 -67
- package/templates/skills/modus-agents/skill-creator/SKILL.md +37 -19
- package/templates/skills/modus-agents/tester/SKILL.md +100 -54
- package/templates/skills/modus-auto/SKILL.md +16 -1
- package/templates/skills/modus-design-brief/SKILL.md +31 -13
- package/templates/skills/modus-harness/SKILL.md +78 -12
- package/templates/skills/modus-init/SKILL.md +801 -161
- package/templates/skills/modus-plan/SKILL.md +109 -43
- package/templates/skills/modus-spec/SKILL.md +175 -331
- 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
|
|
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
|
|
23
|
+
# modus-spec(规范驱动开发)
|
|
9
24
|
|
|
10
25
|
**触发条件:** 用户运行 `/modus:spec [需求描述]` 时使用此 Skill。
|
|
11
26
|
|
|
12
|
-
|
|
27
|
+
---
|
|
13
28
|
|
|
14
29
|
## 职责
|
|
15
30
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
### 规格级别
|
|
31
|
+
规范驱动开发的执行引擎。在需求实现前,先生成结构化的行为规格文档(delta specs),包含可直接转化为测试用例的 GIVEN/WHEN/THEN 场景。规格稳定后归档合并到主规格库(`modus/specs/`),作为后续 vibe/harness 的知识来源。
|
|
19
32
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
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`
|
|
45
|
+
读取 `modus/config.yaml` 的 `constitution` 字段,将 `hard_rules` 作为最高优先级约束贯穿整个规范流程。
|
|
33
46
|
|
|
34
47
|
**断点续跑检查:**
|
|
35
|
-
扫描 `modus/changes/`
|
|
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
|
-
|
|
52
|
-
✓ payment(支付域) [proven] → 将在前置步骤中更新
|
|
53
|
-
? export(导出域) [未初始化] → 将在前置步骤中新建
|
|
50
|
+
检测到未完成的变更:{name}
|
|
51
|
+
已完成:{completed 列表}
|
|
52
|
+
待完成:{pending 列表}
|
|
54
53
|
|
|
55
|
-
|
|
54
|
+
是否继续上次的规范,还是重新开始?
|
|
56
55
|
```
|
|
57
56
|
|
|
58
|
-
|
|
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
|
-
|
|
71
|
-
还是新增一个独立的需求?(影响 delta spec 使用 MODIFIED 还是 ADDED)
|
|
61
|
+
读取 `modus/knowledge-catalog.md`,了解当前可用 Skill 及其状态。
|
|
72
62
|
|
|
73
|
-
|
|
74
|
-
还是保留并共存?
|
|
63
|
+
若不存在,输出降级提示并继续(使用平台规则文件扫描替代)。
|
|
75
64
|
|
|
76
|
-
|
|
65
|
+
---
|
|
77
66
|
|
|
78
|
-
|
|
79
|
-
```
|
|
67
|
+
### Step 2:域匹配与确认
|
|
80
68
|
|
|
81
|
-
|
|
69
|
+
基于 catalog 和用户 prompt,判断涉及的业务域,展示确认:
|
|
82
70
|
|
|
83
71
|
```
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
- 废弃内容: {若有}
|
|
88
|
-
- 项目约束: {来自 constitution 的关键规则}
|
|
89
|
-
|
|
90
|
-
开始前置更新 Skill,然后生成规范文档。
|
|
72
|
+
根据你的需求,以下域相关:
|
|
73
|
+
✓ order(订单域) [verified] → 将前置更新后使用
|
|
74
|
+
? payment(支付域) [proven] → 请确认是否涉及
|
|
91
75
|
```
|
|
92
76
|
|
|
93
|
-
|
|
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
|
-
|
|
79
|
+
### Step 3:Skill 前置更新(hash 检查,仅 hash 不一致时全量更新)
|
|
104
80
|
|
|
105
|
-
|
|
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
|
-
|
|
87
|
+
---
|
|
108
88
|
|
|
109
|
-
|
|
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
|
-
|
|
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
|
-
|
|
120
|
-
|
|
121
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
113
|
+
---
|
|
180
114
|
|
|
181
|
-
|
|
115
|
+
### Step 6:精准澄清问(≤ 3 个,需求清晰时可为 0)
|
|
182
116
|
|
|
183
|
-
|
|
117
|
+
基于已加载的 Skill 和需求描述,提出真正有歧义的问题:
|
|
184
118
|
|
|
185
|
-
|
|
186
|
-
|
|
119
|
+
**必须提问的条件:**
|
|
120
|
+
1. Skill 中有关联 `[pitfall]`,需确认对策
|
|
121
|
+
2. 存在接口向后兼容性决策(v1 保留 or 废弃)
|
|
122
|
+
3. 验收标准缺少明确的边界条件(如批量上限、并发策略)
|
|
187
123
|
|
|
188
|
-
|
|
124
|
+
等待用户回答后,输出意图确认摘要。
|
|
189
125
|
|
|
190
|
-
|
|
191
|
-
系统 SHALL {可观测的行为描述,不涉及实现细节}。
|
|
126
|
+
---
|
|
192
127
|
|
|
193
|
-
|
|
194
|
-
- GIVEN {前置条件}
|
|
195
|
-
- WHEN {触发动作}
|
|
196
|
-
- THEN {预期结果}
|
|
197
|
-
- AND {附加结果}
|
|
128
|
+
### Step 7:生成规格文档
|
|
198
129
|
|
|
199
|
-
|
|
200
|
-
- GIVEN {处于边界的前置条件}
|
|
201
|
-
- WHEN {触发动作}
|
|
202
|
-
- THEN {边界行为}
|
|
130
|
+
确定 change 名称(kebab-case),创建目录 `modus/changes/{name}/`,生成以下文件:
|
|
203
131
|
|
|
204
|
-
####
|
|
205
|
-
- GIVEN {前置条件}
|
|
206
|
-
- WHEN {错误触发}
|
|
207
|
-
- THEN 系统 SHALL 返回 {错误码} 和明确的错误提示
|
|
132
|
+
#### 7-1:proposal.md(意图说明)
|
|
208
133
|
|
|
209
|
-
|
|
134
|
+
```markdown
|
|
135
|
+
# Proposal: {功能名称}
|
|
210
136
|
|
|
211
|
-
|
|
212
|
-
{
|
|
213
|
-
(原描述:{原来的描述})
|
|
137
|
+
## 业务意图
|
|
138
|
+
{2-3 句话,说明做什么、为什么做}
|
|
214
139
|
|
|
215
|
-
##
|
|
140
|
+
## 影响范围
|
|
141
|
+
- 域: {domain1}, {domain2}
|
|
142
|
+
- 变更类型: {接口新增 / 逻辑修改 / 数据结构变更}
|
|
216
143
|
|
|
217
|
-
|
|
218
|
-
|
|
144
|
+
## 关键约束
|
|
145
|
+
{来自 constitution.hard_rules + 业务 Skill pitfall 的约束}
|
|
219
146
|
```
|
|
220
147
|
|
|
221
|
-
|
|
148
|
+
#### 7-2:specs/{domain}/spec.md(delta specs,核心产出物)
|
|
222
149
|
|
|
223
|
-
|
|
150
|
+
```markdown
|
|
151
|
+
# Delta Spec: {功能名称} — {domain}
|
|
224
152
|
|
|
225
|
-
|
|
153
|
+
## ADDED Requirements
|
|
226
154
|
|
|
227
|
-
|
|
155
|
+
### REQ-{domain}-{N+1}: {需求标题}
|
|
156
|
+
{需求描述}
|
|
228
157
|
|
|
229
|
-
|
|
230
|
-
-
|
|
231
|
-
-
|
|
232
|
-
-
|
|
233
|
-
- `business_skills: 已加载的 Skill 内容`
|
|
234
|
-
- `constitution: constitution 字段`
|
|
158
|
+
#### Scenario: {场景名}
|
|
159
|
+
- GIVEN {前置条件}
|
|
160
|
+
- WHEN {操作,含具体输入}
|
|
161
|
+
- THEN {预期结果,含具体输出字段和值}
|
|
235
162
|
|
|
236
|
-
|
|
163
|
+
#### Scenario: {失败场景名}
|
|
164
|
+
- GIVEN {前置条件}
|
|
165
|
+
- WHEN {无效输入}
|
|
166
|
+
- THEN {错误码 + 错误消息}
|
|
237
167
|
|
|
238
|
-
|
|
168
|
+
## MODIFIED Requirements
|
|
239
169
|
|
|
240
|
-
|
|
170
|
+
### REQ-{domain}-{已有编号}: {需求标题}(修改)
|
|
171
|
+
{修改前后对比}
|
|
241
172
|
|
|
242
|
-
|
|
173
|
+
## REMOVED Requirements
|
|
243
174
|
|
|
244
|
-
|
|
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
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
文档生成后,询问用户是否执行实现验证(适用于代码已开发完成、准备归档前的场景):
|
|
178
|
+
**每个 Scenario 必须包含:**
|
|
179
|
+
- 具体输入值(不能只说"合法数据")
|
|
180
|
+
- 具体预期输出(状态码、关键响应字段)
|
|
181
|
+
- 关键的前置条件(数据库状态、权限)
|
|
260
182
|
|
|
183
|
+
**冲突检测:**
|
|
184
|
+
若新 delta spec 中的 MODIFIED/REMOVED 涉及主规格库中的已有 Requirement:
|
|
261
185
|
```
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
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
|
-
|
|
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
|
-
```
|
|
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
|
-
|
|
200
|
+
## 实现任务
|
|
298
201
|
|
|
299
|
-
|
|
300
|
-
-
|
|
301
|
-
-
|
|
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
|
-
|
|
324
|
-
|
|
325
|
-
**归档前冲突检测(自动执行):**
|
|
326
|
-
|
|
327
|
-
在执行归档前,检查主规格库中是否存在冲突条目:
|
|
212
|
+
---
|
|
328
213
|
|
|
329
|
-
|
|
330
|
-
# 检查主规格库是否存在同名 Requirement
|
|
331
|
-
grep -l "### Requirement:" modus/specs/{domain}/spec.md 2>/dev/null
|
|
332
|
-
```
|
|
214
|
+
### Step 8:归档确认 ⏸️ 【人工审批节点】
|
|
333
215
|
|
|
334
|
-
|
|
216
|
+
文档生成后,展示结果并等待用户决定:
|
|
335
217
|
|
|
336
218
|
```
|
|
337
|
-
|
|
338
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
373
|
-
|
|
374
|
-
### Step 8:后置 Skill 更新(知识提取与回写)
|
|
244
|
+
---
|
|
375
245
|
|
|
376
|
-
|
|
246
|
+
### Step 9:后置 Skill 知识写回(归档后执行)
|
|
377
247
|
|
|
378
|
-
|
|
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
|
-
📚
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
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
|
-
|
|
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
|
-
├──
|
|
422
|
-
│ ├──
|
|
423
|
-
│
|
|
424
|
-
├──
|
|
425
|
-
│
|
|
426
|
-
│
|
|
427
|
-
│
|
|
428
|
-
│
|
|
429
|
-
│
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
└──
|
|
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
|
-
##
|
|
285
|
+
## 规格质量标准
|
|
441
286
|
|
|
442
|
-
-
|
|
443
|
-
-
|
|
444
|
-
-
|
|
445
|
-
-
|
|
446
|
-
-
|
|
447
|
-
- constitution 的 hard_rules 必须在 Scenario 中得到体现
|
|
287
|
+
- 每个 Scenario 必须有具体输入值,不能写「合法数据」
|
|
288
|
+
- GIVEN/WHEN/THEN 三步缺一不可
|
|
289
|
+
- 错误场景必须覆盖:必填为空、格式错误、权限不足、资源不存在
|
|
290
|
+
- delta specs 中的 REQ 编号必须与主规格库保持连续不重复
|
|
291
|
+
- **归档操作不可逆**,执行前必须等待用户明确确认
|