code-ai-installer 1.2.0 → 1.3.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 (925) hide show
  1. package/.agents/a11y_baseline/SKILL.md +260 -41
  2. package/.agents/a11y_baseline/agents/claude.json +2 -2
  3. package/.agents/a11y_baseline/agents/copilot.json +2 -2
  4. package/.agents/a11y_baseline/agents/gemini.json +2 -2
  5. package/.agents/a11y_baseline/agents/openai.yaml +1 -1
  6. package/.agents/a11y_baseline/agents/qwen.json +2 -2
  7. package/.agents/a11y_baseline/agents/skill.yaml +2 -2
  8. package/.agents/adr_log/SKILL.md +369 -69
  9. package/.agents/adr_log/agents/claude.json +2 -2
  10. package/.agents/adr_log/agents/copilot.json +2 -2
  11. package/.agents/adr_log/agents/gemini.json +2 -2
  12. package/.agents/adr_log/agents/openai.yaml +1 -1
  13. package/.agents/adr_log/agents/qwen.json +2 -2
  14. package/.agents/adr_log/agents/skill.yaml +2 -2
  15. package/.agents/api_contract_compliance_review/SKILL.md +224 -18
  16. package/.agents/api_contract_compliance_review/agents/claude.json +2 -2
  17. package/.agents/api_contract_compliance_review/agents/copilot.json +2 -2
  18. package/.agents/api_contract_compliance_review/agents/gemini.json +2 -2
  19. package/.agents/api_contract_compliance_review/agents/openai.yaml +1 -1
  20. package/.agents/api_contract_compliance_review/agents/qwen.json +2 -2
  21. package/.agents/api_contract_compliance_review/agents/skill.yaml +2 -2
  22. package/.agents/api_contracts/SKILL.md +329 -42
  23. package/.agents/api_contracts/agents/claude.json +2 -2
  24. package/.agents/api_contracts/agents/copilot.json +2 -2
  25. package/.agents/api_contracts/agents/gemini.json +2 -2
  26. package/.agents/api_contracts/agents/openai.yaml +1 -1
  27. package/.agents/api_contracts/agents/qwen.json +2 -2
  28. package/.agents/api_contracts/agents/skill.yaml +2 -2
  29. package/.agents/architecture_compliance_review/SKILL.md +213 -17
  30. package/.agents/architecture_compliance_review/agents/claude.json +2 -2
  31. package/.agents/architecture_compliance_review/agents/copilot.json +2 -2
  32. package/.agents/architecture_compliance_review/agents/gemini.json +2 -2
  33. package/.agents/architecture_compliance_review/agents/openai.yaml +1 -1
  34. package/.agents/architecture_compliance_review/agents/qwen.json +2 -2
  35. package/.agents/architecture_compliance_review/agents/skill.yaml +2 -2
  36. package/.agents/architecture_doc/SKILL.md +384 -92
  37. package/.agents/architecture_doc/agents/claude.json +2 -2
  38. package/.agents/architecture_doc/agents/copilot.json +2 -2
  39. package/.agents/architecture_doc/agents/gemini.json +2 -2
  40. package/.agents/architecture_doc/agents/openai.yaml +1 -1
  41. package/.agents/architecture_doc/agents/qwen.json +2 -2
  42. package/.agents/architecture_doc/agents/skill.yaml +2 -2
  43. package/.agents/board/SKILL.md +232 -43
  44. package/.agents/board/agents/claude.json +2 -2
  45. package/.agents/board/agents/copilot.json +2 -2
  46. package/.agents/board/agents/gemini.json +2 -2
  47. package/.agents/board/agents/openai.yaml +1 -1
  48. package/.agents/board/agents/qwen.json +2 -2
  49. package/.agents/board/agents/skill.yaml +2 -2
  50. package/.agents/cloud_infrastructure_security/SKILL.md +277 -68
  51. package/.agents/cloud_infrastructure_security/agents/claude.json +2 -2
  52. package/.agents/cloud_infrastructure_security/agents/copilot.json +2 -2
  53. package/.agents/cloud_infrastructure_security/agents/gemini.json +2 -2
  54. package/.agents/cloud_infrastructure_security/agents/openai.yaml +1 -1
  55. package/.agents/cloud_infrastructure_security/agents/qwen.json +2 -2
  56. package/.agents/cloud_infrastructure_security/agents/skill.yaml +2 -2
  57. package/.agents/code_review_checklist/SKILL.md +200 -47
  58. package/.agents/code_review_checklist/agents/claude.json +2 -2
  59. package/.agents/code_review_checklist/agents/copilot.json +2 -2
  60. package/.agents/code_review_checklist/agents/gemini.json +2 -2
  61. package/.agents/code_review_checklist/agents/openai.yaml +1 -1
  62. package/.agents/code_review_checklist/agents/qwen.json +2 -2
  63. package/.agents/code_review_checklist/agents/skill.yaml +2 -2
  64. package/.agents/current_state_analysis/SKILL.md +225 -44
  65. package/.agents/current_state_analysis/agents/claude.json +2 -2
  66. package/.agents/current_state_analysis/agents/copilot.json +2 -2
  67. package/.agents/current_state_analysis/agents/gemini.json +2 -2
  68. package/.agents/current_state_analysis/agents/openai.yaml +1 -1
  69. package/.agents/current_state_analysis/agents/qwen.json +2 -2
  70. package/.agents/current_state_analysis/agents/skill.yaml +2 -2
  71. package/.agents/data_model/SKILL.md +285 -40
  72. package/.agents/data_model/agents/claude.json +2 -2
  73. package/.agents/data_model/agents/copilot.json +2 -2
  74. package/.agents/data_model/agents/gemini.json +2 -2
  75. package/.agents/data_model/agents/openai.yaml +1 -1
  76. package/.agents/data_model/agents/qwen.json +2 -2
  77. package/.agents/data_model/agents/skill.yaml +2 -2
  78. package/.agents/dependency_supply_chain_review/SKILL.md +300 -20
  79. package/.agents/dependency_supply_chain_review/agents/claude.json +2 -2
  80. package/.agents/dependency_supply_chain_review/agents/copilot.json +2 -2
  81. package/.agents/dependency_supply_chain_review/agents/gemini.json +2 -2
  82. package/.agents/dependency_supply_chain_review/agents/openai.yaml +1 -1
  83. package/.agents/dependency_supply_chain_review/agents/qwen.json +2 -2
  84. package/.agents/dependency_supply_chain_review/agents/skill.yaml +2 -2
  85. package/.agents/deployment_ci_plan/SKILL.md +410 -51
  86. package/.agents/deployment_ci_plan/agents/claude.json +3 -2
  87. package/.agents/deployment_ci_plan/agents/copilot.json +3 -2
  88. package/.agents/deployment_ci_plan/agents/gemini.json +3 -2
  89. package/.agents/deployment_ci_plan/agents/openai.yaml +1 -1
  90. package/.agents/deployment_ci_plan/agents/qwen.json +3 -2
  91. package/.agents/deployment_ci_plan/agents/skill.yaml +2 -1
  92. package/.agents/design_intake/SKILL.md +225 -70
  93. package/.agents/design_intake/agents/claude.json +2 -2
  94. package/.agents/design_intake/agents/copilot.json +2 -2
  95. package/.agents/design_intake/agents/gemini.json +2 -2
  96. package/.agents/design_intake/agents/openai.yaml +1 -1
  97. package/.agents/design_intake/agents/qwen.json +2 -2
  98. package/.agents/design_intake/agents/skill.yaml +2 -2
  99. package/.agents/design_parity_review/SKILL.md +216 -73
  100. package/.agents/design_systems/SKILL.md +432 -15
  101. package/.agents/design_systems/agents/claude.json +2 -2
  102. package/.agents/design_systems/agents/copilot.json +2 -2
  103. package/.agents/design_systems/agents/gemini.json +2 -2
  104. package/.agents/design_systems/agents/openai.yaml +1 -1
  105. package/.agents/design_systems/agents/qwen.json +2 -2
  106. package/.agents/design_systems/agents/skill.yaml +2 -2
  107. package/.agents/dev_reference_snippets/SKILL.md +305 -117
  108. package/.agents/dev_reference_snippets/agents/claude.json +2 -2
  109. package/.agents/dev_reference_snippets/agents/copilot.json +2 -2
  110. package/.agents/dev_reference_snippets/agents/gemini.json +2 -2
  111. package/.agents/dev_reference_snippets/agents/openai.yaml +1 -1
  112. package/.agents/dev_reference_snippets/agents/qwen.json +2 -2
  113. package/.agents/dev_reference_snippets/agents/skill.yaml +2 -2
  114. package/.agents/docker_kubernetes_architecture/SKILL.md +480 -145
  115. package/.agents/docker_kubernetes_architecture/agents/claude.json +2 -2
  116. package/.agents/docker_kubernetes_architecture/agents/copilot.json +2 -2
  117. package/.agents/docker_kubernetes_architecture/agents/gemini.json +2 -2
  118. package/.agents/docker_kubernetes_architecture/agents/openai.yaml +1 -1
  119. package/.agents/docker_kubernetes_architecture/agents/qwen.json +2 -2
  120. package/.agents/docker_kubernetes_architecture/agents/skill.yaml +2 -2
  121. package/.agents/es2025_beast_practices/SKILL.md +433 -8
  122. package/.agents/es2025_beast_practices/agents/claude.json +2 -2
  123. package/.agents/es2025_beast_practices/agents/copilot.json +2 -2
  124. package/.agents/es2025_beast_practices/agents/gemini.json +2 -2
  125. package/.agents/es2025_beast_practices/agents/openai.yaml +1 -1
  126. package/.agents/es2025_beast_practices/agents/qwen.json +2 -2
  127. package/.agents/es2025_beast_practices/agents/skill.yaml +2 -2
  128. package/.agents/gates/SKILL.md +134 -35
  129. package/.agents/gates/agents/claude.json +2 -2
  130. package/.agents/gates/agents/copilot.json +2 -2
  131. package/.agents/gates/agents/gemini.json +2 -2
  132. package/.agents/gates/agents/openai.yaml +1 -1
  133. package/.agents/gates/agents/qwen.json +2 -2
  134. package/.agents/gates/agents/skill.yaml +2 -2
  135. package/.agents/go_beast_practices/SKILL.md +557 -23
  136. package/.agents/go_beast_practices/agents/claude.json +2 -2
  137. package/.agents/go_beast_practices/agents/copilot.json +2 -2
  138. package/.agents/go_beast_practices/agents/gemini.json +2 -2
  139. package/.agents/go_beast_practices/agents/openai.yaml +1 -1
  140. package/.agents/go_beast_practices/agents/qwen.json +2 -2
  141. package/.agents/go_beast_practices/agents/skill.yaml +2 -2
  142. package/.agents/google_stitch_skill/SKILL.md +2 -1
  143. package/.agents/google_stitch_skill/agents/claude.json +6 -6
  144. package/.agents/google_stitch_skill/agents/copilot.json +6 -6
  145. package/.agents/google_stitch_skill/agents/gemini.json +6 -6
  146. package/.agents/google_stitch_skill/agents/openai.yaml +2 -1
  147. package/.agents/google_stitch_skill/agents/qwen.json +6 -6
  148. package/.agents/google_stitch_skill/agents/skill.yaml +4 -3
  149. package/.agents/handoff/SKILL.md +212 -52
  150. package/.agents/handoff/agents/claude.json +2 -2
  151. package/.agents/handoff/agents/copilot.json +2 -2
  152. package/.agents/handoff/agents/gemini.json +2 -2
  153. package/.agents/handoff/agents/openai.yaml +1 -1
  154. package/.agents/handoff/agents/qwen.json +2 -2
  155. package/.agents/handoff/agents/skill.yaml +2 -2
  156. package/.agents/k8s_manifests_conventions/SKILL.md +548 -176
  157. package/.agents/k8s_manifests_conventions/agents/claude.json +2 -2
  158. package/.agents/k8s_manifests_conventions/agents/copilot.json +2 -2
  159. package/.agents/k8s_manifests_conventions/agents/gemini.json +2 -2
  160. package/.agents/k8s_manifests_conventions/agents/openai.yaml +1 -1
  161. package/.agents/k8s_manifests_conventions/agents/qwen.json +2 -2
  162. package/.agents/k8s_manifests_conventions/agents/skill.yaml +2 -2
  163. package/.agents/memory/SKILL.md +219 -29
  164. package/.agents/memory/agents/claude.json +2 -2
  165. package/.agents/memory/agents/copilot.json +2 -2
  166. package/.agents/memory/agents/gemini.json +2 -2
  167. package/.agents/memory/agents/openai.yaml +1 -1
  168. package/.agents/memory/agents/qwen.json +2 -2
  169. package/.agents/memory/agents/skill.yaml +2 -2
  170. package/.agents/mongodb_mongoose_best_practices/SKILL.md +724 -236
  171. package/.agents/mongodb_mongoose_best_practices/agents/claude.json +2 -2
  172. package/.agents/mongodb_mongoose_best_practices/agents/copilot.json +2 -2
  173. package/.agents/mongodb_mongoose_best_practices/agents/gemini.json +2 -2
  174. package/.agents/mongodb_mongoose_best_practices/agents/openai.yaml +1 -1
  175. package/.agents/mongodb_mongoose_best_practices/agents/qwen.json +2 -2
  176. package/.agents/mongodb_mongoose_best_practices/agents/skill.yaml +2 -2
  177. package/.agents/n8n_pinecone_qdrant_supabase/SKILL.md +671 -59
  178. package/.agents/n8n_pinecone_qdrant_supabase/agents/claude.json +2 -2
  179. package/.agents/n8n_pinecone_qdrant_supabase/agents/copilot.json +2 -2
  180. package/.agents/n8n_pinecone_qdrant_supabase/agents/gemini.json +2 -2
  181. package/.agents/n8n_pinecone_qdrant_supabase/agents/openai.yaml +1 -1
  182. package/.agents/n8n_pinecone_qdrant_supabase/agents/qwen.json +2 -2
  183. package/.agents/n8n_pinecone_qdrant_supabase/agents/skill.yaml +2 -2
  184. package/.agents/node_express_beast_practices/SKILL.md +729 -30
  185. package/.agents/node_express_beast_practices/agents/claude.json +1 -1
  186. package/.agents/node_express_beast_practices/agents/copilot.json +1 -1
  187. package/.agents/node_express_beast_practices/agents/gemini.json +1 -1
  188. package/.agents/node_express_beast_practices/agents/openai.yaml +1 -1
  189. package/.agents/node_express_beast_practices/agents/qwen.json +1 -1
  190. package/.agents/node_express_beast_practices/agents/skill.yaml +1 -1
  191. package/.agents/observability_logging/SKILL.md +499 -16
  192. package/.agents/observability_logging/agents/claude.json +2 -2
  193. package/.agents/observability_logging/agents/copilot.json +2 -2
  194. package/.agents/observability_logging/agents/gemini.json +2 -2
  195. package/.agents/observability_logging/agents/openai.yaml +1 -1
  196. package/.agents/observability_logging/agents/qwen.json +2 -2
  197. package/.agents/observability_logging/agents/skill.yaml +2 -2
  198. package/.agents/observability_plan/SKILL.md +279 -38
  199. package/.agents/observability_plan/agents/claude.json +3 -2
  200. package/.agents/observability_plan/agents/copilot.json +3 -2
  201. package/.agents/observability_plan/agents/gemini.json +3 -2
  202. package/.agents/observability_plan/agents/openai.yaml +1 -1
  203. package/.agents/observability_plan/agents/qwen.json +3 -2
  204. package/.agents/observability_plan/agents/skill.yaml +2 -1
  205. package/.agents/observability_review/SKILL.md +254 -20
  206. package/.agents/observability_review/agents/claude.json +2 -2
  207. package/.agents/observability_review/agents/copilot.json +2 -2
  208. package/.agents/observability_review/agents/gemini.json +2 -2
  209. package/.agents/observability_review/agents/openai.yaml +1 -1
  210. package/.agents/observability_review/agents/qwen.json +2 -2
  211. package/.agents/observability_review/agents/skill.yaml +2 -2
  212. package/.agents/performance_review_baseline/SKILL.md +239 -17
  213. package/.agents/performance_review_baseline/agents/claude.json +2 -2
  214. package/.agents/performance_review_baseline/agents/copilot.json +2 -2
  215. package/.agents/performance_review_baseline/agents/gemini.json +2 -2
  216. package/.agents/performance_review_baseline/agents/openai.yaml +1 -1
  217. package/.agents/performance_review_baseline/agents/qwen.json +2 -2
  218. package/.agents/performance_review_baseline/agents/skill.yaml +2 -2
  219. package/.agents/pm_backlog/SKILL.md +250 -32
  220. package/.agents/pm_backlog/agents/claude.json +2 -2
  221. package/.agents/pm_backlog/agents/copilot.json +2 -2
  222. package/.agents/pm_backlog/agents/gemini.json +2 -2
  223. package/.agents/pm_backlog/agents/openai.yaml +1 -1
  224. package/.agents/pm_backlog/agents/qwen.json +2 -2
  225. package/.agents/pm_backlog/agents/skill.yaml +2 -2
  226. package/.agents/pm_interview/SKILL.md +197 -56
  227. package/.agents/pm_interview/agents/claude.json +2 -2
  228. package/.agents/pm_interview/agents/copilot.json +2 -2
  229. package/.agents/pm_interview/agents/gemini.json +2 -2
  230. package/.agents/pm_interview/agents/openai.yaml +1 -1
  231. package/.agents/pm_interview/agents/qwen.json +2 -2
  232. package/.agents/pm_interview/agents/skill.yaml +2 -2
  233. package/.agents/pm_prd/SKILL.md +215 -56
  234. package/.agents/pm_prd/agents/claude.json +2 -2
  235. package/.agents/pm_prd/agents/copilot.json +2 -2
  236. package/.agents/pm_prd/agents/gemini.json +2 -2
  237. package/.agents/pm_prd/agents/openai.yaml +1 -1
  238. package/.agents/pm_prd/agents/qwen.json +2 -2
  239. package/.agents/pm_prd/agents/skill.yaml +2 -2
  240. package/.agents/qa_api_contract_tests/SKILL.md +207 -16
  241. package/.agents/qa_api_contract_tests/agents/claude.json +2 -2
  242. package/.agents/qa_api_contract_tests/agents/copilot.json +2 -2
  243. package/.agents/qa_api_contract_tests/agents/gemini.json +2 -2
  244. package/.agents/qa_api_contract_tests/agents/openai.yaml +1 -1
  245. package/.agents/qa_api_contract_tests/agents/qwen.json +2 -2
  246. package/.agents/qa_api_contract_tests/agents/skill.yaml +2 -2
  247. package/.agents/qa_manual_run/SKILL.md +209 -16
  248. package/.agents/qa_manual_run/agents/claude.json +2 -2
  249. package/.agents/qa_manual_run/agents/copilot.json +2 -2
  250. package/.agents/qa_manual_run/agents/gemini.json +2 -2
  251. package/.agents/qa_manual_run/agents/openai.yaml +1 -1
  252. package/.agents/qa_manual_run/agents/qwen.json +2 -2
  253. package/.agents/qa_manual_run/agents/skill.yaml +2 -2
  254. package/.agents/qa_regression_baseline/SKILL.md +217 -0
  255. package/.agents/qa_regression_baseline/agents/claude.json +19 -0
  256. package/.agents/qa_regression_baseline/agents/copilot.json +19 -0
  257. package/.agents/qa_regression_baseline/agents/gemini.json +19 -0
  258. package/.agents/qa_regression_baseline/agents/openai.yaml +8 -0
  259. package/.agents/qa_regression_baseline/agents/qwen.json +19 -0
  260. package/.agents/qa_regression_baseline/agents/skill.yaml +23 -0
  261. package/.agents/qa_security_smoke_tests/SKILL.md +188 -14
  262. package/.agents/qa_security_smoke_tests/agents/claude.json +2 -2
  263. package/.agents/qa_security_smoke_tests/agents/copilot.json +2 -2
  264. package/.agents/qa_security_smoke_tests/agents/gemini.json +2 -2
  265. package/.agents/qa_security_smoke_tests/agents/openai.yaml +1 -1
  266. package/.agents/qa_security_smoke_tests/agents/qwen.json +2 -2
  267. package/.agents/qa_security_smoke_tests/agents/skill.yaml +2 -2
  268. package/.agents/qa_test_plan/SKILL.md +203 -20
  269. package/.agents/qa_test_plan/agents/claude.json +2 -2
  270. package/.agents/qa_test_plan/agents/copilot.json +2 -2
  271. package/.agents/qa_test_plan/agents/gemini.json +2 -2
  272. package/.agents/qa_test_plan/agents/openai.yaml +1 -1
  273. package/.agents/qa_test_plan/agents/qwen.json +2 -2
  274. package/.agents/qa_test_plan/agents/skill.yaml +2 -2
  275. package/.agents/qa_ui_a11y_smoke/SKILL.md +230 -12
  276. package/.agents/qa_ui_a11y_smoke/agents/claude.json +2 -2
  277. package/.agents/qa_ui_a11y_smoke/agents/copilot.json +2 -2
  278. package/.agents/qa_ui_a11y_smoke/agents/gemini.json +2 -2
  279. package/.agents/qa_ui_a11y_smoke/agents/openai.yaml +1 -1
  280. package/.agents/qa_ui_a11y_smoke/agents/qwen.json +2 -2
  281. package/.agents/qa_ui_a11y_smoke/agents/skill.yaml +2 -2
  282. package/.agents/react_15_3_wix_iframe/SKILL.md +411 -12
  283. package/.agents/react_15_3_wix_iframe/agents/claude.json +2 -2
  284. package/.agents/react_15_3_wix_iframe/agents/copilot.json +2 -2
  285. package/.agents/react_15_3_wix_iframe/agents/gemini.json +2 -2
  286. package/.agents/react_15_3_wix_iframe/agents/openai.yaml +1 -1
  287. package/.agents/react_15_3_wix_iframe/agents/qwen.json +2 -2
  288. package/.agents/react_15_3_wix_iframe/agents/skill.yaml +2 -2
  289. package/.agents/react_beast_practices/SKILL.md +285 -18
  290. package/.agents/react_beast_practices/agents/claude.json +2 -2
  291. package/.agents/react_beast_practices/agents/copilot.json +2 -2
  292. package/.agents/react_beast_practices/agents/gemini.json +2 -2
  293. package/.agents/react_beast_practices/agents/openai.yaml +1 -1
  294. package/.agents/react_beast_practices/agents/qwen.json +2 -2
  295. package/.agents/react_beast_practices/agents/skill.yaml +2 -2
  296. package/.agents/release_gate/SKILL.md +213 -77
  297. package/.agents/release_gate/agents/claude.json +2 -2
  298. package/.agents/release_gate/agents/copilot.json +2 -2
  299. package/.agents/release_gate/agents/gemini.json +2 -2
  300. package/.agents/release_gate/agents/openai.yaml +1 -1
  301. package/.agents/release_gate/agents/qwen.json +2 -2
  302. package/.agents/release_gate/agents/skill.yaml +2 -2
  303. package/.agents/release_gate_checklist_template/SKILL.md +182 -68
  304. package/.agents/review_reference_snippets/SKILL.md +116 -0
  305. package/.agents/security_baseline_dev/SKILL.md +496 -16
  306. package/.agents/security_baseline_dev/agents/claude.json +2 -2
  307. package/.agents/security_baseline_dev/agents/copilot.json +2 -2
  308. package/.agents/security_baseline_dev/agents/gemini.json +2 -2
  309. package/.agents/security_baseline_dev/agents/openai.yaml +1 -1
  310. package/.agents/security_baseline_dev/agents/qwen.json +2 -2
  311. package/.agents/security_baseline_dev/agents/skill.yaml +2 -2
  312. package/.agents/security_review/SKILL.md +277 -55
  313. package/.agents/security_review_baseline/SKILL.md +119 -25
  314. package/.agents/security_review_baseline/agents/claude.json +2 -2
  315. package/.agents/security_review_baseline/agents/copilot.json +2 -2
  316. package/.agents/security_review_baseline/agents/gemini.json +2 -2
  317. package/.agents/security_review_baseline/agents/openai.yaml +1 -1
  318. package/.agents/security_review_baseline/agents/qwen.json +2 -2
  319. package/.agents/security_review_baseline/agents/skill.yaml +2 -2
  320. package/.agents/state_rtk_beast_practices/SKILL.md +735 -15
  321. package/.agents/state_rtk_beast_practices/agents/claude.json +2 -2
  322. package/.agents/state_rtk_beast_practices/agents/copilot.json +2 -2
  323. package/.agents/state_rtk_beast_practices/agents/gemini.json +2 -2
  324. package/.agents/state_rtk_beast_practices/agents/openai.yaml +1 -1
  325. package/.agents/state_rtk_beast_practices/agents/qwen.json +2 -2
  326. package/.agents/state_rtk_beast_practices/agents/skill.yaml +2 -2
  327. package/.agents/state_zustand_beast_practices/SKILL.md +808 -11
  328. package/.agents/state_zustand_beast_practices/agents/claude.json +2 -2
  329. package/.agents/state_zustand_beast_practices/agents/copilot.json +2 -2
  330. package/.agents/state_zustand_beast_practices/agents/gemini.json +2 -2
  331. package/.agents/state_zustand_beast_practices/agents/openai.yaml +1 -1
  332. package/.agents/state_zustand_beast_practices/agents/qwen.json +2 -2
  333. package/.agents/state_zustand_beast_practices/agents/skill.yaml +2 -2
  334. package/.agents/styling_css_stack/SKILL.md +558 -12
  335. package/.agents/styling_css_stack/agents/claude.json +2 -2
  336. package/.agents/styling_css_stack/agents/copilot.json +2 -2
  337. package/.agents/styling_css_stack/agents/gemini.json +2 -2
  338. package/.agents/styling_css_stack/agents/openai.yaml +1 -1
  339. package/.agents/styling_css_stack/agents/qwen.json +2 -2
  340. package/.agents/styling_css_stack/agents/skill.yaml +2 -2
  341. package/.agents/system_design_checklist/SKILL.md +207 -48
  342. package/.agents/system_design_checklist/agents/claude.json +3 -2
  343. package/.agents/system_design_checklist/agents/copilot.json +3 -2
  344. package/.agents/system_design_checklist/agents/gemini.json +3 -2
  345. package/.agents/system_design_checklist/agents/openai.yaml +1 -1
  346. package/.agents/system_design_checklist/agents/qwen.json +3 -2
  347. package/.agents/system_design_checklist/agents/skill.yaml +2 -1
  348. package/.agents/tailwind_beast_practices/SKILL.md +512 -0
  349. package/.agents/tailwind_beast_practices/agents/claude.json +18 -0
  350. package/.agents/tailwind_beast_practices/agents/copilot.json +18 -0
  351. package/.agents/tailwind_beast_practices/agents/gemini.json +18 -0
  352. package/.agents/tailwind_beast_practices/agents/openai.yaml +8 -0
  353. package/.agents/tailwind_beast_practices/agents/qwen.json +18 -0
  354. package/.agents/tailwind_beast_practices/agents/skill.yaml +22 -0
  355. package/.agents/tanstack_beast_practices/SKILL.md +465 -11
  356. package/.agents/tanstack_beast_practices/agents/claude.json +2 -2
  357. package/.agents/tanstack_beast_practices/agents/copilot.json +2 -2
  358. package/.agents/tanstack_beast_practices/agents/gemini.json +2 -2
  359. package/.agents/tanstack_beast_practices/agents/openai.yaml +1 -1
  360. package/.agents/tanstack_beast_practices/agents/qwen.json +2 -2
  361. package/.agents/tanstack_beast_practices/agents/skill.yaml +2 -2
  362. package/.agents/tdd_workflow/SKILL.md +441 -22
  363. package/.agents/tdd_workflow/agents/claude.json +2 -2
  364. package/.agents/tdd_workflow/agents/copilot.json +2 -2
  365. package/.agents/tdd_workflow/agents/gemini.json +2 -2
  366. package/.agents/tdd_workflow/agents/openai.yaml +1 -1
  367. package/.agents/tdd_workflow/agents/qwen.json +2 -2
  368. package/.agents/tdd_workflow/agents/skill.yaml +2 -2
  369. package/.agents/testing_strategy_js/SKILL.md +636 -30
  370. package/.agents/testing_strategy_js/agents/claude.json +2 -2
  371. package/.agents/testing_strategy_js/agents/copilot.json +2 -2
  372. package/.agents/testing_strategy_js/agents/gemini.json +2 -2
  373. package/.agents/testing_strategy_js/agents/openai.yaml +1 -1
  374. package/.agents/testing_strategy_js/agents/qwen.json +2 -2
  375. package/.agents/testing_strategy_js/agents/skill.yaml +2 -2
  376. package/.agents/tests_quality_review/SKILL.md +279 -18
  377. package/.agents/tests_quality_review/agents/claude.json +2 -2
  378. package/.agents/tests_quality_review/agents/copilot.json +2 -2
  379. package/.agents/tests_quality_review/agents/gemini.json +2 -2
  380. package/.agents/tests_quality_review/agents/openai.yaml +1 -1
  381. package/.agents/tests_quality_review/agents/qwen.json +2 -2
  382. package/.agents/tests_quality_review/agents/skill.yaml +2 -2
  383. package/.agents/threat_model_baseline/SKILL.md +210 -57
  384. package/.agents/threat_model_baseline/agents/claude.json +2 -2
  385. package/.agents/threat_model_baseline/agents/copilot.json +2 -2
  386. package/.agents/threat_model_baseline/agents/gemini.json +2 -2
  387. package/.agents/threat_model_baseline/agents/openai.yaml +1 -1
  388. package/.agents/threat_model_baseline/agents/qwen.json +2 -2
  389. package/.agents/threat_model_baseline/agents/skill.yaml +2 -2
  390. package/.agents/tooling_bun_biome/SKILL.md +539 -17
  391. package/.agents/tooling_bun_biome/agents/claude.json +2 -2
  392. package/.agents/tooling_bun_biome/agents/copilot.json +2 -2
  393. package/.agents/tooling_bun_biome/agents/gemini.json +2 -2
  394. package/.agents/tooling_bun_biome/agents/openai.yaml +1 -1
  395. package/.agents/tooling_bun_biome/agents/qwen.json +2 -2
  396. package/.agents/tooling_bun_biome/agents/skill.yaml +2 -2
  397. package/.agents/typescript_beast_practices/SKILL.md +427 -8
  398. package/.agents/typescript_beast_practices/agents/claude.json +2 -2
  399. package/.agents/typescript_beast_practices/agents/copilot.json +2 -2
  400. package/.agents/typescript_beast_practices/agents/gemini.json +2 -2
  401. package/.agents/typescript_beast_practices/agents/openai.yaml +1 -1
  402. package/.agents/typescript_beast_practices/agents/qwen.json +2 -2
  403. package/.agents/typescript_beast_practices/agents/skill.yaml +2 -2
  404. package/.agents/ui_a11y_smoke_review/SKILL.md +195 -15
  405. package/.agents/ui_a11y_smoke_review/agents/claude.json +2 -2
  406. package/.agents/ui_a11y_smoke_review/agents/copilot.json +2 -2
  407. package/.agents/ui_a11y_smoke_review/agents/gemini.json +2 -2
  408. package/.agents/ui_a11y_smoke_review/agents/openai.yaml +1 -1
  409. package/.agents/ui_a11y_smoke_review/agents/qwen.json +2 -2
  410. package/.agents/ui_a11y_smoke_review/agents/skill.yaml +2 -2
  411. package/.agents/ui_inventory/SKILL.md +277 -50
  412. package/.agents/ui_inventory/agents/claude.json +2 -2
  413. package/.agents/ui_inventory/agents/copilot.json +2 -2
  414. package/.agents/ui_inventory/agents/gemini.json +2 -2
  415. package/.agents/ui_inventory/agents/openai.yaml +1 -1
  416. package/.agents/ui_inventory/agents/qwen.json +2 -2
  417. package/.agents/ui_inventory/agents/skill.yaml +2 -2
  418. package/.agents/ux_discovery/SKILL.md +214 -48
  419. package/.agents/ux_discovery/agents/claude.json +2 -2
  420. package/.agents/ux_discovery/agents/copilot.json +2 -2
  421. package/.agents/ux_discovery/agents/gemini.json +2 -2
  422. package/.agents/ux_discovery/agents/openai.yaml +1 -1
  423. package/.agents/ux_discovery/agents/qwen.json +2 -2
  424. package/.agents/ux_discovery/agents/skill.yaml +2 -2
  425. package/.agents/ux_spec/SKILL.md +282 -56
  426. package/.agents/ux_spec/agents/claude.json +2 -2
  427. package/.agents/ux_spec/agents/copilot.json +2 -2
  428. package/.agents/ux_spec/agents/gemini.json +2 -2
  429. package/.agents/ux_spec/agents/openai.yaml +1 -1
  430. package/.agents/ux_spec/agents/qwen.json +2 -2
  431. package/.agents/ux_spec/agents/skill.yaml +2 -2
  432. package/.agents/wix_iframe_sdk/SKILL.md +277 -48
  433. package/.agents/wix_iframe_sdk/agents/claude.json +2 -2
  434. package/.agents/wix_iframe_sdk/agents/copilot.json +2 -2
  435. package/.agents/wix_iframe_sdk/agents/gemini.json +2 -2
  436. package/.agents/wix_iframe_sdk/agents/openai.yaml +1 -1
  437. package/.agents/wix_iframe_sdk/agents/qwen.json +2 -2
  438. package/.agents/wix_iframe_sdk/agents/skill.yaml +2 -2
  439. package/.agents/wix_self_hosted_embedded_script/SKILL.md +605 -82
  440. package/.agents/wix_self_hosted_embedded_script/agents/claude.json +2 -2
  441. package/.agents/wix_self_hosted_embedded_script/agents/copilot.json +2 -2
  442. package/.agents/wix_self_hosted_embedded_script/agents/gemini.json +2 -2
  443. package/.agents/wix_self_hosted_embedded_script/agents/openai.yaml +1 -1
  444. package/.agents/wix_self_hosted_embedded_script/agents/qwen.json +2 -2
  445. package/.agents/wix_self_hosted_embedded_script/agents/skill.yaml +2 -2
  446. package/AGENTS.yaml +2 -0
  447. package/agents/conductor.md +50 -0
  448. package/agents/devops.md +31 -1
  449. package/agents/orchestrator.claude.json +2 -0
  450. package/agents/orchestrator.copilot.json +2 -0
  451. package/agents/orchestrator.gemini.json +2 -0
  452. package/agents/orchestrator.openai.yaml +2 -0
  453. package/agents/orchestrator.qwen.json +2 -0
  454. package/agents/reviewer.md +0 -1
  455. package/agents/senior_full_stack.md +1 -0
  456. package/agents/tester.md +1 -1
  457. package/agents/ux_ui_designer.md +2 -2
  458. package/locales/en/.agents/a11y_baseline/SKILL.md +260 -41
  459. package/locales/en/.agents/a11y_baseline/agents/claude.json +3 -2
  460. package/locales/en/.agents/a11y_baseline/agents/copilot.json +3 -2
  461. package/locales/en/.agents/a11y_baseline/agents/gemini.json +3 -2
  462. package/locales/en/.agents/a11y_baseline/agents/openai.yaml +1 -1
  463. package/locales/en/.agents/a11y_baseline/agents/qwen.json +3 -2
  464. package/locales/en/.agents/a11y_baseline/agents/skill.yaml +2 -1
  465. package/locales/en/.agents/adr_log/SKILL.md +330 -30
  466. package/locales/en/.agents/adr_log/agents/claude.json +5 -5
  467. package/locales/en/.agents/adr_log/agents/copilot.json +5 -5
  468. package/locales/en/.agents/adr_log/agents/gemini.json +5 -5
  469. package/locales/en/.agents/adr_log/agents/openai.yaml +3 -3
  470. package/locales/en/.agents/adr_log/agents/qwen.json +5 -5
  471. package/locales/en/.agents/adr_log/agents/skill.yaml +5 -5
  472. package/locales/en/.agents/api_contract_compliance_review/SKILL.md +218 -12
  473. package/locales/en/.agents/api_contract_compliance_review/agents/claude.json +2 -2
  474. package/locales/en/.agents/api_contract_compliance_review/agents/copilot.json +2 -2
  475. package/locales/en/.agents/api_contract_compliance_review/agents/gemini.json +2 -2
  476. package/locales/en/.agents/api_contract_compliance_review/agents/openai.yaml +1 -1
  477. package/locales/en/.agents/api_contract_compliance_review/agents/qwen.json +2 -2
  478. package/locales/en/.agents/api_contract_compliance_review/agents/skill.yaml +2 -2
  479. package/locales/en/.agents/api_contracts/SKILL.md +323 -36
  480. package/locales/en/.agents/api_contracts/agents/claude.json +2 -2
  481. package/locales/en/.agents/api_contracts/agents/copilot.json +2 -2
  482. package/locales/en/.agents/api_contracts/agents/gemini.json +2 -2
  483. package/locales/en/.agents/api_contracts/agents/openai.yaml +1 -1
  484. package/locales/en/.agents/api_contracts/agents/qwen.json +2 -2
  485. package/locales/en/.agents/api_contracts/agents/skill.yaml +2 -2
  486. package/locales/en/.agents/architecture_compliance_review/SKILL.md +206 -10
  487. package/locales/en/.agents/architecture_compliance_review/agents/claude.json +5 -4
  488. package/locales/en/.agents/architecture_compliance_review/agents/copilot.json +5 -4
  489. package/locales/en/.agents/architecture_compliance_review/agents/gemini.json +5 -4
  490. package/locales/en/.agents/architecture_compliance_review/agents/openai.yaml +3 -3
  491. package/locales/en/.agents/architecture_compliance_review/agents/qwen.json +5 -4
  492. package/locales/en/.agents/architecture_compliance_review/agents/skill.yaml +5 -4
  493. package/locales/en/.agents/architecture_doc/SKILL.md +374 -82
  494. package/locales/en/.agents/architecture_doc/agents/claude.json +2 -2
  495. package/locales/en/.agents/architecture_doc/agents/copilot.json +2 -2
  496. package/locales/en/.agents/architecture_doc/agents/gemini.json +2 -2
  497. package/locales/en/.agents/architecture_doc/agents/openai.yaml +1 -1
  498. package/locales/en/.agents/architecture_doc/agents/qwen.json +2 -2
  499. package/locales/en/.agents/architecture_doc/agents/skill.yaml +2 -2
  500. package/locales/en/.agents/board/SKILL.md +232 -43
  501. package/locales/en/.agents/board/agents/claude.json +2 -2
  502. package/locales/en/.agents/board/agents/copilot.json +2 -2
  503. package/locales/en/.agents/board/agents/gemini.json +2 -2
  504. package/locales/en/.agents/board/agents/openai.yaml +1 -1
  505. package/locales/en/.agents/board/agents/qwen.json +2 -2
  506. package/locales/en/.agents/board/agents/skill.yaml +2 -2
  507. package/locales/en/.agents/cloud_infrastructure_security/SKILL.md +277 -68
  508. package/locales/en/.agents/cloud_infrastructure_security/agents/claude.json +5 -4
  509. package/locales/en/.agents/cloud_infrastructure_security/agents/copilot.json +5 -4
  510. package/locales/en/.agents/cloud_infrastructure_security/agents/gemini.json +5 -4
  511. package/locales/en/.agents/cloud_infrastructure_security/agents/openai.yaml +3 -3
  512. package/locales/en/.agents/cloud_infrastructure_security/agents/qwen.json +5 -4
  513. package/locales/en/.agents/cloud_infrastructure_security/agents/skill.yaml +5 -4
  514. package/locales/en/.agents/code_review_checklist/SKILL.md +194 -41
  515. package/locales/en/.agents/code_review_checklist/agents/claude.json +2 -2
  516. package/locales/en/.agents/code_review_checklist/agents/copilot.json +2 -2
  517. package/locales/en/.agents/code_review_checklist/agents/gemini.json +2 -2
  518. package/locales/en/.agents/code_review_checklist/agents/openai.yaml +1 -1
  519. package/locales/en/.agents/code_review_checklist/agents/qwen.json +2 -2
  520. package/locales/en/.agents/code_review_checklist/agents/skill.yaml +2 -2
  521. package/locales/en/.agents/current_state_analysis/SKILL.md +225 -44
  522. package/locales/en/.agents/current_state_analysis/agents/claude.json +5 -4
  523. package/locales/en/.agents/current_state_analysis/agents/copilot.json +5 -4
  524. package/locales/en/.agents/current_state_analysis/agents/gemini.json +5 -4
  525. package/locales/en/.agents/current_state_analysis/agents/openai.yaml +3 -3
  526. package/locales/en/.agents/current_state_analysis/agents/qwen.json +5 -4
  527. package/locales/en/.agents/current_state_analysis/agents/skill.yaml +5 -4
  528. package/locales/en/.agents/data_model/SKILL.md +277 -32
  529. package/locales/en/.agents/data_model/agents/claude.json +2 -2
  530. package/locales/en/.agents/data_model/agents/copilot.json +2 -2
  531. package/locales/en/.agents/data_model/agents/gemini.json +2 -2
  532. package/locales/en/.agents/data_model/agents/openai.yaml +1 -1
  533. package/locales/en/.agents/data_model/agents/qwen.json +2 -2
  534. package/locales/en/.agents/data_model/agents/skill.yaml +2 -2
  535. package/locales/en/.agents/dependency_supply_chain_review/SKILL.md +291 -11
  536. package/locales/en/.agents/dependency_supply_chain_review/agents/claude.json +5 -4
  537. package/locales/en/.agents/dependency_supply_chain_review/agents/copilot.json +5 -4
  538. package/locales/en/.agents/dependency_supply_chain_review/agents/gemini.json +5 -4
  539. package/locales/en/.agents/dependency_supply_chain_review/agents/openai.yaml +3 -3
  540. package/locales/en/.agents/dependency_supply_chain_review/agents/qwen.json +5 -4
  541. package/locales/en/.agents/dependency_supply_chain_review/agents/skill.yaml +5 -4
  542. package/locales/en/.agents/deployment_ci_plan/SKILL.md +404 -45
  543. package/locales/en/.agents/deployment_ci_plan/agents/claude.json +2 -2
  544. package/locales/en/.agents/deployment_ci_plan/agents/copilot.json +2 -2
  545. package/locales/en/.agents/deployment_ci_plan/agents/gemini.json +2 -2
  546. package/locales/en/.agents/deployment_ci_plan/agents/openai.yaml +1 -1
  547. package/locales/en/.agents/deployment_ci_plan/agents/qwen.json +2 -2
  548. package/locales/en/.agents/deployment_ci_plan/agents/skill.yaml +2 -2
  549. package/locales/en/.agents/design_intake/SKILL.md +224 -68
  550. package/locales/en/.agents/design_intake/agents/claude.json +4 -5
  551. package/locales/en/.agents/design_intake/agents/copilot.json +4 -5
  552. package/locales/en/.agents/design_intake/agents/gemini.json +4 -5
  553. package/locales/en/.agents/design_intake/agents/openai.yaml +3 -3
  554. package/locales/en/.agents/design_intake/agents/qwen.json +4 -5
  555. package/locales/en/.agents/design_intake/agents/skill.yaml +4 -5
  556. package/locales/en/.agents/design_parity_review/SKILL.md +216 -60
  557. package/locales/en/.agents/design_parity_review/agents/claude.json +2 -3
  558. package/locales/en/.agents/design_parity_review/agents/copilot.json +2 -3
  559. package/locales/en/.agents/design_parity_review/agents/gemini.json +2 -3
  560. package/locales/en/.agents/design_parity_review/agents/openai.yaml +2 -2
  561. package/locales/en/.agents/design_parity_review/agents/qwen.json +2 -3
  562. package/locales/en/.agents/design_parity_review/agents/skill.yaml +2 -3
  563. package/locales/en/.agents/design_systems/SKILL.md +432 -15
  564. package/locales/en/.agents/design_systems/agents/claude.json +2 -2
  565. package/locales/en/.agents/design_systems/agents/copilot.json +2 -2
  566. package/locales/en/.agents/design_systems/agents/gemini.json +2 -2
  567. package/locales/en/.agents/design_systems/agents/openai.yaml +1 -1
  568. package/locales/en/.agents/design_systems/agents/qwen.json +2 -2
  569. package/locales/en/.agents/design_systems/agents/skill.yaml +2 -2
  570. package/locales/en/.agents/dev_reference_snippets/SKILL.md +585 -397
  571. package/locales/en/.agents/dev_reference_snippets/agents/claude.json +2 -2
  572. package/locales/en/.agents/dev_reference_snippets/agents/copilot.json +2 -2
  573. package/locales/en/.agents/dev_reference_snippets/agents/gemini.json +2 -2
  574. package/locales/en/.agents/dev_reference_snippets/agents/openai.yaml +1 -1
  575. package/locales/en/.agents/dev_reference_snippets/agents/qwen.json +2 -2
  576. package/locales/en/.agents/dev_reference_snippets/agents/skill.yaml +2 -2
  577. package/locales/en/.agents/docker_kubernetes_architecture/SKILL.md +473 -137
  578. package/locales/en/.agents/docker_kubernetes_architecture/agents/claude.json +5 -4
  579. package/locales/en/.agents/docker_kubernetes_architecture/agents/copilot.json +5 -4
  580. package/locales/en/.agents/docker_kubernetes_architecture/agents/gemini.json +5 -4
  581. package/locales/en/.agents/docker_kubernetes_architecture/agents/openai.yaml +3 -3
  582. package/locales/en/.agents/docker_kubernetes_architecture/agents/qwen.json +5 -4
  583. package/locales/en/.agents/docker_kubernetes_architecture/agents/skill.yaml +5 -4
  584. package/locales/en/.agents/es2025_beast_practices/SKILL.md +440 -15
  585. package/locales/en/.agents/es2025_beast_practices/agents/claude.json +4 -4
  586. package/locales/en/.agents/es2025_beast_practices/agents/copilot.json +4 -4
  587. package/locales/en/.agents/es2025_beast_practices/agents/gemini.json +4 -4
  588. package/locales/en/.agents/es2025_beast_practices/agents/openai.yaml +3 -3
  589. package/locales/en/.agents/es2025_beast_practices/agents/qwen.json +4 -4
  590. package/locales/en/.agents/es2025_beast_practices/agents/skill.yaml +4 -4
  591. package/locales/en/.agents/gates/SKILL.md +128 -29
  592. package/locales/en/.agents/gates/agents/claude.json +2 -2
  593. package/locales/en/.agents/gates/agents/copilot.json +2 -2
  594. package/locales/en/.agents/gates/agents/gemini.json +2 -2
  595. package/locales/en/.agents/gates/agents/openai.yaml +1 -1
  596. package/locales/en/.agents/gates/agents/qwen.json +2 -2
  597. package/locales/en/.agents/gates/agents/skill.yaml +2 -2
  598. package/locales/en/.agents/go_beast_practices/SKILL.md +557 -23
  599. package/locales/en/.agents/go_beast_practices/agents/claude.json +5 -4
  600. package/locales/en/.agents/go_beast_practices/agents/copilot.json +5 -4
  601. package/locales/en/.agents/go_beast_practices/agents/gemini.json +5 -4
  602. package/locales/en/.agents/go_beast_practices/agents/openai.yaml +3 -3
  603. package/locales/en/.agents/go_beast_practices/agents/qwen.json +5 -4
  604. package/locales/en/.agents/go_beast_practices/agents/skill.yaml +5 -4
  605. package/locales/en/.agents/google_stitch_skill/SKILL.md +508 -70
  606. package/locales/en/.agents/google_stitch_skill/agents/claude.json +7 -6
  607. package/locales/en/.agents/google_stitch_skill/agents/copilot.json +7 -6
  608. package/locales/en/.agents/google_stitch_skill/agents/gemini.json +7 -6
  609. package/locales/en/.agents/google_stitch_skill/agents/openai.yaml +3 -1
  610. package/locales/en/.agents/google_stitch_skill/agents/qwen.json +7 -6
  611. package/locales/en/.agents/google_stitch_skill/agents/skill.yaml +5 -3
  612. package/locales/en/.agents/handoff/SKILL.md +206 -46
  613. package/locales/en/.agents/handoff/agents/claude.json +5 -5
  614. package/locales/en/.agents/handoff/agents/copilot.json +5 -5
  615. package/locales/en/.agents/handoff/agents/gemini.json +5 -5
  616. package/locales/en/.agents/handoff/agents/openai.yaml +3 -3
  617. package/locales/en/.agents/handoff/agents/qwen.json +5 -5
  618. package/locales/en/.agents/handoff/agents/skill.yaml +5 -5
  619. package/locales/en/.agents/k8s_manifests_conventions/SKILL.md +540 -167
  620. package/locales/en/.agents/k8s_manifests_conventions/agents/claude.json +2 -2
  621. package/locales/en/.agents/k8s_manifests_conventions/agents/copilot.json +2 -2
  622. package/locales/en/.agents/k8s_manifests_conventions/agents/gemini.json +2 -2
  623. package/locales/en/.agents/k8s_manifests_conventions/agents/openai.yaml +1 -1
  624. package/locales/en/.agents/k8s_manifests_conventions/agents/qwen.json +2 -2
  625. package/locales/en/.agents/k8s_manifests_conventions/agents/skill.yaml +2 -2
  626. package/locales/en/.agents/memory/SKILL.md +211 -21
  627. package/locales/en/.agents/memory/agents/claude.json +5 -4
  628. package/locales/en/.agents/memory/agents/copilot.json +5 -4
  629. package/locales/en/.agents/memory/agents/gemini.json +5 -4
  630. package/locales/en/.agents/memory/agents/openai.yaml +3 -3
  631. package/locales/en/.agents/memory/agents/qwen.json +5 -4
  632. package/locales/en/.agents/memory/agents/skill.yaml +5 -4
  633. package/locales/en/.agents/mongodb_mongoose_best_practices/SKILL.md +669 -178
  634. package/locales/en/.agents/mongodb_mongoose_best_practices/agents/claude.json +4 -5
  635. package/locales/en/.agents/mongodb_mongoose_best_practices/agents/copilot.json +4 -5
  636. package/locales/en/.agents/mongodb_mongoose_best_practices/agents/gemini.json +4 -5
  637. package/locales/en/.agents/mongodb_mongoose_best_practices/agents/openai.yaml +3 -3
  638. package/locales/en/.agents/mongodb_mongoose_best_practices/agents/qwen.json +4 -5
  639. package/locales/en/.agents/mongodb_mongoose_best_practices/agents/skill.yaml +4 -5
  640. package/locales/en/.agents/n8n_pinecone_qdrant_supabase/SKILL.md +669 -57
  641. package/locales/en/.agents/n8n_pinecone_qdrant_supabase/agents/claude.json +5 -5
  642. package/locales/en/.agents/n8n_pinecone_qdrant_supabase/agents/copilot.json +5 -5
  643. package/locales/en/.agents/n8n_pinecone_qdrant_supabase/agents/gemini.json +5 -5
  644. package/locales/en/.agents/n8n_pinecone_qdrant_supabase/agents/openai.yaml +3 -3
  645. package/locales/en/.agents/n8n_pinecone_qdrant_supabase/agents/qwen.json +5 -5
  646. package/locales/en/.agents/n8n_pinecone_qdrant_supabase/agents/skill.yaml +5 -5
  647. package/locales/en/.agents/node_express_beast_practices/SKILL.md +718 -19
  648. package/locales/en/.agents/node_express_beast_practices/agents/claude.json +1 -1
  649. package/locales/en/.agents/node_express_beast_practices/agents/copilot.json +1 -1
  650. package/locales/en/.agents/node_express_beast_practices/agents/gemini.json +1 -1
  651. package/locales/en/.agents/node_express_beast_practices/agents/openai.yaml +1 -1
  652. package/locales/en/.agents/node_express_beast_practices/agents/qwen.json +1 -1
  653. package/locales/en/.agents/node_express_beast_practices/agents/skill.yaml +1 -1
  654. package/locales/en/.agents/observability_logging/SKILL.md +499 -16
  655. package/locales/en/.agents/observability_logging/agents/claude.json +4 -4
  656. package/locales/en/.agents/observability_logging/agents/copilot.json +4 -4
  657. package/locales/en/.agents/observability_logging/agents/gemini.json +4 -4
  658. package/locales/en/.agents/observability_logging/agents/openai.yaml +3 -3
  659. package/locales/en/.agents/observability_logging/agents/qwen.json +4 -4
  660. package/locales/en/.agents/observability_logging/agents/skill.yaml +4 -4
  661. package/locales/en/.agents/observability_plan/SKILL.md +273 -32
  662. package/locales/en/.agents/observability_plan/agents/claude.json +6 -4
  663. package/locales/en/.agents/observability_plan/agents/copilot.json +6 -4
  664. package/locales/en/.agents/observability_plan/agents/gemini.json +6 -4
  665. package/locales/en/.agents/observability_plan/agents/openai.yaml +3 -3
  666. package/locales/en/.agents/observability_plan/agents/qwen.json +6 -4
  667. package/locales/en/.agents/observability_plan/agents/skill.yaml +5 -3
  668. package/locales/en/.agents/observability_review/SKILL.md +245 -11
  669. package/locales/en/.agents/observability_review/agents/claude.json +6 -4
  670. package/locales/en/.agents/observability_review/agents/copilot.json +6 -4
  671. package/locales/en/.agents/observability_review/agents/gemini.json +6 -4
  672. package/locales/en/.agents/observability_review/agents/openai.yaml +3 -3
  673. package/locales/en/.agents/observability_review/agents/qwen.json +6 -4
  674. package/locales/en/.agents/observability_review/agents/skill.yaml +5 -3
  675. package/locales/en/.agents/performance_review_baseline/SKILL.md +232 -10
  676. package/locales/en/.agents/performance_review_baseline/agents/claude.json +5 -4
  677. package/locales/en/.agents/performance_review_baseline/agents/copilot.json +5 -4
  678. package/locales/en/.agents/performance_review_baseline/agents/gemini.json +5 -4
  679. package/locales/en/.agents/performance_review_baseline/agents/openai.yaml +3 -3
  680. package/locales/en/.agents/performance_review_baseline/agents/qwen.json +5 -4
  681. package/locales/en/.agents/performance_review_baseline/agents/skill.yaml +5 -4
  682. package/locales/en/.agents/pm_backlog/SKILL.md +239 -21
  683. package/locales/en/.agents/pm_backlog/agents/claude.json +2 -2
  684. package/locales/en/.agents/pm_backlog/agents/copilot.json +2 -2
  685. package/locales/en/.agents/pm_backlog/agents/gemini.json +2 -2
  686. package/locales/en/.agents/pm_backlog/agents/openai.yaml +1 -1
  687. package/locales/en/.agents/pm_backlog/agents/qwen.json +2 -2
  688. package/locales/en/.agents/pm_backlog/agents/skill.yaml +2 -2
  689. package/locales/en/.agents/pm_interview/SKILL.md +178 -37
  690. package/locales/en/.agents/pm_interview/agents/claude.json +5 -4
  691. package/locales/en/.agents/pm_interview/agents/copilot.json +5 -4
  692. package/locales/en/.agents/pm_interview/agents/gemini.json +5 -4
  693. package/locales/en/.agents/pm_interview/agents/openai.yaml +3 -3
  694. package/locales/en/.agents/pm_interview/agents/qwen.json +5 -4
  695. package/locales/en/.agents/pm_interview/agents/skill.yaml +5 -4
  696. package/locales/en/.agents/pm_prd/SKILL.md +197 -38
  697. package/locales/en/.agents/pm_prd/agents/claude.json +2 -2
  698. package/locales/en/.agents/pm_prd/agents/copilot.json +2 -2
  699. package/locales/en/.agents/pm_prd/agents/gemini.json +2 -2
  700. package/locales/en/.agents/pm_prd/agents/openai.yaml +1 -1
  701. package/locales/en/.agents/pm_prd/agents/qwen.json +2 -2
  702. package/locales/en/.agents/pm_prd/agents/skill.yaml +2 -2
  703. package/locales/en/.agents/qa_api_contract_tests/SKILL.md +207 -16
  704. package/locales/en/.agents/qa_api_contract_tests/agents/claude.json +2 -2
  705. package/locales/en/.agents/qa_api_contract_tests/agents/copilot.json +2 -2
  706. package/locales/en/.agents/qa_api_contract_tests/agents/gemini.json +2 -2
  707. package/locales/en/.agents/qa_api_contract_tests/agents/openai.yaml +1 -1
  708. package/locales/en/.agents/qa_api_contract_tests/agents/qwen.json +2 -2
  709. package/locales/en/.agents/qa_api_contract_tests/agents/skill.yaml +2 -2
  710. package/locales/en/.agents/qa_browser_testing/SKILL.md +254 -86
  711. package/locales/en/.agents/qa_e2e_playwright/SKILL.md +313 -116
  712. package/locales/en/.agents/qa_manual_run/SKILL.md +202 -9
  713. package/locales/en/.agents/qa_manual_run/agents/claude.json +2 -2
  714. package/locales/en/.agents/qa_manual_run/agents/copilot.json +2 -2
  715. package/locales/en/.agents/qa_manual_run/agents/gemini.json +2 -2
  716. package/locales/en/.agents/qa_manual_run/agents/openai.yaml +1 -1
  717. package/locales/en/.agents/qa_manual_run/agents/qwen.json +2 -2
  718. package/locales/en/.agents/qa_manual_run/agents/skill.yaml +2 -2
  719. package/locales/en/.agents/qa_regression_baseline/SKILL.md +217 -0
  720. package/locales/en/.agents/qa_regression_baseline/agents/claude.json +19 -0
  721. package/locales/en/.agents/qa_regression_baseline/agents/copilot.json +19 -0
  722. package/locales/en/.agents/qa_regression_baseline/agents/gemini.json +19 -0
  723. package/locales/en/.agents/qa_regression_baseline/agents/openai.yaml +8 -0
  724. package/locales/en/.agents/qa_regression_baseline/agents/qwen.json +19 -0
  725. package/locales/en/.agents/qa_regression_baseline/agents/skill.yaml +23 -0
  726. package/locales/en/.agents/qa_security_smoke_tests/SKILL.md +182 -8
  727. package/locales/en/.agents/qa_security_smoke_tests/agents/claude.json +2 -2
  728. package/locales/en/.agents/qa_security_smoke_tests/agents/copilot.json +2 -2
  729. package/locales/en/.agents/qa_security_smoke_tests/agents/gemini.json +2 -2
  730. package/locales/en/.agents/qa_security_smoke_tests/agents/openai.yaml +1 -1
  731. package/locales/en/.agents/qa_security_smoke_tests/agents/qwen.json +2 -2
  732. package/locales/en/.agents/qa_security_smoke_tests/agents/skill.yaml +2 -2
  733. package/locales/en/.agents/qa_test_plan/SKILL.md +197 -14
  734. package/locales/en/.agents/qa_test_plan/agents/claude.json +2 -2
  735. package/locales/en/.agents/qa_test_plan/agents/copilot.json +2 -2
  736. package/locales/en/.agents/qa_test_plan/agents/gemini.json +2 -2
  737. package/locales/en/.agents/qa_test_plan/agents/openai.yaml +1 -1
  738. package/locales/en/.agents/qa_test_plan/agents/qwen.json +2 -2
  739. package/locales/en/.agents/qa_test_plan/agents/skill.yaml +2 -2
  740. package/locales/en/.agents/qa_ui_a11y_smoke/SKILL.md +224 -6
  741. package/locales/en/.agents/qa_ui_a11y_smoke/agents/claude.json +5 -4
  742. package/locales/en/.agents/qa_ui_a11y_smoke/agents/copilot.json +5 -4
  743. package/locales/en/.agents/qa_ui_a11y_smoke/agents/gemini.json +5 -4
  744. package/locales/en/.agents/qa_ui_a11y_smoke/agents/openai.yaml +3 -3
  745. package/locales/en/.agents/qa_ui_a11y_smoke/agents/qwen.json +5 -4
  746. package/locales/en/.agents/qa_ui_a11y_smoke/agents/skill.yaml +5 -4
  747. package/locales/en/.agents/react_15_3_wix_iframe/SKILL.md +419 -20
  748. package/locales/en/.agents/react_15_3_wix_iframe/agents/claude.json +2 -2
  749. package/locales/en/.agents/react_15_3_wix_iframe/agents/copilot.json +2 -2
  750. package/locales/en/.agents/react_15_3_wix_iframe/agents/gemini.json +2 -2
  751. package/locales/en/.agents/react_15_3_wix_iframe/agents/openai.yaml +1 -1
  752. package/locales/en/.agents/react_15_3_wix_iframe/agents/qwen.json +2 -2
  753. package/locales/en/.agents/react_15_3_wix_iframe/agents/skill.yaml +2 -2
  754. package/locales/en/.agents/react_beast_practices/SKILL.md +285 -18
  755. package/locales/en/.agents/react_beast_practices/agents/claude.json +4 -4
  756. package/locales/en/.agents/react_beast_practices/agents/copilot.json +4 -4
  757. package/locales/en/.agents/react_beast_practices/agents/gemini.json +4 -4
  758. package/locales/en/.agents/react_beast_practices/agents/openai.yaml +3 -3
  759. package/locales/en/.agents/react_beast_practices/agents/qwen.json +4 -4
  760. package/locales/en/.agents/react_beast_practices/agents/skill.yaml +4 -4
  761. package/locales/en/.agents/release_gate/SKILL.md +205 -69
  762. package/locales/en/.agents/release_gate/agents/claude.json +5 -4
  763. package/locales/en/.agents/release_gate/agents/copilot.json +5 -4
  764. package/locales/en/.agents/release_gate/agents/gemini.json +5 -4
  765. package/locales/en/.agents/release_gate/agents/openai.yaml +3 -3
  766. package/locales/en/.agents/release_gate/agents/qwen.json +5 -4
  767. package/locales/en/.agents/release_gate/agents/skill.yaml +5 -4
  768. package/locales/en/.agents/release_gate_checklist_template/SKILL.md +175 -61
  769. package/locales/en/.agents/review_reference_snippets/SKILL.md +163 -46
  770. package/locales/en/.agents/security_baseline_dev/SKILL.md +496 -16
  771. package/locales/en/.agents/security_baseline_dev/agents/claude.json +2 -2
  772. package/locales/en/.agents/security_baseline_dev/agents/copilot.json +2 -2
  773. package/locales/en/.agents/security_baseline_dev/agents/gemini.json +2 -2
  774. package/locales/en/.agents/security_baseline_dev/agents/openai.yaml +1 -1
  775. package/locales/en/.agents/security_baseline_dev/agents/qwen.json +2 -2
  776. package/locales/en/.agents/security_baseline_dev/agents/skill.yaml +2 -2
  777. package/locales/en/.agents/security_review/SKILL.md +277 -55
  778. package/locales/en/.agents/security_review_baseline/SKILL.md +111 -17
  779. package/locales/en/.agents/security_review_baseline/agents/claude.json +2 -2
  780. package/locales/en/.agents/security_review_baseline/agents/copilot.json +2 -2
  781. package/locales/en/.agents/security_review_baseline/agents/gemini.json +2 -2
  782. package/locales/en/.agents/security_review_baseline/agents/openai.yaml +1 -1
  783. package/locales/en/.agents/security_review_baseline/agents/qwen.json +2 -2
  784. package/locales/en/.agents/security_review_baseline/agents/skill.yaml +2 -2
  785. package/locales/en/.agents/state_rtk_beast_practices/SKILL.md +735 -15
  786. package/locales/en/.agents/state_rtk_beast_practices/agents/claude.json +2 -2
  787. package/locales/en/.agents/state_rtk_beast_practices/agents/copilot.json +2 -2
  788. package/locales/en/.agents/state_rtk_beast_practices/agents/gemini.json +2 -2
  789. package/locales/en/.agents/state_rtk_beast_practices/agents/openai.yaml +1 -1
  790. package/locales/en/.agents/state_rtk_beast_practices/agents/qwen.json +2 -2
  791. package/locales/en/.agents/state_rtk_beast_practices/agents/skill.yaml +2 -2
  792. package/locales/en/.agents/state_zustand_beast_practices/SKILL.md +808 -11
  793. package/locales/en/.agents/state_zustand_beast_practices/agents/claude.json +2 -2
  794. package/locales/en/.agents/state_zustand_beast_practices/agents/copilot.json +2 -2
  795. package/locales/en/.agents/state_zustand_beast_practices/agents/gemini.json +2 -2
  796. package/locales/en/.agents/state_zustand_beast_practices/agents/openai.yaml +1 -1
  797. package/locales/en/.agents/state_zustand_beast_practices/agents/qwen.json +2 -2
  798. package/locales/en/.agents/state_zustand_beast_practices/agents/skill.yaml +2 -2
  799. package/locales/en/.agents/styling_css_stack/SKILL.md +558 -12
  800. package/locales/en/.agents/styling_css_stack/agents/claude.json +5 -5
  801. package/locales/en/.agents/styling_css_stack/agents/copilot.json +5 -5
  802. package/locales/en/.agents/styling_css_stack/agents/gemini.json +5 -5
  803. package/locales/en/.agents/styling_css_stack/agents/openai.yaml +3 -3
  804. package/locales/en/.agents/styling_css_stack/agents/qwen.json +5 -5
  805. package/locales/en/.agents/styling_css_stack/agents/skill.yaml +5 -5
  806. package/locales/en/.agents/system_design_checklist/SKILL.md +199 -40
  807. package/locales/en/.agents/system_design_checklist/agents/claude.json +3 -2
  808. package/locales/en/.agents/system_design_checklist/agents/copilot.json +3 -2
  809. package/locales/en/.agents/system_design_checklist/agents/gemini.json +3 -2
  810. package/locales/en/.agents/system_design_checklist/agents/openai.yaml +1 -1
  811. package/locales/en/.agents/system_design_checklist/agents/qwen.json +3 -2
  812. package/locales/en/.agents/system_design_checklist/agents/skill.yaml +2 -1
  813. package/locales/en/.agents/tailwind_beast_practices/SKILL.md +512 -0
  814. package/locales/en/.agents/tailwind_beast_practices/agents/claude.json +18 -0
  815. package/locales/en/.agents/tailwind_beast_practices/agents/copilot.json +18 -0
  816. package/locales/en/.agents/tailwind_beast_practices/agents/gemini.json +18 -0
  817. package/locales/en/.agents/tailwind_beast_practices/agents/openai.yaml +8 -0
  818. package/locales/en/.agents/tailwind_beast_practices/agents/qwen.json +18 -0
  819. package/locales/en/.agents/tailwind_beast_practices/agents/skill.yaml +22 -0
  820. package/locales/en/.agents/tanstack_beast_practices/SKILL.md +473 -19
  821. package/locales/en/.agents/tanstack_beast_practices/agents/claude.json +2 -2
  822. package/locales/en/.agents/tanstack_beast_practices/agents/copilot.json +2 -2
  823. package/locales/en/.agents/tanstack_beast_practices/agents/gemini.json +2 -2
  824. package/locales/en/.agents/tanstack_beast_practices/agents/openai.yaml +1 -1
  825. package/locales/en/.agents/tanstack_beast_practices/agents/qwen.json +2 -2
  826. package/locales/en/.agents/tanstack_beast_practices/agents/skill.yaml +2 -2
  827. package/locales/en/.agents/tdd_workflow/SKILL.md +453 -34
  828. package/locales/en/.agents/tdd_workflow/agents/claude.json +2 -2
  829. package/locales/en/.agents/tdd_workflow/agents/copilot.json +2 -2
  830. package/locales/en/.agents/tdd_workflow/agents/gemini.json +2 -2
  831. package/locales/en/.agents/tdd_workflow/agents/openai.yaml +1 -1
  832. package/locales/en/.agents/tdd_workflow/agents/qwen.json +2 -2
  833. package/locales/en/.agents/tdd_workflow/agents/skill.yaml +2 -2
  834. package/locales/en/.agents/testing_strategy_js/SKILL.md +636 -30
  835. package/locales/en/.agents/testing_strategy_js/agents/claude.json +2 -2
  836. package/locales/en/.agents/testing_strategy_js/agents/copilot.json +2 -2
  837. package/locales/en/.agents/testing_strategy_js/agents/gemini.json +2 -2
  838. package/locales/en/.agents/testing_strategy_js/agents/openai.yaml +1 -1
  839. package/locales/en/.agents/testing_strategy_js/agents/qwen.json +2 -2
  840. package/locales/en/.agents/testing_strategy_js/agents/skill.yaml +2 -2
  841. package/locales/en/.agents/tests_quality_review/SKILL.md +279 -18
  842. package/locales/en/.agents/tests_quality_review/agents/claude.json +2 -2
  843. package/locales/en/.agents/tests_quality_review/agents/copilot.json +2 -2
  844. package/locales/en/.agents/tests_quality_review/agents/gemini.json +2 -2
  845. package/locales/en/.agents/tests_quality_review/agents/openai.yaml +1 -1
  846. package/locales/en/.agents/tests_quality_review/agents/qwen.json +2 -2
  847. package/locales/en/.agents/tests_quality_review/agents/skill.yaml +2 -2
  848. package/locales/en/.agents/threat_model_baseline/SKILL.md +202 -49
  849. package/locales/en/.agents/threat_model_baseline/agents/claude.json +2 -2
  850. package/locales/en/.agents/threat_model_baseline/agents/copilot.json +2 -2
  851. package/locales/en/.agents/threat_model_baseline/agents/gemini.json +2 -2
  852. package/locales/en/.agents/threat_model_baseline/agents/openai.yaml +1 -1
  853. package/locales/en/.agents/threat_model_baseline/agents/qwen.json +2 -2
  854. package/locales/en/.agents/threat_model_baseline/agents/skill.yaml +2 -2
  855. package/locales/en/.agents/tooling_bun_biome/SKILL.md +531 -9
  856. package/locales/en/.agents/tooling_bun_biome/agents/claude.json +5 -5
  857. package/locales/en/.agents/tooling_bun_biome/agents/copilot.json +5 -5
  858. package/locales/en/.agents/tooling_bun_biome/agents/gemini.json +5 -5
  859. package/locales/en/.agents/tooling_bun_biome/agents/openai.yaml +3 -3
  860. package/locales/en/.agents/tooling_bun_biome/agents/qwen.json +5 -5
  861. package/locales/en/.agents/tooling_bun_biome/agents/skill.yaml +5 -5
  862. package/locales/en/.agents/typescript_beast_practices/SKILL.md +434 -15
  863. package/locales/en/.agents/typescript_beast_practices/agents/claude.json +2 -2
  864. package/locales/en/.agents/typescript_beast_practices/agents/copilot.json +2 -2
  865. package/locales/en/.agents/typescript_beast_practices/agents/gemini.json +2 -2
  866. package/locales/en/.agents/typescript_beast_practices/agents/openai.yaml +1 -1
  867. package/locales/en/.agents/typescript_beast_practices/agents/qwen.json +2 -2
  868. package/locales/en/.agents/typescript_beast_practices/agents/skill.yaml +2 -2
  869. package/locales/en/.agents/ui_a11y_smoke_review/SKILL.md +189 -9
  870. package/locales/en/.agents/ui_a11y_smoke_review/agents/claude.json +5 -5
  871. package/locales/en/.agents/ui_a11y_smoke_review/agents/copilot.json +5 -5
  872. package/locales/en/.agents/ui_a11y_smoke_review/agents/gemini.json +5 -5
  873. package/locales/en/.agents/ui_a11y_smoke_review/agents/openai.yaml +3 -3
  874. package/locales/en/.agents/ui_a11y_smoke_review/agents/qwen.json +5 -5
  875. package/locales/en/.agents/ui_a11y_smoke_review/agents/skill.yaml +5 -5
  876. package/locales/en/.agents/ui_inventory/SKILL.md +271 -44
  877. package/locales/en/.agents/ui_inventory/agents/claude.json +2 -2
  878. package/locales/en/.agents/ui_inventory/agents/copilot.json +2 -2
  879. package/locales/en/.agents/ui_inventory/agents/gemini.json +2 -2
  880. package/locales/en/.agents/ui_inventory/agents/openai.yaml +1 -1
  881. package/locales/en/.agents/ui_inventory/agents/qwen.json +2 -2
  882. package/locales/en/.agents/ui_inventory/agents/skill.yaml +2 -2
  883. package/locales/en/.agents/ux_discovery/SKILL.md +199 -33
  884. package/locales/en/.agents/ux_discovery/agents/claude.json +2 -2
  885. package/locales/en/.agents/ux_discovery/agents/copilot.json +2 -2
  886. package/locales/en/.agents/ux_discovery/agents/gemini.json +2 -2
  887. package/locales/en/.agents/ux_discovery/agents/openai.yaml +1 -1
  888. package/locales/en/.agents/ux_discovery/agents/qwen.json +2 -2
  889. package/locales/en/.agents/ux_discovery/agents/skill.yaml +2 -2
  890. package/locales/en/.agents/ux_spec/SKILL.md +278 -51
  891. package/locales/en/.agents/ux_spec/agents/claude.json +2 -2
  892. package/locales/en/.agents/ux_spec/agents/copilot.json +2 -2
  893. package/locales/en/.agents/ux_spec/agents/gemini.json +2 -2
  894. package/locales/en/.agents/ux_spec/agents/openai.yaml +1 -1
  895. package/locales/en/.agents/ux_spec/agents/qwen.json +2 -2
  896. package/locales/en/.agents/ux_spec/agents/skill.yaml +2 -2
  897. package/locales/en/.agents/wix_iframe_sdk/SKILL.md +271 -42
  898. package/locales/en/.agents/wix_iframe_sdk/agents/claude.json +4 -5
  899. package/locales/en/.agents/wix_iframe_sdk/agents/copilot.json +4 -5
  900. package/locales/en/.agents/wix_iframe_sdk/agents/gemini.json +4 -5
  901. package/locales/en/.agents/wix_iframe_sdk/agents/openai.yaml +3 -3
  902. package/locales/en/.agents/wix_iframe_sdk/agents/qwen.json +4 -5
  903. package/locales/en/.agents/wix_iframe_sdk/agents/skill.yaml +4 -5
  904. package/locales/en/.agents/wix_self_hosted_embedded_script/SKILL.md +611 -88
  905. package/locales/en/.agents/wix_self_hosted_embedded_script/agents/claude.json +2 -2
  906. package/locales/en/.agents/wix_self_hosted_embedded_script/agents/copilot.json +2 -2
  907. package/locales/en/.agents/wix_self_hosted_embedded_script/agents/gemini.json +2 -2
  908. package/locales/en/.agents/wix_self_hosted_embedded_script/agents/openai.yaml +1 -1
  909. package/locales/en/.agents/wix_self_hosted_embedded_script/agents/qwen.json +2 -2
  910. package/locales/en/.agents/wix_self_hosted_embedded_script/agents/skill.yaml +2 -2
  911. package/locales/en/AGENTS.yaml +2 -0
  912. package/locales/en/agents/architect.md +1 -1
  913. package/locales/en/agents/conductor.md +50 -0
  914. package/locales/en/agents/devops.md +34 -0
  915. package/locales/en/agents/orchestrator.claude.json +2 -0
  916. package/locales/en/agents/orchestrator.copilot.json +2 -0
  917. package/locales/en/agents/orchestrator.gemini.json +2 -0
  918. package/locales/en/agents/orchestrator.openai.yaml +2 -0
  919. package/locales/en/agents/orchestrator.qwen.json +2 -0
  920. package/locales/en/agents/product_manager.md +1 -5
  921. package/locales/en/agents/reviewer.md +69 -64
  922. package/locales/en/agents/senior_full_stack.md +2 -2
  923. package/locales/en/agents/tester.md +50 -11
  924. package/locales/en/agents/ux_ui_designer.md +3 -5
  925. package/package.json +1 -1
@@ -1,233 +1,724 @@
1
1
  ---
2
2
  name: mongodb_mongoose_best_practices
3
- description: Best practices for MongoDB + Mongoose: schemas, indexes, validation, transactions, migrations, performance, security, testing, anti-patterns and examples.
3
+ description: Best practices for MongoDB + Mongoose schemas, indexes, validation, transactions, migrations, performance, security, testing, anti-patterns and examples.
4
4
  ---
5
5
 
6
6
  #Skill: MongoDB + Mongoose Best Practices
7
7
 
8
- ## Goal
9
- Help design and implement the data layer on MongoDB + Mongoose so that it is:
10
- - predictable (schemes/contracts),
11
- - productive (indexes/queries),
12
- - safe (validation/sanitizing/least privilege),
13
- - supported (patterns, migrations, tests),
14
- - ready for growth (sharding/operations).
15
-
16
- ## When to use
17
- - Backend on Node.js and the project uses MongoDB.
18
- - Selected ORM/ODM: Mongoose.
19
- - We need CRUD, search, aggregations, connections, transactions.
20
-
21
- ## Inputs
22
- - PRD + acceptance criteria
23
- - API Contracts (payload/filters/sort)
24
- - Data model/Architecture Doc
25
- - NFR: latency/throughput, volumes, retention, security/compliance
26
-
27
- ## Exit (Deliverables)
28
- - List of collections and key documents (schemes)
29
- - Indexes (and why they are)
30
- - Validation/sanitization rules at the border
31
- - Strategy for migrations and versioning of schemas
32
- - Query patterns and performance notes
33
- - Test plan (unit/integration) for data layer
34
- - List of anti-patterns + “dos and don’ts”
8
+ Concrete DO/DON'T patterns for MongoDB + Mongoose: from schema design to testing.
9
+
10
+ **Sections:**
11
+ 1. [Schema Design](#1-schema-design)
12
+ 2. [Mongoose Model Setup](#2-mongoose-model-setup)
13
+ 3. [Indexes](#3-indexes)
14
+ 4. [Query Patterns](#4-query-patterns)
15
+ 5. [Connection and Config](#5-connection)
16
+ 6. [Security](#6-security)
17
+ 7. [Transactions](#7-transactions)
18
+ 8. [Migrations](#8-migrations)
19
+ 9. [Handling errors](#9-error handling)
20
+ 10. [Testing](#10-testing)
21
+ 11. [Anti-patterns](#11-anti-patterns)
35
22
 
36
23
  ---
37
24
 
38
- #1) Schema Design
39
-
40
- ## 1.1 Embedded vs Referenced
41
- Make your choice consciously and fix the trade-off:
42
- - **Embed** (embed) if:
43
- - data is small, often read together,
44
- - atomic updates of subdocuments are needed,
45
- - “child” does not live separately.
46
- - **Reference** (ObjectId of the reference) if:
47
- - the child object is large/growing,
48
- - need an independent lifecycle,
49
- - there is sharding/different access patterns.
50
-
51
- ⚠️ Limit: document up to 16MB. Investing “eternal” arrays (log, events) is a risk.
52
-
53
- ## 1.2 Define invariants in the schema
54
- - required, enum, min/max, custom validators
55
- - default values
56
- - timestamps (createdAt/updatedAt) - almost always
57
-
58
- ## 1.3 Versioning schemes
59
- - Add the `schemaVersion` field (if the schema is actively evolving)
60
- - New code must be able to read the old version (transition period)
25
+ ## 1. Schema Design
26
+
27
+ ### Embedded vs Referenced
28
+
29
+ | Criterion | Embed | Reference ✅ |
30
+ |---------|---------|-------------|
31
+ | Are read together | Yes | No |
32
+ | Child lives separately | No | Yes |
33
+ | Child size | Small, bounded | Large or growing |
34
+ | Atomic updates child | Needed | Not critical |
35
+ | Many children | < 50 | Unbounded |
36
+
37
+ > [!WARNING]
38
+ > Document MongoDB 16MB. Never not embed unbounded arrays (logs, events, comment).
39
+
40
+ ### DO: embed bounded subdocuments
41
+
42
+ ```js
43
+ // Embed: settings always are read together with installation, bounded
44
+ const installationSchema = new Schema({
45
+ appInstanceId: { type: String, required: true, unique: true },
46
+ settings: {
47
+ overlay: {
48
+ title: { type: String, default: 'Special Offer!' },
49
+ text: { type: String, default: 'Get your discount' },
50
+ backgroundColor: { type: String, default: '#1a1a2e' },
51
+ },
52
+ cta: {
53
+ text: { type: String, default: 'Get Coupon' },
54
+ action: { type: String, enum: ['copy', 'redirect', 'link'], default: 'copy' },
55
+ },
56
+ timer: {
57
+ enabled: { type: Boolean, default: true },
58
+ minutes: { type: Number, min: 0, max: 60, default: 10 },
59
+ seconds: { type: Number, min: 0, max: 59, default: 0 },
60
+ },
61
+ },
62
+ });
63
+ ```
64
+
65
+ ### ✅ DO: reference — independent lifecycle, unbounded
66
+
67
+ ```js
68
+ // ✅ Reference: coupons — independent lifecycle, many per installation
69
+ const couponSchema = new Schema({
70
+ appInstanceId: { type: String, required: true, index: true },
71
+ code: { type: String, required: true, uppercase: true, trim: true },
72
+ discount: { type: Number, required: true, min: 1, max: 100 },
73
+ type: { type: String, enum: ['percent', 'fixed'], default: 'percent' },
74
+ active: { type: Boolean, default: true },
75
+ }, { timestamps: true });
76
+
77
+ // Compound index for main query pattern
78
+ couponSchema.index({ appInstanceId: 1, active: 1, createdAt: -1 });
79
+ ```
61
80
 
62
81
  ---
63
82
 
64
- #2) Indexes and performance
65
-
66
- ## 2.1 Rule No. 1: Indexes for real queries
67
- An index is a contract with an access pattern.
68
- For each key endpoint/UX flow:
69
- - filter/search,
70
- - sorting,
71
- - pagination.
72
-
73
- ## 2.2 Typical indexes
74
- - **compound index** for (filter + sort)
75
- - **unique** for logins/keys/slugs
76
- - **TTL** for one-time tokens/sessions (if applicable)
77
- - **partial index** if the index is not needed for all documents
78
- - **text index** - be careful, a separate search (or Atlas Search) is often better
79
-
80
- ## 2.3 Pagination
81
- - Offset (`skip`) degrades on large volumes.
82
- - For large collections use **cursor pagination**:
83
- - by `_id` or `createdAt` (and the index for it).
84
-
85
- ## 2.4 “Lean reads” and field selection
86
- - `.lean()` for read-only (speeds up, less memory)
87
- - `.select()` - do not drag unnecessary fields (especially large blobs)
88
-
89
- ## 2.5 Avoid N+1
90
- - Either **embed** or batch query by ids,
91
- - `.populate()` should be used carefully, understand the cost.
83
+ ## 2. Mongoose Model Setup
84
+
85
+ ### DO: strict schema with validators
86
+
87
+ ```js
88
+ // models/Coupon.js
89
+ import { Schema, model } from 'mongoose';
90
+
91
+ const couponSchema = new Schema(
92
+ {
93
+ appInstanceId: {
94
+ type: String,
95
+ required: [true, 'appInstanceId is required'],
96
+ index: true,
97
+ },
98
+ code: {
99
+ type: String,
100
+ required: [true, 'Coupon code is required'],
101
+ minlength: [3, 'Code must be at least 3 characters'],
102
+ maxlength: [20, 'Code must be at most 20 characters'],
103
+ uppercase: true,
104
+ trim: true,
105
+ },
106
+ discount: {
107
+ type: Number,
108
+ required: true,
109
+ min: [1, 'Discount must be at least 1'],
110
+ max: [100, 'Discount cannot exceed 100'],
111
+ },
112
+ type: {
113
+ type: String,
114
+ enum: {
115
+ values: ['percent', 'fixed'],
116
+ message: '{VALUE} is not a valid discount type',
117
+ },
118
+ default: 'percent',
119
+ },
120
+ active: {
121
+ type: Boolean,
122
+ default: true,
123
+ },
124
+ usageCount: {
125
+ type: Number,
126
+ default: 0,
127
+ min: 0,
128
+ },
129
+ },
130
+ {
131
+ timestamps: true, // ✅ Automatic createdAt, updatedAt
132
+ strict: 'throw', // ✅ Throw an error on unknown fields
133
+ strictQuery: true, // ✅ Not accept unknown query params
134
+ versionKey: '__v', // Optimistic concurrency
135
+ }
136
+ );
137
+
138
+ // ✅ Compound unique index
139
+ couponSchema.index({ appInstanceId: 1, code: 1 }, { unique: true });
140
+
141
+ // ✅ Index for main query: active coupons sorted by date
142
+ couponSchema.index({ appInstanceId: 1, active: 1, createdAt: -1 });
143
+
144
+ export const Coupon = model('Coupon', couponSchema);
145
+ ```
146
+
147
+ ### ✅ DO: toJSON transform (hide internal fields)
148
+
149
+ ```js
150
+ couponSchema.set('toJSON', {
151
+ transform: (_doc, ret) => {
152
+ ret.id = ret._id.toString();
153
+ delete ret._id;
154
+ delete ret.__v;
155
+ return ret;
156
+ },
157
+ });
158
+ ```
159
+
160
+ ### ❌ DON'T: schema how `Schema.Types.Mixed`
161
+
162
+ ```js
163
+ // ❌ Mixed = no validation, no autocomplete, data chaos
164
+ const badSchema = new Schema({
165
+ settings: Schema.Types.Mixed, // ❌ any data
166
+ data: {}, // ❌ also Mixed
167
+ });
168
+
169
+ // ✅ Explicit typing
170
+ const goodSchema = new Schema({
171
+ settings: {
172
+ title: { type: String, default: '' },
173
+ enabled: { type: Boolean, default: true },
174
+ },
175
+ });
176
+ ```
92
177
 
93
178
  ---
94
179
 
95
- #3) Security
180
+ ## 3. Indexes
96
181
 
97
- ## 3.1 NoSQL injection (must)
98
- It is dangerous to accept filters directly from the user.
99
- - Disable the “raw” filter object from body/query.
100
- - Use allowlist fields and operators.
182
+ ### DO: indexes under real query patterns
101
183
 
102
- ### Okay ✅
103
- - mapping query params safe filter
104
- - explicit Zod/Joi validation + query assembly
184
+ ```js
185
+ // Typical indexes for Smart Cart Rescue:
105
186
 
106
- ### Bad
107
- - `Model.find(req.query)` / `Model.find(req.body.filter)` without filtering## 3.2 Least privilege
108
- - a separate database user for the application,
109
- - minimal rights (readWrite to the desired database),
110
- - different creds for env.
187
+ // 1. Unique lookup
188
+ couponSchema.index({ appInstanceId: 1, code: 1 }, { unique: true });
111
189
 
112
- ## 3.3 Secrets
113
- - creds only through env/secret manager
114
- - do not log connection string
190
+ // 2. List + filter + sort
191
+ couponSchema.index({ appInstanceId: 1, active: 1, createdAt: -1 });
115
192
 
116
- ---
193
+ // 3. TTL — auto-deletion (for temporary tokens)
194
+ tokenSchema.index({ expiresAt: 1 }, { expireAfterSeconds: 0 });
117
195
 
118
- #4) Mongoose: patterns and conventions
196
+ // 4. Partial index index only active coupons
197
+ couponSchema.index(
198
+ { appInstanceId: 1, createdAt: -1 },
199
+ { partialFilterExpression: { active: true } }
200
+ );
119
201
 
120
- ## 4.1 Schema: strict mode
121
- Recommended:
122
- - `strict: "throw"` for critical models (catches unexpected fields)
123
- - `strictQuery: true` (so that queries do not accept “garbage”)
202
+ // 5. Text search
203
+ couponSchema.index({ code: 'text', 'metadata.description': 'text' });
204
+ ```
124
205
 
125
- ## 4.2 Validation: where is what
126
- - API Edge: Zod/Joi (mandatory)
127
- - In Mongoose schema: model invariants (second milestone)
128
- Don't rely solely on Mongoose validation for user input.
206
+ ### Rules indexes
129
207
 
130
- ## 4.3 Middleware/hooks: be careful
131
- - pre/post hooks = “Magic” if there are many of them and they hide the logic.
132
- - Any hook must be documented.
133
- - Do not put business logic in hooks, only technical things (timestamps, normalization).
208
+ | Rule | Explanation |
209
+ |---------|-----------|
210
+ | **ESR** | Equality Sort → Range (order fields in compound index) |
211
+ | Not more 5-7 indexes | Each index = overhead on write |
212
+ | `explain()` for checks | `Model.find().explain('executionStats')` |
213
+ | Unique for business keys | `{ appInstanceId, code }` unique |
214
+ | TTL for expirable data | Tokens, sessions, temp files |
134
215
 
135
- ## 4.4 Plugins
136
- - `mongoose-lean-virtuals`, `mongoose-delete`, etc. - use consciously
137
- - Monitor the supply-chain (reputation/support)
216
+ ### DO: check query plan
138
217
 
139
- ## 4.5 Transactions
140
- Transactions are available in the replica set.
141
- Use `session` and `withTransaction` for multi-doc operations.
142
- But remember: MongoDB loves modeling where transactions are rarely needed.
218
+ ```js
219
+ // Check what index is used
220
+ const explanation = await Coupon.find({ appInstanceId: 'abc', active: true })
221
+ .sort({ createdAt: -1 })
222
+ .explain('executionStats');
223
+
224
+ console.log(explanation.executionStats.executionStages);
225
+ // Should be IXSCAN, not COLLSCAN
226
+ ```
143
227
 
144
228
  ---
145
229
 
146
- #5) Data migrations and evolution
230
+ ## 4. Query Patterns
231
+
232
+ ### ✅ DO: lean() for read-only
233
+
234
+ ```js
235
+ // ✅ lean() — returns plain JS objects, not Mongoose documents
236
+ // ~5x faster, less memory, ideal for API responses
237
+ const coupons = await Coupon
238
+ .find({ appInstanceId, active: true })
239
+ .sort({ createdAt: -1 })
240
+ .limit(20)
241
+ .select('code discount type active createdAt') // ✅ only needed fields
242
+ .lean(); // ✅ plain objects
243
+ ```
244
+
245
+ ### ✅ DO: cursor pagination (for large collections)
246
+
247
+ ```js
248
+ /**
249
+ * Cursor-based pagination (instead of skip/limit on large collections).
250
+ * @param {string} appInstanceId
251
+ * @param {{ cursor?: string, limit?: number }} opts
252
+ * @returns {Promise<{ data: Coupon[], nextCursor: string | null }>}
253
+ */
254
+ async function listCoupons(appInstanceId, { cursor, limit = 20 }) {
255
+ const query = { appInstanceId, active: true };
256
+
257
+ // Cursor = ID last element previous page
258
+ if (cursor) {
259
+ query._id = { $lt: cursor };
260
+ }
261
+
262
+ const data = await Coupon
263
+ .find(query)
264
+ .sort({ _id: -1 })
265
+ .limit(limit + 1) // +1 so that understand is there nextPage
266
+ .lean();
267
+
268
+ const hasMore = data.length > limit;
269
+ if (hasMore) data.pop();
270
+
271
+ return {
272
+ data,
273
+ nextCursor: hasMore ? data[data.length - 1]._id.toString() : null,
274
+ };
275
+ }
276
+ ```
277
+
278
+ ### ✅ DO: safe filter builder (NoSQL injection prevention)
279
+
280
+ ```js
281
+ /**
282
+ * Builds a secure MongoDB filter from query params.
283
+ * Whitelist-approach: only allowed fields and operators.
284
+ * @param {string} appInstanceId
285
+ * @param {{ status?: string, q?: string, from?: string, to?: string }} query
286
+ * @returns {object} MongoDB filter.
287
+ */
288
+ function buildCouponFilter(appInstanceId, query) {
289
+ const filter = { appInstanceId };
290
+
291
+ // Status (whitelist enum)
292
+ if (query.status === 'active') filter.active = true;
293
+ if (query.status === 'inactive') filter.active = false;
294
+
295
+ // Search (safe: escape regex special chars)
296
+ if (query.q) {
297
+ filter.code = { $regex: escapeRegex(query.q), $options: 'i' };
298
+ }
299
+
300
+ // Date range
301
+ if (query.from || query.to) {
302
+ filter.createdAt = {};
303
+ if (query.from) filter.createdAt.$gte = new Date(query.from);
304
+ if (query.to) filter.createdAt.$lte = new Date(query.to);
305
+ }
306
+
307
+ return filter;
308
+ }
309
+
310
+ /**
311
+ * Escapes regex special characters for safe use in MongoDB $regex.
312
+ * @param {string} str
313
+ * @returns {string}
314
+ */
315
+ function escapeRegex(str) {
316
+ return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
317
+ }
318
+ ```
319
+
320
+ ### ❌ DON'T: direct find by req.body/query
321
+
322
+ ```js
323
+ // ❌ NoSQL injection — user can pass { $ne: "" }
324
+ const results = await Coupon.find(req.query); // ❌
325
+ const results = await Coupon.find(req.body.filter); // ❌
326
+ const user = await User.findOne({ email: req.body.email }); // ❌ if email = { $gt: "" }
327
+
328
+ // ✅ Explicit casting types
329
+ const user = await User.findOne({ email: String(req.body.email) });
330
+ ```
147
331
 
148
- ## 5.1 Migrations are required when changing the model
149
- Options:
150
- - `migrate-mongo`
151
- - your own migration runner (the `migrations` table in Mongo)
332
+ ---
152
333
 
153
- ## 5.2 Backfill strategy
154
- - small batches
155
- - id-range/cursor
156
- - retries
157
- - observability (how much is left)
334
+ ## 5. Connection
335
+
336
+ ### ✅ DO: connection with retry and pooling
337
+
338
+ ```js
339
+ // db/connection.js
340
+ import mongoose from 'mongoose';
341
+ import { config } from '../config/env.js';
342
+ import { logger } from '../utils/logger.js';
343
+
344
+ /**
345
+ * Connects to MongoDB with retry and configures the pool.
346
+ * @returns {Promise<mongoose.Connection>}
347
+ */
348
+ export async function connectDb() {
349
+ const MAX_RETRIES = 5;
350
+ const RETRY_DELAY_MS = 3000;
351
+
352
+ for (let attempt = 1; attempt <= MAX_RETRIES; attempt++) {
353
+ try {
354
+ await mongoose.connect(config.DATABASE_URL, {
355
+ maxPoolSize: 10, // ✅ Connection pooling
356
+ minPoolSize: 2,
357
+ serverSelectionTimeoutMS: 5000,
358
+ socketTimeoutMS: 45000,
359
+ heartbeatFrequencyMS: 10000,
360
+ });
361
+
362
+ logger.info('MongoDB connected');
363
+
364
+ // ✅ Connection event handlers
365
+ mongoose.connection.on('error', (err) => {
366
+ logger.error({ err }, 'MongoDB connection error');
367
+ });
368
+
369
+ mongoose.connection.on('disconnected', () => {
370
+ logger.warn('MongoDB disconnected');
371
+ });
372
+
373
+ return mongoose.connection;
374
+
375
+ } catch (err) {
376
+ logger.warn({ attempt, maxRetries: MAX_RETRIES, err: err.message },
377
+ 'MongoDB connection failed, retrying...');
378
+
379
+ if (attempt === MAX_RETRIES) {
380
+ logger.fatal({ err }, 'MongoDB connection failed after all retries');
381
+ throw err;
382
+ }
383
+
384
+ await new Promise((r) => setTimeout(r, RETRY_DELAY_MS * attempt));
385
+ }
386
+ }
387
+ }
388
+
389
+ /**
390
+ * Graceful disconnect.
391
+ */
392
+ export async function disconnectDb() {
393
+ await mongoose.disconnect();
394
+ logger.info('MongoDB disconnected gracefully');
395
+ }
396
+ ```
158
397
 
159
398
  ---
160
399
 
161
- #6) Error handling
400
+ ## 6. Security
162
401
 
163
- ## 6.1 Common errors
164
- - duplicate key → code 409 (if this is a business conflict)
165
- - validation error → 400
166
- - not found → 404
167
- - cast error (ObjectId) → 400
168
- - connection/timeouts → 503/500 (depending on policy)
402
+ ### Checklist
169
403
 
170
- ## 6.2 Do not leak entrails
171
- - do not return stack
172
- - do not return raw error from Mongo
404
+ | Rule | How |
405
+ |---------|-----|
406
+ | **NoSQL injection** | Safe filter builder (whitelist fields + types) |
407
+ | **Least privilege** | Separate DB user with readWrite on the required DB |
408
+ | **Secrets** | Connection string via env, not in code |
409
+ | **strict: "throw"** | Catches unexpected fields in documents |
410
+ | **strictQuery: true** | Catches unknown query params |
411
+ | **Not log connection string** | pino redact for `*.DATABASE_URL` |
173
412
 
174
413
  ---
175
414
 
176
- #7) Testing (TDD-friendly)
415
+ ## 7. Transactions
416
+
417
+ ### ✅ DO: withTransaction for multi-doc operations
418
+
419
+ ```js
420
+ /**
421
+ * Applies coupon to request atomically (deduction + usage record).
422
+ * Requires replica set.
423
+ */
424
+ async function applyCoupon(orderId, couponId) {
425
+ const session = await mongoose.startSession();
426
+
427
+ try {
428
+ const result = await session.withTransaction(async () => {
429
+ // 1. Check coupon
430
+ const coupon = await Coupon.findById(couponId).session(session);
431
+ if (!coupon || !coupon.active) {
432
+ throw new AppError('Coupon not available', 400);
433
+ }
434
+
435
+ // 2. Apply to the request
436
+ const order = await Order.findByIdAndUpdate(
437
+ orderId,
438
+ {
439
+ $set: { couponId, discount: coupon.discount },
440
+ $inc: { total: -coupon.discount },
441
+ },
442
+ { session, new: true }
443
+ );
444
+
445
+ // 3. Increase usage count
446
+ await Coupon.findByIdAndUpdate(
447
+ couponId,
448
+ { $inc: { usageCount: 1 } },
449
+ { session }
450
+ );
451
+
452
+ return order;
453
+ });
454
+
455
+ return result;
456
+ } finally {
457
+ await session.endSession();
458
+ }
459
+ }
460
+ ```
461
+
462
+ > [!TIP]
463
+ > MongoDB any modeling, where transactions needed rarely. If transaction needed often — revisit schema design (can is worth embed).
177
464
 
178
- ## 7.1 Unit tests
179
- - validators/mappers/filter builders
180
- - service layer (with mock repo)
465
+ ---
181
466
 
182
- ## 7.2 Integration tests
183
- - real Mongo (Testcontainers/Docker) or MongoMemoryServer (faster, but not 100% like prod)
184
- - index tests (unique, TTL logic)
185
- - transactions (if you use)
467
+ ## 8. Migrations
468
+
469
+ ### DO: migrate-mongo
470
+
471
+ ```bash
472
+ npm install --save-dev migrate-mongo
473
+ npx migrate-mongo init
474
+ ```
475
+
476
+ ```js
477
+ // migrations/20260313_add_template_field.js
478
+
479
+ /**
480
+ * Adds field templateId to all settings.
481
+ */
482
+ module.exports = {
483
+ async up(db) {
484
+ await db.collection('settings').updateMany(
485
+ { templateId: { $exists: false } },
486
+ { $set: { templateId: 'glassmorphism' } }
487
+ );
488
+ },
489
+
490
+ async down(db) {
491
+ await db.collection('settings').updateMany(
492
+ {},
493
+ { $unset: { templateId: '' } }
494
+ );
495
+ },
496
+ };
497
+ ```
498
+
499
+ ### Backfill strategy (for large collections)
500
+
501
+ ```js
502
+ /**
503
+ * Batch backfill — handles documents in batches.
504
+ * @param {Collection} collection
505
+ * @param {object} filter
506
+ * @param {object} update
507
+ * @param {number} batchSize
508
+ */
509
+ async function batchBackfill(collection, filter, update, batchSize = 500) {
510
+ let processed = 0;
511
+ let cursor = null;
512
+
513
+ while (true) {
514
+ const query = { ...filter };
515
+ if (cursor) query._id = { $gt: cursor };
516
+
517
+ const docs = await collection
518
+ .find(query)
519
+ .sort({ _id: 1 })
520
+ .limit(batchSize)
521
+ .toArray();
522
+
523
+ if (docs.length === 0) break;
524
+
525
+ const ids = docs.map((d) => d._id);
526
+ await collection.updateMany({ _id: { $in: ids } }, update);
527
+
528
+ cursor = ids[ids.length - 1];
529
+ processed += docs.length;
530
+
531
+ logger.info({ processed }, 'Backfill progress');
532
+ }
533
+
534
+ logger.info({ total: processed }, 'Backfill complete');
535
+ }
536
+ ```
186
537
 
187
538
  ---
188
539
 
189
- #8) Anti-patterns (like P0 risks)
540
+ ## 9. Handling errors
541
+
542
+ ### ✅ DO: mapping Mongoose errors → HTTP
543
+
544
+ ```js
545
+ /**
546
+ * Maps Mongoose errors to AppError for the centralized error handler.
547
+ * @param {Error} err
548
+ * @returns {AppError}
549
+ */
550
+ function mapMongooseError(err) {
551
+ // Duplicate key (unique constraint violation)
552
+ if (err.code === 11000) {
553
+ const field = Object.keys(err.keyPattern || {})[0] || 'field';
554
+ return new AppError(`Duplicate value for ${field}`, 409);
555
+ }
556
+
557
+ // Validation error
558
+ if (err.name === 'ValidationError') {
559
+ const details = Object.values(err.errors).map((e) => ({
560
+ field: e.path,
561
+ message: e.message,
562
+ }));
563
+ return new AppError('Validation failed', 400, details);
564
+ }
565
+
566
+ // CastError (invalid ObjectId)
567
+ if (err.name === 'CastError') {
568
+ return new AppError(`Invalid ${err.path}: ${err.value}`, 400);
569
+ }
570
+
571
+ // VersionError (optimistic concurrency)
572
+ if (err.name === 'VersionError') {
573
+ return new AppError('Document was modified by another request', 409);
574
+ }
575
+
576
+ // Unknown → 500 (log full error, return generic message)
577
+ return new AppError('Internal server error', 500);
578
+ }
579
+ ```
580
+
581
+ ### Error mapping table
582
+
583
+ | Mongoose Error | HTTP Code | AppError |
584
+ |----------------|-----------|---------|
585
+ | `code: 11000` (duplicate) | 409 | ConflictError |
586
+ | `ValidationError` | 400 | ValidationError |
587
+ | `CastError` (bad ObjectId) | 400 | ValidationError |
588
+ | `VersionError` | 409 | ConflictError |
589
+ | Document not found | 404 | NotFoundError |
590
+ | Connection timeout | 503 | AppError |
190
591
 
191
- 🔴P0:
192
- - Accept user input as a “raw” Mongo filter (NoSQL injection)
193
- - Lack of indexes for key queries (latency degrades)
194
- - Too many Mongoose hooks (Magic)
195
- - Huge documents/growing arrays (16MB risk)
196
- - An attempt to replace the scheme with “dynamics” without strict rules (Big Ball of Mud in the data)
592
+ ---
197
593
 
198
- 🟠P1:
199
- - `.populate()` in loops / N+1
200
- - `skip` pagination on large volumes
201
- - `select *` without `.select()`
594
+ ## 10. Testing
595
+
596
+ ### DO: MongoMemoryServer for integration tests
597
+
598
+ ```js
599
+ // tests/setup.js
600
+ import { MongoMemoryServer } from 'mongodb-memory-server';
601
+ import mongoose from 'mongoose';
602
+
603
+ let mongoServer;
604
+
605
+ /**
606
+ * Runs in-memory MongoDB before tests.
607
+ */
608
+ export async function setupTestDb() {
609
+ mongoServer = await MongoMemoryServer.create();
610
+ const uri = mongoServer.getUri();
611
+ await mongoose.connect(uri);
612
+ }
613
+
614
+ /**
615
+ * Cleans all collections between tests.
616
+ */
617
+ export async function clearTestDb() {
618
+ const collections = mongoose.connection.collections;
619
+ for (const key in collections) {
620
+ await collections[key].deleteMany({});
621
+ }
622
+ }
623
+
624
+ /**
625
+ * Stops the in-memory MongoDB after tests.
626
+ */
627
+ export async function teardownTestDb() {
628
+ await mongoose.disconnect();
629
+ await mongoServer.stop();
630
+ }
631
+ ```
632
+
633
+ ```js
634
+ // tests/coupon.repo.test.js
635
+ import { describe, it, expect, beforeAll, afterAll, afterEach } from 'vitest';
636
+ import { setupTestDb, clearTestDb, teardownTestDb } from './setup.js';
637
+ import { Coupon } from '../models/Coupon.js';
638
+
639
+ describe('Coupon Model', () => {
640
+ beforeAll(setupTestDb);
641
+ afterEach(clearTestDb);
642
+ afterAll(teardownTestDb);
643
+
644
+ it('should create a coupon with defaults', async () => {
645
+ const coupon = await Coupon.create({
646
+ appInstanceId: 'test-app',
647
+ code: 'save20',
648
+ discount: 20,
649
+ });
650
+
651
+ expect(coupon.code).toBe('SAVE20'); // uppercase transform
652
+ expect(coupon.active).toBe(true); // default
653
+ expect(coupon.type).toBe('percent'); // default
654
+ expect(coupon.createdAt).toBeDefined(); // timestamps
655
+ });
656
+
657
+ it('should enforce unique (appInstanceId, code)', async () => {
658
+ await Coupon.create({ appInstanceId: 'app1', code: 'TEST', discount: 10 });
659
+
660
+ await expect(
661
+ Coupon.create({ appInstanceId: 'app1', code: 'TEST', discount: 20 })
662
+ ).rejects.toThrow(/duplicate key/i);
663
+ });
664
+
665
+ it('should validate discount range', async () => {
666
+ await expect(
667
+ Coupon.create({ appInstanceId: 'app1', code: 'BAD', discount: 150 })
668
+ ).rejects.toThrow(/cannot exceed 100/i);
669
+ });
670
+
671
+ it('should query active coupons sorted by date', async () => {
672
+ await Coupon.create({ appInstanceId: 'app1', code: 'OLD', discount: 5 });
673
+ await Coupon.create({ appInstanceId: 'app1', code: 'NEW', discount: 10 });
674
+ await Coupon.create({ appInstanceId: 'app1', code: 'OFF', discount: 15, active: false });
675
+
676
+ const active = await Coupon
677
+ .find({ appInstanceId: 'app1', active: true })
678
+ .sort({ createdAt: -1 })
679
+ .lean();
680
+
681
+ expect(active).toHaveLength(2);
682
+ expect(active[0].code).toBe('NEW');
683
+ });
684
+ });
685
+ ```
202
686
 
203
687
  ---
204
688
 
205
- # 9) Examples (what to do / what not to do)
689
+ ## 11. Anti-patterns
690
+
691
+ | ❌ Anti-pattern | ✅ Decision |
692
+ |----------------|-----------|
693
+ | `Schema.Types.Mixed` | Explicit typing fields |
694
+ | `Model.find(req.query)` | Safe filter builder (whitelist) |
695
+ | `skip()` on large collections | Cursor pagination (`_id` / `createdAt`) |
696
+ | No `.lean()` for API responses | `.lean()` + `.select()` for read-only |
697
+ | `.populate()` in cycles (N+1) | Batch query by IDs / embed |
698
+ | Business logic in Mongoose hooks | Hooks are only for technical concerns (timestamps, normalization) |
699
+ | Unbounded embed arrays | Reference + separate collection |
700
+ | No indexes under query patterns | `explain()` → IXSCAN, not COLLSCAN |
701
+ | `strict: false` | `strict: 'throw'` + `strictQuery: true` |
702
+ | Connection string in code | Env vars + Zod validation |
206
703
 
207
- ## 9.1 Safe filter builder (example)
208
- ### ✅ Good: allowlist + explicit operators
209
- - accept query params: `status`, `q`, `from`, `to`
210
- - build the filter ourselves
211
- - prohibit `$where`, `$expr`, `$regex` without restrictions
212
-
213
- ### ❌ Bad: direct find by req.query
214
- - `Model.find(req.query)`
704
+ ---
215
705
 
216
- ## 9.2 Filter index + grade
217
- ### ✅ Ok
218
- - endpoint: list orders by userId sorted by createdAt desc
219
- - index: `{ userId: 1, createdAt: -1 }`
706
+ ## Checklist
220
707
 
221
- ### Bad
222
- - sorting by non-indexed field on a large collection
708
+ - [ ] Schemas with required/enum/min/max/defaults/timestamps
709
+ - [ ] Embed vs reference intentional choice, documented
710
+ - [ ] Indexes under key query patterns
711
+ - [ ] Pagination: cursor for large collections
712
+ - [ ] Safe filter builder (no raw user input in find)
713
+ - [ ] Connection with retry and pooling
714
+ - [ ] Mongoose errors → HTTP codes mapping
715
+ - [ ] Integration tests (MongoMemoryServer)
716
+ - [ ] Migrations for schema changes
223
717
 
224
718
  ---
225
719
 
226
- # 10) Checklist before transferring to development/review
227
- - [ ] Schemes defined (required/enums/defaults/timestamps)
228
- - [ ] Embed vs reference solutions are documented
229
- - [ ] Indexes are defined for key endpoints
230
- - [ ] Pagination selected (cursor for large collections)- [ ] No raw user-provided filter (NoSQL injection)
231
- - [ ] There is a migration/backfill plan
232
- - [ ] Integration tests available (DB queries/unique/transactions)
233
- - [ ] Errors are mapped safely (400/404/409/5xx)
720
+ ## See also
721
+ - `$node_express_beast_practices` Express architecture and service layer
722
+ - `$security_baseline_dev` NoSQL injection prevention
723
+ - `$testing_strategy_js` testing strategy
724
+ - `$observability_logging` structured logging