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,175 @@
1
+ ---
2
+ name: devbooks-code-review
3
+ description: devbooks-code-review:以 Reviewer 角色做可读性/一致性/依赖健康/坏味道审查,只输出审查意见与可执行建议,不讨论业务正确性。用户说"帮我做代码评审/review 可维护性/坏味道/依赖风险/一致性建议",或在 DevBooks apply 阶段以 reviewer 执行时使用。
4
+ tools:
5
+ - Glob
6
+ - Grep
7
+ - Read
8
+ - Bash
9
+ ---
10
+
11
+ # DevBooks:代码评审(Reviewer)
12
+
13
+ ## 前置:配置发现(协议无关)
14
+
15
+ - `<truth-root>`:当前真理目录根
16
+ - `<change-root>`:变更包目录根
17
+
18
+ 执行前**必须**按以下顺序查找配置(找到后停止):
19
+ 1. `.devbooks/config.yaml`(如存在)→ 解析并使用其中的映射
20
+ 2. `dev-playbooks/project.md`(如存在)→ DevBooks 2.0 协议,使用默认映射
21
+ 4. `project.md`(如存在)→ template 协议,使用默认映射
22
+ 5. 若仍无法确定 → **停止并询问用户**
23
+
24
+ **关键约束**:
25
+ - 如果配置中指定了 `agents_doc`(规则文档),**必须先阅读该文档**再执行任何操作
26
+ - 禁止猜测目录根
27
+ - 禁止跳过规则文档阅读
28
+
29
+ ## 审查维度
30
+
31
+ ### 1. 可读性审查
32
+ - 命名一致性(PascalCase/camelCase)
33
+ - 函数长度和复杂度
34
+ - 注释质量和必要性
35
+ - 代码格式化
36
+
37
+ ### 2. 依赖健康审查
38
+ - 分层约束遵守(参见 devbooks-c4-map)
39
+ - 循环依赖检测
40
+ - 内部模块封装(禁止深度导入 *Internal 文件)
41
+ - 依赖方向正确性
42
+
43
+ ### 3. 资源管理审查
44
+
45
+ **必须检查的资源泄漏模式**:
46
+
47
+ | 检查项 | 违规模式 | 正确模式 |
48
+ |--------|----------|----------|
49
+ | 订阅未取消 | `event.on(...)` 无对应 `off()` | 注册到 DisposableStore |
50
+ | 定时器未清理 | `setInterval()` 无 `clearInterval()` | 在 dispose() 中清理 |
51
+ | 监听器未移除 | `addEventListener()` 无 `removeEventListener()` | 使用 AbortController |
52
+ | 流未关闭 | `createReadStream()` 无 `close()` | 使用 try-finally 或 using |
53
+ | 连接未释放 | `connect()` 无 `disconnect()` | 使用连接池或 dispose 模式 |
54
+
55
+ **DisposableStore 模式检查**:
56
+
57
+ ```typescript
58
+ // 违规:可变的 disposable 字段
59
+ private disposable = new DisposableStore(); // 应该是 readonly
60
+
61
+ // 违规:dispose() 未调用 super.dispose()
62
+ dispose() {
63
+ this.cleanup(); // 缺少 super.dispose()
64
+ }
65
+
66
+ // 正确模式
67
+ private readonly _disposables = new DisposableStore();
68
+
69
+ override dispose() {
70
+ this._disposables.dispose();
71
+ super.dispose();
72
+ }
73
+ ```
74
+
75
+ **资源管理检查清单**:
76
+ - [ ] DisposableStore 字段是否声明为 `readonly` 或 `const`?
77
+ - [ ] dispose() 方法是否调用了 `super.dispose()`?
78
+ - [ ] 订阅/监听器是否注册到 DisposableStore?
79
+ - [ ] 测试是否包含 `ensureNoDisposablesAreLeakedInTestSuite()`?
80
+
81
+ ### 4. 类型安全审查
82
+
83
+ - [ ] 是否存在 `as any` 类型断言?
84
+ - [ ] 是否存在 `{} as T` 危险断言?
85
+ - [ ] 是否使用了 `unknown` 而非 `any`?
86
+ - [ ] 泛型约束是否足够严格?
87
+
88
+ ### 5. 坏味道检测
89
+
90
+ 参见:`references/坏味道速查表.md`
91
+
92
+ ### 6. 测试质量审查
93
+
94
+ - [ ] 是否存在 `test.only` / `describe.only`?
95
+ - [ ] 测试是否有清理逻辑(afterEach)?
96
+ - [ ] 测试是否独立(不依赖执行顺序)?
97
+ - [ ] mock 是否正确重置?
98
+
99
+ ## 执行方式
100
+
101
+ 1) 先阅读并遵守:`_shared/references/通用守门协议.md`(可验证性 + 结构质量守门)。
102
+ 2) 阅读资源管理指南:`references/资源管理审查清单.md`。
103
+ 3) 严格按完整提示词输出评审意见:`references/代码评审提示词.md`。
104
+
105
+ ---
106
+
107
+ ## 上下文感知
108
+
109
+ 本 Skill 在执行前自动检测上下文,选择合适的审查范围。
110
+
111
+ 检测规则参考:`skills/_shared/context-detection-template.md`
112
+
113
+ ### 检测流程
114
+
115
+ 1. 检测变更包是否存在
116
+ 2. 检测是否有代码变更(git diff)
117
+ 3. 检测热点文件(通过 CKB getHotspots)
118
+
119
+ ### 本 Skill 支持的模式
120
+
121
+ | 模式 | 触发条件 | 行为 |
122
+ |------|----------|------|
123
+ | **变更包审查** | 提供 change-id | 审查该变更包相关的代码变更 |
124
+ | **文件审查** | 提供具体文件路径 | 审查指定文件 |
125
+ | **热点优先审查** | 检测到热点文件变更 | 优先审查高风险热点 |
126
+
127
+ ### 检测输出示例
128
+
129
+ ```
130
+ 检测结果:
131
+ - 变更包状态:存在
132
+ - 代码变更:12 个文件
133
+ - 热点文件:3 个(需重点关注)
134
+ - 运行模式:变更包审查 + 热点优先
135
+ ```
136
+
137
+ ---
138
+
139
+ ## MCP 增强
140
+
141
+ 本 Skill 支持 MCP 运行时增强,自动检测并启用高级功能。
142
+
143
+ MCP 增强规则参考:`skills/_shared/mcp-enhancement-template.md`
144
+
145
+ ### 依赖的 MCP 服务
146
+
147
+ | 服务 | 用途 | 超时 |
148
+ |------|------|------|
149
+ | `mcp__ckb__getHotspots` | 检测热点文件,优先审查 | 2s |
150
+ | `mcp__ckb__getStatus` | 检测 CKB 索引可用性 | 2s |
151
+
152
+ ### 检测流程
153
+
154
+ 1. 调用 `mcp__ckb__getStatus`(2s 超时)
155
+ 2. 若 CKB 可用 → 调用 `mcp__ckb__getHotspots` 获取热点文件
156
+ 3. 对热点文件进行优先审查
157
+ 4. 若超时或失败 → 降级到基础模式
158
+
159
+ ### 增强模式 vs 基础模式
160
+
161
+ | 功能 | 增强模式 | 基础模式 |
162
+ |------|----------|----------|
163
+ | 热点优先审查 | 自动识别高风险文件 | 按变更顺序审查 |
164
+ | 依赖方向检查 | 基于模块图分析 | 基于文件路径推断 |
165
+ | 循环依赖检测 | CKB 精确检测 | Grep 启发式检测 |
166
+
167
+ ### 降级提示
168
+
169
+ 当 MCP 不可用时,输出以下提示:
170
+
171
+ ```
172
+ ⚠️ CKB 不可用,无法进行热点优先审查。
173
+ 按变更文件顺序进行审查。
174
+ ```
175
+
@@ -0,0 +1,321 @@
1
+ # Pull Request 模板与指南
2
+
3
+ 借鉴 VS Code 的 `.github/pull_request_template.md`,本文档定义了 PR 提交的标准流程。
4
+
5
+ ---
6
+
7
+ ## 1) PR 模板
8
+
9
+ ```markdown
10
+ ## Summary
11
+
12
+ <!-- 用 1-3 句话描述这个 PR 做了什么 -->
13
+
14
+ ## Related Issues
15
+
16
+ <!-- 关联的 Issue,使用 Fixes #123 或 Relates to #456 -->
17
+
18
+ ## Changes
19
+
20
+ <!-- 列出主要变更点 -->
21
+
22
+ - [ ] 变更点 1
23
+ - [ ] 变更点 2
24
+ - [ ] 变更点 3
25
+
26
+ ## Type of Change
27
+
28
+ <!-- 选择一个类型 -->
29
+
30
+ - [ ] Bug fix (non-breaking change which fixes an issue)
31
+ - [ ] New feature (non-breaking change which adds functionality)
32
+ - [ ] Breaking change (fix or feature that would cause existing functionality to change)
33
+ - [ ] Documentation update
34
+ - [ ] Refactoring (no functional changes)
35
+
36
+ ## Test Plan
37
+
38
+ <!-- 描述如何测试这个变更 -->
39
+
40
+ 1. 步骤 1
41
+ 2. 步骤 2
42
+ 3. 预期结果
43
+
44
+ ## Checklist
45
+
46
+ <!-- 确认以下项目 -->
47
+
48
+ - [ ] 代码遵循项目编码规范
49
+ - [ ] 已添加/更新相关测试
50
+ - [ ] 所有测试通过(`npm test`)
51
+ - [ ] 已更新相关文档
52
+ - [ ] 提交信息遵循 Conventional Commits 规范
53
+ - [ ] 已自查代码,无调试语句残留
54
+
55
+ ## Screenshots (if applicable)
56
+
57
+ <!-- 如果涉及 UI 变更,请提供截图 -->
58
+ ```
59
+
60
+ ---
61
+
62
+ ## 2) PR 类型与规模
63
+
64
+ ### 类型定义
65
+
66
+ | 类型 | 前缀 | 说明 |
67
+ |------|------|------|
68
+ | Bug 修复 | `fix:` | 修复现有功能的问题 |
69
+ | 新功能 | `feat:` | 添加新功能 |
70
+ | 重构 | `refactor:` | 不改变行为的代码优化 |
71
+ | 文档 | `docs:` | 仅文档变更 |
72
+ | 测试 | `test:` | 添加或修改测试 |
73
+ | 构建 | `build:` | 构建系统或依赖变更 |
74
+ | 性能 | `perf:` | 性能优化 |
75
+
76
+ ### 规模控制
77
+
78
+ | 规模 | 变更行数 | 审查时间 | 建议 |
79
+ |------|----------|----------|------|
80
+ | XS | < 50 行 | 15 分钟 | 可快速合并 |
81
+ | S | 50-200 行 | 30 分钟 | 标准审查 |
82
+ | M | 200-500 行 | 1 小时 | 需要仔细审查 |
83
+ | L | 500-1000 行 | 2+ 小时 | 建议拆分 |
84
+ | XL | > 1000 行 | 半天+ | **必须拆分** |
85
+
86
+ **原则**:一个 PR 只做一件事,保持原子性。
87
+
88
+ ---
89
+
90
+ ## 3) Commit 规范
91
+
92
+ ### Conventional Commits 格式
93
+
94
+ ```
95
+ <type>(<scope>): <subject>
96
+
97
+ <body>
98
+
99
+ <footer>
100
+ ```
101
+
102
+ ### 示例
103
+
104
+ ```
105
+ feat(auth): add OAuth2 login support
106
+
107
+ - Add OAuth2 provider configuration
108
+ - Implement token refresh mechanism
109
+ - Add logout cleanup logic
110
+
111
+ Closes #123
112
+ ```
113
+
114
+ ```
115
+ fix(api): handle null response from external service
116
+
117
+ The external API sometimes returns null instead of an empty array.
118
+ Added defensive check to prevent runtime errors.
119
+
120
+ Fixes #456
121
+ ```
122
+
123
+ ### 常见类型
124
+
125
+ | 类型 | 说明 | 示例 |
126
+ |------|------|------|
127
+ | `feat` | 新功能 | `feat(user): add profile edit` |
128
+ | `fix` | Bug 修复 | `fix(auth): correct token expiry` |
129
+ | `docs` | 文档 | `docs(readme): update install guide` |
130
+ | `style` | 格式调整 | `style: fix indentation` |
131
+ | `refactor` | 重构 | `refactor(api): extract common logic` |
132
+ | `test` | 测试 | `test(user): add unit tests` |
133
+ | `chore` | 杂项 | `chore(deps): update lodash` |
134
+
135
+ ---
136
+
137
+ ## 4) 审查清单
138
+
139
+ ### 提交者自查
140
+
141
+ 提交 PR 前,确认以下内容:
142
+
143
+ ```bash
144
+ # 1. 代码检查
145
+ npm run lint
146
+ npm run compile
147
+
148
+ # 2. 测试通过
149
+ npm test
150
+
151
+ # 3. 无调试代码
152
+ rg 'console\.(log|debug)|debugger' src/ --type ts
153
+
154
+ # 4. 无 .only 测试
155
+ rg '\.only\s*\(' tests/ --type ts
156
+
157
+ # 5. 无敏感信息
158
+ rg '(password|secret|token|key)\s*[:=]' --type ts -i
159
+ ```
160
+
161
+ ### 审查者检查
162
+
163
+ 审查 PR 时,关注以下方面:
164
+
165
+ **功能性**
166
+ - [ ] 代码是否实现了 PR 描述的功能?
167
+ - [ ] 边界条件是否处理?
168
+ - [ ] 错误情况是否处理?
169
+
170
+ **代码质量**
171
+ - [ ] 命名是否清晰?
172
+ - [ ] 函数是否过长?
173
+ - [ ] 是否有重复代码?
174
+ - [ ] 是否有明显的性能问题?
175
+
176
+ **安全性**
177
+ - [ ] 是否有 SQL 注入风险?
178
+ - [ ] 是否有 XSS 风险?
179
+ - [ ] 敏感数据是否保护?
180
+
181
+ **测试**
182
+ - [ ] 是否有对应的测试?
183
+ - [ ] 测试是否覆盖主要路径?
184
+ - [ ] 测试是否独立、可重复?
185
+
186
+ **文档**
187
+ - [ ] 公共 API 是否有文档?
188
+ - [ ] README 是否需要更新?
189
+ - [ ] 变更日志是否需要更新?
190
+
191
+ ---
192
+
193
+ ## 5) PR 工作流
194
+
195
+ ### 标准流程
196
+
197
+ ```
198
+ 1. 创建分支
199
+ git checkout -b feat/feature-name
200
+
201
+ 2. 开发并提交
202
+ git add .
203
+ git commit -m "feat(scope): description"
204
+
205
+ 3. 推送分支
206
+ git push -u origin feat/feature-name
207
+
208
+ 4. 创建 PR
209
+ - 填写 PR 模板
210
+ - 关联 Issue
211
+ - 请求审查
212
+
213
+ 5. 处理审查意见
214
+ - 回复评论
215
+ - 推送修改
216
+ - 请求重新审查
217
+
218
+ 6. 合并
219
+ - Squash and merge(推荐)
220
+ - 删除源分支
221
+ ```
222
+
223
+ ### 分支命名
224
+
225
+ | 类型 | 格式 | 示例 |
226
+ |------|------|------|
227
+ | 功能 | `feat/<name>` | `feat/user-auth` |
228
+ | 修复 | `fix/<issue-id>` | `fix/123-login-error` |
229
+ | 文档 | `docs/<name>` | `docs/api-guide` |
230
+ | 重构 | `refactor/<name>` | `refactor/auth-service` |
231
+ | 紧急 | `hotfix/<name>` | `hotfix/security-patch` |
232
+
233
+ ---
234
+
235
+ ## 6) 审查礼仪
236
+
237
+ ### 提交者
238
+
239
+ - 提供足够的上下文
240
+ - 及时回复审查意见
241
+ - 感谢审查者的时间
242
+ - 避免大型 PR
243
+
244
+ ### 审查者
245
+
246
+ - 及时审查(24-48 小时内)
247
+ - 提供建设性意见
248
+ - 解释"为什么"而不只是"什么"
249
+ - 区分"必须修改"和"建议"
250
+
251
+ ### 评论格式
252
+
253
+ ```markdown
254
+ # 必须修改
255
+ 🔴 **必须**:这里有安全漏洞,需要添加输入验证
256
+
257
+ # 建议修改
258
+ 🟡 **建议**:考虑使用 `Array.from()` 替代 spread 操作
259
+
260
+ # 疑问
261
+ 🔵 **问题**:这个超时时间的选择依据是什么?
262
+
263
+ # 赞扬
264
+ 🟢 **赞**:这个抽象很优雅!
265
+ ```
266
+
267
+ ---
268
+
269
+ ## 7) 自动化检查
270
+
271
+ ### CI 流程配置
272
+
273
+ ```yaml
274
+ # .github/workflows/pr-check.yml
275
+ name: PR Check
276
+
277
+ on:
278
+ pull_request:
279
+ branches: [main, develop]
280
+
281
+ jobs:
282
+ check:
283
+ runs-on: ubuntu-latest
284
+ steps:
285
+ - uses: actions/checkout@v4
286
+
287
+ - name: Setup Node
288
+ uses: actions/setup-node@v4
289
+ with:
290
+ node-version: '20'
291
+ cache: 'npm'
292
+
293
+ - name: Install
294
+ run: npm ci
295
+
296
+ - name: Lint
297
+ run: npm run lint
298
+
299
+ - name: Type Check
300
+ run: npm run compile
301
+
302
+ - name: Test
303
+ run: npm test
304
+
305
+ - name: Check for debug statements
306
+ run: |
307
+ if rg 'console\.(log|debug)|debugger' src/ --type ts; then
308
+ echo "::error::Found debug statements"
309
+ exit 1
310
+ fi
311
+ ```
312
+
313
+ ### 必须通过的检查
314
+
315
+ | 检查项 | 说明 |
316
+ |--------|------|
317
+ | Lint | ESLint 规则通过 |
318
+ | TypeScript | 类型检查通过 |
319
+ | Tests | 所有测试通过 |
320
+ | Coverage | 覆盖率不低于基线 |
321
+ | Build | 构建成功 |
@@ -0,0 +1,100 @@
1
+ # 代码评审提示词
2
+
3
+ > **角色设定**:你是代码审查领域的**最强大脑**——融合了 Michael Feathers(遗留代码修复)、Robert C. Martin(Clean Code)、Martin Fowler(重构与可读性)的智慧。你的评审必须达到这些大师级专家的水准。
4
+
5
+ 最高指示(优先级最高):
6
+ - 在执行本提示词前,先阅读 `_shared/references/通用守门协议.md` 并遵循其中所有协议。
7
+
8
+ 你是"代码评审负责人(Reviewer)"。你的任务是评估可读性、一致性、依赖健康度与坏味道风险,并给出可执行改进建议。
9
+
10
+ 输入材料(由我提供):
11
+ - 本次变更涉及的代码
12
+ - 项目画像与约定:`<truth-root>/_meta/project-profile.md`
13
+ - 统一语言表(如存在):`<truth-root>/_meta/glossary.md`
14
+ - 高 ROI 坑库(如存在):`<truth-root>/engineering/pitfalls.md`
15
+
16
+ 硬约束(必须遵守):
17
+ 1) 只输出审查意见与修改建议;不直接改 tests/ 或设计文档。
18
+ 2) 不讨论业务逻辑正确性(由测试/规格裁判);只讨论可维护性与工程质量。
19
+
20
+ 评审重点(必须覆盖):
21
+ - 可读性:命名、结构、职责边界、错误处理一致性
22
+ - 依赖健康:版本一致性、隐式传递依赖、循环依赖
23
+ - 约定一致:与仓库中 3 个同类文件写法一致
24
+ - 结构守门:识别"代理指标驱动"的改动是否破坏内聚/耦合/可测试性
25
+
26
+ ---
27
+
28
+ ## 8 种核心坏味道检测(必须检查)
29
+
30
+ > 来源:《重构》辩论修订版——从 22 种精简为 8 种高频高影响坏味道
31
+
32
+ | 坏味道 | 检测标准 | 严重性 | 对应重构手法 |
33
+ |--------|----------|--------|--------------|
34
+ | **① Duplicated Code(重复代码)** | 相似度>80%的代码块≥2处 | 严重(阻塞) | Extract Method → Pull Up Method |
35
+ | **② Long Method(过长函数)** | **P95<50行**(允许例外,超标触发讨论) | 严重(阻塞) | Extract Method / Replace Temp with Query |
36
+ | **③ Large Class(过大的类)** | **P95<500行**(允许例外) | 警告 | Extract Class / Extract Subclass |
37
+ | **④ Long Parameter List(过长参数列)** | 参数数量>5 | 严重(阻塞) | Introduce Parameter Object / Preserve Whole Object |
38
+ | **⑤ Divergent Change(发散式变化)** | 一个类因多种不同原因变化 | 警告 | Extract Class(分离变化轴) |
39
+ | **⑥ Shotgun Surgery(霰弹式修改)** | 一个变更需修改≥3个类 | 严重(阻塞) | Move Method / Move Field |
40
+ | **⑦ Feature Envy(依恋情结)** | 函数对他类调用>对自己类的调用 | 警告 | Move Method |
41
+ | **⑧ Primitive Obsession(基本类型偏执)** | 业务概念(Money/Email/UserId)未封装为值对象 | 警告 | Replace Data Value with Object |
42
+
43
+ **阈值说明**:
44
+ - P95 表示允许 5% 的例外存在,超标时触发人工讨论而非自动拒绝
45
+ - "严重(阻塞)"= 必须修复才能合并
46
+ - "警告"= 建议修复,可记录技术债务后合并
47
+
48
+ ---
49
+
50
+ ## N+1 问题检测(条件触发)
51
+
52
+ > **触发条件**:仅当代码涉及 ORM 操作或循环内调用外部 API/RPC 时检查;纯计算/工具类代码可跳过
53
+
54
+ - **ORM N+1**:循环内执行 ORM 查询?是否缺少 eager loading / batch fetch?
55
+ - **远程 N+1**:循环内调用外部 API/RPC?是否应改为批量接口?
56
+ - 若检测到 N+1 模式,直接标记为"严重问题(必须修复)"
57
+
58
+ ---
59
+
60
+ ## 术语一致性(UBIQUITOUS LANGUAGE)(必须检查)
61
+
62
+ - 代码中的类名/变量名/方法名是否与 `glossary.md` 中的术语一致?
63
+ - 是否存在未在 `glossary.md` 中定义的新术语?(如有,建议先更新术语表)
64
+ - 是否存在同一概念在不同模块中使用不同命名?(如 User/Account/Member 混用)
65
+ - Entity 与 ValueObject 的区分是否正确?(Entity 有 ID,VO 无 ID 且不可变)
66
+
67
+ ---
68
+
69
+ ## Invariant 保护(必须检查)
70
+
71
+ - 若 `design.md` 中标注了 `[Invariant]`,检查代码是否有对应的断言/验证逻辑
72
+ - 状态变更时是否可能破坏已声明的固定规则?
73
+
74
+ ---
75
+
76
+ ## 设计模式检查项(情境化使用)
77
+
78
+ > 以下检查项为 **C 级(可选)**,仅在代码涉及相关模式时检查
79
+
80
+ - **对接口编程**:外部依赖(数据库/缓存/API)是否有接口抽象?
81
+ - **组合优于继承**:继承深度 > 3 层时发出警告,但允许浅层继承(≤2层)
82
+ - **Singleton 检测**:若检测到,建议改为依赖注入(标记为"可维护性风险"而非阻塞)
83
+ - **变化点识别**:if-else/switch 分支 > 5 个时,建议提取为策略/多态(仅建议)
84
+
85
+ ---
86
+
87
+ ## 已删除的检查项(辩论后精简)
88
+
89
+ 以下概念经三方辩论后被删除或降级,不再作为必须检查项:
90
+ - ~~Parallel Inheritance Hierarchies~~ → 现代代码极少出现
91
+ - ~~Lazy Class~~ → 与SRP冲突,小类是好设计
92
+ - ~~Message Chains~~ → 函数式链式调用盛行
93
+ - ~~函数>20行警告~~ → 已改为 P95<50行
94
+ - ~~参数>3个警告~~ → 已改为>5个阻塞
95
+
96
+ 输出格式:
97
+ 1) 严重问题(必须修复)
98
+ 2) 可维护性风险(建议修复)
99
+ 3) 风格与一致性建议(可选)
100
+ 4) 若需新增质量闸门(lint/复杂度/依赖规则),给出具体建议