@modus-ai/modus 0.2.5 → 0.2.7
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 +62 -45
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +37 -6
- package/dist/commands/init.js.map +1 -1
- package/dist/generators/claude.js +1 -1
- package/dist/generators/claude.js.map +1 -1
- package/dist/generators/codebuddy.d.ts.map +1 -1
- package/dist/generators/codebuddy.js +3 -1
- package/dist/generators/codebuddy.js.map +1 -1
- package/dist/generators/codex.d.ts +10 -0
- package/dist/generators/codex.d.ts.map +1 -0
- package/dist/generators/codex.js +178 -0
- package/dist/generators/codex.js.map +1 -0
- package/dist/generators/cursor.d.ts.map +1 -1
- package/dist/generators/cursor.js +36 -7
- package/dist/generators/cursor.js.map +1 -1
- package/dist/generators/custom.d.ts +55 -0
- package/dist/generators/custom.d.ts.map +1 -0
- package/dist/generators/custom.js +166 -0
- package/dist/generators/custom.js.map +1 -0
- package/dist/generators/index.d.ts +1 -0
- package/dist/generators/index.d.ts.map +1 -1
- package/dist/generators/index.js +10 -0
- package/dist/generators/index.js.map +1 -1
- package/dist/utils/config.d.ts +6 -1
- package/dist/utils/config.d.ts.map +1 -1
- package/dist/utils/config.js.map +1 -1
- package/package.json +1 -1
- package/schemas/harness-schema.yaml +178 -53
- package/templates/agents/modus-analyst.md +1 -1
- package/templates/commands/auto.md +61 -27
- package/templates/commands/harness.md +94 -34
- package/templates/commands/init.md +43 -10
- package/templates/commands/modus.md +55 -28
- package/templates/commands/plan.md +60 -18
- package/templates/commands/spec.md +69 -25
- package/templates/commands/upgrade.md +54 -0
- package/templates/commands/vibe.md +55 -5
- package/templates/knowledge-catalog.md +23 -10
- package/templates/skills/modus-agents/analyst/SKILL.md +11 -12
- package/templates/skills/modus-agents/developer/SKILL.md +14 -12
- package/templates/skills/modus-agents/reviewer/SKILL.md +50 -23
- package/templates/skills/modus-auto/SKILL.md +580 -123
- package/templates/skills/modus-design-brief/SKILL.md +17 -9
- package/templates/skills/modus-harness/SKILL.md +95 -96
- package/templates/skills/modus-init/SKILL.md +403 -188
- package/templates/skills/modus-plan/SKILL.md +16 -5
- package/templates/skills/modus-platform/SKILL.md +271 -0
- package/templates/skills/modus-vibe/SKILL.md +285 -187
|
@@ -27,7 +27,7 @@ disable: false
|
|
|
27
27
|
|
|
28
28
|
| `mode` 值 | 来源类型 | 处理方式 |
|
|
29
29
|
|----------|---------|---------|
|
|
30
|
-
| `harness` | 文件路径 | 读取 `modus/
|
|
30
|
+
| `harness` | 文件路径 | 读取 `modus/stories/{story-id}/harness/01-analysis.md`(v3.2 路径)|
|
|
31
31
|
| `spec` | 文件路径 | 读取调用方目录下的 `proposal.md`;若存在同级 `specs/*/spec.md` 也一并读取 |
|
|
32
32
|
| `vibe` | 运行时字符串 | `analysis_doc` 参数是调用方直接传入的「用户意图摘要」字符串,**不读取任何文件**;直接将此字符串作为需求描述,与 Step 5 加载的 Skill 内容结合生成设计方案 |
|
|
33
33
|
|
|
@@ -106,9 +106,10 @@ disable: false
|
|
|
106
106
|
**落盘模式(spec / harness):**
|
|
107
107
|
|
|
108
108
|
将生成内容写入调用方指定路径:
|
|
109
|
+
- plan 模式:`modus/plans/{name}/design-brief.md`
|
|
109
110
|
- spec 模式:`modus/changes/{name}/design-brief.md`(gate_status 写 `passed`,此模式无 Gate 检查)
|
|
110
|
-
- harness 模式:`modus/
|
|
111
|
-
- **gate_status 必须由 `modus-designer` SubAgent 在 Step 4 后动态评估并填写**(见 `modus-agents/
|
|
111
|
+
- harness 模式:`modus/stories/{story-id}/harness/02-design-brief.md`
|
|
112
|
+
- **gate_status 必须由 `modus-designer` SubAgent 在 Step 4 后动态评估并填写**(见 `modus-harness-agents/01-5-design/SKILL.md` 的 gate_status 赋值规则)
|
|
112
113
|
- 固定写 `passed` 将使 Gate A0.5 失效,严禁在 harness 模式下硬编码该字段
|
|
113
114
|
|
|
114
115
|
写入后输出确认:
|
|
@@ -140,12 +141,17 @@ disable: false
|
|
|
140
141
|
## 产出物格式(design-brief.md)
|
|
141
142
|
|
|
142
143
|
```markdown
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
144
|
+
---
|
|
145
|
+
schema_version: "1.1"
|
|
146
|
+
agent: "02-design"
|
|
147
|
+
run_id: "{YYYYMMDD}-{story_id_prefix}"
|
|
147
148
|
story_id: "{story-id}"
|
|
149
|
+
task_id: ""
|
|
148
150
|
domains: ["{domain1}", "{domain2}"]
|
|
151
|
+
gate_status: "passed"
|
|
152
|
+
artifact_status: "complete"
|
|
153
|
+
issues: []
|
|
154
|
+
skill_refs: []
|
|
149
155
|
design_decisions:
|
|
150
156
|
- "{决策1}"
|
|
151
157
|
- "{决策2}"
|
|
@@ -157,7 +163,9 @@ gate_status: "{passed|warning|failed}"
|
|
|
157
163
|
# warning — 存在低风险未确认点,不阻塞开发
|
|
158
164
|
# failed — 存在高风险未确认点或用户答复后仍有歧义,Orchestrator 将重入本 SubAgent
|
|
159
165
|
# 注:plan/spec/vibe 模式调用时此字段不参与 Gate 检查,默认写 passed 即可
|
|
160
|
-
|
|
166
|
+
---
|
|
167
|
+
|
|
168
|
+
# Design Brief: {功能名称}
|
|
161
169
|
|
|
162
170
|
## 1. 基本信息
|
|
163
171
|
|
|
@@ -339,4 +347,4 @@ constitution: {constitution 字段内容}
|
|
|
339
347
|
|
|
340
348
|
### harness 模式调用方式
|
|
341
349
|
|
|
342
|
-
由 SubAgent 01.5
|
|
350
|
+
由 SubAgent 02(设计阶段,原 01.5)独立执行(见 `modus-harness-agents/01-5-design/SKILL.md`),输入为 `modus/stories/{story-id}/harness/01-analysis.md`,输出为 `modus/stories/{story-id}/harness/02-design-brief.md` 含 HANDOFF 块(`agent: "02-design"`)。
|
|
@@ -19,17 +19,19 @@ disable: false
|
|
|
19
19
|
|
|
20
20
|
## SubAgent 清单与 Token 预算
|
|
21
21
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
|
25
|
-
|
|
26
|
-
|
|
|
27
|
-
|
|
|
28
|
-
|
|
|
29
|
-
|
|
|
30
|
-
|
|
|
31
|
-
|
|
|
32
|
-
|
|
|
22
|
+
> **命名说明:** SubAgent ID(调度用)与 Skill 文件名中的编号存在偏移,原因是 SubAgent 02(设计阶段)对应 `modus-harness-01-5-design`(插入在 01 和 02 之间),导致后续 Skill 文件名编号均比 SubAgent ID 少 1。HANDOFF `agent` 值以 SubAgent ID 为基准(见 `protocol.md` §六 三方映射表)。
|
|
23
|
+
|
|
24
|
+
| SubAgent ID | Skill 路径 | HANDOFF agent 值 | 职责 | 产出物 | 知识查询预算 |
|
|
25
|
+
|-------------|-----------|-----------------|------|--------|------------|
|
|
26
|
+
| 00 | `modus-harness-00-skills-builder` | `00-skills-builder` | Skills 更新/知识提取 | Skill 文件 + catalog | 无限制 |
|
|
27
|
+
| 01 | `modus-harness-01-analysis` | `01-analysis` | 需求分析 | `01-analysis.md` | ≤ 3 个 Skill 文件 |
|
|
28
|
+
| 02 | `modus-harness-01-5-design` | `02-design` | 设计方案生成 | `02-design-brief.md` | ≤ 3 个 Skill 文件 |
|
|
29
|
+
| 03 | `modus-harness-02-dev` | `03-dev` | 代码开发 | `03-sprint-contract.md` | ≤ 5 个 Skill 文件 + ≤ 10 个代码文件 |
|
|
30
|
+
| 04 | `modus-harness-03-test` | `04-test` | 代码测试 | `04-test-report.md` | ≤ 2 个 Skill 文件 |
|
|
31
|
+
| 05 | `modus-harness-04-perf` | `05-perf` | 性能审计 | `05-perf-report.md` | ≤ 2 个 Skill 文件 |
|
|
32
|
+
| 06 | `modus-harness-05-security` | `06-security` | 安全审计 | `06-security-report.md` | ≤ 2 个 Skill 文件 |
|
|
33
|
+
| 07 | `modus-harness-06-review` | `07-review` | 代码评审 | `cr-report.md` | ≤ 1 个团队约定 Skill |
|
|
34
|
+
| 08 | `modus-harness-07-deploy` | `08-deploy` | 部署发布 | `08-deploy-status.md` | ≤ 1 个 Skill 文件 |
|
|
33
35
|
|
|
34
36
|
**预算原则:** SubAgent 超出预算时,应优先读 status 更高(proven > verified > draft)的 Skill;若 catalog 中某 Skill 标注 `⚠️` 可能过时,优先读最新代码而非该 Skill。
|
|
35
37
|
|
|
@@ -37,36 +39,34 @@ disable: false
|
|
|
37
39
|
|
|
38
40
|
## 结构化产物交接格式(HANDOFF 协议)
|
|
39
41
|
|
|
40
|
-
每个 SubAgent 的产出物 Markdown 文件头部附加一个机器可读的
|
|
42
|
+
每个 SubAgent 的产出物 Markdown 文件头部附加一个机器可读的 YAML frontmatter,供 Orchestrator 和下游 SubAgent 精准解析,**无需读取整份文档**即可决策:
|
|
41
43
|
|
|
42
44
|
```markdown
|
|
43
|
-
|
|
45
|
+
---
|
|
46
|
+
schema_version: "1.1"
|
|
44
47
|
agent: "01-analysis"
|
|
48
|
+
run_id: "20260518-200034"
|
|
45
49
|
story_id: "{story-id}"
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
- "需要兼容 v1 接口"
|
|
50
|
+
task_id: ""
|
|
51
|
+
domains: ["biz-track", "biz-album"]
|
|
52
|
+
gate_status: "passed"
|
|
53
|
+
artifact_status: "complete"
|
|
54
|
+
issues: []
|
|
52
55
|
skill_refs:
|
|
53
|
-
- "
|
|
54
|
-
|
|
55
|
-
gate_status: "passed" # passed | failed | pending
|
|
56
|
-
issues: [] # P1/P2 问题列表(cr-report 专用)
|
|
57
|
-
-->
|
|
56
|
+
- "biz-track@v2.1"
|
|
57
|
+
---
|
|
58
58
|
```
|
|
59
59
|
|
|
60
|
-
Orchestrator 每步只需读 HANDOFF 块(≤ 20 行),而非整份 MD 文件,大幅节省 token。
|
|
60
|
+
Orchestrator 每步只需读 HANDOFF 块(≤ 20 行),而非整份 MD 文件,大幅节省 token。完整字段说明见 `modus/docs/protocol.md` schema v1.1。
|
|
61
61
|
|
|
62
62
|
---
|
|
63
63
|
|
|
64
64
|
## 执行流程
|
|
65
65
|
|
|
66
|
-
### Step
|
|
66
|
+
### Step 1:项目宪法 + 前置检查
|
|
67
67
|
|
|
68
68
|
**读取 constitution:**
|
|
69
|
-
读取 `modus/config.yaml`
|
|
69
|
+
读取 `{project}/modus/config.yaml`(即当前项目根目录下的 `modus/config.yaml`,多项目 workspace 需先通过 `workspace-catalog.md` 确认项目路径,如 `operations-job/modus/config.yaml`)的 `constitution` 字段,将 `hard_rules` 传递给所有 SubAgent 作为硬性约束。SubAgent 直接使用 Orchestrator 传入的 constitution 内容,无需独立解析路径。
|
|
70
70
|
|
|
71
71
|
**检查业务 Skill:**
|
|
72
72
|
读取 `modus/knowledge-catalog.md`(Level 1 加载):
|
|
@@ -82,19 +82,19 @@ B. 强制继续(无业务上下文,风险较高)
|
|
|
82
82
|
|
|
83
83
|
**解析 Story ID + 初始化状态追踪:**
|
|
84
84
|
- 从 TAPD URL 提取 Story ID(格式:`tapd.cn/{project}/stories/view/{id}`)
|
|
85
|
-
- 创建工作目录:`modus/
|
|
85
|
+
- 创建工作目录:`modus/stories/{story-id}/harness/`
|
|
86
86
|
|
|
87
87
|
**`.harness-state.yaml` 断点续跑机制(优先级高于 HANDOFF 块探测):**
|
|
88
88
|
|
|
89
|
-
检查工作目录下是否存在 `.harness-state.yaml
|
|
89
|
+
检查工作目录下是否存在 `.harness-state.yaml`;若存在部分产出物(含 HANDOFF frontmatter),也可从断点处继续。
|
|
90
90
|
|
|
91
91
|
```yaml
|
|
92
|
-
# 示例:modus/
|
|
92
|
+
# 示例:modus/stories/{story-id}/harness/.harness-state.yaml
|
|
93
93
|
story_id: "{story-id}"
|
|
94
94
|
loop: 1 # 当前 Loop 轮次(1 或 2)
|
|
95
|
-
# SubAgent ID 约定:00=INIT
|
|
96
|
-
completed_agents: ["00-INIT", "01", "
|
|
97
|
-
current_agent: "
|
|
95
|
+
# SubAgent ID 约定:00=INIT 阶段、01/02/03/04/05/06/07/08 为主流程;00-ARCHIVE=ARCHIVE 阶段
|
|
96
|
+
completed_agents: ["00-INIT", "01", "02", "03", "04"] # 已成功完成的 SubAgent ID
|
|
97
|
+
current_agent: "05" # 当前正在执行的 SubAgent(空=未开始/全部完成)
|
|
98
98
|
loop2_triggers: [] # Loop 2 触发的 P1/P2 问题列表
|
|
99
99
|
last_updated: "2026-01-01T12:00:00"
|
|
100
100
|
```
|
|
@@ -108,13 +108,8 @@ last_updated: "2026-01-01T12:00:00"
|
|
|
108
108
|
→ 若 current_agent 非空(说明上次中途失败),重新执行该 SubAgent
|
|
109
109
|
|
|
110
110
|
.harness-state.yaml 不存在
|
|
111
|
-
→
|
|
112
|
-
→
|
|
113
|
-
|
|
114
|
-
SubAgent 00 状态写入规则:
|
|
115
|
-
→ INIT 阶段(Step 2 skill-creator 执行完)完成后,写入 "00-INIT" 到 completed_agents
|
|
116
|
-
→ ARCHIVE 阶段(Step Final 完成后),写入 "00-ARCHIVE" 到 completed_agents
|
|
117
|
-
→ 断点续跑时,若 "00-INIT" 已在列表中则跳过 INIT;若 "00-ARCHIVE" 已在列表中则跳过 ARCHIVE
|
|
111
|
+
→ 扫描目录,若存在部分产出物(含 HANDOFF frontmatter),以 HANDOFF 块降级判断断点
|
|
112
|
+
→ 全新流程则初始化状态文件(completed_agents: [],loop: 1)
|
|
118
113
|
```
|
|
119
114
|
|
|
120
115
|
**每个 SubAgent 完成后,立即更新状态文件**(在 Orchestrator 层执行,不依赖 SubAgent 自身):
|
|
@@ -124,7 +119,7 @@ current_agent: "{下一个 subagent_id}"
|
|
|
124
119
|
last_updated: "{ISO 8601 时间戳}"
|
|
125
120
|
```
|
|
126
121
|
|
|
127
|
-
### Step
|
|
122
|
+
### Step 2:澄清意图(仅全新流程)⏸️ 【人工交互节点】
|
|
128
123
|
|
|
129
124
|
读取 TAPD Story 内容后,在启动 SubAgent 01 之前,先确认关键信息:
|
|
130
125
|
|
|
@@ -140,7 +135,7 @@ last_updated: "{ISO 8601 时间戳}"
|
|
|
140
135
|
|
|
141
136
|
3. [技术约束] 有没有特殊要求(如不能修改某接口入参 / 需兼容旧版本)?
|
|
142
137
|
|
|
143
|
-
4. [重点关注]
|
|
138
|
+
4. [重点关注] 04/05/06 并行审计时,是否有需要特别关注的风险方向?
|
|
144
139
|
```
|
|
145
140
|
|
|
146
141
|
等待用户回答后,输出启动摘要:
|
|
@@ -154,7 +149,7 @@ last_updated: "{ISO 8601 时间戳}"
|
|
|
154
149
|
启动 Harness 流程...
|
|
155
150
|
```
|
|
156
151
|
|
|
157
|
-
### Step
|
|
152
|
+
### Step 3:INIT——知识注入
|
|
158
153
|
|
|
159
154
|
**Level 1 → Level 2 加载:**
|
|
160
155
|
基于用户确认的业务域,调用 SubAgent 00(模式 B:增量更新):
|
|
@@ -165,7 +160,7 @@ last_updated: "{ISO 8601 时间戳}"
|
|
|
165
160
|
|
|
166
161
|
```
|
|
167
162
|
[Harness Orchestrator 启动]
|
|
168
|
-
Story: {id} | 工作目录: modus/
|
|
163
|
+
Story: {id} | 工作目录: modus/stories/{id}/harness/
|
|
169
164
|
知识注入: order[verified→已更新] | payment[proven→已读取] | user[新建 draft]
|
|
170
165
|
Constitution: {N} 条硬性规则已加载
|
|
171
166
|
```
|
|
@@ -178,25 +173,25 @@ Constitution: {N} 条硬性规则已加载
|
|
|
178
173
|
|
|
179
174
|
```
|
|
180
175
|
SubAgent 01(需求分析)
|
|
181
|
-
↓ 产出 01-analysis.md(含 HANDOFF
|
|
176
|
+
↓ 产出 01-analysis.md(含 HANDOFF frontmatter)
|
|
182
177
|
↓ Gate A0: 读 01-analysis.md HANDOFF 块,检查 gate_status = "passed"(需求分析质量门)
|
|
183
|
-
SubAgent
|
|
184
|
-
↓ 产出
|
|
185
|
-
↓ Gate A0.5: 读
|
|
186
|
-
SubAgent
|
|
187
|
-
↓ 产出
|
|
178
|
+
SubAgent 02(设计方案生成)⏸️ 含人工架构决策确认
|
|
179
|
+
↓ 产出 02-design-brief.md(含 HANDOFF frontmatter)
|
|
180
|
+
↓ Gate A0.5: 读 02-design-brief.md HANDOFF 块,检查 gate_status ∈ {passed, warning}
|
|
181
|
+
SubAgent 03(代码开发)
|
|
182
|
+
↓ 产出 03-sprint-contract.md(含 HANDOFF frontmatter)
|
|
188
183
|
↓ Gate A: 编译验证(项目构建工具编译,exit code = 0)
|
|
189
|
-
SubAgent
|
|
190
|
-
SubAgent
|
|
191
|
-
SubAgent
|
|
192
|
-
↓ Gate B:
|
|
184
|
+
SubAgent 04(代码测试) ┐
|
|
185
|
+
SubAgent 05(性能审计) ├─ 并行启动,等全部完成(各自读取相关 Skill,预算独立)
|
|
186
|
+
SubAgent 06(安全审计) ┘
|
|
187
|
+
↓ Gate B: 04/05/06 三份报告全部写入(各含 HANDOFF frontmatter)
|
|
193
188
|
+ 各报告 gate_status ≠ "failed"
|
|
194
|
-
+
|
|
195
|
-
SubAgent
|
|
196
|
-
↓ 产出 cr-report.md(含 HANDOFF
|
|
197
|
-
↓ Gate C: HANDOFF.issues
|
|
198
|
-
SubAgent
|
|
199
|
-
↓ 产出
|
|
189
|
+
+ 06 安全报告无严重/高危未修复问题
|
|
190
|
+
SubAgent 07(代码评审)
|
|
191
|
+
↓ 产出 cr-report.md(含 HANDOFF frontmatter,issues 字段列出 P1/P2)
|
|
192
|
+
↓ Gate C: HANDOFF.issues 为空(或全为 P3)
|
|
193
|
+
SubAgent 08(部署发布)
|
|
194
|
+
↓ 产出 08-deploy-status.md
|
|
200
195
|
↓ ARCHIVE 知识提取
|
|
201
196
|
↓ Human Final Review
|
|
202
197
|
```
|
|
@@ -206,17 +201,17 @@ SubAgent 07(部署发布)
|
|
|
206
201
|
| Gate | 检查方式 | 失败处理 |
|
|
207
202
|
|------|---------|---------|
|
|
208
203
|
| Gate A0 | 读 `01-analysis.md` HANDOFF 块,检查 `gate_status` = "passed"(需求分析质量门) | `failed` 时重入 SubAgent 01,最多 2 次 |
|
|
209
|
-
| Gate A0.5 | 读 `
|
|
210
|
-
| Gate A | 执行 `constitution.build_command`,exit code = 0 | 重入 SubAgent
|
|
211
|
-
| Gate B | 扫描目录,检查
|
|
212
|
-
| Gate C | 读 cr-report.md 的 HANDOFF 块,检查 `issues`
|
|
204
|
+
| Gate A0.5 | 读 `02-design-brief.md` HANDOFF 块,检查 `gate_status` ∈ {passed, warning} | `failed` 时重入 SubAgent 02,最多 2 次 |
|
|
205
|
+
| Gate A | 执行 `constitution.build_command`,exit code = 0 | 重入 SubAgent 03,最多 3 次 |
|
|
206
|
+
| Gate B | 扫描目录,检查 04/05/06 三个 HANDOFF 文件均存在,且各文件 HANDOFF 块的 `gate_status ≠ "failed"`;06(安全审计)报告中若存在严重/高危问题则强制拦截 | 继续等待(文件未齐),超时上报;若 gate_status = "failed" 则重入对应 SubAgent(最多 2 次)|
|
|
207
|
+
| Gate C | 读 cr-report.md 的 HANDOFF 块,检查 `issues` 是否为空(或全为 P3) | 触发 Loop 2 精准重入 |
|
|
213
208
|
|
|
214
209
|
**Gate 检查优先读 HANDOFF 块**,只有当 HANDOFF 块信息不足时才读完整文件。
|
|
215
210
|
|
|
216
211
|
### Loop 2 规则
|
|
217
212
|
|
|
218
|
-
- SubAgent
|
|
219
|
-
- 重入后重新执行:
|
|
213
|
+
- SubAgent 07 完成后若 HANDOFF.issues 含 P1/P2 → 从 issues 中定位受影响的 Sprint → 精准重入 SubAgent 03
|
|
214
|
+
- 重入后重新执行:03 → Gate A → 04/05/06 → 07(完整验证)
|
|
220
215
|
- 连续 3 次重入仍有 P1/P2 → 暂停流程,上报用户,请求人工介入
|
|
221
216
|
|
|
222
217
|
**精准重入 Sprint 定位规则:**
|
|
@@ -224,14 +219,14 @@ SubAgent 07(部署发布)
|
|
|
224
219
|
- 若 `sprint` 字段缺失或为 0:fallback 为重跑**全量 Sprint**(降级为保守策略)
|
|
225
220
|
- 若同一 Loop 2 中多个 issue 指向不同 Sprint,取 Sprint 编号的**并集**一并重跑
|
|
226
221
|
|
|
227
|
-
### Step
|
|
222
|
+
### Step 4(ARCHIVE)——知识提取
|
|
228
223
|
|
|
229
|
-
SubAgent
|
|
224
|
+
SubAgent 08 完成后(进入 Human Final Review 等待阶段),调用 SubAgent 00(模式 D:知识提取):
|
|
230
225
|
|
|
231
226
|
```
|
|
232
227
|
[ARCHIVE 阶段启动]
|
|
233
|
-
产物范围: 01-analysis.md + 02-sprint-contract.md +
|
|
234
|
-
+
|
|
228
|
+
产物范围: 01-analysis.md + 02-design-brief.md + 03-sprint-contract.md + 04-test-report.md
|
|
229
|
+
+ 05-perf-report.md + 06-security-report.md + cr-report.md + 08-deploy-status.md
|
|
235
230
|
提取目标: [decision] [guideline] [pitfall] [process] [invariant]
|
|
236
231
|
```
|
|
237
232
|
|
|
@@ -240,17 +235,18 @@ SubAgent 07 完成后(进入 Human Final Review 等待阶段),调用 SubAg
|
|
|
240
235
|
| 产出物 | 可提取的知识类型 |
|
|
241
236
|
|--------|---------------|
|
|
242
237
|
| `cr-report.md` 的 P2/P3 | `[pitfall]`(发现的编码反模式)、`[invariant]`(金额/并发/事务的不变量) |
|
|
243
|
-
| `02-
|
|
244
|
-
| `
|
|
238
|
+
| `02-design-brief.md` 的架构决策章节 | `[decision]`(技术选型权衡、架构设计决策) |
|
|
239
|
+
| `03-sprint-contract.md` 的架构决策 | `[decision]`(实现层决策)、`[process]`(新增业务流程) |
|
|
240
|
+
| `08-deploy-status.md` 的部署注意事项 | `[guideline]`(上线操作规范) |
|
|
245
241
|
| `01-analysis.md` 的业务规则 | `[invariant]`(系统必须始终为真的业务约束,违反即为 Bug) |
|
|
246
|
-
| `
|
|
247
|
-
| `
|
|
242
|
+
| `05-perf-report.md` 的高/中风险项 | `[pitfall]`(N+1 查询、大数据量无分页等性能反模式) |
|
|
243
|
+
| `06-security-report.md` 的严重/高危项 | `[pitfall]` `[invariant]`(多租户隔离漏洞、权限缺失等安全反模式,必须提取) |
|
|
248
244
|
|
|
249
245
|
提取完成后输出知识积累摘要:
|
|
250
246
|
```
|
|
251
247
|
📚 本次 Harness 知识沉淀:
|
|
252
|
-
- [decision] tech-wiki:新增事件驱动架构决策(来自
|
|
253
|
-
- [pitfall] biz-order:批量审批超 50 条时需分批处理(来自
|
|
248
|
+
- [decision] tech-wiki:新增事件驱动架构决策(来自 03-sprint-contract)
|
|
249
|
+
- [pitfall] biz-order:批量审批超 50 条时需分批处理(来自 05-perf-report)
|
|
254
250
|
- [guideline] team-conventions:@Transactional + AopContext 组合用法(来自 cr-report P2)
|
|
255
251
|
- [invariant] biz-payment:支付金额必须 > 0 且 ≤ 账户余额,违反即为 Bug(来自 cr-report)
|
|
256
252
|
- status 更新: modus-biz-order draft→verified(首次工作流验证)
|
|
@@ -268,11 +264,11 @@ SubAgent 07 完成后(进入 Human Final Review 等待阶段),调用 SubAg
|
|
|
268
264
|
|
|
269
265
|
```
|
|
270
266
|
✅ SubAgent 01 完成 → 01-analysis.md(影响范围: N 处 | 风险点: N 个 | domains: order,payment)
|
|
271
|
-
⏸️ SubAgent
|
|
272
|
-
✅ SubAgent
|
|
273
|
-
🔄 SubAgent
|
|
274
|
-
⏳ 并行等待
|
|
275
|
-
❌ Gate A 失败 → 重入 SubAgent
|
|
267
|
+
⏸️ SubAgent 02 执行中...(等待架构决策确认)
|
|
268
|
+
✅ SubAgent 02 完成 → 02-design-brief.md(设计决策: N 个 | 追踪矩阵: N 行 | Gate A0: passed)
|
|
269
|
+
🔄 SubAgent 03 执行中...(Sprint 2/3 | token: 3/5 Skill 预算已用)
|
|
270
|
+
⏳ 并行等待 04/05/06(2/3 完成)
|
|
271
|
+
❌ Gate A 失败 → 重入 SubAgent 03(第 N 次)
|
|
276
272
|
📚 ARCHIVE 完成 → 提取知识 N 条(decision:1 | pitfall:2 | guideline:1)
|
|
277
273
|
─── Loop 1 第 N 轮 | Loop 2 第 N 轮 | 修复问题: N 个 ───
|
|
278
274
|
```
|
|
@@ -305,26 +301,29 @@ feat: {业务摘要}
|
|
|
305
301
|
|
|
306
302
|
| 如果发现自己在做… | 立即停止,转交给… |
|
|
307
303
|
|----------------|----------------|
|
|
308
|
-
| 修改任何业务代码 |
|
|
309
|
-
| 分析 TAPD 需求内容 |
|
|
310
|
-
| 生成设计方案或询问架构决策 |
|
|
311
|
-
| 对代码质量发表意见 |
|
|
312
|
-
| 执行测试或验证逻辑 |
|
|
313
|
-
| 操作部署流程 |
|
|
314
|
-
| 更新 Skill 文件 |
|
|
304
|
+
| 修改任何业务代码 | SubAgent 03(`modus-harness-02-dev`)|
|
|
305
|
+
| 分析 TAPD 需求内容 | SubAgent 01(`modus-harness-01-analysis`)|
|
|
306
|
+
| 生成设计方案或询问架构决策 | SubAgent 02(`modus-harness-01-5-design`)|
|
|
307
|
+
| 对代码质量发表意见 | SubAgent 07(`modus-harness-06-review`)|
|
|
308
|
+
| 执行测试或验证逻辑 | SubAgent 04/05/06 |
|
|
309
|
+
| 操作部署流程 | SubAgent 08(`modus-harness-07-deploy`)|
|
|
310
|
+
| 更新 Skill 文件 | SubAgent 00(`modus-harness-00-skills-builder`)|
|
|
315
311
|
|
|
316
312
|
---
|
|
317
313
|
|
|
318
|
-
## 调度 CoT
|
|
314
|
+
## 调度 CoT(每次行动前循环执行)
|
|
319
315
|
|
|
320
|
-
1. 扫描 `modus/
|
|
321
|
-
2. 只需读各文件的 HANDOFF
|
|
316
|
+
1. 扫描 `modus/stories/{story-id}/harness/` 目录,列出已有 HANDOFF frontmatter
|
|
317
|
+
2. 只需读各文件的 HANDOFF frontmatter(≤ 20 行),对照串行顺序确定当前阶段
|
|
322
318
|
3. 检查当前阶段的 Gate 条件是否满足(优先读 HANDOFF,必要时读全文)。**每个 Gate 仅在对应 SubAgent 完成后单独执行,互相独立,不同时触发**:
|
|
323
|
-
- Gate A0:**当 SubAgent 01 写入 `01-analysis.md` 后**,检查该文件 HANDOFF 块的 `gate_status`
|
|
324
|
-
- Gate A0.5:**当 SubAgent
|
|
319
|
+
- Gate A0:**当 SubAgent 01 写入 `01-analysis.md` 后**,检查该文件 HANDOFF 块的 `gate_status` 字段,确保 = "passed"(需求分析质量门,独立于 Gate A0.5)
|
|
320
|
+
- Gate A0.5:**当 SubAgent 02 写入 `02-design-brief.md` 后**,检查 `gate_status ∈ {passed, warning}`;`failed` 时重入 SubAgent 02,最多 2 次
|
|
321
|
+
- Gate A:执行 `constitution.build_command`(如 `mvn clean compile -q -DskipTests`),检查 exit code = 0;失败时重入 SubAgent 03,最多 3 次
|
|
322
|
+
- Gate B:扫描 harness/ 目录,检查 `04-test-report.md`、`05-perf-report.md`、`06-security-report.md` 的 HANDOFF `artifact_status` 均为 `complete`;各报告 `gate_status ≠ "failed"`;06(安全审计)有严重/高危则强制拦截;超时(30 分钟)上报用户
|
|
323
|
+
- Gate C:读 `cr-report.md` HANDOFF,检查 `issues` 数组为空或全为 P3;有 P1/P2 时从 `issues[].affected_sprint` 定位受影响 Sprint,触发 Loop 2 精准重入 SubAgent 03
|
|
325
324
|
4. Gate 通过 → 调用下一个 SubAgent 的 Skill(传递 constitution + 相关 Skill 内容)
|
|
326
|
-
- 调用 SubAgent
|
|
325
|
+
- 调用 SubAgent 03 时,必须同时传入 `02-design-brief.md` 内容
|
|
327
326
|
5. Gate 失败 → 按规则处理(重入/上报)
|
|
328
327
|
6. 输出本轮进度卡片
|
|
329
|
-
7. 若 SubAgent
|
|
330
|
-
8. 等待 SubAgent
|
|
328
|
+
7. 若 SubAgent 08 完成且 `08-deploy-status.md` HANDOFF `artifact_status = complete` → 触发 ARCHIVE 知识提取(SubAgent 00 模式 D),进入 Step 4
|
|
329
|
+
8. 等待 SubAgent 写入产出物,重复步骤 1
|