soloforge 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 (329) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +203 -0
  3. package/dist/adapters/claude_code/claude_md.d.ts +3 -0
  4. package/dist/adapters/claude_code/claude_md.d.ts.map +1 -0
  5. package/dist/adapters/claude_code/claude_md.js +79 -0
  6. package/dist/adapters/claude_code/claude_md.js.map +1 -0
  7. package/dist/adapters/claude_code/hooks.d.ts +3 -0
  8. package/dist/adapters/claude_code/hooks.d.ts.map +1 -0
  9. package/dist/adapters/claude_code/hooks.js +30 -0
  10. package/dist/adapters/claude_code/hooks.js.map +1 -0
  11. package/dist/adapters/claude_code/server.d.ts +10 -0
  12. package/dist/adapters/claude_code/server.d.ts.map +1 -0
  13. package/dist/adapters/claude_code/server.js +75 -0
  14. package/dist/adapters/claude_code/server.js.map +1 -0
  15. package/dist/adapters/claude_code/tools.d.ts +15 -0
  16. package/dist/adapters/claude_code/tools.d.ts.map +1 -0
  17. package/dist/adapters/claude_code/tools.js +758 -0
  18. package/dist/adapters/claude_code/tools.js.map +1 -0
  19. package/dist/adapters/trae/trae_config.d.ts +2 -0
  20. package/dist/adapters/trae/trae_config.d.ts.map +1 -0
  21. package/dist/adapters/trae/trae_config.js +22 -0
  22. package/dist/adapters/trae/trae_config.js.map +1 -0
  23. package/dist/adapters/trae/trae_rules.d.ts +3 -0
  24. package/dist/adapters/trae/trae_rules.d.ts.map +1 -0
  25. package/dist/adapters/trae/trae_rules.js +85 -0
  26. package/dist/adapters/trae/trae_rules.js.map +1 -0
  27. package/dist/bin/soloforge.d.ts +3 -0
  28. package/dist/bin/soloforge.d.ts.map +1 -0
  29. package/dist/bin/soloforge.js +353 -0
  30. package/dist/bin/soloforge.js.map +1 -0
  31. package/dist/engine/adr_recorder.d.ts +13 -0
  32. package/dist/engine/adr_recorder.d.ts.map +1 -0
  33. package/dist/engine/adr_recorder.js +132 -0
  34. package/dist/engine/adr_recorder.js.map +1 -0
  35. package/dist/engine/change_coordinator.d.ts +17 -0
  36. package/dist/engine/change_coordinator.d.ts.map +1 -0
  37. package/dist/engine/change_coordinator.js +138 -0
  38. package/dist/engine/change_coordinator.js.map +1 -0
  39. package/dist/engine/classifier.d.ts +7 -0
  40. package/dist/engine/classifier.d.ts.map +1 -0
  41. package/dist/engine/classifier.js +135 -0
  42. package/dist/engine/classifier.js.map +1 -0
  43. package/dist/engine/code_reviewer.d.ts +15 -0
  44. package/dist/engine/code_reviewer.d.ts.map +1 -0
  45. package/dist/engine/code_reviewer.js +371 -0
  46. package/dist/engine/code_reviewer.js.map +1 -0
  47. package/dist/engine/confidence_scorer.d.ts +11 -0
  48. package/dist/engine/confidence_scorer.d.ts.map +1 -0
  49. package/dist/engine/confidence_scorer.js +30 -0
  50. package/dist/engine/confidence_scorer.js.map +1 -0
  51. package/dist/engine/contract_guard.d.ts +10 -0
  52. package/dist/engine/contract_guard.d.ts.map +1 -0
  53. package/dist/engine/contract_guard.js +471 -0
  54. package/dist/engine/contract_guard.js.map +1 -0
  55. package/dist/engine/convention_detector.d.ts +7 -0
  56. package/dist/engine/convention_detector.d.ts.map +1 -0
  57. package/dist/engine/convention_detector.js +93 -0
  58. package/dist/engine/convention_detector.js.map +1 -0
  59. package/dist/engine/debt_reporter.d.ts +4 -0
  60. package/dist/engine/debt_reporter.d.ts.map +1 -0
  61. package/dist/engine/debt_reporter.js +67 -0
  62. package/dist/engine/debt_reporter.js.map +1 -0
  63. package/dist/engine/debt_tracker.d.ts +20 -0
  64. package/dist/engine/debt_tracker.d.ts.map +1 -0
  65. package/dist/engine/debt_tracker.js +152 -0
  66. package/dist/engine/debt_tracker.js.map +1 -0
  67. package/dist/engine/debugger.d.ts +3 -0
  68. package/dist/engine/debugger.d.ts.map +1 -0
  69. package/dist/engine/debugger.js +291 -0
  70. package/dist/engine/debugger.js.map +1 -0
  71. package/dist/engine/delivery.d.ts +15 -0
  72. package/dist/engine/delivery.d.ts.map +1 -0
  73. package/dist/engine/delivery.js +182 -0
  74. package/dist/engine/delivery.js.map +1 -0
  75. package/dist/engine/dependency_scanner.d.ts +13 -0
  76. package/dist/engine/dependency_scanner.d.ts.map +1 -0
  77. package/dist/engine/dependency_scanner.js +275 -0
  78. package/dist/engine/dependency_scanner.js.map +1 -0
  79. package/dist/engine/evolver.d.ts +15 -0
  80. package/dist/engine/evolver.d.ts.map +1 -0
  81. package/dist/engine/evolver.js +167 -0
  82. package/dist/engine/evolver.js.map +1 -0
  83. package/dist/engine/failure_classifier.d.ts +11 -0
  84. package/dist/engine/failure_classifier.d.ts.map +1 -0
  85. package/dist/engine/failure_classifier.js +120 -0
  86. package/dist/engine/failure_classifier.js.map +1 -0
  87. package/dist/engine/feasibility_checker.d.ts +6 -0
  88. package/dist/engine/feasibility_checker.d.ts.map +1 -0
  89. package/dist/engine/feasibility_checker.js +88 -0
  90. package/dist/engine/feasibility_checker.js.map +1 -0
  91. package/dist/engine/git_deps.d.ts +37 -0
  92. package/dist/engine/git_deps.d.ts.map +1 -0
  93. package/dist/engine/git_deps.js +3 -0
  94. package/dist/engine/git_deps.js.map +1 -0
  95. package/dist/engine/impact_analyzer.d.ts +10 -0
  96. package/dist/engine/impact_analyzer.d.ts.map +1 -0
  97. package/dist/engine/impact_analyzer.js +171 -0
  98. package/dist/engine/impact_analyzer.js.map +1 -0
  99. package/dist/engine/intent_expander.d.ts +17 -0
  100. package/dist/engine/intent_expander.d.ts.map +1 -0
  101. package/dist/engine/intent_expander.js +447 -0
  102. package/dist/engine/intent_expander.js.map +1 -0
  103. package/dist/engine/knowledge_manager.d.ts +76 -0
  104. package/dist/engine/knowledge_manager.d.ts.map +1 -0
  105. package/dist/engine/knowledge_manager.js +781 -0
  106. package/dist/engine/knowledge_manager.js.map +1 -0
  107. package/dist/engine/migration_guard.d.ts +3 -0
  108. package/dist/engine/migration_guard.d.ts.map +1 -0
  109. package/dist/engine/migration_guard.js +235 -0
  110. package/dist/engine/migration_guard.js.map +1 -0
  111. package/dist/engine/observability.d.ts +33 -0
  112. package/dist/engine/observability.d.ts.map +1 -0
  113. package/dist/engine/observability.js +312 -0
  114. package/dist/engine/observability.js.map +1 -0
  115. package/dist/engine/onboarding.d.ts +27 -0
  116. package/dist/engine/onboarding.d.ts.map +1 -0
  117. package/dist/engine/onboarding.js +362 -0
  118. package/dist/engine/onboarding.js.map +1 -0
  119. package/dist/engine/prompt_experiment.d.ts +18 -0
  120. package/dist/engine/prompt_experiment.d.ts.map +1 -0
  121. package/dist/engine/prompt_experiment.js +127 -0
  122. package/dist/engine/prompt_experiment.js.map +1 -0
  123. package/dist/engine/resilience.d.ts +20 -0
  124. package/dist/engine/resilience.d.ts.map +1 -0
  125. package/dist/engine/resilience.js +210 -0
  126. package/dist/engine/resilience.js.map +1 -0
  127. package/dist/engine/scaffolder.d.ts +9 -0
  128. package/dist/engine/scaffolder.d.ts.map +1 -0
  129. package/dist/engine/scaffolder.js +222 -0
  130. package/dist/engine/scaffolder.js.map +1 -0
  131. package/dist/engine/scope_controller.d.ts +3 -0
  132. package/dist/engine/scope_controller.d.ts.map +1 -0
  133. package/dist/engine/scope_controller.js +121 -0
  134. package/dist/engine/scope_controller.js.map +1 -0
  135. package/dist/engine/task_context.d.ts +34 -0
  136. package/dist/engine/task_context.d.ts.map +1 -0
  137. package/dist/engine/task_context.js +321 -0
  138. package/dist/engine/task_context.js.map +1 -0
  139. package/dist/engine/task_planner.d.ts +11 -0
  140. package/dist/engine/task_planner.d.ts.map +1 -0
  141. package/dist/engine/task_planner.js +267 -0
  142. package/dist/engine/task_planner.js.map +1 -0
  143. package/dist/engine/team_awareness.d.ts +12 -0
  144. package/dist/engine/team_awareness.d.ts.map +1 -0
  145. package/dist/engine/team_awareness.js +121 -0
  146. package/dist/engine/team_awareness.js.map +1 -0
  147. package/dist/engine/test_generator.d.ts +9 -0
  148. package/dist/engine/test_generator.d.ts.map +1 -0
  149. package/dist/engine/test_generator.js +241 -0
  150. package/dist/engine/test_generator.js.map +1 -0
  151. package/dist/engine/test_quality.d.ts +9 -0
  152. package/dist/engine/test_quality.d.ts.map +1 -0
  153. package/dist/engine/test_quality.js +256 -0
  154. package/dist/engine/test_quality.js.map +1 -0
  155. package/dist/engine/traceability.d.ts +3 -0
  156. package/dist/engine/traceability.d.ts.map +1 -0
  157. package/dist/engine/traceability.js +137 -0
  158. package/dist/engine/traceability.js.map +1 -0
  159. package/dist/engine/verifier.d.ts +3 -0
  160. package/dist/engine/verifier.d.ts.map +1 -0
  161. package/dist/engine/verifier.js +202 -0
  162. package/dist/engine/verifier.js.map +1 -0
  163. package/dist/engine/workspace_manager.d.ts +29 -0
  164. package/dist/engine/workspace_manager.d.ts.map +1 -0
  165. package/dist/engine/workspace_manager.js +77 -0
  166. package/dist/engine/workspace_manager.js.map +1 -0
  167. package/dist/git/operations.d.ts +57 -0
  168. package/dist/git/operations.d.ts.map +1 -0
  169. package/dist/git/operations.js +215 -0
  170. package/dist/git/operations.js.map +1 -0
  171. package/dist/index.d.ts +3 -0
  172. package/dist/index.d.ts.map +1 -0
  173. package/dist/index.js +24 -0
  174. package/dist/index.js.map +1 -0
  175. package/dist/knowledge/conflict_detector.d.ts +6 -0
  176. package/dist/knowledge/conflict_detector.d.ts.map +1 -0
  177. package/dist/knowledge/conflict_detector.js +19 -0
  178. package/dist/knowledge/conflict_detector.js.map +1 -0
  179. package/dist/knowledge/health_checker.d.ts +10 -0
  180. package/dist/knowledge/health_checker.d.ts.map +1 -0
  181. package/dist/knowledge/health_checker.js +61 -0
  182. package/dist/knowledge/health_checker.js.map +1 -0
  183. package/dist/knowledge/index_manager.d.ts +35 -0
  184. package/dist/knowledge/index_manager.d.ts.map +1 -0
  185. package/dist/knowledge/index_manager.js +209 -0
  186. package/dist/knowledge/index_manager.js.map +1 -0
  187. package/dist/knowledge/loader.d.ts +13 -0
  188. package/dist/knowledge/loader.d.ts.map +1 -0
  189. package/dist/knowledge/loader.js +161 -0
  190. package/dist/knowledge/loader.js.map +1 -0
  191. package/dist/knowledge/writer.d.ts +15 -0
  192. package/dist/knowledge/writer.d.ts.map +1 -0
  193. package/dist/knowledge/writer.js +98 -0
  194. package/dist/knowledge/writer.js.map +1 -0
  195. package/dist/types.d.ts +724 -0
  196. package/dist/types.d.ts.map +1 -0
  197. package/dist/types.js +3 -0
  198. package/dist/types.js.map +1 -0
  199. package/package.json +54 -0
  200. package/templates/config.yaml +53 -0
  201. package/templates/knowledge/acceptance_templates/Bug/345/210/206/346/236/220/346/250/241/347/211/210.md +45 -0
  202. package/templates/knowledge/acceptance_templates/POC/347/273/223/350/256/272/346/250/241/347/211/210.md +39 -0
  203. package/templates/knowledge/acceptance_templates//345/211/215/347/253/257/351/241/265/351/235/242/351/252/214/346/224/266/346/270/205/345/215/225.md +27 -0
  204. package/templates/knowledge/acceptance_templates//345/216/237/345/236/213/350/257/264/346/230/216/346/250/241/347/211/210.md +180 -0
  205. package/templates/knowledge/acceptance_templates//345/220/216/347/253/257API/351/252/214/346/224/266/346/270/205/345/215/225.md +26 -0
  206. package/templates/knowledge/acceptance_templates//345/256/211/345/205/250/345/256/241/350/256/241/346/250/241/347/211/210.md +51 -0
  207. package/templates/knowledge/acceptance_templates//346/200/247/350/203/275/345/210/206/346/236/220/346/250/241/347/211/210.md +45 -0
  208. package/templates/knowledge/acceptance_templates//346/216/245/345/217/243/345/257/271/346/216/245/346/226/271/346/241/210/346/250/241/347/211/210.md +45 -0
  209. package/templates/knowledge/acceptance_templates//346/216/245/345/217/243/350/256/276/350/256/241/346/250/241/347/211/210.md +58 -0
  210. package/templates/knowledge/acceptance_templates//346/225/205/351/232/234/345/244/215/347/233/230/346/250/241/347/211/210.md +53 -0
  211. package/templates/knowledge/acceptance_templates//346/225/260/346/215/256/345/272/223/345/217/230/346/233/264/346/226/271/346/241/210/346/250/241/347/211/210.md +45 -0
  212. package/templates/knowledge/acceptance_templates//346/225/260/346/215/256/345/272/223/345/217/230/346/233/264/351/252/214/346/224/266/346/270/205/345/215/225.md +24 -0
  213. package/templates/knowledge/acceptance_templates//346/236/266/346/236/204/350/256/276/350/256/241/346/250/241/347/211/210.md +42 -0
  214. package/templates/knowledge/acceptance_templates//346/265/213/350/257/225/350/256/241/345/210/222/346/250/241/347/211/210.md +39 -0
  215. package/templates/knowledge/acceptance_templates//350/257/246/347/273/206/350/256/276/350/256/241/346/250/241/347/211/210.md +40 -0
  216. package/templates/knowledge/acceptance_templates//350/277/201/347/247/273/350/257/204/344/274/260/346/250/241/347/211/210.md +42 -0
  217. package/templates/knowledge/acceptance_templates//351/200/232/347/224/250/350/264/250/351/207/217/351/252/214/346/224/266/346/270/205/345/215/225.md +26 -0
  218. package/templates/knowledge/acceptance_templates//351/207/215/346/236/204/346/226/271/346/241/210/346/250/241/347/211/210.md +47 -0
  219. package/templates/knowledge/acceptance_templates//351/234/200/346/261/202/345/210/206/346/236/220/346/250/241/347/211/210.md +44 -0
  220. package/templates/knowledge/domain//345/244/232/347/247/237/346/210/267.md +35 -0
  221. package/templates/knowledge/domain//345/256/241/350/256/241/346/227/245/345/277/227.md +34 -0
  222. package/templates/knowledge/domain//345/257/274/345/205/245/345/257/274/345/207/272/350/247/204/345/210/231.md +37 -0
  223. package/templates/knowledge/domain//345/267/245/344/275/234/346/265/201/345/274/225/346/223/216.md +37 -0
  224. package/templates/knowledge/domain//346/212/245/350/241/250/347/273/237/350/256/241.md +36 -0
  225. package/templates/knowledge/domain//346/224/257/344/273/230/350/247/204/345/210/231.md +38 -0
  226. package/templates/knowledge/domain//346/225/260/346/215/256/346/235/203/351/231/220.md +34 -0
  227. package/templates/knowledge/domain//351/200/232/347/224/250/346/234/272/346/242/260/346/235/241/346/254/276.md +24 -0
  228. package/templates/knowledge/domain//351/200/232/347/237/245/350/247/204/345/210/231.md +36 -0
  229. package/templates/knowledge/procedures/Figma/344/272/244/344/273/230/346/265/201/347/250/213.md +35 -0
  230. package/templates/knowledge/procedures/Schema/345/217/230/346/233/264/346/265/201/346/260/264/347/272/277.md +28 -0
  231. package/templates/knowledge/procedures//344/273/243/347/240/201/351/227/250/347/246/201/346/265/201/347/250/213.md +33 -0
  232. package/templates/knowledge/procedures//344/273/273/345/212/241/346/213/206/350/247/243/346/265/201/347/250/213.md +31 -0
  233. package/templates/knowledge/procedures//345/212/237/350/203/275/345/274/200/345/217/221/346/265/201/347/250/213.md +37 -0
  234. package/templates/knowledge/procedures//345/256/211/345/205/250/345/212/240/345/233/272/346/265/201/346/260/264/347/272/277.md +43 -0
  235. package/templates/knowledge/procedures//346/200/247/350/203/275/346/265/201/346/260/264/347/272/277.md +27 -0
  236. package/templates/knowledge/procedures//346/216/245/345/217/243/351/233/206/346/210/220/346/265/201/346/260/264/347/272/277.md +46 -0
  237. package/templates/knowledge/procedures//346/225/260/346/215/256/345/272/223/350/277/201/347/247/273/346/265/201/347/250/213.md +38 -0
  238. package/templates/knowledge/procedures//346/236/266/346/236/204/350/256/276/350/256/241/346/265/201/347/250/213.md +30 -0
  239. package/templates/knowledge/procedures//346/246/202/345/277/265/351/252/214/350/257/201/346/265/201/346/260/264/347/272/277.md +24 -0
  240. package/templates/knowledge/procedures//347/237/245/350/257/206/347/273/264/346/212/244/346/265/201/346/260/264/347/272/277.md +40 -0
  241. package/templates/knowledge/procedures//347/264/247/346/200/245/344/277/256/345/244/215/346/265/201/346/260/264/347/272/277.md +45 -0
  242. package/templates/knowledge/procedures//347/264/247/346/200/245/344/277/256/345/244/215/346/265/201/347/250/213.md +33 -0
  243. package/templates/knowledge/procedures//347/274/272/351/231/267/344/277/256/345/244/215/346/265/201/346/260/264/347/272/277.md +28 -0
  244. package/templates/knowledge/procedures//350/257/246/347/273/206/350/256/276/350/256/241/346/265/201/347/250/213.md +29 -0
  245. package/templates/knowledge/procedures//350/260/203/350/257/225/346/216/222/346/237/245/346/265/201/347/250/213.md +43 -0
  246. package/templates/knowledge/procedures//350/277/201/347/247/273/346/265/201/346/260/264/347/272/277.md +27 -0
  247. package/templates/knowledge/procedures//351/203/250/347/275/262/345/217/221/345/270/203/346/265/201/347/250/213.md +45 -0
  248. package/templates/knowledge/procedures//351/207/215/346/236/204/346/265/201/346/260/264/347/272/277.md +27 -0
  249. package/templates/knowledge/procedures//351/233/206/346/210/220/351/252/214/350/257/201/346/265/201/347/250/213.md +36 -0
  250. package/templates/knowledge/procedures//351/234/200/346/261/202/346/276/204/346/270/205/346/265/201/347/250/213.md +32 -0
  251. package/templates/knowledge/procedures//351/252/214/346/224/266/346/265/213/350/257/225/350/247/204/345/210/222.md +40 -0
  252. package/templates/knowledge/procedures//351/252/214/350/257/201/350/256/241/345/210/222/346/265/201/347/250/213.md +32 -0
  253. package/templates/knowledge/product_profiles/b2b-internal.yaml +35 -0
  254. package/templates/knowledge/product_profiles/b2c.yaml +37 -0
  255. package/templates/knowledge/product_profiles/saas.yaml +35 -0
  256. package/templates/knowledge/review_rules//345/256/211/345/205/250/345/256/241/346/237/245/350/247/204/345/210/231.md +79 -0
  257. package/templates/knowledge/review_rules//345/271/266/345/217/221/345/256/241/346/237/245/350/247/204/345/210/231.md +67 -0
  258. package/templates/knowledge/review_rules//346/200/247/350/203/275/345/256/241/346/237/245/350/247/204/345/210/231.md +61 -0
  259. package/templates/knowledge/review_rules//346/216/245/345/217/243/345/245/221/347/272/246/345/256/241/346/237/245/350/247/204/345/210/231.md +67 -0
  260. package/templates/knowledge/review_rules//346/236/266/346/236/204/345/256/241/346/237/245/350/247/204/345/210/231.md +62 -0
  261. package/templates/knowledge/review_rules//350/264/250/351/207/217/345/256/241/346/237/245/350/247/204/345/210/231.md +80 -0
  262. package/templates/patterns/API/350/256/276/350/256/241/350/247/204/350/214/203.md +31 -0
  263. package/templates/patterns/Docker/351/203/250/347/275/262/350/247/204/350/214/203.md +31 -0
  264. package/templates/patterns/Git/346/223/215/344/275/234/350/247/204/350/214/203.md +31 -0
  265. package/templates/patterns/N/345/212/2401/346/237/245/350/257/242/350/247/204/350/214/203.md +32 -0
  266. package/templates/patterns/React/345/210/227/350/241/250/350/241/250/346/240/274/350/247/204/350/214/203.md +29 -0
  267. package/templates/patterns/React/346/216/245/345/217/243/351/233/206/346/210/220/350/247/204/350/214/203.md +28 -0
  268. package/templates/patterns/React/347/212/266/346/200/201/347/256/241/347/220/206/350/247/204/350/214/203.md +28 -0
  269. package/templates/patterns/React/347/273/204/344/273/266/350/247/204/350/214/203.md +28 -0
  270. package/templates/patterns/React/350/241/250/345/215/225/350/247/204/350/214/203.md +29 -0
  271. package/templates/patterns/React/350/267/257/347/224/261/350/247/204/350/214/203.md +29 -0
  272. package/templates/patterns/Schema/345/205/274/345/256/271/350/247/204/350/214/203.md +28 -0
  273. package/templates/patterns/Vue/347/212/266/346/200/201/347/256/241/347/220/206/350/247/204/350/214/203.md +28 -0
  274. package/templates/patterns/Vue/347/273/204/344/273/266/350/247/204/350/214/203.md +28 -0
  275. package/templates/patterns/Vue/350/267/257/347/224/261/350/247/204/350/214/203.md +29 -0
  276. package/templates/patterns//344/272/213/344/273/266/351/251/261/345/212/250/350/247/204/350/214/203.md +32 -0
  277. package/templates/patterns//344/272/213/345/212/241/346/250/241/345/274/217/350/247/204/350/214/203.md +28 -0
  278. package/templates/patterns//344/274/230/351/233/205/345/201/234/346/234/272/350/247/204/350/214/203.md +30 -0
  279. package/templates/patterns//345/205/250/346/240/210/346/265/201/347/250/213/344/277/256/345/244/215.md +31 -0
  280. package/templates/patterns//345/210/206/351/241/265/346/237/245/350/257/242/350/247/204/350/214/203.md +27 -0
  281. package/templates/patterns//345/211/215/347/253/257/346/200/247/350/203/275/350/247/204/350/214/203.md +33 -0
  282. package/templates/patterns//345/221/275/345/220/215/350/247/204/350/214/203.md +32 -0
  283. package/templates/patterns//345/233/275/351/231/205/345/214/226/350/247/204/350/214/203.md +31 -0
  284. package/templates/patterns//345/242/236/345/210/240/346/224/271/346/237/245/350/247/204/350/214/203.md +31 -0
  285. package/templates/patterns//345/244/226/351/203/250/344/276/235/350/265/226/350/247/204/350/214/203.md +29 -0
  286. package/templates/patterns//345/245/221/347/272/246/345/205/274/345/256/271/350/247/204/350/214/203.md +28 -0
  287. package/templates/patterns//345/256/232/346/227/266/344/273/273/345/212/241/350/247/204/350/214/203.md +25 -0
  288. package/templates/patterns//345/256/236/346/227/266/346/216/250/351/200/201/350/247/204/350/214/203.md +33 -0
  289. package/templates/patterns//345/267/245/347/250/213/347/272/252/345/276/213.md +39 -0
  290. package/templates/patterns//345/271/266/345/217/221/346/216/247/345/210/266/350/247/204/350/214/203.md +34 -0
  291. package/templates/patterns//345/274/202/346/255/245/345/257/274/345/207/272/350/247/204/350/214/203.md +27 -0
  292. package/templates/patterns//346/216/245/345/217/243/345/245/221/347/272/246/350/247/204/350/214/203.md +30 -0
  293. package/templates/patterns//346/220/234/347/264/242/346/250/241/345/274/217/350/247/204/350/214/203.md +32 -0
  294. package/templates/patterns//346/225/260/346/215/256/351/232/220/347/247/201/350/247/204/350/214/203.md +31 -0
  295. package/templates/patterns//346/226/207/344/273/266/344/270/212/344/274/240/350/247/204/350/214/203.md +31 -0
  296. package/templates/patterns//346/227/240/351/232/234/347/242/215/350/247/204/350/214/203.md +33 -0
  297. package/templates/patterns//346/227/245/345/277/227/350/247/204/350/214/203.md +31 -0
  298. package/templates/patterns//346/235/203/351/231/220/350/256/244/350/257/201/350/247/204/350/214/203.md +35 -0
  299. package/templates/patterns//346/236/266/346/236/204/347/272/242/347/272/277.md +30 -0
  300. package/templates/patterns//346/265/213/350/257/225/350/264/250/351/207/217/350/247/204/350/214/203.md +30 -0
  301. package/templates/patterns//347/206/224/346/226/255/351/231/215/347/272/247/350/247/204/350/214/203.md +33 -0
  302. package/templates/patterns//347/212/266/346/200/201/346/265/201/350/275/254/350/247/204/350/214/203.md +29 -0
  303. package/templates/patterns//347/272/246/346/235/237/345/256/236/347/216/260/350/247/204/350/214/203.md +32 -0
  304. package/templates/patterns//347/274/223/345/255/230/347/255/226/347/225/245/350/247/204/350/214/203.md +31 -0
  305. package/templates/patterns//347/274/226/347/240/201/350/264/250/351/207/217/350/247/204/350/214/203.md +31 -0
  306. package/templates/patterns//347/274/272/351/231/267/347/256/241/347/220/206/350/247/204/350/214/203.md +30 -0
  307. package/templates/patterns//350/260/203/350/257/225/346/226/271/346/263/225/350/256/272.md +28 -0
  308. package/templates/patterns//350/276/223/345/205/245/346/240/241/351/252/214/350/247/204/350/214/203.md +30 -0
  309. package/templates/patterns//351/224/231/350/257/257/345/244/204/347/220/206/350/247/204/350/214/203.md +32 -0
  310. package/templates/patterns//351/224/231/350/257/257/350/276/271/347/225/214/350/247/204/350/214/203.md +24 -0
  311. package/templates/patterns//351/242/206/345/237/237/351/251/261/345/212/250/350/256/276/350/256/241/350/247/204/350/214/203.md +29 -0
  312. package/templates/scaffolds/react/Form.tsx.hbs +16 -0
  313. package/templates/scaffolds/react/List.tsx.hbs +28 -0
  314. package/templates/scaffolds/react/Page.test.tsx.hbs +10 -0
  315. package/templates/scaffolds/react/Page.tsx.hbs +14 -0
  316. package/templates/scaffolds/react/README.md.hbs +44 -0
  317. package/templates/scaffolds/react/service.ts.hbs +37 -0
  318. package/templates/scaffolds/react/types.ts.hbs +6 -0
  319. package/templates/scaffolds/react/use{{ModuleName}}.ts.hbs +88 -0
  320. package/templates/scaffolds/spring-boot/ApiContract.md.hbs +110 -0
  321. package/templates/scaffolds/spring-boot/Controller.java.hbs +43 -0
  322. package/templates/scaffolds/spring-boot/DTO.java.hbs +9 -0
  323. package/templates/scaffolds/spring-boot/Entity.java.hbs +12 -0
  324. package/templates/scaffolds/spring-boot/ErrorCode.java.hbs +28 -0
  325. package/templates/scaffolds/spring-boot/Mapper.java.hbs +9 -0
  326. package/templates/scaffolds/spring-boot/PageResponse.java.hbs +29 -0
  327. package/templates/scaffolds/spring-boot/Service.java.hbs +12 -0
  328. package/templates/scaffolds/spring-boot/ServiceImpl.java.hbs +48 -0
  329. package/templates/scaffolds/spring-boot/ServiceTest.java.hbs +22 -0
@@ -0,0 +1,67 @@
1
+ ---
2
+ name: api-contract-rules
3
+ type: review_rule
4
+ when: 代码审查, review, 接口契约检查, API规范检查
5
+ scope: [backend]
6
+ products: ["*"]
7
+ ---
8
+
9
+ ## API-01: Controller 返回 Entity 而非 DTO
10
+ pattern: "ResponseEntity<Entity>|ResponseEntity<\\s*$"
11
+ severity: warning
12
+ scope: backend
13
+ description: 禁止直接返回数据库 Entity,必须通过 DTO/VO 转换,防止敏感字段泄漏和结构耦合
14
+
15
+ ## API-02: 缺少 @Transactional 的写操作
16
+ pattern: "@(PostMapping|PutMapping|DeleteMapping|PatchMapping)"
17
+ severity: warning
18
+ scope: backend
19
+ description: 写操作 Service 方法必须标注 @Transactional(rollbackFor = Exception.class)
20
+
21
+ ## API-03: 接口缺少权限注解
22
+ pattern: "@(PostMapping|PutMapping|DeleteMapping)"
23
+ severity: warning
24
+ scope: backend
25
+ description: 写接口必须有 @PreAuthorize 或 @Secured 注解,禁止裸露写操作
26
+
27
+ ## API-04: 硬编码分页参数
28
+ pattern: "LIMIT\\s+\\d+|pageSize\\s*=\\s*\\d{4,}"
29
+ severity: warning
30
+ scope: backend
31
+ description: 分页参数禁止硬编码大数字,pageSize 上限不超过 100
32
+
33
+ ## API-05: 缺少参数校验注解
34
+ pattern: "@RequestBody\\s+\\w+\\s+\\w+"
35
+ severity: info
36
+ scope: backend
37
+ description: @RequestBody 参数应搭配 @Valid 或 @Validated 注解触发校验
38
+
39
+ ## API-06: 接口路径不符合 RESTful 规范
40
+ pattern: "@(Get|Post|Put|Delete)Mapping.*(/get|/query|/add|/update|/delete|/list)"
41
+ severity: info
42
+ scope: backend
43
+ description: 接口路径应使用资源名词 + HTTP 方法语义,避免 /getUser、/deleteOrder 等动词路径
44
+
45
+ ## API-07: 接口缺少统一响应包装
46
+ pattern: /ResponseEntity<\s*(?!ApiResult|Result|R<)/
47
+ severity: warning
48
+ scope: backend
49
+ description: 接口返回值必须使用统一响应包装(如 Result<T>),禁止直接返回裸数据或 ResponseEntity
50
+
51
+ ## API-08: 分页接口返回非标准结构
52
+ pattern: /Page(?:Info|able)|PageRequest/
53
+ severity: info
54
+ scope: backend
55
+ description: 分页接口必须返回标准结构(total、list、pageNum、pageSize),禁止自定义分页格式
56
+
57
+ ## API-09: 缺少接口版本号
58
+ pattern: /@(?:Get|Post|Put|Delete)Mapping\s*\(\s*"\/(?!v\d)/
59
+ severity: info
60
+ scope: backend
61
+ description: API 路径应包含版本号前缀(如 /api/v1/),便于后续接口演进和兼容
62
+
63
+ ## API-10: 接口缺少 Swagger/OpenAPI 文档注解
64
+ pattern: /@(?:Get|Post|Put|Delete)Mapping\s*\(/
65
+ severity: info
66
+ scope: backend
67
+ description: 接口必须添加 @Operation/@Api 注解,保证 API 文档自动生成
@@ -0,0 +1,62 @@
1
+ ---
2
+ name: architecture-rules
3
+ type: review_rule
4
+ when: 代码审查, review, 架构检查, 设计审查
5
+ scope: [backend, frontend]
6
+ products: ["*"]
7
+ ---
8
+
9
+ ## ARC-01: Controller 包含业务逻辑
10
+ pattern: /@(?:RestController|Controller)[\s\S]*?public\s+\w+\s+\w+\s*\([^)]*\)\s*\{[\s\S]*?(?:if\s*\(.*[><=!]|for\s*\(|while\s*\().*(?:calculate|compute|validate)/
11
+ severity: warning
12
+ scope: backend
13
+ description: Controller 层禁止包含业务逻辑(if/else 分支、计算、校验),必须下沉到 Service 层
14
+
15
+ ## ARC-02: Entity 直接暴露给外部
16
+ pattern: /(?:ResponseEntity|ResponseBody).*<.*Entity>/
17
+ severity: warning
18
+ scope: backend
19
+ description: Controller 返回类型禁止使用 Entity,必须通过 DTO/VO 转换,防止结构耦合和敏感字段泄漏
20
+
21
+ ## ARC-03: 缺少 @Transactional 注解的写操作
22
+ pattern: /public\s+\w+\s+(?:save|create|update|delete|insert|remove)\w*\s*\(/
23
+ severity: warning
24
+ scope: backend
25
+ description: 写操作 Service 方法必须标注 @Transactional(rollbackFor = Exception.class)
26
+
27
+ ## ARC-04: 未使用依赖注入直接 new 服务对象
28
+ pattern: /new\s+\w*(?:Service|Repository|Mapper|Dao|Manager)\s*\(/
29
+ severity: warning
30
+ scope: backend
31
+ description: 禁止手动 new Service/Repository 实例,必须通过构造器注入或 @Autowired
32
+
33
+ ## ARC-05: 前端组件文件超过 300 行应拆分
34
+ pattern: //
35
+ severity: info
36
+ scope: frontend
37
+ check: lines
38
+ description: 单个组件文件超过 300 行时应拆分为子组件,保持单一职责
39
+
40
+ ## ARC-06: API 调用未封装到 service 层
41
+ pattern: /(?:fetch|axios)\s*\.\s*(?:get|post|put|delete)\s*\(/
42
+ severity: warning
43
+ scope: frontend
44
+ description: HTTP 调用禁止直接写在组件中,必须封装到独立的 service/API 层
45
+
46
+ ## ARC-07: 循环依赖导致启动失败
47
+ pattern: /@Autowired.*@Lazy|@Lazy\s+@Autowired/
48
+ severity: warning
49
+ scope: backend
50
+ description: 使用 @Lazy 解决循环依赖是临时方案,应重构消除循环依赖
51
+
52
+ ## ARC-08: Service 层直接操作 HttpServletRequest/Response
53
+ pattern: /(?:HttpServletRequest|HttpServletResponse)\s/
54
+ severity: warning
55
+ scope: backend
56
+ description: Service 层禁止依赖 Servlet API,应通过参数 DTO 传递数据
57
+
58
+ ## ARC-09: 未配置全局异常处理器
59
+ pattern: /@(?:RestControllerAdvice|ControllerAdvice)/
60
+ severity: info
61
+ scope: backend
62
+ description: 项目必须有全局异常处理器(@RestControllerAdvice),统一错误响应格式
@@ -0,0 +1,80 @@
1
+ ---
2
+ name: quality-rules
3
+ type: review_rule
4
+ when: 代码审查, review, 质量检查, 代码质量
5
+ scope: [backend, frontend]
6
+ products: ["*"]
7
+ ---
8
+
9
+ ## QUA-01: 生产代码包含 console.log 调试输出
10
+ pattern: /console\.log\s*\(/
11
+ severity: warning
12
+ scope: "!test"
13
+ description: 生产代码禁止保留 console.log,应使用正式日志框架并按级别输出
14
+
15
+ ## QUA-02: TypeScript 使用 any 类型
16
+ pattern: /:\s*any\b|as\s+any\b|<any>/
17
+ severity: info
18
+ scope: frontend
19
+ description: 禁止使用 any 类型,应定义具体的 TypeScript 接口
20
+
21
+ ## QUA-03: 魔法数字未定义为常量
22
+ pattern: /(?:if|while|return)\s*\(.*[^\w>!=]\d{2,}[^\w.]/
23
+ severity: info
24
+ scope: [backend, frontend]
25
+ description: 代码中的数字常量应提取为命名常量,提高可读性和可维护性
26
+
27
+ ## QUA-04: 硬编码的 URL 或 IP 地址
28
+ pattern: /https?:\/\/(?:localhost|127\.0\.0\.1|192\.168|10\.\d+\.\d+)\b/
29
+ severity: warning
30
+ scope: [backend, frontend]
31
+ description: 服务地址禁止硬编码,必须使用环境变量或配置文件管理
32
+
33
+ ## QUA-05: catch 块吞掉异常不处理
34
+ pattern: /catch\s*\([^)]*\)\s*\{\s*\}/
35
+ severity: warning
36
+ scope: [backend, frontend]
37
+ description: 空的 catch 块会隐藏错误,至少需要记录日志或明确注释忽略原因
38
+
39
+ ## QUA-06: 注释掉的代码块(超过 3 行)
40
+ pattern: /^\s*\/\/\s*(?:import|export|const|let|var|function|class|public|private)\b/
41
+ severity: info
42
+ scope: [backend, frontend]
43
+ description: 注释掉的代码应删除,需要时从版本控制中恢复
44
+
45
+ ## QUA-07: System.out.println 替代日志框架
46
+ pattern: /System\.out\.print/
47
+ severity: warning
48
+ scope: backend
49
+ description: 禁止使用 System.out.println,必须使用 SLF4J/Log4j 等日志框架
50
+
51
+ ## QUA-08: 空 catch 块中无日志记录
52
+ pattern: /catch\s*\([^)]*\)\s*\{[^}]*\}/
53
+ severity: warning
54
+ scope: [backend, frontend]
55
+ description: catch 块中必须至少包含日志记录,不允许静默忽略异常
56
+
57
+ ## QUA-09: TODO/FIXME/HACK 注释未跟踪
58
+ pattern: /(?:TODO|FIXME|HACK|XXX)\s*[:\(]/
59
+ severity: info
60
+ scope: [backend, frontend]
61
+ description: TODO/FIXME 注释必须关联 issue 编号,禁止无跟踪的技术债标记
62
+
63
+ ## QUA-10: 单元测试缺少断言
64
+ pattern: /@Test[\s\S]*?(?:expect|assert|verify|should)/
65
+ severity: warning
66
+ scope: [backend, frontend]
67
+ description: 测试方法必须包含至少一个断言,空测试等于没有测试
68
+
69
+ ## QUA-11: 过深的嵌套层级
70
+ pattern: //
71
+ severity: info
72
+ scope: [backend, frontend]
73
+ check: nesting_depth
74
+ description: 代码嵌套层级超过 4 层时应重构(卫语句、提前返回、策略模式)
75
+
76
+ ## QUA-12: 未处理可空返回值
77
+ pattern: /\.get\(\s*\)\s*\.|\.findFirst\(\s*\)\s*\./
78
+ severity: warning
79
+ scope: backend
80
+ description: Optional/List.get() 返回值必须判空,禁止直接链式调用导致 NPE
@@ -0,0 +1,31 @@
1
+ ---
2
+ name: api-design
3
+ type: pattern
4
+ when: API设计, 接口设计, 新建接口, 接口定义, RESTful, API规范, 接口契约, 请求参数, 响应格式
5
+ scope: [backend]
6
+ products: ["*"]
7
+ ---
8
+
9
+ ## 决策规则
10
+ - 业务输入参数超过 3 个必须封装为 Request 对象,禁止平铺离散 query/path/body 参数
11
+ - 业务输出超过 1 个返回值必须封装为 Response 对象,禁止多个并列标量字段或 Map 作为正式契约
12
+ - 列表查询必须定义:过滤条件、分页参数、排序规则、默认排序
13
+ - 批量接口必须定义:每批上限、部分成功策略、失败详情返回格式
14
+ - 删除操作必须明确声明:软删除/硬删除/级联删除/逻辑失效、可恢复性、前置校验、关联数据影响
15
+ - 需要幂等或去重的接口必须显式定义幂等键或去重规则
16
+ - 导出复用列表筛选条件时必须显式声明,列表和导出不得使用不同筛选语义
17
+ - API 必须包含版本号路径前缀(如 /api/v1/),破坏性变更递增主版本号
18
+ - 写接口必须有幂等设计(使用 Idempotency-Key 或业务唯一键),防止重复提交
19
+ - API 必须实现限流保护(Rate Limiting),响应头包含剩余配额信息
20
+ - 接口文档必须使用 OpenAPI/Swagger 自动生成,禁止手工维护独立文档
21
+ - 批量操作接口必须限制单次数量(如 ≤ 100),防止超时和资源耗尽
22
+
23
+ ## 验收项
24
+ - [AC-01] 多参数接口使用 Request/Response 对象封装
25
+ - [AC-02] 列表接口有分页和排序定义
26
+ - [AC-03] 批量接口有上限和部分成功策略
27
+ - [AC-04] 删除接口声明了删除语义和可恢复性
28
+ - [AC-05] API 有版本号前缀
29
+ - [AC-06] 写接口幂等设计
30
+ - [AC-07] 有限流保护
31
+ - [AC-08] 文档自动生成
@@ -0,0 +1,31 @@
1
+ ---
2
+ name: docker-deployment
3
+ type: pattern
4
+ when: Docker部署, 容器部署, Dockerfile, docker-compose, 镜像构建, 容器化, 部署发布
5
+ scope: [backend, frontend]
6
+ products: ["*"]
7
+ ---
8
+
9
+ ## 决策规则
10
+ - 每次部署必须从源码全新构建镜像,禁止 docker commit、容器内文件编辑、docker exec 安装依赖
11
+ - Bug 修复后必须重新构建镜像并重新部署后再验证,禁止在旧容器中验证修复
12
+ - 前端禁止复制预构建的 dist/ 目录,必须在 Dockerfile 内完成构建
13
+ - docker compose up 必须能一键启动所有服务并通过健康检查
14
+ - 若浏览器验证发现容器未运行当前代码,必须自动重建并重新部署
15
+ - Dockerfile 必须使用多阶段构建(build → runtime),禁止在最终镜像中包含构建工具和源码
16
+ - 容器必须配置 HEALTHCHECK 指令,编排工具(K8s/Docker Compose)依赖健康检查做流量管理
17
+ - 容器必须设置资源限制(memory limit、CPU limit),防止单个容器耗尽主机资源
18
+ - 镜像版本禁止使用 :latest 标签部署,必须指定明确版本号(如 :1.2.3)
19
+ - 敏感配置(密码、密钥)禁止写入 Dockerfile 或镜像,必须通过环境变量或 Secret 注入
20
+ - 容器必须以非 root 用户运行(USER app),禁止默认 root 运行
21
+
22
+ ## 验收项
23
+ - [AC-01] 镜像从源码全新构建
24
+ - [AC-02] 无 docker commit 或热补丁
25
+ - [AC-03] docker compose 一键启动通过健康检查
26
+ - [AC-04] 修复后重建镜像再验证
27
+ - [AC-05] 多阶段构建
28
+ - [AC-06] 有 HEALTHCHECK 配置
29
+ - [AC-07] 镜像指定版本号(非 latest)
30
+ - [AC-08] 敏感配置通过环境变量/Secret 注入
31
+ - [AC-09] 非 root 用户运行
@@ -0,0 +1,31 @@
1
+ ---
2
+ name: gitops
3
+ type: pattern
4
+ when: Git操作, 提交, commit, 分支, merge, 回滚, git, 代码提交, 版本控制, 代码合并, 冲突解决
5
+ scope: [backend, frontend]
6
+ products: ["*"]
7
+ ---
8
+
9
+ ## 决策规则
10
+ - Commit 消息必须语义化(feat/fix/refactor/test/docs/chore + 描述),禁止"update"、"fix"等笼统消息
11
+ - 每个 commit 对应一个最小变更单元
12
+ - 提交前检查清单:lint/format 通过、测试通过、无调试残留(console.log/print/TODO/FIXME)、无敏感信息、无超范围变更、无未跟踪大文件
13
+ - 功能分支合并必须使用 --no-ff 保留历史
14
+ - 冲突在功能分支解决,禁止在 master 上解决冲突
15
+ - 单 commit 问题用 git revert,整分支问题用 git revert -m 1
16
+ - 分支命名必须包含类型前缀(feature/、fix/、hotfix/、release/),禁止无意义命名
17
+ - Commit message 必须遵循 Conventional Commits 规范(type(scope): description)
18
+ - 禁止 force push 到 main/master/develop 分支,必须通过 PR/MR 合并
19
+ - 每个功能/修复必须从最新 develop/main 创建分支,禁止使用陈旧分支
20
+ - 代码合并必须经过至少一人 review 并批准,禁止自行合并
21
+ - 合并冲突必须在本地解决并测试,禁止在合并平台上直接解决
22
+
23
+ ## 验收项
24
+ - [AC-01] Commit 消息语义化(type + description)
25
+ - [AC-02] 无调试代码残留
26
+ - [AC-03] 合并使用 --no-ff
27
+ - [AC-04] 回滚使用 revert 而非 reset
28
+ - [AC-05] 分支命名有类型前缀
29
+ - [AC-06] Commit message 符合 Conventional Commits
30
+ - [AC-07] 无 force push 到主分支
31
+ - [AC-08] 代码合并经过 review
@@ -0,0 +1,32 @@
1
+ ---
2
+ name: n-plus-one-query
3
+ type: pattern
4
+ when: N+1查询, 慢查询, 性能问题, 批量查询, 循环查询, SQL优化, 查询优化, JOIN, 延迟加载, eager loading
5
+ scope: [backend]
6
+ products: ["*"]
7
+ ---
8
+
9
+ ## 决策规则
10
+ - 禁止在循环中执行数据库查询(N+1 反模式),必须改为批量查询或 JOIN
11
+ - 列表页面展示关联数据必须使用 JOIN 或批量 IN 查询,禁止逐条查询关联实体
12
+ - MyBatis 关联查询优先使用 `<collection>` 和 `<association>` 做批量映射,禁止 N+1 嵌套 select
13
+ - 分页查询必须使用数据库 LIMIT,禁止内存分页(先查全量再 subList)
14
+ - 列表查询字段禁止 SELECT *,只查展示所需字段
15
+ - 慢查询(> 500ms)必须有索引支撑或查询计划分析
16
+ - 批量 IN 查询参数数量建议不超过 500,超过时分批执行
17
+ - 大数据量统计查询必须走汇总表或缓存,禁止实时 COUNT/SUM 全表扫描
18
+ - 必须使用 JPA @EntityGraph 或 JOIN FETCH 显式指定关联查询策略
19
+ - 批量查询替代循环查询必须使用 IN 子句(WHERE id IN (...)),单次 IN 数量 ≤ 500
20
+ - MyBatis 必须使用 <collection> 或 <association> 做关联映射,禁止分段查询
21
+ - 列表页面需要关联数据时,先查主表 ID 列表再批量查关联表(两步查询模式)
22
+ - 必须在开发和测试环境开启 SQL 日志(hibernate.show_sql),便于发现 N+1 问题
23
+
24
+ ## 验收项
25
+ - [AC-01] 无循环内数据库查询
26
+ - [AC-02] 列表关联数据使用 JOIN 或批量查询
27
+ - [AC-03] 分页使用数据库 LIMIT
28
+ - [AC-04] 查询字段非 SELECT *
29
+ - [AC-05] 慢查询有索引支撑
30
+ - [AC-06] 关联查询使用 JOIN FETCH / @EntityGraph
31
+ - [AC-07] 批量查询使用 IN 子句
32
+ - [AC-08] 开发环境开启 SQL 日志
@@ -0,0 +1,29 @@
1
+ ---
2
+ name: react-list-table
3
+ type: pattern
4
+ when: 列表页, 表格, 数据展示, antd Table, 数据列表, 查询列表, 搜索列表, 分页列表, 列表查询
5
+ scope: [frontend]
6
+ products: ["*"]
7
+ ---
8
+
9
+ ## 决策规则
10
+ - 必须使用后端分页,禁止前端对全量数据做分页
11
+ - 列定义必须独立于页面组件(columns.tsx 或配置对象)
12
+ - 删除操作必须有二次确认弹窗
13
+ - 搜索触发后必须自动重置到第一页
14
+ - 工具栏操作(批量删除、导出)必须有 loading 状态
15
+ - 表格数据加载必须使用服务端分页和排序,禁止全量加载前端分页
16
+ - 表格必须有 loading 骨架屏和空状态提示,不能只显示空白
17
+ - 表格操作列按钮必须有二次确认(删除等危险操作)
18
+ - 表格列定义必须抽取为独立配置(columns 数组),禁止写在 JSX 模板中
19
+ - 表格行选择和批量操作必须有明确的已选计数和清空功能
20
+
21
+ ## 验收项
22
+ - [AC-01] 使用后端分页,前端不缓存全量数据
23
+ - [AC-02] 列定义独立于页面组件
24
+ - [AC-03] 删除操作有确认弹窗
25
+ - [AC-04] 搜索触发后重置到第一页
26
+ - [AC-05] 服务端分页排序
27
+ - [AC-06] loading/空状态处理
28
+ - [AC-07] 危险操作二次确认
29
+ - [AC-08] 批量操作有已选计数
@@ -0,0 +1,28 @@
1
+ ---
2
+ name: react-api-integration
3
+ type: pattern
4
+ when: 前端API调用, 接口对接, HTTP请求, axios, fetch, 数据请求, 接口联调, 后端对接, API集成, 请求封装
5
+ scope: [frontend]
6
+ products: ["*"]
7
+ ---
8
+
9
+ ## 决策规则
10
+ - 必须通过 service 层封装 API 调用,禁止组件内直接写 axios.get/post
11
+ - 必须基于统一 axios 实例,统一处理 Token 注入和错误拦截
12
+ - 请求必须管理 loading 状态,禁止无反馈的静默请求
13
+ - 401 响应必须自动跳转登录页
14
+ - API URL 禁止硬编码,必须通过环境变量或统一 baseURL
15
+ - API 调用必须封装到独立的 service 层,禁止在组件中直接调用 axios/fetch
16
+ - API 层必须统一处理:Token 注入、错误拦截、响应解包、重试逻辑
17
+ - 请求取消必须使用 AbortController,组件卸载时取消未完成请求
18
+ - API 类型必须定义 Request/Response interface,禁止 any
19
+ - 并发请求必须使用 Promise.all / Promise.allSettled 批量处理
20
+
21
+ ## 验收项
22
+ - [AC-01] API 调用通过 service 层,无组件内直接调用
23
+ - [AC-02] 请求有 loading 状态管理
24
+ - [AC-03] 401 响应自动跳转登录页
25
+ - [AC-04] 接口错误有用户提示
26
+ - [AC-05] API 封装到 service 层
27
+ - [AC-06] 组件卸载取消请求
28
+ - [AC-07] API 有 TypeScript 类型定义
@@ -0,0 +1,28 @@
1
+ ---
2
+ name: react-state-management
3
+ type: pattern
4
+ when: 状态管理, 全局状态, useState, useContext, 状态共享, 跨组件通信, 全局数据, store, Context, 状态同步
5
+ scope: [frontend]
6
+ products: ["*"]
7
+ ---
8
+
9
+ ## 决策规则
10
+ - 组件内状态用 useState,禁止滥用全局 Context
11
+ - 跨组件共享状态用 Context + useReducer,禁止 props 层层传递超过 3 层
12
+ - 全局持久化状态(用户、权限)通过 Context + localStorage 提供
13
+ - API 数据必须在 custom hook 中局部管理,禁止存入全局 store
14
+ - 禁止引入 Redux/Zustand 除非项目已有约定
15
+ - 全局状态必须使用状态管理库(Zustand/Redux/Jotai),禁止通过 props drilling 传递超过 2 层
16
+ - 服务端状态必须使用 TanStack Query/SWR 管理,禁止手动 useState + useEffect 获取数据
17
+ - 状态更新必须使用不可变方式(immer/spread),禁止直接 mutate state
18
+ - 全局状态必须按领域分片(slice/store),禁止单个巨大 store 包含所有数据
19
+ - 持久化状态(如用户偏好)必须序列化到 localStorage,应用启动时恢复
20
+
21
+ ## 验收项
22
+ - [AC-01] 组件内状态用 useState,未滥用 Context
23
+ - [AC-02] 全局状态通过 Context 提供
24
+ - [AC-03] API 数据在 custom hook 中管理
25
+ - [AC-04] 无 useEffect 依赖项导致的无限循环
26
+ - [AC-05] 全局状态使用状态管理库
27
+ - [AC-06] 服务端状态使用 TanStack Query
28
+ - [AC-07] 状态更新不可变方式
@@ -0,0 +1,28 @@
1
+ ---
2
+ name: react-component
3
+ type: pattern
4
+ when: React组件, 页面开发, 前端组件, tsx, 新建页面, 新建组件, 组件开发, React开发, 前端开发
5
+ scope: [frontend]
6
+ products: ["*"]
7
+ ---
8
+
9
+ ## 决策规则
10
+ - 必须使用函数组件 + TypeScript,禁止 class 组件
11
+ - 组件超过 200 行必须拆分为子组件或提取自定义 Hook
12
+ - Props 必须定义 interface,禁止使用 any
13
+ - 副作用逻辑必须封装在自定义 Hook 中,组件内只保留渲染和事件处理
14
+ - 禁止在组件中直接调用 axios/fetch,必须通过 service 层
15
+ - 组件必须使用函数式组件 + Hooks,禁止新写 class 组件
16
+ - 组件 Props 必须使用 TypeScript interface 定义,禁止使用 any 或省略类型
17
+ - 自定义 Hook 必须以 use 前缀命名(如 useAuth、useForm),且内部必须调用其他 Hook
18
+ - 组件必须有 displayName 或文件名可推断用途,禁止 Default、Index 等无意义命名
19
+ - 复杂组件必须拆分为 Container + Presentational 模式,逻辑与渲染分离
20
+
21
+ ## 验收项
22
+ - [AC-01] 组件为函数式 + TypeScript
23
+ - [AC-02] Props 有 interface 类型定义
24
+ - [AC-03] 组件不超过 200 行
25
+ - [AC-04] 数据请求通过 service 层或 Hook
26
+ - [AC-05] 使用函数式组件
27
+ - [AC-06] Props 有 TypeScript 类型定义
28
+ - [AC-07] 自定义 Hook 以 use 前缀命名
@@ -0,0 +1,29 @@
1
+ ---
2
+ name: react-form-handling
3
+ type: pattern
4
+ when: 表单处理, 表单校验, 用户输入, 表单提交, Form, 表单开发, 数据采集, 编辑表单, 新增表单
5
+ scope: [frontend]
6
+ products: ["*"]
7
+ ---
8
+
9
+ ## 决策规则
10
+ - 必须使用 Ant Design Form 组件,禁止手动管理每个字段的 value/onChange
11
+ - 校验规则必须写在 Form.Item rules 中,禁止散落在 submit 逻辑里
12
+ - 提交按钮必须有 loading 状态防止重复提交
13
+ - 新建和编辑必须共用同一表单组件,通过 initialValues 区分
14
+ - 必填字段必须有 rules + message 提示
15
+ - 复杂表单必须使用表单库(React Hook Form / Formik),禁止手动管理每个字段状态
16
+ - 表单校验必须使用 schema 校验(Zod / Yup),禁止分散的 if-else 校验
17
+ - 表单提交必须处理 loading/success/error 三态,禁止只处理成功
18
+ - 表单必须支持编辑回填(传入 initial values),新增和编辑共用同一组件
19
+ - 长表单必须分步骤(Step Form),每步校验通过后才进入下一步
20
+
21
+ ## 验收项
22
+ - [AC-01] 表单使用 Ant Design Form 组件
23
+ - [AC-02] 必填字段有校验规则和提示信息
24
+ - [AC-03] 提交按钮有 loading 防重复
25
+ - [AC-04] 新建和编辑共用同一组件
26
+ - [AC-05] 使用表单库管理
27
+ - [AC-06] Schema 校验
28
+ - [AC-07] 提交处理三态
29
+ - [AC-08] 新增/编辑共用组件
@@ -0,0 +1,29 @@
1
+ ---
2
+ name: react-routing
3
+ type: pattern
4
+ when: 路由, 页面跳转, 菜单, 权限路由, 导航, 路由配置, react-router, 页面路由, 嵌套路由, 路由守卫
5
+ scope: [frontend]
6
+ products: ["*"]
7
+ ---
8
+
9
+ ## 决策规则
10
+ - 路由配置必须集中在 routes.ts,禁止散落在各组件中
11
+ - 页面组件必须使用 React.lazy + Suspense 懒加载
12
+ - 需要登录的页面必须被 AuthGuard 包裹
13
+ - 权限路由必须在路由级别拦截,禁止仅靠隐藏菜单项
14
+ - 必须配置 404 兜底路由
15
+ - 路由定义必须集中管理(路由表配置),禁止散落在各组件中
16
+ - 路由路径必须使用 kebab-case,禁止使用 camelCase 或中文
17
+ - 页面组件必须使用 React.lazy + Suspense 实现路由级代码分割
18
+ - 需要权限的路由必须配置路由守卫(auth guard),未登录重定向到登录页
19
+ - 404 页面必须配置兜底路由(* 路径),禁止空白页
20
+
21
+ ## 验收项
22
+ - [AC-01] 路由配置集中在 routes.ts
23
+ - [AC-02] 页面组件使用懒加载
24
+ - [AC-03] 需要登录的页面被 AuthGuard 包裹
25
+ - [AC-04] 有 404 兜底路由
26
+ - [AC-05] 路由集中管理
27
+ - [AC-06] 路由级代码分割
28
+ - [AC-07] 权限路由有守卫
29
+ - [AC-08] 404 兜底页面
@@ -0,0 +1,28 @@
1
+ ---
2
+ name: schema-compatibility
3
+ type: pattern
4
+ when: 数据库变更, 字段修改, 表结构变更, 数据迁移, Schema变更, 加字段, 改字段, 删字段, DDL
5
+ scope: [backend]
6
+ products: ["*"]
7
+ ---
8
+
9
+ ## 决策规则
10
+ - 新增字段必须指定:默认值、可空性、存量数据回填策略
11
+ - 修改字段类型、长度、语义或枚举范围必须指定:存量数据读取行为和迁移策略
12
+ - 删除字段必须指定:兼容窗口、废弃标记、回滚计划,不得假设所有调用方已同步升级
13
+ - 字段兼容策略必须同时覆盖四层:数据库、接口契约、前端展示、导出逻辑
14
+ - 禁止在实现阶段临时决定兼容策略、删除语义或字段默认值
15
+ - 数据库 Schema 变更必须向前兼容(先加新字段 → 迁移 → 再删旧字段)
16
+ - 新增字段必须设默认值或允许 NULL,保证旧代码不受影响
17
+ - 列类型变更必须分步进行(先加新列 → 双写 → 迁移 → 删旧列)
18
+ - Schema 迁移脚本必须纳入版本控制,禁止手动执行 SQL
19
+ - 索引变更必须在低峰期执行,大表加索引必须使用 ONLINE DDL 或 pt-osc
20
+
21
+ ## 验收项
22
+ - [AC-01] 新增字段有默认值和回填策略
23
+ - [AC-02] 字段变更覆盖数据库/接口/前端/导出四层
24
+ - [AC-03] 删除字段有兼容窗口和回滚计划
25
+ - [AC-04] 无临时决定的兼容策略
26
+ - [AC-05] Schema 变更向前兼容
27
+ - [AC-06] 新字段有默认值
28
+ - [AC-07] 迁移脚本纳入版本控制
@@ -0,0 +1,28 @@
1
+ ---
2
+ name: vue-state
3
+ type: pattern
4
+ when: Vue状态管理, Pinia, Vuex, 全局状态, store, Vue状态, 状态共享, 跨组件通信
5
+ scope: [frontend]
6
+ products: ["*"]
7
+ ---
8
+
9
+ ## 决策规则
10
+ - 全局状态必须使用 Pinia,禁止 Vuex
11
+ - Store 必须按业务模块拆分,禁止写单一大 Store
12
+ - 组件解构 Store 必须使用 storeToRefs 保持响应性
13
+ - 组件内局部状态用 ref/reactive,禁止滥用全局 Store
14
+ - API 数据在 composable 中管理,必要时结合 Pinia 共享
15
+ - 全局状态必须使用 Pinia store,禁止使用 Vuex(已废弃)或手动 provide/inject
16
+ - Store 必须按功能模块拆分(useUserStore、useCartStore),禁止单个巨大 store
17
+ - 异步操作必须在 store actions 中处理,禁止在组件中 dispatch 再 watch
18
+ - Store 状态变更必须通过 actions,禁止在组件中直接修改 store.$state
19
+ - 持久化状态必须使用 pinia-plugin-persistedstate 插件
20
+
21
+ ## 验收项
22
+ - [AC-01] 全局状态使用 Pinia
23
+ - [AC-02] Store 按业务模块拆分
24
+ - [AC-03] 组件解构 Store 使用 storeToRefs
25
+ - [AC-04] 组件内局部状态用 ref/reactive
26
+ - [AC-05] 使用 Pinia 管理
27
+ - [AC-06] Store 按模块拆分
28
+ - [AC-07] 状态通过 actions 修改
@@ -0,0 +1,28 @@
1
+ ---
2
+ name: vue-component
3
+ type: pattern
4
+ when: Vue组件, Vue页面, vue, Vue开发, 组合式API, Composition API, setup, defineComponent, Vue3, 前端开发vue
5
+ scope: [frontend]
6
+ products: ["*"]
7
+ ---
8
+
9
+ ## 决策规则
10
+ - 必须使用 `<script setup lang="ts">` 组合式 API,禁止选项式 API 新写组件
11
+ - 组件超过 300 行必须拆分为子组件或 composables
12
+ - Props 必须通过 defineProps + interface 定义,禁止使用 any
13
+ - 禁止在组件中直接调用 axios,必须通过 service 层或 composable
14
+ - 禁止 reactive 和 ref 混用导致响应性丢失
15
+ - 组件必须使用 `<script setup>` + Composition API,禁止使用 Options API
16
+ - 组件 Props 必须使用 defineProps<T>() 类型声明,禁止使用运行时声明
17
+ - 组件 Emits 必须使用 defineEmits<T>() 声明,禁止未声明的 this.$emit
18
+ - 组件必须有 name 属性(通过 defineOptions 或文件名约定),便于 DevTools 调试
19
+ - 复用逻辑必须抽取为 Composable(use 前缀),禁止在组件间复制粘贴逻辑
20
+
21
+ ## 验收项
22
+ - [AC-01] 使用 `<script setup lang="ts">` 组合式 API
23
+ - [AC-02] Props 通过 defineProps + interface 定义
24
+ - [AC-03] 组件不超过 300 行
25
+ - [AC-04] 数据请求通过 service 层或 composable
26
+ - [AC-05] 使用 script setup
27
+ - [AC-06] Props 类型声明
28
+ - [AC-07] 有 Composable 复用逻辑
@@ -0,0 +1,29 @@
1
+ ---
2
+ name: vue-routing
3
+ type: pattern
4
+ when: Vue路由, Vue Router, 页面跳转, Vue导航, 路由守卫, 路由配置, vue-router
5
+ scope: [frontend]
6
+ products: ["*"]
7
+ ---
8
+
9
+ ## 决策规则
10
+ - 路由配置必须集中在 router/routes.ts
11
+ - 页面组件必须使用动态 import 懒加载
12
+ - 需要登录的页面必须有 meta.requiresAuth 标记
13
+ - 权限检查必须在路由级别拦截,禁止仅隐藏菜单
14
+ - 必须配置 404 兜底路由
15
+ - 路由定义必须集中管理(router/index.ts),禁止散落各处
16
+ - 页面组件必须使用路由懒加载(() => import()),减少首屏加载体积
17
+ - 路由守卫必须统一处理鉴权逻辑(beforeEach),禁止每个路由单独处理
18
+ - 路由 meta 必须声明权限要求(meta: { requiresAuth: true, roles: [] })
19
+ - 未匹配路由必须配置 404 兜底(/:pathMatch(.*)*)
20
+
21
+ ## 验收项
22
+ - [AC-01] 路由配置集中在 router/routes.ts
23
+ - [AC-02] 页面组件使用动态 import 懒加载
24
+ - [AC-03] 需要登录的页面有 meta.requiresAuth
25
+ - [AC-04] 有 404 兜底路由
26
+ - [AC-05] 路由集中管理
27
+ - [AC-06] 路由懒加载
28
+ - [AC-07] 统一鉴权守卫
29
+ - [AC-08] 404 兜底路由