@house365/comate 0.10.0 → 0.10.2

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.
@@ -1,41 +1,41 @@
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
-
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
39
  ### 3. 创建 Change 结构 + 初始化状态
40
40
 
41
41
  #### Gate 扇出骨架模式
@@ -53,101 +53,101 @@ bash "$COMATE" gate <prd路径> check
53
53
  骨架模式不执行 Step 4 后的 `phase_step` 记录、Step 5 产物确认、open guard 或本文“自动流转”;**不得**在同一次 gate 调用中加载 `comate-design`。下一项由 gate 根据 `fanout-status` 的 `missing` 列表继续处理。
54
54
 
55
55
  若不是 gate 扇出调用,保持普通 open 流程并按本文退出条件进入 design。
56
-
57
- **立即执行:** 使用 Skill 工具加载 `openspec-new-change` 技能。若用户意图未明确、需先形成建议,改为加载 `openspec-propose`。禁止跳过。
58
-
59
- **命名与范围守卫**:change name 必须用用户指定或经 AskUserQuestion 确认的名称,不得自动生成或推断。变更范围必须与用户描述一致,不得自行扩大或缩小。
60
-
61
- 确认产物已创建:
62
-
63
- ```
64
- openspec/changes/<name>/
65
- ├── .openspec.yaml
66
- ├── proposal.md # Why + What:问题、目标、范围、非目标
67
- ├── design.md # How(高层):架构决策、方案选型、数据流
68
- └── tasks.md # 任务清单(勾选框)
69
- ```
70
-
71
- 定位 comate 脚本并初始化 `.comate.yaml`:
72
-
73
- ```bash
74
- 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
75
- [ -d "$r" ] && find "$r" -maxdepth 6 -path '*/comate/scripts/comate.sh' -type f -print -quit 2>/dev/null
76
- done | head -1)}"
77
- if [ -z "$COMATE" ]; then
78
- echo "ERROR: comate.sh 未找到,请确认 comate skill 已安装。" >&2
79
- return 1 2>/dev/null || exit 1
80
- fi
81
-
56
+
57
+ **立即执行:** 使用 Skill 工具加载 `openspec-new-change` 技能。若用户意图未明确、需先形成建议,改为加载 `openspec-propose`。禁止跳过。
58
+
59
+ **命名与范围守卫**:change name 必须用用户指定或经 AskUserQuestion 确认的名称,不得自动生成或推断。变更范围必须与用户描述一致,不得自行扩大或缩小。
60
+
61
+ 确认产物已创建:
62
+
63
+ ```
64
+ openspec/changes/<name>/
65
+ ├── .openspec.yaml
66
+ ├── proposal.md # Why + What:问题、目标、范围、非目标
67
+ ├── design.md # How(高层):架构决策、方案选型、数据流
68
+ └── tasks.md # 任务清单(勾选框)
69
+ ```
70
+
71
+ 定位 comate 脚本并初始化 `.comate.yaml`:
72
+
73
+ ```bash
74
+ 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
75
+ [ -d "$r" ] && find "$r" -maxdepth 6 -path '*/comate/scripts/comate.sh' -type f -print -quit 2>/dev/null
76
+ done | head -1)}"
77
+ if [ -z "$COMATE" ]; then
78
+ echo "ERROR: comate.sh 未找到,请确认 comate skill 已安装。" >&2
79
+ return 1 2>/dev/null || exit 1
80
+ fi
81
+
82
82
  bash "$COMATE" state <name> init full
83
83
  ```
84
84
 
85
85
  这会创建 `openspec/changes/<name>/.comate.yaml`,初始状态:`workflow: full`, `phase: open`, `phase_step: null`。
86
86
 
87
87
  **恢复规则**:若 change 目录或 `.comate.yaml` 已存在,逐项检查并补齐缺失产物;`.comate.yaml` 存在时跳过 `state init`。这覆盖“骨架已创建但尚未 gate spawned”中断点,完成校验后直接补登记。
88
-
89
- ### 3b. 判定需求来源(源文件追踪)
90
-
91
- `state init` 默认写入 `source_kind: conversation`、`source_manifest: null`(需求由对话产生)。
92
-
93
- 若本次需求来自 `docs/knowledge-base/` 下的一份或多份知识库文档,追踪它们以支持后续双向排查:
94
-
95
- ```bash
96
- bash "$COMATE" sources <name> track docs/knowledge-base/<path>.md --note "<可选说明>"
97
- ```
98
-
99
- - 追踪成功后 `source_kind` 自动改为 `file`,并在 `openspec/changes/<name>/.comate/sources.manifest` 钉住每个文件当时的 sha256 与 commit ref。
100
- - 仅 `docs/knowledge-base/` 范围内的文件可追踪;范围外文件会被跳过并提示,`source_kind` 保持 `conversation`,不影响流程。
101
- - 边追踪边产生:若开题时为对话来源、设计中途才拿到知识库文档,后续任意阶段补 `sources <name> track` 即可,无需回到 open。
102
-
103
- ### 3c. PRD 扇出记录(从 PRD 建 change 时必须登记)
104
-
88
+
89
+ ### 3b. 判定需求来源(源文件追踪)
90
+
91
+ `state init` 默认写入 `source_kind: conversation`、`source_manifest: null`(需求由对话产生)。
92
+
93
+ 若本次需求来自 `docs/knowledge-base/` 下的一份或多份知识库文档,追踪它们以支持后续双向排查:
94
+
95
+ ```bash
96
+ bash "$COMATE" sources <name> track docs/knowledge-base/<path>.md --note "<可选说明>"
97
+ ```
98
+
99
+ - 追踪成功后 `source_kind` 自动改为 `file`,并在 `openspec/changes/<name>/.comate/sources.manifest` 钉住每个文件当时的 sha256 与 commit ref。
100
+ - 仅 `docs/knowledge-base/` 范围内的文件可追踪;范围外文件会被跳过并提示,`source_kind` 保持 `conversation`,不影响流程。
101
+ - 边追踪边产生:若开题时为对话来源、设计中途才拿到知识库文档,后续任意阶段补 `sources <name> track` 即可,无需回到 open。
102
+
103
+ ### 3c. PRD 扇出记录(从 PRD 建 change 时必须登记)
104
+
105
105
  若本 change 来自 PRD,在创建、源追踪和完整性校验全部完成后,把该 change 记回门禁:
106
-
107
- ```bash
108
- bash "$COMATE" gate <prd路径> spawned <name>
109
- ```
110
-
106
+
107
+ ```bash
108
+ bash "$COMATE" gate <prd路径> spawned <name>
109
+ ```
110
+
111
111
  此步将 change 名称追加到 `<PRD>.gate.yaml` 的 `spawned_changes` 列表,用于追溯 PRD → change 的完整扇出关系。不得在文件不完整或源追踪前提前登记。
112
-
113
- 需求**来自对话**时跳过本步。
114
-
115
- ### 3. 入口状态验证与幂等性检查
116
-
117
- ```bash
118
- bash "$COMATE" state <name> check open
119
- ```
120
-
121
- 验证通过后继续 Step 4。失败时脚本输出具体原因。
122
-
123
- **幂等性检查**:
124
-
125
- 1. 读取 `.comate.yaml` 的 `phase`、`phase_step`、workflow、以及三件套文件路径
126
-
127
- 2. **已完成 Step 5(产物已审视确认)** 的判定条件:
112
+
113
+ 需求**来自对话**时跳过本步。
114
+
115
+ ### 3. 入口状态验证与幂等性检查
116
+
117
+ ```bash
118
+ bash "$COMATE" state <name> check open
119
+ ```
120
+
121
+ 验证通过后继续 Step 4。失败时脚本输出具体原因。
122
+
123
+ **幂等性检查**:
124
+
125
+ 1. 读取 `.comate.yaml` 的 `phase`、`phase_step`、workflow、以及三件套文件路径
126
+
127
+ 2. **已完成 Step 5(产物已审视确认)** 的判定条件:
128
128
  - `phase_step` 值为 `open.review-confirmed`(旧版 `5-confirmed` 兼容一次)
129
- - 或 `phase` 已经不是 `open`(说明已流转到下一阶段)
130
-
131
- 3. **幂等分支**:
132
- - **已完成 Step 5** → 跳过所有步骤,说明「开题已完成,三件套已确认」,直接检查退出条件(guard)
133
- - **未完成 Step 5** → 检查三件套是否存在:
134
- - 三件套全部存在且非空 → 跳到 Step 4(内容完整性检查)
135
- - 任一文件缺失或为空 → 从 Step 1 开始(如果是首次)或 Step 3b/3c(如果是 PRD 来源)
136
-
137
- 4. **断点恢复**(根据 `phase_step` 值):
129
+ - 或 `phase` 已经不是 `open`(说明已流转到下一阶段)
130
+
131
+ 3. **幂等分支**:
132
+ - **已完成 Step 5** → 跳过所有步骤,说明「开题已完成,三件套已确认」,直接检查退出条件(guard)
133
+ - **未完成 Step 5** → 检查三件套是否存在:
134
+ - 三件套全部存在且非空 → 跳到 Step 4(内容完整性检查)
135
+ - 任一文件缺失或为空 → 从 Step 1 开始(如果是首次)或 Step 3b/3c(如果是 PRD 来源)
136
+
137
+ 4. **断点恢复**(根据 `phase_step` 值):
138
138
  - `phase_step` 为 `open.artifacts-created` → 从 Step 4 开始
139
139
  - `phase_step` 为 `open.review-awaiting`(或旧版 `4`)→ 恢复 Step 5 的用户确认,并改写为新格式
140
140
  - `phase_step` 为 `open.review-confirmed`(或旧版 `5-confirmed`)→ 见第 3 点幂等分支
141
-
141
+
142
142
  5. **open 阶段特点**:open 阶段的所有操作(explore、创建三件套、状态初始化)可安全重复执行。但**产物审视(Step 5)的用户确认不可重复**,一旦 `phase_step: open.review-confirmed` 被记录,即使上下文压缩也不得重新要求用户确认。
143
-
144
- ### 4. 内容完整性检查
145
-
143
+
144
+ ### 4. 内容完整性检查
145
+
146
146
  逐个确认三个文件路径存在且非空:
147
- - **proposal.md**:问题背景、目标、范围、非目标
148
- - **design.md**:高层架构决策、方案选型、数据流
149
- - **tasks.md**:任务列表,每个任务有明确描述
150
-
147
+ - **proposal.md**:问题背景、目标、范围、非目标
148
+ - **design.md**:高层架构决策、方案选型、数据流
149
+ - **tasks.md**:任务列表,每个任务有明确描述
150
+
151
151
  任一文件缺失或为空时,不得进入 Step 5 或执行守卫,必须回创建步骤补充。
152
152
 
153
153
  完整性检查通过后记录:
@@ -155,42 +155,42 @@ bash "$COMATE" state <name> check open
155
155
  ```bash
156
156
  bash "$COMATE" state <name> set phase_step open.artifacts-created
157
157
  ```
158
-
159
- ### 5. 产物审视(决策阻塞点 1,按来源分类)
160
-
161
- 三件套完成且 Step 4 完整性检查通过后,**先按来源分类,再决定是否需要用户输入**。规则见 `comate/reference/decision-points.md` 第 1 条。
162
-
163
- #### 5a. 判定是否属"PRD 扇出且范围一致"(可自动流转)
164
-
165
- 同时满足以下**全部**条件时,本决策点降级为自动流转,**不 AskUserQuestion**:
166
-
167
- 1. `source_kind: file`(本 change 追踪了源文件);
168
- 2. 追踪的源是一份 PRD,且 `bash "$COMATE" gate <prd路径> check` 返回 PASS(exit 0)——即门禁 `passed`/`passed-with-tbd` 且 PRD 哈希未漂移。PRD 路径从 `sources <name> list` 或 Step 3c 的上下文取得;
169
- 3. change 名已记入该 PRD 的 `spawned_changes`(Step 3c 的 `gate spawned` 已执行,通常由 `/comate-gate` 备妥);
170
- 4. **范围一致性自检**:proposal 的目标/范围/非目标忠实承接 gate 映射里本 change 认领的功能项——没有擅自扩大或缩小、没有认领未分配的功能项、没有漏掉已分配项。
171
-
172
- 四条全成立时:范围/映射/命名已在决策点 6 由用户拍板,三件套只是承接,无新的有效选项。
173
-
174
- **自动流转处理**:
175
-
176
- 1. **记录自动确认状态**:
177
- ```bash
158
+
159
+ ### 5. 产物审视(决策阻塞点 1,按来源分类)
160
+
161
+ 三件套完成且 Step 4 完整性检查通过后,**先按来源分类,再决定是否需要用户输入**。规则见 `comate/reference/decision-points.md` 第 1 条。
162
+
163
+ #### 5a. 判定是否属"PRD 扇出且范围一致"(可自动流转)
164
+
165
+ 同时满足以下**全部**条件时,本决策点降级为自动流转,**不 AskUserQuestion**:
166
+
167
+ 1. `source_kind: file`(本 change 追踪了源文件);
168
+ 2. 追踪的源是一份 PRD,且 `bash "$COMATE" gate <prd路径> check` 返回 PASS(exit 0)——即门禁 `passed`/`passed-with-tbd` 且 PRD 哈希未漂移。PRD 路径从 `sources <name> list` 或 Step 3c 的上下文取得;
169
+ 3. change 名已记入该 PRD 的 `spawned_changes`(Step 3c 的 `gate spawned` 已执行,通常由 `/comate-gate` 备妥);
170
+ 4. **范围一致性自检**:proposal 的目标/范围/非目标忠实承接 gate 映射里本 change 认领的功能项——没有擅自扩大或缩小、没有认领未分配的功能项、没有漏掉已分配项。
171
+
172
+ 四条全成立时:范围/映射/命名已在决策点 6 由用户拍板,三件套只是承接,无新的有效选项。
173
+
174
+ **自动流转处理**:
175
+
176
+ 1. **记录自动确认状态**:
177
+ ```bash
178
178
  bash "$COMATE" state <name> set phase_step open.review-confirmed
179
- ```
180
-
181
- 2. **如实报告**:「本 change 承接自 PRD <prd-name>,认领功能项:<列出项>。已核对范围与映射一致,自动进入下一阶段。」
182
-
183
- 3. 直接进入退出条件执行守卫流转
184
-
185
- #### 5b. 需要用户输入的两种情形(AskUserQuestion 阻塞)
186
-
187
- - **对话来源**(`source_kind: conversation`):范围此前未经用户拍板,三件套第一次成形。
188
- - **PRD 扇出但 5a 第 4 条不成立**(范围与映射有偏差):分歧重新出现。
189
-
179
+ ```
180
+
181
+ 2. **如实报告**:「本 change 承接自 PRD <prd-name>,认领功能项:<列出项>。已核对范围与映射一致,自动进入下一阶段。」
182
+
183
+ 3. 直接进入退出条件执行守卫流转
184
+
185
+ #### 5b. 需要用户输入的两种情形(AskUserQuestion 阻塞)
186
+
187
+ - **对话来源**(`source_kind: conversation`):范围此前未经用户拍板,三件套第一次成形。
188
+ - **PRD 扇出但 5a 第 4 条不成立**(范围与映射有偏差):分歧重新出现。
189
+
190
190
  以上任一情形,**必须使用 AskUserQuestion 工具暂停等待用户确认**。以单选题呈现摘要(proposal 问题/目标/范围、design 架构决策/选型、tasks 数量与关键任务;PRD 偏差场景额外列出偏差点)和选项:
191
- - 「确认,继续下一阶段」— 记录确认状态后执行守卫流转
192
- - 「需要调整」— 附调整说明(PRD 偏差场景默认建议按映射修正),修改后重新请求确认
193
-
191
+ - 「确认,继续下一阶段」— 记录确认状态后执行守卫流转
192
+ - 「需要调整」— 附调整说明(PRD 偏差场景默认建议按映射修正),修改后重新请求确认
193
+
194
194
  **提问前先持久化等待状态**:
195
195
 
196
196
  ```bash
@@ -198,33 +198,33 @@ bash "$COMATE" state <name> set phase_step open.review-awaiting
198
198
  ```
199
199
 
200
200
  **用户确认后立即记录**:
201
-
202
- ```bash
201
+
202
+ ```bash
203
203
  bash "$COMATE" state <name> set phase_step open.review-confirmed
204
- ```
205
-
206
- 然后继续执行退出条件(guard)。
207
-
204
+ ```
205
+
206
+ 然后继续执行退出条件(guard)。
207
+
208
208
  ## 退出条件
209
209
 
210
210
  以下退出条件仅适用于普通 open;gate 扇出骨架模式使用 Step 3 的专用返回条件。
211
-
212
- - 三件套已创建且内容完整
213
- - **用户已确认**
214
- - **阶段守卫**:运行 `bash "$COMATE" guard <name> open --apply`,全 PASS 后自动流转
215
-
216
- 退出前必须 `--apply`,否则 `.comate.yaml` 停留在 `phase: open`,下阶段入口检查会失败。
217
-
218
- ```bash
219
- bash "$COMATE" guard <name> open --apply
220
- ```
221
-
222
- full 流程自动更新为 `phase: design`;fix 预设自动更新为 `phase: build`。
223
-
211
+
212
+ - 三件套已创建且内容完整
213
+ - **用户已确认**
214
+ - **阶段守卫**:运行 `bash "$COMATE" guard <name> open --apply`,全 PASS 后自动流转
215
+
216
+ 退出前必须 `--apply`,否则 `.comate.yaml` 停留在 `phase: open`,下阶段入口检查会失败。
217
+
218
+ ```bash
219
+ bash "$COMATE" guard <name> open --apply
220
+ ```
221
+
222
+ full 流程自动更新为 `phase: design`;fix 预设自动更新为 `phase: build`。
223
+
224
224
  ## 自动流转
225
225
 
226
226
  仅普通 open 在用户确认后自动流转:
227
-
228
- > **REQUIRED NEXT SKILL(完整流程):** 调用 `comate-design` skill 进入深度设计。
229
- >
230
- > fix 预设由 `/comate-fix` skill 控制后续流转(phase 直接进 build),不经过本节。
227
+
228
+ > **REQUIRED NEXT SKILL(完整流程):** 调用 `comate-design` skill 进入深度设计。
229
+ >
230
+ > fix 预设由 `/comate-fix` skill 控制后续流转(phase 直接进 build),不经过本节。