@modus-ai/modus 0.1.4 → 0.1.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 +76 -28
- package/dist/cli/index.js +188 -12
- package/dist/cli/index.js.map +1 -1
- package/dist/commands/doctor.d.ts +2 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +180 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/init.d.ts +12 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +260 -6
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/skill.d.ts +7 -0
- package/dist/commands/skill.d.ts.map +1 -0
- package/dist/commands/skill.js +175 -0
- package/dist/commands/skill.js.map +1 -0
- package/dist/commands/status.d.ts +2 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +133 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/generators/codebuddy.d.ts +7 -0
- package/dist/generators/codebuddy.d.ts.map +1 -1
- package/dist/generators/codebuddy.js +35 -3
- package/dist/generators/codebuddy.js.map +1 -1
- package/dist/utils/analytics.d.ts +14 -0
- package/dist/utils/analytics.d.ts.map +1 -0
- package/dist/utils/analytics.js +81 -0
- package/dist/utils/analytics.js.map +1 -0
- package/dist/utils/config.d.ts +10 -0
- package/dist/utils/config.d.ts.map +1 -1
- package/dist/utils/config.js.map +1 -1
- package/package.json +1 -1
- package/templates/commands/auto.md +38 -0
- package/templates/commands/modus.md +14 -2
- package/templates/hooks/session-start.py +52 -0
- package/templates/hooks/stop-update-skills.py +58 -0
- package/templates/skills/modus-auto/SKILL.md +210 -0
- package/templates/skills/modus-init/SKILL.md +133 -11
- package/templates/skills/modus-plan/SKILL.md +132 -19
- package/templates/skills/modus-spec/SKILL.md +109 -6
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: modus-plan
|
|
3
|
-
description: Use this skill when executing /modus:plan command to generate structured planning documents (proposal, design, tasks) backed by up-to-date business Skills. Trigger on /modus:plan command or when user wants to plan a feature with full business context. Supports --quick flag to skip design.md.
|
|
3
|
+
description: Use this skill when executing /modus:plan command to generate structured planning documents (proposal, design, tasks) backed by up-to-date business Skills. Trigger on /modus:plan command or when user wants to plan a feature with full business context. Supports --quick flag to skip design.md. Auto-routes to simple/medium/complex depth based on complexity assessment.
|
|
4
4
|
allowed-tools: Read, Write, Glob, Bash
|
|
5
5
|
disable: false
|
|
6
6
|
---
|
|
@@ -9,11 +9,19 @@ disable: false
|
|
|
9
9
|
|
|
10
10
|
**触发条件:** 用户运行 `/modus:plan [需求描述]` 时使用此 Skill。
|
|
11
11
|
|
|
12
|
-
支持快速模式:`/modus:plan --quick [描述]` 跳过 design.md,仅生成 proposal + tasks。
|
|
12
|
+
支持快速模式:`/modus:plan --quick [描述]` 跳过 design.md 和 design-brief.md,仅生成 proposal + tasks。
|
|
13
13
|
|
|
14
14
|
## 职责
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
功能规划入口。通过**三级渐进加载**获取业务上下文(前置更新),先评估需求复杂度自动分级(simple/medium/complex),再基于最新知识生成结构化的 proposal/design/tasks 文档(proposal 自动融入 Skill pitfall 生成已知风险章节),归档后将本次规划中的新知识回写到 Skill(后置更新),并将状态写入 `.modus-state.yaml` 支持断点续跑。
|
|
17
|
+
|
|
18
|
+
### 复杂度分级与产出物对应
|
|
19
|
+
|
|
20
|
+
| 级别 | 判定标准 | 产出物 | 自动建议 |
|
|
21
|
+
|------|----------|--------|---------|
|
|
22
|
+
| Simple | 单域、≤3 文件变更、无架构变化、bug fix 类 | proposal + tasks | 自动建议 `--quick` |
|
|
23
|
+
| Medium | 1-2 个域、有新接口但无架构变化、≤5 文件 | proposal + design + tasks | 完整模式 |
|
|
24
|
+
| Complex | 跨 3+ 域 / 新增数据表 / 引入新中间件 / 重构 | proposal + design + design-brief + tasks | 完整模式(提示考虑 /spec) |
|
|
17
25
|
|
|
18
26
|
---
|
|
19
27
|
|
|
@@ -57,6 +65,60 @@ disable: false
|
|
|
57
65
|
确认?
|
|
58
66
|
```
|
|
59
67
|
|
|
68
|
+
### Step 2.5:复杂度评估与自动分级
|
|
69
|
+
|
|
70
|
+
域确认后,在澄清之前,快速评估需求复杂度并输出分级建议:
|
|
71
|
+
|
|
72
|
+
**评估维度:**
|
|
73
|
+
|
|
74
|
+
| 维度 | 简单 (1) | 中等 (2) | 复杂 (3) |
|
|
75
|
+
|------|----------|----------|----------|
|
|
76
|
+
| 涉及域数量 | 1 个 | 1-2 个 | 3+ 个 |
|
|
77
|
+
| 预估文件变更 | 1-3 个 | 3-8 个 | 8+ 个 |
|
|
78
|
+
| 是否新增数据表 | 否 | 否 | 是 |
|
|
79
|
+
| 是否引入新中间件 | 否 | 否 | 是 |
|
|
80
|
+
| 是否有接口契约变更 | 否 | 新增接口 | 修改/废弃接口 |
|
|
81
|
+
| 是否涉及重构 | 否 | 局部 | 大范围 |
|
|
82
|
+
|
|
83
|
+
**评分规则:** 各维度得分相加,总分 ≤ 7 为 simple,8-12 为 medium,≥ 13 为 complex。
|
|
84
|
+
|
|
85
|
+
**输出分级建议:**
|
|
86
|
+
|
|
87
|
+
```
|
|
88
|
+
📊 需求复杂度评估
|
|
89
|
+
|
|
90
|
+
级别: {Simple / Medium / Complex}
|
|
91
|
+
得分: {N}/18
|
|
92
|
+
理由:
|
|
93
|
+
✓ 涉及 1 个域(order)
|
|
94
|
+
✓ 预估 3-5 个文件变更
|
|
95
|
+
✓ 无新数据表,无新中间件
|
|
96
|
+
⚠ 有接口契约变更(影响复杂度)
|
|
97
|
+
|
|
98
|
+
建议文档深度:
|
|
99
|
+
{Simple → 建议使用 --quick 模式(proposal + tasks)}
|
|
100
|
+
{Medium → 完整模式(proposal + design + tasks)}
|
|
101
|
+
{Complex → 完整模式 + design-brief,或考虑升级为 /modus:spec}
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
**复杂度为 Complex 时的特别提示:**
|
|
105
|
+
|
|
106
|
+
```
|
|
107
|
+
⚠️ 此需求复杂度较高,建议考虑以下方案:
|
|
108
|
+
A. 继续使用 /modus:plan(完整模式,含 design-brief)
|
|
109
|
+
B. 升级为 /modus:spec(可获得 delta specs 和 GIVEN/WHEN/THEN 验收标准)
|
|
110
|
+
C. 拆分需求后分别 /modus:plan
|
|
111
|
+
|
|
112
|
+
请选择处理方式 [A/b/c]:
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
若用户选择 B,退出当前 plan 流程,以相同 prompt 启动 `/modus:spec`。
|
|
116
|
+
|
|
117
|
+
**快速模式自动建议:** 若判定为 Simple 且用户未传 `--quick`,询问:
|
|
118
|
+
```
|
|
119
|
+
需求较简单,是否使用快速模式(跳过 design.md,仅生成 proposal + tasks)?[y/N]
|
|
120
|
+
```
|
|
121
|
+
|
|
60
122
|
### Step 3:澄清用户意图(AskUserQuestion)
|
|
61
123
|
|
|
62
124
|
确认域后,在正式启动规划前,提出 1-3 个关键澄清问题:
|
|
@@ -133,7 +195,20 @@ shasum -a 1 {file1} {file2} ... | awk '{print $1}' | sort | shasum -a 1 | awk '{
|
|
|
133
195
|
2. 扫描该域相关的最新代码文件(近期变更的文件)
|
|
134
196
|
3. 对比 Skill 内容与代码现实,识别差异
|
|
135
197
|
4. 更新 Skill 文件中过时的信息,更新 `last_referenced`、`usage_count` 和 `last_hash`
|
|
136
|
-
|
|
198
|
+
|
|
199
|
+
**输出变更摘要 block(透明度关键):**
|
|
200
|
+
|
|
201
|
+
```
|
|
202
|
+
✓ modus-biz-order Skill 已更新
|
|
203
|
+
新增内容:
|
|
204
|
+
[model] OrderStatus.PENDING_REVIEW(待评审状态,2026-04 新增)
|
|
205
|
+
[process] 批量审批流程:提交 → 校验 → 执行 → 通知
|
|
206
|
+
修改内容:
|
|
207
|
+
[pitfall] 并发创建订单分布式锁 → 更新锁 key 格式为 order:create:{userId}
|
|
208
|
+
删除内容:
|
|
209
|
+
[model] OrderStatus.LEGACY_CANCELLED(已废弃枚举值)
|
|
210
|
+
maturity: draft → verified(本次引用后满足晋升条件)
|
|
211
|
+
```
|
|
137
212
|
|
|
138
213
|
若有未初始化的域,调用模式 A 新建 Skill(`last_hash` 留空,`key_files` 由 AI 填写)。
|
|
139
214
|
|
|
@@ -147,10 +222,11 @@ shasum -a 1 {file1} {file2} ... | awk '{print $1}' | sort | shasum -a 1 | awk '{
|
|
|
147
222
|
mode: plan
|
|
148
223
|
name: {name}
|
|
149
224
|
status: in-progress
|
|
225
|
+
complexity: medium # simple | medium | complex(来自 Step 2.5 评估)
|
|
226
|
+
quick_mode: false # --quick flag 或 simple 复杂度时用户选择跳过 design
|
|
150
227
|
domains: [{domain1}, {domain2}]
|
|
151
|
-
quick_mode: false
|
|
152
228
|
completed: []
|
|
153
|
-
pending: [proposal, design, design-brief, tasks]
|
|
229
|
+
pending: [proposal, design, design-brief, tasks] # quick_mode 时 pending 仅含 proposal + tasks
|
|
154
230
|
created: {ISO8601时间戳}
|
|
155
231
|
```
|
|
156
232
|
|
|
@@ -185,10 +261,26 @@ design.md ────────────► design-brief.md ────
|
|
|
185
261
|
## 关键约束(来自项目宪法)
|
|
186
262
|
- {constitution.hard_rules 中与本次相关的规则}
|
|
187
263
|
|
|
264
|
+
## 已知风险 ⚠️
|
|
265
|
+
<!-- 自动从相关业务 Skill 的 [pitfall] 标签中提取,并结合本次改动范围筛选 -->
|
|
266
|
+
- [pitfall | 来源: modus-biz-order] {具体风险描述,如:并发创建订单时需加分布式锁}
|
|
267
|
+
- [pitfall | 来源: modus-team-conventions] {具体风险描述,如:@Transactional 内部调用不生效}
|
|
268
|
+
<!-- 若相关 Skill 中无 [pitfall] 记录,此章节留空或注明"暂无已知风险" -->
|
|
269
|
+
|
|
270
|
+
## 影响分析
|
|
271
|
+
涉及文件变更(预估):
|
|
272
|
+
- {文件路径} — {新增/修改/删除,一句话说明变更目的}
|
|
273
|
+
|
|
188
274
|
## 方案概述
|
|
189
275
|
{技术路径的高层描述}
|
|
190
276
|
```
|
|
191
277
|
|
|
278
|
+
**已知风险章节的生成规则:**
|
|
279
|
+
1. 从 Step 4 已加载的业务 Skill 内容中,提取所有 `[pitfall]` 标签条目
|
|
280
|
+
2. 结合本次改动范围(涉及的域、预估的文件变更),筛选与当前功能相关的 pitfall
|
|
281
|
+
3. 每条 pitfall 注明来源 Skill(`来源: modus-biz-{domain}` 或 `来源: modus-team-conventions`)
|
|
282
|
+
4. 若无相关 pitfall,写 `暂无已知风险(相关 Skill 中未记录 pitfall)`,而非省略章节
|
|
283
|
+
|
|
192
284
|
**2. design.md** — 技术方案
|
|
193
285
|
|
|
194
286
|
```markdown
|
|
@@ -197,18 +289,35 @@ design.md ────────────► design-brief.md ────
|
|
|
197
289
|
## 技术方案
|
|
198
290
|
{详细实现路径,引用具体的类/方法/接口}
|
|
199
291
|
|
|
200
|
-
##
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
292
|
+
## 架构决策记录(ADR)[decision]
|
|
293
|
+
<!-- 每个有技术选型的决策点独立记录,后续可沉淀到 modus-tech-wiki -->
|
|
294
|
+
|
|
295
|
+
### ADR-01: {决策点标题,如"选择异步 MQ 而非同步 RPC"}
|
|
296
|
+
|
|
297
|
+
| 字段 | 内容 |
|
|
298
|
+
|------|------|
|
|
299
|
+
| 状态 | 已采纳 / 被否决 / 待评估 |
|
|
300
|
+
| 背景 | {为什么需要做这个决策,2-3 句话} |
|
|
301
|
+
| 选项 | A. {方案A} / B. {方案B} / C. {方案C} |
|
|
302
|
+
| 决策 | 选择方案 {X} |
|
|
303
|
+
| 原因 | {选择理由,包括技术/业务/成本考量} |
|
|
304
|
+
| 放弃理由 | 方案 {Y}:{为什么不选,如:实时性要求高不适合 MQ} |
|
|
305
|
+
| 影响 | {此决策对系统的长期影响,如:引入 MQ 后需维护消费者幂等性} |
|
|
306
|
+
|
|
307
|
+
<!-- 若有多个决策点,继续添加 ADR-02, ADR-03... -->
|
|
204
308
|
|
|
205
309
|
## 数据流
|
|
206
310
|
{文字或 mermaid 图}
|
|
207
311
|
|
|
208
312
|
## 涉及文件变更
|
|
209
|
-
- {文件路径} — {
|
|
313
|
+
- {文件路径} — {新增/修改/删除,一句话说明变更目的}
|
|
210
314
|
```
|
|
211
315
|
|
|
316
|
+
**ADR 使用规则:**
|
|
317
|
+
- 每个有选型空间的技术决策都应记录一个 ADR
|
|
318
|
+
- 若 Skill 中有 `[decision]` 标签记录了类似决策,在 ADR 背景中引用:`(参考 modus-biz-order 的历史决策:...)`
|
|
319
|
+
- 后置 Skill 更新时,每个 ADR 条目将自动提取为 `[decision]` 写入 `modus-tech-wiki`
|
|
320
|
+
|
|
212
321
|
**3. design-brief.md** — 设计方案(代码开发前的精确实现指南)
|
|
213
322
|
|
|
214
323
|
调用 `modus-design-brief` Skill,传入:
|
|
@@ -267,17 +376,21 @@ design.md ────────────► design-brief.md ────
|
|
|
267
376
|
|
|
268
377
|
归档完成后(或用户选择不归档但完成了规划),执行后置 Skill 更新(模式 C):
|
|
269
378
|
|
|
270
|
-
1. 从本次生成的 design.md
|
|
271
|
-
|
|
272
|
-
- `[
|
|
273
|
-
|
|
274
|
-
- `[pitfall]`
|
|
275
|
-
3.
|
|
276
|
-
4.
|
|
379
|
+
1. 从本次生成的 design.md 中提取所有 ADR 条目:
|
|
380
|
+
- 每个 ADR → `[decision]` 写入 `modus-tech-wiki`(跨项目决策)或对应业务 Skill(域特有决策)
|
|
381
|
+
- ADR 中的「影响」字段若包含风险点 → 同时写为 `[pitfall]`
|
|
382
|
+
2. 从 proposal.md 的「已知风险」章节中提取任何**本次新发现的**风险(非来自现有 Skill 的已有记录):
|
|
383
|
+
- 新发现的风险 → `[pitfall]` 追加到对应业务 Skill
|
|
384
|
+
3. 从 tasks.md 中提取具体的编码模式或约束 → `[guideline]`
|
|
385
|
+
4. 更新 `modus/knowledge-catalog.md` 的 `last_referenced` 和 maturity
|
|
386
|
+
5. 输出更新摘要:
|
|
277
387
|
```
|
|
278
388
|
📚 知识已回写到 Skill:
|
|
279
|
-
- [decision]
|
|
389
|
+
- [decision] tech-wiki:批量审批走 MQ 异步(ADR-01)
|
|
390
|
+
- [decision] tech-wiki:Redis 分布式锁 key 格式规范(ADR-02)
|
|
280
391
|
- [guideline] order 域:批量操作上限 50 条,防止内存溢出
|
|
392
|
+
- [pitfall] order 域:MQ 消费者需保证幂等性(来自 ADR-01 影响分析)
|
|
393
|
+
maturity 变化: modus-biz-order draft→verified
|
|
281
394
|
```
|
|
282
395
|
|
|
283
396
|
---
|
|
@@ -1,6 +1,6 @@
|
|
|
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. Trigger on /modus:spec command or when user wants behavior specifications before coding.
|
|
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.
|
|
4
4
|
allowed-tools: Read, Write, Glob, Bash
|
|
5
5
|
disable: false
|
|
6
6
|
---
|
|
@@ -9,9 +9,18 @@ disable: false
|
|
|
9
9
|
|
|
10
10
|
**触发条件:** 用户运行 `/modus:spec [需求描述]` 时使用此 Skill。
|
|
11
11
|
|
|
12
|
+
支持轻量模式:`/modus:spec --lite [描述]` 跳过 design-brief,适用于低风险小变更。
|
|
13
|
+
|
|
12
14
|
## 职责
|
|
13
15
|
|
|
14
|
-
规范驱动开发入口。在 `/modus:plan` 的基础上增加 OpenSpec 风格的行为规格(delta specs),明确「系统的 WHAT」而非「HOW」。通过**三级渐进加载**获取业务上下文,产出物包含 proposal、delta specs、design、tasks
|
|
16
|
+
规范驱动开发入口。在 `/modus:plan` 的基础上增加 OpenSpec 风格的行为规格(delta specs),明确「系统的 WHAT」而非「HOW」。通过**三级渐进加载**获取业务上下文,产出物包含 proposal、delta specs、design、tasks,归档前可选执行实现验证(verify),归档时自动检测规格冲突,合并 delta specs 到主规格库,并从中提取带类型标签的知识回写到 Skill。
|
|
17
|
+
|
|
18
|
+
### 规格级别
|
|
19
|
+
|
|
20
|
+
| 模式 | 标志 | 产出物 | 适用场景 |
|
|
21
|
+
|------|------|--------|---------|
|
|
22
|
+
| Full(默认) | 无 | proposal + delta specs + design + design-brief + tasks | 接口契约变更、高风险、跨域需求 |
|
|
23
|
+
| Lite | `--lite` | proposal + delta specs + tasks(无 design-brief) | 低风险内部逻辑变更、简单新增 |
|
|
15
24
|
|
|
16
25
|
---
|
|
17
26
|
|
|
@@ -137,6 +146,7 @@ shasum -a 1 {file1} {file2} ... | awk '{print $1}' | sort | shasum -a 1 | awk '{
|
|
|
137
146
|
mode: spec
|
|
138
147
|
name: {name}
|
|
139
148
|
status: in-progress
|
|
149
|
+
lite_mode: false # --lite flag 时为 true,跳过 design-brief
|
|
140
150
|
domains: [{domain1}]
|
|
141
151
|
delta_stats:
|
|
142
152
|
added: 0
|
|
@@ -144,8 +154,9 @@ delta_stats:
|
|
|
144
154
|
removed: 0
|
|
145
155
|
tasks_completed: "0/?"
|
|
146
156
|
scenarios_covered: "0/?"
|
|
157
|
+
verify_status: skipped # skipped | passed | passed_with_warnings
|
|
147
158
|
completed: []
|
|
148
|
-
pending: [proposal, specs, design, design-brief, tasks]
|
|
159
|
+
pending: [proposal, specs, design, design-brief, tasks] # lite_mode 时 pending 不含 design-brief
|
|
149
160
|
created: {ISO8601时间戳}
|
|
150
161
|
```
|
|
151
162
|
|
|
@@ -213,6 +224,8 @@ proposal.md
|
|
|
213
224
|
|
|
214
225
|
**4. design-brief.md** — 设计方案(代码开发前的精确实现指南)
|
|
215
226
|
|
|
227
|
+
**跳过条件:** `--lite` 模式时直接跳过此步骤,在 `.modus-state.yaml` 中标记 `lite_mode: true`。
|
|
228
|
+
|
|
216
229
|
调用 `modus-design-brief` Skill,传入:
|
|
217
230
|
- `mode: spec`
|
|
218
231
|
- `output_path: modus/changes/{name}/design-brief.md`
|
|
@@ -241,17 +254,107 @@ proposal.md
|
|
|
241
254
|
|
|
242
255
|
生成每份文档后更新 `.modus-state.yaml` 的 `completed` 列表和 `scenarios_covered`。
|
|
243
256
|
|
|
244
|
-
### Step
|
|
257
|
+
### Step 5.5:可选实现验证(verify)
|
|
258
|
+
|
|
259
|
+
文档生成后,询问用户是否执行实现验证(适用于代码已开发完成、准备归档前的场景):
|
|
260
|
+
|
|
261
|
+
```
|
|
262
|
+
规范文档已生成。是否对当前代码实现执行验证?
|
|
263
|
+
|
|
264
|
+
Y — 执行验证(推荐:确保代码与规格一致)
|
|
265
|
+
N — 跳过验证,直接进入归档(文档阶段可跳过)
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
若用户选择执行验证,从三个维度检查:
|
|
269
|
+
|
|
270
|
+
#### 维度一:完整性(Completeness)
|
|
271
|
+
|
|
272
|
+
检查内容:
|
|
273
|
+
- `tasks.md` 中的规格验证章节每一项是否已有对应测试或代码
|
|
274
|
+
- delta spec 中每个 ADDED/MODIFIED Requirement 是否有对应实现
|
|
275
|
+
- 每个 Scenario 是否有对应的测试用例(单元测试或接口测试)
|
|
276
|
+
|
|
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` 是否在代码中得到体现
|
|
296
|
+
|
|
297
|
+
#### 维度三:一致性(Coherence)
|
|
298
|
+
|
|
299
|
+
检查内容:
|
|
300
|
+
- design.md 中的架构决策是否反映在代码结构中
|
|
301
|
+
- 命名约定是否与 design.md 一致
|
|
302
|
+
- 若有 design-brief.md,其追踪矩阵中每个 Requirement 是否均已实现
|
|
303
|
+
|
|
304
|
+
**验证输出摘要:**
|
|
305
|
+
|
|
306
|
+
```
|
|
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
|
+
|
|
323
|
+
### Step 6:规格冲突检测 + 询问归档 ⏸️ 【人工审批节点】
|
|
324
|
+
|
|
325
|
+
**归档前冲突检测(自动执行):**
|
|
326
|
+
|
|
327
|
+
在执行归档前,检查主规格库中是否存在冲突条目:
|
|
328
|
+
|
|
329
|
+
```bash
|
|
330
|
+
# 检查主规格库是否存在同名 Requirement
|
|
331
|
+
grep -l "### Requirement:" modus/specs/{domain}/spec.md 2>/dev/null
|
|
332
|
+
```
|
|
333
|
+
|
|
334
|
+
对 delta spec 中每个 MODIFIED/REMOVED Requirement,在主规格库 `modus/specs/{domain}/spec.md` 中查找同名条目:
|
|
335
|
+
|
|
336
|
+
```
|
|
337
|
+
冲突检测结果:
|
|
338
|
+
✓ 主规格库存在 "单个审批接口" → MODIFIED 操作可正常执行
|
|
339
|
+
✓ 主规格库存在 "Remember Me" → REMOVED 操作可正常执行
|
|
340
|
+
⚠ 主规格库不存在 "批量审批订单" 的 MODIFIED 目标 → 建议改为 ADDED
|
|
341
|
+
(若此需求是全新的,请将 delta spec 中 MODIFIED 改为 ADDED)
|
|
342
|
+
```
|
|
343
|
+
|
|
344
|
+
若检测到冲突,询问用户如何处理(修改 delta spec 或强制执行)。
|
|
245
345
|
|
|
246
346
|
```
|
|
247
347
|
规范文档已生成:
|
|
248
348
|
modus/changes/{name}/proposal.md
|
|
249
|
-
modus/changes/{name}/specs/{domain}/spec.md ← delta specs({N}个场景)
|
|
349
|
+
modus/changes/{name}/specs/{domain}/spec.md ← delta specs(ADDED:{A} MODIFIED:{M} REMOVED:{R},共{N}个场景)
|
|
250
350
|
modus/changes/{name}/design.md
|
|
251
|
-
modus/changes/{name}/design-brief.md ← 设计方案({N}节 | 追踪矩阵 {N}行)
|
|
351
|
+
modus/changes/{name}/design-brief.md ← 设计方案({N}节 | 追踪矩阵 {N}行)[lite 模式时不生成]
|
|
252
352
|
modus/changes/{name}/tasks.md
|
|
253
353
|
modus/changes/{name}/.modus-state.yaml
|
|
254
354
|
|
|
355
|
+
实现验证: {passed_with_warnings / passed / skipped} [Step 5.5 结果]
|
|
356
|
+
冲突检测: {通过 / N 项需确认}
|
|
357
|
+
|
|
255
358
|
是否归档?归档后:
|
|
256
359
|
1. delta specs 将合并到 modus/specs/{domain}/spec.md(主规格库)
|
|
257
360
|
2. 变更文件夹移动到 modus/changes/archive/{YYYY-MM-DD}-{name}/
|