@mison/ling 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 (268) hide show
  1. package/.agents/.shared/ui-ux-pro-max/data/charts.csv +26 -0
  2. package/.agents/.shared/ui-ux-pro-max/data/colors.csv +97 -0
  3. package/.agents/.shared/ui-ux-pro-max/data/icons.csv +101 -0
  4. package/.agents/.shared/ui-ux-pro-max/data/landing.csv +31 -0
  5. package/.agents/.shared/ui-ux-pro-max/data/products.csv +97 -0
  6. package/.agents/.shared/ui-ux-pro-max/data/prompts.csv +24 -0
  7. package/.agents/.shared/ui-ux-pro-max/data/react-performance.csv +45 -0
  8. package/.agents/.shared/ui-ux-pro-max/data/stacks/flutter.csv +53 -0
  9. package/.agents/.shared/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -0
  10. package/.agents/.shared/ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -0
  11. package/.agents/.shared/ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
  12. package/.agents/.shared/ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -0
  13. package/.agents/.shared/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -0
  14. package/.agents/.shared/ui-ux-pro-max/data/stacks/react-native.csv +52 -0
  15. package/.agents/.shared/ui-ux-pro-max/data/stacks/react.csv +54 -0
  16. package/.agents/.shared/ui-ux-pro-max/data/stacks/shadcn.csv +61 -0
  17. package/.agents/.shared/ui-ux-pro-max/data/stacks/svelte.csv +54 -0
  18. package/.agents/.shared/ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
  19. package/.agents/.shared/ui-ux-pro-max/data/stacks/vue.csv +50 -0
  20. package/.agents/.shared/ui-ux-pro-max/data/styles.csv +59 -0
  21. package/.agents/.shared/ui-ux-pro-max/data/typography.csv +58 -0
  22. package/.agents/.shared/ui-ux-pro-max/data/ui-reasoning.csv +101 -0
  23. package/.agents/.shared/ui-ux-pro-max/data/ux-guidelines.csv +100 -0
  24. package/.agents/.shared/ui-ux-pro-max/data/web-interface.csv +31 -0
  25. package/.agents/.shared/ui-ux-pro-max/scripts/core.py +258 -0
  26. package/.agents/.shared/ui-ux-pro-max/scripts/design_system.py +1067 -0
  27. package/.agents/.shared/ui-ux-pro-max/scripts/search.py +106 -0
  28. package/.agents/ARCHITECTURE.md +285 -0
  29. package/.agents/agents/backend-specialist.md +268 -0
  30. package/.agents/agents/code-archaeologist.md +106 -0
  31. package/.agents/agents/database-architect.md +225 -0
  32. package/.agents/agents/debugger.md +225 -0
  33. package/.agents/agents/devops-engineer.md +242 -0
  34. package/.agents/agents/documentation-writer.md +104 -0
  35. package/.agents/agents/explorer-agent.md +73 -0
  36. package/.agents/agents/frontend-specialist.md +618 -0
  37. package/.agents/agents/game-developer.md +162 -0
  38. package/.agents/agents/mobile-developer.md +382 -0
  39. package/.agents/agents/orchestrator.md +436 -0
  40. package/.agents/agents/penetration-tester.md +188 -0
  41. package/.agents/agents/performance-optimizer.md +187 -0
  42. package/.agents/agents/product-manager.md +112 -0
  43. package/.agents/agents/product-owner.md +95 -0
  44. package/.agents/agents/project-planner.md +405 -0
  45. package/.agents/agents/qa-automation-engineer.md +103 -0
  46. package/.agents/agents/security-auditor.md +170 -0
  47. package/.agents/agents/seo-specialist.md +111 -0
  48. package/.agents/agents/test-engineer.md +158 -0
  49. package/.agents/mcp_config.json +22 -0
  50. package/.agents/rules/GEMINI.md +273 -0
  51. package/.agents/scripts/auto_preview.py +148 -0
  52. package/.agents/scripts/checklist.py +217 -0
  53. package/.agents/scripts/session_manager.py +120 -0
  54. package/.agents/scripts/verify_all.py +327 -0
  55. package/.agents/skills/api-patterns/SKILL.md +84 -0
  56. package/.agents/skills/api-patterns/api-style.md +42 -0
  57. package/.agents/skills/api-patterns/auth.md +24 -0
  58. package/.agents/skills/api-patterns/documentation.md +26 -0
  59. package/.agents/skills/api-patterns/graphql.md +41 -0
  60. package/.agents/skills/api-patterns/rate-limiting.md +31 -0
  61. package/.agents/skills/api-patterns/response.md +37 -0
  62. package/.agents/skills/api-patterns/rest.md +40 -0
  63. package/.agents/skills/api-patterns/scripts/api_validator.py +211 -0
  64. package/.agents/skills/api-patterns/security-testing.md +122 -0
  65. package/.agents/skills/api-patterns/trpc.md +41 -0
  66. package/.agents/skills/api-patterns/versioning.md +22 -0
  67. package/.agents/skills/app-builder/SKILL.md +75 -0
  68. package/.agents/skills/app-builder/agent-coordination.md +74 -0
  69. package/.agents/skills/app-builder/feature-building.md +53 -0
  70. package/.agents/skills/app-builder/project-detection.md +34 -0
  71. package/.agents/skills/app-builder/scaffolding.md +118 -0
  72. package/.agents/skills/app-builder/tech-stack.md +40 -0
  73. package/.agents/skills/app-builder/templates/SKILL.md +39 -0
  74. package/.agents/skills/app-builder/templates/astro-static/TEMPLATE.md +76 -0
  75. package/.agents/skills/app-builder/templates/chrome-extension/TEMPLATE.md +92 -0
  76. package/.agents/skills/app-builder/templates/cli-tool/TEMPLATE.md +88 -0
  77. package/.agents/skills/app-builder/templates/electron-desktop/TEMPLATE.md +88 -0
  78. package/.agents/skills/app-builder/templates/express-api/TEMPLATE.md +83 -0
  79. package/.agents/skills/app-builder/templates/flutter-app/TEMPLATE.md +90 -0
  80. package/.agents/skills/app-builder/templates/monorepo-turborepo/TEMPLATE.md +90 -0
  81. package/.agents/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +122 -0
  82. package/.agents/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +122 -0
  83. package/.agents/skills/app-builder/templates/nextjs-static/TEMPLATE.md +169 -0
  84. package/.agents/skills/app-builder/templates/nuxt-app/TEMPLATE.md +134 -0
  85. package/.agents/skills/app-builder/templates/python-fastapi/TEMPLATE.md +83 -0
  86. package/.agents/skills/app-builder/templates/react-native-app/TEMPLATE.md +119 -0
  87. package/.agents/skills/architecture/SKILL.md +57 -0
  88. package/.agents/skills/architecture/context-discovery.md +43 -0
  89. package/.agents/skills/architecture/examples.md +94 -0
  90. package/.agents/skills/architecture/pattern-selection.md +68 -0
  91. package/.agents/skills/architecture/patterns-reference.md +50 -0
  92. package/.agents/skills/architecture/trade-off-analysis.md +77 -0
  93. package/.agents/skills/bash-linux/SKILL.md +201 -0
  94. package/.agents/skills/behavioral-modes/SKILL.md +264 -0
  95. package/.agents/skills/brainstorming/SKILL.md +164 -0
  96. package/.agents/skills/brainstorming/dynamic-questioning.md +359 -0
  97. package/.agents/skills/clean-code/SKILL.md +200 -0
  98. package/.agents/skills/code-review-checklist/SKILL.md +125 -0
  99. package/.agents/skills/database-design/SKILL.md +54 -0
  100. package/.agents/skills/database-design/database-selection.md +43 -0
  101. package/.agents/skills/database-design/indexing.md +39 -0
  102. package/.agents/skills/database-design/migrations.md +50 -0
  103. package/.agents/skills/database-design/optimization.md +36 -0
  104. package/.agents/skills/database-design/orm-selection.md +30 -0
  105. package/.agents/skills/database-design/schema-design.md +56 -0
  106. package/.agents/skills/database-design/scripts/schema_validator.py +172 -0
  107. package/.agents/skills/deployment-procedures/SKILL.md +241 -0
  108. package/.agents/skills/doc.md +177 -0
  109. package/.agents/skills/documentation-templates/SKILL.md +194 -0
  110. package/.agents/skills/frontend-design/SKILL.md +418 -0
  111. package/.agents/skills/frontend-design/animation-guide.md +331 -0
  112. package/.agents/skills/frontend-design/color-system.md +307 -0
  113. package/.agents/skills/frontend-design/decision-trees.md +418 -0
  114. package/.agents/skills/frontend-design/motion-graphics.md +306 -0
  115. package/.agents/skills/frontend-design/scripts/accessibility_checker.py +183 -0
  116. package/.agents/skills/frontend-design/scripts/ux_audit.py +727 -0
  117. package/.agents/skills/frontend-design/typography-system.md +345 -0
  118. package/.agents/skills/frontend-design/ux-psychology.md +1118 -0
  119. package/.agents/skills/frontend-design/visual-effects.md +383 -0
  120. package/.agents/skills/game-development/2d-games/SKILL.md +119 -0
  121. package/.agents/skills/game-development/3d-games/SKILL.md +135 -0
  122. package/.agents/skills/game-development/SKILL.md +167 -0
  123. package/.agents/skills/game-development/game-art/SKILL.md +185 -0
  124. package/.agents/skills/game-development/game-audio/SKILL.md +190 -0
  125. package/.agents/skills/game-development/game-design/SKILL.md +129 -0
  126. package/.agents/skills/game-development/mobile-games/SKILL.md +108 -0
  127. package/.agents/skills/game-development/multiplayer/SKILL.md +132 -0
  128. package/.agents/skills/game-development/pc-games/SKILL.md +144 -0
  129. package/.agents/skills/game-development/vr-ar/SKILL.md +123 -0
  130. package/.agents/skills/game-development/web-games/SKILL.md +150 -0
  131. package/.agents/skills/geo-fundamentals/SKILL.md +155 -0
  132. package/.agents/skills/geo-fundamentals/scripts/geo_checker.py +289 -0
  133. package/.agents/skills/i18n-localization/SKILL.md +154 -0
  134. package/.agents/skills/i18n-localization/scripts/i18n_checker.py +241 -0
  135. package/.agents/skills/intelligent-routing/SKILL.md +335 -0
  136. package/.agents/skills/lint-and-validate/SKILL.md +44 -0
  137. package/.agents/skills/lint-and-validate/scripts/lint_runner.py +184 -0
  138. package/.agents/skills/lint-and-validate/scripts/type_coverage.py +173 -0
  139. package/.agents/skills/mcp-builder/SKILL.md +176 -0
  140. package/.agents/skills/mobile-design/SKILL.md +394 -0
  141. package/.agents/skills/mobile-design/decision-trees.md +516 -0
  142. package/.agents/skills/mobile-design/mobile-backend.md +491 -0
  143. package/.agents/skills/mobile-design/mobile-color-system.md +420 -0
  144. package/.agents/skills/mobile-design/mobile-debugging.md +122 -0
  145. package/.agents/skills/mobile-design/mobile-design-thinking.md +355 -0
  146. package/.agents/skills/mobile-design/mobile-navigation.md +458 -0
  147. package/.agents/skills/mobile-design/mobile-performance.md +767 -0
  148. package/.agents/skills/mobile-design/mobile-testing.md +356 -0
  149. package/.agents/skills/mobile-design/mobile-typography.md +432 -0
  150. package/.agents/skills/mobile-design/platform-android.md +666 -0
  151. package/.agents/skills/mobile-design/platform-ios.md +561 -0
  152. package/.agents/skills/mobile-design/scripts/mobile_audit.py +670 -0
  153. package/.agents/skills/mobile-design/touch-psychology.md +537 -0
  154. package/.agents/skills/nextjs-react-expert/1-async-eliminating-waterfalls.md +311 -0
  155. package/.agents/skills/nextjs-react-expert/2-bundle-bundle-size-optimization.md +241 -0
  156. package/.agents/skills/nextjs-react-expert/3-server-server-side-performance.md +489 -0
  157. package/.agents/skills/nextjs-react-expert/4-client-client-side-data-fetching.md +263 -0
  158. package/.agents/skills/nextjs-react-expert/5-rerender-re-render-optimization.md +581 -0
  159. package/.agents/skills/nextjs-react-expert/6-rendering-rendering-performance.md +431 -0
  160. package/.agents/skills/nextjs-react-expert/7-js-javascript-performance.md +683 -0
  161. package/.agents/skills/nextjs-react-expert/8-advanced-advanced-patterns.md +149 -0
  162. package/.agents/skills/nextjs-react-expert/SKILL.md +286 -0
  163. package/.agents/skills/nextjs-react-expert/scripts/convert_rules.py +222 -0
  164. package/.agents/skills/nextjs-react-expert/scripts/react_performance_checker.py +252 -0
  165. package/.agents/skills/nodejs-best-practices/SKILL.md +333 -0
  166. package/.agents/skills/parallel-agents/SKILL.md +193 -0
  167. package/.agents/skills/performance-profiling/SKILL.md +149 -0
  168. package/.agents/skills/performance-profiling/scripts/lighthouse_audit.py +120 -0
  169. package/.agents/skills/plan-writing/SKILL.md +152 -0
  170. package/.agents/skills/powershell-windows/SKILL.md +166 -0
  171. package/.agents/skills/python-patterns/SKILL.md +441 -0
  172. package/.agents/skills/red-team-tactics/SKILL.md +203 -0
  173. package/.agents/skills/refactoring-patterns/SKILL.md +43 -0
  174. package/.agents/skills/rust-pro/SKILL.md +190 -0
  175. package/.agents/skills/seo-fundamentals/SKILL.md +135 -0
  176. package/.agents/skills/seo-fundamentals/scripts/seo_checker.py +215 -0
  177. package/.agents/skills/server-management/SKILL.md +161 -0
  178. package/.agents/skills/systematic-debugging/SKILL.md +114 -0
  179. package/.agents/skills/tailwind-patterns/SKILL.md +269 -0
  180. package/.agents/skills/tdd-workflow/SKILL.md +149 -0
  181. package/.agents/skills/testing-patterns/SKILL.md +178 -0
  182. package/.agents/skills/testing-patterns/scripts/test_runner.py +219 -0
  183. package/.agents/skills/vulnerability-scanner/SKILL.md +276 -0
  184. package/.agents/skills/vulnerability-scanner/checklists.md +131 -0
  185. package/.agents/skills/vulnerability-scanner/scripts/__pycache__/security_scan.cpython-310.pyc +0 -0
  186. package/.agents/skills/vulnerability-scanner/scripts/security_scan.py +524 -0
  187. package/.agents/skills/web-design-guidelines/SKILL.md +57 -0
  188. package/.agents/skills/webapp-testing/SKILL.md +187 -0
  189. package/.agents/skills/webapp-testing/scripts/playwright_runner.py +173 -0
  190. package/.agents/workflows/brainstorm.md +113 -0
  191. package/.agents/workflows/create.md +59 -0
  192. package/.agents/workflows/debug.md +103 -0
  193. package/.agents/workflows/deploy.md +176 -0
  194. package/.agents/workflows/enhance.md +63 -0
  195. package/.agents/workflows/orchestrate.md +242 -0
  196. package/.agents/workflows/plan.md +89 -0
  197. package/.agents/workflows/preview.md +80 -0
  198. package/.agents/workflows/restore-localize-compat.md +525 -0
  199. package/.agents/workflows/status.md +86 -0
  200. package/.agents/workflows/test.md +144 -0
  201. package/.agents/workflows/ui-ux-pro-max.md +295 -0
  202. package/.spec/profiles/codex/AGENTS.spec.md +7 -0
  203. package/.spec/profiles/codex/ling.spec.rules.md +4 -0
  204. package/.spec/profiles/gemini/GEMINI.spec.md +5 -0
  205. package/.spec/references/README.md +36 -0
  206. package/.spec/references/cse-quickstart.md +96 -0
  207. package/.spec/references/gda-framework.md +394 -0
  208. package/.spec/references/harness-engineering-digest.md +93 -0
  209. package/.spec/skills/cybernetic-systems-engineering/SKILL.md +792 -0
  210. package/.spec/skills/cybernetic-systems-engineering/agents/openai.yaml +5 -0
  211. package/.spec/skills/cybernetic-systems-engineering/assets/quickstart.md +96 -0
  212. package/.spec/skills/cybernetic-systems-engineering/references/README.md +36 -0
  213. package/.spec/skills/cybernetic-systems-engineering/references/gda-framework.md +394 -0
  214. package/.spec/skills/cybernetic-systems-engineering/scripts/issues.csv +20 -0
  215. package/.spec/skills/harness-engineering/SKILL.md +100 -0
  216. package/.spec/skills/harness-engineering/agents/openai.yaml +4 -0
  217. package/.spec/skills/harness-engineering/references/harness-engineering-digest.md +93 -0
  218. package/.spec/templates/driver-prompt.md +7 -0
  219. package/.spec/templates/handoff.md +9 -0
  220. package/.spec/templates/issues.template.csv +2 -0
  221. package/.spec/templates/phase-acceptance.md +9 -0
  222. package/.spec/templates/review-report.md +9 -0
  223. package/AGENT_FLOW.md +609 -0
  224. package/CHANGELOG.md +43 -0
  225. package/LICENSE +21 -0
  226. package/README.md +359 -0
  227. package/bin/adapters/base.js +63 -0
  228. package/bin/adapters/codex.js +421 -0
  229. package/bin/adapters/gemini.js +157 -0
  230. package/bin/ag-kit.js +2266 -0
  231. package/bin/core/builder.js +80 -0
  232. package/bin/core/generator.js +59 -0
  233. package/bin/core/resource-loader.js +64 -0
  234. package/bin/core/transformer.js +208 -0
  235. package/bin/interactive.js +65 -0
  236. package/bin/ling.js +3 -0
  237. package/bin/utils/atomic-writer.js +97 -0
  238. package/bin/utils/git-helper.js +68 -0
  239. package/bin/utils/managed-block.js +65 -0
  240. package/bin/utils/manifest.js +244 -0
  241. package/bin/utils.js +89 -0
  242. package/docs/PLAN.md +54 -0
  243. package/docs/TECH.md +191 -0
  244. package/package.json +56 -0
  245. package/scripts/ci-verify.js +110 -0
  246. package/scripts/clean.js +123 -0
  247. package/scripts/health-check.js +143 -0
  248. package/scripts/health-check.sh +6 -0
  249. package/scripts/postinstall-check.js +112 -0
  250. package/scripts/run-tests.js +49 -0
  251. package/tests/atomic-writer.test.js +47 -0
  252. package/tests/clean-script.test.js +77 -0
  253. package/tests/cli-smoke.test.js +479 -0
  254. package/tests/codex-adapter.test.js +132 -0
  255. package/tests/doctor.test.js +94 -0
  256. package/tests/gemini-adapter.test.js +30 -0
  257. package/tests/generator.test.js +48 -0
  258. package/tests/git-helper.test.js +53 -0
  259. package/tests/global-sync.test.js +133 -0
  260. package/tests/health-check-script.test.js +34 -0
  261. package/tests/managed-block.test.js +41 -0
  262. package/tests/manifest.test.js +97 -0
  263. package/tests/package-tarball.test.js +33 -0
  264. package/tests/phase-c.test.js +107 -0
  265. package/tests/spec-profile.test.js +86 -0
  266. package/tests/standards-compliance.test.js +303 -0
  267. package/tests/transformer.test.js +74 -0
  268. package/tests/versioning.test.js +51 -0
@@ -0,0 +1,792 @@
1
+ ---
2
+ name: cybernetic-systems-engineering
3
+ description: |
4
+ 用“系统工程 + 工程控制论 + 总体设计(GDA)”的方法做软件工程闭环控制。
5
+ 适用:真实代码库中的 bugfix、feature、refactor、性能、迁移、事故复盘、测试设计、架构审计、门禁验证。
6
+ 尤其适合:问题复杂、跨模块、需要最小可验证变更、需要离线/在线双层验证、需要防止“测试全绿但真实环境失败”的任务。
7
+ 不适用:纯知识问答、翻译、创作、一次性聊天建议、无需验证的单句结论。
8
+ ---
9
+
10
+ # Cybernetic Systems Engineering(CSE)
11
+
12
+ 把软件开发当作一个**闭环控制系统**来做:
13
+
14
+ - **被控对象(Plant)**:代码库 + 运行时环境 + 依赖 + 数据 + 测试系统
15
+ - **控制器(Controller)**:你(Agent)+ 你的计划、策略、节奏控制
16
+ - **传感器(Sensors)**:测试、构建日志、运行日志、指标、复现脚本、审计文档
17
+ - **执行器(Actuators)**:代码修改、配置变更、依赖升级、回滚、文档更新、测试补强
18
+ - **参考输入(Reference)**:需求、issue、验收标准、SLO/SLA、业务边界
19
+ - **输出(Output)**:实际行为(通过/失败测试、运行结果、性能数据、门禁结果)
20
+ - **误差(Error)**:参考输入与输出之间的差距
21
+ - **扰动(Disturbance)**:环境差异、并发、flake、脏状态、真实 schema 漂移
22
+ - **时滞(Delay)**:慢测试、CI 排队、真实环境依赖、发布窗口
23
+
24
+ 本 skill 的目标不是“让你会用控制论术语”,而是让你在复杂工程任务中:
25
+
26
+ 1. 先建立正确的观测与误差定义
27
+ 2. 再用最小控制输入减少误差
28
+ 3. 用分层验证防止振荡与假收敛
29
+ 4. 用总体设计视角控制复杂性
30
+
31
+ ## 项目级控制拓扑
32
+
33
+ CSE 不只处理“当前这一条任务怎么修”,还要先回答“这个项目由谁控制、在哪一层控制、跨模块如何协调”。
34
+
35
+ 从控制层级看,CSE 默认同时存在两套闭环:
36
+
37
+ - **任务级闭环**
38
+ - 面向单个 issue、单次 patch、单轮验证
39
+ - 关注最小控制输入、最小 failing case、分层验证
40
+ - **项目级控制拓扑**
41
+ - 面向多模块、多团队、多阶段演化
42
+ - 关注总体设计部、控制结构、跨模块协调、边界冻结与升级路径
43
+
44
+ 如果只建立任务级闭环,而没有项目级控制拓扑,常见结果是:
45
+
46
+ - 单个 patch 看起来正确,但把复杂性偷偷转移到别的模块
47
+ - 局部验证通过,但共享接口、共享状态或共享基础设施被无意破坏
48
+ - 每个人都在改“自己眼前那一层”,但没有人对整体误差负责
49
+
50
+ 因此在以下场景,必须先补项目级控制拓扑,再进入具体修复:
51
+
52
+ - 改动跨 2 个及以上模块、服务或语言边界
53
+ - 需要同时改代码、配置、schema、运行流程中的两类以上对象
54
+ - 任务会影响共享接口、共享状态、共享基础设施或统一门禁
55
+
56
+ 项目级控制拓扑至少要回答四个问题:
57
+
58
+ 1. **总体设计部在哪里**
59
+ - 谁负责维护项目级参考输入、关键边界和最终裁决
60
+ 2. **控制结构是什么**
61
+ - 本次问题主要落在哪些层,哪些层只能观测,哪些层允许施加控制输入
62
+ 3. **跨模块协调怎么发生**
63
+ - 哪些模块存在强耦合,改动会沿什么路径外溢,谁需要被显式通知或升级
64
+ 4. **哪些边界先冻结**
65
+ - 哪些接口、schema、门禁口径在本轮不能被顺手改写
66
+
67
+ ### 控制面 / 数据面 / 状态面
68
+
69
+ 为了避免“看起来只是改一行代码,实际上改穿了整个系统”,复杂任务开始前必须先识别本次改动主要落在哪一面:
70
+
71
+ - **控制面**
72
+ - 负责决定系统如何调节自己
73
+ - 典型对象:限流、重试、熔断、路由、灰度、回滚、门禁、调度策略
74
+ - **数据面**
75
+ - 负责承载真实业务流量和核心处理路径
76
+ - 典型对象:请求处理、任务执行、核心计算、主链调用、用户可见结果
77
+ - **状态面**
78
+ - 负责保存共享事实、恢复锚点与跨节点一致性
79
+ - 典型对象:数据库、schema、缓存、队列、事件日志、检查点、幂等键
80
+
81
+ 默认要求:
82
+
83
+ 1. 先标出本次改动的**主落点**在哪一面
84
+ 2. 再标出会被连带影响的次级面
85
+ 3. 如果一次改动同时触碰两面以上,必须显式写出复杂性是如何转移的
86
+
87
+ 一个典型例子:
88
+
89
+ - 把重试、限流从业务代码下沉到 mesh 或统一网关
90
+ - 不是“复杂性消失了”
91
+ - 而是复杂性从数据面转移到了控制面
92
+ - 把会话、任务进度或幂等信息从应用内存迁到 Redis / 数据库
93
+ - 不是“状态更简单了”
94
+ - 而是状态复杂性从节点内部转移到了状态面
95
+
96
+ 如果主落点都判断不清,默认先不要改实现,而是先补控制结构说明。
97
+
98
+ ### 复杂性转移账本
99
+
100
+ 复杂性不会凭空消失,只会被下沉、上浮或转移到别处。
101
+
102
+ 因此每次声称“系统更简单了”时,都应至少记一条复杂性转移账本:
103
+
104
+ | 字段 | 说明 |
105
+ | --- | --- |
106
+ | 复杂性原位置 | 复杂性原来压在哪一层、哪个模块、哪条链路 |
107
+ | 新位置 | 复杂性被转移到了哪里 |
108
+ | 收益 | 本次转移换来了什么 |
109
+ | 新成本 | 新增了什么依赖、运维成本或观测成本 |
110
+ | 失效模式 | 转移后最可能新增什么故障模式 |
111
+
112
+ 典型例子:
113
+
114
+ - 把重试、限流、路由从应用代码下沉到 mesh
115
+ - 复杂性原位置:数据面应用逻辑
116
+ - 新位置:控制面基础设施
117
+ - 收益:业务代码更薄、统一治理更强
118
+ - 新成本:调试链变长、配置漂移风险上升
119
+ - 失效模式:控制面误配导致全局放大
120
+ - 把会话、幂等键或任务恢复点外包到 Redis / 数据库
121
+ - 复杂性原位置:节点内内存与本地状态
122
+ - 新位置:状态面共享存储
123
+ - 收益:重启恢复更稳定、横向扩展更容易
124
+ - 新成本:一致性、超时、容量与运维复杂度上升
125
+ - 失效模式:状态面抖动放大为全局故障
126
+ - 把同步调用改成异步补偿
127
+ - 复杂性原位置:同步链路上的时延与阻塞
128
+ - 新位置:队列、重试、补偿和对账流程
129
+ - 收益:主链解耦、峰值承压更强
130
+ - 新成本:最终一致性与对账成本上升
131
+ - 失效模式:补偿堆积、重复消费、长尾未收敛
132
+
133
+ 项目级控制拓扑的默认治理协议如下:
134
+
135
+ ### 最小 owner matrix
136
+
137
+ | 角色 | 默认职责 | 有权决定什么 | 无权单独决定什么 |
138
+ | --- | --- | --- | --- |
139
+ | 总体设计部 | 维护项目级参考输入、关键边界、升级路径与最终裁决 | 跨模块优先级、冻结边界、变更窗口、最终 gate 口径 | 直接跳过模块 owner 的局部约束与证据 |
140
+ | 模块 owner | 维护本模块不变量、主链入口与回归边界 | 模块内部实现、局部回归、局部重构 | 擅自改共享接口、共享状态、共享门禁 |
141
+ | 共享边界 owner | 维护共享 API、schema、队列、缓存、统一门禁等共享事实源 | 共享契约演化节奏、兼容窗口、迁移前置条件 | 在未通知受影响模块时直接改共享契约 |
142
+
143
+ ### 默认升级路径
144
+
145
+ 按风险从低到高,默认这样升级:
146
+
147
+ 1. **模块内局部改动**
148
+ - 模块 owner 可在本模块边界内完成分析、修改与验证
149
+ 2. **跨模块但不改共享契约**
150
+ - 必须显式通知受影响模块 owner,并记录外溢路径
151
+ 3. **触碰共享接口、共享状态、统一门禁**
152
+ - 必须升级到总体设计部裁决,再进入实现
153
+ 4. **触碰冻结边界或发布窗口**
154
+ - 默认停止当前 patch,先拿到明确批准
155
+
156
+ ### 接口冻结条件
157
+
158
+ 以下任一对象在本轮默认视为冻结边界,不能顺手改写:
159
+
160
+ - 共享 API 输入输出结构
161
+ - 数据库 schema 与持久化字段语义
162
+ - 队列、缓存、事件格式等共享状态契约
163
+ - 统一门禁口径、核心指标口径、发布与回滚流程
164
+
165
+ 要解冻这些边界,至少要同时满足:
166
+
167
+ 1. 有明确变更理由,而不是“顺便改一下更优雅”
168
+ 2. 有受影响模块清单与兼容路径
169
+ 3. 有总体设计部或对应共享边界 owner 的显式裁决
170
+
171
+ ### 跨模块裁决规则
172
+
173
+ 凡是跨模块变更,最终裁决责任默认不属于“谁先改代码”,而属于总体设计部。
174
+
175
+ 它至少要回答:
176
+
177
+ - 为什么这次改动值得跨模块扩散
178
+ - 哪些模块只需要被通知,哪些模块需要同步修改
179
+ - 哪些边界继续冻结,哪些边界被批准打开
180
+ - 如果跨模块协调失败,当前 patch 应该收缩到哪里
181
+
182
+ 如果这些问题答不出来,默认结论不是“继续改”,而是:
183
+
184
+ - 先补控制拓扑
185
+ - 先画清边界
186
+ - 先确认谁对整体误差负责
187
+
188
+ 后续章节中的 Control Contract、GDA 四步法、传感器工程与验证分层,都是建立在这层项目级控制拓扑之上执行的。
189
+
190
+ ## 0. 何时触发
191
+
192
+ 以下任一场景,优先使用本 skill:
193
+
194
+ - 需要修改代码并验证结果
195
+ - 任务跨多个模块/服务/语言边界
196
+ - 需要从 bugfix 推进到测试补强、门禁、handoff
197
+ - 用户要求做“严格 review”“系统性复盘”“架构与测试一起收口”
198
+ - 出现“离线通过,真实环境失败”“测试通过,业务不闭环”“修一个坏两个”的迹象
199
+
200
+ 如果任务时间跨度长、步骤多、存在中断恢复需求,应**同时配合 `harness`** 使用。
201
+
202
+ ## 1. 五维心智模型(执行时要内化)
203
+
204
+ 执行任务时必须同时考虑以下五个维度:
205
+
206
+ 1. **第一性原理**
207
+ - 找系统不变量、硬约束、物理边界
208
+ - 不先问“用什么框架”,先问“系统真正不能妥协的是什么”
209
+
210
+ 2. **公理化思维**
211
+ - 契约先于实现
212
+ - 明确哪些接口、状态转换、schema、事件语义是不可破坏的公理
213
+
214
+ 3. **多模型思维**
215
+ - 至少用 3 个视角看问题:
216
+ - 数据流
217
+ - 状态机
218
+ - 时序 / 并发 / 排队
219
+
220
+ 4. **类比迁移**
221
+ - 遇到拥堵、震荡、雪崩、阻塞时,主动寻找物理同构:
222
+ - 队列 / 水库 / 缓冲
223
+ - 熔断 / 断路器
224
+ - PID / 弹性控制
225
+
226
+ 5. **反馈与验证**
227
+ - 没有可观测闭环的设计,不算完成
228
+ - 特别注意:
229
+ - 时滞
230
+ - 非线性
231
+ - 假阳性测试
232
+ - 真实环境与离线环境的分层差异
233
+
234
+ 详细方法论与例子见:
235
+
236
+ - `references/gda-framework.md`
237
+
238
+ ## 2. 启动动作:先写 Control Contract
239
+
240
+ 在真正改代码前,先产出一个极短的控制合同 v2(可在回复、计划或审计文档里):
241
+
242
+ - **Primary Setpoint**
243
+ - 本轮最主要的目标变量,必须是一句能判断成败的话
244
+ - **Acceptance**
245
+ - 哪些测试、命令、日志或指标能证明主目标已达成
246
+ - **Guardrail Metrics**
247
+ - 哪些护栏指标不能被顺手打坏,例如错误率、尾延迟、成本、吞吐
248
+ - **Sampling Plan**
249
+ - 用什么频率、在哪些观察点采样,避免只看一次结果就下结论
250
+ - **Known Delays / Delay Budget**
251
+ - 已知时滞在哪里,以及本轮允许消耗多少时滞预算,例如 CI 排队、异步队列、缓存刷新、灰度传播
252
+ - **Recovery Target**
253
+ - 如果本轮控制失败,允许多快恢复到安全状态,例如 MTTR 预算或回滚时限
254
+ - **Rollback Trigger**
255
+ - 一旦出现什么信号,默认停止推进并回滚,而不是继续硬顶
256
+ - **Constraints**
257
+ - 不能破坏什么硬约束、不变量、合规边界或真实环境前提
258
+ - **Boundary**
259
+ - 本次允许触碰的模块、文件、配置、schema 与运行流程范围
260
+ - **Coupling Notes**
261
+ - 这次改动会和哪些模块、共享接口、共享状态发生耦合
262
+ - **Approximation Validity**
263
+ - 本轮采用的近似、stub 或离线验证在哪些条件下才成立
264
+ - **Actuator Budget**
265
+ - 本轮允许施加多少控制输入,例如允许改代码、配置、观测点中的哪几类
266
+ - **Risks**
267
+ - 1~3 个主要风险与缓解方式
268
+
269
+ 如果用户没给验收标准,先从:
270
+
271
+ - issue
272
+ - 失败日志
273
+ - 现有测试
274
+ - 文档契约
275
+
276
+ 中提炼;仍缺失时,补最小合理验收。
277
+
278
+ ## 3. GDA 四步执行骨架
279
+
280
+ ### Step 1:Axiom & Boundary
281
+
282
+ 开始前必须回答:
283
+
284
+ - 系统真正目标是什么
285
+ - 不能违反的硬约束是什么
286
+ - 现有实现的关键不变量是什么
287
+ - 物理/环境边界在哪里(网络、磁盘、数据库 schema、构建环境)
288
+
289
+ ### Step 2:Multi-model Construction
290
+
291
+ 至少同时建立以下三个模型中的两个,复杂任务必须三个都建:
292
+
293
+ - **静态契约域**
294
+ - API / schema / 事件格式 / 配置项
295
+ - **动态状态域**
296
+ - 状态机 / 生命周期 / 回调矩阵 / 状态收口
297
+ - **容量与排队域**
298
+ - 队列、缓冲、吞吐、时滞、阻塞点
299
+
300
+ 复杂任务还应显式补一个**黑盒输入-输出影响矩阵**:
301
+
302
+ - 把系统先当成黑盒,不急着解释内部实现
303
+ - 先列:
304
+ - 当前准备调哪个 **control input / knob**
305
+ - 希望影响哪个 **output**
306
+ - 影响方向是增、减、延后还是收敛更快
307
+ - 会不会外溢到相邻模块、共享状态或共享基础设施
308
+
309
+ 如果系统是多变量耦合的,再补一个**解耦矩阵**:
310
+
311
+ - 哪些输入主要影响哪个输出
312
+ - 哪些输入会顺带打坏别的输出
313
+ - 哪些输入必须成组调整,不能单独动
314
+
315
+ 一个典型例子:
316
+
317
+ - 调高重试次数
318
+ - 目标 output:短期成功率可能上升
319
+ - 连带 output:尾延迟、下游 QPS、队列积压、成本可能一起上升
320
+ - 调低限流阈值
321
+ - 目标 output:下游压力下降
322
+ - 连带 output:入口拒绝率、任务完成时间可能恶化
323
+
324
+ 默认规则:
325
+
326
+ 1. 复杂任务在改实现前,先列控制输入、目标输出、影响方向与外溢风险
327
+ 2. 如果一个 knob 同时强影响多个 output,默认把它视为高耦合输入
328
+ 3. 高耦合输入优先做小步试探,而不是一次拉满
329
+
330
+ ### Step 3:Cybernetic Control
331
+
332
+ 一次只施加一个最小控制输入:
333
+
334
+ - 一个最强假设
335
+ - 一个最小修改
336
+ - 一组最便宜的验证
337
+
338
+ 如果出现振荡:
339
+
340
+ - 降低步长
341
+ - 回到最小 failing case
342
+ - 加观测点,而不是继续盲改
343
+
344
+ ### Step 4:Closed-loop Verification
345
+
346
+ 验证必须分层:
347
+
348
+ - **L0 快回路**
349
+ - lint / typecheck / 单测子集 / 静态审计
350
+ - **L1 中回路**
351
+ - 相关模块测试 / 小集成
352
+ - **L2 慢回路**
353
+ - 全量回归 / 真实环境 / 性能 / gate
354
+
355
+ 原则:
356
+
357
+ - L0/L1 不稳定,不进入 L2
358
+ - 离线通过不等于真实环境通过
359
+ - 必须显式标注哪些风险只在 L2 才能验证
360
+
361
+ ## 4. 传感器工程(Harness Engineering)
362
+
363
+ ### 4.1 基线建立
364
+
365
+ 默认顺序:
366
+
367
+ 1. `git status` / `git diff`
368
+ 2. 读取 issue、相关代码、最近改动、已有 review
369
+ 3. 跑最便宜的验证路径
370
+ 4. 记录失败命令、失败用例、关键信号
371
+
372
+ ### 4.2 传感器去噪
373
+
374
+ 如果信号不稳定:
375
+
376
+ - 重跑 3~5 次
377
+ - 固定随机种子 / 时区 / 并发
378
+ - 隔离外部依赖
379
+ - 把偶现变成最小稳定复现
380
+
381
+ ### 4.3 特别规则:schema-sensitive 路径
382
+
383
+ 凡是涉及以下任一因素:
384
+
385
+ - 真实数据库列类型
386
+ - SQL cast
387
+ - 驱动参数序列化
388
+ - `PG_CH` / 真实 broker / 真实文件系统 / 真实扩展加载
389
+
390
+ 都必须明确区分:
391
+
392
+ 1. **语义测试**
393
+ - fake fetcher / stub / resolver 白盒
394
+ 2. **schema 契约测试**
395
+ - 锁定关键 SQL / schema / 分支行为
396
+ 3. **真实环境 gate**
397
+ - Windows / VPN / 真实数据库 / 真实 broker
398
+
399
+ 禁止把:
400
+
401
+ - “resolver 语义通过”
402
+ - “cargo test 全绿”
403
+
404
+ 直接写成:
405
+
406
+ - “真实环境通过”
407
+
408
+ ### 4.4 动态控制病:采样与观测新鲜度
409
+
410
+ 性能和稳定性问题默认先审查观测质量,而不是先改实现。
411
+
412
+ 必须显式检查:
413
+
414
+ - **采样周期**
415
+ - 采样过慢会把瞬时尖峰、短时雪崩、短时队列积压平均掉
416
+ - 采样过快但没有聚合窗口,会把瞬时噪声误判成系统趋势
417
+ - **观测新鲜度**
418
+ - 延迟到达的 metrics、异步刷新的 trace、缓存后的 dashboard,可能让你基于旧世界做新决策
419
+ - 任何观测结果都要先确认时间戳、刷新周期和传播时滞
420
+ - **采样别名**
421
+ - 用粗粒度采样看周期性抖动时,容易把真实震荡看成稳定
422
+ - 典型后果是把“周期性过载”误判成“偶发 flake”
423
+ - **陈旧指标**
424
+ - 指标本身还在更新,但语义已经落后于当前发布版本、schema 或流量路径
425
+ - 典型后果是优化了旧瓶颈,却把新主链打坏
426
+ - **观测盲区**
427
+ - 只看入口成功率,不看下游队列、缓存击穿、回放链路,会把局部成功误判成整体稳定
428
+
429
+ 默认规则:
430
+
431
+ 1. 遇到性能或稳定性问题,先写清本轮采样周期、观测新鲜度和主要盲区
432
+ 2. 任何“趋势判断”都必须说明观测窗口,而不是只引用单次结果
433
+ 3. 如果怀疑存在采样别名或陈旧指标,先补观测点或换采样方式,再决定是否改代码
434
+
435
+ ### 4.5 动态控制病:去抖、滞回、退避与冷却
436
+
437
+ 很多系统不是“控制能力不足”,而是“控制动作太频繁”。
438
+
439
+ 默认要检查四种抑振手段:
440
+
441
+ - **告警去抖**
442
+ - 当同类告警在短时间内反复触发时启用
443
+ - 目的不是隐藏故障,而是避免把瞬时尖峰误当成稳定故障模式
444
+ - **滞回区间**
445
+ - 当扩缩容、限流、熔断或降级阈值存在边缘来回抖动时启用
446
+ - 进入阈值和退出阈值不应完全相同,否则系统会反复横跳
447
+ - **退避策略**
448
+ - 当重试、探测、轮询、恢复动作连续失败时启用
449
+ - 失败后必须扩大间隔,而不是用固定频率继续打系统
450
+ - **控制冷却时间**
451
+ - 当一次控制动作刚施加、系统尚未完成传播和收敛时启用
452
+ - 在冷却窗口内默认禁止同类控制动作再次触发
453
+
454
+ 执行规则:
455
+
456
+ 1. 只要控制动作会修改阈值、流量、路由、重试或容量,就必须声明是否存在滞回和冷却窗口
457
+ 2. 只要恢复动作依赖轮询、重试或探测,就必须声明退避策略
458
+ 3. 默认禁止连续重复同类控制动作不带冷却窗口
459
+ 4. 如果没有去抖或滞回设计,任何“阈值附近反复跳变”都应先视为控制病,而不是先怪业务逻辑
460
+
461
+ ### 4.6 动态控制病:anti-chatter、anti-windup 与控制器冲突
462
+
463
+ 当系统已经进入震荡区,继续叠加控制器通常只会把问题放大。
464
+
465
+ - **anti-chatter**
466
+ - 指防止控制动作在相邻状态之间高速来回切换
467
+ - 典型场景:熔断开关在半开与关闭之间反复横跳,或扩缩容在相邻副本数之间频繁切换
468
+ - **anti-windup**
469
+ - 指防止控制器在执行器已经饱和时,仍然继续累积“应该再加一把力”的内部误差
470
+ - 典型场景:下游已经限流或队列已经打满,但上游重试、补偿或扩容信号仍不断叠加,最终形成重试风暴或扩缩容超调
471
+ - **控制器冲突**
472
+ - 指两个及以上控制器同时修改同一 knob,却没有统一仲裁
473
+ - 典型场景:应用内重试、sidecar 重试、网关重试同时打开;HPA、队列消费调度器、人工扩容同时改副本数
474
+
475
+ 默认规则:
476
+
477
+ 1. 同一 knob 只能有一个主控制器,其他控制器要么只观测,要么通过明确仲裁接入
478
+ 2. 只要执行器已经饱和,就必须显式考虑 anti-windup,而不是继续累积恢复动作
479
+ 3. 只要系统出现高频开关、周期性回摆或阈值附近来回跳变,就必须先排查 anti-chatter
480
+ 4. 遇到重试风暴、补偿堆积、扩缩容超调,默认先查控制器冲突,再查业务逻辑
481
+
482
+ ### 4.7 无观测,不优化
483
+
484
+ 任何性能或稳定性优化,默认都要先拿到观测基线。
485
+
486
+ 最小入场券:
487
+
488
+ - **trace**
489
+ - 先看跨服务链路到底卡在哪一跳
490
+ - **flame graph**
491
+ - 先看 CPU / wall time 真正烧在什么调用栈
492
+ - **profiling baseline**
493
+ - 先记录修改前的基线,不要只拿修改后的单次结果自嗨
494
+ - **golden signals**
495
+ - 至少关注延迟、流量、错误、饱和度这类核心信号
496
+ - **对照实验**
497
+ - 能做 A/B、shadow、canary 或前后对照时,优先做对照,而不是纯猜测
498
+
499
+ 默认规则:
500
+
501
+ 1. 无观测,不优化
502
+ 2. 观测不足时,默认先补观测点、profiling 或链路追踪,再决定是否改代码
503
+ 3. 任何“感觉这里慢”“猜这里有瓶颈”的说法,都不能直接升级成优化动作
504
+ 4. 优化结果至少要和修改前的 profiling baseline 做一次对照
505
+
506
+ ## 5. 决策准则
507
+
508
+ 当多个方案都能修时,优先:
509
+
510
+ 1. **最小风险**
511
+ 2. **最强可验证**
512
+ 3. **最可逆**
513
+ 4. **最符合模块业务区位**
514
+
515
+ 特别注意:
516
+
517
+ - 不为了通过测试而偏离原始语义
518
+ - 不为了抽象而扩大不该公开的 API 面
519
+ - 不把测试便利性凌驾于模块职责之上
520
+
521
+ ### 5.1 机制优于策略
522
+
523
+ 默认优先设计“生成策略的机制”,而不是把人的经验直接硬编码成静态策略。
524
+
525
+ 默认禁止把以下对象直接写死成“经验常数”后就当作稳定设计:
526
+
527
+ - timeout
528
+ - retry 次数
529
+ - 熔断阈值
530
+ - 连接池大小
531
+ - 扩缩容阈值
532
+
533
+ 优先选择的机制包括但不限于:
534
+
535
+ - **自适应控制**
536
+ - 根据延迟、错误率、队列长度、资源利用率动态调整控制输入
537
+ - **反馈回路**
538
+ - 让上一次控制结果影响下一次控制强度,而不是重复拍脑袋
539
+ - **搜索或在线学习**
540
+ - 当最优点未知且环境持续漂移时,用搜索、探索或在线更新替代静态猜测
541
+
542
+ 裁决规则:
543
+
544
+ 1. 能用机制吸收环境变化时,默认不要把人的经验写成永久阈值
545
+ 2. 静态策略只能作为启动值、护栏值或临时保守值,不能伪装成长期真理
546
+ 3. 如果一个策略需要频繁人工调参,优先怀疑“缺机制”,而不是继续加参数
547
+
548
+ 例外条件:
549
+
550
+ - 环境几乎不变、观测明确且失效成本极高时,可以短期采用静态策略
551
+ - 但必须同时写清监控条件、失效信号与后续替换计划
552
+
553
+ ### 5.2 MTTR-first 与 crash-only
554
+
555
+ 对现代复杂系统,默认优先级不是“尽量永不出错”,而是“出错后多快回到安全状态”。
556
+
557
+ 默认裁决:
558
+
559
+ - **MTTR 优先于 MTBF**
560
+ - 当两种方案不能同时兼得时,优先选择更快恢复而不是更长时间不出错
561
+ - **crash-only**
562
+ - 遇到不可恢复、未定义或无法证明安全的状态,优先显式失败、退出或重启,而不是维持僵尸状态
563
+ - **自动回滚**
564
+ - 只要风险可外溢到共享接口、共享状态或核心链路,就要优先设计自动回滚信号
565
+ - **故障注入**
566
+ - 不能只验证“正常时能跑”,还要验证“坏了能多快恢复”
567
+
568
+ 执行规则:
569
+
570
+ 1. Control Contract 里的 `Recovery Target` 不是装饰项,必须给出恢复时间预算或安全回退时限
571
+ 2. 只要系统进入不可恢复状态,默认先显式失败,而不是静默维持
572
+ 3. 只要回滚条件可被机器识别,就优先设计自动回滚,而不是依赖人工盯盘
573
+ 4. 任何声称“高可用”的路径,都应至少经过一次故障注入或等价恢复演练
574
+
575
+ 特别注意:
576
+
577
+ - crash-only 不是吞错后假装恢复,而是让失败可见、可重启、可回退
578
+ - 快速恢复不等于快速掩盖,必须保留故障证据、恢复路径和恢复时间
579
+
580
+ ### 5.3 抽象审查协议
581
+
582
+ 抽象的默认目标不是“减少重复”,而是“减少错误耦合”。
583
+
584
+ 默认原则:
585
+
586
+ - **允许 WET**
587
+ - 如果两段逻辑当前相似,但未来不保证一起变化,允许先物理重复
588
+ - **优先物理解耦**
589
+ - 宁可保留两份小实现,也不要为了复用把两个生命周期不同的模块绑死
590
+ - **按共变关系做抽象**
591
+ - 决定是否抽象的依据,不是代码长得像,而是未来是否真的会同时变化
592
+
593
+ 判定规则:
594
+
595
+ 1. 只要两个调用点的发布节奏、故障域或 owner 不同,默认先不要抽象
596
+ 2. 只要抽象会扩大共享 API 面、共享状态面或统一门禁面,先怀疑这是错误抽象
597
+ 3. 代码相似但业务语义、失败模式或演化方向不同,不应因为“长得一样”就抽象
598
+ 4. 在决定抽象前,至少回答一次:它们未来真的会同时变化吗
599
+
600
+ 反过来说:
601
+
602
+ - DRY 不是被废除,而是要服从模块职责、故障隔离和长期演化
603
+ - 如果抽象让系统更难切分、更难回滚、更难定位责任,就不是好抽象
604
+
605
+ ### 5.4 演进式架构与可逆决策
606
+
607
+ 复杂系统默认不是被一次性设计出来的,而是从简单可用系统逐步长出来的。
608
+
609
+ 默认原则:
610
+
611
+ - **先长出简单可用系统,再逐步演化**
612
+ - 没有真实反馈前,不要预支未来 5 年的复杂性
613
+ - **two-way door 决策优先快试**
614
+ - 可逆决策优先小步试、快反馈、保留回退路径
615
+ - **one-way door 决策优先控边界**
616
+ - 不可逆决策必须先冻结契约、清点依赖、确认迁移窗口
617
+
618
+ 执行规则:
619
+
620
+ 1. 每个重要架构决策都应先判断它是 **two-way door** 还是 **one-way door**
621
+ 2. two-way door 决策优先用小范围实验、最小实现、短反馈回路验证
622
+ 3. one-way door 决策必须显式写出桥接期、回退条件和受影响模块
623
+ 4. 契约默认先稳后扩,不要在桥接期一边迁移一边改口径
624
+
625
+ 桥接期协议:
626
+
627
+ - 迁移默认存在一个**桥接期**
628
+ - 桥接期内优先使用:
629
+ - **shadow**
630
+ - 新链路跟跑、不接管主裁决
631
+ - **canary**
632
+ - 小流量、小范围、可快速回退
633
+ - 桥接期结束前,默认保留旧事实源或旧主链作为对照基线
634
+
635
+ 如果一个方案:
636
+
637
+ - 无法定义桥接期
638
+ - 无法解释怎么回退
639
+ - 无法说明契约何时冻结
640
+
641
+ 那它默认不是成熟的演进式架构方案
642
+
643
+ ## 6. 高风险反模式(必须主动检查)
644
+
645
+ 1. **假收敛**
646
+ - 单测通过,但真实环境条件未覆盖
647
+
648
+ 2. **双真相**
649
+ - 文档一套、主链一套、备用路径一套
650
+
651
+ 3. **影子实现**
652
+ - callback_dispatcher 更完整,但主链不用
653
+ - helper 存在,但主链不可达
654
+
655
+ 4. **弱断言**
656
+ - 只有 `is_ok()`,没有行为语义断言
657
+
658
+ 5. **测试驱动代码偏离职责**
659
+ - 为了测试方便扩大 `pub` 面
660
+ - 暴露本不该公开的内部实现
661
+
662
+ 6. **把离线测试当 gate**
663
+ - 真实 schema / 真实扩展 / 真实网络问题无法由 stub 替代
664
+
665
+ ## 7. 交付格式
666
+
667
+ 最终交付优先按下面结构组织:
668
+
669
+ 1. **Summary**
670
+ 2. **State Estimate / Root Cause**
671
+ 3. **Changes**
672
+ 4. **Verification**
673
+ 5. **Recovery Evidence**
674
+ 6. **Observability Evidence**
675
+ 7. **Residual Risks / Gate Boundary**
676
+
677
+ 其中:
678
+
679
+ - **Recovery Evidence**
680
+ - 说明怎么恢复、多久恢复、触发了什么回滚或重启语义、恢复预算是否满足
681
+ - **Observability Evidence**
682
+ - 说明依据什么判断问题存在、优化有效或风险仍在
683
+ - 至少给出本轮关键日志、指标、trace、profiling 或 gate 证据中的一类
684
+
685
+ 如果是长任务,还应同步:
686
+
687
+ - 审计文档
688
+ - 回归矩阵
689
+ - handoff 文档
690
+
691
+ ## 8. 实战剧本
692
+
693
+ ### Bugfix / 回归
694
+
695
+ 1. 最小复现
696
+ 2. 最小 failing test
697
+ 3. 根因假设
698
+ 4. 最小修复
699
+ 5. 相关回归
700
+ 6. 全量相关回归
701
+
702
+ ### 测试补强
703
+
704
+ 1. 审计当前覆盖层次
705
+ 2. 找“语义层 / schema 层 / 真实环境层”缺口
706
+ 3. 先补最能拦截真实风险的离线测试
707
+ 4. 再补回归矩阵
708
+ 5. 最后明确 gate 边界
709
+
710
+ ### 架构收口 / 清理
711
+
712
+ 1. 先证明主链实际入口
713
+ 2. 再证明影子实现是否仍被使用
714
+ 3. 删除或收敛重复事实源
715
+ 4. 用测试或调用链审计防止回归
716
+
717
+ ### 性能退化
718
+
719
+ 1. 先拿 profiling baseline 与 golden signals
720
+ 2. 再定位是 CPU、IO、锁竞争、网络还是排队
721
+ 3. 画输入-输出影响矩阵,避免错改高耦合 knob
722
+ 4. 小步优化并做前后对照
723
+ 5. 记录收益、代价与残余风险
724
+
725
+ ### 异步队列背压
726
+
727
+ 1. 先确认队列长度、消费速率、重试率、死信情况
728
+ 2. 再区分是数据面过载、状态面卡死还是控制面误配
729
+ 3. 检查 anti-windup、退避与扩容是否互相打架
730
+ 4. 先止血,再恢复,再补治理
731
+ 5. 明确消息堆积的恢复边界
732
+
733
+ ### 迁移 cutover
734
+
735
+ 1. 先定义桥接期与冻结边界
736
+ 2. 再安排 shadow、canary 或双写对照
737
+ 3. 明确切流条件、回退条件、终止旧链路条件
738
+ 4. 分层验证 cutover 前、中、后状态
739
+ 5. 最后关闭桥接并归档证据
740
+
741
+ ### 部分故障 / 依赖 brownout
742
+
743
+ 1. 先确认故障是全挂还是 brownout
744
+ 2. 再查重试、熔断、降级是否放大故障
745
+ 3. 识别依赖是否已进入不可恢复状态
746
+ 4. 优先保主链和恢复预算
747
+ 5. 记录恢复动作和隔离边界
748
+
749
+ ### 配置回滚
750
+
751
+ 1. 先确认问题是否由配置变更触发
752
+ 2. 再识别配置属于控制面、数据面还是状态面
753
+ 3. 检查是否满足自动回滚触发条件
754
+ 4. 回滚后验证关键护栏指标是否恢复
755
+ 5. 补配置审计与冻结规则
756
+
757
+ ### Flake Triage
758
+
759
+ 1. 先稳定复现,确认是否真 flake
760
+ 2. 固定随机种子、时区、并发与外部依赖
761
+ 3. 区分测试抖动、环境抖动、时序抖动、观测误判
762
+ 4. 用最小观测点把偶发现象变成稳定信号
763
+ 5. 再决定是修实现、修测试还是修环境
764
+
765
+ ### 成本失控
766
+
767
+ 1. 先确认成本是流量驱动、重试驱动还是闲置浪费
768
+ 2. 再看哪个 control input 把成本推高
769
+ 3. 检查是否存在过量重试、过量扩容、过量缓存或重复计算
770
+ 4. 优先找可逆的小步降本动作
771
+ 5. 明确降本对成功率、延迟与可靠性的护栏
772
+
773
+ ### SLO 漂移
774
+
775
+ 1. 先确认是瞬时波动还是长期漂移
776
+ 2. 再看 setpoint、guardrail 与采样窗口是否仍有效
777
+ 3. 检查控制器是否已经失调或环境是否变了
778
+ 4. 优先调恢复与观测,再调业务逻辑
779
+ 5. 明确是改 SLO、改实现,还是改治理策略
780
+
781
+ ## 9. 引用导航
782
+
783
+ 如果需要更完整的理论和场景化方法,请按需读取:
784
+
785
+ - `references/gda-framework.md`
786
+ - 五维方法论
787
+ - GDA 四步法
788
+ - 软件总体设计视角
789
+ - `references/README.md`
790
+ - 引用索引
791
+ - `assets/quickstart.md`
792
+ - 快速用法与交付模板