pdd-skills 3.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 (261) hide show
  1. package/README.md +1478 -0
  2. package/bin/pdd.js +354 -0
  3. package/config/bpmn-rules.yaml +166 -0
  4. package/config/checkstyle.xml +105 -0
  5. package/config/eslint.config.js +48 -0
  6. package/config/pmd.xml +91 -0
  7. package/config/prd-rules.yaml +113 -0
  8. package/config/ruff.toml +45 -0
  9. package/config/sqlfluff.cfg +82 -0
  10. package/hooks/hook-executor.js +332 -0
  11. package/index.js +43 -0
  12. package/lib/api-routes.js +750 -0
  13. package/lib/api-server.js +408 -0
  14. package/lib/cache/cache-config.js +209 -0
  15. package/lib/cache/system-cache.js +852 -0
  16. package/lib/config-manager.js +373 -0
  17. package/lib/generate.js +528 -0
  18. package/lib/grpc/grpc-routes.js +1134 -0
  19. package/lib/grpc/grpc-server.js +912 -0
  20. package/lib/grpc/proto-definitions.js +1033 -0
  21. package/lib/init.js +172 -0
  22. package/lib/iteration/auto-fixer.js +1025 -0
  23. package/lib/iteration/auto-reviewer.js +923 -0
  24. package/lib/iteration/controller.js +577 -0
  25. package/lib/list.js +130 -0
  26. package/lib/mcp-server.js +548 -0
  27. package/lib/openclaw/api-integration.js +535 -0
  28. package/lib/openclaw/cli-integration.js +567 -0
  29. package/lib/openclaw/data-sync.js +845 -0
  30. package/lib/openclaw/openclaw-adapter.js +783 -0
  31. package/lib/plugin/example-plugins/code-stats/index.js +332 -0
  32. package/lib/plugin/example-plugins/code-stats/plugin.json +1 -0
  33. package/lib/plugin/example-plugins/custom-linter/index.js +472 -0
  34. package/lib/plugin/example-plugins/custom-linter/plugin.json +1 -0
  35. package/lib/plugin/example-plugins/hello-world/index.js +86 -0
  36. package/lib/plugin/example-plugins/hello-world/plugin.json +1 -0
  37. package/lib/plugin/plugin-manager.js +655 -0
  38. package/lib/plugin/plugin-sdk.js +565 -0
  39. package/lib/plugin/sandbox.js +627 -0
  40. package/lib/quality/rules/maintainability.js +418 -0
  41. package/lib/quality/rules/performance.js +498 -0
  42. package/lib/quality/rules/readability.js +441 -0
  43. package/lib/quality/rules/robustness.js +504 -0
  44. package/lib/quality/rules/security.js +444 -0
  45. package/lib/quality/scorer.js +576 -0
  46. package/lib/report.js +669 -0
  47. package/lib/sdk-base.js +301 -0
  48. package/lib/sdk-js.js +446 -0
  49. package/lib/sdk-python/README.md +546 -0
  50. package/lib/sdk-python/examples/basic_usage.py +450 -0
  51. package/lib/sdk-python/pdd_sdk/__init__.py +180 -0
  52. package/lib/sdk-python/pdd_sdk/client.py +1170 -0
  53. package/lib/sdk-python/pdd_sdk/events.py +423 -0
  54. package/lib/sdk-python/pdd_sdk/exceptions.py +158 -0
  55. package/lib/sdk-python/pdd_sdk/models.py +518 -0
  56. package/lib/sdk-python/pdd_sdk/utils.py +759 -0
  57. package/lib/token/budget-alert.js +367 -0
  58. package/lib/token/budget-manager.js +485 -0
  59. package/lib/update.js +54 -0
  60. package/lib/utils/logger.js +88 -0
  61. package/lib/verify.js +741 -0
  62. package/lib/version.js +52 -0
  63. package/lib/vm/README.md +102 -0
  64. package/lib/vm/dashboard/api-routes.js +669 -0
  65. package/lib/vm/dashboard/server.js +391 -0
  66. package/lib/vm/dashboard/sse.js +358 -0
  67. package/lib/vm/dashboard/static/css/dashboard.css +1378 -0
  68. package/lib/vm/dashboard/static/index.html +118 -0
  69. package/lib/vm/dashboard/static/js/app.js +949 -0
  70. package/lib/vm/dashboard/static/js/charts.js +913 -0
  71. package/lib/vm/dashboard/static/js/kanban-view.js +1053 -0
  72. package/lib/vm/dashboard/static/js/pipeline-view.js +463 -0
  73. package/lib/vm/dashboard/static/js/quality-view.js +598 -0
  74. package/lib/vm/dashboard/static/js/system-view.js +1021 -0
  75. package/lib/vm/data-provider.js +1191 -0
  76. package/lib/vm/event-bus.js +402 -0
  77. package/lib/vm/hooks/extract-hook.js +307 -0
  78. package/lib/vm/hooks/generate-hook.js +374 -0
  79. package/lib/vm/hooks/hook-interface.js +458 -0
  80. package/lib/vm/hooks/report-hook.js +331 -0
  81. package/lib/vm/hooks/verify-hook.js +454 -0
  82. package/lib/vm/models.js +1003 -0
  83. package/lib/vm/reconciler.js +855 -0
  84. package/lib/vm/scanner.js +988 -0
  85. package/lib/vm/state-schema.js +955 -0
  86. package/lib/vm/state-store.js +733 -0
  87. package/lib/vm/tui/components/card.js +339 -0
  88. package/lib/vm/tui/components/progress-bar.js +368 -0
  89. package/lib/vm/tui/components/sparkline.js +327 -0
  90. package/lib/vm/tui/components/status-light.js +294 -0
  91. package/lib/vm/tui/components/table.js +370 -0
  92. package/lib/vm/tui/input.js +335 -0
  93. package/lib/vm/tui/renderer.js +548 -0
  94. package/lib/vm/tui/screens/kanban-screen.js +397 -0
  95. package/lib/vm/tui/screens/overview-screen.js +357 -0
  96. package/lib/vm/tui/screens/quality-screen.js +336 -0
  97. package/lib/vm/tui/screens/system-screen.js +379 -0
  98. package/lib/vm/tui/tui.js +805 -0
  99. package/package.json +1 -0
  100. package/scripts/cso-analyzer.js +198 -0
  101. package/scripts/eval-runner.js +359 -0
  102. package/scripts/i18n-checker.js +109 -0
  103. package/scripts/linter/activiti-linter.js +272 -0
  104. package/scripts/linter/prd-linter.js +162 -0
  105. package/scripts/linter/report-generator.js +207 -0
  106. package/scripts/linter/run-linters.js +285 -0
  107. package/scripts/linter/sql-linter.js +166 -0
  108. package/scripts/token-analyzer.js +162 -0
  109. package/scripts/vm-test.js +180 -0
  110. package/skills/core/official-doc-writer/LICENSE +21 -0
  111. package/skills/core/official-doc-writer/README.md +232 -0
  112. package/skills/core/official-doc-writer/SKILL.md +475 -0
  113. package/skills/core/official-doc-writer/_meta.json +1 -0
  114. package/skills/core/official-doc-writer/document_generator.py +580 -0
  115. package/skills/core/official-doc-writer/evals/default-evals.json +1 -0
  116. package/skills/core/official-doc-writer/examples.md +150 -0
  117. package/skills/core/official-doc-writer/fonts/FONTS_LIST.md +45 -0
  118. package/skills/core/official-doc-writer/fonts/README.md +141 -0
  119. package/skills/core/official-doc-writer/fonts/SIMFANG.TTF +0 -0
  120. package/skills/core/official-doc-writer/fonts/SIMHEI.TTF +0 -0
  121. package/skills/core/official-doc-writer/fonts/SIMKAI.TTF +0 -0
  122. package/skills/core/official-doc-writer/fonts/SIMSUN.TTC +0 -0
  123. package/skills/core/official-doc-writer/fonts//346/226/271/346/255/243/345/260/217/346/240/207/345/256/213GBK.TTF +0 -0
  124. package/skills/core/official-doc-writer/references/GBT_9704-2012_/345/205/232/346/224/277/346/234/272/345/205/263/345/205/254/346/226/207/346/240/274/345/274/217.md +422 -0
  125. package/skills/core/official-doc-writer/scripts/__pycache__/generate_official_doc.cpython-313.pyc +0 -0
  126. package/skills/core/official-doc-writer/scripts/dialog_manager.py +564 -0
  127. package/skills/core/official-doc-writer/scripts/generate_official_doc.py +252 -0
  128. package/skills/core/official-doc-writer/scripts/install_fonts.py +390 -0
  129. package/skills/core/official-doc-writer/scripts/smart_prompts.py +363 -0
  130. package/skills/core/pdd-ba/SKILL.md +305 -0
  131. package/skills/core/pdd-ba/_meta.json +1 -0
  132. package/skills/core/pdd-ba/evals/default-evals.json +1 -0
  133. package/skills/core/pdd-code-reviewer/SKILL.md +378 -0
  134. package/skills/core/pdd-code-reviewer/_meta.json +1 -0
  135. package/skills/core/pdd-code-reviewer/evals/default-evals.json +1 -0
  136. package/skills/core/pdd-doc-change/SKILL.md +350 -0
  137. package/skills/core/pdd-doc-change/_meta.json +1 -0
  138. package/skills/core/pdd-doc-change/evals/default-evals.json +1 -0
  139. package/skills/core/pdd-doc-gardener/SKILL.md +248 -0
  140. package/skills/core/pdd-doc-gardener/_meta.json +1 -0
  141. package/skills/core/pdd-doc-gardener/evals/default-evals.json +1 -0
  142. package/skills/core/pdd-entropy-reduction/SKILL.md +360 -0
  143. package/skills/core/pdd-entropy-reduction/_meta.json +1 -0
  144. package/skills/core/pdd-entropy-reduction/evals/default-evals.json +1 -0
  145. package/skills/core/pdd-entropy-reduction/references/entropy-report-template.md +287 -0
  146. package/skills/core/pdd-entropy-reduction/references/golden-principles.md +573 -0
  147. package/skills/core/pdd-entropy-reduction/scripts/entropy_scan.py +712 -0
  148. package/skills/core/pdd-extract-features/SKILL.md +320 -0
  149. package/skills/core/pdd-extract-features/_meta.json +1 -0
  150. package/skills/core/pdd-extract-features/evals/default-evals.json +1 -0
  151. package/skills/core/pdd-generate-spec/SKILL.md +418 -0
  152. package/skills/core/pdd-generate-spec/_meta.json +1 -0
  153. package/skills/core/pdd-generate-spec/evals/default-evals.json +1 -0
  154. package/skills/core/pdd-implement-feature/SKILL.md +332 -0
  155. package/skills/core/pdd-implement-feature/_meta.json +1 -0
  156. package/skills/core/pdd-implement-feature/evals/default-evals.json +1 -0
  157. package/skills/core/pdd-main/SKILL.md +540 -0
  158. package/skills/core/pdd-main/_meta.json +1 -0
  159. package/skills/core/pdd-main/evals/default-evals.json +1 -0
  160. package/skills/core/pdd-main/evals/evals.json +215 -0
  161. package/skills/core/pdd-verify-feature/SKILL.md +474 -0
  162. package/skills/core/pdd-verify-feature/_meta.json +1 -0
  163. package/skills/core/pdd-verify-feature/evals/default-evals.json +1 -0
  164. package/skills/core/pdd-vm/evals/default-evals.json +1 -0
  165. package/skills/core/traffic-accident-assessor/LICENSE +29 -0
  166. package/skills/core/traffic-accident-assessor/SKILL.md +439 -0
  167. package/skills/core/traffic-accident-assessor/evals/evals.json +1 -0
  168. package/skills/core/traffic-accident-assessor/references/accident-types.md +369 -0
  169. package/skills/core/traffic-accident-assessor/references/liability-rules.md +287 -0
  170. package/skills/core/traffic-accident-assessor/references/traffic-laws.md +226 -0
  171. package/skills/core/traffic-accident-assessor/references//351/253/230/345/260/224/345/244/253/350/257/264/346/230/216/344/271/246.pdf +32576 -106
  172. package/skills/core/traffic-accident-assessor/scripts/generate_official_statement.py +588 -0
  173. package/skills/core/traffic-accident-assessor/scripts/generate_report.py +495 -0
  174. package/skills/core/traffic-accident-assessor/scripts/generate_statement.py +528 -0
  175. package/skills/core/traffic-accident-assessor.zip +0 -0
  176. package/skills/entropy/expert-arch-enforcer/SKILL.md +292 -0
  177. package/skills/entropy/expert-arch-enforcer/_meta.json +1 -0
  178. package/skills/entropy/expert-arch-enforcer/evals/default-evals.json +1 -0
  179. package/skills/entropy/expert-auto-refactor/SKILL.md +327 -0
  180. package/skills/entropy/expert-auto-refactor/_meta.json +1 -0
  181. package/skills/entropy/expert-auto-refactor/evals/default-evals.json +1 -0
  182. package/skills/entropy/expert-code-quality/SKILL.md +468 -0
  183. package/skills/entropy/expert-code-quality/_meta.json +1 -0
  184. package/skills/entropy/expert-code-quality/evals/default-evals.json +1 -0
  185. package/skills/entropy/expert-code-quality/evals/evals.json +109 -0
  186. package/skills/entropy/expert-code-quality/references/code-smells.md +605 -0
  187. package/skills/entropy/expert-code-quality/references/design-patterns.md +1111 -0
  188. package/skills/entropy/expert-code-quality/references/refactoring-catalog.md +1281 -0
  189. package/skills/entropy/expert-code-quality/references/solid-principles.md +524 -0
  190. package/skills/entropy/expert-entropy-auditor/SKILL.md +276 -0
  191. package/skills/entropy/expert-entropy-auditor/_meta.json +1 -0
  192. package/skills/entropy/expert-entropy-auditor/evals/default-evals.json +1 -0
  193. package/skills/expert/expert-activiti/SKILL.md +497 -0
  194. package/skills/expert/expert-activiti/_meta.json +1 -0
  195. package/skills/expert/expert-mysql/SKILL.md +832 -0
  196. package/skills/expert/expert-mysql/_meta.json +1 -0
  197. package/skills/expert/expert-performance/SKILL.md +379 -0
  198. package/skills/expert/expert-performance/_meta.json +1 -0
  199. package/skills/expert/expert-performance/evals/default-evals.json +1 -0
  200. package/skills/expert/expert-ruoyi/SKILL.md +472 -0
  201. package/skills/expert/expert-ruoyi/_meta.json +1 -0
  202. package/skills/expert/expert-security/SKILL.md +1341 -0
  203. package/skills/expert/expert-security/_meta.json +1 -0
  204. package/skills/expert/expert-security/evals/default-evals.json +1 -0
  205. package/skills/expert/software-architect/SKILL.md +350 -0
  206. package/skills/expert/software-architect/_meta.json +1 -0
  207. package/skills/expert/software-engineer/SKILL.md +437 -0
  208. package/skills/expert/software-engineer/_meta.json +1 -0
  209. package/skills/expert/software-engineer/architecture.md +130 -0
  210. package/skills/expert/software-engineer/patterns.md +151 -0
  211. package/skills/expert/software-engineer/testing.md +135 -0
  212. package/skills/expert/system-architect/SKILL.md +628 -0
  213. package/skills/expert/system-architect/_meta.json +1 -0
  214. package/skills/expert/system-architect/assets/templates/ARCHITECTURE.md +25 -0
  215. package/skills/expert/system-architect/assets/templates/README.md +44 -0
  216. package/skills/expert/system-architect/references/js-ts-standards.md +18 -0
  217. package/skills/expert/system-architect/references/python-standards.md +19 -0
  218. package/skills/expert/system-architect/references/scaffolding.md +61 -0
  219. package/skills/expert/system-architect/references/security-checklist.md +21 -0
  220. package/skills/openspec/openspec-apply-change/SKILL.md +156 -0
  221. package/skills/openspec/openspec-apply-change/_meta.json +1 -0
  222. package/skills/openspec/openspec-archive-change/SKILL.md +114 -0
  223. package/skills/openspec/openspec-archive-change/_meta.json +1 -0
  224. package/skills/openspec/openspec-bulk-archive-change/SKILL.md +246 -0
  225. package/skills/openspec/openspec-bulk-archive-change/_meta.json +1 -0
  226. package/skills/openspec/openspec-continue-change/SKILL.md +118 -0
  227. package/skills/openspec/openspec-continue-change/_meta.json +1 -0
  228. package/skills/openspec/openspec-explore/SKILL.md +288 -0
  229. package/skills/openspec/openspec-explore/_meta.json +1 -0
  230. package/skills/openspec/openspec-ff-change/SKILL.md +101 -0
  231. package/skills/openspec/openspec-ff-change/_meta.json +1 -0
  232. package/skills/openspec/openspec-new-change/SKILL.md +74 -0
  233. package/skills/openspec/openspec-new-change/_meta.json +1 -0
  234. package/skills/openspec/openspec-onboard/SKILL.md +554 -0
  235. package/skills/openspec/openspec-onboard/_meta.json +1 -0
  236. package/skills/openspec/openspec-sync-specs/SKILL.md +138 -0
  237. package/skills/openspec/openspec-sync-specs/_meta.json +1 -0
  238. package/skills/openspec/openspec-verify-change/SKILL.md +168 -0
  239. package/skills/openspec/openspec-verify-change/_meta.json +1 -0
  240. package/skills/pr/pdd-multi-review/SKILL.md +534 -0
  241. package/skills/pr/pdd-multi-review/_meta.json +1 -0
  242. package/skills/pr/pdd-pr-batch/SKILL.md +303 -0
  243. package/skills/pr/pdd-pr-batch/_meta.json +1 -0
  244. package/skills/pr/pdd-pr-create/SKILL.md +344 -0
  245. package/skills/pr/pdd-pr-create/_meta.json +1 -0
  246. package/skills/pr/pdd-pr-merge/SKILL.md +286 -0
  247. package/skills/pr/pdd-pr-merge/_meta.json +1 -0
  248. package/skills/pr/pdd-pr-review/SKILL.md +217 -0
  249. package/skills/pr/pdd-pr-review/_meta.json +1 -0
  250. package/skills/pr/pdd-task-manager/SKILL.md +636 -0
  251. package/skills/pr/pdd-task-manager/_meta.json +1 -0
  252. package/skills/pr/pdd-template-engine/SKILL.md +306 -0
  253. package/skills/pr/pdd-template-engine/_meta.json +1 -0
  254. package/templates/behavior-shaping/iron-law-template.md +87 -0
  255. package/templates/behavior-shaping/rationalization-template.md +62 -0
  256. package/templates/behavior-shaping/red-flags-template.md +70 -0
  257. package/templates/bilingual-template.md +139 -0
  258. package/templates/config/default.yaml +47 -0
  259. package/templates/project/default/README.md +31 -0
  260. package/templates/project/frontend/README.md +46 -0
  261. package/templates/project/java/README.md +48 -0
@@ -0,0 +1,573 @@
1
+ # PDD 熵减黄金原则
2
+
3
+ > 本文档定义了 PDD 熵减机制的核心原则,所有熵减操作都应遵循这些原则。
4
+
5
+ ---
6
+
7
+ ## 一、核心原则概览
8
+
9
+ ```
10
+ ┌─────────────────────────────────────────────────────────────────┐
11
+ │ PDD 熵减黄金原则 │
12
+ ├─────────────────────────────────────────────────────────────────┤
13
+ │ 1. 共享优先原则 - 重复是熵增之源 │
14
+ │ 2. 边界验证原则 - 越界是腐化之始 │
15
+ │ 3. 简洁代码原则 - 复杂是债务之根 │
16
+ │ 4. 文档同步原则 - 脱节是混乱之本 │
17
+ │ 5. 持续改进原则 - 停滞是衰败之门 │
18
+ └─────────────────────────────────────────────────────────────────┘
19
+ ```
20
+
21
+ ---
22
+
23
+ ## 二、原则详解
24
+
25
+ ### 原则一:共享优先原则 (Shared-First)
26
+
27
+ **核心理念**: 重复是熵增之源,共享是熵减之本。
28
+
29
+ #### 2.1.1 问题场景
30
+
31
+ ```typescript
32
+ // ❌ 错误:重复代码导致熵增
33
+ // 文件 A: src/service/UserService.ts
34
+ async function validateEmail(email: string): Promise<boolean> {
35
+ const regex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
36
+ return regex.test(email);
37
+ }
38
+
39
+ // 文件 B: src/service/AdminService.ts
40
+ async function validateEmail(email: string): Promise<boolean> {
41
+ const regex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
42
+ return regex.test(email);
43
+ }
44
+
45
+ // 文件 C: src/utils/helper.ts
46
+ function isValidEmail(email: string): boolean {
47
+ return /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email);
48
+ }
49
+ ```
50
+
51
+ #### 2.1.2 正确实践
52
+
53
+ ```typescript
54
+ // ✅ 正确:提取到共享工具包
55
+ // 文件: src/shared/utils/validation.ts
56
+ export const ValidationUtils = {
57
+ isValidEmail(email: string): boolean {
58
+ const EMAIL_REGEX = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
59
+ return EMAIL_REGEX.test(email);
60
+ }
61
+ };
62
+
63
+ // 使用方
64
+ import { ValidationUtils } from '@shared/utils/validation';
65
+
66
+ async function processUser(email: string) {
67
+ if (!ValidationUtils.isValidEmail(email)) {
68
+ throw new Error('Invalid email');
69
+ }
70
+ }
71
+ ```
72
+
73
+ #### 2.1.3 检测规则
74
+
75
+ ```yaml
76
+ shared_first_rules:
77
+ - name: 重复代码检测
78
+ threshold: 5 # 相同代码块出现次数
79
+ action: 提取到共享模块
80
+
81
+ - name: 相似函数检测
82
+ threshold: 80% # 相似度阈值
83
+ action: 合并为参数化函数
84
+
85
+ - name: 常量重复检测
86
+ threshold: 2 # 相同常量出现次数
87
+ action: 提取为共享常量
88
+ ```
89
+
90
+ ---
91
+
92
+ ### 原则二:边界验证原则 (Boundary Validation)
93
+
94
+ **核心理念**: 越界是腐化之始,边界是秩序之基。
95
+
96
+ #### 2.2.1 六层依赖模型
97
+
98
+ ```
99
+ ┌─────────────────────────────────────────────────────────────────┐
100
+ │ 六层依赖模型 │
101
+ ├─────────────────────────────────────────────────────────────────┤
102
+ │ │
103
+ │ Layer 6: UI ──────→ 用户界面层 │
104
+ │ ↑ │
105
+ │ Layer 5: Runtime ──────→ 运行时环境层 │
106
+ │ ↑ │
107
+ │ Layer 4: Service ──────→ 业务服务层 │
108
+ │ ↑ │
109
+ │ Layer 3: Repo ──────→ 数据仓储层 │
110
+ │ ↑ │
111
+ │ Layer 2: Config ──────→ 配置管理层 │
112
+ │ ↑ │
113
+ │ Layer 1: Types ──────→ 类型定义层 │
114
+ │ │
115
+ │ 规则:依赖只能向下,不能向上或跨层 │
116
+ └─────────────────────────────────────────────────────────────────┘
117
+ ```
118
+
119
+ #### 2.2.2 边界违规示例
120
+
121
+ ```typescript
122
+ // ❌ 错误:Service 层直接引用 UI 层
123
+ // src/service/UserService.ts
124
+ import { UserForm } from '../ui/components/UserForm'; // 违规!
125
+
126
+ export class UserService {
127
+ async createUser(data: UserData) {
128
+ // Service 不应该知道 UI 的存在
129
+ const form = new UserForm(); // 严重违规
130
+ return form.submit(data);
131
+ }
132
+ }
133
+ ```
134
+
135
+ #### 2.2.3 正确实践
136
+
137
+ ```typescript
138
+ // ✅ 正确:通过事件机制解耦
139
+ // src/service/UserService.ts
140
+ import { EventBus } from '@shared/events';
141
+
142
+ export class UserService {
143
+ async createUser(data: UserData) {
144
+ const user = await this.repo.save(data);
145
+ // 通过事件通知,而不是直接调用 UI
146
+ EventBus.emit('user:created', user);
147
+ return user;
148
+ }
149
+ }
150
+
151
+ // src/ui/components/UserForm.tsx
152
+ import { EventBus } from '@shared/events';
153
+
154
+ export function UserForm() {
155
+ useEffect(() => {
156
+ EventBus.on('user:created', handleUserCreated);
157
+ return () => EventBus.off('user:created', handleUserCreated);
158
+ }, []);
159
+ }
160
+ ```
161
+
162
+ #### 2.2.4 边界检查规则
163
+
164
+ ```yaml
165
+ boundary_rules:
166
+ - layer: Types
167
+ can_depend_on: []
168
+ cannot_depend_on: [Config, Repo, Service, Runtime, UI]
169
+
170
+ - layer: Config
171
+ can_depend_on: [Types]
172
+ cannot_depend_on: [Repo, Service, Runtime, UI]
173
+
174
+ - layer: Repo
175
+ can_depend_on: [Types, Config]
176
+ cannot_depend_on: [Service, Runtime, UI]
177
+
178
+ - layer: Service
179
+ can_depend_on: [Types, Config, Repo]
180
+ cannot_depend_on: [Runtime, UI]
181
+
182
+ - layer: Runtime
183
+ can_depend_on: [Types, Config, Repo, Service]
184
+ cannot_depend_on: [UI]
185
+
186
+ - layer: UI
187
+ can_depend_on: [Types, Config, Repo, Service, Runtime]
188
+ cannot_depend_on: []
189
+ ```
190
+
191
+ ---
192
+
193
+ ### 原则三:简洁代码原则 (Simplicity)
194
+
195
+ **核心理念**: 复杂是债务之根,简洁是质量之本。
196
+
197
+ #### 2.3.1 复杂度度量
198
+
199
+ ```yaml
200
+ complexity_metrics:
201
+ cyclomatic_complexity:
202
+ healthy: < 10
203
+ warning: 10-20
204
+ critical: > 20
205
+
206
+ cognitive_complexity:
207
+ healthy: < 15
208
+ warning: 15-30
209
+ critical: > 30
210
+
211
+ function_length:
212
+ healthy: < 50 lines
213
+ warning: 50-100 lines
214
+ critical: > 100 lines
215
+
216
+ nesting_depth:
217
+ healthy: < 3
218
+ warning: 3-5
219
+ critical: > 5
220
+ ```
221
+
222
+ #### 2.3.2 复杂代码示例
223
+
224
+ ```typescript
225
+ // ❌ 错误:复杂度过高
226
+ async function processOrder(order: Order): Promise<Result> {
227
+ if (order.items && order.items.length > 0) {
228
+ let total = 0;
229
+ for (const item of order.items) {
230
+ if (item.price > 0) {
231
+ if (item.quantity > 0) {
232
+ if (item.discount) {
233
+ if (item.discount.type === 'percentage') {
234
+ total += item.price * item.quantity * (1 - item.discount.value / 100);
235
+ } else if (item.discount.type === 'fixed') {
236
+ total += (item.price * item.quantity) - item.discount.value;
237
+ } else {
238
+ total += item.price * item.quantity;
239
+ }
240
+ } else {
241
+ total += item.price * item.quantity;
242
+ }
243
+ }
244
+ }
245
+ }
246
+ // ... 更多嵌套逻辑
247
+ }
248
+ }
249
+ ```
250
+
251
+ #### 2.3.3 简洁重构
252
+
253
+ ```typescript
254
+ // ✅ 正确:拆分为小函数
255
+ async function processOrder(order: Order): Promise<Result> {
256
+ if (!order.items?.length) return emptyResult();
257
+
258
+ const total = order.items
259
+ .filter(hasValidPrice)
260
+ .filter(hasValidQuantity)
261
+ .reduce(sumItemPrices, 0);
262
+
263
+ return { total };
264
+ }
265
+
266
+ function hasValidPrice(item: OrderItem): boolean {
267
+ return item.price > 0;
268
+ }
269
+
270
+ function hasValidQuantity(item: OrderItem): boolean {
271
+ return item.quantity > 0;
272
+ }
273
+
274
+ function sumItemPrices(total: number, item: OrderItem): number {
275
+ return total + calculateItemTotal(item);
276
+ }
277
+
278
+ function calculateItemTotal(item: OrderItem): number {
279
+ const base = item.price * item.quantity;
280
+ return applyDiscount(base, item.discount);
281
+ }
282
+
283
+ function applyDiscount(amount: number, discount?: Discount): number {
284
+ if (!discount) return amount;
285
+
286
+ const discountStrategies = {
287
+ percentage: (a: number, d: Discount) => a * (1 - d.value / 100),
288
+ fixed: (a: number, d: Discount) => a - d.value,
289
+ };
290
+
291
+ const strategy = discountStrategies[discount.type];
292
+ return strategy ? strategy(amount, discount) : amount;
293
+ }
294
+ ```
295
+
296
+ ---
297
+
298
+ ### 原则四:文档同步原则 (Doc Sync)
299
+
300
+ **核心理念**: 脱节是混乱之本,同步是信任之源。
301
+
302
+ #### 2.4.1 文档类型与同步要求
303
+
304
+ | 文档类型 | 同步触发 | 验证方式 | 容忍度 |
305
+ |---------|---------|---------|--------|
306
+ | API 文档 | 接口变更 | 自动化测试 | 零容忍 |
307
+ | 架构文档 | 结构调整 | 架构审计 | 零容忍 |
308
+ | README | 功能变更 | 人工审核 | 低容忍 |
309
+ | 注释 | 代码修改 | 静态分析 | 中容忍 |
310
+ | 设计文档 | 需求变更 | 评审会议 | 低容忍 |
311
+
312
+ #### 2.4.2 文档-代码一致性检查
313
+
314
+ ```yaml
315
+ doc_sync_rules:
316
+ - trigger: API 签名变更
317
+ check:
318
+ - 更新 OpenAPI/Swagger 文档
319
+ - 更新类型定义文件
320
+ - 更新使用示例
321
+ auto_fix: false
322
+
323
+ - trigger: 函数参数变更
324
+ check:
325
+ - 更新 JSDoc 注释
326
+ - 更新参数说明
327
+ - 更新示例代码
328
+ auto_fix: true
329
+
330
+ - trigger: 配置项变更
331
+ check:
332
+ - 更新配置文档
333
+ - 更新环境变量说明
334
+ - 更新部署文档
335
+ auto_fix: false
336
+ ```
337
+
338
+ #### 2.4.3 文档过期检测
339
+
340
+ ```typescript
341
+ // 文档过期检测规则
342
+ interface DocStaleness {
343
+ // TODO/FIXME 过期阈值
344
+ todo_stale_days: 30; // 30天未处理的 TODO 视为过期
345
+
346
+ // 文档更新阈值
347
+ doc_update_days: 90; // 90天未更新的文档需要审核
348
+
349
+ // 代码-文档差异阈值
350
+ code_doc_diff_threshold: 0.2; // 20% 以上差异需要更新
351
+ }
352
+ ```
353
+
354
+ ---
355
+
356
+ ### 原则五:持续改进原则 (Continuous Improvement)
357
+
358
+ **核心理念**: 停滞是衰败之门,改进是进化之路。
359
+
360
+ #### 2.5.1 "小额还贷"策略
361
+
362
+ ```
363
+ ┌─────────────────────────────────────────────────────────────────┐
364
+ │ 技术债务偿还策略 │
365
+ ├─────────────────────────────────────────────────────────────────┤
366
+ │ │
367
+ │ 传统方式(大额还贷): │
368
+ │ ┌──────────────────────────────────────────────────────────┐ │
369
+ │ │ 积累债务 ──────────────────────→ 大型重构(痛苦) │ │
370
+ │ │ (6个月) (2周, 高风险) │ │
371
+ │ └──────────────────────────────────────────────────────────┘ │
372
+ │ │
373
+ │ 熵减方式(小额还贷): │
374
+ │ ┌──────────────────────────────────────────────────────────┐ │
375
+ │ │ 每周偿还 ─→ 每周偿还 ─→ 每周偿还 ─→ 系统持续健康 │ │
376
+ │ │ (2小时) (2小时) (2小时) │ │
377
+ │ └──────────────────────────────────────────────────────────┘ │
378
+ │ │
379
+ │ 关键:持续、小额、低风险 │
380
+ └─────────────────────────────────────────────────────────────────┘
381
+ ```
382
+
383
+ #### 2.5.2 改进任务优先级
384
+
385
+ ```yaml
386
+ improvement_priority:
387
+ critical:
388
+ - 架构违规(立即修复)
389
+ - 安全漏洞(立即修复)
390
+ - 数据丢失风险(立即修复)
391
+
392
+ high:
393
+ - 性能瓶颈(本周修复)
394
+ - 重复代码(本周修复)
395
+ - 文档严重过期(本周修复)
396
+
397
+ medium:
398
+ - 命名不规范(本月修复)
399
+ - 复杂度偏高(本月修复)
400
+ - 注释缺失(本月修复)
401
+
402
+ low:
403
+ - 代码风格统一(持续改进)
404
+ - 测试覆盖率提升(持续改进)
405
+ - 文档完善(持续改进)
406
+ ```
407
+
408
+ #### 2.5.3 改进度量指标
409
+
410
+ ```yaml
411
+ improvement_metrics:
412
+ debt_ratio:
413
+ description: 技术债务占比
414
+ formula: 债务工时 / 总开发工时
415
+ healthy: < 10%
416
+ warning: 10-20%
417
+ critical: > 20%
418
+
419
+ repayment_rate:
420
+ description: 债务偿还率
421
+ formula: 已偿还债务 / 总债务
422
+ healthy: > 80%
423
+ warning: 50-80%
424
+ critical: < 50%
425
+
426
+ entropy_trend:
427
+ description: 熵值趋势
428
+ healthy: 持续下降
429
+ warning: 保持稳定
430
+ critical: 持续上升
431
+ ```
432
+
433
+ ---
434
+
435
+ ## 三、原则应用指南
436
+
437
+ ### 3.1 日常开发中的应用
438
+
439
+ ```markdown
440
+ ## 开发前检查
441
+ - [ ] 新代码是否复用了现有共享模块?
442
+ - [ ] 新依赖是否符合六层模型?
443
+ - [ ] 新函数复杂度是否在健康范围?
444
+ - [ ] 是否同步更新了相关文档?
445
+
446
+ ## 开发中检查
447
+ - [ ] 是否有重复代码产生?
448
+ - [ ] 是否有边界穿透?
449
+ - [ ] 复杂度是否在增长?
450
+ - [ ] 文档是否保持同步?
451
+
452
+ ## 开发后检查
453
+ - [ ] 是否产生了新的技术债务?
454
+ - [ ] 是否需要创建新的共享模块?
455
+ - [ ] 是否需要重构现有代码?
456
+ - [ ] 是否需要更新架构文档?
457
+ ```
458
+
459
+ ### 3.2 代码评审中的应用
460
+
461
+ ```yaml
462
+ code_review_checklist:
463
+ shared_first:
464
+ - 检查是否有重复代码
465
+ - 检查是否可以提取共享模块
466
+ - 检查是否使用了现有工具函数
467
+
468
+ boundary_validation:
469
+ - 检查依赖方向是否正确
470
+ - 检查是否有跨层调用
471
+ - 检查是否有循环依赖
472
+
473
+ simplicity:
474
+ - 检查函数复杂度
475
+ - 检查嵌套深度
476
+ - 检查函数长度
477
+
478
+ doc_sync:
479
+ - 检查 API 文档是否更新
480
+ - 检查注释是否准确
481
+ - 检查 README 是否需要更新
482
+
483
+ continuous_improvement:
484
+ - 检查是否引入新债务
485
+ - 检查是否可以顺便修复附近债务
486
+ - 检查是否需要创建改进任务
487
+ ```
488
+
489
+ ### 3.3 定期审计中的应用
490
+
491
+ ```yaml
492
+ audit_schedule:
493
+ daily:
494
+ - 自动化熵值检测
495
+ - 新增债务记录
496
+
497
+ weekly:
498
+ - 熵减报告生成
499
+ - 小额还贷任务分配
500
+ - 团队熵值评审
501
+
502
+ monthly:
503
+ - 架构合规性深度审计
504
+ - 文档一致性全面检查
505
+ - 技术债务趋势分析
506
+
507
+ quarterly:
508
+ - 黄金原则适用性评估
509
+ - 熵减机制效果评估
510
+ - 原则更新和优化
511
+ ```
512
+
513
+ ---
514
+
515
+ ## 四、原则冲突处理
516
+
517
+ ### 4.1 常见冲突场景
518
+
519
+ | 冲突场景 | 优先级判断 | 处理建议 |
520
+ |---------|-----------|---------|
521
+ | 简洁 vs 共享 | 简洁优先 | 过度抽象比重复更糟 |
522
+ | 边界 vs 快速 | 边界优先 | 技术债利息高于时间成本 |
523
+ | 文档 vs 功能 | 功能优先 | 但需创建文档任务 |
524
+ | 改进 vs 新需求 | 平衡 | 分配 20% 时间给改进 |
525
+
526
+ ### 4.2 决策框架
527
+
528
+ ```
529
+ 当原则冲突时,按以下顺序决策:
530
+
531
+ 1. 安全性 - 不妥协
532
+ 2. 边界完整性 - 高优先级
533
+ 3. 功能正确性 - 高优先级
534
+ 4. 代码简洁性 - 中优先级
535
+ 5. 共享复用 - 中优先级
536
+ 6. 文档完善 - 可延后但必须记录
537
+ ```
538
+
539
+ ---
540
+
541
+ ## 五、原则演进机制
542
+
543
+ ### 5.1 原则评估指标
544
+
545
+ ```yaml
546
+ principle_metrics:
547
+ adherence_rate:
548
+ description: 原则遵守率
549
+ measurement: 代码评审中原则违规次数 / 总评审次数
550
+
551
+ effectiveness:
552
+ description: 原则有效性
553
+ measurement: 遵守原则后熵值下降幅度
554
+
555
+ applicability:
556
+ description: 原则适用性
557
+ measurement: 原则被实际应用的次数 / 原则总数
558
+ ```
559
+
560
+ ### 5.2 原则更新流程
561
+
562
+ ```markdown
563
+ 1. 收集原则应用反馈(每月)
564
+ 2. 分析原则有效性数据(每季度)
565
+ 3. 提出原则修订建议(每季度)
566
+ 4. 团队评审和投票(每季度)
567
+ 5. 更新原则文档(通过后)
568
+ 6. 通知所有相关人员(更新后)
569
+ ```
570
+
571
+ ---
572
+
573
+ > 📌 **最后提醒**: 黄金原则不是教条,而是指南。在具体场景中,需要结合实际情况灵活应用,但核心目标始终不变——**对抗熵增,保持系统健康**。