@house365/comate 0.9.2 → 0.9.3
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 -102
- 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 -77
- package/skills/comate/reference/dirty-worktree.md +58 -58
- package/skills/comate/reference/prerequisites.md +89 -89
- package/skills/comate/scripts/comate-lib.sh +1 -0
- package/skills/comate/scripts/comate.sh +3 -1
- 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-fix/SKILL.md +4 -2
- package/skills/comate-gate/SKILL.md +262 -253
- 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 -144
- package/skills/comate-verify/SKILL.md +155 -146
|
@@ -1,63 +1,63 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: comate-archive
|
|
3
|
-
description: "comate 阶段 5:归档。用 /comate-archive 调用。委托 OpenSpec 合并 delta spec 并归档 change。"
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# comate 阶段 5:归档(Archive)
|
|
7
|
-
|
|
8
|
-
## 前置条件
|
|
9
|
-
|
|
10
|
-
- 验证已通过(阶段 4 完成),分支已处理
|
|
11
|
-
- `openspec/changes/<name>/.comate.yaml` 中 `verify_result: pass`
|
|
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 archive
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
### 1. 执行归档
|
|
29
|
-
|
|
30
|
-
```bash
|
|
31
|
-
bash "$COMATE" archive "<name>"
|
|
32
|
-
```
|
|
33
|
-
|
|
34
|
-
脚本自动完成:
|
|
35
|
-
1. 入口状态验证(phase=archive, verify_result=pass, archived=false)
|
|
36
|
-
2. 委托 `openspec archive <name> -y` 合并 delta spec 到主 spec;无 delta spec 时使用 `--skip-specs`
|
|
37
|
-
3. Design doc 前置元数据标注(archived-with, status: final),并把正文中指向 `openspec/changes/<name>/` 的引用重写为归档路径
|
|
38
|
-
4. Plan 前置元数据标注(archived-with),同样重写正文 OpenSpec 路径引用
|
|
39
|
-
5. 由 OpenSpec 移动 change 到 `openspec/changes/archive/YYYY-MM-DD-<name>/`
|
|
40
|
-
6. 通过 `state transition <archive-name> archived` 设 `archived: true`
|
|
41
|
-
7. 重写归档后 `.comate.yaml` 中随 change 移动的自指字段(`source_manifest` / `handoff_context` / `impl_context`)指向新归档路径,使 `sources <name> check/list` 等命令对归档 change 仍可用
|
|
42
|
-
|
|
43
|
-
非零退出码 → 报告错误并停止。零退出码 → 归档完成。摘要 `X/Y steps succeeded` 以真实执行步骤计数。
|
|
44
|
-
|
|
45
|
-
需预览不实际执行:加 `--dry-run`。
|
|
46
|
-
|
|
47
|
-
### 2. 生命周期闭环
|
|
48
|
-
|
|
49
|
-
```
|
|
50
|
-
brainstorming → delta spec → 实施 → 验证 → OpenSpec 合并主 spec → design doc 标注 → 归档
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
## 退出条件
|
|
54
|
-
|
|
55
|
-
- 归档脚本退出码 0
|
|
56
|
-
- 归档目录 `openspec/changes/archive/YYYY-MM-DD-<name>/` 存在
|
|
57
|
-
- 归档后 `.comate.yaml` 中 `archived: true`
|
|
58
|
-
|
|
59
|
-
归档成功后**不要再对原 change 名跑 guard**,原活跃目录已不存在。
|
|
60
|
-
|
|
61
|
-
## 完成
|
|
62
|
-
|
|
63
|
-
comate 流程全部完成。如需开始新工作,调用 `/comate` 或 `/comate-open`。
|
|
1
|
+
---
|
|
2
|
+
name: comate-archive
|
|
3
|
+
description: "comate 阶段 5:归档。用 /comate-archive 调用。委托 OpenSpec 合并 delta spec 并归档 change。"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# comate 阶段 5:归档(Archive)
|
|
7
|
+
|
|
8
|
+
## 前置条件
|
|
9
|
+
|
|
10
|
+
- 验证已通过(阶段 4 完成),分支已处理
|
|
11
|
+
- `openspec/changes/<name>/.comate.yaml` 中 `verify_result: pass`
|
|
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 archive
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
### 1. 执行归档
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
bash "$COMATE" archive "<name>"
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
脚本自动完成:
|
|
35
|
+
1. 入口状态验证(phase=archive, verify_result=pass, archived=false)
|
|
36
|
+
2. 委托 `openspec archive <name> -y` 合并 delta spec 到主 spec;无 delta spec 时使用 `--skip-specs`
|
|
37
|
+
3. Design doc 前置元数据标注(archived-with, status: final),并把正文中指向 `openspec/changes/<name>/` 的引用重写为归档路径
|
|
38
|
+
4. Plan 前置元数据标注(archived-with),同样重写正文 OpenSpec 路径引用
|
|
39
|
+
5. 由 OpenSpec 移动 change 到 `openspec/changes/archive/YYYY-MM-DD-<name>/`
|
|
40
|
+
6. 通过 `state transition <archive-name> archived` 设 `archived: true`
|
|
41
|
+
7. 重写归档后 `.comate.yaml` 中随 change 移动的自指字段(`source_manifest` / `handoff_context` / `impl_context`)指向新归档路径,使 `sources <name> check/list` 等命令对归档 change 仍可用
|
|
42
|
+
|
|
43
|
+
非零退出码 → 报告错误并停止。零退出码 → 归档完成。摘要 `X/Y steps succeeded` 以真实执行步骤计数。
|
|
44
|
+
|
|
45
|
+
需预览不实际执行:加 `--dry-run`。
|
|
46
|
+
|
|
47
|
+
### 2. 生命周期闭环
|
|
48
|
+
|
|
49
|
+
```
|
|
50
|
+
brainstorming → delta spec → 实施 → 验证 → OpenSpec 合并主 spec → design doc 标注 → 归档
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## 退出条件
|
|
54
|
+
|
|
55
|
+
- 归档脚本退出码 0
|
|
56
|
+
- 归档目录 `openspec/changes/archive/YYYY-MM-DD-<name>/` 存在
|
|
57
|
+
- 归档后 `.comate.yaml` 中 `archived: true`
|
|
58
|
+
|
|
59
|
+
归档成功后**不要再对原 change 名跑 guard**,原活跃目录已不存在。
|
|
60
|
+
|
|
61
|
+
## 完成
|
|
62
|
+
|
|
63
|
+
comate 流程全部完成。如需开始新工作,调用 `/comate` 或 `/comate-open`。
|
|
@@ -1,177 +1,177 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: comate-build
|
|
3
|
-
description: "comate 阶段 3:计划与构建。用 /comate-build 调用。制定计划并选择执行方式(subagent 或直接执行)实施。"
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# comate 阶段 3:计划与构建(Build)
|
|
7
|
-
|
|
8
|
-
## 前置条件
|
|
9
|
-
|
|
10
|
-
- Design Doc 已创建(阶段 2 完成)
|
|
11
|
-
- 活跃 change 存在
|
|
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 build
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
**幂等性**:build 阶段操作可安全重复。读 `phase` 确认仍在 build,读 plan 文件头的 `base-ref`,再读 tasks.md 找第一个未勾选任务继续。已提交的任务不得重复提交。
|
|
29
|
-
|
|
30
|
-
### 1. 制定计划
|
|
31
|
-
|
|
32
|
-
**立即执行:** 使用 Skill 工具加载 `superpowers:writing-plans`。禁止跳过。计划要求:
|
|
33
|
-
- 保存至 `docs/superpowers/plans/YYYY-MM-DD-<feature>.md`
|
|
34
|
-
- 引用设计文档,拆分为可执行任务
|
|
35
|
-
- **Plan 文件头必须含关联元数据**:
|
|
36
|
-
|
|
37
|
-
```yaml
|
|
38
|
-
---
|
|
39
|
-
change: <name>
|
|
40
|
-
design-doc: docs/superpowers/specs/YYYY-MM-DD-<topic>-design.md
|
|
41
|
-
base-ref: <实施前的 git rev-parse HEAD>
|
|
42
|
-
---
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
`base-ref` 用于验证阶段跨提交统计改动规模。创建计划时先 `git rev-parse HEAD` 记录。
|
|
46
|
-
|
|
47
|
-
### 2. 记录计划路径
|
|
48
|
-
|
|
49
|
-
```bash
|
|
50
|
-
bash "$COMATE" state <name> set plan docs/superpowers/plans/YYYY-MM-DD-feature.md
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
无需手动改 phase,guard 会在退出条件满足后自动流转。
|
|
54
|
-
|
|
55
|
-
### 3. 选择工作方式(决策阻塞点 3)
|
|
56
|
-
|
|
57
|
-
就工作区隔离、执行方式、TDD 模式做**一个联合决策**。规则与判定协议见 `comate/reference/decision-points.md`(先判定"三类行动",第 3 条)。
|
|
58
|
-
|
|
59
|
-
#### 3a. 能力预检(展示选项前先做)
|
|
60
|
-
|
|
61
|
-
逐维度检查当前平台/仓库实际可执行的选项,只保留可执行者:
|
|
62
|
-
|
|
63
|
-
- **isolation**(脚本枚举仅 `branch` / `worktree`)
|
|
64
|
-
- `worktree`:仅当 `superpowers:using-git-worktrees` skill 可用时保留;不可用则剔除。
|
|
65
|
-
- `branch`:始终可用(HEAD detached 时先提示用户切到实分支)。
|
|
66
|
-
- **build_mode**
|
|
67
|
-
- `subagent-driven-development`:仅当当前平台有真实后台子 agent / Task 派发能力时保留;无则剔除。
|
|
68
|
-
- `executing-plans`:始终可用。
|
|
69
|
-
- **tdd_mode**:`tdd` / `direct` 始终可用。
|
|
70
|
-
|
|
71
|
-
#### 3b. 唯一选项自动应用(属"自动处理",不阻塞)
|
|
72
|
-
|
|
73
|
-
预检后某维度只剩一个可执行选项,**直接写入并说明原因,不为它单独问用户**。例如:
|
|
74
|
-
|
|
75
|
-
- 仅 `executing-plans` 可用(无后台派发能力)→ 自动写 `build_mode: executing-plans`,说明"无后台子 agent 能力"。
|
|
76
|
-
- 仅 `branch` 可用(`using-git-worktrees` 未安装)→ 自动写 `isolation: branch`,说明"worktree skill 不可用"。
|
|
77
|
-
|
|
78
|
-
多个维度都只剩单值时,一并自动写入并逐条说明;三个维度全部只剩单值时本决策点整体跳过,直接进入 Step 3c 执行。
|
|
79
|
-
|
|
80
|
-
#### 3c. 联合决策(仍有 ≥2 有效选项的维度才问)
|
|
81
|
-
|
|
82
|
-
对仍有多个有效选项的维度,**一次 AskUserQuestion 问清全部**,选 `branch` 时**分支名也在同一次确认**,不得先问是否继续再二次追问配置或命名。已在 3b 自动写入的维度不再列入问题。每个选项附推荐理由(推荐只说明倾向,不代替用户拍板):
|
|
83
|
-
|
|
84
|
-
- **工作区隔离**:`branch` 新建分支(简单快速,≤3 文件推荐)/ `worktree` 独立工作区(需并行或当前分支有未提交工作时推荐)。
|
|
85
|
-
- **执行方式**:`subagent-driven-development`(任务 ≥3、独立、需双阶段审查)/ `executing-plans`(任务 ≤2 且无跨模块依赖,或来自 fix 预设)。
|
|
86
|
-
- **TDD 模式**:`tdd`(涉及业务逻辑/新功能/API,推荐)/ `direct`(无需测试覆盖或用户明确跳过)。
|
|
87
|
-
|
|
88
|
-
用户选择后(连同 3b 已自动应用的维度)写入:
|
|
89
|
-
|
|
90
|
-
```bash
|
|
91
|
-
bash "$COMATE" state <name> set isolation <branch|worktree>
|
|
92
|
-
bash "$COMATE" state <name> set build_mode <subagent-driven-development|executing-plans|direct>
|
|
93
|
-
bash "$COMATE" state <name> set tdd_mode <tdd|direct>
|
|
94
|
-
```
|
|
95
|
-
|
|
96
|
-
`isolation` 是脚本级硬约束,保持 `null` 时 `build → verify` 的 guard 和 `state transition build-complete` 都会失败。
|
|
97
|
-
|
|
98
|
-
`build_mode: direct` 默认仅 fix 预设使用。full 流程只有用户明确要求跳过计划执行技能、且已记录显式 override 时才允许:
|
|
99
|
-
|
|
100
|
-
```bash
|
|
101
|
-
bash "$COMATE" state <name> set direct_override true
|
|
102
|
-
bash "$COMATE" state <name> set build_mode direct
|
|
103
|
-
```
|
|
104
|
-
|
|
105
|
-
无 `direct_override: true` 时,full 流程的 `build_mode=direct` 会被 guard 和状态转换同时拦截。
|
|
106
|
-
|
|
107
|
-
**TDD 模式**:
|
|
108
|
-
|
|
109
|
-
| 选项 | 含义 | 适用场景 |
|
|
110
|
-
|------|------|---------|
|
|
111
|
-
| `tdd` | 每个任务先写失败测试再实现 | 推荐。涉及业务逻辑、新功能、API 的改动 |
|
|
112
|
-
| `direct` | 直接实现,不强制 TDD 流程 | 不需要测试覆盖的改动,或用户选择跳过测试直接写代码。fix 预设默认 `direct` |
|
|
113
|
-
|
|
114
|
-
`tdd_mode` 是脚本级硬约束,full 流程在离开 build 阶段前必须选择 `tdd` 或 `direct`,否则 guard 和 `state transition build-complete` 都会失败。
|
|
115
|
-
|
|
116
|
-
**执行隔离**:
|
|
117
|
-
- **branch**:`git checkout -b <name>`,后续在新分支工作
|
|
118
|
-
- **worktree**:必须使用 Skill 工具加载 `superpowers:using-git-worktrees` 创建隔离工作区,禁止用普通 shell 绕过;不可用时停止并提示安装。
|
|
119
|
-
|
|
120
|
-
**加载执行技能**:使用 Skill 工具加载所选技能。不可用时停止并提示安装,不要用普通对话替代。加载后按其指引执行:按计划做任务、完成 tasks.md 勾选(`- [ ]` → `- [x]`)、每个任务完成后提交代码。
|
|
121
|
-
|
|
122
|
-
**TDD 执行约束(Step 3b)**:
|
|
123
|
-
|
|
124
|
-
若 `tdd_mode: tdd`:
|
|
125
|
-
- `build_mode: executing-plans`:加载执行技能后、执行第一个任务前,**立即**使用 Skill 工具加载 `superpowers:test-driven-development` 一次,禁止跳过。之后每个任务按已加载的 Red-Green-Refactor 循环执行,不得跳过失败测试验证阶段,后续任务不重复加载。上下文压缩恢复后重新加载一次,再从第一个未勾选任务继续。
|
|
126
|
-
- `build_mode: subagent-driven-development`:派发每个子 agent 时,必须在 prompt 中显式注入 TDD 硬约束:**"You MUST follow TDD: for each task, write a failing test first, watch it fail, then write minimal code to pass. No production code without a failing test first."**。不得依赖其他配置隐式触发,必须明写在 dispatch prompt 中。
|
|
127
|
-
- `build_mode: direct`:仅在 full 流程已设置 `direct_override: true` 时允许。执行第一个任务前,**立即**使用 Skill 工具加载 `superpowers:test-driven-development` 一次,由当前 agent 按 Red-Green-Refactor 循环执行每个任务;不得把 `direct` 理解为跳过失败测试验证。
|
|
128
|
-
|
|
129
|
-
若 `tdd_mode: direct`:按正常流程执行,不强制 TDD。
|
|
130
|
-
|
|
131
|
-
### 4. Spec 增量更新(决策阻塞点 7)
|
|
132
|
-
|
|
133
|
-
实施中发现初版 spec 不完整时,按规模分级。规则见 `comate/reference/decision-points.md` 第 7 条。
|
|
134
|
-
|
|
135
|
-
| 规模 | 触发 | 做法 |
|
|
136
|
-
|------|------|------|
|
|
137
|
-
| 小 | 遗漏验收场景、边界条件 | 直接编辑 delta spec + design.md,追加 tasks.md |
|
|
138
|
-
| 中 | 接口变更、新增组件、数据流变化 | **AskUserQuestion 确认后**加载 `superpowers:brainstorming` 更新 Design Doc + delta spec |
|
|
139
|
-
| 大 | 全新 capability | **AskUserQuestion 确认拆分后**用 `/comate-open` 创建独立 change |
|
|
140
|
-
|
|
141
|
-
**50% 阈值**:以 tasks.md 初始任务总数为基准,新增任务超过总数一半即视为超范围,**必须 AskUserQuestion 暂停**决定是否拆分。创建独立 change 必须调 `/comate-open`,不得直接调 `/opsx:new`。
|
|
142
|
-
|
|
143
|
-
### 5. 上下文管理与 build 交接包
|
|
144
|
-
|
|
145
|
-
Build 是最长阶段。为支持断点恢复:
|
|
146
|
-
- **每完成一个 task**:立即勾选 tasks.md 并提交,确保状态持久化
|
|
147
|
-
- **上下文压缩恢复**:先 `bash "$COMATE" state <name> recover build`,按 Recovery action 决定下一步
|
|
148
|
-
- **用户手动修改恢复**:按 `comate/reference/dirty-worktree.md` 协议处理;归因后若 diff 暗示计划或 spec 变化,按 Step 4 分级
|
|
149
|
-
|
|
150
|
-
全部任务完成、代码提交后,**生成 build → verify 交接包**(防止 plan/tasks 在两阶段间被偷改):
|
|
151
|
-
|
|
152
|
-
```bash
|
|
153
|
-
bash "$COMATE" handoff <name> build --write
|
|
154
|
-
```
|
|
155
|
-
|
|
156
|
-
脚本写入 `impl_context` / `impl_hash`(plan + tasks 的 sha256)。verify 阶段 guard 会校验进入验证时的 plan/tasks 与此一致。
|
|
157
|
-
|
|
158
|
-
## 退出条件
|
|
159
|
-
|
|
160
|
-
- tasks.md 全部勾选,代码已提交
|
|
161
|
-
- 已显式运行项目构建/测试命令并通过
|
|
162
|
-
- `isolation` 已写为 `branch` 或 `worktree`
|
|
163
|
-
- `build_mode` 已选(full 用 `direct` 需 `direct_override: true`)
|
|
164
|
-
- `tdd_mode` 已写为 `tdd` 或 `direct`
|
|
165
|
-
- `impl_context` / `impl_hash` 已写入
|
|
166
|
-
- 源文件未漂移(`source_kind: file` 时,guard 复算知识库文件哈希与清单比对;`conversation` 跳过)
|
|
167
|
-
- **阶段守卫**:`bash "$COMATE" guard <name> build --apply` 全 PASS 后自动流转到 `phase: verify`
|
|
168
|
-
|
|
169
|
-
guard 优先读项目配置命令(change 的 `.comate.yaml` 或仓库根 `.comate.yaml`/`comate.yaml`)的 `build_command` / `verify_command`;未配置才回退 `npm run build`、Maven、Cargo 探测。构建失败时 guard 打印失败输出作为排查证据。
|
|
170
|
-
|
|
171
|
-
```bash
|
|
172
|
-
bash "$COMATE" guard <name> build --apply
|
|
173
|
-
```
|
|
174
|
-
|
|
175
|
-
## 自动流转
|
|
176
|
-
|
|
177
|
-
> **REQUIRED NEXT SKILL:** 调用 `comate-verify` skill 进入验证与收尾。
|
|
1
|
+
---
|
|
2
|
+
name: comate-build
|
|
3
|
+
description: "comate 阶段 3:计划与构建。用 /comate-build 调用。制定计划并选择执行方式(subagent 或直接执行)实施。"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# comate 阶段 3:计划与构建(Build)
|
|
7
|
+
|
|
8
|
+
## 前置条件
|
|
9
|
+
|
|
10
|
+
- Design Doc 已创建(阶段 2 完成)
|
|
11
|
+
- 活跃 change 存在
|
|
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 build
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
**幂等性**:build 阶段操作可安全重复。读 `phase` 确认仍在 build,读 plan 文件头的 `base-ref`,再读 tasks.md 找第一个未勾选任务继续。已提交的任务不得重复提交。
|
|
29
|
+
|
|
30
|
+
### 1. 制定计划
|
|
31
|
+
|
|
32
|
+
**立即执行:** 使用 Skill 工具加载 `superpowers:writing-plans`。禁止跳过。计划要求:
|
|
33
|
+
- 保存至 `docs/superpowers/plans/YYYY-MM-DD-<feature>.md`
|
|
34
|
+
- 引用设计文档,拆分为可执行任务
|
|
35
|
+
- **Plan 文件头必须含关联元数据**:
|
|
36
|
+
|
|
37
|
+
```yaml
|
|
38
|
+
---
|
|
39
|
+
change: <name>
|
|
40
|
+
design-doc: docs/superpowers/specs/YYYY-MM-DD-<topic>-design.md
|
|
41
|
+
base-ref: <实施前的 git rev-parse HEAD>
|
|
42
|
+
---
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
`base-ref` 用于验证阶段跨提交统计改动规模。创建计划时先 `git rev-parse HEAD` 记录。
|
|
46
|
+
|
|
47
|
+
### 2. 记录计划路径
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
bash "$COMATE" state <name> set plan docs/superpowers/plans/YYYY-MM-DD-feature.md
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
无需手动改 phase,guard 会在退出条件满足后自动流转。
|
|
54
|
+
|
|
55
|
+
### 3. 选择工作方式(决策阻塞点 3)
|
|
56
|
+
|
|
57
|
+
就工作区隔离、执行方式、TDD 模式做**一个联合决策**。规则与判定协议见 `comate/reference/decision-points.md`(先判定"三类行动",第 3 条)。
|
|
58
|
+
|
|
59
|
+
#### 3a. 能力预检(展示选项前先做)
|
|
60
|
+
|
|
61
|
+
逐维度检查当前平台/仓库实际可执行的选项,只保留可执行者:
|
|
62
|
+
|
|
63
|
+
- **isolation**(脚本枚举仅 `branch` / `worktree`)
|
|
64
|
+
- `worktree`:仅当 `superpowers:using-git-worktrees` skill 可用时保留;不可用则剔除。
|
|
65
|
+
- `branch`:始终可用(HEAD detached 时先提示用户切到实分支)。
|
|
66
|
+
- **build_mode**
|
|
67
|
+
- `subagent-driven-development`:仅当当前平台有真实后台子 agent / Task 派发能力时保留;无则剔除。
|
|
68
|
+
- `executing-plans`:始终可用。
|
|
69
|
+
- **tdd_mode**:`tdd` / `direct` 始终可用。
|
|
70
|
+
|
|
71
|
+
#### 3b. 唯一选项自动应用(属"自动处理",不阻塞)
|
|
72
|
+
|
|
73
|
+
预检后某维度只剩一个可执行选项,**直接写入并说明原因,不为它单独问用户**。例如:
|
|
74
|
+
|
|
75
|
+
- 仅 `executing-plans` 可用(无后台派发能力)→ 自动写 `build_mode: executing-plans`,说明"无后台子 agent 能力"。
|
|
76
|
+
- 仅 `branch` 可用(`using-git-worktrees` 未安装)→ 自动写 `isolation: branch`,说明"worktree skill 不可用"。
|
|
77
|
+
|
|
78
|
+
多个维度都只剩单值时,一并自动写入并逐条说明;三个维度全部只剩单值时本决策点整体跳过,直接进入 Step 3c 执行。
|
|
79
|
+
|
|
80
|
+
#### 3c. 联合决策(仍有 ≥2 有效选项的维度才问)
|
|
81
|
+
|
|
82
|
+
对仍有多个有效选项的维度,**一次 AskUserQuestion 问清全部**,选 `branch` 时**分支名也在同一次确认**,不得先问是否继续再二次追问配置或命名。已在 3b 自动写入的维度不再列入问题。每个选项附推荐理由(推荐只说明倾向,不代替用户拍板):
|
|
83
|
+
|
|
84
|
+
- **工作区隔离**:`branch` 新建分支(简单快速,≤3 文件推荐)/ `worktree` 独立工作区(需并行或当前分支有未提交工作时推荐)。
|
|
85
|
+
- **执行方式**:`subagent-driven-development`(任务 ≥3、独立、需双阶段审查)/ `executing-plans`(任务 ≤2 且无跨模块依赖,或来自 fix 预设)。
|
|
86
|
+
- **TDD 模式**:`tdd`(涉及业务逻辑/新功能/API,推荐)/ `direct`(无需测试覆盖或用户明确跳过)。
|
|
87
|
+
|
|
88
|
+
用户选择后(连同 3b 已自动应用的维度)写入:
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
bash "$COMATE" state <name> set isolation <branch|worktree>
|
|
92
|
+
bash "$COMATE" state <name> set build_mode <subagent-driven-development|executing-plans|direct>
|
|
93
|
+
bash "$COMATE" state <name> set tdd_mode <tdd|direct>
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
`isolation` 是脚本级硬约束,保持 `null` 时 `build → verify` 的 guard 和 `state transition build-complete` 都会失败。
|
|
97
|
+
|
|
98
|
+
`build_mode: direct` 默认仅 fix 预设使用。full 流程只有用户明确要求跳过计划执行技能、且已记录显式 override 时才允许:
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
bash "$COMATE" state <name> set direct_override true
|
|
102
|
+
bash "$COMATE" state <name> set build_mode direct
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
无 `direct_override: true` 时,full 流程的 `build_mode=direct` 会被 guard 和状态转换同时拦截。
|
|
106
|
+
|
|
107
|
+
**TDD 模式**:
|
|
108
|
+
|
|
109
|
+
| 选项 | 含义 | 适用场景 |
|
|
110
|
+
|------|------|---------|
|
|
111
|
+
| `tdd` | 每个任务先写失败测试再实现 | 推荐。涉及业务逻辑、新功能、API 的改动 |
|
|
112
|
+
| `direct` | 直接实现,不强制 TDD 流程 | 不需要测试覆盖的改动,或用户选择跳过测试直接写代码。fix 预设默认 `direct` |
|
|
113
|
+
|
|
114
|
+
`tdd_mode` 是脚本级硬约束,full 流程在离开 build 阶段前必须选择 `tdd` 或 `direct`,否则 guard 和 `state transition build-complete` 都会失败。
|
|
115
|
+
|
|
116
|
+
**执行隔离**:
|
|
117
|
+
- **branch**:`git checkout -b <name>`,后续在新分支工作
|
|
118
|
+
- **worktree**:必须使用 Skill 工具加载 `superpowers:using-git-worktrees` 创建隔离工作区,禁止用普通 shell 绕过;不可用时停止并提示安装。
|
|
119
|
+
|
|
120
|
+
**加载执行技能**:使用 Skill 工具加载所选技能。不可用时停止并提示安装,不要用普通对话替代。加载后按其指引执行:按计划做任务、完成 tasks.md 勾选(`- [ ]` → `- [x]`)、每个任务完成后提交代码。
|
|
121
|
+
|
|
122
|
+
**TDD 执行约束(Step 3b)**:
|
|
123
|
+
|
|
124
|
+
若 `tdd_mode: tdd`:
|
|
125
|
+
- `build_mode: executing-plans`:加载执行技能后、执行第一个任务前,**立即**使用 Skill 工具加载 `superpowers:test-driven-development` 一次,禁止跳过。之后每个任务按已加载的 Red-Green-Refactor 循环执行,不得跳过失败测试验证阶段,后续任务不重复加载。上下文压缩恢复后重新加载一次,再从第一个未勾选任务继续。
|
|
126
|
+
- `build_mode: subagent-driven-development`:派发每个子 agent 时,必须在 prompt 中显式注入 TDD 硬约束:**"You MUST follow TDD: for each task, write a failing test first, watch it fail, then write minimal code to pass. No production code without a failing test first."**。不得依赖其他配置隐式触发,必须明写在 dispatch prompt 中。
|
|
127
|
+
- `build_mode: direct`:仅在 full 流程已设置 `direct_override: true` 时允许。执行第一个任务前,**立即**使用 Skill 工具加载 `superpowers:test-driven-development` 一次,由当前 agent 按 Red-Green-Refactor 循环执行每个任务;不得把 `direct` 理解为跳过失败测试验证。
|
|
128
|
+
|
|
129
|
+
若 `tdd_mode: direct`:按正常流程执行,不强制 TDD。
|
|
130
|
+
|
|
131
|
+
### 4. Spec 增量更新(决策阻塞点 7)
|
|
132
|
+
|
|
133
|
+
实施中发现初版 spec 不完整时,按规模分级。规则见 `comate/reference/decision-points.md` 第 7 条。
|
|
134
|
+
|
|
135
|
+
| 规模 | 触发 | 做法 |
|
|
136
|
+
|------|------|------|
|
|
137
|
+
| 小 | 遗漏验收场景、边界条件 | 直接编辑 delta spec + design.md,追加 tasks.md |
|
|
138
|
+
| 中 | 接口变更、新增组件、数据流变化 | **AskUserQuestion 确认后**加载 `superpowers:brainstorming` 更新 Design Doc + delta spec |
|
|
139
|
+
| 大 | 全新 capability | **AskUserQuestion 确认拆分后**用 `/comate-open` 创建独立 change |
|
|
140
|
+
|
|
141
|
+
**50% 阈值**:以 tasks.md 初始任务总数为基准,新增任务超过总数一半即视为超范围,**必须 AskUserQuestion 暂停**决定是否拆分。创建独立 change 必须调 `/comate-open`,不得直接调 `/opsx:new`。
|
|
142
|
+
|
|
143
|
+
### 5. 上下文管理与 build 交接包
|
|
144
|
+
|
|
145
|
+
Build 是最长阶段。为支持断点恢复:
|
|
146
|
+
- **每完成一个 task**:立即勾选 tasks.md 并提交,确保状态持久化
|
|
147
|
+
- **上下文压缩恢复**:先 `bash "$COMATE" state <name> recover build`,按 Recovery action 决定下一步
|
|
148
|
+
- **用户手动修改恢复**:按 `comate/reference/dirty-worktree.md` 协议处理;归因后若 diff 暗示计划或 spec 变化,按 Step 4 分级
|
|
149
|
+
|
|
150
|
+
全部任务完成、代码提交后,**生成 build → verify 交接包**(防止 plan/tasks 在两阶段间被偷改):
|
|
151
|
+
|
|
152
|
+
```bash
|
|
153
|
+
bash "$COMATE" handoff <name> build --write
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
脚本写入 `impl_context` / `impl_hash`(plan + tasks 的 sha256)。verify 阶段 guard 会校验进入验证时的 plan/tasks 与此一致。
|
|
157
|
+
|
|
158
|
+
## 退出条件
|
|
159
|
+
|
|
160
|
+
- tasks.md 全部勾选,代码已提交
|
|
161
|
+
- 已显式运行项目构建/测试命令并通过
|
|
162
|
+
- `isolation` 已写为 `branch` 或 `worktree`
|
|
163
|
+
- `build_mode` 已选(full 用 `direct` 需 `direct_override: true`)
|
|
164
|
+
- `tdd_mode` 已写为 `tdd` 或 `direct`
|
|
165
|
+
- `impl_context` / `impl_hash` 已写入
|
|
166
|
+
- 源文件未漂移(`source_kind: file` 时,guard 复算知识库文件哈希与清单比对;`conversation` 跳过)
|
|
167
|
+
- **阶段守卫**:`bash "$COMATE" guard <name> build --apply` 全 PASS 后自动流转到 `phase: verify`
|
|
168
|
+
|
|
169
|
+
guard 优先读项目配置命令(change 的 `.comate.yaml` 或仓库根 `.comate.yaml`/`comate.yaml`)的 `build_command` / `verify_command`;未配置才回退 `npm run build`、Maven、Cargo 探测。构建失败时 guard 打印失败输出作为排查证据。
|
|
170
|
+
|
|
171
|
+
```bash
|
|
172
|
+
bash "$COMATE" guard <name> build --apply
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
## 自动流转
|
|
176
|
+
|
|
177
|
+
> **REQUIRED NEXT SKILL:** 调用 `comate-verify` skill 进入验证与收尾。
|