@house365/comate 0.9.4 → 0.9.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/LICENSE +21 -21
- package/README.md +106 -106
- package/docs/COMATE_MANUAL.md +710 -710
- package/package.json +1 -1
- package/skills/comate/SKILL.md +217 -217
- package/skills/comate/reference/decision-points.md +103 -103
- package/skills/comate/reference/dirty-worktree.md +58 -58
- package/skills/comate/reference/prerequisites.md +89 -89
- package/skills/comate-archive/SKILL.md +63 -63
- package/skills/comate-build/SKILL.md +177 -177
- package/skills/comate-design/SKILL.md +106 -106
- package/skills/comate-gate/SKILL.md +262 -262
- 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 +48 -48
- 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 +97 -97
- 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 +157 -157
- package/skills/comate-verify/SKILL.md +155 -155
|
@@ -1,157 +1,157 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: comate-open
|
|
3
|
-
description: "comate 阶段 1:开题。用 /comate-open 调用。通过 OpenSpec 探索想法、创建 change 结构(proposal + design + tasks)并初始化 .comate.yaml。"
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# comate 阶段 1:开题(Open)
|
|
7
|
-
|
|
8
|
-
## 前置条件
|
|
9
|
-
|
|
10
|
-
- 无活跃 change,或用户希望创建新 change
|
|
11
|
-
|
|
12
|
-
## 步骤
|
|
13
|
-
|
|
14
|
-
### 1. 探索想法
|
|
15
|
-
|
|
16
|
-
**立即执行:** 使用 Skill 工具加载 `openspec-explore` 技能。禁止跳过。加载后按其指引自由探索问题空间。
|
|
17
|
-
|
|
18
|
-
### 2. PRD 门禁前置守卫(从 PRD 建 change 时必须先通过)
|
|
19
|
-
|
|
20
|
-
若本 change **来自一份原始 PRD**(用户经 `/comate-gate` 拆分而来,或直接指定了来源 PRD),**在创建 change 结构之前**必须先过门禁守卫:
|
|
21
|
-
|
|
22
|
-
```bash
|
|
23
|
-
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
|
|
24
|
-
[ -d "$r" ] && find "$r" -maxdepth 6 -path '*/comate/scripts/comate.sh' -type f -print -quit 2>/dev/null
|
|
25
|
-
done | head -1)}"
|
|
26
|
-
if [ -z "$COMATE" ]; then
|
|
27
|
-
echo "ERROR: comate.sh 未找到,请确认 comate skill 已安装。" >&2
|
|
28
|
-
return 1 2>/dev/null || exit 1
|
|
29
|
-
fi
|
|
30
|
-
|
|
31
|
-
bash "$COMATE" gate <prd路径> check
|
|
32
|
-
```
|
|
33
|
-
|
|
34
|
-
- **PASS(exit 0)**:`<PRD>.gate.yaml` 存在、`gate_status ∈ {passed, passed-with-tbd}`、且 PRD 哈希未漂移。继续下一步创建 change。
|
|
35
|
-
- **BLOCK(exit 1)**:门禁不存在 / 未通过 / PRD 通过后被改(stale)。**不得创建 change**,停止并提示用户先跑 `/comate-gate` 对该 PRD 过门禁。
|
|
36
|
-
|
|
37
|
-
需求**来自对话**(非 PRD)时跳过本步——门禁只约束「PRD → change」这条路径。
|
|
38
|
-
|
|
39
|
-
### 3. 创建 Change 结构 + 初始化状态
|
|
40
|
-
|
|
41
|
-
**立即执行:** 使用 Skill 工具加载 `openspec-new-change` 技能。若用户意图未明确、需先形成建议,改为加载 `openspec-propose`。禁止跳过。
|
|
42
|
-
|
|
43
|
-
**命名与范围守卫**:change name 必须用用户指定或经 AskUserQuestion 确认的名称,不得自动生成或推断。变更范围必须与用户描述一致,不得自行扩大或缩小。
|
|
44
|
-
|
|
45
|
-
确认产物已创建:
|
|
46
|
-
|
|
47
|
-
```
|
|
48
|
-
openspec/changes/<name>/
|
|
49
|
-
├── .openspec.yaml
|
|
50
|
-
├── proposal.md # Why + What:问题、目标、范围、非目标
|
|
51
|
-
├── design.md # How(高层):架构决策、方案选型、数据流
|
|
52
|
-
└── tasks.md # 任务清单(勾选框)
|
|
53
|
-
```
|
|
54
|
-
|
|
55
|
-
定位 comate 脚本并初始化 `.comate.yaml`:
|
|
56
|
-
|
|
57
|
-
```bash
|
|
58
|
-
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
|
|
59
|
-
[ -d "$r" ] && find "$r" -maxdepth 6 -path '*/comate/scripts/comate.sh' -type f -print -quit 2>/dev/null
|
|
60
|
-
done | head -1)}"
|
|
61
|
-
if [ -z "$COMATE" ]; then
|
|
62
|
-
echo "ERROR: comate.sh 未找到,请确认 comate skill 已安装。" >&2
|
|
63
|
-
return 1 2>/dev/null || exit 1
|
|
64
|
-
fi
|
|
65
|
-
|
|
66
|
-
```
|
|
67
|
-
|
|
68
|
-
### 3b. 判定需求来源(源文件追踪)
|
|
69
|
-
|
|
70
|
-
`state init` 默认写入 `source_kind: conversation`、`source_manifest: null`(需求由对话产生)。
|
|
71
|
-
|
|
72
|
-
若本次需求来自 `docs/knowledge-base/` 下的一份或多份知识库文档,追踪它们以支持后续双向排查:
|
|
73
|
-
|
|
74
|
-
```bash
|
|
75
|
-
bash "$COMATE" sources <name> track docs/knowledge-base/<path>.md --note "<可选说明>"
|
|
76
|
-
```
|
|
77
|
-
|
|
78
|
-
- 追踪成功后 `source_kind` 自动改为 `file`,并在 `openspec/changes/<name>/.comate/sources.manifest` 钉住每个文件当时的 sha256 与 commit ref。
|
|
79
|
-
- 仅 `docs/knowledge-base/` 范围内的文件可追踪;范围外文件会被跳过并提示,`source_kind` 保持 `conversation`,不影响流程。
|
|
80
|
-
- 边追踪边产生:若开题时为对话来源、设计中途才拿到知识库文档,后续任意阶段补 `sources <name> track` 即可,无需回到 open。
|
|
81
|
-
|
|
82
|
-
### 3c. PRD 扇出记录(从 PRD 建 change 时必须登记)
|
|
83
|
-
|
|
84
|
-
若本 change 来自 PRD,在创建完成后把该 change 记回门禁:
|
|
85
|
-
|
|
86
|
-
```bash
|
|
87
|
-
bash "$COMATE" gate <prd路径> spawned <name>
|
|
88
|
-
```
|
|
89
|
-
|
|
90
|
-
此步将 change 名称追加到 `<PRD>.gate.yaml` 的 `spawned_changes` 列表,用于追溯 PRD → change 的完整扇出关系。
|
|
91
|
-
|
|
92
|
-
需求**来自对话**时跳过本步。
|
|
93
|
-
|
|
94
|
-
### 3. 入口状态验证
|
|
95
|
-
|
|
96
|
-
```bash
|
|
97
|
-
bash "$COMATE" state <name> check open
|
|
98
|
-
```
|
|
99
|
-
|
|
100
|
-
验证通过后继续 Step 4。失败时脚本输出具体原因。
|
|
101
|
-
|
|
102
|
-
**幂等性**:open 阶段所有操作可安全重复。若 `.comate.yaml` 已是 `phase: open` 且三件套已存在,跳过已完成步骤,从第一个缺失步骤继续。
|
|
103
|
-
|
|
104
|
-
### 4. 内容完整性检查
|
|
105
|
-
|
|
106
|
-
逐个确认三个文件路径存在且非空:
|
|
107
|
-
- **proposal.md**:问题背景、目标、范围、非目标
|
|
108
|
-
- **design.md**:高层架构决策、方案选型、数据流
|
|
109
|
-
- **tasks.md**:任务列表,每个任务有明确描述
|
|
110
|
-
|
|
111
|
-
任一文件缺失或为空时,不得进入 Step 5 或执行守卫,必须回创建步骤补充。
|
|
112
|
-
|
|
113
|
-
### 5. 产物审视(决策阻塞点 1,按来源分类)
|
|
114
|
-
|
|
115
|
-
三件套完成且 Step 4 完整性检查通过后,**先按来源分类,再决定是否需要用户输入**。规则见 `comate/reference/decision-points.md` 第 1 条。
|
|
116
|
-
|
|
117
|
-
#### 5a. 判定是否属"PRD 扇出且范围一致"(可自动流转)
|
|
118
|
-
|
|
119
|
-
同时满足以下**全部**条件时,本决策点降级为自动流转,**不 AskUserQuestion**:
|
|
120
|
-
|
|
121
|
-
1. `source_kind: file`(本 change 追踪了源文件);
|
|
122
|
-
2. 追踪的源是一份 PRD,且 `bash "$COMATE" gate <prd路径> check` 返回 PASS(exit 0)——即门禁 `passed`/`passed-with-tbd` 且 PRD 哈希未漂移。PRD 路径从 `sources <name> list` 或 Step 2c 的上下文取得;
|
|
123
|
-
3. change 名已记入该 PRD 的 `spawned_changes`(Step 6 的 `gate spawned` 已执行,通常由 `/comate-gate` 备妥);
|
|
124
|
-
4. **范围一致性自检**:proposal 的目标/范围/非目标忠实承接 gate 映射里本 change 认领的功能项——没有擅自扩大或缩小、没有认领未分配的功能项、没有漏掉已分配项。
|
|
125
|
-
|
|
126
|
-
四条全成立时:范围/映射/命名已在决策点 6 由用户拍板,三件套只是承接,无新的有效选项。直接进入退出条件执行守卫流转,并**如实报告**:本 change 承接自哪份 PRD、认领哪些功能项、已核对范围与映射一致。
|
|
127
|
-
|
|
128
|
-
#### 5b. 需要用户输入的两种情形(AskUserQuestion 阻塞)
|
|
129
|
-
|
|
130
|
-
- **对话来源**(`source_kind: conversation`):范围此前未经用户拍板,三件套第一次成形。
|
|
131
|
-
- **PRD 扇出但 5a 第 4 条不成立**(范围与映射有偏差):分歧重新出现。
|
|
132
|
-
|
|
133
|
-
以上任一情形,**必须使用 AskUserQuestion 工具暂停等待用户确认**。以单选题呈现摘要(proposal 问题/目标/范围、design 架构决策/选型、tasks 数量与关键任务;PRD 偏差场景额外列出偏差点)和选项:
|
|
134
|
-
- 「确认,继续下一阶段」— 执行守卫流转
|
|
135
|
-
- 「需要调整」— 附调整说明(PRD 偏差场景默认建议按映射修正),修改后重新请求确认
|
|
136
|
-
|
|
137
|
-
## 退出条件
|
|
138
|
-
|
|
139
|
-
- 三件套已创建且内容完整
|
|
140
|
-
- **用户已确认**
|
|
141
|
-
- **阶段守卫**:运行 `bash "$COMATE" guard <name> open --apply`,全 PASS 后自动流转
|
|
142
|
-
|
|
143
|
-
退出前必须 `--apply`,否则 `.comate.yaml` 停留在 `phase: open`,下阶段入口检查会失败。
|
|
144
|
-
|
|
145
|
-
```bash
|
|
146
|
-
bash "$COMATE" guard <name> open --apply
|
|
147
|
-
```
|
|
148
|
-
|
|
149
|
-
full 流程自动更新为 `phase: design`;fix 预设自动更新为 `phase: build`。
|
|
150
|
-
|
|
151
|
-
## 自动流转
|
|
152
|
-
|
|
153
|
-
用户确认后退出条件满足,自动流转:
|
|
154
|
-
|
|
155
|
-
> **REQUIRED NEXT SKILL(完整流程):** 调用 `comate-design` skill 进入深度设计。
|
|
156
|
-
>
|
|
157
|
-
> fix 预设由 `/comate-fix` skill 控制后续流转(phase 直接进 build),不经过本节。
|
|
1
|
+
---
|
|
2
|
+
name: comate-open
|
|
3
|
+
description: "comate 阶段 1:开题。用 /comate-open 调用。通过 OpenSpec 探索想法、创建 change 结构(proposal + design + tasks)并初始化 .comate.yaml。"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# comate 阶段 1:开题(Open)
|
|
7
|
+
|
|
8
|
+
## 前置条件
|
|
9
|
+
|
|
10
|
+
- 无活跃 change,或用户希望创建新 change
|
|
11
|
+
|
|
12
|
+
## 步骤
|
|
13
|
+
|
|
14
|
+
### 1. 探索想法
|
|
15
|
+
|
|
16
|
+
**立即执行:** 使用 Skill 工具加载 `openspec-explore` 技能。禁止跳过。加载后按其指引自由探索问题空间。
|
|
17
|
+
|
|
18
|
+
### 2. PRD 门禁前置守卫(从 PRD 建 change 时必须先通过)
|
|
19
|
+
|
|
20
|
+
若本 change **来自一份原始 PRD**(用户经 `/comate-gate` 拆分而来,或直接指定了来源 PRD),**在创建 change 结构之前**必须先过门禁守卫:
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
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
|
|
24
|
+
[ -d "$r" ] && find "$r" -maxdepth 6 -path '*/comate/scripts/comate.sh' -type f -print -quit 2>/dev/null
|
|
25
|
+
done | head -1)}"
|
|
26
|
+
if [ -z "$COMATE" ]; then
|
|
27
|
+
echo "ERROR: comate.sh 未找到,请确认 comate skill 已安装。" >&2
|
|
28
|
+
return 1 2>/dev/null || exit 1
|
|
29
|
+
fi
|
|
30
|
+
|
|
31
|
+
bash "$COMATE" gate <prd路径> check
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
- **PASS(exit 0)**:`<PRD>.gate.yaml` 存在、`gate_status ∈ {passed, passed-with-tbd}`、且 PRD 哈希未漂移。继续下一步创建 change。
|
|
35
|
+
- **BLOCK(exit 1)**:门禁不存在 / 未通过 / PRD 通过后被改(stale)。**不得创建 change**,停止并提示用户先跑 `/comate-gate` 对该 PRD 过门禁。
|
|
36
|
+
|
|
37
|
+
需求**来自对话**(非 PRD)时跳过本步——门禁只约束「PRD → change」这条路径。
|
|
38
|
+
|
|
39
|
+
### 3. 创建 Change 结构 + 初始化状态
|
|
40
|
+
|
|
41
|
+
**立即执行:** 使用 Skill 工具加载 `openspec-new-change` 技能。若用户意图未明确、需先形成建议,改为加载 `openspec-propose`。禁止跳过。
|
|
42
|
+
|
|
43
|
+
**命名与范围守卫**:change name 必须用用户指定或经 AskUserQuestion 确认的名称,不得自动生成或推断。变更范围必须与用户描述一致,不得自行扩大或缩小。
|
|
44
|
+
|
|
45
|
+
确认产物已创建:
|
|
46
|
+
|
|
47
|
+
```
|
|
48
|
+
openspec/changes/<name>/
|
|
49
|
+
├── .openspec.yaml
|
|
50
|
+
├── proposal.md # Why + What:问题、目标、范围、非目标
|
|
51
|
+
├── design.md # How(高层):架构决策、方案选型、数据流
|
|
52
|
+
└── tasks.md # 任务清单(勾选框)
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
定位 comate 脚本并初始化 `.comate.yaml`:
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
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
|
|
59
|
+
[ -d "$r" ] && find "$r" -maxdepth 6 -path '*/comate/scripts/comate.sh' -type f -print -quit 2>/dev/null
|
|
60
|
+
done | head -1)}"
|
|
61
|
+
if [ -z "$COMATE" ]; then
|
|
62
|
+
echo "ERROR: comate.sh 未找到,请确认 comate skill 已安装。" >&2
|
|
63
|
+
return 1 2>/dev/null || exit 1
|
|
64
|
+
fi
|
|
65
|
+
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### 3b. 判定需求来源(源文件追踪)
|
|
69
|
+
|
|
70
|
+
`state init` 默认写入 `source_kind: conversation`、`source_manifest: null`(需求由对话产生)。
|
|
71
|
+
|
|
72
|
+
若本次需求来自 `docs/knowledge-base/` 下的一份或多份知识库文档,追踪它们以支持后续双向排查:
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
bash "$COMATE" sources <name> track docs/knowledge-base/<path>.md --note "<可选说明>"
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
- 追踪成功后 `source_kind` 自动改为 `file`,并在 `openspec/changes/<name>/.comate/sources.manifest` 钉住每个文件当时的 sha256 与 commit ref。
|
|
79
|
+
- 仅 `docs/knowledge-base/` 范围内的文件可追踪;范围外文件会被跳过并提示,`source_kind` 保持 `conversation`,不影响流程。
|
|
80
|
+
- 边追踪边产生:若开题时为对话来源、设计中途才拿到知识库文档,后续任意阶段补 `sources <name> track` 即可,无需回到 open。
|
|
81
|
+
|
|
82
|
+
### 3c. PRD 扇出记录(从 PRD 建 change 时必须登记)
|
|
83
|
+
|
|
84
|
+
若本 change 来自 PRD,在创建完成后把该 change 记回门禁:
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
bash "$COMATE" gate <prd路径> spawned <name>
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
此步将 change 名称追加到 `<PRD>.gate.yaml` 的 `spawned_changes` 列表,用于追溯 PRD → change 的完整扇出关系。
|
|
91
|
+
|
|
92
|
+
需求**来自对话**时跳过本步。
|
|
93
|
+
|
|
94
|
+
### 3. 入口状态验证
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
bash "$COMATE" state <name> check open
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
验证通过后继续 Step 4。失败时脚本输出具体原因。
|
|
101
|
+
|
|
102
|
+
**幂等性**:open 阶段所有操作可安全重复。若 `.comate.yaml` 已是 `phase: open` 且三件套已存在,跳过已完成步骤,从第一个缺失步骤继续。
|
|
103
|
+
|
|
104
|
+
### 4. 内容完整性检查
|
|
105
|
+
|
|
106
|
+
逐个确认三个文件路径存在且非空:
|
|
107
|
+
- **proposal.md**:问题背景、目标、范围、非目标
|
|
108
|
+
- **design.md**:高层架构决策、方案选型、数据流
|
|
109
|
+
- **tasks.md**:任务列表,每个任务有明确描述
|
|
110
|
+
|
|
111
|
+
任一文件缺失或为空时,不得进入 Step 5 或执行守卫,必须回创建步骤补充。
|
|
112
|
+
|
|
113
|
+
### 5. 产物审视(决策阻塞点 1,按来源分类)
|
|
114
|
+
|
|
115
|
+
三件套完成且 Step 4 完整性检查通过后,**先按来源分类,再决定是否需要用户输入**。规则见 `comate/reference/decision-points.md` 第 1 条。
|
|
116
|
+
|
|
117
|
+
#### 5a. 判定是否属"PRD 扇出且范围一致"(可自动流转)
|
|
118
|
+
|
|
119
|
+
同时满足以下**全部**条件时,本决策点降级为自动流转,**不 AskUserQuestion**:
|
|
120
|
+
|
|
121
|
+
1. `source_kind: file`(本 change 追踪了源文件);
|
|
122
|
+
2. 追踪的源是一份 PRD,且 `bash "$COMATE" gate <prd路径> check` 返回 PASS(exit 0)——即门禁 `passed`/`passed-with-tbd` 且 PRD 哈希未漂移。PRD 路径从 `sources <name> list` 或 Step 2c 的上下文取得;
|
|
123
|
+
3. change 名已记入该 PRD 的 `spawned_changes`(Step 6 的 `gate spawned` 已执行,通常由 `/comate-gate` 备妥);
|
|
124
|
+
4. **范围一致性自检**:proposal 的目标/范围/非目标忠实承接 gate 映射里本 change 认领的功能项——没有擅自扩大或缩小、没有认领未分配的功能项、没有漏掉已分配项。
|
|
125
|
+
|
|
126
|
+
四条全成立时:范围/映射/命名已在决策点 6 由用户拍板,三件套只是承接,无新的有效选项。直接进入退出条件执行守卫流转,并**如实报告**:本 change 承接自哪份 PRD、认领哪些功能项、已核对范围与映射一致。
|
|
127
|
+
|
|
128
|
+
#### 5b. 需要用户输入的两种情形(AskUserQuestion 阻塞)
|
|
129
|
+
|
|
130
|
+
- **对话来源**(`source_kind: conversation`):范围此前未经用户拍板,三件套第一次成形。
|
|
131
|
+
- **PRD 扇出但 5a 第 4 条不成立**(范围与映射有偏差):分歧重新出现。
|
|
132
|
+
|
|
133
|
+
以上任一情形,**必须使用 AskUserQuestion 工具暂停等待用户确认**。以单选题呈现摘要(proposal 问题/目标/范围、design 架构决策/选型、tasks 数量与关键任务;PRD 偏差场景额外列出偏差点)和选项:
|
|
134
|
+
- 「确认,继续下一阶段」— 执行守卫流转
|
|
135
|
+
- 「需要调整」— 附调整说明(PRD 偏差场景默认建议按映射修正),修改后重新请求确认
|
|
136
|
+
|
|
137
|
+
## 退出条件
|
|
138
|
+
|
|
139
|
+
- 三件套已创建且内容完整
|
|
140
|
+
- **用户已确认**
|
|
141
|
+
- **阶段守卫**:运行 `bash "$COMATE" guard <name> open --apply`,全 PASS 后自动流转
|
|
142
|
+
|
|
143
|
+
退出前必须 `--apply`,否则 `.comate.yaml` 停留在 `phase: open`,下阶段入口检查会失败。
|
|
144
|
+
|
|
145
|
+
```bash
|
|
146
|
+
bash "$COMATE" guard <name> open --apply
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
full 流程自动更新为 `phase: design`;fix 预设自动更新为 `phase: build`。
|
|
150
|
+
|
|
151
|
+
## 自动流转
|
|
152
|
+
|
|
153
|
+
用户确认后退出条件满足,自动流转:
|
|
154
|
+
|
|
155
|
+
> **REQUIRED NEXT SKILL(完整流程):** 调用 `comate-design` skill 进入深度设计。
|
|
156
|
+
>
|
|
157
|
+
> fix 预设由 `/comate-fix` skill 控制后续流转(phase 直接进 build),不经过本节。
|
|
@@ -1,155 +1,155 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: comate-verify
|
|
3
|
-
description: "comate 阶段 4:验证与收尾。用 /comate-verify 调用。验证实现符合设计,处理开发分支。"
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# comate 阶段 4:验证与收尾(Verify)
|
|
7
|
-
|
|
8
|
-
## 前置条件
|
|
9
|
-
|
|
10
|
-
- 代码已提交(阶段 3 完成)
|
|
11
|
-
- tasks.md 全部任务已完成
|
|
12
|
-
|
|
13
|
-
## 步骤
|
|
14
|
-
|
|
15
|
-
### 0. 入口状态验证
|
|
16
|
-
|
|
17
|
-
```bash
|
|
18
|
-
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
|
|
19
|
-
[ -d "$r" ] && find "$r" -maxdepth 6 -path '*/comate/scripts/comate.sh' -type f -print -quit 2>/dev/null
|
|
20
|
-
done | head -1)}"
|
|
21
|
-
if [ -z "$COMATE" ]; then
|
|
22
|
-
echo "ERROR: comate.sh 未找到,请确认 comate skill 已安装。" >&2
|
|
23
|
-
return 1 2>/dev/null || exit 1
|
|
24
|
-
fi
|
|
25
|
-
bash "$COMATE" state <name> check verify
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
**幂等性**:verify 阶段检查可安全重复。若 `verify_result` 已为 `pass` 且 `branch_status` 为 `handled`,直接执行 guard 流转;若为 `pending`,从头验证。
|
|
29
|
-
|
|
30
|
-
### 1. 改动规模评估
|
|
31
|
-
|
|
32
|
-
```bash
|
|
33
|
-
bash "$COMATE" state <name> scale
|
|
34
|
-
```
|
|
35
|
-
|
|
36
|
-
脚本统计任务数、增量规格数、变更文件数,判断 light/full 验证模式并设 `verify_mode`。输出会标注用了哪个基线(plan base-ref / state base_ref / 工作树 diff)。
|
|
37
|
-
|
|
38
|
-
验证开始前,按 `comate/reference/dirty-worktree.md` 处理未提交改动。verify 阶段特例:
|
|
39
|
-
1. dirty diff 属于当前 change 且涉及实现/测试/tasks/spec/design doc → 不在 verify 直接修复,报告失败项进入 Step 1b
|
|
40
|
-
2. dirty diff 只是 verify 本阶段产物(验证报告草稿、分支处理记录)→ 可继续
|
|
41
|
-
3. dirty diff 已实现但 tasks.md 未勾选 → 视为 build 滞后,报告失败项进入 Step 1b
|
|
42
|
-
|
|
43
|
-
注意:build 阶段每任务都提交时,工作区 diff 可能低估规模。读 plan 文件头 `base-ref` 用提交区间复核:
|
|
44
|
-
|
|
45
|
-
```bash
|
|
46
|
-
PLAN=$(bash "$COMATE" state <name> get plan)
|
|
47
|
-
BASE_REF=$(grep '^base-ref:' "$PLAN" 2>/dev/null | head -1 | sed 's/^base-ref:[[:space:]]*//')
|
|
48
|
-
git diff --stat "$BASE_REF"...HEAD
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
超轻量阈值(> 4 文件 / 跨模块 / delta spec > 1 capability)则手动设 `bash "$COMATE" state <name> set verify_mode full`。
|
|
52
|
-
|
|
53
|
-
### 1b. 验证失败决策(决策阻塞点 4)
|
|
54
|
-
|
|
55
|
-
验证不通过时**先按严重程度分类,再判定是否需要用户输入**。规则与"三类行动"判定见 `comate/reference/decision-points.md` 第 4 条。
|
|
56
|
-
|
|
57
|
-
分类(**不确定性原则**:无法确定严重程度时降级 SUGGESTION > WARNING > CRITICAL):
|
|
58
|
-
- **CRITICAL**:构建失败 / 测试失败 / 安全问题 / 核心验收场景失败
|
|
59
|
-
- **WARNING / SUGGESTION**:非阻断性问题(覆盖率不足、风格、优化建议等)
|
|
60
|
-
- **Spec 漂移**:delta spec 与 design doc 矛盾(见 Step 2b 单独处理)
|
|
61
|
-
|
|
62
|
-
按类别分流:
|
|
63
|
-
|
|
64
|
-
1. **有任何 CRITICAL(且非 Spec 漂移)** —— 属"自动处理",唯一安全动作就是修复。**不询问**,直接:
|
|
65
|
-
```bash
|
|
66
|
-
bash "$COMATE" state <name> transition verify-fail
|
|
67
|
-
```
|
|
68
|
-
然后调 `/comate-build`。回到 build 前如实报告:哪些是 CRITICAL 失败项、判定依据、将如何修复。
|
|
69
|
-
|
|
70
|
-
2. **无 CRITICAL,仅 WARNING / SUGGESTION** —— 属"用户决策"(接受偏差是合法选择)。**一次性 AskUserQuestion 批量展示**全部失败项与推荐处理,提供:
|
|
71
|
-
- **全部修复**:`bash "$COMATE" state <name> transition verify-fail` 然后调 `/comate-build`
|
|
72
|
-
- **逐项处理**:勾选要修的项,其余接受偏差
|
|
73
|
-
- **接受偏差**:全部接受,须在报告记录每项原因和影响
|
|
74
|
-
|
|
75
|
-
3. **Spec 漂移** —— 按 Step 2b 的单选题处理(属"用户决策",必须暂停)。
|
|
76
|
-
|
|
77
|
-
> CRITICAL 自动回 build 不代表跳过用户知情:回退前必须输出清晰的失败报告作为证据。若一次验证同时含 CRITICAL 与非 CRITICAL,以 CRITICAL 优先自动回 build,非 CRITICAL 项留待修复轮次一并处理。
|
|
78
|
-
|
|
79
|
-
### 2a. 轻量验证(小改动)
|
|
80
|
-
|
|
81
|
-
规模为「小」时跳过 `openspec-verify-change`,直接执行 5 项检查:
|
|
82
|
-
1. tasks.md 全部 `[x]`
|
|
83
|
-
2. 改动文件与 tasks.md 描述一致(`git diff --stat` 对照)
|
|
84
|
-
3. 编译通过(项目构建命令)
|
|
85
|
-
4. 相关测试通过
|
|
86
|
-
5. 无明显安全问题(无硬编码密钥、无新增 unsafe)
|
|
87
|
-
|
|
88
|
-
**通过标准**:5 项全 OK,无 CRITICAL。不通过 → 进入 Step 1b。
|
|
89
|
-
|
|
90
|
-
### 2b. 完整验证(大改动)
|
|
91
|
-
|
|
92
|
-
规模为「大」时**立即使用 Skill 工具加载 `openspec-verify-change`**。检查项:tasks 全勾、实现符合 design.md 高层决策、符合 Design Doc、能力规格场景全通过、proposal 目标满足、delta spec 与 design doc 无矛盾、关联设计文档可定位。
|
|
93
|
-
|
|
94
|
-
**Spec 漂移处理**(决策阻塞点 4 的一部分):若发现 delta spec 与 design doc 矛盾,**必须以单选题 AskUserQuestion 暂停**:
|
|
95
|
-
- A:在 design doc 追加 "Implementation Divergence" 节记录偏差(属 verify 阶段允许产物,写入后不再触发 Step 1b dirty 决策)
|
|
96
|
-
- B:`state transition verify-fail` 然后调 `/comate-build` 由 Spec 增量更新规则更新
|
|
97
|
-
- C:确认偏差可接受继续(归档时 design doc 标记 `superseded-by-main-spec`)
|
|
98
|
-
|
|
99
|
-
### 3. 记录验证证据
|
|
100
|
-
|
|
101
|
-
验证报告必须落盘并记录。不要手动设 `verify_result: pass`,通过 guard 自动流转。
|
|
102
|
-
|
|
103
|
-
若本 change 有源文件追踪(`source_kind: file`),报告须声明本实现对照的知识库文档及其版本,并复核未漂移:
|
|
104
|
-
|
|
105
|
-
```bash
|
|
106
|
-
bash "$COMATE" sources <name> check # 0=未漂移 / 1=漂移 / 4=manifest 损坏
|
|
107
|
-
bash "$COMATE" sources <name> list # 列出对照的文档路径/sha256/ref,贴入报告
|
|
108
|
-
```
|
|
109
|
-
|
|
110
|
-
`source_kind: conversation` 时跳过(check 为无操作通过)。
|
|
111
|
-
|
|
112
|
-
```bash
|
|
113
|
-
mkdir -p docs/superpowers/reports
|
|
114
|
-
# 写报告到 docs/superpowers/reports/YYYY-MM-DD-<name>-verify.md
|
|
115
|
-
bash "$COMATE" state <name> set verification_report docs/superpowers/reports/YYYY-MM-DD-<name>-verify.md
|
|
116
|
-
```
|
|
117
|
-
|
|
118
|
-
确认项:全部测试通过、无硬编码密钥或安全问题。
|
|
119
|
-
|
|
120
|
-
### 4. 分支收尾(决策阻塞点 5)
|
|
121
|
-
|
|
122
|
-
**在记录验证证据后**执行分支处理,确保即使丢弃工作也不影响状态持久化。
|
|
123
|
-
|
|
124
|
-
**立即执行:** 使用 Skill 工具加载 `superpowers:finishing-a-development-branch`。不可用时停止并提示安装。
|
|
125
|
-
|
|
126
|
-
分支处理选项:本地合并 / 推送建 PR / 保持分支 / 丢弃工作。**必须使用 AskUserQuestion 工具暂停等待用户选择**。规则见 `comate/reference/decision-points.md` 第 5 条。
|
|
127
|
-
|
|
128
|
-
操作完成后写入状态:
|
|
129
|
-
|
|
130
|
-
```bash
|
|
131
|
-
bash "$COMATE" state <name> set branch_status handled
|
|
132
|
-
```
|
|
133
|
-
|
|
134
|
-
**重要**:无论选择哪种收尾方式(包括"丢弃工作"),都必须在分支操作完成后才设置 `branch_status: handled`。这确保 guard 检查时状态已完整记录。
|
|
135
|
-
|
|
136
|
-
## 退出条件
|
|
137
|
-
|
|
138
|
-
- 验证报告通过,分支已处理
|
|
139
|
-
- `verification_report` 指向真实文件,`branch_status: handled`
|
|
140
|
-
- `impl_hash` 与当前 plan+tasks 一致(guard 强制)
|
|
141
|
-
- **阶段守卫**:`bash "$COMATE" guard <name> verify --apply` 全 PASS 后经 `verify-pass` 自动流转到 `phase: archive`
|
|
142
|
-
|
|
143
|
-
```bash
|
|
144
|
-
bash "$COMATE" guard <name> verify --apply
|
|
145
|
-
```
|
|
146
|
-
|
|
147
|
-
## 上下文压缩恢复
|
|
148
|
-
|
|
149
|
-
```bash
|
|
150
|
-
bash "$COMATE" state <name> recover verify
|
|
151
|
-
```
|
|
152
|
-
|
|
153
|
-
## 自动流转
|
|
154
|
-
|
|
155
|
-
> **REQUIRED NEXT SKILL:** 调用 `comate-archive` skill 进入归档。
|
|
1
|
+
---
|
|
2
|
+
name: comate-verify
|
|
3
|
+
description: "comate 阶段 4:验证与收尾。用 /comate-verify 调用。验证实现符合设计,处理开发分支。"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# comate 阶段 4:验证与收尾(Verify)
|
|
7
|
+
|
|
8
|
+
## 前置条件
|
|
9
|
+
|
|
10
|
+
- 代码已提交(阶段 3 完成)
|
|
11
|
+
- tasks.md 全部任务已完成
|
|
12
|
+
|
|
13
|
+
## 步骤
|
|
14
|
+
|
|
15
|
+
### 0. 入口状态验证
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
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
|
|
19
|
+
[ -d "$r" ] && find "$r" -maxdepth 6 -path '*/comate/scripts/comate.sh' -type f -print -quit 2>/dev/null
|
|
20
|
+
done | head -1)}"
|
|
21
|
+
if [ -z "$COMATE" ]; then
|
|
22
|
+
echo "ERROR: comate.sh 未找到,请确认 comate skill 已安装。" >&2
|
|
23
|
+
return 1 2>/dev/null || exit 1
|
|
24
|
+
fi
|
|
25
|
+
bash "$COMATE" state <name> check verify
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
**幂等性**:verify 阶段检查可安全重复。若 `verify_result` 已为 `pass` 且 `branch_status` 为 `handled`,直接执行 guard 流转;若为 `pending`,从头验证。
|
|
29
|
+
|
|
30
|
+
### 1. 改动规模评估
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
bash "$COMATE" state <name> scale
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
脚本统计任务数、增量规格数、变更文件数,判断 light/full 验证模式并设 `verify_mode`。输出会标注用了哪个基线(plan base-ref / state base_ref / 工作树 diff)。
|
|
37
|
+
|
|
38
|
+
验证开始前,按 `comate/reference/dirty-worktree.md` 处理未提交改动。verify 阶段特例:
|
|
39
|
+
1. dirty diff 属于当前 change 且涉及实现/测试/tasks/spec/design doc → 不在 verify 直接修复,报告失败项进入 Step 1b
|
|
40
|
+
2. dirty diff 只是 verify 本阶段产物(验证报告草稿、分支处理记录)→ 可继续
|
|
41
|
+
3. dirty diff 已实现但 tasks.md 未勾选 → 视为 build 滞后,报告失败项进入 Step 1b
|
|
42
|
+
|
|
43
|
+
注意:build 阶段每任务都提交时,工作区 diff 可能低估规模。读 plan 文件头 `base-ref` 用提交区间复核:
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
PLAN=$(bash "$COMATE" state <name> get plan)
|
|
47
|
+
BASE_REF=$(grep '^base-ref:' "$PLAN" 2>/dev/null | head -1 | sed 's/^base-ref:[[:space:]]*//')
|
|
48
|
+
git diff --stat "$BASE_REF"...HEAD
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
超轻量阈值(> 4 文件 / 跨模块 / delta spec > 1 capability)则手动设 `bash "$COMATE" state <name> set verify_mode full`。
|
|
52
|
+
|
|
53
|
+
### 1b. 验证失败决策(决策阻塞点 4)
|
|
54
|
+
|
|
55
|
+
验证不通过时**先按严重程度分类,再判定是否需要用户输入**。规则与"三类行动"判定见 `comate/reference/decision-points.md` 第 4 条。
|
|
56
|
+
|
|
57
|
+
分类(**不确定性原则**:无法确定严重程度时降级 SUGGESTION > WARNING > CRITICAL):
|
|
58
|
+
- **CRITICAL**:构建失败 / 测试失败 / 安全问题 / 核心验收场景失败
|
|
59
|
+
- **WARNING / SUGGESTION**:非阻断性问题(覆盖率不足、风格、优化建议等)
|
|
60
|
+
- **Spec 漂移**:delta spec 与 design doc 矛盾(见 Step 2b 单独处理)
|
|
61
|
+
|
|
62
|
+
按类别分流:
|
|
63
|
+
|
|
64
|
+
1. **有任何 CRITICAL(且非 Spec 漂移)** —— 属"自动处理",唯一安全动作就是修复。**不询问**,直接:
|
|
65
|
+
```bash
|
|
66
|
+
bash "$COMATE" state <name> transition verify-fail
|
|
67
|
+
```
|
|
68
|
+
然后调 `/comate-build`。回到 build 前如实报告:哪些是 CRITICAL 失败项、判定依据、将如何修复。
|
|
69
|
+
|
|
70
|
+
2. **无 CRITICAL,仅 WARNING / SUGGESTION** —— 属"用户决策"(接受偏差是合法选择)。**一次性 AskUserQuestion 批量展示**全部失败项与推荐处理,提供:
|
|
71
|
+
- **全部修复**:`bash "$COMATE" state <name> transition verify-fail` 然后调 `/comate-build`
|
|
72
|
+
- **逐项处理**:勾选要修的项,其余接受偏差
|
|
73
|
+
- **接受偏差**:全部接受,须在报告记录每项原因和影响
|
|
74
|
+
|
|
75
|
+
3. **Spec 漂移** —— 按 Step 2b 的单选题处理(属"用户决策",必须暂停)。
|
|
76
|
+
|
|
77
|
+
> CRITICAL 自动回 build 不代表跳过用户知情:回退前必须输出清晰的失败报告作为证据。若一次验证同时含 CRITICAL 与非 CRITICAL,以 CRITICAL 优先自动回 build,非 CRITICAL 项留待修复轮次一并处理。
|
|
78
|
+
|
|
79
|
+
### 2a. 轻量验证(小改动)
|
|
80
|
+
|
|
81
|
+
规模为「小」时跳过 `openspec-verify-change`,直接执行 5 项检查:
|
|
82
|
+
1. tasks.md 全部 `[x]`
|
|
83
|
+
2. 改动文件与 tasks.md 描述一致(`git diff --stat` 对照)
|
|
84
|
+
3. 编译通过(项目构建命令)
|
|
85
|
+
4. 相关测试通过
|
|
86
|
+
5. 无明显安全问题(无硬编码密钥、无新增 unsafe)
|
|
87
|
+
|
|
88
|
+
**通过标准**:5 项全 OK,无 CRITICAL。不通过 → 进入 Step 1b。
|
|
89
|
+
|
|
90
|
+
### 2b. 完整验证(大改动)
|
|
91
|
+
|
|
92
|
+
规模为「大」时**立即使用 Skill 工具加载 `openspec-verify-change`**。检查项:tasks 全勾、实现符合 design.md 高层决策、符合 Design Doc、能力规格场景全通过、proposal 目标满足、delta spec 与 design doc 无矛盾、关联设计文档可定位。
|
|
93
|
+
|
|
94
|
+
**Spec 漂移处理**(决策阻塞点 4 的一部分):若发现 delta spec 与 design doc 矛盾,**必须以单选题 AskUserQuestion 暂停**:
|
|
95
|
+
- A:在 design doc 追加 "Implementation Divergence" 节记录偏差(属 verify 阶段允许产物,写入后不再触发 Step 1b dirty 决策)
|
|
96
|
+
- B:`state transition verify-fail` 然后调 `/comate-build` 由 Spec 增量更新规则更新
|
|
97
|
+
- C:确认偏差可接受继续(归档时 design doc 标记 `superseded-by-main-spec`)
|
|
98
|
+
|
|
99
|
+
### 3. 记录验证证据
|
|
100
|
+
|
|
101
|
+
验证报告必须落盘并记录。不要手动设 `verify_result: pass`,通过 guard 自动流转。
|
|
102
|
+
|
|
103
|
+
若本 change 有源文件追踪(`source_kind: file`),报告须声明本实现对照的知识库文档及其版本,并复核未漂移:
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
bash "$COMATE" sources <name> check # 0=未漂移 / 1=漂移 / 4=manifest 损坏
|
|
107
|
+
bash "$COMATE" sources <name> list # 列出对照的文档路径/sha256/ref,贴入报告
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
`source_kind: conversation` 时跳过(check 为无操作通过)。
|
|
111
|
+
|
|
112
|
+
```bash
|
|
113
|
+
mkdir -p docs/superpowers/reports
|
|
114
|
+
# 写报告到 docs/superpowers/reports/YYYY-MM-DD-<name>-verify.md
|
|
115
|
+
bash "$COMATE" state <name> set verification_report docs/superpowers/reports/YYYY-MM-DD-<name>-verify.md
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
确认项:全部测试通过、无硬编码密钥或安全问题。
|
|
119
|
+
|
|
120
|
+
### 4. 分支收尾(决策阻塞点 5)
|
|
121
|
+
|
|
122
|
+
**在记录验证证据后**执行分支处理,确保即使丢弃工作也不影响状态持久化。
|
|
123
|
+
|
|
124
|
+
**立即执行:** 使用 Skill 工具加载 `superpowers:finishing-a-development-branch`。不可用时停止并提示安装。
|
|
125
|
+
|
|
126
|
+
分支处理选项:本地合并 / 推送建 PR / 保持分支 / 丢弃工作。**必须使用 AskUserQuestion 工具暂停等待用户选择**。规则见 `comate/reference/decision-points.md` 第 5 条。
|
|
127
|
+
|
|
128
|
+
操作完成后写入状态:
|
|
129
|
+
|
|
130
|
+
```bash
|
|
131
|
+
bash "$COMATE" state <name> set branch_status handled
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
**重要**:无论选择哪种收尾方式(包括"丢弃工作"),都必须在分支操作完成后才设置 `branch_status: handled`。这确保 guard 检查时状态已完整记录。
|
|
135
|
+
|
|
136
|
+
## 退出条件
|
|
137
|
+
|
|
138
|
+
- 验证报告通过,分支已处理
|
|
139
|
+
- `verification_report` 指向真实文件,`branch_status: handled`
|
|
140
|
+
- `impl_hash` 与当前 plan+tasks 一致(guard 强制)
|
|
141
|
+
- **阶段守卫**:`bash "$COMATE" guard <name> verify --apply` 全 PASS 后经 `verify-pass` 自动流转到 `phase: archive`
|
|
142
|
+
|
|
143
|
+
```bash
|
|
144
|
+
bash "$COMATE" guard <name> verify --apply
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
## 上下文压缩恢复
|
|
148
|
+
|
|
149
|
+
```bash
|
|
150
|
+
bash "$COMATE" state <name> recover verify
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
## 自动流转
|
|
154
|
+
|
|
155
|
+
> **REQUIRED NEXT SKILL:** 调用 `comate-archive` skill 进入归档。
|