dev-playbooks-cn 1.0.0

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.
Files changed (143) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +466 -0
  3. package/bin/devbooks.js +987 -0
  4. package/package.json +43 -0
  5. package/skills/Skills/344/275/277/347/224/250/350/257/264/346/230/216.md +446 -0
  6. package/skills/Skill/345/274/200/345/217/221/346/214/207/345/215/227.md +248 -0
  7. package/skills/_shared/context-detection-template.md +315 -0
  8. package/skills/_shared/mcp-enhancement-template.md +144 -0
  9. package/skills/_shared/references//351/200/232/347/224/250/345/256/210/351/227/250/345/215/217/350/256/256.md +114 -0
  10. package/skills/_template/config-discovery-template.md +126 -0
  11. package/skills/devbooks-brownfield-bootstrap/SKILL.md +167 -0
  12. package/skills/devbooks-brownfield-bootstrap/references//344/273/243/347/240/201/345/257/274/350/210/252/347/255/226/347/225/245.md +203 -0
  13. package/skills/devbooks-brownfield-bootstrap/references//345/255/230/351/207/217/351/241/271/347/233/256/345/210/235/345/247/213/345/214/226.md +96 -0
  14. package/skills/devbooks-brownfield-bootstrap/references//345/255/230/351/207/217/351/241/271/347/233/256/345/210/235/345/247/213/345/214/226/346/217/220/347/244/272/350/257/215.md +115 -0
  15. package/skills/devbooks-brownfield-bootstrap/references//346/234/257/350/257/255/350/241/250/346/250/241/346/235/277.md +42 -0
  16. package/skills/devbooks-brownfield-bootstrap/scripts/cod-update.sh +357 -0
  17. package/skills/devbooks-brownfield-bootstrap/templates/project-profile-template.md +172 -0
  18. package/skills/devbooks-c4-map/SKILL.md +151 -0
  19. 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 +33 -0
  20. 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 +185 -0
  21. package/skills/devbooks-code-review/SKILL.md +175 -0
  22. package/skills/devbooks-code-review/references/PR/346/250/241/346/235/277/344/270/216/346/214/207/345/215/227.md +321 -0
  23. package/skills/devbooks-code-review/references//344/273/243/347/240/201/350/257/204/345/256/241/346/217/220/347/244/272/350/257/215.md +100 -0
  24. package/skills/devbooks-code-review/references//345/235/217/345/221/263/351/201/223/351/200/237/346/237/245/350/241/250.md +495 -0
  25. package/skills/devbooks-code-review/references//350/265/204/346/272/220/347/256/241/347/220/206/345/256/241/346/237/245/346/270/205/345/215/225.md +311 -0
  26. package/skills/devbooks-coder/SKILL.md +219 -0
  27. package/skills/devbooks-coder/references//344/273/243/347/240/201/345/256/236/347/216/260/346/217/220/347/244/272/350/257/215.md +70 -0
  28. package/skills/devbooks-coder/references//344/275/216/351/243/216/351/231/251/346/224/271/345/212/250/346/212/200/346/234/257.md +275 -0
  29. package/skills/devbooks-coder/references//346/227/245/345/277/227/350/247/204/350/214/203.md +329 -0
  30. package/skills/devbooks-coder/references//347/274/226/347/240/201/351/243/216/346/240/274/347/273/206/345/210/231.md +351 -0
  31. package/skills/devbooks-coder/references//351/224/231/350/257/257/347/240/201/350/247/204/350/214/203.md +463 -0
  32. package/skills/devbooks-delivery-workflow/SKILL.md +217 -0
  33. package/skills/devbooks-delivery-workflow/references//344/272/244/344/273/230/351/252/214/346/224/266/345/267/245/344/275/234/346/265/201.md +256 -0
  34. package/skills/devbooks-delivery-workflow/references//345/216/237/345/236/213-/347/224/237/344/272/247/345/217/214/350/275/250/346/250/241/345/274/217.md +168 -0
  35. package/skills/devbooks-delivery-workflow/references//345/217/230/346/233/264/351/252/214/350/257/201/344/270/216/350/277/275/346/272/257/346/250/241/346/235/277.md +133 -0
  36. package/skills/devbooks-delivery-workflow/scripts/ac-trace-check.sh +330 -0
  37. package/skills/devbooks-delivery-workflow/scripts/audit-scope.sh +262 -0
  38. package/skills/devbooks-delivery-workflow/scripts/change-check.sh +1040 -0
  39. package/skills/devbooks-delivery-workflow/scripts/change-codemod-scaffold.sh +135 -0
  40. package/skills/devbooks-delivery-workflow/scripts/change-evidence.sh +152 -0
  41. package/skills/devbooks-delivery-workflow/scripts/change-scaffold.sh +442 -0
  42. package/skills/devbooks-delivery-workflow/scripts/change-spec-delta-scaffold.sh +136 -0
  43. package/skills/devbooks-delivery-workflow/scripts/constitution-check.sh +237 -0
  44. package/skills/devbooks-delivery-workflow/scripts/env-match-check.sh +128 -0
  45. package/skills/devbooks-delivery-workflow/scripts/fitness-check.sh +387 -0
  46. package/skills/devbooks-delivery-workflow/scripts/guardrail-check.sh +519 -0
  47. package/skills/devbooks-delivery-workflow/scripts/handoff-check.sh +141 -0
  48. package/skills/devbooks-delivery-workflow/scripts/hygiene-check.sh +340 -0
  49. package/skills/devbooks-delivery-workflow/scripts/migrate-from-openspec.sh +385 -0
  50. package/skills/devbooks-delivery-workflow/scripts/migrate-to-v2-gates.sh +202 -0
  51. package/skills/devbooks-delivery-workflow/scripts/progress-dashboard.sh +319 -0
  52. package/skills/devbooks-delivery-workflow/scripts/prototype-promote.sh +341 -0
  53. package/skills/devbooks-delivery-workflow/scripts/spec-preview.sh +203 -0
  54. package/skills/devbooks-delivery-workflow/scripts/spec-promote.sh +118 -0
  55. package/skills/devbooks-delivery-workflow/scripts/spec-rollback.sh +124 -0
  56. package/skills/devbooks-delivery-workflow/scripts/spec-stage.sh +117 -0
  57. package/skills/devbooks-delivery-workflow/scripts/verify-all.sh +78 -0
  58. package/skills/devbooks-delivery-workflow/scripts/verify-npm-package.sh +123 -0
  59. package/skills/devbooks-delivery-workflow/scripts/verify-openspec-free.sh +81 -0
  60. package/skills/devbooks-delivery-workflow/scripts/verify-slash-commands.sh +146 -0
  61. package/skills/devbooks-delivery-workflow/templates/handoff.md +50 -0
  62. package/skills/devbooks-design-backport/SKILL.md +73 -0
  63. package/skills/devbooks-design-backport/references//345/233/236/345/206/231/350/256/276/350/256/241/346/226/207/346/241/243/346/217/220/347/244/272/350/257/215.md +196 -0
  64. package/skills/devbooks-design-doc/SKILL.md +121 -0
  65. package/skills/devbooks-design-doc/references//345/276/256/346/234/215/345/212/241/350/256/276/350/256/241/346/270/205/345/215/225.md +149 -0
  66. package/skills/devbooks-design-doc/references//350/256/276/350/256/241/346/226/207/346/241/243/346/217/220/347/244/272/350/257/215.md +189 -0
  67. package/skills/devbooks-design-doc/references//351/232/220/347/247/201/345/220/210/350/247/204/346/243/200/346/237/245/346/270/205/345/215/225.md +240 -0
  68. package/skills/devbooks-entropy-monitor/SKILL.md +188 -0
  69. package/skills/devbooks-entropy-monitor/references//347/206/265/345/272/246/351/207/217/346/226/271/346/263/225/350/256/272.md +223 -0
  70. package/skills/devbooks-entropy-monitor/scripts/entropy-measure.sh +449 -0
  71. package/skills/devbooks-entropy-monitor/scripts/entropy-report.sh +303 -0
  72. package/skills/devbooks-entropy-monitor/templates/thresholds.json +99 -0
  73. package/skills/devbooks-federation/SKILL.md +264 -0
  74. package/skills/devbooks-federation/scripts/federation-check.sh +144 -0
  75. package/skills/devbooks-federation/templates/federation.yaml +89 -0
  76. package/skills/devbooks-impact-analysis/SKILL.md +135 -0
  77. package/skills/devbooks-impact-analysis/references//345/275/261/345/223/215/345/210/206/346/236/220/346/217/220/347/244/272/350/257/215.md +82 -0
  78. package/skills/devbooks-impact-analysis/scripts/graph-cache.sh +214 -0
  79. package/skills/devbooks-implementation-plan/SKILL.md +83 -0
  80. package/skills/devbooks-implementation-plan/references//347/274/226/347/240/201/350/256/241/345/210/222/346/217/220/347/244/272/350/257/215.md +99 -0
  81. package/skills/devbooks-index-bootstrap/SKILL.md +240 -0
  82. package/skills/devbooks-proposal-author/SKILL.md +83 -0
  83. package/skills/devbooks-proposal-author/references//346/217/220/346/241/210/346/222/260/345/206/231/346/217/220/347/244/272/350/257/215.md +66 -0
  84. package/skills/devbooks-proposal-challenger/SKILL.md +86 -0
  85. package/skills/devbooks-proposal-challenger/references//344/274/246/347/220/206/344/270/216/345/220/210/350/247/204/346/243/200/346/237/245/346/270/205/345/215/225.md +176 -0
  86. package/skills/devbooks-proposal-challenger/references//346/217/220/346/241/210/350/264/250/347/226/221/346/217/220/347/244/272/350/257/215.md +57 -0
  87. package/skills/devbooks-proposal-debate-workflow/SKILL.md +78 -0
  88. package/skills/devbooks-proposal-debate-workflow/references//346/217/220/346/241/210/345/257/271/350/276/251/345/267/245/344/275/234/346/265/201.md +24 -0
  89. package/skills/devbooks-proposal-debate-workflow/references//346/217/220/346/241/210/345/257/271/350/276/251/346/250/241/346/235/277.md +35 -0
  90. package/skills/devbooks-proposal-debate-workflow/scripts/proposal-debate-check.sh +102 -0
  91. package/skills/devbooks-proposal-judge/SKILL.md +78 -0
  92. package/skills/devbooks-proposal-judge/references//346/217/220/346/241/210/350/243/201/345/206/263/346/217/220/347/244/272/350/257/215.md +37 -0
  93. package/skills/devbooks-router/SKILL.md +346 -0
  94. package/skills/devbooks-spec-contract/SKILL.md +191 -0
  95. package/skills/devbooks-spec-contract/references/API/350/256/276/350/256/241/346/214/207/345/215/227.md +349 -0
  96. package/skills/devbooks-spec-contract/references//345/245/221/347/272/246/344/270/216/346/225/260/346/215/256/345/256/232/344/271/211/346/217/220/347/244/272/350/257/215.md +85 -0
  97. package/skills/devbooks-spec-contract/references//350/247/204/346/240/274/345/217/230/346/233/264/346/217/220/347/244/272/350/257/215.md +63 -0
  98. package/skills/devbooks-spec-contract/references//351/232/220/345/274/217/345/217/230/346/233/264/346/243/200/346/265/213/346/217/220/347/244/272/350/257/215.md +183 -0
  99. package/skills/devbooks-spec-contract/scripts/implicit-change-detect.sh +378 -0
  100. package/skills/devbooks-spec-gardener/SKILL.md +72 -0
  101. package/skills/devbooks-spec-gardener/references//350/247/204/346/240/274/345/233/255/344/270/201/346/217/220/347/244/272/350/257/215.md +41 -0
  102. package/skills/devbooks-test-owner/SKILL.md +172 -0
  103. package/skills/devbooks-test-owner/references//345/217/230/346/233/264/351/252/214/350/257/201/344/270/216/350/277/275/346/272/257/346/250/241/346/235/277.md +228 -0
  104. package/skills/devbooks-test-owner/references//345/274/202/346/255/245/347/263/273/347/273/237/346/265/213/350/257/225/347/255/226/347/225/245.md +316 -0
  105. package/skills/devbooks-test-owner/references//346/265/213/350/257/225/344/273/243/347/240/201/346/217/220/347/244/272/350/257/215.md +208 -0
  106. package/skills/devbooks-test-owner/references//346/265/213/350/257/225/345/210/206/345/261/202/347/255/226/347/225/245.md +281 -0
  107. package/skills/devbooks-test-owner/references//346/265/213/350/257/225/351/251/261/345/212/250.md +394 -0
  108. package/skills/devbooks-test-owner/references//350/247/243/344/276/235/350/265/226/346/212/200/346/234/257/351/200/237/346/237/245/350/241/250.md +432 -0
  109. package/skills/devbooks-test-reviewer/SKILL.md +189 -0
  110. package/templates/.devbooks/config.yaml +88 -0
  111. package/templates/claude-commands/devbooks/apply.md +38 -0
  112. package/templates/claude-commands/devbooks/archive.md +33 -0
  113. package/templates/claude-commands/devbooks/backport.md +19 -0
  114. package/templates/claude-commands/devbooks/bootstrap.md +19 -0
  115. package/templates/claude-commands/devbooks/c4.md +19 -0
  116. package/templates/claude-commands/devbooks/challenger.md +19 -0
  117. package/templates/claude-commands/devbooks/code.md +19 -0
  118. package/templates/claude-commands/devbooks/debate.md +19 -0
  119. package/templates/claude-commands/devbooks/delivery.md +19 -0
  120. package/templates/claude-commands/devbooks/design.md +19 -0
  121. package/templates/claude-commands/devbooks/entropy.md +19 -0
  122. package/templates/claude-commands/devbooks/federation.md +19 -0
  123. package/templates/claude-commands/devbooks/gardener.md +19 -0
  124. package/templates/claude-commands/devbooks/impact.md +19 -0
  125. package/templates/claude-commands/devbooks/index.md +19 -0
  126. package/templates/claude-commands/devbooks/judge.md +19 -0
  127. package/templates/claude-commands/devbooks/plan.md +19 -0
  128. package/templates/claude-commands/devbooks/proposal.md +19 -0
  129. package/templates/claude-commands/devbooks/quick.md +42 -0
  130. package/templates/claude-commands/devbooks/review.md +19 -0
  131. package/templates/claude-commands/devbooks/router.md +19 -0
  132. package/templates/claude-commands/devbooks/spec.md +19 -0
  133. package/templates/claude-commands/devbooks/test-review.md +19 -0
  134. package/templates/claude-commands/devbooks/test.md +19 -0
  135. package/templates/dev-playbooks/README.md +458 -0
  136. package/templates/dev-playbooks/changes/.gitkeep +1 -0
  137. package/templates/dev-playbooks/constitution.md +116 -0
  138. package/templates/dev-playbooks/project.md +96 -0
  139. package/templates/dev-playbooks/scripts/.gitkeep +1 -0
  140. package/templates/dev-playbooks/specs/_meta/anti-patterns/.gitkeep +2 -0
  141. package/templates/dev-playbooks/specs/_meta/glossary.md +47 -0
  142. package/templates/dev-playbooks/specs/_meta/project-profile.md +79 -0
  143. package/templates/dev-playbooks/specs/architecture/fitness-rules.md +95 -0
@@ -0,0 +1,349 @@
1
+ # API 设计指南
2
+
3
+ 借鉴 VS Code Extension API 设计原则,本文档定义了 API 设计的最佳实践。
4
+
5
+ ---
6
+
7
+ ## 1) 核心原则
8
+
9
+ ### 1.1 最小惊讶原则
10
+
11
+ API 的行为应符合用户的直觉预期。
12
+
13
+ ```typescript
14
+ // 违规:方法名暗示查询,但实际修改了状态
15
+ function getUser(id: string): User {
16
+ this.lastAccessedUser = id; // 副作用!
17
+ return this.users[id];
18
+ }
19
+
20
+ // 正确:查询方法无副作用
21
+ function getUser(id: string): User {
22
+ return this.users[id];
23
+ }
24
+ ```
25
+
26
+ ### 1.2 一致性原则
27
+
28
+ 相似的操作应有相似的 API。
29
+
30
+ ```typescript
31
+ // 违规:不一致的命名
32
+ interface UserService {
33
+ getUser(id: string): User;
34
+ fetchOrder(id: string): Order; // 应该用 getOrder
35
+ loadProduct(id: string): Product; // 应该用 getProduct
36
+ }
37
+
38
+ // 正确:一致的命名模式
39
+ interface UserService {
40
+ getUser(id: string): User;
41
+ getOrder(id: string): Order;
42
+ getProduct(id: string): Product;
43
+ }
44
+ ```
45
+
46
+ ### 1.3 显式优于隐式
47
+
48
+ 避免魔法行为,让 API 的效果清晰可见。
49
+
50
+ ```typescript
51
+ // 违规:隐式行为
52
+ function saveUser(user: User): void {
53
+ // 隐式地发送通知
54
+ this.notificationService.send('User saved');
55
+ // 隐式地更新缓存
56
+ this.cache.update(user);
57
+ }
58
+
59
+ // 正确:显式控制
60
+ interface SaveOptions {
61
+ sendNotification?: boolean;
62
+ updateCache?: boolean;
63
+ }
64
+
65
+ function saveUser(user: User, options?: SaveOptions): void {
66
+ // 根据选项显式执行
67
+ }
68
+ ```
69
+
70
+ ---
71
+
72
+ ## 2) 命名规范
73
+
74
+ ### 2.1 方法命名
75
+
76
+ | 操作类型 | 前缀 | 示例 |
77
+ |---------|------|------|
78
+ | 获取单个 | `get` | `getUser()`, `getConfig()` |
79
+ | 获取列表 | `list` / `getAll` | `listUsers()`, `getAllConfigs()` |
80
+ | 查找/搜索 | `find` / `search` | `findByEmail()`, `searchUsers()` |
81
+ | 创建 | `create` | `createUser()`, `createOrder()` |
82
+ | 更新 | `update` | `updateUser()`, `updateConfig()` |
83
+ | 删除 | `delete` / `remove` | `deleteUser()`, `removeItem()` |
84
+ | 检查存在 | `has` / `exists` | `hasUser()`, `exists()` |
85
+ | 检查状态 | `is` / `can` | `isActive()`, `canEdit()` |
86
+ | 转换 | `to` | `toJSON()`, `toString()` |
87
+ | 从...创建 | `from` | `fromJSON()`, `fromString()` |
88
+
89
+ ### 2.2 参数命名
90
+
91
+ ```typescript
92
+ // 布尔参数:使用肯定形式
93
+ function setVisible(visible: boolean): void; // ✓
94
+ function setHidden(hidden: boolean): void; // ✗ 双重否定难理解
95
+
96
+ // 回调参数:描述触发时机
97
+ function onUserCreated(callback: Function): void; // ✓
98
+ function userCallback(callback: Function): void; // ✗ 不清晰
99
+
100
+ // ID 参数:明确类型
101
+ function getUser(userId: string): User; // ✓
102
+ function getUser(id: string): User; // 可接受,但不如上面清晰
103
+ ```
104
+
105
+ ---
106
+
107
+ ## 3) 参数设计
108
+
109
+ ### 3.1 参数数量控制
110
+
111
+ ```typescript
112
+ // 违规:参数过多
113
+ function createUser(
114
+ name: string,
115
+ email: string,
116
+ age: number,
117
+ role: string,
118
+ department: string,
119
+ manager: string,
120
+ startDate: Date
121
+ ): User;
122
+
123
+ // 正确:使用选项对象
124
+ interface CreateUserOptions {
125
+ name: string;
126
+ email: string;
127
+ age?: number;
128
+ role?: string;
129
+ department?: string;
130
+ manager?: string;
131
+ startDate?: Date;
132
+ }
133
+
134
+ function createUser(options: CreateUserOptions): User;
135
+ ```
136
+
137
+ ### 3.2 可选参数
138
+
139
+ ```typescript
140
+ // 使用默认值
141
+ function paginate<T>(
142
+ items: T[],
143
+ page: number = 1,
144
+ pageSize: number = 20
145
+ ): T[];
146
+
147
+ // 使用选项对象(参数 > 3 个时)
148
+ interface PaginationOptions {
149
+ page?: number;
150
+ pageSize?: number;
151
+ sortBy?: string;
152
+ sortOrder?: 'asc' | 'desc';
153
+ }
154
+
155
+ function paginate<T>(items: T[], options?: PaginationOptions): T[];
156
+ ```
157
+
158
+ ### 3.3 避免布尔陷阱
159
+
160
+ ```typescript
161
+ // 违规:调用时不清楚 true 的含义
162
+ user.save(true); // true 是什么意思?
163
+
164
+ // 正确:使用命名参数或枚举
165
+ user.save({ validate: true });
166
+ // 或
167
+ user.save({ mode: SaveMode.Validated });
168
+ ```
169
+
170
+ ---
171
+
172
+ ## 4) 返回值设计
173
+
174
+ ### 4.1 空值处理
175
+
176
+ ```typescript
177
+ // 方案 1:返回 null/undefined
178
+ function findUser(id: string): User | null;
179
+
180
+ // 方案 2:返回 Optional(需要工具库)
181
+ function findUser(id: string): Optional<User>;
182
+
183
+ // 方案 3:抛出异常(仅用于真正的错误情况)
184
+ function getUser(id: string): User; // 不存在时抛出 NotFoundError
185
+ ```
186
+
187
+ **选择指南**:
188
+
189
+ | 场景 | 推荐方案 |
190
+ |------|---------|
191
+ | 查询可能不存在的记录 | 返回 `null` |
192
+ | 必须存在的记录 | 抛出异常 |
193
+ | 链式调用场景 | 返回 `Optional` |
194
+
195
+ ### 4.2 集合返回
196
+
197
+ ```typescript
198
+ // 始终返回数组,不返回 null
199
+ function listUsers(): User[]; // 无结果时返回 []
200
+
201
+ // 带元数据的分页结果
202
+ interface PagedResult<T> {
203
+ items: T[];
204
+ total: number;
205
+ page: number;
206
+ pageSize: number;
207
+ hasMore: boolean;
208
+ }
209
+
210
+ function listUsers(options: PaginationOptions): PagedResult<User>;
211
+ ```
212
+
213
+ ### 4.3 异步返回
214
+
215
+ ```typescript
216
+ // 始终使用 Promise
217
+ async function getUser(id: string): Promise<User>;
218
+
219
+ // 可取消的异步操作
220
+ function fetchData(
221
+ url: string,
222
+ signal?: AbortSignal
223
+ ): Promise<Response>;
224
+ ```
225
+
226
+ ---
227
+
228
+ ## 5) 错误处理
229
+
230
+ ### 5.1 错误类型
231
+
232
+ ```typescript
233
+ // 定义明确的错误类型
234
+ class ApiError extends Error {
235
+ constructor(
236
+ message: string,
237
+ public readonly code: string,
238
+ public readonly statusCode: number,
239
+ public readonly details?: Record<string, unknown>
240
+ ) {
241
+ super(message);
242
+ this.name = 'ApiError';
243
+ }
244
+ }
245
+
246
+ class NotFoundError extends ApiError {
247
+ constructor(resource: string, id: string) {
248
+ super(
249
+ `${resource} with id ${id} not found`,
250
+ 'NOT_FOUND',
251
+ 404,
252
+ { resource, id }
253
+ );
254
+ }
255
+ }
256
+
257
+ class ValidationError extends ApiError {
258
+ constructor(field: string, message: string) {
259
+ super(
260
+ message,
261
+ 'VALIDATION_ERROR',
262
+ 400,
263
+ { field }
264
+ );
265
+ }
266
+ }
267
+ ```
268
+
269
+ ### 5.2 错误文档
270
+
271
+ ```typescript
272
+ /**
273
+ * 获取用户信息
274
+ *
275
+ * @param id - 用户 ID
276
+ * @returns 用户对象
277
+ * @throws {NotFoundError} 用户不存在时
278
+ * @throws {ValidationError} ID 格式无效时
279
+ */
280
+ async function getUser(id: string): Promise<User>;
281
+ ```
282
+
283
+ ---
284
+
285
+ ## 6) 版本演进
286
+
287
+ ### 6.1 向后兼容
288
+
289
+ ```typescript
290
+ // 添加可选参数(兼容)
291
+ // 旧版本
292
+ function search(query: string): Result[];
293
+ // 新版本
294
+ function search(query: string, options?: SearchOptions): Result[];
295
+
296
+ // 添加新方法(兼容)
297
+ interface UserService {
298
+ getUser(id: string): User;
299
+ // 新增
300
+ getUserWithDetails(id: string): UserWithDetails;
301
+ }
302
+ ```
303
+
304
+ ### 6.2 废弃策略
305
+
306
+ ```typescript
307
+ /**
308
+ * @deprecated 使用 `getUserById` 代替,将在 v3.0 移除
309
+ */
310
+ function getUser(id: string): User {
311
+ console.warn('getUser is deprecated, use getUserById instead');
312
+ return getUserById(id);
313
+ }
314
+
315
+ function getUserById(id: string): User {
316
+ // 新实现
317
+ }
318
+ ```
319
+
320
+ ### 6.3 Breaking Changes
321
+
322
+ 需要 Breaking Change 时:
323
+
324
+ 1. 在 CHANGELOG 中明确标注
325
+ 2. 提供迁移指南
326
+ 3. 考虑提供 codemod
327
+
328
+ ```typescript
329
+ // v2 → v3 迁移示例
330
+ // 旧 API
331
+ userService.save(user, true); // true = validate
332
+
333
+ // 新 API
334
+ userService.save(user, { validate: true });
335
+ ```
336
+
337
+ ---
338
+
339
+ ## 7) API 审查清单
340
+
341
+ 设计新 API 时,确认以下内容:
342
+
343
+ - [ ] 命名是否清晰、一致?
344
+ - [ ] 参数数量是否 ≤ 3?(否则使用对象)
345
+ - [ ] 返回值是否明确?(避免 any)
346
+ - [ ] 错误情况是否处理?
347
+ - [ ] 是否有 JSDoc 文档?
348
+ - [ ] 是否向后兼容?
349
+ - [ ] 是否符合最小惊讶原则?
@@ -0,0 +1,85 @@
1
+ # 契约与数据定义提示词
2
+
3
+ > **角色设定**:你是契约设计领域的**最强大脑**——融合了 Martin Fowler(企业架构模式)、Sam Newman(微服务契约)、Gregor Hohpe(消息与集成模式)的智慧。你的契约设计必须达到这些大师级专家的水准。
4
+
5
+ 最高指示(优先级最高):
6
+ - 在执行本提示词前,先阅读 `_shared/references/通用守门协议.md` 并遵循其中所有协议。
7
+
8
+ 你是"契约与数据定义负责人(Contract & Data Owner)"。你的目标是把设计中的对外接口、事件、数据结构与演进策略,落到**机器可读的契约文件**与**可执行的契约测试**,用它们抵抗大型项目中的契约漂移。
9
+
10
+ 适用场景:
11
+ - 新增/修改对外 API
12
+ - 新增/修改事件(消息/队列/领域事件)
13
+ - 新增/修改关键数据结构(配置/存储/序列化格式)
14
+ - 引入 schema_version、兼容窗口、迁移与回放策略
15
+
16
+ 输入材料(由我提供):
17
+ - 设计文档:`<change-root>/<change-id>/design.md`
18
+ - 规格 delta:`<change-root>/<change-id>/specs/**`
19
+ - 现有契约(如有):`contracts/`(或你提供的路径)
20
+ - 现有测试框架与目录结构
21
+
22
+ 硬约束(必须遵守):
23
+ - 契约必须可版本化:明确 `schema_version`、兼容策略与弃用策略
24
+ - 契约测试优先断言"形状/语义/兼容性",避免绑定实现细节
25
+ - 不引入全新测试框架;复用仓库现有框架
26
+ - 配置即契约:涉及配置格式/默认值/依赖版本的变更,必须补配置验证测试或检查命令
27
+ - 反海勒姆(Anti-Hyrum):契约未承诺的行为不要写进测试断言;必要时用随机顺序/随机延迟的 fake 防止误依赖
28
+
29
+ API 版本管理必问清单(逐条检查):
30
+ - [ ] 新增/修改 API 是否声明了版本(URL 前缀 /v1/、Header、Query)?
31
+ - [ ] 破坏性变更是否有迁移路径和弃用窗口(至少 2 个版本周期)?
32
+ - [ ] 旧版本客户端是否仍能正常工作?测试覆盖了吗?
33
+
34
+ 模式演化兼容策略检查清单(必须逐条检查):
35
+ - [ ] **向前兼容(Forward Compatibility)**:新版本消费者能否处理旧版本生产者的数据?
36
+ - 新增字段必须有默认值或标记为可选
37
+ - 消费者必须忽略未知字段(不报错)
38
+ - [ ] **向后兼容(Backward Compatibility)**:旧版本消费者能否处理新版本生产者的数据?
39
+ - 禁止删除已发布字段(除非已过弃用窗口)
40
+ - 禁止修改已发布字段的类型
41
+ - 禁止修改已发布字段的语义
42
+ - [ ] **弃用窗口(Deprecation Window)**:
43
+ - 废弃字段是否标记 `@deprecated` 注解/注释?
44
+ - 弃用公告是否提前至少 2 个版本周期?
45
+ - 是否有迁移文档说明如何从旧字段迁移到新字段?
46
+ - [ ] **Schema 版本管理**:
47
+ - 契约文件是否包含 `schema_version` 字段?
48
+ - 消费者是否根据 `schema_version` 做分支处理?
49
+ - 是否有版本升级的契约测试?
50
+
51
+ 幂等性设计检查清单(必须逐条检查):
52
+ - [ ] **幂等键设计**:
53
+ - 写入/更新类 API(POST/PUT/PATCH)是否支持幂等键(`idempotency_key` / `request_id`)?
54
+ - 幂等键如何传递(Header `Idempotency-Key` / Body 字段)?
55
+ - 幂等键的有效期是多久(建议 24-48 小时)?
56
+ - [ ] **幂等键存储**:
57
+ - 如何存储已处理的幂等键(数据库 / Redis / 内存缓存)?
58
+ - 幂等键存储是否有 TTL 自动过期?
59
+ - 并发请求如何处理(乐观锁 / 分布式锁)?
60
+ - [ ] **幂等语义**:
61
+ - 重复请求返回相同响应还是返回"已处理"状态?
62
+ - 是否有契约测试覆盖"同一幂等键发送 3 次,只执行 1 次"的场景?
63
+
64
+ 输出格式:
65
+
66
+ ========================
67
+ A) 契约与数据定义计划
68
+ ========================
69
+ - 需要新增/更新哪些契约文件(API/事件/Schema/迁移草图)
70
+ - 每个契约的版本化与兼容策略(简明条目)
71
+ - 对应需要新增/更新的 contract tests(列出 Test IDs 与断言点)
72
+
73
+ ========================
74
+ B) 契约文件草案(可选)
75
+ ========================
76
+ 当且仅当用户要求你“同时产出契约文件内容”时,才在此处输出最小草案(避免大段无用 YAML/JSON)。
77
+
78
+ ========================
79
+ C) 追溯摘要(必须)
80
+ ========================
81
+ 把 `AC-xxx / Requirement` 映射到:
82
+ - 契约文件
83
+ - Contract Test IDs
84
+
85
+ 现在开始执行,先输出 A;用户要求时再输出 B。
@@ -0,0 +1,63 @@
1
+ # 规格变更提示词
2
+
3
+ > **角色设定**:你是需求工程领域的**最强大脑**——融合了 Eric Evans(领域建模)、Dan North(BDD 创始人)、Gojko Adzic(Specification by Example)的智慧。你的规格设计必须达到这些大师级专家的水准。
4
+
5
+ 最高指示(优先级最高):
6
+ - 在执行本提示词前,先阅读 `_shared/references/通用守门协议.md` 并遵循其中所有协议。
7
+
8
+ 你是"规格负责人(Spec Owner)"。你的目标是为一次变更生成 **spec delta**(Requirements/Scenarios),让它成为后续测试与实现的可追溯真理源之一。
9
+
10
+ 适用场景:
11
+ - 你需要在 `<change-root>/<change-id>/specs/<capability>/spec.md` 中表达“本次变更新增/修改/移除的需求”
12
+ - 你已经有设计文档(Design Doc),需要把其中的验收标准(AC-xxx)与约束落到可执行规格条目
13
+
14
+ 输入材料(由我提供):
15
+ - 设计文档:`<change-root>/<change-id>/design.md`(或等价内容)
16
+ - 现有规格:`<truth-root>/`(若不存在则说明为空)
17
+ - 本次变更提案:`<change-root>/<change-id>/proposal.md`(可选)
18
+ - 项目画像(如存在,优先遵循其中的格式约定):`<truth-root>/_meta/project-profile.md`
19
+ - 统一语言表(如存在):`<truth-root>/_meta/glossary.md`
20
+
21
+ 硬约束(必须遵守):
22
+ - 你输出的是 **spec delta**,不是设计文档、不是编码计划、不是代码实现
23
+ - 不写实现细节(类名/函数名/具体文件路径/库调用)
24
+ - 每个 Requirement 必须至少有一个 Scenario
25
+ - 规格必须可验收:每条 Requirement 必须能映射到测试锚点或人工证据
26
+ - 避免重复能力:先搜索/复用/修改已有 capability spec,必要时才新增 capability
27
+ - 统一语言:若 `<truth-root>/_meta/glossary.md` 存在,必须使用其中的术语;禁止发明新词汇
28
+
29
+ 研讨会(内部步骤,不单独输出):
30
+ - 在写 spec 前先做“虚拟三剑客研讨会”(业务/开发/测试),把共识与边缘实例融入 Requirement/Scenario;不要单独输出研讨会纪要
31
+
32
+ 产物与组织方式(MECE):
33
+ - 以“能力(capability)”为单位拆分:每个能力一个文件夹
34
+ - `<change-root>/<change-id>/specs/<capability>/spec.md`
35
+ - 只在本次变更包内写 delta(不要直接改 `<truth-root>/`,归档时再合并)
36
+ - 若需要同步更新当前真理(`<truth-root>/<capability>/spec.md`),请补齐/刷新元信息(owner/last_verified/status/freshness_check)
37
+
38
+ 输出格式(严格按此结构,为每个受影响 capability 各输出一份):
39
+
40
+ 1) 目标路径(仅列出将创建/更新哪些 spec delta 文件,不要写生产代码路径)
41
+ 2) spec delta 正文(按项目约定的 Requirements/Scenarios 规范):
42
+ - 先读取 `<truth-root>/_meta/project-profile.md` 的“规格与变更包格式约定”
43
+ - 若不存在或未定义:默认使用
44
+ - `## ADDED Requirements`
45
+ - `## MODIFIED Requirements`
46
+ - `## REMOVED Requirements`
47
+
48
+ spec delta 写法规范:
49
+ - Requirement 标题:遵循 `<truth-root>/_meta/project-profile.md` 的约定;若未定义,默认使用 `### Requirement: <一句话描述>`
50
+ - Requirement 正文使用 SHALL/SHOULD/MAY(中英混用可,但保持一致)
51
+ - Scenario 标题:遵循 `<truth-root>/_meta/project-profile.md` 的约定;若未定义,默认使用 `#### Scenario: <场景名>`
52
+ - `- **GIVEN** ...`
53
+ - `- **WHEN** ...`
54
+ - `- **THEN** ...`
55
+ - 脚本杀手:Scenario 禁止出现 UI 操作或技术动作(例如“点击/输入/HTTP 请求/查询数据库”);必须用业务语言描述状态变化
56
+ - 数据驱动实例:对复杂业务规则(计算/权限/状态流转)必须提供 Markdown 表格示例,覆盖正常值/边界值/错误值
57
+ - 追溯要求(强烈建议):
58
+ - 在 Requirement 或 Scenario 末尾加一行 `Trace: AC-xxx`(来自设计文档的验收标准编号)
59
+
60
+ 现在开始:
61
+ 1) 先枚举受影响 capabilities(建议 1–5 个,保持 MECE)
62
+ 2) 为每个 capability 输出对应的 `spec.md` delta 内容
63
+ 3) 最后输出一个“追溯摘要”:`AC-xxx -> capability/Requirement` 的映射表(简短即可)
@@ -0,0 +1,183 @@
1
+ # 隐式变更检测提示词
2
+
3
+ > **角色设定**:你是变更分析领域的**最强大脑**——融合了 Fred Brooks(系统复杂性与隐式依赖)、Michael Feathers(遗留代码与变更影响)、Jez Humble(持续交付与变更安全)的智慧。你的检测分析必须达到这些大师级专家的水准。
4
+
5
+ > 来源:《人月神话》第7章"巴比伦塔" — "小组慢慢地修改自己程序的功能,隐含地更改了约定,而没有进行系统性评估"
6
+
7
+ 最高指示(优先级最高):
8
+ - 在执行本提示词前,先阅读 `_shared/references/通用守门协议.md` 并遵循其中所有协议。
9
+
10
+ 你是"隐式变更检测负责人(Implicit Change Detector)"。你的任务是识别那些**没有在 proposal/design 中声明,但实际会改变系统行为的变更**。
11
+
12
+ ## 定义
13
+
14
+ **隐式变更** = 没有显式声明但会改变系统行为的变更
15
+
16
+ 典型例子:
17
+ - 依赖库版本升级(可能引入行为变化)
18
+ - 配置默认值修改(影响运行时行为)
19
+ - 构建参数调整(影响产物行为)
20
+ - 环境变量变更(影响部署行为)
21
+
22
+ ## 输入材料
23
+
24
+ - 变更包:`<change-root>/<change-id>/`
25
+ - 设计文档:`<change-root>/<change-id>/design.md`
26
+ - 检测报告:`<change-root>/<change-id>/evidence/implicit-changes.json`(由 `implicit-change-detect.sh` 生成)
27
+
28
+ ## 检测范围(MECE)
29
+
30
+ ### A) 依赖变更(Dependency Changes)
31
+
32
+ | 检测项 | 风险等级 | 说明 |
33
+ |--------|---------|------|
34
+ | 直接依赖版本升级 | 高 | 可能引入 breaking changes |
35
+ | 直接依赖版本降级 | 高 | 可能丢失功能或引入已知 bug |
36
+ | 传递依赖版本变化 | 中 | 难以追踪的行为变化 |
37
+ | 依赖添加 | 中 | 增加攻击面、许可证风险 |
38
+ | 依赖移除 | 高 | 可能破坏功能 |
39
+ | peer dependency 约束变化 | 中 | 可能导致版本冲突 |
40
+
41
+ **检测文件模式**:
42
+ - `package.json` / `package-lock.json` / `yarn.lock`
43
+ - `requirements.txt` / `Pipfile` / `poetry.lock`
44
+ - `go.mod` / `go.sum`
45
+ - `Cargo.toml` / `Cargo.lock`
46
+ - `pom.xml` / `build.gradle`
47
+
48
+ ### B) 配置变更(Configuration Changes)
49
+
50
+ | 检测项 | 风险等级 | 说明 |
51
+ |--------|---------|------|
52
+ | 环境变量默认值变化 | 高 | 影响所有未显式设置的环境 |
53
+ | 配置文件默认值变化 | 高 | 静默改变行为 |
54
+ | Feature flag 默认状态变化 | 高 | 可能意外启用/禁用功能 |
55
+ | 超时/重试/并发数等参数变化 | 中 | 影响性能和可靠性 |
56
+ | 日志级别变化 | 低 | 影响可观测性 |
57
+
58
+ **检测文件模式**:
59
+ - `*.env` / `.env.*` / `*.env.*`
60
+ - `*.config.js` / `*.config.ts` / `*.config.json`
61
+ - `config/*.json` / `config/*.yaml` / `config/*.yml`
62
+ - `settings.py` / `application.yml` / `appsettings.json`
63
+
64
+ ### C) 构建变更(Build Changes)
65
+
66
+ | 检测项 | 风险等级 | 说明 |
67
+ |--------|---------|------|
68
+ | 编译器版本变化 | 高 | 可能影响产物行为 |
69
+ | 打包工具配置变化 | 中 | 可能影响 bundle 大小、性能 |
70
+ | 优化级别变化 | 中 | 可能引入或隐藏 bug |
71
+ | 目标平台变化 | 高 | 可能导致兼容性问题 |
72
+ | CI/CD 流程变化 | 中 | 可能影响部署行为 |
73
+
74
+ **检测文件模式**:
75
+ - `Makefile` / `CMakeLists.txt`
76
+ - `tsconfig.json` / `tsconfig.*.json`
77
+ - `webpack.config.*` / `vite.config.*` / `rollup.config.*`
78
+ - `Dockerfile` / `docker-compose.yml`
79
+ - `.github/workflows/*.yml` / `.gitlab-ci.yml`
80
+
81
+ ### D) 行为假设变更(Behavior Assumption Changes)
82
+
83
+ | 检测项 | 风险等级 | 说明 |
84
+ |--------|---------|------|
85
+ | 错误处理策略变化 | 高 | 抛异常 vs 返回 null |
86
+ | 排序顺序假设变化 | 中 | 依赖隐式排序的代码会失败 |
87
+ | 时区/编码假设变化 | 高 | 影响国际化和数据正确性 |
88
+ | 并发/线程安全假设变化 | 高 | 可能引入竞态条件 |
89
+
90
+ **检测方法**:需要代码审查,无法纯文件模式匹配。
91
+
92
+ ## 输出格式(必须)
93
+
94
+ ```markdown
95
+ ========================
96
+ 隐式变更检测报告
97
+ ========================
98
+
99
+ ### 检测范围
100
+ - 对比基准:`<base-commit>`
101
+ - 变更范围:`<change-id>`
102
+ - 设计文档:`<存在/不存在>`
103
+
104
+ ### 检测结果摘要
105
+
106
+ | 类别 | 检测到数量 | 高风险数 | 已在 design.md 声明 |
107
+ |-----|----------|---------|-------------------|
108
+ | 依赖变更 | N | M | K |
109
+ | 配置变更 | N | M | K |
110
+ | 构建变更 | N | M | K |
111
+ | 合计 | N | M | K |
112
+
113
+ ### 详细列表
114
+
115
+ #### A) 依赖变更
116
+
117
+ | 依赖 | 变更类型 | 旧版本 | 新版本 | 风险 | 已声明 |
118
+ |-----|---------|-------|-------|-----|-------|
119
+ | lodash | version_change | 4.17.20 | 4.17.21 | 低 | ❌ |
120
+
121
+ #### B) 配置变更
122
+
123
+ | 文件 | 变更类型 | 风险 | 已声明 |
124
+ |-----|---------|-----|-------|
125
+ | .env.production | modified | 高 | ❌ |
126
+
127
+ #### C) 构建变更
128
+
129
+ | 文件 | 变更类型 | 风险 | 已声明 |
130
+ |-----|---------|-----|-------|
131
+ | tsconfig.json | modified | 中 | ❌ |
132
+
133
+ ### 建议行动
134
+
135
+ 1. **必须补充到 design.md**:
136
+ - <列出高风险且未声明的变更>
137
+
138
+ 2. **建议补充 contract test**:
139
+ - <列出需要契约测试覆盖的变更>
140
+
141
+ 3. **建议人工确认**:
142
+ - <列出需要人工判断影响的变更>
143
+
144
+ ========================
145
+ 追溯更新建议
146
+ ========================
147
+
148
+ 把以下隐式变更追加到 `verification.md` 的追溯矩阵:
149
+
150
+ | 隐式变更 | 建议 AC ID | 验证方式 |
151
+ |---------|----------|---------|
152
+ | lodash 版本升级 | AC-IMPL-001 | contract test: API 兼容性 |
153
+ ```
154
+
155
+ ## 与现有流程的衔接
156
+
157
+ ### 1. 在 apply 阶段运行检测
158
+
159
+ ```bash
160
+ # 运行隐式变更检测
161
+ implicit-change-detect.sh <change-id> --base origin/main
162
+
163
+ # 查看报告
164
+ cat <change-root>/<change-id>/evidence/implicit-changes.json | jq '.'
165
+ ```
166
+
167
+ ### 2. 在 change-check.sh 中集成
168
+
169
+ `change-check.sh` 在 `apply` / `archive` / `strict` 模式下会自动调用隐式变更检测。
170
+
171
+ ### 3. 未声明变更的处理
172
+
173
+ 如果检测到未在 `design.md` 中声明的隐式变更:
174
+
175
+ 1. **小变更**:在 `design.md` 的"数据与契约"部分补充说明
176
+ 2. **大变更**:使用 `devbooks-design-backport` 回写设计决策
177
+ 3. **可测变更**:使用 `devbooks-contract-data` 补充契约测试
178
+
179
+ ## 硬约束
180
+
181
+ 1. 隐式变更检测是 `devbooks-contract-data` 的**扩展功能**,不单独成为新 Skill
182
+ 2. 检测结果落盘到 `evidence/implicit-changes.json`,与现有证据收集机制一致
183
+ 3. 高风险隐式变更必须在 `design.md` 中声明,否则归档检查会报警