@house365/comate 0.9.2 → 0.9.4
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 +4 -0
- package/bin/init.mjs +5 -10
- package/package.json +1 -1
- package/skills/comate/reference/decision-points.md +27 -1
- package/skills/comate/scripts/comate-lib.sh +1 -0
- package/skills/comate/scripts/comate.sh +3 -1
- package/skills/comate-fix/SKILL.md +4 -2
- package/skills/comate-gate/SKILL.md +12 -3
- package/skills/comate-open/SKILL.md +28 -15
- package/skills/comate-verify/SKILL.md +18 -9
package/README.md
CHANGED
package/bin/init.mjs
CHANGED
|
@@ -149,26 +149,21 @@ function openSpecState() {
|
|
|
149
149
|
return { status: atLeast(version, MIN_OPENSPEC) ? 'ready' : 'outdated', version };
|
|
150
150
|
}
|
|
151
151
|
|
|
152
|
-
//
|
|
153
|
-
//
|
|
154
|
-
//
|
|
155
|
-
// entry skill and the stable marker.
|
|
156
|
-
// Claude Code — installs it as a plugin under plugins/{cache,data}/.
|
|
152
|
+
// Only detect skills CLI installation (flattens obra/superpowers into one dir
|
|
153
|
+
// per skill). Claude Code plugin cache (plugins/{cache,data}/) is not a real
|
|
154
|
+
// user-level install and should not count.
|
|
157
155
|
const SUPERPOWERS_MARKERS = [
|
|
158
156
|
['using-superpowers'],
|
|
159
157
|
['brainstorming'],
|
|
160
|
-
['superpowers'],
|
|
161
|
-
['superpowers-claude-plugins-official'],
|
|
162
|
-
['cache', 'claude-plugins-official', 'superpowers'],
|
|
163
158
|
];
|
|
164
159
|
|
|
165
160
|
function superpowersInstalled(scope) {
|
|
166
161
|
const home = process.env.HOME ?? process.env.USERPROFILE ?? '';
|
|
167
162
|
const roots =
|
|
168
163
|
scope === 'global'
|
|
169
|
-
? ['.agents/skills', '.claude/skills', '.
|
|
164
|
+
? ['.agents/skills', '.claude/skills', '.config/skills', '.cursor/skills']
|
|
170
165
|
.map((r) => join(home, r))
|
|
171
|
-
: ['.agents/skills', '.claude/skills', '.
|
|
166
|
+
: ['.agents/skills', '.claude/skills', '.cursor/skills', '.codex/skills'];
|
|
172
167
|
return roots.some((root) => SUPERPOWERS_MARKERS.some((m) => existsSync(join(root, ...m))));
|
|
173
168
|
}
|
|
174
169
|
|
package/package.json
CHANGED
|
@@ -29,7 +29,13 @@
|
|
|
29
29
|
- 推荐规则只能用于在问题里说明建议,不能代替用户拍板。
|
|
30
30
|
- 其他无歧义的阶段流转、以及经判定属"自动处理"的节点,必须自动进行,不得中途退出,也不得为其伪造一次用户确认。
|
|
31
31
|
|
|
32
|
-
##
|
|
32
|
+
## 决策阻塞点清单
|
|
33
|
+
|
|
34
|
+
以下是 comate 全流程中**核心决策点**的规范定义。各阶段 SKILL 用一行引用本文件的某一条,而不重复叙述规则,避免措辞漂移。
|
|
35
|
+
|
|
36
|
+
**本清单不穷举所有决策场景**——仅列出跨阶段、高频、影响流转的关键决策点。各 skill 内还有局部决策(如命名确认、dirty worktree 归因、PRD 选择等),由该 skill 自行定义并遵循本文首节的三类框架。
|
|
37
|
+
|
|
38
|
+
## 核心决策点(跨阶段 / 流转关键)
|
|
33
39
|
|
|
34
40
|
1. **开题产物审视确认**(open)
|
|
35
41
|
proposal/design/tasks 三件套完成且内容完整后,**先按来源分类,再决定是否阻塞**(对齐本文件首节三类框架):
|
|
@@ -66,6 +72,26 @@
|
|
|
66
72
|
实施中发现需要重新设计或拆分新 change 时暂停。判定基准:以 tasks.md 初始任务总数为准,新增任务超过总数一半(50% 阈值)即视为超范围,请用户决定是否拆分。中等规模(接口变更、新增组件)确认后加载 `superpowers:brainstorming` 更新设计;大规模(全新 capability)确认后用 `/comate-open` 拆独立 change。
|
|
67
73
|
引用:`comate-build` Step 4。
|
|
68
74
|
|
|
75
|
+
## 其他决策场景(局部 / 特定 skill)
|
|
76
|
+
|
|
77
|
+
以下决策点由特定 skill 自行定义,同样遵循本文首节的三类框架,但不属于跨阶段核心流转:
|
|
78
|
+
|
|
79
|
+
### Gate 阶段(comate-gate)
|
|
80
|
+
- **PRD 命名规范确认**:PRD 不符合命名规范时,AskUserQuestion 确认改名或拒绝
|
|
81
|
+
- **PRD 未定稿处理**:PRD 标记 draft/WIP 时,确认是否继续评审
|
|
82
|
+
- **阻断问题处理策略**:`blocking_open > 0` 时选择:先补 PRD / 授权带 TBD 继续 / 深度澄清 / 暂停
|
|
83
|
+
- **拆分粒度与映射**(决策点 6 已列入核心):功能项 → change 的映射由用户确认
|
|
84
|
+
|
|
85
|
+
### Open 阶段(comate-open)
|
|
86
|
+
- **继续已有 change / 新建**:顶层探测到活跃 change 时,确认继续还是新建
|
|
87
|
+
- **Change 命名确认**:必须用用户指定或经 AskUserQuestion 确认的名称,不得自动生成
|
|
88
|
+
|
|
89
|
+
### Build 阶段(comate-build)
|
|
90
|
+
- **Dirty worktree 归因**:脏工作树按 `dirty-worktree.md` 协议分类后,不属于当前 change 或来源不确定时需要用户裁定:并入 / 拆分 / 保留 / 丢弃
|
|
91
|
+
|
|
92
|
+
### Verify 阶段(comate-verify)
|
|
93
|
+
- 已列入核心决策点 4、5
|
|
94
|
+
|
|
69
95
|
## Red Flags — 出现这些念头就停下来检查
|
|
70
96
|
|
|
71
97
|
| Agent 的念头 | 实际风险 |
|
|
@@ -978,7 +978,8 @@ guard() {
|
|
|
978
978
|
_guard_check "Design Doc declares technical-design role" _g_design_doc_role
|
|
979
979
|
_guard_check "Design Doc declares canonical_spec: openspec" _g_design_doc_canonical
|
|
980
980
|
else
|
|
981
|
-
|
|
981
|
+
# Design Doc is required for full workflow moving to build
|
|
982
|
+
_guard_check "Design Doc recorded (design_doc field)" false
|
|
982
983
|
fi
|
|
983
984
|
;;
|
|
984
985
|
build)
|
|
@@ -1381,6 +1382,7 @@ score: null
|
|
|
1381
1382
|
blocking_open: null
|
|
1382
1383
|
review_report: $report
|
|
1383
1384
|
spawned_changes: null
|
|
1385
|
+
changes_map: null
|
|
1384
1386
|
gated_at: null
|
|
1385
1387
|
created_at: $(today)
|
|
1386
1388
|
EOF
|
|
@@ -138,13 +138,15 @@ Fix 为**一次性连续执行**。调用后在自有步骤间自动推进,但
|
|
|
138
138
|
| 需新增 capability | 超出局部优化 |
|
|
139
139
|
| 需 delta spec | 影响已有规格 |
|
|
140
140
|
|
|
141
|
-
**必须使用 AskUserQuestion
|
|
141
|
+
**必须使用 AskUserQuestion 工具暂停确认升级**。用户确认后**先回退到 open 阶段并更新 workflow**,再走完整流程:
|
|
142
142
|
|
|
143
143
|
```bash
|
|
144
|
+
bash "$COMATE" state <name> set phase open
|
|
144
145
|
bash "$COMATE" state <name> set workflow full
|
|
146
|
+
bash "$COMATE" state <name> transition open-complete
|
|
145
147
|
```
|
|
146
148
|
|
|
147
|
-
|
|
149
|
+
此时 phase 已转换到 `design`(因为 workflow 是 full),然后**立即加载 `comate-design` skill** 补 Design Doc。用户不确认则停止 fix 并报告超出适用范围。
|
|
148
150
|
|
|
149
151
|
## 退出条件
|
|
150
152
|
|
|
@@ -191,7 +191,18 @@ bash "$COMATE" gate <prd> set blocking_open <未关闭阻断数>
|
|
|
191
191
|
- 是一功能项一 change 还是合并;
|
|
192
192
|
- 各 change 命名(默认取主功能项名,用户可改)。
|
|
193
193
|
|
|
194
|
-
**映射确认前不得建任何 change。**
|
|
194
|
+
**映射确认前不得建任何 change。** 确认后:
|
|
195
|
+
|
|
196
|
+
1. **立即持久化映射到 gate.yaml**,使其成为机器可验证事实:
|
|
197
|
+
|
|
198
|
+
```bash
|
|
199
|
+
# changes_map 格式:changeA:功能项1,2,3;changeB:功能项4,5
|
|
200
|
+
bash "$COMATE" gate <prd> set changes_map "changeA:功能项1,2,3;changeB:功能项4,5"
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
2. 用 **TaskCreate** 把每个待建 change 建成任务项。
|
|
204
|
+
|
|
205
|
+
3. 多 change 时,在 PRD 同目录建 `CHANGES-MAP.md` 作为人类可读备份,内容与 `changes_map` 字段一致。
|
|
195
206
|
|
|
196
207
|
### 5. 通过门禁
|
|
197
208
|
|
|
@@ -223,8 +234,6 @@ bash "$COMATE" gate <prd> spawned <change-name>
|
|
|
223
234
|
|
|
224
235
|
若门禁是 `passed-with-tbd`,在该 change 的 proposal/design 受影响处标 **「⚠ 待确认」** 并引用评审报告。
|
|
225
236
|
|
|
226
|
-
多 change 时,在 PRD 同目录建 `CHANGES-MAP.md` 记录「功能项 → change」映射,便于回溯。
|
|
227
|
-
|
|
228
237
|
### 7. 收尾
|
|
229
238
|
|
|
230
239
|
展示:
|
|
@@ -15,7 +15,28 @@ description: "comate 阶段 1:开题。用 /comate-open 调用。通过 OpenSp
|
|
|
15
15
|
|
|
16
16
|
**立即执行:** 使用 Skill 工具加载 `openspec-explore` 技能。禁止跳过。加载后按其指引自由探索问题空间。
|
|
17
17
|
|
|
18
|
-
### 2.
|
|
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 结构 + 初始化状态
|
|
19
40
|
|
|
20
41
|
**立即执行:** 使用 Skill 工具加载 `openspec-new-change` 技能。若用户意图未明确、需先形成建议,改为加载 `openspec-propose`。禁止跳过。
|
|
21
42
|
|
|
@@ -42,10 +63,9 @@ if [ -z "$COMATE" ]; then
|
|
|
42
63
|
return 1 2>/dev/null || exit 1
|
|
43
64
|
fi
|
|
44
65
|
|
|
45
|
-
bash "$COMATE" state <name> init full
|
|
46
66
|
```
|
|
47
67
|
|
|
48
|
-
###
|
|
68
|
+
### 3b. 判定需求来源(源文件追踪)
|
|
49
69
|
|
|
50
70
|
`state init` 默认写入 `source_kind: conversation`、`source_manifest: null`(需求由对话产生)。
|
|
51
71
|
|
|
@@ -59,24 +79,17 @@ bash "$COMATE" sources <name> track docs/knowledge-base/<path>.md --note "<可
|
|
|
59
79
|
- 仅 `docs/knowledge-base/` 范围内的文件可追踪;范围外文件会被跳过并提示,`source_kind` 保持 `conversation`,不影响流程。
|
|
60
80
|
- 边追踪边产生:若开题时为对话来源、设计中途才拿到知识库文档,后续任意阶段补 `sources <name> track` 即可,无需回到 open。
|
|
61
81
|
|
|
62
|
-
###
|
|
63
|
-
|
|
64
|
-
若本 change **来自一份原始 PRD**(用户经 `/comate-gate` 拆分而来,或直接指定了来源 PRD),在创建 change 结构**之前**必须先过门禁守卫:
|
|
65
|
-
|
|
66
|
-
```bash
|
|
67
|
-
bash "$COMATE" gate <prd路径> check
|
|
68
|
-
```
|
|
82
|
+
### 3c. PRD 扇出记录(从 PRD 建 change 时必须登记)
|
|
69
83
|
|
|
70
|
-
|
|
71
|
-
- **BLOCK(exit 1)**:门禁不存在 / 未通过 / PRD 通过后被改(stale)。**不得创建 change**,停止并提示用户先跑 `/comate-gate` 对该 PRD 过门禁。
|
|
72
|
-
|
|
73
|
-
建成后把该 change 记回门禁:
|
|
84
|
+
若本 change 来自 PRD,在创建完成后把该 change 记回门禁:
|
|
74
85
|
|
|
75
86
|
```bash
|
|
76
87
|
bash "$COMATE" gate <prd路径> spawned <name>
|
|
77
88
|
```
|
|
78
89
|
|
|
79
|
-
|
|
90
|
+
此步将 change 名称追加到 `<PRD>.gate.yaml` 的 `spawned_changes` 列表,用于追溯 PRD → change 的完整扇出关系。
|
|
91
|
+
|
|
92
|
+
需求**来自对话**时跳过本步。
|
|
80
93
|
|
|
81
94
|
### 3. 入口状态验证
|
|
82
95
|
|
|
@@ -96,15 +96,7 @@ git diff --stat "$BASE_REF"...HEAD
|
|
|
96
96
|
- B:`state transition verify-fail` 然后调 `/comate-build` 由 Spec 增量更新规则更新
|
|
97
97
|
- C:确认偏差可接受继续(归档时 design doc 标记 `superseded-by-main-spec`)
|
|
98
98
|
|
|
99
|
-
### 3.
|
|
100
|
-
|
|
101
|
-
**立即执行:** 使用 Skill 工具加载 `superpowers:finishing-a-development-branch`。不可用时停止并提示安装。
|
|
102
|
-
|
|
103
|
-
分支处理选项:本地合并 / 推送建 PR / 保持分支 / 丢弃。**必须使用 AskUserQuestion 工具暂停等待用户选择**。规则见 `comate/reference/decision-points.md` 第 5 条。仅在用户选择且操作完成后才写 `branch_status: handled`。
|
|
104
|
-
|
|
105
|
-
确认项:全部测试通过、无硬编码密钥或安全问题。
|
|
106
|
-
|
|
107
|
-
### 4. 记录验证证据
|
|
99
|
+
### 3. 记录验证证据
|
|
108
100
|
|
|
109
101
|
验证报告必须落盘并记录。不要手动设 `verify_result: pass`,通过 guard 自动流转。
|
|
110
102
|
|
|
@@ -121,9 +113,26 @@ bash "$COMATE" sources <name> list # 列出对照的文档路径/sha25
|
|
|
121
113
|
mkdir -p docs/superpowers/reports
|
|
122
114
|
# 写报告到 docs/superpowers/reports/YYYY-MM-DD-<name>-verify.md
|
|
123
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
|
|
124
131
|
bash "$COMATE" state <name> set branch_status handled
|
|
125
132
|
```
|
|
126
133
|
|
|
134
|
+
**重要**:无论选择哪种收尾方式(包括"丢弃工作"),都必须在分支操作完成后才设置 `branch_status: handled`。这确保 guard 检查时状态已完整记录。
|
|
135
|
+
|
|
127
136
|
## 退出条件
|
|
128
137
|
|
|
129
138
|
- 验证报告通过,分支已处理
|