@house365/comate 0.9.23 → 0.9.25
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/scripts/comate.sh +9 -7
- package/skills/comate/tests/comate.bats +10 -0
- 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 +212 -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
|
@@ -1,63 +1,63 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: comate-gate
|
|
1
|
+
---
|
|
2
|
+
name: comate-gate
|
|
3
3
|
description: "comate 阶段 0:PRD 门禁与拆分。用 /comate-gate 调用。对原始 PRD 做质量审阅+评分+阻断闸门,通过后按依赖/独立性判定拆成 1 或 N 个 change,逐个交给 comate-open。门禁状态钉在 PRD 同级 gate 文件,门禁未通过禁止建 change。"
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# comate 阶段 0:PRD 门禁与拆分(Gate)
|
|
7
|
-
|
|
8
|
-
**定位**:comate 五阶段(open→design→build→verify→archive)之前的上游入口。输入一份**原始 PRD**,产出「已过门禁、已拆分」的 N 个 change,各自进入 open 阶段。
|
|
9
|
-
|
|
10
|
-
**两件事,缺一不可**:
|
|
11
|
-
1. **门禁**:审阅 PRD 质量、百分制评分、建阻断台账。阻断问题未清零,**禁止建任何 change**。
|
|
12
|
-
2. **拆分**:按依赖/整体性/独立性/规模判定该 PRD 变成几个 change,粒度由用户拍板(AI 只给建议)。
|
|
13
|
-
|
|
14
4
|
---
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
5
|
+
|
|
6
|
+
# comate 阶段 0:PRD 门禁与拆分(Gate)
|
|
7
|
+
|
|
8
|
+
**定位**:comate 五阶段(open→design→build→verify→archive)之前的上游入口。输入一份**原始 PRD**,产出「已过门禁、已拆分」的 N 个 change,各自进入 open 阶段。
|
|
9
|
+
|
|
10
|
+
**两件事,缺一不可**:
|
|
11
|
+
1. **门禁**:审阅 PRD 质量、百分制评分、建阻断台账。阻断问题未清零,**禁止建任何 change**。
|
|
12
|
+
2. **拆分**:按依赖/整体性/独立性/规模判定该 PRD 变成几个 change,粒度由用户拍板(AI 只给建议)。
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## 核心铁律
|
|
17
|
+
|
|
18
18
|
- **门禁状态是可验证的文件真相源**:钉在 PRD 同级的 gate 文件。评审报告是给人看的派生物,**不是**状态源。PRD 命名按本 skill 的前置规范执行,派生文件名由脚本确定性生成。
|
|
19
|
-
- **AskUserQuestion 是真阻塞点**:文字提示、推荐方案、默认值、历史偏好、用户未反对,都**不能**替代明确回答。
|
|
20
|
-
- **只审不改**:门禁只暴露 PRD 问题,不替 PRD 补内容、不替产品拍板。
|
|
21
|
-
- **门禁未通过禁止建 change**:`gate_status ∈ {passed, passed-with-tbd}` 且 PRD 哈希未漂移,才允许 comate-open 建 change(由 `gate check` 硬强制)。
|
|
22
|
-
- **拆分粒度由人定**:AI 给「功能项→change」映射建议,用户确认或改,AI 不拍板。
|
|
23
|
-
|
|
24
|
-
---
|
|
25
|
-
|
|
26
|
-
## 脚本定位(单一入口)
|
|
27
|
-
|
|
28
|
-
```bash
|
|
29
|
-
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
|
|
30
|
-
[ -d "$r" ] && find "$r" -maxdepth 6 -path '*/comate/scripts/comate.sh' -type f -print -quit 2>/dev/null
|
|
31
|
-
done | head -1)}"
|
|
32
|
-
if [ -z "$COMATE" ]; then
|
|
33
|
-
echo "ERROR: comate.sh 未找到,请确认 comate skill 已安装。" >&2
|
|
34
|
-
return 1 2>/dev/null || exit 1
|
|
35
|
-
fi
|
|
36
|
-
```
|
|
37
|
-
|
|
38
|
-
gate 命令族(退出码:`0` 通过 / `1` 阻塞 / `2` 用法 / `3` 环境 / `4` 状态损坏):
|
|
39
|
-
|
|
40
|
-
```bash
|
|
41
|
-
bash "$COMATE" gate <prd> review # 建/刷新 gate.yaml,钉 PRD 哈希,回报告路径
|
|
42
|
-
bash "$COMATE" gate <prd> set <field> <value> # 写 score | blocking_open | gate_status
|
|
19
|
+
- **AskUserQuestion 是真阻塞点**:文字提示、推荐方案、默认值、历史偏好、用户未反对,都**不能**替代明确回答。
|
|
20
|
+
- **只审不改**:门禁只暴露 PRD 问题,不替 PRD 补内容、不替产品拍板。
|
|
21
|
+
- **门禁未通过禁止建 change**:`gate_status ∈ {passed, passed-with-tbd}` 且 PRD 哈希未漂移,才允许 comate-open 建 change(由 `gate check` 硬强制)。
|
|
22
|
+
- **拆分粒度由人定**:AI 给「功能项→change」映射建议,用户确认或改,AI 不拍板。
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## 脚本定位(单一入口)
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
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
|
|
30
|
+
[ -d "$r" ] && find "$r" -maxdepth 6 -path '*/comate/scripts/comate.sh' -type f -print -quit 2>/dev/null
|
|
31
|
+
done | head -1)}"
|
|
32
|
+
if [ -z "$COMATE" ]; then
|
|
33
|
+
echo "ERROR: comate.sh 未找到,请确认 comate skill 已安装。" >&2
|
|
34
|
+
return 1 2>/dev/null || exit 1
|
|
35
|
+
fi
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
gate 命令族(退出码:`0` 通过 / `1` 阻塞 / `2` 用法 / `3` 环境 / `4` 状态损坏):
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
bash "$COMATE" gate <prd> review # 建/刷新 gate.yaml,钉 PRD 哈希,回报告路径
|
|
42
|
+
bash "$COMATE" gate <prd> set <field> <value> # 写 score | blocking_open | gate_status
|
|
43
43
|
bash "$COMATE" gate <prd> pass [--tbd] # 普通通过要求 0 阻断;--tbd 要求有已授权的未解决阻断
|
|
44
44
|
bash "$COMATE" gate <prd> spawned <change> # 记录据此 PRD 扇出的 change
|
|
45
45
|
bash "$COMATE" gate <prd> fanout-status [--json] # 查看映射/已创建/待创建进度
|
|
46
46
|
bash "$COMATE" gate <prd> status [--json] # 查状态(哈希漂移自动判 stale)
|
|
47
|
-
bash "$COMATE" gate <prd> check # comate-open 建 change 前的前置守卫
|
|
48
|
-
```
|
|
49
|
-
|
|
50
|
-
---
|
|
51
|
-
|
|
52
|
-
## 步骤
|
|
53
|
-
|
|
54
|
-
### 1. 定位 PRD
|
|
55
|
-
|
|
56
|
-
- 用户给了路径/编号 → 直接读该文件。
|
|
47
|
+
bash "$COMATE" gate <prd> check # comate-open 建 change 前的前置守卫
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
## 步骤
|
|
53
|
+
|
|
54
|
+
### 1. 定位 PRD
|
|
55
|
+
|
|
56
|
+
- 用户给了路径/编号 → 直接读该文件。
|
|
57
57
|
- 未给 → 用 Glob 列出候选(默认搜索 `docs/knowledge-base/requirements/**/*.md`,若项目无此结构再探测 `docs/**/*.md`),按命中数分类(对齐 `comate/reference/decision-points.md` 首节三类框架):
|
|
58
|
-
- **恰好 1 个候选** → 无 ≥2 有效选项,属"自动处理":直接选中该 PRD 并**报告选了哪份**,不 AskUserQuestion。
|
|
59
|
-
- **多个候选** → 属"用户决策":用 **AskUserQuestion** 让用户选一个。
|
|
60
|
-
- **0 个候选** → 属"停止条件":报告在约定路径下未找到 PRD,请用户提供路径或确认 PRD 位置,不发明选项。
|
|
58
|
+
- **恰好 1 个候选** → 无 ≥2 有效选项,属"自动处理":直接选中该 PRD 并**报告选了哪份**,不 AskUserQuestion。
|
|
59
|
+
- **多个候选** → 属"用户决策":用 **AskUserQuestion** 让用户选一个。
|
|
60
|
+
- **0 个候选** → 属"停止条件":报告在约定路径下未找到 PRD,请用户提供路径或确认 PRD 位置,不发明选项。
|
|
61
61
|
- 读取后重点提取:**功能清单**(各功能项 + 优先级 P0/P1/P2)、**范围(In/Out)**、**第三方依赖**、**验收标准**、文档状态。检查内容是否可审阅即可,不要求 Markdown 标题、表格或模板字段完全一致。
|
|
62
62
|
- 若 PRD 明显未定稿(状态字段非「已定稿」等),用 **AskUserQuestion** 提示可能未冻结并暂停确认;确认前只审阅,不建 gate。
|
|
63
63
|
|
|
@@ -73,139 +73,139 @@ PRD 的路径和文件名需要稳定、可追踪,以便 gate 状态和评审
|
|
|
73
73
|
发现不规范时,先列出旧名和建议新名,等待用户确认后再用 `git mv` 改名,并同步修正引用。命名规范是流程前置条件;PRD 的正文格式不要求完全套用模板,只需能被审阅并包含可判断的需求内容。
|
|
74
74
|
|
|
75
75
|
### 2. 门禁:质量审阅 + 评分(不可跳过)
|
|
76
|
-
|
|
77
|
-
先初始化 gate(钉当前 PRD 哈希、拿到报告路径):
|
|
78
|
-
|
|
79
|
-
```bash
|
|
80
|
-
bash "$COMATE" gate <prd> review
|
|
81
|
-
```
|
|
82
|
-
|
|
83
|
-
**逐维度排查**(每条既看「有没有」,也看「清不清楚、能不能落地」):
|
|
84
|
-
|
|
85
|
-
| 维度 | 查什么 |
|
|
86
|
-
|------|--------|
|
|
87
|
-
| 逻辑自洽 | 需求前后是否矛盾;流程有无断链;条件/分支是否闭合;功能项间是否冲突或重复 |
|
|
88
|
-
| 数据与来源 | 用到的数据是否交代来源(哪张表/哪个接口/哪方提供);口径/单位/时间范围是否明确 |
|
|
89
|
-
| 边界与范围 | In/Out 是否清晰;极值、空值、并发、权限、异常路径是否覆盖;第三方失败/降级是否提及 |
|
|
90
|
-
| 表述清晰 | 术语是否一致且有定义;有无「尽快/大量/若干」等模糊量词;验收是否可度量 |
|
|
91
|
-
| 完整性 | 目标/背景、功能清单、优先级、验收标准、第三方依赖是否齐全;有无 TBD/待定 |
|
|
92
|
-
|
|
93
|
-
**每个问题标严重程度三档:**
|
|
94
|
-
- **严重**(扣 15 分):阻断开发或导致做错方向(逻辑矛盾、关键数据无来源、核心边界缺失、需求自相冲突)。
|
|
95
|
-
- **中**(扣 7 分):影响实现质量或需返工(口径不清、部分异常路径未覆盖、验收不可度量)。
|
|
96
|
-
- **低**(扣 2 分):表述瑕疵、术语不统一、可读性问题,不影响方向。
|
|
97
|
-
|
|
98
|
-
**评分**(百分制,从 100 扣,扣到 0 为止):≥85 优(可拆)、70–84 良(可拆,受影响处标待确认)、<70 待补(建议先补 PRD)。
|
|
99
|
-
|
|
100
|
-
**先分流再提问**:
|
|
101
|
-
- **仓库事实**(已有架构约定、字段、接口、对接档案):先用 Read/Glob/rg 核实并引用来源,不丢给用户决定。
|
|
102
|
-
- **产品决策**(范围、优先级、用户可见行为、状态流转、权限、数据口径、失败处理、验收规则):必须用 **AskUserQuestion** 问用户,不得用推荐方案/历史偏好/「待确认」代替确认。
|
|
103
|
-
|
|
76
|
+
|
|
77
|
+
先初始化 gate(钉当前 PRD 哈希、拿到报告路径):
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
bash "$COMATE" gate <prd> review
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
**逐维度排查**(每条既看「有没有」,也看「清不清楚、能不能落地」):
|
|
84
|
+
|
|
85
|
+
| 维度 | 查什么 |
|
|
86
|
+
|------|--------|
|
|
87
|
+
| 逻辑自洽 | 需求前后是否矛盾;流程有无断链;条件/分支是否闭合;功能项间是否冲突或重复 |
|
|
88
|
+
| 数据与来源 | 用到的数据是否交代来源(哪张表/哪个接口/哪方提供);口径/单位/时间范围是否明确 |
|
|
89
|
+
| 边界与范围 | In/Out 是否清晰;极值、空值、并发、权限、异常路径是否覆盖;第三方失败/降级是否提及 |
|
|
90
|
+
| 表述清晰 | 术语是否一致且有定义;有无「尽快/大量/若干」等模糊量词;验收是否可度量 |
|
|
91
|
+
| 完整性 | 目标/背景、功能清单、优先级、验收标准、第三方依赖是否齐全;有无 TBD/待定 |
|
|
92
|
+
|
|
93
|
+
**每个问题标严重程度三档:**
|
|
94
|
+
- **严重**(扣 15 分):阻断开发或导致做错方向(逻辑矛盾、关键数据无来源、核心边界缺失、需求自相冲突)。
|
|
95
|
+
- **中**(扣 7 分):影响实现质量或需返工(口径不清、部分异常路径未覆盖、验收不可度量)。
|
|
96
|
+
- **低**(扣 2 分):表述瑕疵、术语不统一、可读性问题,不影响方向。
|
|
97
|
+
|
|
98
|
+
**评分**(百分制,从 100 扣,扣到 0 为止):≥85 优(可拆)、70–84 良(可拆,受影响处标待确认)、<70 待补(建议先补 PRD)。
|
|
99
|
+
|
|
100
|
+
**先分流再提问**:
|
|
101
|
+
- **仓库事实**(已有架构约定、字段、接口、对接档案):先用 Read/Glob/rg 核实并引用来源,不丢给用户决定。
|
|
102
|
+
- **产品决策**(范围、优先级、用户可见行为、状态流转、权限、数据口径、失败处理、验收规则):必须用 **AskUserQuestion** 问用户,不得用推荐方案/历史偏好/「待确认」代替确认。
|
|
103
|
+
|
|
104
104
|
**写评审报告(必生成)** 到 `gate review` 回显的 `review_report` 路径(与 PRD 同级,由脚本确定性命名)。内容含:评分 + 评级 + 一句话总评、问题台账表(`ID` / 维度 / 严重程度 / 原文依据 / 影响章节 / 是否阻断 / 建议 / 产品回填列)、逐条问题。若无问题,明确写「审阅通过,未发现阻断项」。
|
|
105
|
-
|
|
106
|
-
**阻断规则**:影响范围、用户行为、状态流转、数据契约、权限、异常处理或验收标准的问题标「阻断」。把当前未关闭的阻断问题数写入 gate:
|
|
107
|
-
|
|
108
|
-
```bash
|
|
109
|
-
bash "$COMATE" gate <prd> set score <分数>
|
|
110
|
-
bash "$COMATE" gate <prd> set blocking_open <未关闭阻断数>
|
|
111
|
-
```
|
|
112
|
-
|
|
113
|
-
### 3. 阻断闸门(AskUserQuestion)
|
|
114
|
-
|
|
115
|
-
**若 `blocking_open > 0`**,先判定复杂度:
|
|
116
|
-
|
|
117
|
-
- **阻断数 ≤ 3 且无明显依赖链** → 默认模式(批量+分轮处理)
|
|
118
|
-
- **阻断数 > 3 或存在决策依赖链** → 提供深度澄清选项
|
|
119
|
-
|
|
120
|
-
#### 默认模式(阻断数 ≤ 3)
|
|
121
|
-
|
|
122
|
-
用 **AskUserQuestion** 暂停,给三选项(文字提示不能替代工具等待):
|
|
123
|
-
1. **先补 PRD** — 让用户/产品补齐,补后回步骤 2 重新审阅(`gate review` 会因 PRD 改动重钉哈希、状态回 reviewing)。
|
|
124
|
-
2. **授权带 TBD 继续** — 用户显式授权。此时后续 change 的 proposal/design 受影响处必须标 **「⚠ 待确认」** 并引用评审报告。
|
|
125
|
-
3. **暂停** — 停在此,不建 change。
|
|
126
|
-
|
|
127
|
-
对每轮最多 1–3 个高影响决策提问;每个问题给 `ID`、原文依据、影响、2–3 个互斥选项、推荐项及后果,允许自定义答案。用户回答后更新报告台账、重算 `blocking_open`,直到清零或用户选 2。**清零或授权后,立即继续执行步骤 4(拆分判定)。**
|
|
128
|
-
|
|
129
|
-
#### 复杂场景模式(阻断数 > 3 或有依赖链)
|
|
130
|
-
|
|
131
|
-
用 **AskUserQuestion** 暂停,给四选项:
|
|
132
|
-
1. **先补 PRD** — 同上。
|
|
133
|
-
2. **授权带 TBD 继续** — 同上。
|
|
134
|
-
3. **深度澄清模式** — 调用 `comate-grill` skill 逐决策点穷追式澄清。适合复杂 PRD,更彻底但耗时更长。
|
|
135
|
-
4. **暂停** — 停在此,不建 change。
|
|
136
|
-
|
|
137
|
-
**若用户选 3(深度澄清)**:
|
|
138
|
-
|
|
139
|
-
1. **立即执行**:使用 Skill 工具加载 `comate-grill`,传入话题和阻断问题清单:
|
|
140
|
-
|
|
141
|
-
```markdown
|
|
142
|
-
话题:PRD 门禁阻断问题清单
|
|
143
|
-
问题列表:
|
|
144
|
-
[逐条列出所有 blocking_open > 0 的问题,每条含:ID、问题描述、原文依据、影响范围、当前歧义]
|
|
145
|
-
```
|
|
146
|
-
|
|
147
|
-
2. `comate-grill` 会逐个决策点深挖,每个问题附推荐答案,等用户确认后进入下一个,直到所有分支清晰。
|
|
148
|
-
|
|
149
|
-
3. `comate-grill` 完成后,**立即**更新评审报告台账、重算 `blocking_open`。若依然未清零,回到本步骤 3 再次判定(通常经过深度澄清后会清零)。
|
|
150
|
-
|
|
151
|
-
4. **`blocking_open` 清零后,立即继续执行步骤 4(拆分判定)。**
|
|
152
|
-
|
|
153
|
-
#### 步骤 3 出口条件(自动流转到步骤 4)
|
|
154
|
-
|
|
155
|
-
**只有满足以下条件之一,才自动进入步骤 4**:
|
|
156
|
-
- `blocking_open` 已清零(默认模式或深度澄清模式完成后)
|
|
157
|
-
- 用户选择"授权带 TBD 继续"(选项 2)
|
|
158
|
-
|
|
159
|
-
**满足条件后,必须立即继续执行步骤 4-7,不得停在步骤 3。** 用户选"先补 PRD"(选项 1)时回步骤 2;选"暂停"(选项 3/4)时停止整个 skill。
|
|
160
|
-
|
|
161
|
-
### 4. 拆分判定(必须 AskUserQuestion 问人)
|
|
162
|
-
|
|
163
|
-
列出 PRD 功能清单各功能项及优先级,AI 按下列维度**给拆分建议**(不拍板):
|
|
164
|
-
|
|
165
|
-
- **依赖关系**:前后依赖的功能项归**同一** change。
|
|
166
|
-
- **整体性**:共同构成一个完整用户价值的功能簇归**同一** change。
|
|
167
|
-
- **独立性**:互不依赖、可并行实现的功能项拆成**独立** change。
|
|
168
|
-
- **规模**:功能点少(≤3)且简单 → **1 个** change 即可;复杂多点(>5)且可切分 → **多个** change。
|
|
169
|
-
|
|
170
|
-
产出「功能项 → change」映射建议,例如:
|
|
171
|
-
|
|
172
|
-
```
|
|
173
|
-
建议拆分:
|
|
174
|
-
- Change A「核心登录流」:功能项 1、2、3(有依赖链,整体交付)
|
|
175
|
-
- Change B「运营配置」:功能项 4、5(独立,可与 A 并行)
|
|
176
|
-
- Change C「数据报表」:功能项 6(独立后置)
|
|
177
|
-
```
|
|
178
|
-
|
|
179
|
-
用 **AskUserQuestion**(可多选/自定义)让用户确认:
|
|
180
|
-
- 哪些功能项归哪个 change(显示建议映射);
|
|
181
|
-
- 是一功能项一 change 还是合并;
|
|
182
|
-
- 各 change 命名(默认取主功能项名,用户可改)。
|
|
183
|
-
|
|
184
|
-
**映射确认前不得建任何 change。** 确认后:
|
|
185
|
-
|
|
186
|
-
1. **立即持久化映射到 gate.yaml**,使其成为机器可验证事实:
|
|
187
|
-
|
|
188
|
-
```bash
|
|
189
|
-
# changes_map 格式:changeA:功能项1,2,3;changeB:功能项4,5
|
|
190
|
-
bash "$COMATE" gate <prd> set changes_map "changeA:功能项1,2,3;changeB:功能项4,5"
|
|
191
|
-
```
|
|
192
|
-
|
|
193
|
-
2. 用 **TaskCreate** 把每个待建 change 建成任务项。
|
|
194
|
-
|
|
195
|
-
3. 多 change 时,在 PRD 同目录建 `CHANGES-MAP.md` 作为人类可读备份,内容与 `changes_map` 字段一致。
|
|
196
|
-
|
|
197
|
-
### 5. 通过门禁
|
|
198
|
-
|
|
199
|
-
映射与 `blocking_open` 都就绪后,置门禁通过:
|
|
200
|
-
|
|
201
|
-
```bash
|
|
105
|
+
|
|
106
|
+
**阻断规则**:影响范围、用户行为、状态流转、数据契约、权限、异常处理或验收标准的问题标「阻断」。把当前未关闭的阻断问题数写入 gate:
|
|
107
|
+
|
|
108
|
+
```bash
|
|
109
|
+
bash "$COMATE" gate <prd> set score <分数>
|
|
110
|
+
bash "$COMATE" gate <prd> set blocking_open <未关闭阻断数>
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
### 3. 阻断闸门(AskUserQuestion)
|
|
114
|
+
|
|
115
|
+
**若 `blocking_open > 0`**,先判定复杂度:
|
|
116
|
+
|
|
117
|
+
- **阻断数 ≤ 3 且无明显依赖链** → 默认模式(批量+分轮处理)
|
|
118
|
+
- **阻断数 > 3 或存在决策依赖链** → 提供深度澄清选项
|
|
119
|
+
|
|
120
|
+
#### 默认模式(阻断数 ≤ 3)
|
|
121
|
+
|
|
122
|
+
用 **AskUserQuestion** 暂停,给三选项(文字提示不能替代工具等待):
|
|
123
|
+
1. **先补 PRD** — 让用户/产品补齐,补后回步骤 2 重新审阅(`gate review` 会因 PRD 改动重钉哈希、状态回 reviewing)。
|
|
124
|
+
2. **授权带 TBD 继续** — 用户显式授权。此时后续 change 的 proposal/design 受影响处必须标 **「⚠ 待确认」** 并引用评审报告。
|
|
125
|
+
3. **暂停** — 停在此,不建 change。
|
|
126
|
+
|
|
127
|
+
对每轮最多 1–3 个高影响决策提问;每个问题给 `ID`、原文依据、影响、2–3 个互斥选项、推荐项及后果,允许自定义答案。用户回答后更新报告台账、重算 `blocking_open`,直到清零或用户选 2。**清零或授权后,立即继续执行步骤 4(拆分判定)。**
|
|
128
|
+
|
|
129
|
+
#### 复杂场景模式(阻断数 > 3 或有依赖链)
|
|
130
|
+
|
|
131
|
+
用 **AskUserQuestion** 暂停,给四选项:
|
|
132
|
+
1. **先补 PRD** — 同上。
|
|
133
|
+
2. **授权带 TBD 继续** — 同上。
|
|
134
|
+
3. **深度澄清模式** — 调用 `comate-grill` skill 逐决策点穷追式澄清。适合复杂 PRD,更彻底但耗时更长。
|
|
135
|
+
4. **暂停** — 停在此,不建 change。
|
|
136
|
+
|
|
137
|
+
**若用户选 3(深度澄清)**:
|
|
138
|
+
|
|
139
|
+
1. **立即执行**:使用 Skill 工具加载 `comate-grill`,传入话题和阻断问题清单:
|
|
140
|
+
|
|
141
|
+
```markdown
|
|
142
|
+
话题:PRD 门禁阻断问题清单
|
|
143
|
+
问题列表:
|
|
144
|
+
[逐条列出所有 blocking_open > 0 的问题,每条含:ID、问题描述、原文依据、影响范围、当前歧义]
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
2. `comate-grill` 会逐个决策点深挖,每个问题附推荐答案,等用户确认后进入下一个,直到所有分支清晰。
|
|
148
|
+
|
|
149
|
+
3. `comate-grill` 完成后,**立即**更新评审报告台账、重算 `blocking_open`。若依然未清零,回到本步骤 3 再次判定(通常经过深度澄清后会清零)。
|
|
150
|
+
|
|
151
|
+
4. **`blocking_open` 清零后,立即继续执行步骤 4(拆分判定)。**
|
|
152
|
+
|
|
153
|
+
#### 步骤 3 出口条件(自动流转到步骤 4)
|
|
154
|
+
|
|
155
|
+
**只有满足以下条件之一,才自动进入步骤 4**:
|
|
156
|
+
- `blocking_open` 已清零(默认模式或深度澄清模式完成后)
|
|
157
|
+
- 用户选择"授权带 TBD 继续"(选项 2)
|
|
158
|
+
|
|
159
|
+
**满足条件后,必须立即继续执行步骤 4-7,不得停在步骤 3。** 用户选"先补 PRD"(选项 1)时回步骤 2;选"暂停"(选项 3/4)时停止整个 skill。
|
|
160
|
+
|
|
161
|
+
### 4. 拆分判定(必须 AskUserQuestion 问人)
|
|
162
|
+
|
|
163
|
+
列出 PRD 功能清单各功能项及优先级,AI 按下列维度**给拆分建议**(不拍板):
|
|
164
|
+
|
|
165
|
+
- **依赖关系**:前后依赖的功能项归**同一** change。
|
|
166
|
+
- **整体性**:共同构成一个完整用户价值的功能簇归**同一** change。
|
|
167
|
+
- **独立性**:互不依赖、可并行实现的功能项拆成**独立** change。
|
|
168
|
+
- **规模**:功能点少(≤3)且简单 → **1 个** change 即可;复杂多点(>5)且可切分 → **多个** change。
|
|
169
|
+
|
|
170
|
+
产出「功能项 → change」映射建议,例如:
|
|
171
|
+
|
|
172
|
+
```
|
|
173
|
+
建议拆分:
|
|
174
|
+
- Change A「核心登录流」:功能项 1、2、3(有依赖链,整体交付)
|
|
175
|
+
- Change B「运营配置」:功能项 4、5(独立,可与 A 并行)
|
|
176
|
+
- Change C「数据报表」:功能项 6(独立后置)
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
用 **AskUserQuestion**(可多选/自定义)让用户确认:
|
|
180
|
+
- 哪些功能项归哪个 change(显示建议映射);
|
|
181
|
+
- 是一功能项一 change 还是合并;
|
|
182
|
+
- 各 change 命名(默认取主功能项名,用户可改)。
|
|
183
|
+
|
|
184
|
+
**映射确认前不得建任何 change。** 确认后:
|
|
185
|
+
|
|
186
|
+
1. **立即持久化映射到 gate.yaml**,使其成为机器可验证事实:
|
|
187
|
+
|
|
188
|
+
```bash
|
|
189
|
+
# changes_map 格式:changeA:功能项1,2,3;changeB:功能项4,5
|
|
190
|
+
bash "$COMATE" gate <prd> set changes_map "changeA:功能项1,2,3;changeB:功能项4,5"
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
2. 用 **TaskCreate** 把每个待建 change 建成任务项。
|
|
194
|
+
|
|
195
|
+
3. 多 change 时,在 PRD 同目录建 `CHANGES-MAP.md` 作为人类可读备份,内容与 `changes_map` 字段一致。
|
|
196
|
+
|
|
197
|
+
### 5. 通过门禁
|
|
198
|
+
|
|
199
|
+
映射与 `blocking_open` 都就绪后,置门禁通过:
|
|
200
|
+
|
|
201
|
+
```bash
|
|
202
202
|
bash "$COMATE" gate <prd> pass # 阻断已清零
|
|
203
203
|
# 或用户授权带 TBD:
|
|
204
204
|
bash "$COMATE" gate <prd> pass --tbd
|
|
205
205
|
```
|
|
206
206
|
|
|
207
207
|
`pass` 会硬校验评分为 0–100、`changes_map` 非空、报告非空;普通 pass 要求 `blocking_open=0`,`--tbd` 则要求存在至少 1 个已记录且经用户明确接受的未解决阻断项。之后 PRD 再被改,哈希漂移会使门禁 `stale`,须重跑 `/comate-gate`。
|
|
208
|
-
|
|
208
|
+
|
|
209
209
|
### 6. 逐 Change 初始化(调 comate-open)
|
|
210
210
|
|
|
211
211
|
这是一个可恢复的扇出循环,不是一次性只执行首项的提示。每次进入本步骤先运行:
|
|
@@ -221,46 +221,46 @@ bash "$COMATE" gate <prd路径> fanout-status --json
|
|
|
221
221
|
**立即执行**:用 Skill 工具加载 `comate-open`,传入 change 名与来源 PRD,并明确使用“gate 扇出骨架模式”。该模式创建/补齐并校验当前 change 的 `.openspec.yaml`、open 三件套、`.comate.yaml` 和 PRD 源追踪,最后登记 `gate spawned` 并保持 `phase: open` 返回本 gate 循环;不得在同一次 gate 调用中自动进入该 change 的 design/build。
|
|
222
222
|
|
|
223
223
|
comate-open 内部会:
|
|
224
|
-
- 先跑 `gate check <prd>` 前置守卫(未通过则阻断);
|
|
225
|
-
- 生成 proposal.md(范围/目标/非目标承接该 change 的功能项,不脱离 PRD 另起炉灶);
|
|
226
|
-
- `sources track <prd>` 钉住 PRD 为源(`source_kind=file`);
|
|
227
|
-
- design.md / tasks.md 由后续 comate-design 细化。
|
|
228
|
-
|
|
224
|
+
- 先跑 `gate check <prd>` 前置守卫(未通过则阻断);
|
|
225
|
+
- 生成 proposal.md(范围/目标/非目标承接该 change 的功能项,不脱离 PRD 另起炉灶);
|
|
226
|
+
- `sources track <prd>` 钉住 PRD 为源(`source_kind=file`);
|
|
227
|
+
- design.md / tasks.md 由后续 comate-design 细化。
|
|
228
|
+
|
|
229
229
|
每建成一个,记录到门禁(目录已存在后才能登记):
|
|
230
|
-
|
|
231
|
-
```bash
|
|
230
|
+
|
|
231
|
+
```bash
|
|
232
232
|
bash "$COMATE" gate <prd> spawned <change-name>
|
|
233
233
|
```
|
|
234
234
|
|
|
235
235
|
登记后继续处理 `fanout-status` 的 `missing` 列表。只有 `complete: true` 才能进入步骤 7,并且收尾报告中的“已创建 N 个 change”必须等于映射项数量;部分完成必须明确报告剩余项,不能宣称扇出完成。
|
|
236
|
-
|
|
237
|
-
若门禁是 `passed-with-tbd`,在该 change 的 proposal/design 受影响处标 **「⚠ 待确认」** 并引用评审报告。
|
|
238
|
-
|
|
239
|
-
### 7. 收尾
|
|
240
|
-
|
|
241
|
-
展示:
|
|
242
|
-
- PRD 审阅评分 + 评级、阻断问题关闭情况;
|
|
243
|
-
- 评审报告路径、gate.yaml 路径与最终 `gate_status`;
|
|
244
|
-
- 拆分映射(功能项 → N 个 change);
|
|
236
|
+
|
|
237
|
+
若门禁是 `passed-with-tbd`,在该 change 的 proposal/design 受影响处标 **「⚠ 待确认」** 并引用评审报告。
|
|
238
|
+
|
|
239
|
+
### 7. 收尾
|
|
240
|
+
|
|
241
|
+
展示:
|
|
242
|
+
- PRD 审阅评分 + 评级、阻断问题关闭情况;
|
|
243
|
+
- 评审报告路径、gate.yaml 路径与最终 `gate_status`;
|
|
244
|
+
- 拆分映射(功能项 → N 个 change);
|
|
245
245
|
- 已建的 change 列表(名称 + 承接功能项 + 是否带 ⚠ TBD);
|
|
246
246
|
- 扇出完整性(`fanout-status` 的 expected/spawned/missing/invalid);
|
|
247
|
-
- 待用户补的字段(如技术负责人)。
|
|
248
|
-
|
|
249
|
-
提示:「已过门禁并创建 N 个 change。对每个 change 调用 `/comate` 继续 design→build→verify→archive。」
|
|
250
|
-
|
|
251
|
-
---
|
|
252
|
-
|
|
253
|
-
## Guardrails
|
|
254
|
-
|
|
255
|
-
- 生成 change 前必先过门禁并评分(步骤 2),不可跳过;审阅只暴露问题、不替 PRD 补内容。
|
|
256
|
-
- 评审报告**必生成**,不再询问是否生成。
|
|
257
|
-
- 门禁状态以 `<PRD>.gate.yaml` 为唯一真相源;报告是人类可读派生物,二者冲突以 gate.yaml 为准。
|
|
258
|
-
- 影响范围、用户行为、状态流转、数据契约、权限、异常处理或验收标准的歧义必须逐项确认;未清零只能停在 reviewing/blocked,或经用户授权走 passed-with-tbd(带 ⚠ 标记)。
|
|
259
|
-
- AskUserQuestion 是真实阻塞点:文字输出/推荐/默认值/历史选择/用户未反对都不能替代明确回答。
|
|
260
|
-
- 拆分粒度(1 PRD → 几个 change)由用户定,AI 只给建议不拍板。
|
|
261
|
-
- 每个 change 承接 PRD 对应功能项,不另起炉灶;范围/依赖/验收与 PRD 对齐。
|
|
247
|
+
- 待用户补的字段(如技术负责人)。
|
|
248
|
+
|
|
249
|
+
提示:「已过门禁并创建 N 个 change。对每个 change 调用 `/comate` 继续 design→build→verify→archive。」
|
|
250
|
+
|
|
251
|
+
---
|
|
252
|
+
|
|
253
|
+
## Guardrails
|
|
254
|
+
|
|
255
|
+
- 生成 change 前必先过门禁并评分(步骤 2),不可跳过;审阅只暴露问题、不替 PRD 补内容。
|
|
256
|
+
- 评审报告**必生成**,不再询问是否生成。
|
|
257
|
+
- 门禁状态以 `<PRD>.gate.yaml` 为唯一真相源;报告是人类可读派生物,二者冲突以 gate.yaml 为准。
|
|
258
|
+
- 影响范围、用户行为、状态流转、数据契约、权限、异常处理或验收标准的歧义必须逐项确认;未清零只能停在 reviewing/blocked,或经用户授权走 passed-with-tbd(带 ⚠ 标记)。
|
|
259
|
+
- AskUserQuestion 是真实阻塞点:文字输出/推荐/默认值/历史选择/用户未反对都不能替代明确回答。
|
|
260
|
+
- 拆分粒度(1 PRD → 几个 change)由用户定,AI 只给建议不拍板。
|
|
261
|
+
- 每个 change 承接 PRD 对应功能项,不另起炉灶;范围/依赖/验收与 PRD 对齐。
|
|
262
262
|
- 多 change 时在各 change 的 In/Out Scope 显式互引边界职责归属。
|
|
263
263
|
- 扇出必须以 `gate fanout-status` 为持久化进度真相;`TaskCreate` 仅作展示,不得替代 gate.yaml 状态。
|
|
264
|
-
- 门禁通过后 PRD 若被改(哈希漂移),gate 转 stale,禁止再扇出 change,须重跑本 skill。
|
|
265
|
-
- 契约以项目架构文档(如 `docs/architecture/`,若存在)为事实源,change 里点名遵循了哪条,不硬编码具体值、不自造。
|
|
266
|
-
- 不写应用代码——本 skill 止于「过门禁 + 拆分 + 建 change 骨架」,实现由后续 comate 阶段驱动。
|
|
264
|
+
- 门禁通过后 PRD 若被改(哈希漂移),gate 转 stale,禁止再扇出 change,须重跑本 skill。
|
|
265
|
+
- 契约以项目架构文档(如 `docs/architecture/`,若存在)为事实源,change 里点名遵循了哪条,不硬编码具体值、不自造。
|
|
266
|
+
- 不写应用代码——本 skill 止于「过门禁 + 拆分 + 建 change 骨架」,实现由后续 comate 阶段驱动。
|
|
@@ -1,36 +1,36 @@
|
|
|
1
|
-
# docs 文档目录说明
|
|
2
|
-
|
|
3
|
-
本目录承载项目的长期文档,与代码同仓库、同评审、同版本管理。按用途分为以下几类:
|
|
4
|
-
|
|
5
|
-
| 子目录 | 定位 | 说明 |
|
|
6
|
-
|--------|------|------|
|
|
7
|
-
| `architecture/` | 架构规范 | 前后端分层、依赖规则、命名、错误码等工程铁律,以仓库**当前实现**为准 |
|
|
8
|
-
| `knowledge-base/` | 知识库 | 上游需求(PRD)与横向(第三方对接)的长期文档,详见其内 `README.md` |
|
|
9
|
-
|
|
10
|
-
## architecture/
|
|
11
|
-
|
|
12
|
-
工程约束的唯一来源,是 `/comate-gate` PRD 门禁审阅中「契约对齐」的事实源。改对应层代码前必须先读。
|
|
13
|
-
|
|
14
|
-
**占位目录,需根据项目实际情况建立规范文档**。常见架构文档包含:
|
|
15
|
-
|
|
16
|
-
- 后端分层 / 依赖 / DTO / 错误码 / 命名。
|
|
17
|
-
- 前端分层 / API / store / 路由 / 命名。
|
|
18
|
-
- 工程原则与铁律。
|
|
19
|
-
|
|
20
|
-
> 这些是**架构规则文档,不是 capability spec**,不放在 `openspec/specs/` 下,也不参与 `openspec validate --strict`。
|
|
21
|
-
> 调整架构相关代码时,必须同步更新对应文档。
|
|
22
|
-
|
|
23
|
-
## knowledge-base/
|
|
24
|
-
|
|
25
|
-
需求与第三方对接的长期文档,是 comate 变更流程的上游:
|
|
26
|
-
|
|
27
|
-
- `requirements/` —— 原始 PRD(产品需求文档)。PRD 经 `/comate-gate` 门禁与拆分后,扇出为 N 个 comate change。
|
|
28
|
-
- `integrations/` —— 第三方业务/接口对接档案与索引,跨多个变更长期维护。
|
|
29
|
-
|
|
30
|
-
完整的命名规则、溯源约定与铁律见 `knowledge-base/README.md`。
|
|
31
|
-
|
|
32
|
-
## 与 openspec/ 的边界
|
|
33
|
-
|
|
34
|
-
- `docs/` 放**长期文档**(架构规范、需求、对接档案)。
|
|
35
|
-
- `openspec/` 放**变更驱动的规格**:`changes/`(一次性变更)与 `specs/`(能力沉淀)。
|
|
36
|
-
- 两者通过 PRD 门禁状态(`<PRD>.gate.yaml`)与 change 的 `sources.manifest` 打通。
|
|
1
|
+
# docs 文档目录说明
|
|
2
|
+
|
|
3
|
+
本目录承载项目的长期文档,与代码同仓库、同评审、同版本管理。按用途分为以下几类:
|
|
4
|
+
|
|
5
|
+
| 子目录 | 定位 | 说明 |
|
|
6
|
+
|--------|------|------|
|
|
7
|
+
| `architecture/` | 架构规范 | 前后端分层、依赖规则、命名、错误码等工程铁律,以仓库**当前实现**为准 |
|
|
8
|
+
| `knowledge-base/` | 知识库 | 上游需求(PRD)与横向(第三方对接)的长期文档,详见其内 `README.md` |
|
|
9
|
+
|
|
10
|
+
## architecture/
|
|
11
|
+
|
|
12
|
+
工程约束的唯一来源,是 `/comate-gate` PRD 门禁审阅中「契约对齐」的事实源。改对应层代码前必须先读。
|
|
13
|
+
|
|
14
|
+
**占位目录,需根据项目实际情况建立规范文档**。常见架构文档包含:
|
|
15
|
+
|
|
16
|
+
- 后端分层 / 依赖 / DTO / 错误码 / 命名。
|
|
17
|
+
- 前端分层 / API / store / 路由 / 命名。
|
|
18
|
+
- 工程原则与铁律。
|
|
19
|
+
|
|
20
|
+
> 这些是**架构规则文档,不是 capability spec**,不放在 `openspec/specs/` 下,也不参与 `openspec validate --strict`。
|
|
21
|
+
> 调整架构相关代码时,必须同步更新对应文档。
|
|
22
|
+
|
|
23
|
+
## knowledge-base/
|
|
24
|
+
|
|
25
|
+
需求与第三方对接的长期文档,是 comate 变更流程的上游:
|
|
26
|
+
|
|
27
|
+
- `requirements/` —— 原始 PRD(产品需求文档)。PRD 经 `/comate-gate` 门禁与拆分后,扇出为 N 个 comate change。
|
|
28
|
+
- `integrations/` —— 第三方业务/接口对接档案与索引,跨多个变更长期维护。
|
|
29
|
+
|
|
30
|
+
完整的命名规则、溯源约定与铁律见 `knowledge-base/README.md`。
|
|
31
|
+
|
|
32
|
+
## 与 openspec/ 的边界
|
|
33
|
+
|
|
34
|
+
- `docs/` 放**长期文档**(架构规范、需求、对接档案)。
|
|
35
|
+
- `openspec/` 放**变更驱动的规格**:`changes/`(一次性变更)与 `specs/`(能力沉淀)。
|
|
36
|
+
- 两者通过 PRD 门禁状态(`<PRD>.gate.yaml`)与 change 的 `sources.manifest` 打通。
|
|
@@ -1,31 +1,31 @@
|
|
|
1
|
-
# architecture (架构规范占位目录)
|
|
2
|
-
|
|
3
|
-
> ⚠️ **本目录由 `comate init` 创建为占位,内容需根据项目实际情况建立。**
|
|
4
|
-
|
|
5
|
-
本目录是工程约束的**唯一来源**,也是 `/comate-gate` PRD 门禁审阅中「契约对齐架构文档」的事实源。
|
|
6
|
-
|
|
7
|
-
## 为什么需要架构文档
|
|
8
|
-
|
|
9
|
-
PRD 门禁审阅时,会检查数据来源、接口契约、命名规范、错误码、边界处理等是否明确。这些约束的**唯一事实源**应该是架构文档,而不是散落在 PRD/代码里的重复规则。
|
|
10
|
-
|
|
11
|
-
`/comate-gate` 要求 PRD 里的契约「对齐并点名遵循了架构文档的哪条」,不硬编码具体值、不自造规则。
|
|
12
|
-
|
|
13
|
-
## 建议包含的架构文档
|
|
14
|
-
|
|
15
|
-
根据项目技术栈,常见架构文档包括:
|
|
16
|
-
|
|
17
|
-
- **后端架构** — 分层(如 Controller / Service / Repository)、依赖规则、DTO 规范、错误码体系、命名约定、数据库表与字段命名、缓存 key 规范、权限收口。
|
|
18
|
-
- **前端架构** — 分层(如 views / components / api)、状态管理、路由、API 调用规范、组件命名。
|
|
19
|
-
- **工程原则** — 日志、监控、测试、发布流程等通用铁律。
|
|
20
|
-
|
|
21
|
-
## 如何使用
|
|
22
|
-
|
|
23
|
-
1. 根据项目实际情况,在本目录建立 `backend-architecture.md` / `frontend-architecture.md` 等文档。
|
|
24
|
-
2. PRD 里涉及接口、数据库、错误码、命名时,引用并对齐这些文档的既有约定。
|
|
25
|
-
3. 架构变更时,先更新本目录文档,再改代码。
|
|
26
|
-
|
|
27
|
-
## 注意事项
|
|
28
|
-
|
|
29
|
-
- 这些是**架构规则文档,不是 capability spec**,不放在 `openspec/specs/` 下。
|
|
30
|
-
- 不参与 `openspec validate --strict`。
|
|
31
|
-
- 由 `docs/knowledge-base/` 里的 PRD 引用,由 comate change 的 proposal/design 对齐。
|
|
1
|
+
# architecture (架构规范占位目录)
|
|
2
|
+
|
|
3
|
+
> ⚠️ **本目录由 `comate init` 创建为占位,内容需根据项目实际情况建立。**
|
|
4
|
+
|
|
5
|
+
本目录是工程约束的**唯一来源**,也是 `/comate-gate` PRD 门禁审阅中「契约对齐架构文档」的事实源。
|
|
6
|
+
|
|
7
|
+
## 为什么需要架构文档
|
|
8
|
+
|
|
9
|
+
PRD 门禁审阅时,会检查数据来源、接口契约、命名规范、错误码、边界处理等是否明确。这些约束的**唯一事实源**应该是架构文档,而不是散落在 PRD/代码里的重复规则。
|
|
10
|
+
|
|
11
|
+
`/comate-gate` 要求 PRD 里的契约「对齐并点名遵循了架构文档的哪条」,不硬编码具体值、不自造规则。
|
|
12
|
+
|
|
13
|
+
## 建议包含的架构文档
|
|
14
|
+
|
|
15
|
+
根据项目技术栈,常见架构文档包括:
|
|
16
|
+
|
|
17
|
+
- **后端架构** — 分层(如 Controller / Service / Repository)、依赖规则、DTO 规范、错误码体系、命名约定、数据库表与字段命名、缓存 key 规范、权限收口。
|
|
18
|
+
- **前端架构** — 分层(如 views / components / api)、状态管理、路由、API 调用规范、组件命名。
|
|
19
|
+
- **工程原则** — 日志、监控、测试、发布流程等通用铁律。
|
|
20
|
+
|
|
21
|
+
## 如何使用
|
|
22
|
+
|
|
23
|
+
1. 根据项目实际情况,在本目录建立 `backend-architecture.md` / `frontend-architecture.md` 等文档。
|
|
24
|
+
2. PRD 里涉及接口、数据库、错误码、命名时,引用并对齐这些文档的既有约定。
|
|
25
|
+
3. 架构变更时,先更新本目录文档,再改代码。
|
|
26
|
+
|
|
27
|
+
## 注意事项
|
|
28
|
+
|
|
29
|
+
- 这些是**架构规则文档,不是 capability spec**,不放在 `openspec/specs/` 下。
|
|
30
|
+
- 不参与 `openspec validate --strict`。
|
|
31
|
+
- 由 `docs/knowledge-base/` 里的 PRD 引用,由 comate change 的 proposal/design 对齐。
|