ai-developer-skill-os 7.5.0 → 8.1.4

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 (377) hide show
  1. package/.agents/CHANGELOG.md +2 -1
  2. package/.agents/README.md +51 -10
  3. package/.agents/docs/ARCHITECTURE.md +156 -0
  4. package/.agents/docs/CHI_TIET_SKILLS.md +2 -1
  5. package/.agents/docs/MIGRATION-CLEANUP-V8.1.3.md +36 -0
  6. package/.agents/docs/MIGRATION-STATUS.md +35 -0
  7. package/.agents/docs/MIGRATION-V8.md +10 -0
  8. package/.agents/docs/ROADMAP-V8.2.md +78 -0
  9. package/.agents/docs/V8-CERTIFICATION.md +27 -0
  10. package/.agents/docs/VERSIONING.md +95 -0
  11. package/.agents/docs/decisions/ADR-001-v8-migration.md +58 -0
  12. package/.agents/docs/decisions/ADR-002-workflow-separation.md +50 -0
  13. package/.agents/docs/decisions/ADR-003-registry-generated.md +54 -0
  14. package/.agents/docs/decisions/ADR-008-skill-boundary-review.md +27 -0
  15. package/.agents/docs/schemas/learning.schema.yml +69 -0
  16. package/.agents/docs/schemas/skill.schema.yml +188 -0
  17. package/.agents/docs/schemas/workflow.schema.yml +33 -0
  18. package/.agents/knowledge/design-intelligence/industries/ecommerce.md +3 -0
  19. package/.agents/knowledge/design-intelligence/industries/fintech.md +3 -0
  20. package/.agents/knowledge/design-intelligence/industries/healthcare.md +3 -0
  21. package/.agents/learnings/draft/README.md +37 -0
  22. package/.agents/registry/capability-graph.yml +500 -0
  23. package/.agents/registry/skills-index.yml +525 -0
  24. package/.agents/reports/RELEASE-CHECKLIST.md +29 -0
  25. package/.agents/reports/architecture-audit.md +13 -0
  26. package/.agents/reports/graph-health.md +20 -0
  27. package/.agents/reports/skill-audit.md +215 -0
  28. package/.agents/rules/coding.md +102 -0
  29. package/.agents/rules/command-safety.md +21 -0
  30. package/.agents/rules/global.md +135 -0
  31. package/.agents/rules/priorities.yml +24 -0
  32. package/.agents/rules/safety.md +84 -0
  33. package/.agents/rules/security.md +13 -0
  34. package/.agents/rules/skill-quality.md +14 -0
  35. package/.agents/skills/_template/SKILL.md +132 -0
  36. package/.agents/skills/qk-access-policy/SKILL.md +61 -5
  37. package/.agents/skills/qk-agent-observability/SKILL.md +73 -0
  38. package/.agents/skills/qk-ai-builder/SKILL.md +62 -5
  39. package/.agents/skills/qk-api-lifecycle/SKILL.md +59 -6
  40. package/.agents/skills/qk-bug-resolution/SKILL.md +64 -6
  41. package/.agents/skills/qk-context-loader/SKILL.md +63 -11
  42. package/.agents/skills/qk-data-lifecycle/SKILL.md +61 -5
  43. package/.agents/skills/qk-db-optimizer/SKILL.md +61 -5
  44. package/.agents/skills/qk-design-system-engineering/SKILL.md +112 -0
  45. package/.agents/skills/qk-devops-platform/SKILL.md +117 -0
  46. package/.agents/skills/qk-docs/SKILL.md +62 -6
  47. package/.agents/skills/qk-engineering-standard/SKILL.md +62 -12
  48. package/.agents/skills/qk-fe-api-integration/SKILL.md +60 -6
  49. package/.agents/skills/qk-feature-delivery/SKILL.md +65 -6
  50. package/.agents/skills/qk-frontend-architecture/SKILL.md +134 -0
  51. package/.agents/skills/qk-help/SKILL.md +245 -193
  52. package/.agents/skills/qk-orchestrator/SKILL.md +67 -13
  53. package/.agents/skills/qk-orchestrator/references/routing-table.md +4 -3
  54. package/.agents/skills/qk-product-specification/SKILL.md +130 -0
  55. package/.agents/skills/qk-production-release/SKILL.md +59 -6
  56. package/.agents/skills/qk-project-bootstrap/SKILL.md +68 -7
  57. package/.agents/skills/qk-project-health/SKILL.md +63 -6
  58. package/.agents/skills/qk-project-memory/SKILL.md +109 -6
  59. package/.agents/skills/qk-security-audit/SKILL.md +135 -0
  60. package/.agents/skills/qk-system-evolution/SKILL.md +63 -12
  61. package/.agents/skills/qk-test-engineering/SKILL.md +139 -0
  62. package/.agents/skills/qk-ui-audit/SKILL.md +63 -8
  63. package/.agents/skills/qk-ui-builder/SKILL.md +509 -0
  64. package/.agents/skills/qk-ui-builder/references/anti-patterns.md +295 -0
  65. package/.agents/skills/qk-ui-builder/references/color.md +115 -0
  66. package/.agents/skills/qk-ui-builder/references/component-cookbook.md +1194 -0
  67. package/.agents/skills/qk-ui-builder/references/copy.md +250 -0
  68. package/.agents/skills/qk-ui-builder/references/interaction-and-states.md +115 -0
  69. package/.agents/skills/qk-ui-builder/references/layout-and-space.md +111 -0
  70. package/.agents/skills/qk-ui-builder/references/macrostructures/01-bento-grid.md +48 -0
  71. package/.agents/skills/qk-ui-builder/references/macrostructures/02-long-document.md +50 -0
  72. package/.agents/skills/qk-ui-builder/references/macrostructures/03-marquee-hero.md +51 -0
  73. package/.agents/skills/qk-ui-builder/references/macrostructures/04-stat-led.md +49 -0
  74. package/.agents/skills/qk-ui-builder/references/macrostructures/05-workbench.md +44 -0
  75. package/.agents/skills/qk-ui-builder/references/macrostructures/06-conversational-faq.md +50 -0
  76. package/.agents/skills/qk-ui-builder/references/macrostructures/07-manifesto.md +51 -0
  77. package/.agents/skills/qk-ui-builder/references/macrostructures/08-photographic.md +50 -0
  78. package/.agents/skills/qk-ui-builder/references/macrostructures/09-quote-led.md +50 -0
  79. package/.agents/skills/qk-ui-builder/references/macrostructures/11-catalogue.md +49 -0
  80. package/.agents/skills/qk-ui-builder/references/macrostructures/12-letter.md +49 -0
  81. package/.agents/skills/qk-ui-builder/references/macrostructures/13-index-first.md +49 -0
  82. package/.agents/skills/qk-ui-builder/references/macrostructures/14-narrative-workflow.md +48 -0
  83. package/.agents/skills/qk-ui-builder/references/macrostructures/15-split-studio.md +48 -0
  84. package/.agents/skills/qk-ui-builder/references/macrostructures/16-feature-stack.md +51 -0
  85. package/.agents/skills/qk-ui-builder/references/macrostructures/17-type-specimen.md +48 -0
  86. package/.agents/skills/qk-ui-builder/references/macrostructures/18-portfolio-grid.md +48 -0
  87. package/.agents/skills/qk-ui-builder/references/macrostructures/19-map-diagram.md +50 -0
  88. package/.agents/skills/qk-ui-builder/references/macrostructures/20-ecosystem-index.md +48 -0
  89. package/.agents/skills/qk-ui-builder/references/macrostructures/21-component-playground.md +45 -0
  90. package/.agents/skills/qk-ui-builder/references/macrostructures.md +38 -0
  91. package/.agents/skills/qk-ui-builder/references/motion.md +95 -0
  92. package/.agents/skills/qk-ui-builder/references/responsive.md +115 -0
  93. package/.agents/skills/qk-ui-builder/references/slop-test.md +135 -0
  94. package/.agents/skills/qk-ui-builder/references/structure.md +280 -0
  95. package/.agents/skills/qk-ui-builder/references/themes/atmospheric.md +53 -0
  96. package/.agents/skills/qk-ui-builder/references/themes/carnival.md +52 -0
  97. package/.agents/skills/qk-ui-builder/references/themes/cobalt.md +52 -0
  98. package/.agents/skills/qk-ui-builder/references/themes/editorial.md +52 -0
  99. package/.agents/skills/qk-ui-builder/references/themes/garden.md +52 -0
  100. package/.agents/skills/qk-ui-builder/references/themes/hum.md +52 -0
  101. package/.agents/skills/qk-ui-builder/references/themes/lumen.md +52 -0
  102. package/.agents/skills/qk-ui-builder/references/themes/midnight.md +52 -0
  103. package/.agents/skills/qk-ui-builder/references/themes/modern-minimal.md +52 -0
  104. package/.agents/skills/qk-ui-builder/references/themes/playful.md +52 -0
  105. package/.agents/skills/qk-ui-builder/references/themes/specimen.md +52 -0
  106. package/.agents/skills/qk-ui-builder/references/themes/terminal.md +52 -0
  107. package/.agents/skills/qk-ui-builder/references/typography.md +129 -0
  108. package/.agents/skills/qk-ui-system-builder/SKILL.md +61 -5
  109. package/.agents/skills/qk-validation-gate/SKILL.md +63 -11
  110. package/.agents/skills/qk-web-quality-gate/SKILL.md +114 -0
  111. package/.agents/workflows/_schema.yml +109 -0
  112. package/.agents/workflows/bug-resolution.yml +101 -0
  113. package/.agents/workflows/code-review.yml +77 -0
  114. package/.agents/workflows/documentation.yml +75 -0
  115. package/.agents/workflows/feature-delivery.yml +103 -0
  116. package/.agents/workflows/refactor.yml +81 -0
  117. package/.agents/workflows/research.yml +60 -0
  118. package/.agents/workflows/security-audit.yml +72 -0
  119. package/.agents/workflows/skill-evolution.yml +65 -0
  120. package/.agents/workflows/spec-driven-development.yml +57 -0
  121. package/CHANGELOG.md +91 -69
  122. package/README.md +50 -45
  123. package/bin/install.js +57 -309
  124. package/package.json +14 -3
  125. package/tooling/generate-evaluation-cases.cjs +44 -0
  126. package/tooling/generate-registry.js +157 -0
  127. package/tooling/run-aar.js +143 -0
  128. package/tooling/validate-graph.js +87 -0
  129. package/tooling/validate-skills.js +102 -0
  130. package/.agents/_template/BEHAVIOR_SPEC.md +0 -96
  131. package/.agents/_template/examples/example-en.md +0 -49
  132. package/.agents/_template/examples/example-vi.md +0 -49
  133. package/.agents/skills/qk-design-to-code/SKILL.md +0 -285
  134. package/.agents/skills.json +0 -819
  135. package/.github/workflows/ci.yml +0 -56
  136. package/.qk-ai-skill-os/CHANGELOG.md +0 -69
  137. package/.qk-ai-skill-os/LICENSE +0 -21
  138. package/.qk-ai-skill-os/README.md +0 -59
  139. package/.qk-ai-skill-os/_template/BEHAVIOR_SPEC.md +0 -96
  140. package/.qk-ai-skill-os/_template/examples/example-en.md +0 -49
  141. package/.qk-ai-skill-os/_template/examples/example-vi.md +0 -49
  142. package/.qk-ai-skill-os/docs/CHI_TIET_SKILLS.md +0 -125
  143. package/.qk-ai-skill-os/docs/GOVERNANCE.md +0 -40
  144. package/.qk-ai-skill-os/docs/HUONG_DAN_SU_DUNG.md +0 -120
  145. package/.qk-ai-skill-os/docs/SPEC.md +0 -87
  146. package/.qk-ai-skill-os/docs/adr/0001-intent-based-architecture.md +0 -19
  147. package/.qk-ai-skill-os/docs/adr/0002-kernel-freeze.md +0 -21
  148. package/.qk-ai-skill-os/docs/adr/0003-risk-based-verification.md +0 -20
  149. package/.qk-ai-skill-os/docs/adr/0004-progressive-evidence.md +0 -19
  150. package/.qk-ai-skill-os/docs/skill-classification.md +0 -25
  151. package/.qk-ai-skill-os/skills/_archive_old_skills/qk-accessibility-audit/SKILL.md +0 -121
  152. package/.qk-ai-skill-os/skills/_archive_old_skills/qk-agent-orchestrator/SKILL.md +0 -179
  153. package/.qk-ai-skill-os/skills/_archive_old_skills/qk-api-integration/SKILL.md +0 -389
  154. package/.qk-ai-skill-os/skills/_archive_old_skills/qk-auth-security/SKILL.md +0 -96
  155. package/.qk-ai-skill-os/skills/_archive_old_skills/qk-backend-architecture/SKILL.md +0 -125
  156. package/.qk-ai-skill-os/skills/_archive_old_skills/qk-bug-fix/SKILL.md +0 -213
  157. package/.qk-ai-skill-os/skills/_archive_old_skills/qk-component-generator/SKILL.md +0 -136
  158. package/.qk-ai-skill-os/skills/_archive_old_skills/qk-context-manager/SKILL.md +0 -175
  159. package/.qk-ai-skill-os/skills/_archive_old_skills/qk-database-engineer/SKILL.md +0 -104
  160. package/.qk-ai-skill-os/skills/_archive_old_skills/qk-deployment/SKILL.md +0 -96
  161. package/.qk-ai-skill-os/skills/_archive_old_skills/qk-design-system/SKILL.md +0 -137
  162. package/.qk-ai-skill-os/skills/_archive_old_skills/qk-form-builder/SKILL.md +0 -140
  163. package/.qk-ai-skill-os/skills/_archive_old_skills/qk-frontend-architecture/SKILL.md +0 -155
  164. package/.qk-ai-skill-os/skills/_archive_old_skills/qk-frontend-debug/SKILL.md +0 -133
  165. package/.qk-ai-skill-os/skills/_archive_old_skills/qk-frontend-performance/SKILL.md +0 -129
  166. package/.qk-ai-skill-os/skills/_archive_old_skills/qk-frontend-testing/SKILL.md +0 -146
  167. package/.qk-ai-skill-os/skills/_archive_old_skills/qk-git-engineer/SKILL.md +0 -304
  168. package/.qk-ai-skill-os/skills/_archive_old_skills/qk-help/SKILL.md +0 -68
  169. package/.qk-ai-skill-os/skills/_archive_old_skills/qk-migration/SKILL.md +0 -284
  170. package/.qk-ai-skill-os/skills/_archive_old_skills/qk-project-audit/SKILL.md +0 -280
  171. package/.qk-ai-skill-os/skills/_archive_old_skills/qk-refactor/SKILL.md +0 -222
  172. package/.qk-ai-skill-os/skills/_archive_old_skills/qk-state-management/SKILL.md +0 -140
  173. package/.qk-ai-skill-os/skills/_archive_old_skills/qk-table-crud-generator/SKILL.md +0 -127
  174. package/.qk-ai-skill-os/skills/_archive_old_skills/qk-ui-builder/SKILL.md +0 -152
  175. package/.qk-ai-skill-os/skills/_template/SKILL.md +0 -238
  176. package/.qk-ai-skill-os/skills/qk-access-policy/SKILL.md +0 -179
  177. package/.qk-ai-skill-os/skills/qk-ai-builder/SKILL.md +0 -221
  178. package/.qk-ai-skill-os/skills/qk-api-lifecycle/SKILL.md +0 -176
  179. package/.qk-ai-skill-os/skills/qk-bug-resolution/SKILL.md +0 -307
  180. package/.qk-ai-skill-os/skills/qk-context-loader/SKILL.md +0 -218
  181. package/.qk-ai-skill-os/skills/qk-data-lifecycle/SKILL.md +0 -192
  182. package/.qk-ai-skill-os/skills/qk-db-optimizer/SKILL.md +0 -196
  183. package/.qk-ai-skill-os/skills/qk-design-to-code/SKILL.md +0 -291
  184. package/.qk-ai-skill-os/skills/qk-docs/SKILL.md +0 -198
  185. package/.qk-ai-skill-os/skills/qk-engineering-standard/SKILL.md +0 -351
  186. package/.qk-ai-skill-os/skills/qk-engineering-standard/rules/backend.md +0 -122
  187. package/.qk-ai-skill-os/skills/qk-engineering-standard/rules/database.md +0 -3
  188. package/.qk-ai-skill-os/skills/qk-engineering-standard/rules/frontend.md +0 -152
  189. package/.qk-ai-skill-os/skills/qk-engineering-standard/rules/security.md +0 -3
  190. package/.qk-ai-skill-os/skills/qk-engineering-standard/rules/testing.md +0 -3
  191. package/.qk-ai-skill-os/skills/qk-fe-api-integration/SKILL.md +0 -326
  192. package/.qk-ai-skill-os/skills/qk-feature-delivery/SKILL.md +0 -305
  193. package/.qk-ai-skill-os/skills/qk-help/SKILL.md +0 -193
  194. package/.qk-ai-skill-os/skills/qk-orchestrator/SKILL.md +0 -277
  195. package/.qk-ai-skill-os/skills/qk-orchestrator/references/routing-table.md +0 -77
  196. package/.qk-ai-skill-os/skills/qk-production-release/SKILL.md +0 -290
  197. package/.qk-ai-skill-os/skills/qk-project-bootstrap/SKILL.md +0 -240
  198. package/.qk-ai-skill-os/skills/qk-project-health/SKILL.md +0 -199
  199. package/.qk-ai-skill-os/skills/qk-project-memory/SKILL.md +0 -172
  200. package/.qk-ai-skill-os/skills/qk-system-evolution/SKILL.md +0 -285
  201. package/.qk-ai-skill-os/skills/qk-ui-audit/SKILL.md +0 -314
  202. package/.qk-ai-skill-os/skills/qk-ui-audit/references/anti-slop-checklist.md +0 -136
  203. package/.qk-ai-skill-os/skills/qk-ui-system-builder/SKILL.md +0 -225
  204. package/.qk-ai-skill-os/skills/qk-validation-gate/SKILL.md +0 -361
  205. package/.qk-ai-skill-os/skills.json +0 -819
  206. package/CLAUDE.md +0 -110
  207. package/_template/BEHAVIOR_SPEC.md +0 -96
  208. package/_template/examples/example-en.md +0 -49
  209. package/_template/examples/example-vi.md +0 -49
  210. package/add_lang.js +0 -21
  211. package/add_lang.py +0 -25
  212. package/add_sections.py +0 -53
  213. package/bin/lint.js +0 -122
  214. package/docs/CHI_TIET_SKILLS.md +0 -125
  215. package/docs/GOVERNANCE.md +0 -40
  216. package/docs/HUONG_DAN_SU_DUNG.md +0 -120
  217. package/docs/SPEC.md +0 -87
  218. package/docs/adr/0001-intent-based-architecture.md +0 -19
  219. package/docs/adr/0002-kernel-freeze.md +0 -21
  220. package/docs/adr/0003-risk-based-verification.md +0 -20
  221. package/docs/adr/0004-progressive-evidence.md +0 -19
  222. package/docs/skill-classification.md +0 -25
  223. package/fix_seeds.js +0 -22
  224. package/framework/KERNEL.md +0 -83
  225. package/framework/bias-library/cosmetic-refactor.md +0 -21
  226. package/framework/bias-library/enterprise-crud.md +0 -21
  227. package/framework/bias-library/fake-ui-slop.md +0 -20
  228. package/framework/bias-library/hallucinated-tools.md +0 -20
  229. package/framework/bias-library/missing-ui-states.md +0 -19
  230. package/framework/bias-library/over-indexing.md +0 -20
  231. package/framework/bias-library/swallow-errors.md +0 -19
  232. package/framework/bias-library/ui-only-security.md +0 -17
  233. package/framework/decision-primitives.md +0 -47
  234. package/framework/dial-library/complexity-budget.md +0 -13
  235. package/framework/dial-library/granularity.md +0 -13
  236. package/framework/dial-library/optimization-strategy.md +0 -13
  237. package/framework/dial-library/strictness.md +0 -13
  238. package/framework/rule-library/delegation-only.md +0 -9
  239. package/framework/rule-library/minimal-diff.md +0 -9
  240. package/framework/skill-schema.md +0 -310
  241. package/knowledge/backend/nodejs.md +0 -52
  242. package/knowledge/frontend/react.md +0 -81
  243. package/migrate-to-v6.js +0 -130
  244. package/migrate.js +0 -147
  245. package/migrate.py +0 -133
  246. package/migrate_all.cjs +0 -96
  247. package/patch.js +0 -15
  248. package/patch.py +0 -89
  249. package/patch2.py +0 -83
  250. package/rename.js +0 -64
  251. package/skills/_archive_old_skills/qk-accessibility-audit/SKILL.md +0 -121
  252. package/skills/_archive_old_skills/qk-agent-orchestrator/SKILL.md +0 -179
  253. package/skills/_archive_old_skills/qk-api-integration/SKILL.md +0 -389
  254. package/skills/_archive_old_skills/qk-auth-security/SKILL.md +0 -96
  255. package/skills/_archive_old_skills/qk-backend-architecture/SKILL.md +0 -125
  256. package/skills/_archive_old_skills/qk-bug-fix/SKILL.md +0 -213
  257. package/skills/_archive_old_skills/qk-component-generator/SKILL.md +0 -136
  258. package/skills/_archive_old_skills/qk-context-manager/SKILL.md +0 -175
  259. package/skills/_archive_old_skills/qk-database-engineer/SKILL.md +0 -104
  260. package/skills/_archive_old_skills/qk-deployment/SKILL.md +0 -96
  261. package/skills/_archive_old_skills/qk-design-system/SKILL.md +0 -137
  262. package/skills/_archive_old_skills/qk-form-builder/SKILL.md +0 -140
  263. package/skills/_archive_old_skills/qk-frontend-architecture/SKILL.md +0 -155
  264. package/skills/_archive_old_skills/qk-frontend-debug/SKILL.md +0 -133
  265. package/skills/_archive_old_skills/qk-frontend-performance/SKILL.md +0 -129
  266. package/skills/_archive_old_skills/qk-frontend-testing/SKILL.md +0 -146
  267. package/skills/_archive_old_skills/qk-git-engineer/SKILL.md +0 -304
  268. package/skills/_archive_old_skills/qk-help/SKILL.md +0 -68
  269. package/skills/_archive_old_skills/qk-migration/SKILL.md +0 -284
  270. package/skills/_archive_old_skills/qk-project-audit/SKILL.md +0 -280
  271. package/skills/_archive_old_skills/qk-refactor/SKILL.md +0 -222
  272. package/skills/_archive_old_skills/qk-state-management/SKILL.md +0 -140
  273. package/skills/_archive_old_skills/qk-table-crud-generator/SKILL.md +0 -127
  274. package/skills/_archive_old_skills/qk-ui-builder/SKILL.md +0 -152
  275. package/skills/_template/SKILL.md +0 -238
  276. package/skills/qk-access-policy/SKILL.md +0 -179
  277. package/skills/qk-ai-builder/SKILL.md +0 -215
  278. package/skills/qk-api-lifecycle/SKILL.md +0 -176
  279. package/skills/qk-bug-resolution/SKILL.md +0 -307
  280. package/skills/qk-context-loader/SKILL.md +0 -218
  281. package/skills/qk-data-lifecycle/SKILL.md +0 -192
  282. package/skills/qk-db-optimizer/SKILL.md +0 -196
  283. package/skills/qk-design-to-code/SKILL.md +0 -285
  284. package/skills/qk-docs/SKILL.md +0 -198
  285. package/skills/qk-engineering-standard/SKILL.md +0 -351
  286. package/skills/qk-engineering-standard/rules/backend.md +0 -122
  287. package/skills/qk-engineering-standard/rules/database.md +0 -3
  288. package/skills/qk-engineering-standard/rules/frontend.md +0 -152
  289. package/skills/qk-engineering-standard/rules/security.md +0 -3
  290. package/skills/qk-engineering-standard/rules/testing.md +0 -3
  291. package/skills/qk-fe-api-integration/SKILL.md +0 -326
  292. package/skills/qk-feature-delivery/SKILL.md +0 -305
  293. package/skills/qk-help/SKILL.md +0 -193
  294. package/skills/qk-orchestrator/SKILL.md +0 -277
  295. package/skills/qk-orchestrator/references/routing-table.md +0 -77
  296. package/skills/qk-production-release/SKILL.md +0 -284
  297. package/skills/qk-project-bootstrap/SKILL.md +0 -234
  298. package/skills/qk-project-health/SKILL.md +0 -199
  299. package/skills/qk-project-memory/SKILL.md +0 -172
  300. package/skills/qk-system-evolution/SKILL.md +0 -281
  301. package/skills/qk-ui-audit/SKILL.md +0 -314
  302. package/skills/qk-ui-audit/references/anti-slop-checklist.md +0 -136
  303. package/skills/qk-ui-system-builder/SKILL.md +0 -221
  304. package/skills/qk-validation-gate/SKILL.md +0 -359
  305. package/skills.json +0 -819
  306. package/specs/contracts/behavior-contract.yaml +0 -40
  307. package/specs/expectations/qk-bug-resolution.yaml +0 -35
  308. package/specs/fixtures/user-payload.json +0 -12
  309. package/specs/regressions/api-integration-null-fields.yaml +0 -19
  310. package/specs/scenarios/fix-login-nullref.yaml +0 -3
  311. package/taste-skill/.claude-plugin/marketplace.json +0 -20
  312. package/taste-skill/.claude-plugin/plugin.json +0 -19
  313. package/taste-skill/.github/FUNDING.yml +0 -1
  314. package/taste-skill/.github/copilot-instructions.md +0 -11
  315. package/taste-skill/CHANGELOG.md +0 -111
  316. package/taste-skill/LICENSE +0 -21
  317. package/taste-skill/README.md +0 -212
  318. package/taste-skill/assets/.gitkeep +0 -0
  319. package/taste-skill/assets/readme-banner.webp +0 -0
  320. package/taste-skill/assets/readme-buttons/btn-agent-skills.webp +0 -0
  321. package/taste-skill/assets/readme-buttons/btn-changelog.webp +0 -0
  322. package/taste-skill/assets/readme-buttons/btn-mit.webp +0 -0
  323. package/taste-skill/assets/readme-buttons/btn-site.webp +0 -0
  324. package/taste-skill/assets/readme-buttons/btn-tools.webp +0 -0
  325. package/taste-skill/assets/readme-cta-tasteskill.svg +0 -5
  326. package/taste-skill/assets/sponsors/animations-dev.webp +0 -0
  327. package/taste-skill/assets/sponsors/emil-animations-dev.webp +0 -0
  328. package/taste-skill/assets/taste-skill-logo.png +0 -0
  329. package/taste-skill/assets/taste-skill-logo.webp +0 -0
  330. package/taste-skill/assets/vercel-oss-program-badge.svg +0 -44
  331. package/taste-skill/examples/floria-bottom.webp +0 -0
  332. package/taste-skill/examples/floria-full.webp +0 -0
  333. package/taste-skill/examples/floria-top.webp +0 -0
  334. package/taste-skill/research/README.md +0 -8
  335. package/taste-skill/research/laziness/README.md +0 -25
  336. package/taste-skill/research/laziness/findings/empirical-results.md +0 -58
  337. package/taste-skill/research/laziness/findings/references.md +0 -20
  338. package/taste-skill/research/laziness/remediation/architectural-patterns.md +0 -55
  339. package/taste-skill/research/laziness/remediation/parameter-tuning.md +0 -44
  340. package/taste-skill/research/laziness/remediation/prompt-engineering.md +0 -52
  341. package/taste-skill/research/laziness/remediation/reference-prompts.md +0 -79
  342. package/taste-skill/research/laziness/root-causes/cognitive-shortcuts.md +0 -23
  343. package/taste-skill/research/laziness/root-causes/output-limits.md +0 -39
  344. package/taste-skill/research/laziness/root-causes/rlhf-and-compute.md +0 -27
  345. package/taste-skill/research/laziness/root-causes/training-data-bias.md +0 -28
  346. package/taste-skill/scripts/build-emil-sponsor-row.mjs +0 -41
  347. package/taste-skill/scripts/convert-readme-assets-webp.mjs +0 -142
  348. package/taste-skill/scripts/process-readme-buttons.mjs +0 -108
  349. package/taste-skill/scripts/process-sponsor-badge.mjs +0 -83
  350. package/taste-skill/skill.sh +0 -25
  351. package/taste-skill/skills/brandkit/SKILL.md +0 -798
  352. package/taste-skill/skills/brutalist-skill/SKILL.md +0 -92
  353. package/taste-skill/skills/gpt-tasteskill/SKILL.md +0 -74
  354. package/taste-skill/skills/image-to-code-skill/SKILL.md +0 -1228
  355. package/taste-skill/skills/imagegen-frontend-mobile/SKILL.md +0 -1465
  356. package/taste-skill/skills/imagegen-frontend-web/SKILL.md +0 -987
  357. package/taste-skill/skills/llms.txt +0 -13
  358. package/taste-skill/skills/minimalist-skill/SKILL.md +0 -85
  359. package/taste-skill/skills/output-skill/SKILL.md +0 -49
  360. package/taste-skill/skills/redesign-skill/SKILL.md +0 -178
  361. package/taste-skill/skills/soft-skill/SKILL.md +0 -98
  362. package/taste-skill/skills/stitch-skill/DESIGN.md +0 -121
  363. package/taste-skill/skills/stitch-skill/SKILL.md +0 -184
  364. package/taste-skill/skills/taste-skill/SKILL.md +0 -1206
  365. package/taste-skill/skills/taste-skill-v1/SKILL.md +0 -226
  366. package/temp_fix.js +0 -61
  367. package/templates/DESIGN.md +0 -38
  368. package/templates/bug-report.md +0 -21
  369. package/templates/design-report.md +0 -21
  370. package/templates/feature-report.md +0 -20
  371. package/templates/review-report.md +0 -21
  372. package/templates/skill-template.md +0 -38
  373. package/tests/behavior-conformance.test.js +0 -154
  374. package/tests/install-script.test.js +0 -38
  375. package/tests/registry.test.js +0 -111
  376. package/update_template.js +0 -28
  377. package/vitest.config.js +0 -11
@@ -1,155 +0,0 @@
1
- ---
2
- name: qk-frontend-architecture
3
- description: >-
4
- Phân tích cấu trúc thư mục frontend và quyết định vị trí đặt file chuẩn xác theo kiến trúc hiện tại.
5
- version: 1.0.0
6
- category: frontend
7
- tags: [architecture, folder-structure, conventions, file-placement]
8
- platforms: [antigravity, claude-code, kilo-code, cursor, windsurf]
9
- ---
10
-
11
- # Frontend Architecture
12
-
13
- > **Language rule:**
14
- > Use English for: code, identifiers, file names, architecture terms, technical decisions.
15
- > Use the user's language for: explanations, questions, summaries, and feedback.
16
- > The user may write in any language — detect and match it automatically.
17
-
18
- ---
19
-
20
- ## Trigger
21
-
22
- Activate this skill when:
23
- - About to create new files or components
24
- - User asks "where should I put this file?" or "how should I organize this?"
25
- - Moving or refactoring code across different modules
26
- - Inheriting an unfamiliar frontend project
27
-
28
- ---
29
-
30
- ## Scope
31
-
32
- - ✅ Discover the existing frontend folder structure
33
- - ✅ Define where new components, hooks, services, and types should be placed
34
- - ✅ Enforce separation of concerns (e.g., UI vs. Business Logic vs. Data)
35
- - ✅ Identify architectural patterns in use (e.g., Feature-based, Layer-based)
36
- - ✅ Validate file placement before execution by other skills
37
-
38
- ---
39
-
40
- ## Non-goals
41
-
42
- - ❌ Do NOT rewrite the entire project architecture unless explicitly asked
43
- - ❌ Do NOT generate code (delegate to `component-generator` or `ui-builder`)
44
- - ❌ Do NOT enforce personal preferences over established project conventions
45
-
46
- ---
47
-
48
- ## Severity Levels
49
-
50
- | Level | Meaning |
51
- |-------|---------|
52
- | P0 | Architectural violation that breaks the build or creates circular dependencies |
53
- | P1 | File placed in completely wrong layer (e.g., API logic in UI component) |
54
- | P2 | Inconsistent folder or file naming |
55
- | P3 | Minor deviation from convention |
56
-
57
- ---
58
-
59
- ## Workflow
60
-
61
- ### Phase 1 — Structure Discovery
62
-
63
- *(Relies on `context-manager` if already loaded)*
64
-
65
- Analyze the root source directory (e.g., `src/`, `app/`):
66
- 1. **Layer-based:** `components/`, `hooks/`, `services/`, `utils/`, `types/`
67
- 2. **Feature-based:** `features/auth/`, `features/products/`
68
- 3. **Framework-specific:** `app/` (Next.js App Router), `pages/` (Next.js Pages Router, Nuxt)
69
- 4. **Domain-driven:** `domains/user/`, `domains/payment/`
70
- 5. **FSD (Feature Sliced Design):** `app/`, `processes/`, `pages/`, `widgets/`, `features/`, `entities/`, `shared/`
71
-
72
- ---
73
-
74
- ### Phase 2 — Rule Extraction
75
-
76
- Based on discovery, define the project's rules for:
77
- - **Components:** Are they flat? Grouped by feature? Atomic design?
78
- - **Hooks:** Shared in `src/hooks/` or collocated with components?
79
- - **State:** Global store vs. feature stores?
80
- - **API/Services:** Where are HTTP calls made?
81
- - **Types:** Centralized `types/` or collocated?
82
- - **Naming Conventions:** PascalCase, camelCase, kebab-case, `index.ts` usage?
83
-
84
- ---
85
-
86
- ### Phase 3 — File Placement Decision
87
-
88
- When a new feature/component is requested, map it to the structure:
89
-
90
- **Input:** "Create a User Profile card that fetches user data."
91
- **Decision:**
92
- - UI Component: `src/features/user/components/UserProfileCard.tsx`
93
- - API Hook: `src/features/user/api/useUser.ts`
94
- - Types: `src/features/user/types/index.ts`
95
-
96
- ---
97
-
98
- ### Phase 4 — Enforcement & Validation
99
-
100
- Before passing control to a generation skill (like `ui-builder`), ensure the plan adheres to the rules.
101
-
102
- - [ ] Does it mix concerns? (e.g., putting an API call directly in a shared UI button)
103
- - [ ] Does it violate import boundaries? (e.g., a shared component importing from a specific feature)
104
- - [ ] Is the naming consistent?
105
-
106
- ---
107
-
108
- ## Decision Tree
109
-
110
- ```
111
- Is the project using a Feature-based structure?
112
- ├── Yes → Place feature-specific code in `features/<feature-name>/`
113
- └── No → Use Layer-based structure (`components/`, `hooks/`, etc.)
114
-
115
- Is the code shared across multiple domains/features?
116
- ├── Yes → Place in `shared/` or global `components/` / `hooks/`
117
- └── No → Collocate with the specific domain/feature
118
-
119
- Are there existing examples of this type of file?
120
- ├── Yes → Copy their placement and naming pattern
121
- └── No → Propose a standard location and ask user to confirm
122
- ```
123
-
124
- ---
125
-
126
- ## Output Format
127
-
128
- ```
129
- 🏗️ Frontend Architecture Plan
130
- ─────────────────────────────────────────────────
131
- Structure Type: [Feature-based / Layer-based / FSD / etc.]
132
- Naming: [PascalCase for components, camelCase for functions]
133
-
134
- File Placement:
135
- 📄 [path/to/new/file1.tsx] — [Why it goes here]
136
- 📄 [path/to/new/file2.ts] — [Why it goes here]
137
-
138
- ⚠️ Constraints enforced:
139
- • [Constraint 1, e.g., "API calls must be in hooks, not components"]
140
- • [Constraint 2, e.g., "Shared UI components cannot import from features/"]
141
-
142
- 🔗 Next Steps:
143
- Delegating to `[skill-name]` to generate the files.
144
- ```
145
-
146
- ---
147
-
148
- ## Validation Checklist
149
-
150
- - [ ] Structure type identified correctly
151
- - [ ] File placement follows existing conventions
152
- - [ ] Naming matches project standards
153
- - [ ] Separation of concerns maintained
154
- - [ ] Plan ready to be executed by generation skills
155
-
@@ -1,133 +0,0 @@
1
- ---
2
- name: qk-frontend-debug
3
- description: >-
4
- Chẩn đoán và sửa các lỗi đặc thù frontend như Hydration error, infinite re-render, stale closure và vỡ CSS.
5
- version: 1.0.0
6
- category: frontend
7
- tags: [debug, react, hydration, rerender, css, state-bug]
8
- platforms: [antigravity, claude-code, kilo-code, cursor, windsurf]
9
- ---
10
-
11
- # Frontend Debugger
12
-
13
- > **Language rule:**
14
- > Use English for: code, identifiers, file names, architecture terms, technical decisions.
15
- > Use the user's language for: explanations, questions, summaries, and feedback.
16
- > The user may write in any language — detect and match it automatically.
17
-
18
- ---
19
-
20
- ## Trigger
21
-
22
- Activate this skill when:
23
- - User reports a UI-specific bug ("screen is blank", "button doesn't work")
24
- - React throws a Hydration Error (`Text content did not match. Server: "A" Client: "B"`)
25
- - React throws an infinite loop error (`Too many re-renders`)
26
- - CSS styling is broken or overflowing unexpectedly
27
- - Form validation behaves incorrectly
28
-
29
- **Note:** For backend or general logic bugs, use `bug-fix`. For performance issues, use `frontend-performance`.
30
-
31
- ---
32
-
33
- ## Scope
34
-
35
- - ✅ Diagnose and fix React hydration mismatches (Next.js / SSR)
36
- - ✅ Fix infinite loops in `useEffect` and missing dependencies
37
- - ✅ Resolve state staleness (stale closures in async functions or hooks)
38
- - ✅ Fix CSS layout issues (Flexbox/Grid blowouts, z-index stacking context)
39
- - ✅ Provide a targeted, minimal fix that doesn't break other UI elements
40
-
41
- ---
42
-
43
- ## Non-goals
44
-
45
- - ❌ Do NOT rewrite the entire component to fix a small CSS bug
46
- - ❌ Do NOT disable hydration checks (`suppressHydrationWarning`) unless absolutely necessary and justified
47
- - ❌ Do NOT apply quick-fixes (like `// @ts-ignore` or wrapping everything in `setTimeout`) without understanding the root cause
48
-
49
- ---
50
-
51
- ## Workflow
52
-
53
- ### Phase 1 — Reproduction & Isolation
54
-
55
- 1. Identify the exact error message or visual symptom.
56
- 2. Isolate the component causing the issue.
57
- 3. Determine the environment (SSR, CSR, mobile, specific browser).
58
-
59
- ---
60
-
61
- ### Phase 2 — Common Issue Diagnosis
62
-
63
- **Hydration Errors (Next.js/SSR):**
64
- - Cause: Rendering `window`, `localStorage`, or random data (e.g., `Math.random()`, Dates) on the first pass.
65
- - Fix: Move client-only rendering inside a `useEffect` (isMounted pattern) or use dynamic imports with `ssr: false`.
66
-
67
- **Too many re-renders:**
68
- - Cause: Updating state directly in the render body, or inside a `useEffect` without proper dependencies.
69
- - Fix: Move state updates into event handlers, or fix `useEffect` dependencies.
70
-
71
- **Stale Closures:**
72
- - Cause: A `useEffect` or `useCallback` is using old state because it's missing from the dependency array.
73
- - Fix: Add dependencies, use refs (`useRef`) for mutable values, or use functional state updates (`setState(prev => prev + 1)`).
74
-
75
- **CSS Z-Index/Stacking Issues:**
76
- - Cause: Missing `position: relative/absolute` on parent, or a new stacking context was created.
77
- - Fix: Inspect parent elements, adjust `z-index`, or use Portals for modals.
78
-
79
- ---
80
-
81
- ### Phase 3 — Fix Application
82
-
83
- Apply the minimal fix required to resolve the issue while preserving surrounding logic and styles.
84
-
85
- ---
86
-
87
- ## Decision Tree
88
-
89
- ```
90
- Is it a Hydration Error?
91
- ├── Yes → Is it caused by client-side APIs (window/localStorage)?
92
- │ ├── Yes → Use `useEffect` to delay rendering until mounted
93
- │ └── No → Check for mismatched HTML tags (e.g., <p> inside <p>)
94
- └── No → Proceed to next check
95
-
96
- Is it an infinite loop?
97
- ├── Yes → Check `useEffect` dependencies. Are objects/arrays re-created every render?
98
- │ ├── Yes → Memoize them (`useMemo`) or move outside component
99
- │ └── No → Ensure `setState` isn't called unconditionally in render
100
- └── No → Proceed
101
- ```
102
-
103
- ---
104
-
105
- ## Output Format
106
-
107
- ```
108
- 🪲 Frontend Debug Report
109
- ─────────────────────────────────────────────────
110
- Symptom: [Description of the bug]
111
- Root Cause: [Explanation of why it failed, e.g., Stale Closure in useEffect]
112
-
113
- 🔧 Fix Applied:
114
- [Brief description of the code change]
115
-
116
- ✅ Verification:
117
- - Error no longer throws
118
- - UI renders correctly
119
-
120
- ⚠️ Notes:
121
- [Any side effects or things to watch out for]
122
- ```
123
-
124
- ---
125
-
126
- ## Validation Checklist
127
-
128
- - [ ] Root cause clearly identified (not just patched)
129
- - [ ] Fix is minimal and targeted
130
- - [ ] No Hydration warnings remain
131
- - [ ] Component doesn't infinitely loop
132
- - [ ] No regression on related UI
133
-
@@ -1,129 +0,0 @@
1
- ---
2
- name: qk-frontend-performance
3
- description: >-
4
- Tối ưu hóa hiệu năng frontend: giảm kích thước bundle, chặn re-render thừa, lazy load và cải thiện Web Vitals.
5
- version: 1.0.0
6
- category: frontend
7
- tags: [performance, optimization, render, bundle-size, lazy-load, memoization]
8
- platforms: [antigravity, claude-code, kilo-code, cursor, windsurf]
9
- ---
10
-
11
- # Frontend Performance Optimizer
12
-
13
- > **Language rule:**
14
- > Use English for: code, identifiers, file names, architecture terms, technical decisions.
15
- > Use the user's language for: explanations, questions, summaries, and feedback.
16
- > The user may write in any language — detect and match it automatically.
17
-
18
- ---
19
-
20
- ## Trigger
21
-
22
- Activate this skill when:
23
- - User reports "app is slow", "loading takes too long", or "UI freezes"
24
- - Core Web Vitals (LCP, FID/INP, CLS) are failing
25
- - React DevTools shows excessive re-renders
26
- - `project-audit` flags a performance issue (P2)
27
- - Need to optimize images, bundle size, or data fetching
28
-
29
- ---
30
-
31
- ## Scope
32
-
33
- - ✅ **Render Optimization:** Prevent unnecessary re-renders (React `memo`, `useMemo`, `useCallback`).
34
- - ✅ **Bundle Optimization:** Code splitting, lazy loading components/routes (`React.lazy`, Next.js `dynamic`).
35
- - ✅ **Asset Optimization:** Image optimization (WebP, Next/Image, lazy loading `loading="lazy"`).
36
- - ✅ **Data Fetching:** Caching, prefetching, pagination, virtualization for large lists.
37
- - ✅ **Core Web Vitals:** Fix layout shifts (CLS), improve Largest Contentful Paint (LCP).
38
-
39
- ---
40
-
41
- ## Non-goals
42
-
43
- - ❌ Do NOT blindly wrap everything in `useMemo` or `React.memo` (this can degrade performance).
44
- - ❌ Do NOT optimize prematurely if there is no measured performance issue.
45
- - ❌ Do NOT rewrite business logic unless it is the direct cause of the bottleneck.
46
-
47
- ---
48
-
49
- ## Workflow
50
-
51
- ### Phase 1 — Identify the Bottleneck
52
-
53
- Determine what kind of performance issue it is:
54
- 1. **Network/Load Time:** Slow initial page load, large bundle size, heavy images.
55
- 2. **Render/Runtime:** UI is sluggish, typing lags, animation stutters (too many re-renders).
56
- 3. **Data/Memory:** App crashes or slows down over time, large lists lagging.
57
-
58
- ### Phase 2 — Common Fixes by Category
59
-
60
- #### 1. Fixing Unnecessary Re-renders (React)
61
- - Move state down to the smallest possible component.
62
- - Use `React.memo` for heavy pure components that receive the same props.
63
- - Stable references: Use `useMemo` for expensive calculations or object props, and `useCallback` for function props passed to memoized children.
64
- - *Warning:* Measure first! Memoization has an upfront cost.
65
-
66
- #### 2. Fixing Bundle Size (Code Splitting)
67
- - Are large libraries (like `lodash`, `moment`, `echarts`) imported entirely? Use named imports or alternative libraries.
68
- - Lazy load routes or heavy components below the fold:
69
- ```typescript
70
- const HeavyChart = React.lazy(() => import('./HeavyChart'));
71
- // Wrap in <Suspense fallback={<Spinner />}>
72
- ```
73
-
74
- #### 3. Asset & UI Optimization
75
- - Add fixed `width` and `height` to images to prevent Cumulative Layout Shift (CLS).
76
- - Virtualize large lists (e.g., `react-window` or `@tanstack/react-virtual`) instead of rendering 1000 DOM nodes.
77
- - Debounce rapid events (typing in search, window resize).
78
-
79
- ---
80
-
81
- ### Phase 3 — Implementation
82
-
83
- Apply the targeted fix. Document why the fix improves performance.
84
-
85
- ---
86
-
87
- ## Decision Tree
88
-
89
- ```
90
- Is the issue related to initial load time?
91
- ├── Yes → Focus on Code Splitting (lazy loading), Image Optimization, and bundle size reduction.
92
- └── No → Is the UI lagging during interaction?
93
- ├── Yes → Profile renders. Check for state updates triggering massive re-renders. Use `memo` or state colocation.
94
- └── No → Is a specific list or table slow?
95
- ├── Yes → Implement virtualization (react-window) or pagination.
96
- ```
97
-
98
- ---
99
-
100
- ## Output Format
101
-
102
- ```
103
- ⚡ Performance Optimization Report
104
- ─────────────────────────────────────────────────
105
- Target: [Component / Page]
106
- Bottleneck: [Brief description, e.g., "Expensive list rendering on every keystroke"]
107
-
108
- 🔧 Fixes Applied:
109
- ✅ Extracted Search Input state to prevent list re-rendering
110
- ✅ Wrapped heavy `ChartComponent` in `React.memo`
111
- ✅ Lazy-loaded below-the-fold content (`Suspense`)
112
-
113
- 📈 Expected Impact:
114
- - Reduced re-renders on typing from O(N) to O(1)
115
- - Initial JS bundle size reduced by ~X KB
116
-
117
- ⚠️ Notes:
118
- Please test this on lower-end devices to confirm smooth interactions.
119
- ```
120
-
121
- ---
122
-
123
- ## Validation Checklist
124
-
125
- - [ ] Fix addresses the specific bottleneck
126
- - [ ] No premature memoization applied blindly
127
- - [ ] Layout shift (CLS) prevented (if changing images/layout)
128
- - [ ] Application behavior remains completely unchanged
129
-
@@ -1,146 +0,0 @@
1
- ---
2
- name: qk-frontend-testing
3
- description: >-
4
- Viết Unit, Component và E2E test bằng Jest, Vitest, RTL, Cypress. Tập trung vào hành vi người dùng.
5
- version: 1.0.0
6
- category: frontend
7
- tags: [testing, jest, vitest, react-testing-library, cypress, playwright, tdd]
8
- platforms: [antigravity, claude-code, kilo-code, cursor, windsurf]
9
- ---
10
-
11
- # Frontend Testing
12
-
13
- > **Language rule:**
14
- > Use English for: code, identifiers, file names, architecture terms, technical decisions.
15
- > Use the user's language for: explanations, questions, summaries, and feedback.
16
- > The user may write in any language — detect and match it automatically.
17
-
18
- ---
19
-
20
- ## Trigger
21
-
22
- Activate this skill when:
23
- - User asks to "write tests for this", "add unit tests", or "test this component"
24
- - Fixing a critical bug where a regression test is required
25
- - Preparing for a major release and increasing test coverage
26
- - Project audit flags missing tests for core business logic
27
-
28
- ---
29
-
30
- ## Scope
31
-
32
- - ✅ **Unit Tests:** Test pure functions, utilities, and custom hooks.
33
- - ✅ **Component Tests:** Test UI components using React Testing Library (RTL). Focus on user interactions and accessibility roles.
34
- - ✅ **Mocking:** Mock API calls (MSW, Jest mocks), modules, and timers.
35
- - ✅ **E2E Tests:** Write Cypress or Playwright tests for critical user flows.
36
- - ✅ Follow the project's existing testing framework (Jest vs Vitest).
37
-
38
- ---
39
-
40
- ## Non-goals
41
-
42
- - ❌ Do NOT test implementation details (e.g., checking if a specific state variable changed). Test what the user sees/does.
43
- - ❌ Do NOT write brittle tests (e.g., querying by CSS class names). Use ARIA roles or `data-testid`.
44
- - ❌ Do NOT introduce a new testing framework if one already exists.
45
-
46
- ---
47
-
48
- ## Workflow
49
-
50
- ### Phase 1 — Environment Check
51
-
52
- Identify the testing stack:
53
- - Runner: Jest or Vitest?
54
- - DOM: React Testing Library, Vue Test Utils?
55
- - E2E: Cypress, Playwright?
56
- - Mocking: MSW (Mock Service Worker), `jest.mock`, `vi.mock`?
57
-
58
- ---
59
-
60
- ### Phase 2 — Strategy & Coverage
61
-
62
- Determine what needs testing:
63
- 1. **Critical Path:** Can the user complete the primary action?
64
- 2. **Edge Cases:** What happens on API failure? Empty state? Invalid input?
65
- 3. **Accessibility:** Can elements be found by role?
66
-
67
- ---
68
-
69
- ### Phase 3 — Writing the Test (RTL Example)
70
-
71
- 1. **Setup:** Render the component, wrap with necessary providers (Theme, Store, QueryClient).
72
- 2. **Query:** Find elements using `screen.getByRole`, `screen.getByLabelText`, or `screen.getByText`.
73
- 3. **Act:** Simulate user events using `userEvent` (preferred over `fireEvent`).
74
- 4. **Assert:** Expect elements to be in the document, disabled, or display specific text.
75
-
76
- *Example:*
77
- ```typescript
78
- it('submits the form when fields are valid', async () => {
79
- const mockSubmit = vi.fn();
80
- render(<LoginForm onSubmit={mockSubmit} />);
81
-
82
- await userEvent.type(screen.getByLabelText(/email/i), 'test@example.com');
83
- await userEvent.type(screen.getByLabelText(/password/i), 'password123');
84
- await userEvent.click(screen.getByRole('button', { name: /login/i }));
85
-
86
- expect(mockSubmit).toHaveBeenCalledWith({
87
- email: 'test@example.com',
88
- password: 'password123'
89
- });
90
- });
91
- ```
92
-
93
- ---
94
-
95
- ### Phase 4 — Mocking
96
-
97
- If the component makes API calls:
98
- - Prefer MSW (Mock Service Worker) for network-level mocking.
99
- - Fallback: Mock the API service module or custom hook.
100
-
101
- ---
102
-
103
- ## Decision Tree
104
-
105
- ```
106
- Are we testing a pure function or utility?
107
- ├── Yes → Write a standard Unit Test (Jest/Vitest).
108
- └── No → Are we testing a UI component?
109
- ├── Yes → Use React Testing Library (focus on user behavior).
110
- └── No → Are we testing a full page flow?
111
- ├── Yes → Write an E2E test (Cypress/Playwright) or integration test.
112
- ```
113
-
114
- ---
115
-
116
- ## Output Format
117
-
118
- ```
119
- 🧪 Test Suite Generated
120
- ─────────────────────────────────────────────────
121
- Target: [ComponentName or Utility]
122
- Type: [Unit / Component / E2E]
123
- Framework: [Vitest + RTL]
124
-
125
- Tests Added:
126
- ✅ renders correctly in default state
127
- ✅ displays error message on API failure
128
- ✅ successfully submits user data
129
-
130
- Mocking Used:
131
- - MSW handlers for `/api/users`
132
- - vi.fn() for onSubmit callback
133
-
134
- 🔗 Next Steps:
135
- Run `npm run test` to execute the suite.
136
- ```
137
-
138
- ---
139
-
140
- ## Validation Checklist
141
-
142
- - [ ] Queries use accessible methods (`getByRole`, `getByLabelText`)
143
- - [ ] Events simulated with `userEvent` (if applicable)
144
- - [ ] External dependencies/APIs are properly mocked
145
- - [ ] Tests verify observable behavior, not internal state
146
-