@house365/comate 0.9.24 → 0.9.26
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/LICENSE +21 -21
- package/README.md +102 -102
- package/bin/cleanup-duplicate-superpowers.mjs +119 -0
- package/bin/cli.mjs +7 -1
- package/bin/init.mjs +25 -5
- package/bin/update.mjs +6 -5
- package/docs/COMATE_MANUAL.md +695 -695
- package/package.json +55 -55
- package/skills/comate/SKILL.md +309 -309
- package/skills/comate/reference/decision-points.md +101 -101
- package/skills/comate/reference/dirty-worktree.md +58 -58
- package/skills/comate/reference/prerequisites.md +88 -88
- package/skills/comate-archive/SKILL.md +63 -63
- package/skills/comate-build/SKILL.md +227 -227
- package/skills/comate-design/SKILL.md +156 -156
- package/skills/comate-gate/SKILL.md +262 -212
- package/skills/comate-gate/scaffold/docs/README.md +36 -36
- package/skills/comate-gate/scaffold/docs/architecture/README.md +31 -31
- package/skills/comate-gate/scaffold/docs/knowledge-base/README.md +41 -41
- package/skills/comate-gate/scaffold/docs/knowledge-base/integrations/_TEMPLATE/README.md +49 -49
- package/skills/comate-gate/scaffold/docs/knowledge-base/integrations/_TEMPLATE/api-snapshot.md +47 -47
- package/skills/comate-gate/scaffold/docs/knowledge-base/requirements/_templates/PRD.md +95 -95
- package/skills/comate-grill/SKILL.md +185 -185
- package/skills/comate-kb-integration/scripts/fetch_rendered_doc.py +84 -84
- package/skills/comate-open/SKILL.md +176 -176
- package/skills/comate-verify/SKILL.md +145 -145
- package/docs/multica-integration.md +0 -400
package/skills/comate/SKILL.md
CHANGED
|
@@ -1,48 +1,48 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: comate
|
|
3
|
-
description: "comate —— SDD (规约驱动开发) 编排器。用 /comate 自动探测阶段并分派。五阶段:open → design → build → verify → archive。"
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# comate —— SDD (规约驱动开发) 编排器
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
**核心原则:brainstorming 不可跳过。每个变更都必须经过深度设计(fix 预设除外)。**
|
|
10
|
-
|
|
11
|
-
---
|
|
12
|
-
|
|
13
|
-
## 决策核心
|
|
14
|
-
|
|
15
|
-
agent 做决策只需读本节,其余参见末尾「参考附录」。决策阻塞点的完整规则见 `comate/reference/decision-points.md`(单一真相源)。
|
|
16
|
-
|
|
17
|
-
### 自动阶段探测
|
|
18
|
-
|
|
19
|
-
**Step 0:活跃 change 发现 + 决策状态优先检查**
|
|
20
|
-
|
|
21
|
-
<CRITICAL>
|
|
1
|
+
---
|
|
2
|
+
name: comate
|
|
3
|
+
description: "comate —— SDD (规约驱动开发) 编排器。用 /comate 自动探测阶段并分派。五阶段:open → design → build → verify → archive。"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# comate —— SDD (规约驱动开发) 编排器
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
**核心原则:brainstorming 不可跳过。每个变更都必须经过深度设计(fix 预设除外)。**
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## 决策核心
|
|
14
|
+
|
|
15
|
+
agent 做决策只需读本节,其余参见末尾「参考附录」。决策阻塞点的完整规则见 `comate/reference/decision-points.md`(单一真相源)。
|
|
16
|
+
|
|
17
|
+
### 自动阶段探测
|
|
18
|
+
|
|
19
|
+
**Step 0:活跃 change 发现 + 决策状态优先检查**
|
|
20
|
+
|
|
21
|
+
<CRITICAL>
|
|
22
22
|
**执行顺序不可颠倒**:先识别用户是否明确要求新建 change;否则读取状态检查明确的 `*-awaiting` 决策标记,再做普通意图过滤和 change 匹配。
|
|
23
23
|
若用户正在回答已持久化的决策问题(如"worktree + TDD"、"确认方案A"),直接路由到对应子 skill。
|
|
24
|
-
</CRITICAL>
|
|
25
|
-
|
|
26
|
-
1. **活跃 change 快速发现**:
|
|
27
|
-
|
|
28
|
-
运行 `openspec list --json` 获取所有活跃 change。
|
|
29
|
-
|
|
30
|
-
- **无活跃 change** → 跳到步骤 3(意图快速过滤 + 预设探测)
|
|
31
|
-
- **有活跃 change** → 继续步骤 2
|
|
32
|
-
|
|
24
|
+
</CRITICAL>
|
|
25
|
+
|
|
26
|
+
1. **活跃 change 快速发现**:
|
|
27
|
+
|
|
28
|
+
运行 `openspec list --json` 获取所有活跃 change。
|
|
29
|
+
|
|
30
|
+
- **无活跃 change** → 跳到步骤 3(意图快速过滤 + 预设探测)
|
|
31
|
+
- **有活跃 change** → 继续步骤 2
|
|
32
|
+
|
|
33
33
|
2. **待决策状态检查**(防止决策答复被误判为新任务):
|
|
34
|
-
|
|
35
|
-
a. **确定目标 change**:
|
|
36
|
-
- 恰好 1 个活跃 change → 自动选中
|
|
37
|
-
- 多个活跃 change 且用户指定了 change 名称(`/comate <name>`)→ 选中该 change
|
|
38
|
-
- 多个活跃 change 且用户未指定 → **暂存待选列表,继续检查**(稍后在步骤 3.2 处理)
|
|
39
|
-
|
|
40
|
-
b. **读取状态(若已确定目标 change)**:
|
|
41
|
-
|
|
42
|
-
读取 `openspec/changes/<name>/.comate.yaml`,获取 `phase` 和 `phase_step`。
|
|
43
|
-
|
|
34
|
+
|
|
35
|
+
a. **确定目标 change**:
|
|
36
|
+
- 恰好 1 个活跃 change → 自动选中
|
|
37
|
+
- 多个活跃 change 且用户指定了 change 名称(`/comate <name>`)→ 选中该 change
|
|
38
|
+
- 多个活跃 change 且用户未指定 → **暂存待选列表,继续检查**(稍后在步骤 3.2 处理)
|
|
39
|
+
|
|
40
|
+
b. **读取状态(若已确定目标 change)**:
|
|
41
|
+
|
|
42
|
+
读取 `openspec/changes/<name>/.comate.yaml`,获取 `phase` 和 `phase_step`。
|
|
43
|
+
|
|
44
44
|
c. **检查是否在等待决策**:
|
|
45
|
-
|
|
45
|
+
|
|
46
46
|
只有 `phase_step` 是当前阶段的明确等待标记时,才说明子 skill 正在等待用户答复:
|
|
47
47
|
- `open.review-awaiting`
|
|
48
48
|
- `design.approval-awaiting`
|
|
@@ -52,297 +52,297 @@ agent 做决策只需读本节,其余参见末尾「参考附录」。决策
|
|
|
52
52
|
兼容 `bd16c0f` 产生的活跃状态:仅在 phase 对应时,把 `open:4`、`design:1b`、`build:2` 分别视为上述等待标记;恢复后立即写入新格式。其它旧值只是普通进度。
|
|
53
53
|
|
|
54
54
|
普通进度(如 `design.brainstorm-complete`)、已确认状态和依赖阻塞状态都**不是**待决策,不得抢占用户的新请求。用户明确说“新建 change”时也优先按新建意图处理。
|
|
55
|
-
|
|
55
|
+
|
|
56
56
|
**立即路由到对应子 skill**(根据 `phase` 字段):
|
|
57
57
|
- `phase_step: fix.upgrade-awaiting` → 无论当前是 `phase: open` 还是 `phase: build`,调用 `/comate-fix`
|
|
58
58
|
- `phase: open` → 调用 `/comate-open`
|
|
59
|
-
- `phase: design` → 调用 `/comate-design`
|
|
60
|
-
- `phase: build` → 调用 `/comate-build`
|
|
61
|
-
- `phase: verify` → 调用 `/comate-verify`
|
|
62
|
-
- `phase: archive` → 调用 `/comate-archive`
|
|
63
|
-
|
|
64
|
-
子 skill 的**幂等性检查**会:
|
|
65
|
-
1. 读取 `phase_step` 的值
|
|
66
|
-
2. 验证该步骤是否与当前 `phase` 匹配
|
|
67
|
-
3. 恢复到正确的步骤(跳过已完成的步骤,直接进入下一步)
|
|
68
|
-
|
|
69
|
-
**结束 Step 0,不执行后续逻辑**。
|
|
70
|
-
|
|
59
|
+
- `phase: design` → 调用 `/comate-design`
|
|
60
|
+
- `phase: build` → 调用 `/comate-build`
|
|
61
|
+
- `phase: verify` → 调用 `/comate-verify`
|
|
62
|
+
- `phase: archive` → 调用 `/comate-archive`
|
|
63
|
+
|
|
64
|
+
子 skill 的**幂等性检查**会:
|
|
65
|
+
1. 读取 `phase_step` 的值
|
|
66
|
+
2. 验证该步骤是否与当前 `phase` 匹配
|
|
67
|
+
3. 恢复到正确的步骤(跳过已完成的步骤,直接进入下一步)
|
|
68
|
+
|
|
69
|
+
**结束 Step 0,不执行后续逻辑**。
|
|
70
|
+
|
|
71
71
|
d. **若没有匹配当前阶段的等待标记**:
|
|
72
|
-
|
|
73
|
-
说明没有未完成的决策点,继续步骤 3(意图过滤)。
|
|
74
|
-
|
|
75
|
-
3. **意图快速过滤 + 幂等性匹配**:
|
|
76
|
-
|
|
77
|
-
3.1. **意图快速过滤**(仅当步骤 2 未命中时执行):
|
|
78
|
-
|
|
79
|
-
先检查用户输入是否**明确表达了希望进入某个特定阶段**。如果用户没有明确指示,则无条件自动探测当前阶段,不询问不推测。
|
|
80
|
-
|
|
81
|
-
**明确意图的识别规则**:用户消息中包含以下**动作关键词 + 阶段名**的直接组合之一时,才算明确意图:
|
|
82
|
-
|
|
83
|
-
| 阶段 | 明确意图的关键词组合(任一命中即算) |
|
|
84
|
-
|------|-------------------------------------|
|
|
85
|
-
| open | "开题"/"创建 change"/"新建 change"/"起草 proposal" |
|
|
86
|
-
| design | "设计"/"写设计文档"/"brainstorming"/"开始设计" |
|
|
87
|
-
| build | "实施"/"开始构建"/"执行计划"/"写代码"/"开始 build" |
|
|
88
|
-
| verify | "验证"/"检查实现"/"运行测试"/"开始 verify" |
|
|
89
|
-
| archive | "归档"/"完成收尾"/"合并 delta spec"/"开始 archive" |
|
|
90
|
-
|
|
91
|
-
**不算明确意图的情况**(这些都应自动探测,不询问):
|
|
92
|
-
- 仅提及问题、需求、想法,无阶段动作词:"修复这个 bug" / "优化性能" / "加个功能"
|
|
93
|
-
- 仅描述当前状态:"设计做完了" / "代码写好了" / "测试通过了"
|
|
94
|
-
- 询问式:"现在该做什么" / "下一步是什么" / "继续"
|
|
95
|
-
- 澄清式:"刚才的设计有问题" / "build 阶段遇到错误"
|
|
96
|
-
- **决策答复**:"worktree + TDD" / "选择方案 A" / "确认" / "继续构建"(这些应在步骤 2 被拦截)
|
|
97
|
-
|
|
98
|
-
**过滤结果**:
|
|
99
|
-
- **明确意图命中** → 直接跳到对应阶段的 skill(不运行后续步骤)
|
|
100
|
-
- **无明确意图** → 继续步骤 3.2
|
|
101
|
-
|
|
102
|
-
3.2. **活跃 change 匹配**(防止重复创建 change):
|
|
103
|
-
|
|
104
|
-
**前置条件**:有活跃 change 且用户输入无明确意图。
|
|
105
|
-
|
|
106
|
-
**处理逻辑**:
|
|
107
|
-
|
|
108
|
-
a. **用户输入仅为 `/comate` 无任何描述**:
|
|
109
|
-
- 恰好 1 个活跃 change → 已在步骤 2 选中,进入 Step 1
|
|
110
|
-
- 多个活跃 change → 列出所有 change 供用户选择,选中后进入 Step 1
|
|
111
|
-
|
|
112
|
-
b. **用户输入包含任务描述但未指定 change 名称**(`/comate <描述>`):
|
|
113
|
-
- **关键幂等检查**(防止重复创建 change):
|
|
114
|
-
1. 遍历所有活跃 change
|
|
115
|
-
2. 对每个 change,读取 `proposal.md` 和 `specs/*/spec.md`
|
|
116
|
-
3. 检查用户描述是否与该 change 的需求高度匹配(关键词重叠、问题域相同、目标一致)
|
|
117
|
-
4. **若找到匹配的 change**:
|
|
118
|
-
- 自动选中该 change
|
|
119
|
-
- 说明「检测到您的描述与活跃 change <name> 的需求匹配,将继续该 change」
|
|
120
|
-
- 进入 Step 1(读取该 change 的状态)
|
|
121
|
-
5. **若所有 change 都不匹配**:
|
|
122
|
-
- **AskUserQuestion 询问**:「检测到 {N} 个活跃 change:{列表及简要描述}。您的任务是:继续某个已有 change,还是新建 change?」
|
|
123
|
-
- 选项 1:「继续已有 change」→ 让用户选择具体哪个 change,进入 Step 1
|
|
124
|
-
- 选项 2:「新建 change」→ 进入步骤 4(预设探测)
|
|
125
|
-
|
|
126
|
-
4. **预设探测**(决定新 change 的入口):
|
|
127
|
-
|
|
128
|
-
当确定需要新建 change 时(无活跃 change,或用户选择新建),按以下优先级探测:
|
|
129
|
-
|
|
130
|
-
a. **fix 预设**:
|
|
131
|
-
- 用户明确描述 bug 修复或文案/配置/文档/prompt 小调整
|
|
132
|
-
- 且满足 fix 条件(见 `/comate-fix` skill)
|
|
133
|
-
- → 直接调用 `/comate-fix`,不进入普通 open 分支
|
|
134
|
-
|
|
135
|
-
b. **gate 预设**(原始 PRD 入口):
|
|
136
|
-
- 用户输入指向一份原始 PRD(给了 PRD 路径/编号,或明确说「这是 PRD / 从这份需求文档开始」)
|
|
137
|
-
- 典型路径:`docs/knowledge-base/**/PRD-*.md`
|
|
138
|
-
- **且无对应活跃 change**
|
|
139
|
-
- → 直接调用 `/comate-gate`(阶段 0:先过门禁,再拆分建 change)
|
|
140
|
-
- **不要直接调 `/comate-open`**——PRD 必须先过质量门禁
|
|
141
|
-
|
|
142
|
-
c. **普通 open**(默认):
|
|
143
|
-
- 无预设命中
|
|
144
|
-
- → 调用 `/comate-open`
|
|
145
|
-
|
|
146
|
-
<IMPORTANT>
|
|
147
|
-
用户选择「新建 change」时,**必须调用 `/comate-open`**,不要直接调 `/opsx:new`。
|
|
148
|
-
`/comate-open` 做双重初始化:OpenSpec 产物(由内部 `/opsx:new` 创建)+ `.comate.yaml` 状态文件。
|
|
149
|
-
直接调 `/opsx:new` 会导致 `.comate.yaml` 缺失,破坏后续阶段探测。
|
|
150
|
-
</IMPORTANT>
|
|
151
|
-
|
|
152
|
-
**Step 1:读取 `.comate.yaml` 状态元数据**(仅在 Step 0 未直接路由时执行)
|
|
153
|
-
|
|
154
|
-
优先读 `openspec/changes/<name>/.comate.yaml`。不可用时回落到 `openspec status --change "<name>" --json`、`tasks.md`、`docs/superpowers/` 文件检查。
|
|
155
|
-
|
|
156
|
-
**关键字段**:
|
|
157
|
-
- `phase`:当前阶段(`open` / `design` / `build` / `verify` / `archive`)
|
|
72
|
+
|
|
73
|
+
说明没有未完成的决策点,继续步骤 3(意图过滤)。
|
|
74
|
+
|
|
75
|
+
3. **意图快速过滤 + 幂等性匹配**:
|
|
76
|
+
|
|
77
|
+
3.1. **意图快速过滤**(仅当步骤 2 未命中时执行):
|
|
78
|
+
|
|
79
|
+
先检查用户输入是否**明确表达了希望进入某个特定阶段**。如果用户没有明确指示,则无条件自动探测当前阶段,不询问不推测。
|
|
80
|
+
|
|
81
|
+
**明确意图的识别规则**:用户消息中包含以下**动作关键词 + 阶段名**的直接组合之一时,才算明确意图:
|
|
82
|
+
|
|
83
|
+
| 阶段 | 明确意图的关键词组合(任一命中即算) |
|
|
84
|
+
|------|-------------------------------------|
|
|
85
|
+
| open | "开题"/"创建 change"/"新建 change"/"起草 proposal" |
|
|
86
|
+
| design | "设计"/"写设计文档"/"brainstorming"/"开始设计" |
|
|
87
|
+
| build | "实施"/"开始构建"/"执行计划"/"写代码"/"开始 build" |
|
|
88
|
+
| verify | "验证"/"检查实现"/"运行测试"/"开始 verify" |
|
|
89
|
+
| archive | "归档"/"完成收尾"/"合并 delta spec"/"开始 archive" |
|
|
90
|
+
|
|
91
|
+
**不算明确意图的情况**(这些都应自动探测,不询问):
|
|
92
|
+
- 仅提及问题、需求、想法,无阶段动作词:"修复这个 bug" / "优化性能" / "加个功能"
|
|
93
|
+
- 仅描述当前状态:"设计做完了" / "代码写好了" / "测试通过了"
|
|
94
|
+
- 询问式:"现在该做什么" / "下一步是什么" / "继续"
|
|
95
|
+
- 澄清式:"刚才的设计有问题" / "build 阶段遇到错误"
|
|
96
|
+
- **决策答复**:"worktree + TDD" / "选择方案 A" / "确认" / "继续构建"(这些应在步骤 2 被拦截)
|
|
97
|
+
|
|
98
|
+
**过滤结果**:
|
|
99
|
+
- **明确意图命中** → 直接跳到对应阶段的 skill(不运行后续步骤)
|
|
100
|
+
- **无明确意图** → 继续步骤 3.2
|
|
101
|
+
|
|
102
|
+
3.2. **活跃 change 匹配**(防止重复创建 change):
|
|
103
|
+
|
|
104
|
+
**前置条件**:有活跃 change 且用户输入无明确意图。
|
|
105
|
+
|
|
106
|
+
**处理逻辑**:
|
|
107
|
+
|
|
108
|
+
a. **用户输入仅为 `/comate` 无任何描述**:
|
|
109
|
+
- 恰好 1 个活跃 change → 已在步骤 2 选中,进入 Step 1
|
|
110
|
+
- 多个活跃 change → 列出所有 change 供用户选择,选中后进入 Step 1
|
|
111
|
+
|
|
112
|
+
b. **用户输入包含任务描述但未指定 change 名称**(`/comate <描述>`):
|
|
113
|
+
- **关键幂等检查**(防止重复创建 change):
|
|
114
|
+
1. 遍历所有活跃 change
|
|
115
|
+
2. 对每个 change,读取 `proposal.md` 和 `specs/*/spec.md`
|
|
116
|
+
3. 检查用户描述是否与该 change 的需求高度匹配(关键词重叠、问题域相同、目标一致)
|
|
117
|
+
4. **若找到匹配的 change**:
|
|
118
|
+
- 自动选中该 change
|
|
119
|
+
- 说明「检测到您的描述与活跃 change <name> 的需求匹配,将继续该 change」
|
|
120
|
+
- 进入 Step 1(读取该 change 的状态)
|
|
121
|
+
5. **若所有 change 都不匹配**:
|
|
122
|
+
- **AskUserQuestion 询问**:「检测到 {N} 个活跃 change:{列表及简要描述}。您的任务是:继续某个已有 change,还是新建 change?」
|
|
123
|
+
- 选项 1:「继续已有 change」→ 让用户选择具体哪个 change,进入 Step 1
|
|
124
|
+
- 选项 2:「新建 change」→ 进入步骤 4(预设探测)
|
|
125
|
+
|
|
126
|
+
4. **预设探测**(决定新 change 的入口):
|
|
127
|
+
|
|
128
|
+
当确定需要新建 change 时(无活跃 change,或用户选择新建),按以下优先级探测:
|
|
129
|
+
|
|
130
|
+
a. **fix 预设**:
|
|
131
|
+
- 用户明确描述 bug 修复或文案/配置/文档/prompt 小调整
|
|
132
|
+
- 且满足 fix 条件(见 `/comate-fix` skill)
|
|
133
|
+
- → 直接调用 `/comate-fix`,不进入普通 open 分支
|
|
134
|
+
|
|
135
|
+
b. **gate 预设**(原始 PRD 入口):
|
|
136
|
+
- 用户输入指向一份原始 PRD(给了 PRD 路径/编号,或明确说「这是 PRD / 从这份需求文档开始」)
|
|
137
|
+
- 典型路径:`docs/knowledge-base/**/PRD-*.md`
|
|
138
|
+
- **且无对应活跃 change**
|
|
139
|
+
- → 直接调用 `/comate-gate`(阶段 0:先过门禁,再拆分建 change)
|
|
140
|
+
- **不要直接调 `/comate-open`**——PRD 必须先过质量门禁
|
|
141
|
+
|
|
142
|
+
c. **普通 open**(默认):
|
|
143
|
+
- 无预设命中
|
|
144
|
+
- → 调用 `/comate-open`
|
|
145
|
+
|
|
146
|
+
<IMPORTANT>
|
|
147
|
+
用户选择「新建 change」时,**必须调用 `/comate-open`**,不要直接调 `/opsx:new`。
|
|
148
|
+
`/comate-open` 做双重初始化:OpenSpec 产物(由内部 `/opsx:new` 创建)+ `.comate.yaml` 状态文件。
|
|
149
|
+
直接调 `/opsx:new` 会导致 `.comate.yaml` 缺失,破坏后续阶段探测。
|
|
150
|
+
</IMPORTANT>
|
|
151
|
+
|
|
152
|
+
**Step 1:读取 `.comate.yaml` 状态元数据**(仅在 Step 0 未直接路由时执行)
|
|
153
|
+
|
|
154
|
+
优先读 `openspec/changes/<name>/.comate.yaml`。不可用时回落到 `openspec status --change "<name>" --json`、`tasks.md`、`docs/superpowers/` 文件检查。
|
|
155
|
+
|
|
156
|
+
**关键字段**:
|
|
157
|
+
- `phase`:当前阶段(`open` / `design` / `build` / `verify` / `archive`)
|
|
158
158
|
- `phase_step`:当前阶段内的步骤标记(如 `design.approval-awaiting`、`build.options-confirmed`)
|
|
159
|
-
- `workflow`:流程类型(`full` / `fix`)
|
|
160
|
-
- `build_mode`、`isolation`、`tdd_mode`:build 阶段的决策字段
|
|
161
|
-
- `verify_result`:验证结果(`pending` / `pass` / `fail`)
|
|
162
|
-
|
|
163
|
-
**phase_step 语义说明**:
|
|
164
|
-
|
|
159
|
+
- `workflow`:流程类型(`full` / `fix`)
|
|
160
|
+
- `build_mode`、`isolation`、`tdd_mode`:build 阶段的决策字段
|
|
161
|
+
- `verify_result`:验证结果(`pending` / `pass` / `fail`)
|
|
162
|
+
|
|
163
|
+
**phase_step 语义说明**:
|
|
164
|
+
|
|
165
165
|
`phase_step` 记录**当前阶段**内的步骤,用于断点恢复和幂等性检查:
|
|
166
166
|
- 非空值表示"已完成到该步骤",恢复时从**下一步**开始
|
|
167
167
|
- `*-awaiting` 表示正在等待用户答复,只有这类值触发决策优先路由
|
|
168
168
|
- `*-confirmed` 表示用户已确认的决策点
|
|
169
169
|
- `build.blocked-by-<dependency>` 表示被依赖阻塞,但不是等待当前用户决策
|
|
170
170
|
- 空值或 `null` 表示该阶段尚未开始或已完成所有步骤
|
|
171
|
-
|
|
172
|
-
**断点恢复规则**:
|
|
173
|
-
- 每次上下文恢复都重跑 Step 0、Step 1;不要信任对话历史做阶段探测。
|
|
174
|
-
- 有活跃 change 且工作树有未提交改动时,按 `comate/reference/dirty-worktree.md` 协议处理。
|
|
175
|
-
- 若 `phase: build`,先检查 `build_mode`、`isolation`、`tdd_mode` 是否已设;任一未设则回 `/comate-build` 对应步骤补充;都已设则读 tasks.md 下一个未勾选任务继续。
|
|
176
|
-
- 若 `phase: verify` 且 `verify_result: fail`,按决策点 4 分级处理:CRITICAL 失败直接 `state transition <name> verify-fail` 回 `/comate-build`(不询问,回退前报告失败项);仅 WARNING/SUGGESTION 或 Spec 漂移时才 AskUserQuestion 暂停。
|
|
171
|
+
|
|
172
|
+
**断点恢复规则**:
|
|
173
|
+
- 每次上下文恢复都重跑 Step 0、Step 1;不要信任对话历史做阶段探测。
|
|
174
|
+
- 有活跃 change 且工作树有未提交改动时,按 `comate/reference/dirty-worktree.md` 协议处理。
|
|
175
|
+
- 若 `phase: build`,先检查 `build_mode`、`isolation`、`tdd_mode` 是否已设;任一未设则回 `/comate-build` 对应步骤补充;都已设则读 tasks.md 下一个未勾选任务继续。
|
|
176
|
+
- 若 `phase: verify` 且 `verify_result: fail`,按决策点 4 分级处理:CRITICAL 失败直接 `state transition <name> verify-fail` 回 `/comate-build`(不询问,回退前报告失败项);仅 WARNING/SUGGESTION 或 Spec 漂移时才 AskUserQuestion 暂停。
|
|
177
177
|
- 若 `phase: open` 但 proposal/design/tasks 已完成,按 `workflow` 恢复:`fix` 调 `/comate-fix`,`full` 调 `/comate-open`;对应 skill 立即运行 `bash "$COMATE" guard <name> open --apply` 修复状态,并在 guard 成功后同轮继续下一阶段。
|
|
178
|
-
- 若 `phase: archive`,只调用 `/comate-archive`;归档成功后 change 移入 archive 目录,不要再对旧活跃目录跑 guard。
|
|
179
|
-
|
|
178
|
+
- 若 `phase: archive`,只调用 `/comate-archive`;归档成功后 change 移入 archive 目录,不要再对旧活跃目录跑 guard。
|
|
179
|
+
|
|
180
180
|
**phase_step 生命周期**:
|
|
181
181
|
|
|
182
182
|
`phase_step` 严格属于当前阶段。所有 `state transition` 在切换 `phase` 时原子清空 `phase_step` 和 `phase_step_data`。禁止跨阶段保留或比较步骤编号;跨阶段事实必须记录在专用字段或落盘产物中。
|
|
183
|
-
|
|
184
|
-
**Step 2:阶段判定**(按顺序检查,首个命中者生效)
|
|
185
|
-
|
|
186
|
-
1. `archived: true` 或 change 已移入 archive → 流程完成
|
|
187
|
-
2. `verify_result: pass` 且 `archived` 非 `true` → 调用 `/comate-archive`
|
|
188
|
-
3. `verify_result: fail` → 验证失败决策阻塞点(决策点 4)
|
|
183
|
+
|
|
184
|
+
**Step 2:阶段判定**(按顺序检查,首个命中者生效)
|
|
185
|
+
|
|
186
|
+
1. `archived: true` 或 change 已移入 archive → 流程完成
|
|
187
|
+
2. `verify_result: pass` 且 `archived` 非 `true` → 调用 `/comate-archive`
|
|
188
|
+
3. `verify_result: fail` → 验证失败决策阻塞点(决策点 4)
|
|
189
189
|
4. `phase: verify` → 调用 `/comate-verify`。`tasks.md` 全勾不能单独触发 verify;验证失败回退到 build 后,必须继续按 build 路由修复。
|
|
190
190
|
5. `phase: build` 或有 Design Doc 但 plan/执行未完成 → 按 workflow 路由:`fix`→`/comate-fix`,`full`→`/comate-build`
|
|
191
|
-
6. `phase: design` 或有 change 但无 Design Doc → 调用 `/comate-design`
|
|
191
|
+
6. `phase: design` 或有 change 但无 Design Doc → 调用 `/comate-design`
|
|
192
192
|
7. `phase: open` → 按 workflow 路由:`fix`→`/comate-fix`,`full`→`/comate-open`;有活跃 change 但 `.comate.yaml` 缺失 → 调用 `/comate-open`
|
|
193
|
-
8. 无活跃 change → 调用 `/comate-open`
|
|
194
|
-
|
|
195
|
-
元数据与文件状态冲突时,以可验证的文件状态为准,先用 `state set` 修正 `.comate.yaml` 再继续。
|
|
196
|
-
|
|
197
|
-
### 预设升级判定
|
|
198
|
-
|
|
199
|
-
**fix → full**:见 `/comate-fix` 的两种模式升级条件(bug 模式 3+ 文件 / 架构变更 / schema 变更 / 新 API / 跨模块;调整模式 5+ 文件 / 多模块协调 / 5+ 测试 / 配置项增删 / 新 capability / delta spec)。
|
|
200
|
-
|
|
201
|
-
### 错误处理速查
|
|
202
|
-
|
|
203
|
-
| 场景 | 处理 |
|
|
204
|
-
|------|------|
|
|
205
|
-
| `openspec list --json` 失败 | 检查 openspec 是否安装,提示运行 `comate init` |
|
|
206
|
-
| 子 skill 不可用 | 停止流程,提示安装或启用对应 skill |
|
|
207
|
-
| `.comate.yaml` 损坏或缺失 | 以文件状态为真相源,用 `bash "$COMATE" state set` 修正后继续 |
|
|
208
|
-
| 构建/测试失败 | 回 build 阶段修复,不进入 verify |
|
|
209
|
-
| change 目录结构不全 | 按 `comate-open` 产物要求补齐缺失文件 |
|
|
210
|
-
|
|
211
|
-
### 阶段流转
|
|
212
|
-
|
|
213
|
-
<IMPORTANT>
|
|
214
|
-
一次 `/comate` 调用从探测到的阶段开始,满足退出条件后推进到下一阶段。
|
|
215
|
-
|
|
216
|
-
流转链:open → design → build → verify → archive
|
|
217
|
-
|
|
193
|
+
8. 无活跃 change → 调用 `/comate-open`
|
|
194
|
+
|
|
195
|
+
元数据与文件状态冲突时,以可验证的文件状态为准,先用 `state set` 修正 `.comate.yaml` 再继续。
|
|
196
|
+
|
|
197
|
+
### 预设升级判定
|
|
198
|
+
|
|
199
|
+
**fix → full**:见 `/comate-fix` 的两种模式升级条件(bug 模式 3+ 文件 / 架构变更 / schema 变更 / 新 API / 跨模块;调整模式 5+ 文件 / 多模块协调 / 5+ 测试 / 配置项增删 / 新 capability / delta spec)。
|
|
200
|
+
|
|
201
|
+
### 错误处理速查
|
|
202
|
+
|
|
203
|
+
| 场景 | 处理 |
|
|
204
|
+
|------|------|
|
|
205
|
+
| `openspec list --json` 失败 | 检查 openspec 是否安装,提示运行 `comate init` |
|
|
206
|
+
| 子 skill 不可用 | 停止流程,提示安装或启用对应 skill |
|
|
207
|
+
| `.comate.yaml` 损坏或缺失 | 以文件状态为真相源,用 `bash "$COMATE" state set` 修正后继续 |
|
|
208
|
+
| 构建/测试失败 | 回 build 阶段修复,不进入 verify |
|
|
209
|
+
| change 目录结构不全 | 按 `comate-open` 产物要求补齐缺失文件 |
|
|
210
|
+
|
|
211
|
+
### 阶段流转
|
|
212
|
+
|
|
213
|
+
<IMPORTANT>
|
|
214
|
+
一次 `/comate` 调用从探测到的阶段开始,满足退出条件后推进到下一阶段。
|
|
215
|
+
|
|
216
|
+
流转链:open → design → build → verify → archive
|
|
217
|
+
|
|
218
218
|
**连续执行要求**:从探测到的阶段开始,agent 自动连续走完后续阶段。但**自动推进仅适用于无用户决策的流转点**。遇到决策阻塞点时,**必须用 AskUserQuestion 工具暂停等待用户明确回应**,不得用推荐规则、默认值或历史偏好替代用户确认,也不得只输出文字提示后继续执行。
|
|
219
219
|
|
|
220
220
|
guard 成功、代码提交成功以及用户已经完成某个决策后的操作都不是新的暂停点。状态已满足下一阶段入口时,必须在当前调用内重新探测并继续;尤其是 fix 流程不得停在 `phase: open` 实现代码,也不得停在 build 提交之后等待用户发送“继续”。
|
|
221
|
-
|
|
222
|
-
7 个决策点(部分含自动处理分支)+ Red Flags 表见 `comate/reference/decision-points.md`。**每个决策点先按三类行动分类**(用户决策 / 自动处理 / 停止条件):判定属用户决策才用 AskUserQuestion 阻塞等待用户选择;属自动处理则直接执行并如实报告;其他无歧义流转自动进行,不得中途退出。
|
|
223
|
-
</IMPORTANT>
|
|
224
|
-
|
|
225
|
-
---
|
|
226
|
-
|
|
227
|
-
## 子命令速查
|
|
228
|
-
|
|
229
|
-
| 命令 | 阶段 | Owner | 产物 |
|
|
230
|
-
|------|------|-------|------|
|
|
231
|
-
| `/comate-gate` | 0. PRD 门禁与拆分 | Claude | `<PRD>.gate.yaml`, 评审报告, N 个 change |
|
|
232
|
-
| `/comate-open` | 1. 开题 | OpenSpec | proposal.md, design.md, tasks.md |
|
|
233
|
-
| `/comate-design` | 2. 深度设计 | Superpowers | Design Doc, delta spec |
|
|
234
|
-
| `/comate-build` | 3. 计划与构建 | Superpowers | 实施计划, 代码提交 |
|
|
235
|
-
| `/comate-verify` | 4. 验证收尾 | 双方 | 验证报告, 分支处理 |
|
|
236
|
-
| `/comate-archive` | 5. 归档 | OpenSpec | delta→main spec 同步, design doc 标注, 归档 |
|
|
237
|
-
| `/comate-fix` | 预设 | 双方 | 快速小改动(bug 修复 + 非 bug 调整,跳过 brainstorming) |
|
|
238
|
-
| `/comate-kb-integration` | 工具 | Claude | 第三方对接档案(从官方文档 URL 生成 integrations 目录档案) |
|
|
239
|
-
|
|
240
|
-
```
|
|
241
|
-
[原始 PRD] ──→ /comate-gate ──┐ (门禁+拆分,扇出 N 个 change)
|
|
242
|
-
(Claude) │
|
|
243
|
-
/comate ▼
|
|
244
|
-
↓ 自动探测
|
|
245
|
-
/comate-open ──→ /comate-design ──→ /comate-build ──→ /comate-verify ──→ /comate-archive
|
|
246
|
-
(OpenSpec) (Superpowers) (Superpowers) (双方) (OpenSpec)
|
|
247
|
-
```
|
|
248
|
-
|
|
249
|
-
需求来自对话时从 `/comate-open` 起步;来自原始 PRD 时先过 `/comate-gate` 门禁再拆分。
|
|
250
|
-
|
|
251
|
-
---
|
|
252
|
-
|
|
253
|
-
## 参考附录
|
|
254
|
-
|
|
255
|
-
### 脚本定位(单一入口)
|
|
256
|
-
|
|
257
|
-
comate 收敛为**一个分发器** `comate/scripts/comate.sh`。skill 里只需定位这一个脚本并缓存到 `$COMATE`:
|
|
258
|
-
|
|
259
|
-
```bash
|
|
260
|
-
COMATE="${COMATE:-$(for r in . ./.agents/skills ./.claude/skills ./.cursor/skills ./.codex/skills "$HOME"/.agents/skills "$HOME"/.claude/skills "$HOME"/.config/skills "$HOME"/.cursor/skills "$HOME"/.codex/skills "$HOME"/.gemini/skills; do
|
|
261
|
-
[ -d "$r" ] && find "$r" -maxdepth 6 -path '*/comate/scripts/comate.sh' -type f -print -quit 2>/dev/null
|
|
262
|
-
done | head -1)}"
|
|
263
|
-
if [ -z "$COMATE" ]; then
|
|
264
|
-
echo "ERROR: comate.sh 未找到,请确认 comate skill 已安装。" >&2
|
|
265
|
-
return 1 2>/dev/null || exit 1
|
|
266
|
-
fi
|
|
267
|
-
```
|
|
268
|
-
|
|
269
|
-
之后全程复用 `$COMATE`:
|
|
270
|
-
|
|
271
|
-
```bash
|
|
272
|
-
bash "$COMATE" state <name> init <full|fix>
|
|
273
|
-
bash "$COMATE" state <name> transition <event>
|
|
274
|
-
bash "$COMATE" state <name> check <phase> [--json]
|
|
275
|
-
bash "$COMATE" state <name> recover <phase>
|
|
276
|
-
bash "$COMATE" state <name> scale
|
|
277
|
-
bash "$COMATE" state <name> validate
|
|
278
|
-
bash "$COMATE" guard <name> <phase> [--apply] [--json]
|
|
279
|
-
bash "$COMATE" handoff <name> <design|build> --write [--full]
|
|
280
|
-
bash "$COMATE" sources <name> track <file...> [--note <text>]
|
|
221
|
+
|
|
222
|
+
7 个决策点(部分含自动处理分支)+ Red Flags 表见 `comate/reference/decision-points.md`。**每个决策点先按三类行动分类**(用户决策 / 自动处理 / 停止条件):判定属用户决策才用 AskUserQuestion 阻塞等待用户选择;属自动处理则直接执行并如实报告;其他无歧义流转自动进行,不得中途退出。
|
|
223
|
+
</IMPORTANT>
|
|
224
|
+
|
|
225
|
+
---
|
|
226
|
+
|
|
227
|
+
## 子命令速查
|
|
228
|
+
|
|
229
|
+
| 命令 | 阶段 | Owner | 产物 |
|
|
230
|
+
|------|------|-------|------|
|
|
231
|
+
| `/comate-gate` | 0. PRD 门禁与拆分 | Claude | `<PRD>.gate.yaml`, 评审报告, N 个 change |
|
|
232
|
+
| `/comate-open` | 1. 开题 | OpenSpec | proposal.md, design.md, tasks.md |
|
|
233
|
+
| `/comate-design` | 2. 深度设计 | Superpowers | Design Doc, delta spec |
|
|
234
|
+
| `/comate-build` | 3. 计划与构建 | Superpowers | 实施计划, 代码提交 |
|
|
235
|
+
| `/comate-verify` | 4. 验证收尾 | 双方 | 验证报告, 分支处理 |
|
|
236
|
+
| `/comate-archive` | 5. 归档 | OpenSpec | delta→main spec 同步, design doc 标注, 归档 |
|
|
237
|
+
| `/comate-fix` | 预设 | 双方 | 快速小改动(bug 修复 + 非 bug 调整,跳过 brainstorming) |
|
|
238
|
+
| `/comate-kb-integration` | 工具 | Claude | 第三方对接档案(从官方文档 URL 生成 integrations 目录档案) |
|
|
239
|
+
|
|
240
|
+
```
|
|
241
|
+
[原始 PRD] ──→ /comate-gate ──┐ (门禁+拆分,扇出 N 个 change)
|
|
242
|
+
(Claude) │
|
|
243
|
+
/comate ▼
|
|
244
|
+
↓ 自动探测
|
|
245
|
+
/comate-open ──→ /comate-design ──→ /comate-build ──→ /comate-verify ──→ /comate-archive
|
|
246
|
+
(OpenSpec) (Superpowers) (Superpowers) (双方) (OpenSpec)
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
需求来自对话时从 `/comate-open` 起步;来自原始 PRD 时先过 `/comate-gate` 门禁再拆分。
|
|
250
|
+
|
|
251
|
+
---
|
|
252
|
+
|
|
253
|
+
## 参考附录
|
|
254
|
+
|
|
255
|
+
### 脚本定位(单一入口)
|
|
256
|
+
|
|
257
|
+
comate 收敛为**一个分发器** `comate/scripts/comate.sh`。skill 里只需定位这一个脚本并缓存到 `$COMATE`:
|
|
258
|
+
|
|
259
|
+
```bash
|
|
260
|
+
COMATE="${COMATE:-$(for r in . ./.agents/skills ./.claude/skills ./.cursor/skills ./.codex/skills "$HOME"/.agents/skills "$HOME"/.claude/skills "$HOME"/.config/skills "$HOME"/.cursor/skills "$HOME"/.codex/skills "$HOME"/.gemini/skills; do
|
|
261
|
+
[ -d "$r" ] && find "$r" -maxdepth 6 -path '*/comate/scripts/comate.sh' -type f -print -quit 2>/dev/null
|
|
262
|
+
done | head -1)}"
|
|
263
|
+
if [ -z "$COMATE" ]; then
|
|
264
|
+
echo "ERROR: comate.sh 未找到,请确认 comate skill 已安装。" >&2
|
|
265
|
+
return 1 2>/dev/null || exit 1
|
|
266
|
+
fi
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
之后全程复用 `$COMATE`:
|
|
270
|
+
|
|
271
|
+
```bash
|
|
272
|
+
bash "$COMATE" state <name> init <full|fix>
|
|
273
|
+
bash "$COMATE" state <name> transition <event>
|
|
274
|
+
bash "$COMATE" state <name> check <phase> [--json]
|
|
275
|
+
bash "$COMATE" state <name> recover <phase>
|
|
276
|
+
bash "$COMATE" state <name> scale
|
|
277
|
+
bash "$COMATE" state <name> validate
|
|
278
|
+
bash "$COMATE" guard <name> <phase> [--apply] [--json]
|
|
279
|
+
bash "$COMATE" handoff <name> <design|build> --write [--full]
|
|
280
|
+
bash "$COMATE" sources <name> track <file...> [--note <text>]
|
|
281
281
|
bash "$COMATE" sources <name> check | list
|
|
282
282
|
bash "$COMATE" sources find <file>
|
|
283
283
|
bash "$COMATE" dependency <name> archived
|
|
284
284
|
bash "$COMATE" archive <name> [--dry-run]
|
|
285
|
-
bash "$COMATE" status
|
|
286
|
-
bash "$COMATE" doctor
|
|
287
|
-
```
|
|
288
|
-
|
|
289
|
-
`guard --apply` 在检查全 PASS 后委托 `state transition` 自动流转。退出码契约:`0` 通过 / `1` 校验阻塞 / `2` 用法错误 / `3` 环境缺失 / `4` 状态文件损坏。
|
|
290
|
-
|
|
291
|
-
### `.comate.yaml` 字段参考
|
|
292
|
-
|
|
293
|
-
状态文件为「扁平 `key: value`」子集(不允许嵌套/列表/多行)。完整字段模板见 `comate/scripts/comate-lib.sh` 的 `FIELD_ORDER`。关键字段:
|
|
294
|
-
|
|
295
|
-
| 字段 | 含义 |
|
|
296
|
-
|------|------|
|
|
297
|
-
| `schema_version` | 状态文件格式版本(当前 1) |
|
|
298
|
-
| `workflow` | `full` / `fix` |
|
|
299
|
-
| `phase` | `open` / `design` / `build` / `verify` / `archive` |
|
|
300
|
-
| `build_mode` | `subagent-driven-development` / `executing-plans` / `direct` |
|
|
301
|
-
| `tdd_mode` | `tdd` / `direct`(build→verify 前必须已选;fix 默认 `direct`) |
|
|
302
|
-
| `isolation` | `branch` / `worktree`(build→verify 前必须已选) |
|
|
303
|
-
| `verify_mode` | `light` / `full`(由 scale 评估写入) |
|
|
304
|
-
| `verify_result` | `pending` / `pass` / `fail` |
|
|
305
|
-
| `verification_report` | 验证报告路径,verify-pass 前必须指向真实文件 |
|
|
285
|
+
bash "$COMATE" status
|
|
286
|
+
bash "$COMATE" doctor
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
`guard --apply` 在检查全 PASS 后委托 `state transition` 自动流转。退出码契约:`0` 通过 / `1` 校验阻塞 / `2` 用法错误 / `3` 环境缺失 / `4` 状态文件损坏。
|
|
290
|
+
|
|
291
|
+
### `.comate.yaml` 字段参考
|
|
292
|
+
|
|
293
|
+
状态文件为「扁平 `key: value`」子集(不允许嵌套/列表/多行)。完整字段模板见 `comate/scripts/comate-lib.sh` 的 `FIELD_ORDER`。关键字段:
|
|
294
|
+
|
|
295
|
+
| 字段 | 含义 |
|
|
296
|
+
|------|------|
|
|
297
|
+
| `schema_version` | 状态文件格式版本(当前 1) |
|
|
298
|
+
| `workflow` | `full` / `fix` |
|
|
299
|
+
| `phase` | `open` / `design` / `build` / `verify` / `archive` |
|
|
300
|
+
| `build_mode` | `subagent-driven-development` / `executing-plans` / `direct` |
|
|
301
|
+
| `tdd_mode` | `tdd` / `direct`(build→verify 前必须已选;fix 默认 `direct`) |
|
|
302
|
+
| `isolation` | `branch` / `worktree`(build→verify 前必须已选) |
|
|
303
|
+
| `verify_mode` | `light` / `full`(由 scale 评估写入) |
|
|
304
|
+
| `verify_result` | `pending` / `pass` / `fail` |
|
|
305
|
+
| `verification_report` | 验证报告路径,verify-pass 前必须指向真实文件 |
|
|
306
306
|
| `branch_status` | `pending` / `handled` / `discarded` |
|
|
307
|
-
| `handoff_context` / `handoff_hash` | design 交接包路径 + 源文件 sha256 |
|
|
308
|
-
| `impl_context` / `impl_hash` | build 交接包路径 + plan+tasks 的 sha256(防漂移) |
|
|
309
|
-
| `direct_override` | full 流程用 `direct` 需显式 `true` |
|
|
310
|
-
| `base_ref` / `base_branch` | init 记录的 HEAD + 探测到的默认分支 |
|
|
311
|
-
| `source_kind` / `source_manifest` | 需求来源类型(`conversation` / `file`)+ 知识库源文件清单路径(防漂移) |
|
|
312
|
-
| `build_command` / `verify_command` | 可选,项目构建/验证命令 |
|
|
313
|
-
|
|
314
|
-
状态机硬约束(由 `guard` 与 `state transition` 双重强制):
|
|
315
|
-
- `build → verify` 前 `isolation` 必须为 `branch` 或 `worktree`
|
|
316
|
-
- `build → verify` 前 `build_mode` 必须已选
|
|
317
|
-
- `build → verify` 前 `tdd_mode` 必须为 `tdd` 或 `direct`
|
|
318
|
-
- `build_mode: direct` 默认仅 fix;full 流程需 `direct_override: true`
|
|
319
|
-
- `verify → archive` 前 `verification_report` 指向真实文件、`branch_status: handled`、`impl_hash` 与当前 plan+tasks 一致
|
|
320
|
-
|
|
321
|
-
### 文件结构
|
|
322
|
-
|
|
323
|
-
```
|
|
324
|
-
openspec/ # OpenSpec —— WHAT
|
|
325
|
-
├── changes/<name>/
|
|
326
|
-
│ ├── .comate.yaml # comate 状态机真相源
|
|
327
|
-
│ ├── proposal.md / design.md / tasks.md
|
|
328
|
-
│ ├── specs/<capability>/spec.md # delta 能力规格
|
|
329
|
-
│ └── .comate/handoff/ # 脚本生成的阶段交接包
|
|
330
|
-
│ └── ../sources.manifest # 知识库源文件清单(source_kind=file 时)
|
|
331
|
-
└── specs/<capability>/spec.md # 主 spec(归档时由 delta 覆盖)
|
|
332
|
-
|
|
333
|
-
docs/knowledge-base/<...>.md # 可追踪的需求源文档(source_kind=file)
|
|
334
|
-
|
|
335
|
-
docs/superpowers/ # Superpowers —— HOW
|
|
336
|
-
├── specs/YYYY-MM-DD-<topic>-design.md # Design Doc
|
|
337
|
-
├── plans/YYYY-MM-DD-<feature>.md # 实施计划
|
|
338
|
-
└── reports/ # 验证报告
|
|
339
|
-
```
|
|
340
|
-
|
|
341
|
-
### 最佳实践
|
|
342
|
-
|
|
343
|
-
1. brainstorming 不可跳过(fix 除外)
|
|
344
|
-
2. delta spec 是活文档,build 阶段随时改,归档时同步
|
|
345
|
-
3. 交接包由脚本生成(`handoff`),guard 校验 source/hash/mode
|
|
346
|
-
4. tasks.md 实时同步,每完成一个任务勾选并提交
|
|
347
|
-
5. 验证通过才归档
|
|
348
|
-
6. 预设有边界,命中升级条件及时转 full
|
|
307
|
+
| `handoff_context` / `handoff_hash` | design 交接包路径 + 源文件 sha256 |
|
|
308
|
+
| `impl_context` / `impl_hash` | build 交接包路径 + plan+tasks 的 sha256(防漂移) |
|
|
309
|
+
| `direct_override` | full 流程用 `direct` 需显式 `true` |
|
|
310
|
+
| `base_ref` / `base_branch` | init 记录的 HEAD + 探测到的默认分支 |
|
|
311
|
+
| `source_kind` / `source_manifest` | 需求来源类型(`conversation` / `file`)+ 知识库源文件清单路径(防漂移) |
|
|
312
|
+
| `build_command` / `verify_command` | 可选,项目构建/验证命令 |
|
|
313
|
+
|
|
314
|
+
状态机硬约束(由 `guard` 与 `state transition` 双重强制):
|
|
315
|
+
- `build → verify` 前 `isolation` 必须为 `branch` 或 `worktree`
|
|
316
|
+
- `build → verify` 前 `build_mode` 必须已选
|
|
317
|
+
- `build → verify` 前 `tdd_mode` 必须为 `tdd` 或 `direct`
|
|
318
|
+
- `build_mode: direct` 默认仅 fix;full 流程需 `direct_override: true`
|
|
319
|
+
- `verify → archive` 前 `verification_report` 指向真实文件、`branch_status: handled`、`impl_hash` 与当前 plan+tasks 一致
|
|
320
|
+
|
|
321
|
+
### 文件结构
|
|
322
|
+
|
|
323
|
+
```
|
|
324
|
+
openspec/ # OpenSpec —— WHAT
|
|
325
|
+
├── changes/<name>/
|
|
326
|
+
│ ├── .comate.yaml # comate 状态机真相源
|
|
327
|
+
│ ├── proposal.md / design.md / tasks.md
|
|
328
|
+
│ ├── specs/<capability>/spec.md # delta 能力规格
|
|
329
|
+
│ └── .comate/handoff/ # 脚本生成的阶段交接包
|
|
330
|
+
│ └── ../sources.manifest # 知识库源文件清单(source_kind=file 时)
|
|
331
|
+
└── specs/<capability>/spec.md # 主 spec(归档时由 delta 覆盖)
|
|
332
|
+
|
|
333
|
+
docs/knowledge-base/<...>.md # 可追踪的需求源文档(source_kind=file)
|
|
334
|
+
|
|
335
|
+
docs/superpowers/ # Superpowers —— HOW
|
|
336
|
+
├── specs/YYYY-MM-DD-<topic>-design.md # Design Doc
|
|
337
|
+
├── plans/YYYY-MM-DD-<feature>.md # 实施计划
|
|
338
|
+
└── reports/ # 验证报告
|
|
339
|
+
```
|
|
340
|
+
|
|
341
|
+
### 最佳实践
|
|
342
|
+
|
|
343
|
+
1. brainstorming 不可跳过(fix 除外)
|
|
344
|
+
2. delta spec 是活文档,build 阶段随时改,归档时同步
|
|
345
|
+
3. 交接包由脚本生成(`handoff`),guard 校验 source/hash/mode
|
|
346
|
+
4. tasks.md 实时同步,每完成一个任务勾选并提交
|
|
347
|
+
5. 验证通过才归档
|
|
348
|
+
6. 预设有边界,命中升级条件及时转 full
|