dev-playbooks-cn 1.0.13 → 1.0.15
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 +0 -1
- package/bin/devbooks.js +12 -0
- package/package.json +1 -1
- package/skills/Skills/344/275/277/347/224/250/350/257/264/346/230/216.md +0 -22
- package/skills/_shared/mcp-enhancement-template.md +0 -1
- package/skills/devbooks-brownfield-bootstrap/SKILL.md +45 -0
- package/skills/devbooks-code-review/SKILL.md +1 -1
- package/skills/devbooks-design-doc/SKILL.md +75 -0
- package/skills/devbooks-router/SKILL.md +3 -3
- package/skills/devbooks-spec-gardener/SKILL.md +56 -0
- package/templates/dev-playbooks/README.md +0 -1
- package/templates/dev-playbooks/docs/DevBooks/351/205/215/347/275/256/346/214/207/345/215/227.md +1 -2
- package/skills/devbooks-c4-map/SKILL.md +0 -151
- package/skills/devbooks-c4-map/references/C4/346/236/266/346/236/204/345/234/260/345/233/276/346/217/220/347/244/272/350/257/215.md +0 -33
- package/skills/devbooks-c4-map/references//345/210/206/345/261/202/347/272/246/346/235/237/346/243/200/346/237/245/346/270/205/345/215/225.md +0 -185
package/README.md
CHANGED
|
@@ -177,7 +177,6 @@ DevBooks 使用两个目录根:
|
|
|
177
177
|
| `devbooks-proposal-debate-workflow` | 三角对辩(Author/Challenger/Judge) |
|
|
178
178
|
| `devbooks-design-doc` | 创建设计文档 |
|
|
179
179
|
| `devbooks-spec-contract` | 定义规格与契约 |
|
|
180
|
-
| `devbooks-c4-map` | 生成 C4 架构地图 |
|
|
181
180
|
| `devbooks-implementation-plan` | 创建实现计划 |
|
|
182
181
|
|
|
183
182
|
### Apply 阶段
|
package/bin/devbooks.js
CHANGED
|
@@ -334,6 +334,18 @@ function installSkills(toolIds, update = false) {
|
|
|
334
334
|
|
|
335
335
|
fs.mkdirSync(skillsDestDir, { recursive: true });
|
|
336
336
|
|
|
337
|
+
// 先安装共享目录 _shared(如果存在)
|
|
338
|
+
const sharedSrcDir = path.join(skillsSrcDir, '_shared');
|
|
339
|
+
if (fs.existsSync(sharedSrcDir)) {
|
|
340
|
+
const sharedDestDir = path.join(skillsDestDir, '_shared');
|
|
341
|
+
if (update || !fs.existsSync(sharedDestDir)) {
|
|
342
|
+
if (fs.existsSync(sharedDestDir)) {
|
|
343
|
+
fs.rmSync(sharedDestDir, { recursive: true, force: true });
|
|
344
|
+
}
|
|
345
|
+
copyDirSync(sharedSrcDir, sharedDestDir);
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
|
|
337
349
|
let installedCount = 0;
|
|
338
350
|
for (const skillName of skillDirs) {
|
|
339
351
|
const srcPath = path.join(skillsSrcDir, skillName);
|
package/package.json
CHANGED
|
@@ -171,28 +171,6 @@
|
|
|
171
171
|
|
|
172
172
|
---
|
|
173
173
|
|
|
174
|
-
## `devbooks-c4-map`(C4 Map Maintainer)
|
|
175
|
-
|
|
176
|
-
- 作用:维护/更新项目的权威 C4 架构地图(当前真理),并按变更输出 C4 Delta。
|
|
177
|
-
- 使用场景:
|
|
178
|
-
- **Proposal 阶段**:需要在 `design.md` 里写清“边界/依赖方向变化”(只写 **C4 Delta**,不改当前真理)
|
|
179
|
-
- **Review/Archive 阶段**:变更已实现并准备合并当前真理,更新权威地图 `(<truth-root>/architecture/c4.md)`
|
|
180
|
-
- 使用话术:
|
|
181
|
-
- Proposal(只写 C4 Delta,不改当前真理):
|
|
182
|
-
```text
|
|
183
|
-
你现在是 C4 Map Maintainer。请点名使用 `devbooks-c4-map`,但在 proposal 阶段**不要修改** `dev-playbooks/specs/architecture/c4.md`(当前真理)。
|
|
184
|
-
先读:`dev-playbooks/specs/architecture/c4.md`(如存在)+ 本次 `dev-playbooks/changes/<change-id>/proposal.md` + `dev-playbooks/changes/<change-id>/design.md`
|
|
185
|
-
请输出:一段可直接粘贴进 `dev-playbooks/changes/<change-id>/design.md` 的 **C4 Delta** 小节(C1/C2/C3 新增/修改/移除 + 依赖方向变化 + 建议的 Architecture Guardrails/fitness tests 条目)。
|
|
186
|
-
```
|
|
187
|
-
- Review/Archive(更新当前真理的权威地图):
|
|
188
|
-
```text
|
|
189
|
-
你现在是 C4 Map Maintainer。请点名使用 `devbooks-c4-map`。
|
|
190
|
-
先读:`dev-playbooks/specs/architecture/c4.md`(如存在)+ 本次 `dev-playbooks/changes/<change-id>/design.md` + 相关代码改动(用于确认变更已真实落地)
|
|
191
|
-
请更新(或创建最小骨架并标 TODO):`dev-playbooks/specs/architecture/c4.md`。
|
|
192
|
-
```
|
|
193
|
-
|
|
194
|
-
---
|
|
195
|
-
|
|
196
174
|
## `devbooks-implementation-plan`(Planner / tasks.md)
|
|
197
175
|
|
|
198
176
|
- 作用:从 `design.md` 推导编码计划 `tasks.md`(主线计划/临时计划/断点区),并绑定验收锚点(不得参考 tests/)。
|
|
@@ -91,7 +91,6 @@
|
|
|
91
91
|
| devbooks-index-bootstrap | mcp__ckb__getStatus | 索引状态检测 |
|
|
92
92
|
| devbooks-federation | mcp__ckb__*, mcp__github__* | 跨仓库分析 |
|
|
93
93
|
| devbooks-router | mcp__ckb__getStatus | 索引可用性检测 |
|
|
94
|
-
| devbooks-c4-map | mcp__ckb__getArchitecture | 模块依赖图 |
|
|
95
94
|
| devbooks-spec-contract | mcp__ckb__findReferences | 引用检测 |
|
|
96
95
|
| devbooks-entropy-monitor | mcp__ckb__getHotspots | 热点趋势分析 |
|
|
97
96
|
| devbooks-delivery-workflow | mcp__ckb__getStatus | 索引检测 |
|
|
@@ -74,8 +74,12 @@ tools:
|
|
|
74
74
|
|
|
75
75
|
| 产物 | 路径 | 数据来源 |
|
|
76
76
|
|------|------|----------|
|
|
77
|
+
| **C4 架构地图** | `architecture/c4.md` | 综合分析 + CKB(增强模式) |
|
|
77
78
|
| 模块依赖图 | `architecture/module-graph.md` | `mcp__ckb__getArchitecture` |
|
|
78
79
|
| 技术债热点 | `architecture/hotspots.md` | `mcp__ckb__getHotspots` |
|
|
80
|
+
| 分层约束 | `architecture/layering-constraints.md` | 代码分析(可选) |
|
|
81
|
+
|
|
82
|
+
> **设计决策**:C4 架构地图现在由 brownfield-bootstrap 在初始化时生成,后续架构变更通过 design.md 的 Architecture Impact 章节记录,由 spec-gardener 在归档时合并。
|
|
79
83
|
|
|
80
84
|
### 4. 基线变更包
|
|
81
85
|
|
|
@@ -98,11 +102,52 @@ tools:
|
|
|
98
102
|
|
|
99
103
|
| 产物 | 路径 | 数据来源 |
|
|
100
104
|
|------|------|----------|
|
|
105
|
+
| **C4 架构地图** | `<truth-root>/architecture/c4.md` | 综合分析 |
|
|
101
106
|
| 模块依赖图 | `<truth-root>/architecture/module-graph.md` | `mcp__ckb__getArchitecture` |
|
|
102
107
|
| 技术债热点 | `<truth-root>/architecture/hotspots.md` | `mcp__ckb__getHotspots` |
|
|
103
108
|
| 领域概念 | `<truth-root>/_meta/key-concepts.md` | `mcp__ckb__listKeyConcepts` |
|
|
104
109
|
| 项目画像 | `<truth-root>/_meta/project-profile.md` | 综合分析 |
|
|
105
110
|
|
|
111
|
+
### C4 架构地图生成规则
|
|
112
|
+
|
|
113
|
+
初始化时生成的 C4 地图应包含:
|
|
114
|
+
|
|
115
|
+
1. **Context 层**:系统与外部参与者(用户、外部系统)的关系
|
|
116
|
+
2. **Container 层**:系统内的容器(应用、数据库、服务)
|
|
117
|
+
3. **Component 层**:主要容器内的组件(模块、类)
|
|
118
|
+
|
|
119
|
+
**输出格式**:
|
|
120
|
+
|
|
121
|
+
```markdown
|
|
122
|
+
# C4 Architecture Map
|
|
123
|
+
|
|
124
|
+
## System Context
|
|
125
|
+
|
|
126
|
+
[描述系统边界与外部交互]
|
|
127
|
+
|
|
128
|
+
## Container Diagram
|
|
129
|
+
|
|
130
|
+
| Container | 技术栈 | 职责 |
|
|
131
|
+
|-----------|--------|------|
|
|
132
|
+
| <name> | <tech> | <responsibility> |
|
|
133
|
+
|
|
134
|
+
## Component Diagram
|
|
135
|
+
|
|
136
|
+
### <Container Name>
|
|
137
|
+
|
|
138
|
+
| Component | 职责 | 依赖 |
|
|
139
|
+
|-----------|------|------|
|
|
140
|
+
| <name> | <responsibility> | <dependencies> |
|
|
141
|
+
|
|
142
|
+
## Architecture Guardrails
|
|
143
|
+
|
|
144
|
+
### Layering Constraints
|
|
145
|
+
|
|
146
|
+
| 层级 | 可依赖 | 禁止依赖 |
|
|
147
|
+
|------|--------|----------|
|
|
148
|
+
| <layer> | <allowed> | <forbidden> |
|
|
149
|
+
```
|
|
150
|
+
|
|
106
151
|
### 热点计算公式
|
|
107
152
|
|
|
108
153
|
```
|
|
@@ -74,6 +74,81 @@ tools:
|
|
|
74
74
|
| 新增命令/CLI 参数 | 使用说明 |
|
|
75
75
|
| 对外 API 变更 | API 文档 |
|
|
76
76
|
|
|
77
|
+
## 架构影响声明(Architecture Impact)(必填)
|
|
78
|
+
|
|
79
|
+
设计文档中**必须**包含「架构影响」章节,声明本次变更对系统架构的影响。这是确保架构变更走验证闭环的关键机制。
|
|
80
|
+
|
|
81
|
+
> **设计决策**:C4 架构变更不再由独立的 `devbooks-c4-map` skill 直接写入真理目录,而是作为 design.md 的一部分,在变更验收通过后由 `devbooks-spec-gardener` 合并到真理。
|
|
82
|
+
|
|
83
|
+
### 模板
|
|
84
|
+
|
|
85
|
+
```markdown
|
|
86
|
+
## Architecture Impact(架构影响)
|
|
87
|
+
|
|
88
|
+
<!-- 必填:选择以下之一 -->
|
|
89
|
+
|
|
90
|
+
### 无架构变更
|
|
91
|
+
|
|
92
|
+
- [x] 本次变更不影响模块边界、依赖方向或组件结构
|
|
93
|
+
- 原因说明:<简要说明为什么无架构影响>
|
|
94
|
+
|
|
95
|
+
### 有架构变更
|
|
96
|
+
|
|
97
|
+
#### C4 层级影响
|
|
98
|
+
|
|
99
|
+
| 层级 | 变更类型 | 影响描述 |
|
|
100
|
+
|------|----------|----------|
|
|
101
|
+
| Context | 无变更 / 新增 / 修改 / 删除 | <描述> |
|
|
102
|
+
| Container | 无变更 / 新增 / 修改 / 删除 | <描述> |
|
|
103
|
+
| Component | 无变更 / 新增 / 修改 / 删除 | <描述> |
|
|
104
|
+
|
|
105
|
+
#### Container 变更详情
|
|
106
|
+
|
|
107
|
+
- [新增/修改/删除] `<container-name>`: <变更描述>
|
|
108
|
+
|
|
109
|
+
#### Component 变更详情
|
|
110
|
+
|
|
111
|
+
- [新增/修改/删除] `<component-name>` in `<container>`: <变更描述>
|
|
112
|
+
|
|
113
|
+
#### 依赖变更
|
|
114
|
+
|
|
115
|
+
| 源 | 目标 | 变更类型 | 说明 |
|
|
116
|
+
|----|------|----------|------|
|
|
117
|
+
| `<source>` | `<target>` | 新增/删除/方向改变 | <说明> |
|
|
118
|
+
|
|
119
|
+
#### 分层约束影响
|
|
120
|
+
|
|
121
|
+
- [ ] 本次变更遵守现有分层约束
|
|
122
|
+
- [ ] 本次变更需要修改分层约束(需在下方说明)
|
|
123
|
+
|
|
124
|
+
分层约束修改说明:<如有>
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
### 判断规则
|
|
128
|
+
|
|
129
|
+
执行 design-doc skill 时,**必须检测**以下条件判断是否有架构变更:
|
|
130
|
+
|
|
131
|
+
| 检测项 | 检测方法 | 有架构变更 |
|
|
132
|
+
|--------|----------|------------|
|
|
133
|
+
| 新增/删除目录 | 检查变更文件路径 | 可能影响模块边界 |
|
|
134
|
+
| 跨模块 import | 检查 import 语句变化 | 可能影响依赖方向 |
|
|
135
|
+
| 新外部依赖 | 检查 package.json/go.mod 等 | 影响 Container 层 |
|
|
136
|
+
| 新服务/进程 | 检查 Dockerfile/docker-compose | 影响 Container 层 |
|
|
137
|
+
| 新 API 端点组 | 检查路由定义 | 可能影响 Component 层 |
|
|
138
|
+
|
|
139
|
+
### 触发规则
|
|
140
|
+
|
|
141
|
+
以下变更类型**强制要求**填写架构变更详情:
|
|
142
|
+
|
|
143
|
+
| 变更类型 | 要求 |
|
|
144
|
+
|----------|------|
|
|
145
|
+
| 新增模块/目录 | 必须描述 Component 变更 |
|
|
146
|
+
| 新增服务/容器 | 必须描述 Container 变更 |
|
|
147
|
+
| 修改模块间依赖 | 必须描述依赖变更 |
|
|
148
|
+
| 引入新外部系统 | 必须描述 Context 变更 |
|
|
149
|
+
|
|
150
|
+
---
|
|
151
|
+
|
|
77
152
|
## 执行方式
|
|
78
153
|
|
|
79
154
|
1) 先阅读并遵守:`_shared/references/通用守门协议.md`(可验证性 + 结构质量守门)。
|
|
@@ -108,7 +108,7 @@ impact_profile:
|
|
|
108
108
|
| Impact 字段 | 值 | 自动追加 Skill |
|
|
109
109
|
|-------------|-----|---------------|
|
|
110
110
|
| `external_api: true` | - | `devbooks-spec-contract` |
|
|
111
|
-
| `architecture_boundary: true` | - | `devbooks-
|
|
111
|
+
| `architecture_boundary: true` | - | `devbooks-design-doc`(确保 Architecture Impact 章节完整) |
|
|
112
112
|
| `cross_repo: true` | - | `devbooks-federation` |
|
|
113
113
|
| `risk_level: high` | - | `devbooks-proposal-debate-workflow` |
|
|
114
114
|
| `affected_modules` 数量 > 5 | - | `devbooks-impact-analysis`(深度分析) |
|
|
@@ -125,7 +125,7 @@ impact_profile:
|
|
|
125
125
|
|
|
126
126
|
### 建议执行(基于 Impact 分析)
|
|
127
127
|
4. `devbooks-spec-contract skill` → specs/**(检测到 external_api: true)
|
|
128
|
-
5. `devbooks-
|
|
128
|
+
5. `devbooks-design-doc skill` → design.md Architecture Impact 章节(检测到 architecture_boundary: true)
|
|
129
129
|
|
|
130
130
|
### 可选执行
|
|
131
131
|
6. `devbooks-impact-analysis skill` → 深度影响分析(affected_modules > 5)
|
|
@@ -182,7 +182,7 @@ skill 列表:
|
|
|
182
182
|
- **风险/争议/取舍明显**:`devbooks-proposal-debate-workflow`(Author/Challenger/Judge,对辩后写回 Decision Log)
|
|
183
183
|
- **对外行为/契约/数据不变量变化**:`devbooks-spec-contract` → `(<change-root>/<change-id>/specs/**)` + `design.md` Contract 章节
|
|
184
184
|
- 若需要"确定性创建 spec delta 文件/避免路径写错":`change-spec-delta-scaffold.sh <change-id> <capability> ...`
|
|
185
|
-
-
|
|
185
|
+
- **模块边界/依赖方向/架构形态变化**:确保 `devbooks-design-doc` 输出完整的 Architecture Impact 章节 → 归档时由 `devbooks-spec-gardener` 合并到 `(<truth-root>/architecture/c4.md)`
|
|
186
186
|
|
|
187
187
|
硬约束提醒:
|
|
188
188
|
- proposal 阶段禁止写实现代码;实现发生在 apply 阶段并以测试/闸门为完成判据。
|
|
@@ -27,6 +27,62 @@ tools:
|
|
|
27
27
|
- 禁止猜测目录根
|
|
28
28
|
- 禁止跳过规则文档阅读
|
|
29
29
|
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## 核心职责
|
|
33
|
+
|
|
34
|
+
### 1. 规格合并与维护
|
|
35
|
+
|
|
36
|
+
在归档阶段,将变更包中的规格产物合并到 `<truth-root>`:
|
|
37
|
+
|
|
38
|
+
| 源路径 | 目标路径 | 合并策略 |
|
|
39
|
+
|--------|----------|----------|
|
|
40
|
+
| `<change-root>/<change-id>/specs/**` | `<truth-root>/specs/**` | 增量合并 |
|
|
41
|
+
| `<change-root>/<change-id>/contracts/**` | `<truth-root>/contracts/**` | 版本化合并 |
|
|
42
|
+
|
|
43
|
+
### 2. C4 架构地图合并(新增)
|
|
44
|
+
|
|
45
|
+
> **设计决策**:C4 架构变更现在通过 design.md 的 Architecture Impact 章节记录,由 spec-gardener 在归档时合并到真理。
|
|
46
|
+
|
|
47
|
+
在归档阶段,检测并合并架构变更:
|
|
48
|
+
|
|
49
|
+
| 检测源 | 目标路径 | 合并逻辑 |
|
|
50
|
+
|--------|----------|----------|
|
|
51
|
+
| `<change-root>/<change-id>/design.md` 的 "Architecture Impact" 章节 | `<truth-root>/architecture/c4.md` | 增量更新 |
|
|
52
|
+
|
|
53
|
+
**C4 合并流程**:
|
|
54
|
+
|
|
55
|
+
1. **检测架构变更**:解析 `design.md` 中的 "Architecture Impact" 章节
|
|
56
|
+
2. **判断是否需要合并**:
|
|
57
|
+
- 若 "无架构变更" 被勾选 → 跳过合并
|
|
58
|
+
- 若 "有架构变更" → 执行合并
|
|
59
|
+
3. **执行合并**:
|
|
60
|
+
- 读取 `<truth-root>/architecture/c4.md`(若不存在则创建)
|
|
61
|
+
- 根据 Architecture Impact 中的变更描述更新对应章节
|
|
62
|
+
- 更新 Container/Component 表格
|
|
63
|
+
- 更新依赖关系
|
|
64
|
+
- 更新分层约束(如有变更)
|
|
65
|
+
4. **记录合并日志**:在 c4.md 末尾添加变更记录
|
|
66
|
+
|
|
67
|
+
**合并输出格式**(追加到 c4.md):
|
|
68
|
+
|
|
69
|
+
```markdown
|
|
70
|
+
## Change History
|
|
71
|
+
|
|
72
|
+
| Date | Change ID | Impact Summary |
|
|
73
|
+
|------|-----------|----------------|
|
|
74
|
+
| <date> | <change-id> | <brief description of architecture changes> |
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
### 3. 去重与清理
|
|
78
|
+
|
|
79
|
+
在维护模式下执行:
|
|
80
|
+
|
|
81
|
+
- 检测重复的规格定义
|
|
82
|
+
- 清理过时/废弃的规格
|
|
83
|
+
- 整理目录结构
|
|
84
|
+
- 修复一致性问题
|
|
85
|
+
|
|
30
86
|
## 执行方式
|
|
31
87
|
|
|
32
88
|
1) 先阅读并遵守:`_shared/references/通用守门协议.md`(可验证性 + 结构质量守门)。
|
|
@@ -177,7 +177,6 @@ DevBooks 使用两个目录根:
|
|
|
177
177
|
| `devbooks-proposal-debate-workflow` | 三角对辩(Author/Challenger/Judge) |
|
|
178
178
|
| `devbooks-design-doc` | 创建设计文档 |
|
|
179
179
|
| `devbooks-spec-contract` | 定义规格与契约 |
|
|
180
|
-
| `devbooks-c4-map` | 生成 C4 架构地图 |
|
|
181
180
|
| `devbooks-implementation-plan` | 创建实现计划 |
|
|
182
181
|
|
|
183
182
|
### Apply 阶段
|
package/templates/dev-playbooks/docs/DevBooks/351/205/215/347/275/256/346/214/207/345/215/227.md
CHANGED
|
@@ -132,8 +132,7 @@ change_root: dev-playbooks/changes/ # 变更包目录根
|
|
|
132
132
|
| Test Owner | `devbooks-test-owner` | `verification.md` + `tests/` |
|
|
133
133
|
| Coder | `devbooks-coder` | 按 tasks 实现(禁止改 tests) |
|
|
134
134
|
| Reviewer | `devbooks-code-review` | 评审意见 |
|
|
135
|
-
| Spec Gardener | `devbooks-spec-gardener` | 归档修剪 |
|
|
136
|
-
| C4 Map | `devbooks-c4-map` | `architecture/c4.md` |
|
|
135
|
+
| Spec Gardener | `devbooks-spec-gardener` | 归档修剪 + C4 合并 |
|
|
137
136
|
| Design Backport | `devbooks-design-backport` | 回写设计缺口 |
|
|
138
137
|
|
|
139
138
|
### 按工作流
|
|
@@ -1,151 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: devbooks-c4-map
|
|
3
|
-
description: devbooks-c4-map:维护/更新项目的 C4 架构地图(当前真理),并按变更输出 C4 Delta。用户说"画架构图/C4/边界/依赖方向/模块地图/架构地图维护"等时使用。
|
|
4
|
-
tools:
|
|
5
|
-
- Glob
|
|
6
|
-
- Grep
|
|
7
|
-
- Read
|
|
8
|
-
- Write
|
|
9
|
-
- Edit
|
|
10
|
-
---
|
|
11
|
-
|
|
12
|
-
# DevBooks:C4 架构地图
|
|
13
|
-
|
|
14
|
-
## 前置:配置发现(协议无关)
|
|
15
|
-
|
|
16
|
-
- `<truth-root>`:当前真理目录根
|
|
17
|
-
- `<change-root>`:变更包目录根
|
|
18
|
-
|
|
19
|
-
执行前**必须**按以下顺序查找配置(找到后停止):
|
|
20
|
-
1. `.devbooks/config.yaml`(如存在)→ 解析并使用其中的映射
|
|
21
|
-
2. `dev-playbooks/project.md`(如存在)→ DevBooks 2.0 协议,使用默认映射
|
|
22
|
-
4. `project.md`(如存在)→ template 协议,使用默认映射
|
|
23
|
-
5. 若仍无法确定 → **停止并询问用户**
|
|
24
|
-
|
|
25
|
-
**关键约束**:
|
|
26
|
-
- 如果配置中指定了 `agents_doc`(规则文档),**必须先阅读该文档**再执行任何操作
|
|
27
|
-
- 禁止猜测目录根
|
|
28
|
-
- 禁止跳过规则文档阅读
|
|
29
|
-
|
|
30
|
-
## 产物落点
|
|
31
|
-
|
|
32
|
-
- 权威 C4 地图:`<truth-root>/architecture/c4.md`
|
|
33
|
-
- 分层约束定义:`<truth-root>/architecture/layering-constraints.md`(可选)
|
|
34
|
-
|
|
35
|
-
## 分层依赖约束(Layering Constraints)
|
|
36
|
-
|
|
37
|
-
借鉴 VS Code 的分层架构强制机制,C4 地图应包含**分层约束**章节:
|
|
38
|
-
|
|
39
|
-
### 分层约束定义规则
|
|
40
|
-
|
|
41
|
-
1. **单向依赖原则**:上层可依赖下层,下层禁止依赖上层
|
|
42
|
-
- 示例:`base ← platform ← domain ← application ← ui`
|
|
43
|
-
- 箭头方向表示"被依赖方向"
|
|
44
|
-
|
|
45
|
-
2. **环境隔离原则**:`common` 层只能被 `browser`/`node` 层引用,不能反向
|
|
46
|
-
- `common`:平台无关代码
|
|
47
|
-
- `browser`:浏览器特定代码(DOM API)
|
|
48
|
-
- `node`:Node.js 特定代码(fs、process)
|
|
49
|
-
|
|
50
|
-
3. **contrib 反向隔离**:贡献模块只能依赖核心,核心禁止依赖贡献模块
|
|
51
|
-
- 示例:`workbench/contrib/*` → `workbench/core`(允许)
|
|
52
|
-
- 示例:`workbench/core` → `workbench/contrib/*`(禁止)
|
|
53
|
-
|
|
54
|
-
### 分层约束输出格式
|
|
55
|
-
|
|
56
|
-
在 `c4.md` 的 `## Architecture Guardrails` 部分必须包含:
|
|
57
|
-
|
|
58
|
-
```markdown
|
|
59
|
-
### Layering Constraints
|
|
60
|
-
|
|
61
|
-
| 层级 | 可依赖 | 禁止依赖 |
|
|
62
|
-
|------|--------|----------|
|
|
63
|
-
| base | (无) | platform, domain, application, ui |
|
|
64
|
-
| platform | base | domain, application, ui |
|
|
65
|
-
| domain | base, platform | application, ui |
|
|
66
|
-
| application | base, platform, domain | ui |
|
|
67
|
-
| ui | base, platform, domain, application | (无) |
|
|
68
|
-
|
|
69
|
-
### Environment Constraints
|
|
70
|
-
|
|
71
|
-
| 环境 | 可引用 | 禁止引用 |
|
|
72
|
-
|------|--------|----------|
|
|
73
|
-
| common | (平台无关库) | browser/*, node/* |
|
|
74
|
-
| browser | common/* | node/* |
|
|
75
|
-
| node | common/* | browser/* |
|
|
76
|
-
```
|
|
77
|
-
|
|
78
|
-
## 执行方式
|
|
79
|
-
|
|
80
|
-
1) 先阅读并遵守:`_shared/references/通用守门协议.md`(可验证性 + 结构质量守门)。
|
|
81
|
-
2) 严格按完整提示词输出:`references/C4架构地图提示词.md`。
|
|
82
|
-
3) 参考分层约束检查清单:`references/分层约束检查清单.md`。
|
|
83
|
-
|
|
84
|
-
---
|
|
85
|
-
|
|
86
|
-
## 上下文感知
|
|
87
|
-
|
|
88
|
-
本 Skill 在执行前自动检测上下文,选择合适的运行模式。
|
|
89
|
-
|
|
90
|
-
检测规则参考:`skills/_shared/context-detection-template.md`
|
|
91
|
-
|
|
92
|
-
### 检测流程
|
|
93
|
-
|
|
94
|
-
1. 检测 `<truth-root>/architecture/c4.md` 是否存在
|
|
95
|
-
2. 若提供 change-id,检测是否有 C4 相关变更
|
|
96
|
-
3. 根据检测结果选择运行模式
|
|
97
|
-
|
|
98
|
-
### 本 Skill 支持的模式
|
|
99
|
-
|
|
100
|
-
| 模式 | 触发条件 | 行为 |
|
|
101
|
-
|------|----------|------|
|
|
102
|
-
| **创建模式** | `c4.md` 不存在 | 分析代码库,生成完整 C4 各层级图(Context/Container/Component) |
|
|
103
|
-
| **更新模式** | `c4.md` 存在,有变更需要反映 | 读取变更内容,输出 C4 Delta,更新架构图 |
|
|
104
|
-
|
|
105
|
-
### 检测输出示例
|
|
106
|
-
|
|
107
|
-
```
|
|
108
|
-
检测结果:
|
|
109
|
-
- 产物存在性:c4.md 存在
|
|
110
|
-
- 变更影响:检测到组件级变更(新增 templates/claude-commands/devbooks/ 15 个文件)
|
|
111
|
-
- 运行模式:更新模式
|
|
112
|
-
```
|
|
113
|
-
|
|
114
|
-
---
|
|
115
|
-
|
|
116
|
-
## MCP 增强
|
|
117
|
-
|
|
118
|
-
本 Skill 支持 MCP 运行时增强,自动检测并启用高级功能。
|
|
119
|
-
|
|
120
|
-
MCP 增强规则参考:`skills/_shared/mcp-enhancement-template.md`
|
|
121
|
-
|
|
122
|
-
### 依赖的 MCP 服务
|
|
123
|
-
|
|
124
|
-
| 服务 | 用途 | 超时 |
|
|
125
|
-
|------|------|------|
|
|
126
|
-
| `mcp__ckb__getArchitecture` | 获取模块依赖图 | 2s |
|
|
127
|
-
| `mcp__ckb__getStatus` | 检测 CKB 索引可用性 | 2s |
|
|
128
|
-
|
|
129
|
-
### 检测流程
|
|
130
|
-
|
|
131
|
-
1. 调用 `mcp__ckb__getStatus`(2s 超时)
|
|
132
|
-
2. 若 CKB 可用 → 调用 `mcp__ckb__getArchitecture` 获取精确模块依赖
|
|
133
|
-
3. 若超时或失败 → 降级到基于目录结构的推断
|
|
134
|
-
|
|
135
|
-
### 增强模式 vs 基础模式
|
|
136
|
-
|
|
137
|
-
| 功能 | 增强模式 | 基础模式 |
|
|
138
|
-
|------|----------|----------|
|
|
139
|
-
| 模块识别 | CKB 精确边界 | 目录结构推断 |
|
|
140
|
-
| 依赖方向 | 符号级分析 | import 语句匹配 |
|
|
141
|
-
| 循环检测 | 精确检测 | 启发式检测 |
|
|
142
|
-
|
|
143
|
-
### 降级提示
|
|
144
|
-
|
|
145
|
-
当 MCP 不可用时,输出以下提示:
|
|
146
|
-
|
|
147
|
-
```
|
|
148
|
-
⚠️ CKB 不可用,使用目录结构推断架构。
|
|
149
|
-
生成的 C4 图可能不够精确,建议运行 devbooks-index-bootstrap skill 生成索引。
|
|
150
|
-
```
|
|
151
|
-
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
# C4架构地图提示词
|
|
2
|
-
|
|
3
|
-
> **角色设定**:你是架构可视化领域的**最强大脑**——融合了 Simon Brown(C4 模型创始人)、Martin Fowler(架构模式)、Gregor Hohpe(企业集成模式)的智慧。你的架构地图必须达到这些大师级专家的水准。
|
|
4
|
-
|
|
5
|
-
最高指示(优先级最高):
|
|
6
|
-
- 在执行本提示词前,先阅读 `_shared/references/通用守门协议.md` 并遵循其中所有协议。
|
|
7
|
-
|
|
8
|
-
你是"架构地图维护者(C4 Map Maintainer)"。你的目标是用 C4(Context/Container/Component)为大型项目维护一份**稳定的架构地图(Current Truth)**,并确保它能为影响分析、任务拆解与架构闸门(fitness tests)提供可操作的输入。
|
|
9
|
-
|
|
10
|
-
关键观点(与你的直觉对齐):
|
|
11
|
-
- C4 的“权威版本”不应散落在每次变更的设计里;它是跨变更的“当前真理地图”
|
|
12
|
-
- 每次变更的设计文档里只写 **C4 Delta**(本次新增/修改/移除什么),并在变更包里安排任务去更新权威地图
|
|
13
|
-
|
|
14
|
-
推荐落点(不放对外 docs):
|
|
15
|
-
- 将权威 C4 地图放在“当前真理源”里,例如:
|
|
16
|
-
- `<truth-root>/architecture/c4.md`(或你指定的等价位置)
|
|
17
|
-
|
|
18
|
-
输入材料(由我提供):
|
|
19
|
-
- 当前 C4 地图(如已有)
|
|
20
|
-
- 当前规格:`<truth-root>/`
|
|
21
|
-
- 本次变更设计:`<change-root>/<change-id>/design.md`(若是在做架构变更)
|
|
22
|
-
|
|
23
|
-
输出格式(MECE):
|
|
24
|
-
1) C1:System Context(系统边界、外部系统、主要用户)
|
|
25
|
-
2) C2:Container(主要容器/服务/应用,接口与依赖方向)
|
|
26
|
-
3) C3:Component(只对关键容器展开,保持最小)
|
|
27
|
-
4) Architecture Guardrails(建议的架构适配测试条目,例:分层/禁止循环/禁止越界依赖)
|
|
28
|
-
|
|
29
|
-
图示要求:
|
|
30
|
-
- 允许用 Mermaid;优先用文本可读的方式表达(避免过度美化)
|
|
31
|
-
- 不需要覆盖一切细节;目标是“对齐边界与依赖方向”
|
|
32
|
-
|
|
33
|
-
现在开始输出 C4 地图 Markdown,不要输出额外解释。
|
|
@@ -1,185 +0,0 @@
|
|
|
1
|
-
# 分层约束检查清单
|
|
2
|
-
|
|
3
|
-
借鉴 VS Code 的 `code-layering.ts` 和 `layersChecker.ts`,本文档定义了分层架构的检查规则。
|
|
4
|
-
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## 1) 分层依赖检查规则
|
|
8
|
-
|
|
9
|
-
### 1.1 单向依赖违规检测
|
|
10
|
-
|
|
11
|
-
**检查方式**:扫描 import/require 语句,验证依赖方向
|
|
12
|
-
|
|
13
|
-
```typescript
|
|
14
|
-
// 违规示例:base 层引用 platform 层
|
|
15
|
-
// src/base/utils.ts
|
|
16
|
-
import { ConfigService } from '../platform/config'; // 违规!
|
|
17
|
-
|
|
18
|
-
// 正确示例:platform 层引用 base 层
|
|
19
|
-
// src/platform/config.ts
|
|
20
|
-
import { deepClone } from '../base/utils'; // 合法
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
**检查命令示例**(使用 grep/rg):
|
|
24
|
-
|
|
25
|
-
```bash
|
|
26
|
-
# 检查 base 层是否违规引用 platform
|
|
27
|
-
rg "from ['\"].*platform" src/base/ --type ts
|
|
28
|
-
|
|
29
|
-
# 检查 common 层是否违规引用 browser/node
|
|
30
|
-
rg "from ['\"].*(browser|node)" src/common/ --type ts
|
|
31
|
-
```
|
|
32
|
-
|
|
33
|
-
### 1.2 环境隔离违规检测
|
|
34
|
-
|
|
35
|
-
| 环境 | 禁止的 API | 检测正则 |
|
|
36
|
-
|------|-----------|---------|
|
|
37
|
-
| common | DOM API | `document\.|window\.|navigator\.` |
|
|
38
|
-
| common | Node API | `require\(['"]fs['"]\)|process\.|__dirname` |
|
|
39
|
-
| browser | Node API | `require\(['"]fs['"]\)|child_process` |
|
|
40
|
-
| node | DOM API | `document\.|window\.|DOM\.` |
|
|
41
|
-
|
|
42
|
-
### 1.3 contrib 反向依赖检测
|
|
43
|
-
|
|
44
|
-
```bash
|
|
45
|
-
# 检查 core 是否违规引用 contrib
|
|
46
|
-
rg "from ['\"].*contrib" src/core/ --type ts
|
|
47
|
-
rg "from ['\"].*contrib" src/workbench/services/ --type ts
|
|
48
|
-
```
|
|
49
|
-
|
|
50
|
-
---
|
|
51
|
-
|
|
52
|
-
## 2) 分层约束定义模板
|
|
53
|
-
|
|
54
|
-
在 `<truth-root>/architecture/c4.md` 中添加:
|
|
55
|
-
|
|
56
|
-
```markdown
|
|
57
|
-
## Architecture Guardrails
|
|
58
|
-
|
|
59
|
-
### Layering Constraints
|
|
60
|
-
|
|
61
|
-
本项目采用 N 层架构,依赖方向为:base ← platform ← domain ← application ← ui
|
|
62
|
-
|
|
63
|
-
| 层级 | 目录 | 职责 | 可依赖 | 禁止依赖 |
|
|
64
|
-
|------|------|------|--------|----------|
|
|
65
|
-
| base | src/base/ | 基础工具、跨平台抽象 | (无) | 所有其他层 |
|
|
66
|
-
| platform | src/platform/ | 平台服务、依赖注入 | base | domain, app, ui |
|
|
67
|
-
| domain | src/domain/ | 业务逻辑、领域模型 | base, platform | app, ui |
|
|
68
|
-
| application | src/app/ | 应用服务、用例编排 | base, platform, domain | ui |
|
|
69
|
-
| ui | src/ui/ | 用户界面、交互逻辑 | 所有层 | (无) |
|
|
70
|
-
|
|
71
|
-
### Environment Constraints
|
|
72
|
-
|
|
73
|
-
| 环境目录 | 可引用 | 禁止引用 |
|
|
74
|
-
|----------|--------|----------|
|
|
75
|
-
| */common/ | 平台无关库 | */browser/*, */node/* |
|
|
76
|
-
| */browser/ | */common/* | */node/* |
|
|
77
|
-
| */node/ | */common/* | */browser/* |
|
|
78
|
-
|
|
79
|
-
### Validation Commands
|
|
80
|
-
|
|
81
|
-
```bash
|
|
82
|
-
# 分层违规检查
|
|
83
|
-
npm run valid-layers-check
|
|
84
|
-
|
|
85
|
-
# 或手动检查
|
|
86
|
-
rg "from ['\"].*platform" src/base/ --type ts && echo "FAIL: base→platform" || echo "OK"
|
|
87
|
-
```
|
|
88
|
-
```
|
|
89
|
-
|
|
90
|
-
---
|
|
91
|
-
|
|
92
|
-
## 3) 分层违规的严重程度
|
|
93
|
-
|
|
94
|
-
| 违规类型 | 严重程度 | 处理方式 |
|
|
95
|
-
|----------|----------|----------|
|
|
96
|
-
| 下层引用上层 | **Critical** | 必须立即修复,阻止合并 |
|
|
97
|
-
| common 引用 browser/node | **Critical** | 必须立即修复 |
|
|
98
|
-
| 跨层深度导入 Internal 模块 | **High** | 应使用公共 API |
|
|
99
|
-
| contrib 被 core 引用 | **High** | 违反扩展点设计 |
|
|
100
|
-
| 循环依赖 | **High** | 需要重构解耦 |
|
|
101
|
-
|
|
102
|
-
---
|
|
103
|
-
|
|
104
|
-
## 4) 分层检查集成
|
|
105
|
-
|
|
106
|
-
### 4.1 在 ESLint 中配置(推荐)
|
|
107
|
-
|
|
108
|
-
```javascript
|
|
109
|
-
// eslint.config.js
|
|
110
|
-
module.exports = {
|
|
111
|
-
rules: {
|
|
112
|
-
'import/no-restricted-paths': ['error', {
|
|
113
|
-
zones: [
|
|
114
|
-
// base 禁止引用 platform
|
|
115
|
-
{ target: './src/base', from: './src/platform', message: 'base cannot import platform' },
|
|
116
|
-
// platform 禁止引用 domain
|
|
117
|
-
{ target: './src/platform', from: './src/domain', message: 'platform cannot import domain' },
|
|
118
|
-
// common 禁止引用 browser/node
|
|
119
|
-
{ target: './src/**/common', from: './src/**/browser', message: 'common cannot import browser' },
|
|
120
|
-
{ target: './src/**/common', from: './src/**/node', message: 'common cannot import node' },
|
|
121
|
-
]
|
|
122
|
-
}]
|
|
123
|
-
}
|
|
124
|
-
};
|
|
125
|
-
```
|
|
126
|
-
|
|
127
|
-
### 4.2 在 TypeScript 中配置
|
|
128
|
-
|
|
129
|
-
为每个层创建独立的 tsconfig:
|
|
130
|
-
|
|
131
|
-
```json
|
|
132
|
-
// tsconfig.base.json
|
|
133
|
-
{
|
|
134
|
-
"compilerOptions": {
|
|
135
|
-
"paths": {
|
|
136
|
-
// base 层只能看到自己
|
|
137
|
-
}
|
|
138
|
-
},
|
|
139
|
-
"include": ["src/base/**/*"],
|
|
140
|
-
"exclude": ["src/platform/**/*", "src/domain/**/*"]
|
|
141
|
-
}
|
|
142
|
-
```
|
|
143
|
-
|
|
144
|
-
### 4.3 在 CI 中配置
|
|
145
|
-
|
|
146
|
-
```yaml
|
|
147
|
-
# .github/workflows/pr.yml
|
|
148
|
-
- name: Check layer constraints
|
|
149
|
-
run: |
|
|
150
|
-
# 检查分层违规
|
|
151
|
-
./scripts/valid-layers-check.sh || exit 1
|
|
152
|
-
```
|
|
153
|
-
|
|
154
|
-
---
|
|
155
|
-
|
|
156
|
-
## 5) 分层重构指南
|
|
157
|
-
|
|
158
|
-
当发现分层违规时:
|
|
159
|
-
|
|
160
|
-
1. **识别违规原因**
|
|
161
|
-
- 是否是合理的依赖?(可能需要调整分层定义)
|
|
162
|
-
- 是否可以通过接口抽象解耦?
|
|
163
|
-
- 是否应该将代码移动到正确的层?
|
|
164
|
-
|
|
165
|
-
2. **解耦策略**
|
|
166
|
-
- **依赖注入**:上层通过接口注入,下层不直接依赖实现
|
|
167
|
-
- **事件机制**:下层发布事件,上层订阅
|
|
168
|
-
- **回调传递**:下层接收回调函数,不关心调用者
|
|
169
|
-
|
|
170
|
-
3. **代码移动**
|
|
171
|
-
- 如果代码确实属于下层,移动到正确位置
|
|
172
|
-
- 更新所有引用路径
|
|
173
|
-
- 运行分层检查确认修复
|
|
174
|
-
|
|
175
|
-
---
|
|
176
|
-
|
|
177
|
-
## 6) 审查检查项
|
|
178
|
-
|
|
179
|
-
在 Code Review 时,检查以下项目:
|
|
180
|
-
|
|
181
|
-
- [ ] 新增的 import 是否遵守分层约束?
|
|
182
|
-
- [ ] 是否引入了 Internal 模块的深度导入?
|
|
183
|
-
- [ ] common 目录下的代码是否使用了平台特定 API?
|
|
184
|
-
- [ ] contrib 模块是否被 core 模块引用?
|
|
185
|
-
- [ ] 是否存在循环依赖?
|