@umacloud/knowledge 1.0.1

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 (418) hide show
  1. package/00-governance/governance-capabilities.md +557 -0
  2. package/00-governance/knowledge-map.md +39 -0
  3. package/00-governance/maintenance-policy.md +76 -0
  4. package/00-governance/review-checklist.md +81 -0
  5. package/README.md +13 -0
  6. package/ai/01-standards/agent-development-complete.md +691 -0
  7. package/ai/01-standards/llm-application-complete.md +488 -0
  8. package/ai/01-standards/mlops-complete.md +798 -0
  9. package/ai/01-standards/prompt-engineering-complete.md +646 -0
  10. package/ai/01-standards/rag-architecture-complete.md +649 -0
  11. package/ai/02-playbooks/llm-evaluation-playbook.md +847 -0
  12. package/ai/03-checklists/ai-project-checklist.md +215 -0
  13. package/ai/04-antipatterns/ai-antipatterns.md +661 -0
  14. package/ai/05-cases/case-rag-production.md +147 -0
  15. package/ai/06-glossary/ai-glossary.md +162 -0
  16. package/ai/agent-evaluation-benchmark.md +53 -0
  17. package/ai/ai-agent-memory-context-management.md +41 -0
  18. package/ai/ai-cost-capacity-optimization-playbook.md +42 -0
  19. package/ai/ai-data-security-and-compliance-playbook.md +37 -0
  20. package/ai/ai-domain-index-and-checklist.md +40 -0
  21. package/ai/ai-governance-maturity-model.md +50 -0
  22. package/ai/ai-model-selection-and-routing-strategy.md +47 -0
  23. package/ai/ai-observability-and-oncall-runbook.md +52 -0
  24. package/ai/ai-rag-engineering-playbook.md +42 -0
  25. package/ai/ai-red-team-and-safety-evaluation.md +42 -0
  26. package/ai/ai-release-readiness-and-rollback-gate.md +42 -0
  27. package/ai/llm-agent-engineering-deep-dive.md +57 -0
  28. package/ai/prompt-and-tool-guardrails.md +52 -0
  29. package/api/01-standards/enterprise-api-standards.md +198 -0
  30. package/api/01-standards/rest-api-design-guide.md +63 -0
  31. package/api/02-playbooks/api-pagination-playbook.md +93 -0
  32. package/api/02-playbooks/graphql-production-playbook.md +176 -0
  33. package/api/03-checklists/api-review-checklist.md +55 -0
  34. package/api/04-antipatterns/api-antipatterns.md +112 -0
  35. package/architecture/01-standards/api-gateway-patterns.md +496 -0
  36. package/architecture/01-standards/cloud-native-patterns.md +644 -0
  37. package/architecture/01-standards/distributed-systems-patterns.md +591 -0
  38. package/architecture/01-standards/event-driven-architecture.md +595 -0
  39. package/architecture/01-standards/microservices-patterns-complete.md +968 -0
  40. package/architecture/01-standards/microservices-patterns.md +495 -0
  41. package/architecture/01-standards/system-design-interview.md +664 -0
  42. package/architecture/02-playbooks/microservices-patterns-playbook.md +137 -0
  43. package/architecture/02-playbooks/migration-playbook.md +780 -0
  44. package/architecture/02-playbooks/system-design-playbook.md +779 -0
  45. package/architecture/03-checklists/architecture-decision-checklist.md +297 -0
  46. package/architecture/04-antipatterns/architecture-antipatterns.md +417 -0
  47. package/architecture/05-cases/case-netflix-microservices.md +413 -0
  48. package/architecture/06-glossary/architecture-glossary.md +164 -0
  49. package/architecture/adr-template-and-examples.md +38 -0
  50. package/architecture/api-gateway-deep-dive.md +1291 -0
  51. package/architecture/configuration-management.md +1162 -0
  52. package/architecture/distributed-transactions.md +1220 -0
  53. package/architecture/microservices-complete.md +735 -0
  54. package/architecture/resilience-and-disaster-patterns.md +37 -0
  55. package/architecture/service-governance.md +1198 -0
  56. package/architecture/system-architecture-deep-dive.md +37 -0
  57. package/backend/01-standards/analytics-and-growth.md +65 -0
  58. package/backend/01-standards/api-and-error-conventions.md +120 -0
  59. package/backend/01-standards/application-layering-and-packaging.md +160 -0
  60. package/backend/01-standards/auth-implementation.md +104 -0
  61. package/backend/01-standards/backend-framework-idioms.md +74 -0
  62. package/backend/01-standards/background-jobs-and-async.md +66 -0
  63. package/backend/01-standards/caching-strategies-complete.md +390 -0
  64. package/backend/01-standards/config-and-observability.md +77 -0
  65. package/backend/01-standards/data-modeling-and-persistence.md +94 -0
  66. package/backend/01-standards/django-complete.md +1765 -0
  67. package/backend/01-standards/email-and-notifications.md +64 -0
  68. package/backend/01-standards/fastapi-complete.md +925 -0
  69. package/backend/01-standards/file-upload-and-storage.md +66 -0
  70. package/backend/01-standards/graphql-api-complete.md +416 -0
  71. package/backend/01-standards/llm-application-standard.md +78 -0
  72. package/backend/01-standards/message-queue-patterns.md +379 -0
  73. package/backend/01-standards/microservices-and-distributed.md +78 -0
  74. package/backend/01-standards/nestjs-complete.md +2167 -0
  75. package/backend/01-standards/payment-integration.md +80 -0
  76. package/backend/01-standards/rate-limiting-complete.md +451 -0
  77. package/backend/01-standards/realtime-and-websocket.md +65 -0
  78. package/backend/01-standards/search-and-filtering.md +64 -0
  79. package/backend/01-standards/spring-boot-complete.md +445 -0
  80. package/backend/02-playbooks/api-design-playbook.md +718 -0
  81. package/backend/02-playbooks/email-send-playbook.md +130 -0
  82. package/backend/02-playbooks/file-upload-s3-playbook.md +153 -0
  83. package/backend/02-playbooks/typescript-enterprise-playbook.md +133 -0
  84. package/backend/02-playbooks/websocket-realtime-playbook.md +154 -0
  85. package/backend/03-checklists/api-launch-checklist.md +189 -0
  86. package/backend/04-antipatterns/backend-antipatterns.md +1051 -0
  87. package/blockchain/01-standards/blockchain-basics.md +557 -0
  88. package/blockchain/01-standards/smart-contract-development.md +1315 -0
  89. package/cicd/01-standards/deployment-and-delivery-standard.md +96 -0
  90. package/cicd/01-standards/github-actions-complete.md +473 -0
  91. package/cicd/01-standards/release-and-store-submission.md +75 -0
  92. package/cicd/02-playbooks/cicd-pipeline-playbook.md +144 -0
  93. package/cicd/02-playbooks/release-management-playbook.md +605 -0
  94. package/cicd/03-checklists/pipeline-security-checklist.md +168 -0
  95. package/cicd/04-antipatterns/cicd-antipatterns.md +589 -0
  96. package/cicd/05-cases/case-deployment-automation.md +221 -0
  97. package/cicd/05-cases/case-gitops-transformation.md +212 -0
  98. package/cicd/06-glossary/cicd-glossary.md +114 -0
  99. package/cicd/cicd-blueprint-deep-dive.md +38 -0
  100. package/cicd/release-readiness-gate.md +37 -0
  101. package/cloud-native/01-standards/container-security.md +741 -0
  102. package/cloud-native/01-standards/kubernetes-complete.md +812 -0
  103. package/cloud-native/02-playbooks/api-gateway-playbook.md +155 -0
  104. package/cloud-native/02-playbooks/gitops-with-argocd.md +760 -0
  105. package/cloud-native/02-playbooks/k8s-troubleshooting-playbook.md +1942 -0
  106. package/cloud-native/02-playbooks/message-queue-playbook.md +129 -0
  107. package/cloud-native/02-playbooks/multicloud-governance.md +726 -0
  108. package/cloud-native/02-playbooks/serverless-patterns.md +788 -0
  109. package/cloud-native/02-playbooks/service-mesh-playbook.md +612 -0
  110. package/cloud-native/02-playbooks/terraform-iac-playbook.md +143 -0
  111. package/cloud-native/03-checklists/container-security-checklist.md +431 -0
  112. package/cloud-native/03-checklists/k8s-production-readiness-checklist.md +460 -0
  113. package/cloud-native/04-antipatterns/container-antipatterns.md +660 -0
  114. package/cloud-native/04-antipatterns/k8s-antipatterns.md +743 -0
  115. package/cloud-native/05-cases/case-k8s-migration.md +478 -0
  116. package/cloud-native/05-cases/case-k8s-scaling.md +642 -0
  117. package/cloud-native/05-cases/case-k8s-security-incident.md +397 -0
  118. package/cloud-native/06-glossary/cloud-native-glossary.md +337 -0
  119. package/cross-platform/01-standards/cross-platform-frameworks.md +83 -0
  120. package/cross-platform/01-standards/platform-selection-and-architecture.md +77 -0
  121. package/data/01-standards/elasticsearch-complete.md +2098 -0
  122. package/data/01-standards/postgresql-complete.md +1613 -0
  123. package/data/01-standards/redis-complete.md +1527 -0
  124. package/data/02-playbooks/database-optimization-playbook.md +403 -0
  125. package/data/02-playbooks/elasticsearch-production-playbook.md +132 -0
  126. package/data/03-checklists/database-launch-checklist.md +187 -0
  127. package/data/04-antipatterns/database-antipatterns.md +873 -0
  128. package/data/05-cases/case-database-migration.md +310 -0
  129. package/data/06-glossary/database-glossary.md +440 -0
  130. package/data/data-governance-and-modeling-deep-dive.md +39 -0
  131. package/data-engineering/01-standards/airflow-complete.md +523 -0
  132. package/data-engineering/01-standards/kafka-complete.md +1521 -0
  133. package/data-engineering/02-playbooks/spark-etl-playbook.md +496 -0
  134. package/data-engineering/03-checklists/pipeline-launch-checklist.md +194 -0
  135. package/data-engineering/04-antipatterns/data-pipeline-antipatterns.md +684 -0
  136. package/data-engineering/05-cases/case-real-time-pipeline.md +355 -0
  137. package/data-engineering/06-glossary/data-engineering-glossary.md +429 -0
  138. package/database/01-standards/database-schema-standards.md +147 -0
  139. package/database/02-playbooks/postgresql-optimization-quick.md +52 -0
  140. package/database/02-playbooks/postgresql-performance-optimization.md +58 -0
  141. package/database/02-playbooks/postgresql-production-playbook.md +146 -0
  142. package/database/02-playbooks/redis-caching-playbook.md +117 -0
  143. package/database/03-checklists/database-review-checklist.md +50 -0
  144. package/database/04-antipatterns/database-antipatterns.md +112 -0
  145. package/design/01-standards/ui-design-system-complete.md +423 -0
  146. package/design/02-playbooks/design-handoff-playbook.md +254 -0
  147. package/design/02-playbooks/design-review-playbook.md +388 -0
  148. package/design/03-checklists/design-review-checklist.md +246 -0
  149. package/design/04-antipatterns/design-antipatterns.md +378 -0
  150. package/design/05-cases/case-design-system-adoption.md +328 -0
  151. package/design/06-glossary/design-glossary.md +329 -0
  152. package/design/ui-full-lifecycle-cross-platform-playbook.md +571 -0
  153. package/design/ux-system-deep-dive.md +38 -0
  154. package/design-systems/00-craft-rules.md +71 -0
  155. package/design-systems/aesthetic-families.md +43 -0
  156. package/design-systems/anti-ai-slop.md +162 -0
  157. package/design-systems/bold-geometric.md +120 -0
  158. package/design-systems/brutalist-bold.md +103 -0
  159. package/design-systems/editorial-clean.md +109 -0
  160. package/design-systems/glass-aurora.md +108 -0
  161. package/design-systems/modern-minimal.md +145 -0
  162. package/design-systems/premium-luxury.md +106 -0
  163. package/design-systems/product-type-design-map.md +48 -0
  164. package/design-systems/soft-warm.md +123 -0
  165. package/design-systems/tech-utility.md +113 -0
  166. package/desktop/01-standards/desktop-app-standard.md +72 -0
  167. package/desktop/01-standards/desktop-design.md +71 -0
  168. package/development/00-governance/document-template.md +41 -0
  169. package/development/01-standards/api-versioning-strategies.md +432 -0
  170. package/development/01-standards/authentication-patterns-complete.md +479 -0
  171. package/development/01-standards/css-architecture-complete.md +550 -0
  172. package/development/01-standards/database-migration-strategies.md +484 -0
  173. package/development/01-standards/elasticsearch-complete.md +347 -0
  174. package/development/01-standards/git-complete.md +371 -0
  175. package/development/01-standards/golang-complete.md +1565 -0
  176. package/development/01-standards/graphql-complete.md +298 -0
  177. package/development/01-standards/javascript-bundlers-complete.md +469 -0
  178. package/development/01-standards/javascript-typescript-complete.md +528 -0
  179. package/development/01-standards/jest-complete.md +275 -0
  180. package/development/01-standards/linux-complete.md +234 -0
  181. package/development/01-standards/logging-observability-complete.md +526 -0
  182. package/development/01-standards/microservices-communication.md +502 -0
  183. package/development/01-standards/mongodb-complete.md +406 -0
  184. package/development/01-standards/oauth2-complete.md +285 -0
  185. package/development/01-standards/performance-optimization-complete.md +289 -0
  186. package/development/01-standards/playwright-complete.md +247 -0
  187. package/development/01-standards/postgresql-complete.md +456 -0
  188. package/development/01-standards/pytest-complete.md +340 -0
  189. package/development/01-standards/python-async-programming.md +902 -0
  190. package/development/01-standards/python-complete.md +956 -0
  191. package/development/01-standards/python-decorators-complete.md +799 -0
  192. package/development/01-standards/python-design-patterns.md +2854 -0
  193. package/development/01-standards/python-packaging-distribution.md +420 -0
  194. package/development/01-standards/python-testing-strategies.md +607 -0
  195. package/development/01-standards/python-web-frameworks-comparison.md +471 -0
  196. package/development/01-standards/redis-complete.md +317 -0
  197. package/development/01-standards/rest-api-complete.md +316 -0
  198. package/development/01-standards/rust-complete.md +578 -0
  199. package/development/01-standards/typescript-advanced-types.md +1513 -0
  200. package/development/01-standards/web-security-complete.md +292 -0
  201. package/development/02-playbooks/api-design-playbook.md +810 -0
  202. package/development/02-playbooks/database-migration-playbook.md +580 -0
  203. package/development/02-playbooks/debugging-playbook.md +692 -0
  204. package/development/02-playbooks/feature-delivery-playbook.md +430 -0
  205. package/development/02-playbooks/incident-hotfix-playbook.md +387 -0
  206. package/development/02-playbooks/performance-optimization-playbook.md +531 -0
  207. package/development/02-playbooks/performance-tuning-playbook.md +652 -0
  208. package/development/02-playbooks/refactor-playbook.md +403 -0
  209. package/development/02-playbooks/release-playbook.md +469 -0
  210. package/development/03-checklists/architecture-review-checklist.md +168 -0
  211. package/development/03-checklists/data-migration-checklist.md +157 -0
  212. package/development/03-checklists/oncall-handover-checklist.md +173 -0
  213. package/development/03-checklists/pr-checklist.md +158 -0
  214. package/development/03-checklists/production-readiness-checklist.md +190 -0
  215. package/development/03-checklists/release-readiness-checklist.md +154 -0
  216. package/development/03-checklists/security-review-checklist.md +182 -0
  217. package/development/04-antipatterns/api-antipatterns.md +657 -0
  218. package/development/04-antipatterns/architecture-antipatterns.md +686 -0
  219. package/development/04-antipatterns/backend-antipatterns.md +648 -0
  220. package/development/04-antipatterns/cicd-antipatterns.md +540 -0
  221. package/development/04-antipatterns/code-smell-antipatterns.md +571 -0
  222. package/development/04-antipatterns/data-antipatterns.md +658 -0
  223. package/development/04-antipatterns/database-antipatterns.md +578 -0
  224. package/development/04-antipatterns/frontend-antipatterns.md +635 -0
  225. package/development/04-antipatterns/reliability-antipatterns.md +700 -0
  226. package/development/04-antipatterns/security-antipatterns.md +747 -0
  227. package/development/05-cases/case-api-version-migration.md +428 -0
  228. package/development/05-cases/case-authorization-hardening.md +383 -0
  229. package/development/05-cases/case-bluegreen-rollback.md +466 -0
  230. package/development/05-cases/case-cache-snowball-protection.md +485 -0
  231. package/development/05-cases/case-ci-cd-pipeline.md +544 -0
  232. package/development/05-cases/case-database-scaling.md +500 -0
  233. package/development/05-cases/case-db-hotspot-optimization.md +487 -0
  234. package/development/05-cases/case-incident-mttr-reduction.md +563 -0
  235. package/development/05-cases/case-microservice-migration.md +375 -0
  236. package/development/05-cases/case-performance-optimization.md +406 -0
  237. package/development/05-cases/case-security-incident-response.md +345 -0
  238. package/development/06-glossary/full-stack-glossary.md +166 -0
  239. package/development/09-maturity/quarterly-audit-template.md +35 -0
  240. package/development/11-ui-excellence/ui-aesthetic-system.md +41 -0
  241. package/development/11-ui-excellence/ui-engineering-excellence.md +435 -0
  242. package/development/12-scenarios/development-scenarios-guide.md +565 -0
  243. package/development/13-implementation-assets/implementation-toolkit.md +282 -0
  244. package/development/13-implementation-assets/knowledge-gates-execution.md +43 -0
  245. package/development/14-full-lifecycle/software-lifecycle-gates.md +511 -0
  246. package/development/15-lifecycle-templates/project-templates-collection.md +791 -0
  247. package/development/api-contract-and-versioning-guide.md +36 -0
  248. package/development/api-governance-complete.md +43 -0
  249. package/development/backend-engineering-complete.md +43 -0
  250. package/development/code-review-quality-complete.md +43 -0
  251. package/development/concurrency-reliability-complete.md +43 -0
  252. package/development/database-engineering-complete.md +43 -0
  253. package/development/engineering-effectiveness-complete.md +43 -0
  254. package/development/engineering-standards-deep-dive.md +38 -0
  255. package/development/frontend-engineering-complete.md +43 -0
  256. package/development/performance-capacity-complete.md +43 -0
  257. package/development/refactor-migration-complete.md +42 -0
  258. package/development/refactoring-and-techdebt-playbook.md +37 -0
  259. package/development/security-in-development-complete.md +43 -0
  260. package/devops/01-standards/cicd-pipeline-complete.md +262 -0
  261. package/devops/01-standards/docker-complete.md +1490 -0
  262. package/devops/01-standards/github-actions-complete.md +337 -0
  263. package/devops/01-standards/kubernetes-complete.md +638 -0
  264. package/devops/01-standards/terraform-complete.md +2117 -0
  265. package/devops/02-playbooks/docker-compose-playbook.md +233 -0
  266. package/devops/02-playbooks/docker-k8s-production-playbook.md +186 -0
  267. package/devops/02-playbooks/docker-production-playbook.md +952 -0
  268. package/edge-iot/01-standards/edge-iot-complete.md +473 -0
  269. package/experts/architect/api-design.md +178 -0
  270. package/experts/architect/methodology.md +124 -0
  271. package/experts/architect/security.md +75 -0
  272. package/experts/backend-lead/methodology.md +216 -0
  273. package/experts/devops/methodology.md +160 -0
  274. package/experts/frontend-lead/methodology.md +178 -0
  275. package/experts/product-manager/industry/ecommerce.md +43 -0
  276. package/experts/product-manager/industry/saas.md +40 -0
  277. package/experts/product-manager/methodology.md +97 -0
  278. package/experts/qa-lead/methodology.md +123 -0
  279. package/experts/qa-lead/test-strategy.md +128 -0
  280. package/experts/uiux-designer/methodology.md +125 -0
  281. package/frontend/01-standards/accessibility-complete.md +532 -0
  282. package/frontend/01-standards/accessibility-standard.md +74 -0
  283. package/frontend/01-standards/admin-dashboard-and-crud.md +72 -0
  284. package/frontend/01-standards/design-tokens-complete.md +444 -0
  285. package/frontend/01-standards/forms-and-validation.md +77 -0
  286. package/frontend/01-standards/frontend-architecture-and-layering.md +119 -0
  287. package/frontend/01-standards/i18n-and-localization.md +65 -0
  288. package/frontend/01-standards/nextjs-complete.md +451 -0
  289. package/frontend/01-standards/react-complete.md +713 -0
  290. package/frontend/01-standards/react-hooks-complete-guide.md +1100 -0
  291. package/frontend/01-standards/react-hooks-complete.md +1171 -0
  292. package/frontend/01-standards/seo-and-web-vitals.md +77 -0
  293. package/frontend/01-standards/state-management-complete.md +444 -0
  294. package/frontend/01-standards/vue-complete.md +499 -0
  295. package/frontend/01-standards/vue3-complete.md +2002 -0
  296. package/frontend/01-standards/web-framework-best-practices.md +64 -0
  297. package/frontend/01-standards/web-performance-complete.md +495 -0
  298. package/frontend/02-playbooks/accessibility-a11y-playbook.md +161 -0
  299. package/frontend/02-playbooks/frontend-performance-playbook.md +707 -0
  300. package/frontend/02-playbooks/i18n-internationalization-playbook.md +120 -0
  301. package/frontend/02-playbooks/performance-optimization-playbook.md +163 -0
  302. package/frontend/02-playbooks/react-nextjs-production-playbook.md +167 -0
  303. package/frontend/02-playbooks/react-state-management-playbook.md +173 -0
  304. package/frontend/03-checklists/component-quality-checklist.md +166 -0
  305. package/frontend/03-checklists/frontend-launch-checklist.md +299 -0
  306. package/frontend/04-antipatterns/frontend-antipatterns.md +886 -0
  307. package/frontend/05-cases/case-performance-optimization.md +274 -0
  308. package/harmony/01-standards/harmonyos-arkts-standard.md +75 -0
  309. package/harmony/01-standards/harmonyos-design.md +65 -0
  310. package/high-quality-engineering-playbook.md +54 -0
  311. package/incident/01-standards/incident-response-complete.md +303 -0
  312. package/incident/02-playbooks/chaos-engineering-playbook.md +883 -0
  313. package/incident/02-playbooks/postmortem-playbook.md +398 -0
  314. package/incident/03-checklists/incident-readiness-checklist.md +181 -0
  315. package/incident/04-antipatterns/incident-antipatterns.md +490 -0
  316. package/incident/05-cases/case-cascade-failure.md +176 -0
  317. package/incident/06-glossary/incident-glossary.md +114 -0
  318. package/incident/postmortem-and-response-deep-dive.md +39 -0
  319. package/industries/ecommerce/ecommerce-complete.md +631 -0
  320. package/industries/education/education-complete.md +555 -0
  321. package/industries/fintech/fintech-complete.md +501 -0
  322. package/industries/gaming/gaming-complete.md +587 -0
  323. package/industries/healthcare/healthcare-complete.md +452 -0
  324. package/low-code/01-standards/low-code-complete.md +944 -0
  325. package/miniprogram/01-standards/ai-common-mistakes.md +61 -0
  326. package/miniprogram/01-standards/miniprogram-custom-navbar-capsule.md +77 -0
  327. package/miniprogram/01-standards/miniprogram-design.md +61 -0
  328. package/miniprogram/01-standards/miniprogram-standard.md +81 -0
  329. package/mobile/01-standards/android-material-design.md +70 -0
  330. package/mobile/01-standards/flutter-complete.md +384 -0
  331. package/mobile/01-standards/ios-design-hig.md +78 -0
  332. package/mobile/01-standards/mobile-app-standard.md +85 -0
  333. package/mobile/01-standards/react-native-complete.md +352 -0
  334. package/mobile/02-playbooks/mobile-cross-platform-playbook.md +175 -0
  335. package/mobile/02-playbooks/mobile-performance.md +473 -0
  336. package/mobile/03-checklists/mobile-release-checklist.md +234 -0
  337. package/mobile/04-antipatterns/mobile-antipatterns.md +798 -0
  338. package/mobile/05-cases/case-app-performance.md +500 -0
  339. package/mobile/05-cases/case-app-startup-optimization.md +218 -0
  340. package/mobile/06-glossary/mobile-glossary.md +484 -0
  341. package/observability/01-standards/observability-standards.md +103 -0
  342. package/observability/02-playbooks/prometheus-grafana-playbook.md +135 -0
  343. package/observability/02-playbooks/structured-logging-playbook.md +73 -0
  344. package/observability/03-checklists/observability-checklist.md +54 -0
  345. package/observability/04-antipatterns/observability-antipatterns.md +106 -0
  346. package/operations/01-standards/prometheus-monitoring-complete.md +1578 -0
  347. package/operations/02-playbooks/capacity-planning-playbook.md +620 -0
  348. package/operations/03-checklists/production-launch-checklist.md +365 -0
  349. package/operations/04-antipatterns/operations-antipatterns.md +664 -0
  350. package/operations/05-cases/case-sre-practices.md +581 -0
  351. package/operations/06-glossary/operations-glossary.md +120 -0
  352. package/operations/aiops-anomaly-detection.md +758 -0
  353. package/operations/capacity-planning.md +1061 -0
  354. package/operations/chaos-engineering.md +659 -0
  355. package/operations/incident-command-system.md +38 -0
  356. package/operations/observability-complete.md +442 -0
  357. package/operations/slo-sli-playbook.md +517 -0
  358. package/operations/sre-operations-deep-dive.md +39 -0
  359. package/package.json +8 -0
  360. package/performance/01-standards/performance-and-scalability.md +80 -0
  361. package/performance/01-standards/performance-standards.md +156 -0
  362. package/performance/02-playbooks/query-optimization-playbook.md +103 -0
  363. package/performance/03-checklists/performance-checklist.md +56 -0
  364. package/performance/04-antipatterns/performance-antipatterns.md +146 -0
  365. package/product/01-standards/product-management-complete.md +285 -0
  366. package/product/02-playbooks/feature-launch-playbook.md +207 -0
  367. package/product/02-playbooks/user-research-playbook.md +532 -0
  368. package/product/03-checklists/feature-launch-checklist.md +275 -0
  369. package/product/04-antipatterns/product-antipatterns.md +355 -0
  370. package/product/05-cases/case-mvp-to-scale.md +384 -0
  371. package/product/06-glossary/product-glossary.md +462 -0
  372. package/product/feature-prioritization-framework.md +40 -0
  373. package/product/kpi-and-metric-tree.md +37 -0
  374. package/product/product-discovery-and-prd-deep-dive.md +41 -0
  375. package/quantum/01-standards/quantum-complete.md +1186 -0
  376. package/security/01-standards/api-security-complete.md +511 -0
  377. package/security/01-standards/container-runtime-security.md +574 -0
  378. package/security/01-standards/data-protection-gdpr.md +543 -0
  379. package/security/01-standards/owasp-top10-complete.md +1890 -0
  380. package/security/01-standards/secure-coding-baseline.md +90 -0
  381. package/security/01-standards/supply-chain-security.md +441 -0
  382. package/security/01-standards/web-security-checklist.md +108 -0
  383. package/security/01-standards/zero-trust-architecture.md +521 -0
  384. package/security/02-playbooks/auth-sso-playbook.md +166 -0
  385. package/security/02-playbooks/incident-response-security-playbook.md +588 -0
  386. package/security/02-playbooks/owasp-api-security-playbook.md +129 -0
  387. package/security/02-playbooks/payment-integration-playbook.md +119 -0
  388. package/security/02-playbooks/penetration-testing-playbook.md +517 -0
  389. package/security/03-checklists/security-audit-checklist.md +356 -0
  390. package/security/04-antipatterns/security-coding-antipatterns.md +580 -0
  391. package/security/05-cases/case-log4shell-incident.md +537 -0
  392. package/security/05-cases/case-major-breaches.md +468 -0
  393. package/security/06-glossary/security-glossary.md +212 -0
  394. package/security/compliance-automation.md +993 -0
  395. package/security/container-security.md +680 -0
  396. package/security/devsecops-complete.md +426 -0
  397. package/security/sast-dast-sca.md +775 -0
  398. package/security/secrets-management.md +594 -0
  399. package/security/security-architecture-deep-dive.md +37 -0
  400. package/security/threat-modeling-stride-playbook.md +40 -0
  401. package/seed-templates/auth-system.md +59 -0
  402. package/seed-templates/blog-content.md +94 -0
  403. package/seed-templates/dashboard.md +89 -0
  404. package/seed-templates/docs-site.md +73 -0
  405. package/seed-templates/e-commerce.md +50 -0
  406. package/seed-templates/saas-landing.md +92 -0
  407. package/seed-templates/settings-page.md +51 -0
  408. package/testing/01-standards/test-strategy-and-layering.md +83 -0
  409. package/testing/01-standards/testing-strategy-complete.md +422 -0
  410. package/testing/01-standards/unit-testing-best-practices.md +118 -0
  411. package/testing/02-playbooks/e2e-testing-playbook.md +988 -0
  412. package/testing/02-playbooks/testing-strategy-playbook.md +126 -0
  413. package/testing/03-checklists/test-strategy-checklist.md +208 -0
  414. package/testing/04-antipatterns/testing-antipatterns.md +718 -0
  415. package/testing/05-cases/case-testing-transformation.md +300 -0
  416. package/testing/06-glossary/testing-glossary.md +110 -0
  417. package/testing/risk-based-test-matrix.md +36 -0
  418. package/testing/testing-strategy-deep-dive.md +37 -0
@@ -0,0 +1,648 @@
1
+ ---
2
+ id: backend-antipatterns
3
+ title: 后端反模式指南
4
+ domain: development
5
+ category: 04-antipatterns
6
+ difficulty: intermediate
7
+ tags: [antipatterns, backend, breaker, circuit, controller, development, error, handling]
8
+ quality_score: 70
9
+ last_updated: 2026-06-15
10
+ ---
11
+ # 后端反模式指南
12
+
13
+ > 适用范围:Python / Node.js / Go / Java 后端服务
14
+ > 约束级别:SHALL(必须在 Code Review 阶段拦截)
15
+
16
+ ---
17
+
18
+ ## 1. 控制器臃肿(Fat Controller)
19
+
20
+ ### 描述
21
+ 将业务逻辑、数据访问、外部调用、错误处理全部堆积在 Controller / Handler 层,导致 Controller 成为上帝类。违反关注点分离原则,无法对业务逻辑进行独立单元测试。
22
+
23
+ ### 错误示例
24
+ ```python
25
+ @app.post("/orders")
26
+ def create_order(request):
27
+ data = request.json
28
+ # 输入校验
29
+ if not data.get("user_id"):
30
+ return {"error": "user_id required"}, 400
31
+ if not data.get("items"):
32
+ return {"error": "items required"}, 400
33
+
34
+ # 查用户
35
+ user = db.execute("SELECT * FROM users WHERE id = %s", (data["user_id"],)).fetchone()
36
+ if not user:
37
+ return {"error": "user not found"}, 404
38
+
39
+ # 校验库存
40
+ for item in data["items"]:
41
+ stock = db.execute(
42
+ "SELECT stock FROM products WHERE id = %s", (item["product_id"],)
43
+ ).fetchone()
44
+ if not stock or stock["stock"] < item["qty"]:
45
+ return {"error": f"insufficient stock for {item['product_id']}"}, 422
46
+
47
+ # 计算金额
48
+ total = 0
49
+ for item in data["items"]:
50
+ product = db.execute(
51
+ "SELECT price FROM products WHERE id = %s", (item["product_id"],)
52
+ ).fetchone()
53
+ total += product["price"] * item["qty"]
54
+
55
+ # 应用优惠券
56
+ if data.get("coupon_code"):
57
+ coupon = db.execute(
58
+ "SELECT * FROM coupons WHERE code = %s AND expires_at > NOW()",
59
+ (data["coupon_code"],)
60
+ ).fetchone()
61
+ if coupon:
62
+ total = total * (1 - coupon["discount_rate"])
63
+
64
+ # 创建订单
65
+ order_id = db.execute(
66
+ "INSERT INTO orders (user_id, total, status) VALUES (%s, %s, 'pending') RETURNING id",
67
+ (data["user_id"], total)
68
+ ).fetchone()["id"]
69
+
70
+ # 扣减库存 ...
71
+ # 发通知 ...
72
+ # 清缓存 ...
73
+ return {"order_id": order_id, "total": total}, 201
74
+ ```
75
+
76
+ ### 正确示例
77
+ ```python
78
+ # api/orders.py -- Controller 只负责 HTTP 协议处理
79
+ @app.post("/orders", response_model=OrderResponse, status_code=201)
80
+ def create_order(
81
+ data: CreateOrderRequest,
82
+ user: User = Depends(get_current_user),
83
+ order_service: OrderService = Depends(get_order_service),
84
+ ):
85
+ try:
86
+ order = order_service.create(user_id=user.id, items=data.items, coupon_code=data.coupon_code)
87
+ return OrderResponse.from_entity(order)
88
+ except InsufficientStockError as e:
89
+ raise HTTPException(status_code=422, detail=str(e))
90
+ except CouponExpiredError as e:
91
+ raise HTTPException(status_code=400, detail=str(e))
92
+
93
+ # services/order_service.py -- 业务逻辑层
94
+ class OrderService:
95
+ def __init__(
96
+ self,
97
+ order_repo: OrderRepository,
98
+ inventory_service: InventoryService,
99
+ pricing_service: PricingService,
100
+ notification_service: NotificationService,
101
+ ):
102
+ self._repo = order_repo
103
+ self._inventory = inventory_service
104
+ self._pricing = pricing_service
105
+ self._notification = notification_service
106
+
107
+ def create(self, user_id: int, items: list[OrderItem], coupon_code: str | None) -> Order:
108
+ self._inventory.check_and_reserve(items)
109
+ total = self._pricing.calculate(items, coupon_code)
110
+ order = self._repo.create(user_id=user_id, items=items, total=total)
111
+ self._notification.send_order_created(order)
112
+ return order
113
+ ```
114
+
115
+ ### 检测方法
116
+ - Controller 文件行数 > 100 行。
117
+ - Controller 方法中包含数据库查询(`db.execute` / ORM 查询)。
118
+ - Controller 方法中包含外部 HTTP 调用。
119
+ - Controller 方法的单元测试需要 mock > 3 个依赖。
120
+
121
+ ### 修复步骤
122
+ 1. 将业务逻辑提取到 Service 层。
123
+ 2. 将数据访问提取到 Repository 层。
124
+ 3. Controller 仅负责:解析请求、调用 Service、返回响应、映射异常到 HTTP 状态码。
125
+ 4. Service 层通过依赖注入获取 Repository 和其他 Service。
126
+
127
+ ### Agent Checklist
128
+ - [ ] Controller 方法行数 <= 20
129
+ - [ ] Controller 中无数据库操作
130
+ - [ ] Controller 中无外部 HTTP 调用
131
+ - [ ] 业务逻辑在 Service 层可独立测试
132
+
133
+ ---
134
+
135
+ ## 2. 外部依赖无超时与熔断(Missing Timeout and Circuit Breaker)
136
+
137
+ ### 描述
138
+ 调用外部服务(HTTP API、数据库、Redis、消息队列)时不设置超时时间,也没有熔断降级机制。当外部依赖出现故障时,调用方线程阻塞等待,导致连接池耗尽、请求堆积、最终级联雪崩。
139
+
140
+ ### 错误示例
141
+ ```python
142
+ # 无超时 -- 外部服务挂起时永远等待
143
+ def get_user_profile(user_id):
144
+ response = requests.get(f"{USER_SERVICE}/users/{user_id}") # 无 timeout
145
+ return response.json()
146
+
147
+ # 无熔断 -- 外部服务已宕机仍继续请求
148
+ def get_exchange_rate(currency):
149
+ try:
150
+ response = requests.get(f"{RATE_SERVICE}/rate/{currency}", timeout=5)
151
+ return response.json()["rate"]
152
+ except Exception:
153
+ # 每次请求都尝试,即使服务已经连续失败 1000 次
154
+ return None
155
+
156
+ # 数据库无超时
157
+ def long_query():
158
+ # 复杂查询可能执行数分钟,阻塞连接池
159
+ return db.execute("SELECT * FROM huge_table WHERE complex_condition = true")
160
+ ```
161
+
162
+ ### 正确示例
163
+ ```python
164
+ import httpx
165
+ from circuitbreaker import circuit
166
+
167
+ # HTTP 调用设置超时
168
+ http_client = httpx.AsyncClient(
169
+ timeout=httpx.Timeout(
170
+ connect=2.0, # 连接超时 2 秒
171
+ read=5.0, # 读取超时 5 秒
172
+ write=5.0, # 写入超时 5 秒
173
+ pool=10.0, # 连接池获取超时 10 秒
174
+ ),
175
+ limits=httpx.Limits(
176
+ max_connections=100,
177
+ max_keepalive_connections=20,
178
+ ),
179
+ )
180
+
181
+ # 熔断器保护外部调用
182
+ @circuit(
183
+ failure_threshold=5, # 连续失败 5 次后熔断
184
+ recovery_timeout=30, # 熔断后 30 秒尝试恢复
185
+ expected_exception=Exception,
186
+ )
187
+ async def get_exchange_rate(currency: str) -> Decimal:
188
+ response = await http_client.get(f"{RATE_SERVICE}/rate/{currency}")
189
+ response.raise_for_status()
190
+ return Decimal(response.json()["rate"])
191
+
192
+ # 带降级的调用
193
+ async def get_exchange_rate_with_fallback(currency: str) -> Decimal:
194
+ try:
195
+ return await get_exchange_rate(currency)
196
+ except CircuitBreakerError:
197
+ logger.warning("Exchange rate circuit breaker open, using cached rate")
198
+ return await cache.get_cached_rate(currency)
199
+
200
+ # 数据库超时设置
201
+ from sqlalchemy import create_engine
202
+
203
+ engine = create_engine(
204
+ DATABASE_URL,
205
+ pool_size=10,
206
+ max_overflow=5,
207
+ pool_timeout=10, # 连接池获取超时
208
+ pool_recycle=300, # 连接回收时间
209
+ connect_args={
210
+ "connect_timeout": 5, # 连接超时
211
+ "options": "-c statement_timeout=30000", # SQL 执行超时 30 秒
212
+ },
213
+ )
214
+ ```
215
+
216
+ ### 检测方法
217
+ - `requests.get()` / `requests.post()` 无 `timeout` 参数。
218
+ - 数据库连接字符串无 `connect_timeout` / `statement_timeout`。
219
+ - 无 `circuitbreaker` / `pybreaker` / `tenacity` 等熔断库使用。
220
+ - 外部调用失败时无降级逻辑(直接返回 500)。
221
+
222
+ ### 修复步骤
223
+ 1. 为所有 HTTP 客户端设置 connect / read / write timeout。
224
+ 2. 为数据库连接设置 connection timeout 和 statement timeout。
225
+ 3. 对关键外部依赖添加熔断器。
226
+ 4. 为每个外部调用定义降级策略(缓存兜底 / 默认值 / 部分功能降级)。
227
+ 5. 添加监控:超时率、熔断触发次数、降级触发次数。
228
+
229
+ ### Agent Checklist
230
+ - [ ] 所有 HTTP 调用有 timeout
231
+ - [ ] 数据库连接有 connection timeout + statement timeout
232
+ - [ ] 关键外部依赖有熔断器
233
+ - [ ] 每个外部调用有降级策略
234
+ - [ ] 有超时和熔断的监控告警
235
+
236
+ ---
237
+
238
+ ## 3. 错误处理不统一(Inconsistent Error Handling)
239
+
240
+ ### 描述
241
+ 各模块各自定义错误格式,有的返回字典、有的抛异常、有的返回 None、有的打日志不返回。调用方无法统一处理,调试时无法快速定位错误来源。
242
+
243
+ ### 错误示例
244
+ ```python
245
+ # 模块 A: 返回 None 表示错误
246
+ def get_user(user_id):
247
+ user = db.query(User).get(user_id)
248
+ if not user:
249
+ return None # 调用方怎么区分"未找到"和"查询失败"?
250
+
251
+ # 模块 B: 返回错误字典
252
+ def create_payment(order_id, amount):
253
+ if amount <= 0:
254
+ return {"success": False, "error": "invalid amount"}
255
+ # ...
256
+ return {"success": True, "payment_id": "pay_123"}
257
+
258
+ # 模块 C: 吞掉异常
259
+ def send_notification(user_id, message):
260
+ try:
261
+ email_service.send(user_id, message)
262
+ except Exception:
263
+ pass # 静默失败,完全不知道发生了什么
264
+
265
+ # 模块 D: 打日志但返回默认值
266
+ def get_config(key):
267
+ try:
268
+ return config_service.get(key)
269
+ except Exception as e:
270
+ logging.error(f"Config error: {e}")
271
+ return "default_value" # 调用方以为成功了
272
+ ```
273
+
274
+ ### 正确示例
275
+ ```python
276
+ # 统一的异常体系
277
+ class AppError(Exception):
278
+ """所有业务异常的基类"""
279
+ def __init__(self, message: str, code: str, details: dict | None = None):
280
+ self.message = message
281
+ self.code = code
282
+ self.details = details or {}
283
+ super().__init__(message)
284
+
285
+ class NotFoundError(AppError):
286
+ def __init__(self, entity: str, entity_id: str | int):
287
+ super().__init__(
288
+ message=f"{entity} with id {entity_id} not found",
289
+ code="NOT_FOUND",
290
+ details={"entity": entity, "id": str(entity_id)},
291
+ )
292
+
293
+ class ValidationError(AppError):
294
+ def __init__(self, field: str, reason: str):
295
+ super().__init__(
296
+ message=f"Validation failed on {field}: {reason}",
297
+ code="VALIDATION_ERROR",
298
+ details={"field": field, "reason": reason},
299
+ )
300
+
301
+ class ExternalServiceError(AppError):
302
+ def __init__(self, service: str, original_error: Exception):
303
+ super().__init__(
304
+ message=f"External service {service} failed",
305
+ code="EXTERNAL_SERVICE_ERROR",
306
+ details={"service": service, "original": str(original_error)},
307
+ )
308
+
309
+ # 模块 A: 抛出明确异常
310
+ def get_user(user_id: int) -> User:
311
+ user = db.query(User).get(user_id)
312
+ if not user:
313
+ raise NotFoundError("User", user_id)
314
+ return user
315
+
316
+ # 模块 B: 抛出明确异常
317
+ def create_payment(order_id: str, amount: Decimal) -> Payment:
318
+ if amount <= 0:
319
+ raise ValidationError("amount", "must be positive")
320
+ return payment_gateway.charge(order_id, amount)
321
+
322
+ # 模块 C: 记录异常并让调用方决定是否忽略
323
+ def send_notification(user_id: int, message: str) -> None:
324
+ try:
325
+ email_service.send(user_id, message)
326
+ except Exception as e:
327
+ logger.error("Notification failed", user_id=user_id, error=str(e))
328
+ raise ExternalServiceError("email_service", e)
329
+ ```
330
+
331
+ ### 检测方法
332
+ - 搜索 `except Exception: pass` 或 `except: pass`。
333
+ - 函数返回类型是 `dict | None` 且 dict 中包含 `error` / `success` 字段。
334
+ - `bandit` B110 规则(try_except_pass)。
335
+ - 同一项目中存在 3 种以上不同的错误返回格式。
336
+
337
+ ### 修复步骤
338
+ 1. 定义统一的异常基类层次结构(AppError -> NotFoundError / ValidationError / ...)。
339
+ 2. 将 `return None` 改为 `raise NotFoundError(...)`。
340
+ 3. 将 `return {"error": ...}` 改为 `raise AppError(...)`。
341
+ 4. 将 `except: pass` 改为 `except: logger.error(...); raise`。
342
+ 5. 在 Controller 层统一捕获 AppError 并转为 HTTP 响应。
343
+
344
+ ### Agent Checklist
345
+ - [ ] 无 `except: pass` 或 `except Exception: pass`
346
+ - [ ] 所有业务错误使用统一异常体系
347
+ - [ ] 函数不返回 `{"error": ...}` 字典
348
+ - [ ] 不用 `return None` 表示错误(使用异常)
349
+ - [ ] 异常日志包含上下文信息
350
+
351
+ ---
352
+
353
+ ## 4. 幂等性缺失(Missing Idempotency)
354
+
355
+ ### 描述
356
+ 写操作(创建订单、扣款、发通知)没有幂等保护,客户端重试或网络重传时导致重复执行。例如用户点击两次"支付"按钮,扣款两次。
357
+
358
+ ### 错误示例
359
+ ```python
360
+ # 非幂等的支付接口 -- 重试会导致重复扣款
361
+ @app.post("/payments")
362
+ def create_payment(data: PaymentRequest):
363
+ payment = payment_gateway.charge(
364
+ user_id=data.user_id,
365
+ amount=data.amount,
366
+ )
367
+ db.execute(
368
+ "INSERT INTO payments (user_id, amount, status) VALUES (%s, %s, 'success')",
369
+ (data.user_id, data.amount)
370
+ )
371
+ return {"payment_id": payment.id}
372
+ # 客户端超时重试 -> 再次扣款
373
+
374
+ # 非幂等的通知 -- 重复发送
375
+ @app.post("/notifications/send")
376
+ def send_notification(data: NotificationRequest):
377
+ email_service.send(data.user_email, data.subject, data.body)
378
+ return {"status": "sent"}
379
+ # 重试 -> 用户收到多封相同邮件
380
+ ```
381
+
382
+ ### 正确示例
383
+ ```python
384
+ import uuid
385
+
386
+ # 幂等键方案
387
+ @app.post("/payments")
388
+ def create_payment(
389
+ data: PaymentRequest,
390
+ idempotency_key: str = Header(..., alias="Idempotency-Key"),
391
+ ):
392
+ # 检查幂等键是否已使用
393
+ existing = payment_repo.get_by_idempotency_key(idempotency_key)
394
+ if existing:
395
+ return PaymentResponse.from_entity(existing) # 直接返回之前的结果
396
+
397
+ # 首次执行
398
+ with db.transaction() as tx:
399
+ payment = payment_gateway.charge(
400
+ user_id=data.user_id,
401
+ amount=data.amount,
402
+ idempotency_key=idempotency_key,
403
+ )
404
+ payment_repo.create(
405
+ user_id=data.user_id,
406
+ amount=data.amount,
407
+ idempotency_key=idempotency_key,
408
+ status="success",
409
+ gateway_id=payment.id,
410
+ )
411
+ return PaymentResponse.from_entity(payment)
412
+
413
+ # 数据库层幂等约束
414
+ # CREATE UNIQUE INDEX idx_payments_idempotency ON payments(idempotency_key);
415
+
416
+ # 通知去重
417
+ class NotificationService:
418
+ def send_once(self, notification_id: str, user_email: str, subject: str, body: str):
419
+ cache_key = f"notification_sent:{notification_id}"
420
+ if self._redis.get(cache_key):
421
+ logger.info("Notification already sent", notification_id=notification_id)
422
+ return
423
+ email_service.send(user_email, subject, body)
424
+ self._redis.setex(cache_key, 86400, "1") # 24 小时去重窗口
425
+ ```
426
+
427
+ ### 检测方法
428
+ - 写接口无 `Idempotency-Key` header 或请求内的唯一标识。
429
+ - 数据库写操作无唯一约束防止重复。
430
+ - 外部支付/通知调用无去重逻辑。
431
+ - 负载测试中重复提交产生重复数据。
432
+
433
+ ### 修复步骤
434
+ 1. 为所有写接口添加 `Idempotency-Key` header 支持。
435
+ 2. 数据库层添加唯一索引(幂等键列)。
436
+ 3. 外部调用前检查幂等键是否已使用。
437
+ 4. 使用 Redis 实现短时间窗口的去重。
438
+ 5. 编写重复提交的测试用例。
439
+
440
+ ### Agent Checklist
441
+ - [ ] 写接口支持 `Idempotency-Key`
442
+ - [ ] 数据库有唯一索引防止重复
443
+ - [ ] 支付/扣款调用有幂等保护
444
+ - [ ] 通知发送有去重机制
445
+ - [ ] 有重复提交的测试用例
446
+
447
+ ---
448
+
449
+ ## 5. 日志质量差(Poor Logging)
450
+
451
+ ### 描述
452
+ 日志缺乏结构化、缺少上下文信息(request_id、user_id),或者过度打印敏感信息(密码、Token、身份证号),或者日志级别使用不当。出问题时无法通过日志定位根因。
453
+
454
+ ### 错误示例
455
+ ```python
456
+ # 无结构化,无上下文
457
+ def process_order(order_id, user_id):
458
+ print(f"Processing order {order_id}") # 用 print 代替 logger
459
+ try:
460
+ result = payment_service.charge(order_id)
461
+ print(f"Payment done: {result}")
462
+ except Exception as e:
463
+ print(f"Error: {e}") # 无堆栈、无上下文
464
+
465
+ # 泄露敏感信息
466
+ def login(username, password):
467
+ logger.info(f"Login attempt: username={username}, password={password}") # 密码入日志
468
+ user = authenticate(username, password)
469
+ logger.info(f"User token: {user.token}") # Token 入日志
470
+
471
+ # 级别不当
472
+ def get_user(user_id):
473
+ logger.error(f"Getting user {user_id}") # 正常操作用 ERROR 级别
474
+ user = db.query(User).get(user_id)
475
+ if not user:
476
+ logger.debug(f"User {user_id} not found") # 业务错误用 DEBUG 级别
477
+ return user
478
+ ```
479
+
480
+ ### 正确示例
481
+ ```python
482
+ import structlog
483
+
484
+ logger = structlog.get_logger()
485
+
486
+ def process_order(order_id: str, user_id: str) -> Order:
487
+ log = logger.bind(order_id=order_id, user_id=user_id)
488
+ log.info("order_processing_started")
489
+
490
+ try:
491
+ result = payment_service.charge(order_id)
492
+ log.info("payment_completed", payment_id=result.id, amount=result.amount)
493
+ except PaymentError as e:
494
+ log.error("payment_failed", error_code=e.code, error_message=e.message)
495
+ raise
496
+
497
+ return order
498
+
499
+ # 敏感信息脱敏
500
+ def login(username: str, password: str):
501
+ logger.info("login_attempt", username=username) # 不记录密码
502
+ user = authenticate(username, password)
503
+ logger.info("login_success", user_id=user.id) # 不记录 Token
504
+
505
+ # 正确的日志级别
506
+ # DEBUG: 开发调试信息(请求参数、SQL 语句)
507
+ # INFO: 正常业务事件(订单创建、支付完成)
508
+ # WARNING: 可恢复的异常情况(缓存未命中、降级触发)
509
+ # ERROR: 需要关注的错误(支付失败、外部服务超时)
510
+ # CRITICAL: 系统级故障(数据库不可用、磁盘满)
511
+
512
+ # 结构化日志配置
513
+ structlog.configure(
514
+ processors=[
515
+ structlog.processors.TimeStamper(fmt="iso"),
516
+ structlog.processors.add_log_level,
517
+ structlog.processors.StackInfoRenderer(),
518
+ structlog.processors.format_exc_info,
519
+ structlog.processors.JSONRenderer(),
520
+ ],
521
+ )
522
+ ```
523
+
524
+ ### 检测方法
525
+ - 代码中使用 `print()` 作为日志。
526
+ - 日志中包含 `password`、`token`、`secret`、`credit_card` 等关键词。
527
+ - 正常流程使用 `ERROR` / `CRITICAL` 级别。
528
+ - 日志无 `request_id`、`user_id` 等上下文字段。
529
+ - `bandit` 的日志相关规则。
530
+
531
+ ### 修复步骤
532
+ 1. 将 `print()` 替换为 `structlog` / `logging` 模块。
533
+ 2. 统一日志格式为 JSON 结构化日志。
534
+ 3. 为每个请求绑定 `request_id`,贯穿整个调用链。
535
+ 4. 审查日志中的敏感信息,添加脱敏处理。
536
+ 5. 校准日志级别,确保告警系统不被噪声淹没。
537
+
538
+ ### Agent Checklist
539
+ - [ ] 无 `print()` 语句用于日志
540
+ - [ ] 使用结构化日志(JSON 格式)
541
+ - [ ] 日志包含 request_id 上下文
542
+ - [ ] 无密码 / Token / 密钥出现在日志中
543
+ - [ ] 日志级别使用正确
544
+
545
+ ---
546
+
547
+ ## 6. 配置硬编码(Hardcoded Configuration)
548
+
549
+ ### 描述
550
+ 将环境相关的配置(数据库地址、缓存地址、第三方 API URL、功能开关)硬编码在源码中,导致部署不同环境时需要修改代码。
551
+
552
+ ### 错误示例
553
+ ```python
554
+ # 硬编码环境配置
555
+ class Config:
556
+ DB_HOST = "192.168.1.100"
557
+ DB_PORT = 5432
558
+ REDIS_HOST = "192.168.1.101"
559
+ API_URL = "https://api.production.example.com"
560
+ FEATURE_NEW_CHECKOUT = True
561
+ MAX_UPLOAD_SIZE = 10 * 1024 * 1024 # 10MB
562
+
563
+ # 根据环境名称 if-else
564
+ import os
565
+ env = os.getenv("ENV", "dev")
566
+ if env == "production":
567
+ DB_HOST = "prod-db.internal"
568
+ CACHE_TTL = 3600
569
+ elif env == "staging":
570
+ DB_HOST = "staging-db.internal"
571
+ CACHE_TTL = 600
572
+ else:
573
+ DB_HOST = "localhost"
574
+ CACHE_TTL = 60
575
+ ```
576
+
577
+ ### 正确示例
578
+ ```python
579
+ from pydantic_settings import BaseSettings
580
+ from pydantic import Field
581
+
582
+ class Settings(BaseSettings):
583
+ """所有配置从环境变量加载,支持 .env 文件覆盖。"""
584
+
585
+ # 数据库
586
+ db_host: str = "localhost"
587
+ db_port: int = 5432
588
+ db_name: str = "myapp"
589
+ db_user: str = "app_user"
590
+ db_password: str
591
+
592
+ # Redis
593
+ redis_url: str = "redis://localhost:6379/0"
594
+ cache_ttl: int = Field(default=300, description="Cache TTL in seconds")
595
+
596
+ # 外部服务
597
+ payment_api_url: str
598
+ notification_api_url: str
599
+
600
+ # 功能开关
601
+ feature_new_checkout: bool = False
602
+ max_upload_size_mb: int = 10
603
+
604
+ @property
605
+ def database_url(self) -> str:
606
+ return f"postgresql://{self.db_user}:{self.db_password}@{self.db_host}:{self.db_port}/{self.db_name}"
607
+
608
+ @property
609
+ def max_upload_size_bytes(self) -> int:
610
+ return self.max_upload_size_mb * 1024 * 1024
611
+
612
+ model_config = {"env_file": ".env", "env_prefix": "APP_"}
613
+
614
+ settings = Settings()
615
+ ```
616
+
617
+ ### 检测方法
618
+ - 源码中包含 IP 地址、域名、端口号字面量。
619
+ - 代码中有 `if env == "production"` 分支。
620
+ - 修改配置值需要修改源码并重新部署。
621
+ - 不同环境的配置差异通过代码分支实现。
622
+
623
+ ### 修复步骤
624
+ 1. 使用 Pydantic Settings / python-decouple / 12-Factor 方式从环境变量加载配置。
625
+ 2. 为所有配置项提供合理的开发环境默认值。
626
+ 3. 使用 `.env` 文件管理本地开发配置。
627
+ 4. 功能开关使用配置中心或环境变量,不硬编码。
628
+ 5. 将配置验证放在应用启动阶段,缺少必需配置时 fail-fast。
629
+
630
+ ### Agent Checklist
631
+ - [ ] 环境相关配置从环境变量加载
632
+ - [ ] 无 IP 地址 / 域名硬编码在源码中
633
+ - [ ] 无 `if env == "production"` 代码分支
634
+ - [ ] 应用启动时验证必需配置
635
+ - [ ] 功能开关通过配置管理
636
+
637
+ ---
638
+
639
+ ## 全局 Agent Checklist
640
+
641
+ | 检查项 | 阈值 | 工具 |
642
+ |--------|------|------|
643
+ | Controller 方法行数 | <= 20 | Code Review |
644
+ | HTTP 调用无 timeout | 0 处 | `grep timeout` |
645
+ | `except: pass` | 0 处 | `bandit` B110 |
646
+ | 写接口无幂等保护 | 0 个 | API Review |
647
+ | `print()` 日志 | 0 处 | `ruff` T201 |
648
+ | 硬编码 IP / 域名 | 0 处 | Code Review |