moai-adk 0.35.1__py3-none-any.whl

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.

Potentially problematic release.


This version of moai-adk might be problematic. Click here for more details.

Files changed (502) hide show
  1. moai_adk/__init__.py +10 -0
  2. moai_adk/__main__.py +199 -0
  3. moai_adk/cli/__init__.py +6 -0
  4. moai_adk/cli/commands/__init__.py +17 -0
  5. moai_adk/cli/commands/analyze.py +116 -0
  6. moai_adk/cli/commands/doctor.py +272 -0
  7. moai_adk/cli/commands/init.py +372 -0
  8. moai_adk/cli/commands/language.py +248 -0
  9. moai_adk/cli/commands/status.py +104 -0
  10. moai_adk/cli/commands/update.py +2686 -0
  11. moai_adk/cli/main.py +13 -0
  12. moai_adk/cli/prompts/__init__.py +5 -0
  13. moai_adk/cli/prompts/init_prompts.py +219 -0
  14. moai_adk/cli/spec_status.py +263 -0
  15. moai_adk/cli/ui/__init__.py +44 -0
  16. moai_adk/cli/ui/progress.py +422 -0
  17. moai_adk/cli/ui/prompts.py +389 -0
  18. moai_adk/cli/ui/theme.py +129 -0
  19. moai_adk/cli/worktree/__init__.py +27 -0
  20. moai_adk/cli/worktree/__main__.py +31 -0
  21. moai_adk/cli/worktree/cli.py +683 -0
  22. moai_adk/cli/worktree/exceptions.py +89 -0
  23. moai_adk/cli/worktree/manager.py +493 -0
  24. moai_adk/cli/worktree/models.py +65 -0
  25. moai_adk/cli/worktree/registry.py +422 -0
  26. moai_adk/core/PHASE2_OPTIMIZATIONS.md +467 -0
  27. moai_adk/core/__init__.py +1 -0
  28. moai_adk/core/analysis/__init__.py +9 -0
  29. moai_adk/core/analysis/session_analyzer.py +400 -0
  30. moai_adk/core/claude_integration.py +393 -0
  31. moai_adk/core/command_helpers.py +270 -0
  32. moai_adk/core/comprehensive_monitoring_system.py +1183 -0
  33. moai_adk/core/config/__init__.py +19 -0
  34. moai_adk/core/config/auto_spec_config.py +340 -0
  35. moai_adk/core/config/migration.py +244 -0
  36. moai_adk/core/config/unified.py +436 -0
  37. moai_adk/core/context_manager.py +273 -0
  38. moai_adk/core/diagnostics/__init__.py +19 -0
  39. moai_adk/core/diagnostics/slash_commands.py +159 -0
  40. moai_adk/core/enterprise_features.py +1404 -0
  41. moai_adk/core/error_recovery_system.py +1902 -0
  42. moai_adk/core/event_driven_hook_system.py +1371 -0
  43. moai_adk/core/git/__init__.py +31 -0
  44. moai_adk/core/git/branch.py +25 -0
  45. moai_adk/core/git/branch_manager.py +129 -0
  46. moai_adk/core/git/checkpoint.py +134 -0
  47. moai_adk/core/git/commit.py +67 -0
  48. moai_adk/core/git/conflict_detector.py +413 -0
  49. moai_adk/core/git/event_detector.py +79 -0
  50. moai_adk/core/git/manager.py +216 -0
  51. moai_adk/core/hooks/post_tool_auto_spec_completion.py +901 -0
  52. moai_adk/core/input_validation_middleware.py +1006 -0
  53. moai_adk/core/integration/__init__.py +22 -0
  54. moai_adk/core/integration/engine.py +157 -0
  55. moai_adk/core/integration/integration_tester.py +226 -0
  56. moai_adk/core/integration/models.py +88 -0
  57. moai_adk/core/integration/utils.py +211 -0
  58. moai_adk/core/issue_creator.py +305 -0
  59. moai_adk/core/jit_context_loader.py +956 -0
  60. moai_adk/core/jit_enhanced_hook_manager.py +1987 -0
  61. moai_adk/core/language_config.py +202 -0
  62. moai_adk/core/language_config_resolver.py +572 -0
  63. moai_adk/core/language_validator.py +543 -0
  64. moai_adk/core/mcp/setup.py +116 -0
  65. moai_adk/core/merge/__init__.py +9 -0
  66. moai_adk/core/merge/analyzer.py +605 -0
  67. moai_adk/core/migration/__init__.py +18 -0
  68. moai_adk/core/migration/alfred_to_moai_migrator.py +383 -0
  69. moai_adk/core/migration/backup_manager.py +277 -0
  70. moai_adk/core/migration/custom_element_scanner.py +358 -0
  71. moai_adk/core/migration/file_migrator.py +209 -0
  72. moai_adk/core/migration/interactive_checkbox_ui.py +488 -0
  73. moai_adk/core/migration/selective_restorer.py +470 -0
  74. moai_adk/core/migration/template_utils.py +74 -0
  75. moai_adk/core/migration/user_selection_ui.py +338 -0
  76. moai_adk/core/migration/version_detector.py +139 -0
  77. moai_adk/core/migration/version_migrator.py +228 -0
  78. moai_adk/core/performance/__init__.py +6 -0
  79. moai_adk/core/performance/cache_system.py +316 -0
  80. moai_adk/core/performance/parallel_processor.py +116 -0
  81. moai_adk/core/phase_optimized_hook_scheduler.py +879 -0
  82. moai_adk/core/project/__init__.py +1 -0
  83. moai_adk/core/project/backup_utils.py +70 -0
  84. moai_adk/core/project/checker.py +300 -0
  85. moai_adk/core/project/detector.py +293 -0
  86. moai_adk/core/project/initializer.py +387 -0
  87. moai_adk/core/project/phase_executor.py +716 -0
  88. moai_adk/core/project/validator.py +139 -0
  89. moai_adk/core/quality/__init__.py +6 -0
  90. moai_adk/core/quality/trust_checker.py +377 -0
  91. moai_adk/core/quality/validators/__init__.py +6 -0
  92. moai_adk/core/quality/validators/base_validator.py +19 -0
  93. moai_adk/core/realtime_monitoring_dashboard.py +1724 -0
  94. moai_adk/core/robust_json_parser.py +611 -0
  95. moai_adk/core/rollback_manager.py +918 -0
  96. moai_adk/core/session_manager.py +651 -0
  97. moai_adk/core/skill_loading_system.py +579 -0
  98. moai_adk/core/spec/confidence_scoring.py +680 -0
  99. moai_adk/core/spec/ears_template_engine.py +1247 -0
  100. moai_adk/core/spec/quality_validator.py +687 -0
  101. moai_adk/core/spec_status_manager.py +478 -0
  102. moai_adk/core/template/__init__.py +7 -0
  103. moai_adk/core/template/backup.py +174 -0
  104. moai_adk/core/template/config.py +191 -0
  105. moai_adk/core/template/languages.py +43 -0
  106. moai_adk/core/template/merger.py +233 -0
  107. moai_adk/core/template/processor.py +1200 -0
  108. moai_adk/core/template_engine.py +310 -0
  109. moai_adk/core/template_variable_synchronizer.py +417 -0
  110. moai_adk/core/unified_permission_manager.py +745 -0
  111. moai_adk/core/user_behavior_analytics.py +851 -0
  112. moai_adk/core/version_sync.py +429 -0
  113. moai_adk/foundation/__init__.py +56 -0
  114. moai_adk/foundation/backend.py +1027 -0
  115. moai_adk/foundation/database.py +1115 -0
  116. moai_adk/foundation/devops.py +1585 -0
  117. moai_adk/foundation/ears.py +431 -0
  118. moai_adk/foundation/frontend.py +870 -0
  119. moai_adk/foundation/git/commit_templates.py +557 -0
  120. moai_adk/foundation/git.py +376 -0
  121. moai_adk/foundation/langs.py +484 -0
  122. moai_adk/foundation/ml_ops.py +1162 -0
  123. moai_adk/foundation/testing.py +1524 -0
  124. moai_adk/foundation/trust/trust_principles.py +676 -0
  125. moai_adk/foundation/trust/validation_checklist.py +1573 -0
  126. moai_adk/project/__init__.py +0 -0
  127. moai_adk/project/configuration.py +1084 -0
  128. moai_adk/project/documentation.py +566 -0
  129. moai_adk/project/schema.py +447 -0
  130. moai_adk/statusline/__init__.py +38 -0
  131. moai_adk/statusline/alfred_detector.py +105 -0
  132. moai_adk/statusline/config.py +376 -0
  133. moai_adk/statusline/enhanced_output_style_detector.py +372 -0
  134. moai_adk/statusline/git_collector.py +190 -0
  135. moai_adk/statusline/main.py +322 -0
  136. moai_adk/statusline/metrics_tracker.py +78 -0
  137. moai_adk/statusline/renderer.py +343 -0
  138. moai_adk/statusline/update_checker.py +129 -0
  139. moai_adk/statusline/version_reader.py +741 -0
  140. moai_adk/templates/.claude/agents/moai/ai-nano-banana.md +714 -0
  141. moai_adk/templates/.claude/agents/moai/builder-agent.md +474 -0
  142. moai_adk/templates/.claude/agents/moai/builder-command.md +1172 -0
  143. moai_adk/templates/.claude/agents/moai/builder-plugin.md +637 -0
  144. moai_adk/templates/.claude/agents/moai/builder-skill.md +666 -0
  145. moai_adk/templates/.claude/agents/moai/expert-backend.md +899 -0
  146. moai_adk/templates/.claude/agents/moai/expert-database.md +777 -0
  147. moai_adk/templates/.claude/agents/moai/expert-debug.md +401 -0
  148. moai_adk/templates/.claude/agents/moai/expert-devops.md +720 -0
  149. moai_adk/templates/.claude/agents/moai/expert-frontend.md +734 -0
  150. moai_adk/templates/.claude/agents/moai/expert-performance.md +657 -0
  151. moai_adk/templates/.claude/agents/moai/expert-security.md +513 -0
  152. moai_adk/templates/.claude/agents/moai/expert-testing.md +733 -0
  153. moai_adk/templates/.claude/agents/moai/expert-uiux.md +1041 -0
  154. moai_adk/templates/.claude/agents/moai/manager-claude-code.md +432 -0
  155. moai_adk/templates/.claude/agents/moai/manager-docs.md +573 -0
  156. moai_adk/templates/.claude/agents/moai/manager-git.md +1060 -0
  157. moai_adk/templates/.claude/agents/moai/manager-project.md +891 -0
  158. moai_adk/templates/.claude/agents/moai/manager-quality.md +624 -0
  159. moai_adk/templates/.claude/agents/moai/manager-spec.md +809 -0
  160. moai_adk/templates/.claude/agents/moai/manager-strategy.md +780 -0
  161. moai_adk/templates/.claude/agents/moai/manager-tdd.md +784 -0
  162. moai_adk/templates/.claude/agents/moai/mcp-context7.md +458 -0
  163. moai_adk/templates/.claude/agents/moai/mcp-figma.md +1607 -0
  164. moai_adk/templates/.claude/agents/moai/mcp-notion.md +789 -0
  165. moai_adk/templates/.claude/agents/moai/mcp-playwright.md +469 -0
  166. moai_adk/templates/.claude/agents/moai/mcp-sequential-thinking.md +1032 -0
  167. moai_adk/templates/.claude/commands/moai/0-project.md +1386 -0
  168. moai_adk/templates/.claude/commands/moai/1-plan.md +1427 -0
  169. moai_adk/templates/.claude/commands/moai/2-run.md +943 -0
  170. moai_adk/templates/.claude/commands/moai/3-sync.md +1324 -0
  171. moai_adk/templates/.claude/commands/moai/9-feedback.md +314 -0
  172. moai_adk/templates/.claude/hooks/__init__.py +8 -0
  173. moai_adk/templates/.claude/hooks/moai/__init__.py +8 -0
  174. moai_adk/templates/.claude/hooks/moai/lib/__init__.py +85 -0
  175. moai_adk/templates/.claude/hooks/moai/lib/checkpoint.py +244 -0
  176. moai_adk/templates/.claude/hooks/moai/lib/common.py +131 -0
  177. moai_adk/templates/.claude/hooks/moai/lib/config_manager.py +446 -0
  178. moai_adk/templates/.claude/hooks/moai/lib/config_validator.py +639 -0
  179. moai_adk/templates/.claude/hooks/moai/lib/example_config.json +104 -0
  180. moai_adk/templates/.claude/hooks/moai/lib/git_operations_manager.py +590 -0
  181. moai_adk/templates/.claude/hooks/moai/lib/language_validator.py +317 -0
  182. moai_adk/templates/.claude/hooks/moai/lib/models.py +102 -0
  183. moai_adk/templates/.claude/hooks/moai/lib/path_utils.py +28 -0
  184. moai_adk/templates/.claude/hooks/moai/lib/project.py +768 -0
  185. moai_adk/templates/.claude/hooks/moai/lib/test_hooks_improvements.py +443 -0
  186. moai_adk/templates/.claude/hooks/moai/lib/timeout.py +160 -0
  187. moai_adk/templates/.claude/hooks/moai/lib/unified_timeout_manager.py +530 -0
  188. moai_adk/templates/.claude/hooks/moai/session_end__auto_cleanup.py +862 -0
  189. moai_adk/templates/.claude/hooks/moai/session_start__show_project_info.py +1083 -0
  190. moai_adk/templates/.claude/output-styles/moai/r2d2.md +560 -0
  191. moai_adk/templates/.claude/output-styles/moai/yoda.md +359 -0
  192. moai_adk/templates/.claude/settings.json +172 -0
  193. moai_adk/templates/.claude/skills/moai-ai-nano-banana/SKILL.md +307 -0
  194. moai_adk/templates/.claude/skills/moai-ai-nano-banana/examples.md +431 -0
  195. moai_adk/templates/.claude/skills/moai-ai-nano-banana/scripts/batch_generate.py +560 -0
  196. moai_adk/templates/.claude/skills/moai-ai-nano-banana/scripts/generate_image.py +362 -0
  197. moai_adk/templates/.claude/skills/moai-docs-generation/SKILL.md +249 -0
  198. moai_adk/templates/.claude/skills/moai-docs-generation/examples.md +406 -0
  199. moai_adk/templates/.claude/skills/moai-docs-generation/modules/README.md +44 -0
  200. moai_adk/templates/.claude/skills/moai-docs-generation/modules/api-documentation.md +130 -0
  201. moai_adk/templates/.claude/skills/moai-docs-generation/modules/code-documentation.md +152 -0
  202. moai_adk/templates/.claude/skills/moai-docs-generation/modules/multi-format-output.md +178 -0
  203. moai_adk/templates/.claude/skills/moai-docs-generation/modules/user-guides.md +147 -0
  204. moai_adk/templates/.claude/skills/moai-docs-generation/reference.md +328 -0
  205. moai_adk/templates/.claude/skills/moai-domain-backend/SKILL.md +320 -0
  206. moai_adk/templates/.claude/skills/moai-domain-backend/examples.md +718 -0
  207. moai_adk/templates/.claude/skills/moai-domain-backend/reference.md +464 -0
  208. moai_adk/templates/.claude/skills/moai-domain-database/SKILL.md +323 -0
  209. moai_adk/templates/.claude/skills/moai-domain-database/examples.md +830 -0
  210. moai_adk/templates/.claude/skills/moai-domain-database/modules/README.md +53 -0
  211. moai_adk/templates/.claude/skills/moai-domain-database/modules/mongodb.md +231 -0
  212. moai_adk/templates/.claude/skills/moai-domain-database/modules/postgresql.md +169 -0
  213. moai_adk/templates/.claude/skills/moai-domain-database/modules/redis.md +262 -0
  214. moai_adk/templates/.claude/skills/moai-domain-database/reference.md +545 -0
  215. moai_adk/templates/.claude/skills/moai-domain-frontend/SKILL.md +497 -0
  216. moai_adk/templates/.claude/skills/moai-domain-frontend/examples.md +968 -0
  217. moai_adk/templates/.claude/skills/moai-domain-frontend/reference.md +664 -0
  218. moai_adk/templates/.claude/skills/moai-domain-uiux/SKILL.md +455 -0
  219. moai_adk/templates/.claude/skills/moai-domain-uiux/examples.md +560 -0
  220. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/accessibility-wcag.md +260 -0
  221. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/component-architecture.md +228 -0
  222. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/icon-libraries.md +401 -0
  223. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/theming-system.md +373 -0
  224. moai_adk/templates/.claude/skills/moai-domain-uiux/reference.md +243 -0
  225. moai_adk/templates/.claude/skills/moai-formats-data/SKILL.md +492 -0
  226. moai_adk/templates/.claude/skills/moai-formats-data/examples.md +804 -0
  227. moai_adk/templates/.claude/skills/moai-formats-data/modules/README.md +98 -0
  228. moai_adk/templates/.claude/skills/moai-formats-data/modules/SKILL-MODULARIZATION-TEMPLATE.md +278 -0
  229. moai_adk/templates/.claude/skills/moai-formats-data/modules/caching-performance.md +459 -0
  230. moai_adk/templates/.claude/skills/moai-formats-data/modules/data-validation.md +485 -0
  231. moai_adk/templates/.claude/skills/moai-formats-data/modules/json-optimization.md +374 -0
  232. moai_adk/templates/.claude/skills/moai-formats-data/modules/toon-encoding.md +308 -0
  233. moai_adk/templates/.claude/skills/moai-formats-data/reference.md +585 -0
  234. moai_adk/templates/.claude/skills/moai-foundation-claude/SKILL.md +202 -0
  235. moai_adk/templates/.claude/skills/moai-foundation-claude/examples.md +732 -0
  236. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/best-practices-checklist.md +616 -0
  237. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-custom-slash-commands-official.md +729 -0
  238. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-hooks-official.md +560 -0
  239. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-iam-official.md +635 -0
  240. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-memory-official.md +543 -0
  241. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-settings-official.md +663 -0
  242. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-skills-official.md +113 -0
  243. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-sub-agents-official.md +238 -0
  244. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/complete-configuration-guide.md +175 -0
  245. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/skill-examples.md +1674 -0
  246. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/skill-formatting-guide.md +729 -0
  247. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-examples.md +1513 -0
  248. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-formatting-guide.md +1086 -0
  249. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-integration-patterns.md +1100 -0
  250. moai_adk/templates/.claude/skills/moai-foundation-claude/reference.md +209 -0
  251. moai_adk/templates/.claude/skills/moai-foundation-context/SKILL.md +441 -0
  252. moai_adk/templates/.claude/skills/moai-foundation-context/examples.md +1048 -0
  253. moai_adk/templates/.claude/skills/moai-foundation-context/reference.md +246 -0
  254. moai_adk/templates/.claude/skills/moai-foundation-core/SKILL.md +420 -0
  255. moai_adk/templates/.claude/skills/moai-foundation-core/examples.md +358 -0
  256. moai_adk/templates/.claude/skills/moai-foundation-core/modules/README.md +296 -0
  257. moai_adk/templates/.claude/skills/moai-foundation-core/modules/agents-reference.md +359 -0
  258. moai_adk/templates/.claude/skills/moai-foundation-core/modules/commands-reference.md +432 -0
  259. moai_adk/templates/.claude/skills/moai-foundation-core/modules/delegation-patterns.md +757 -0
  260. moai_adk/templates/.claude/skills/moai-foundation-core/modules/execution-rules.md +687 -0
  261. moai_adk/templates/.claude/skills/moai-foundation-core/modules/modular-system.md +665 -0
  262. moai_adk/templates/.claude/skills/moai-foundation-core/modules/progressive-disclosure.md +649 -0
  263. moai_adk/templates/.claude/skills/moai-foundation-core/modules/spec-first-tdd.md +864 -0
  264. moai_adk/templates/.claude/skills/moai-foundation-core/modules/token-optimization.md +708 -0
  265. moai_adk/templates/.claude/skills/moai-foundation-core/modules/trust-5-framework.md +981 -0
  266. moai_adk/templates/.claude/skills/moai-foundation-core/reference.md +478 -0
  267. moai_adk/templates/.claude/skills/moai-foundation-philosopher/SKILL.md +315 -0
  268. moai_adk/templates/.claude/skills/moai-foundation-philosopher/examples.md +228 -0
  269. moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/assumption-matrix.md +80 -0
  270. moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/cognitive-bias.md +199 -0
  271. moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/first-principles.md +140 -0
  272. moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/trade-off-analysis.md +154 -0
  273. moai_adk/templates/.claude/skills/moai-foundation-philosopher/reference.md +157 -0
  274. moai_adk/templates/.claude/skills/moai-foundation-quality/SKILL.md +364 -0
  275. moai_adk/templates/.claude/skills/moai-foundation-quality/examples.md +1232 -0
  276. moai_adk/templates/.claude/skills/moai-foundation-quality/modules/best-practices.md +261 -0
  277. moai_adk/templates/.claude/skills/moai-foundation-quality/modules/integration-patterns.md +194 -0
  278. moai_adk/templates/.claude/skills/moai-foundation-quality/modules/proactive-analysis.md +229 -0
  279. moai_adk/templates/.claude/skills/moai-foundation-quality/modules/trust5-validation.md +169 -0
  280. moai_adk/templates/.claude/skills/moai-foundation-quality/reference.md +1266 -0
  281. moai_adk/templates/.claude/skills/moai-foundation-quality/scripts/quality-gate.sh +668 -0
  282. moai_adk/templates/.claude/skills/moai-foundation-quality/templates/github-actions-quality.yml +481 -0
  283. moai_adk/templates/.claude/skills/moai-foundation-quality/templates/quality-config.yaml +519 -0
  284. moai_adk/templates/.claude/skills/moai-lang-cpp/SKILL.md +649 -0
  285. moai_adk/templates/.claude/skills/moai-lang-csharp/SKILL.md +478 -0
  286. moai_adk/templates/.claude/skills/moai-lang-elixir/SKILL.md +612 -0
  287. moai_adk/templates/.claude/skills/moai-lang-flutter/SKILL.md +477 -0
  288. moai_adk/templates/.claude/skills/moai-lang-flutter/examples.md +1090 -0
  289. moai_adk/templates/.claude/skills/moai-lang-flutter/reference.md +686 -0
  290. moai_adk/templates/.claude/skills/moai-lang-go/SKILL.md +376 -0
  291. moai_adk/templates/.claude/skills/moai-lang-go/examples.md +919 -0
  292. moai_adk/templates/.claude/skills/moai-lang-go/reference.md +737 -0
  293. moai_adk/templates/.claude/skills/moai-lang-java/SKILL.md +385 -0
  294. moai_adk/templates/.claude/skills/moai-lang-java/examples.md +864 -0
  295. moai_adk/templates/.claude/skills/moai-lang-java/reference.md +291 -0
  296. moai_adk/templates/.claude/skills/moai-lang-kotlin/SKILL.md +382 -0
  297. moai_adk/templates/.claude/skills/moai-lang-kotlin/examples.md +1006 -0
  298. moai_adk/templates/.claude/skills/moai-lang-kotlin/reference.md +562 -0
  299. moai_adk/templates/.claude/skills/moai-lang-php/SKILL.md +644 -0
  300. moai_adk/templates/.claude/skills/moai-lang-python/SKILL.md +481 -0
  301. moai_adk/templates/.claude/skills/moai-lang-python/examples.md +977 -0
  302. moai_adk/templates/.claude/skills/moai-lang-python/reference.md +804 -0
  303. moai_adk/templates/.claude/skills/moai-lang-r/SKILL.md +579 -0
  304. moai_adk/templates/.claude/skills/moai-lang-ruby/SKILL.md +687 -0
  305. moai_adk/templates/.claude/skills/moai-lang-rust/SKILL.md +372 -0
  306. moai_adk/templates/.claude/skills/moai-lang-rust/examples.md +659 -0
  307. moai_adk/templates/.claude/skills/moai-lang-rust/reference.md +504 -0
  308. moai_adk/templates/.claude/skills/moai-lang-scala/SKILL.md +497 -0
  309. moai_adk/templates/.claude/skills/moai-lang-scala/examples.md +633 -0
  310. moai_adk/templates/.claude/skills/moai-lang-scala/reference.md +423 -0
  311. moai_adk/templates/.claude/skills/moai-lang-swift/SKILL.md +497 -0
  312. moai_adk/templates/.claude/skills/moai-lang-swift/examples.md +918 -0
  313. moai_adk/templates/.claude/skills/moai-lang-swift/reference.md +672 -0
  314. moai_adk/templates/.claude/skills/moai-lang-typescript/SKILL.md +368 -0
  315. moai_adk/templates/.claude/skills/moai-lang-typescript/examples.md +1089 -0
  316. moai_adk/templates/.claude/skills/moai-lang-typescript/reference.md +731 -0
  317. moai_adk/templates/.claude/skills/moai-library-mermaid/SKILL.md +300 -0
  318. moai_adk/templates/.claude/skills/moai-library-mermaid/advanced-patterns.md +465 -0
  319. moai_adk/templates/.claude/skills/moai-library-mermaid/examples.md +270 -0
  320. moai_adk/templates/.claude/skills/moai-library-mermaid/optimization.md +440 -0
  321. moai_adk/templates/.claude/skills/moai-library-mermaid/reference.md +228 -0
  322. moai_adk/templates/.claude/skills/moai-library-nextra/SKILL.md +319 -0
  323. moai_adk/templates/.claude/skills/moai-library-nextra/advanced-patterns.md +336 -0
  324. moai_adk/templates/.claude/skills/moai-library-nextra/examples.md +592 -0
  325. moai_adk/templates/.claude/skills/moai-library-nextra/modules/advanced-deployment-patterns.md +182 -0
  326. moai_adk/templates/.claude/skills/moai-library-nextra/modules/advanced-patterns.md +17 -0
  327. moai_adk/templates/.claude/skills/moai-library-nextra/modules/configuration.md +57 -0
  328. moai_adk/templates/.claude/skills/moai-library-nextra/modules/content-architecture-optimization.md +162 -0
  329. moai_adk/templates/.claude/skills/moai-library-nextra/modules/deployment.md +52 -0
  330. moai_adk/templates/.claude/skills/moai-library-nextra/modules/framework-core-configuration.md +186 -0
  331. moai_adk/templates/.claude/skills/moai-library-nextra/modules/i18n-setup.md +55 -0
  332. moai_adk/templates/.claude/skills/moai-library-nextra/modules/mdx-components.md +52 -0
  333. moai_adk/templates/.claude/skills/moai-library-nextra/optimization.md +303 -0
  334. moai_adk/templates/.claude/skills/moai-library-nextra/reference.md +379 -0
  335. moai_adk/templates/.claude/skills/moai-library-shadcn/SKILL.md +372 -0
  336. moai_adk/templates/.claude/skills/moai-library-shadcn/examples.md +575 -0
  337. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/advanced-patterns.md +394 -0
  338. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/optimization.md +278 -0
  339. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/shadcn-components.md +457 -0
  340. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/shadcn-theming.md +373 -0
  341. moai_adk/templates/.claude/skills/moai-library-shadcn/reference.md +74 -0
  342. moai_adk/templates/.claude/skills/moai-mcp-figma/SKILL.md +402 -0
  343. moai_adk/templates/.claude/skills/moai-mcp-figma/advanced-patterns.md +607 -0
  344. moai_adk/templates/.claude/skills/moai-mcp-notion/SKILL.md +300 -0
  345. moai_adk/templates/.claude/skills/moai-mcp-notion/advanced-patterns.md +537 -0
  346. moai_adk/templates/.claude/skills/moai-platform-auth0/SKILL.md +291 -0
  347. moai_adk/templates/.claude/skills/moai-platform-clerk/SKILL.md +390 -0
  348. moai_adk/templates/.claude/skills/moai-platform-convex/SKILL.md +398 -0
  349. moai_adk/templates/.claude/skills/moai-platform-firebase-auth/SKILL.md +379 -0
  350. moai_adk/templates/.claude/skills/moai-platform-firestore/SKILL.md +358 -0
  351. moai_adk/templates/.claude/skills/moai-platform-neon/SKILL.md +467 -0
  352. moai_adk/templates/.claude/skills/moai-platform-railway/SKILL.md +377 -0
  353. moai_adk/templates/.claude/skills/moai-platform-supabase/SKILL.md +466 -0
  354. moai_adk/templates/.claude/skills/moai-platform-vercel/SKILL.md +482 -0
  355. moai_adk/templates/.claude/skills/moai-plugin-builder/SKILL.md +474 -0
  356. moai_adk/templates/.claude/skills/moai-plugin-builder/examples.md +621 -0
  357. moai_adk/templates/.claude/skills/moai-plugin-builder/migration.md +341 -0
  358. moai_adk/templates/.claude/skills/moai-plugin-builder/reference.md +463 -0
  359. moai_adk/templates/.claude/skills/moai-plugin-builder/validation.md +373 -0
  360. moai_adk/templates/.claude/skills/moai-security-auth0/SKILL.md +275 -0
  361. moai_adk/templates/.claude/skills/moai-security-auth0/modules/adaptive-mfa.md +233 -0
  362. moai_adk/templates/.claude/skills/moai-security-auth0/modules/akamai-integration.md +215 -0
  363. moai_adk/templates/.claude/skills/moai-security-auth0/modules/application-credentials.md +280 -0
  364. moai_adk/templates/.claude/skills/moai-security-auth0/modules/attack-protection-log-events.md +225 -0
  365. moai_adk/templates/.claude/skills/moai-security-auth0/modules/attack-protection-overview.md +140 -0
  366. moai_adk/templates/.claude/skills/moai-security-auth0/modules/bot-detection.md +144 -0
  367. moai_adk/templates/.claude/skills/moai-security-auth0/modules/breached-password-detection.md +187 -0
  368. moai_adk/templates/.claude/skills/moai-security-auth0/modules/brute-force-protection.md +189 -0
  369. moai_adk/templates/.claude/skills/moai-security-auth0/modules/certifications.md +282 -0
  370. moai_adk/templates/.claude/skills/moai-security-auth0/modules/compliance-overview.md +263 -0
  371. moai_adk/templates/.claude/skills/moai-security-auth0/modules/continuous-session-protection.md +307 -0
  372. moai_adk/templates/.claude/skills/moai-security-auth0/modules/customize-mfa.md +178 -0
  373. moai_adk/templates/.claude/skills/moai-security-auth0/modules/dpop-implementation.md +283 -0
  374. moai_adk/templates/.claude/skills/moai-security-auth0/modules/fapi-implementation.md +259 -0
  375. moai_adk/templates/.claude/skills/moai-security-auth0/modules/gdpr-compliance.md +313 -0
  376. moai_adk/templates/.claude/skills/moai-security-auth0/modules/guardian-configuration.md +269 -0
  377. moai_adk/templates/.claude/skills/moai-security-auth0/modules/highly-regulated-identity.md +272 -0
  378. moai_adk/templates/.claude/skills/moai-security-auth0/modules/jwt-fundamentals.md +248 -0
  379. moai_adk/templates/.claude/skills/moai-security-auth0/modules/mdl-verification.md +211 -0
  380. moai_adk/templates/.claude/skills/moai-security-auth0/modules/mfa-api-management.md +278 -0
  381. moai_adk/templates/.claude/skills/moai-security-auth0/modules/mfa-factors.md +226 -0
  382. moai_adk/templates/.claude/skills/moai-security-auth0/modules/mfa-overview.md +174 -0
  383. moai_adk/templates/.claude/skills/moai-security-auth0/modules/mtls-sender-constraining.md +316 -0
  384. moai_adk/templates/.claude/skills/moai-security-auth0/modules/ropg-flow-mfa.md +217 -0
  385. moai_adk/templates/.claude/skills/moai-security-auth0/modules/security-center.md +325 -0
  386. moai_adk/templates/.claude/skills/moai-security-auth0/modules/security-guidance.md +277 -0
  387. moai_adk/templates/.claude/skills/moai-security-auth0/modules/state-parameters.md +178 -0
  388. moai_adk/templates/.claude/skills/moai-security-auth0/modules/step-up-authentication.md +251 -0
  389. moai_adk/templates/.claude/skills/moai-security-auth0/modules/suspicious-ip-throttling.md +240 -0
  390. moai_adk/templates/.claude/skills/moai-security-auth0/modules/tenant-access-control.md +180 -0
  391. moai_adk/templates/.claude/skills/moai-security-auth0/modules/webauthn-fido.md +235 -0
  392. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/SKILL.md +449 -0
  393. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/advanced-patterns.md +379 -0
  394. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/examples.md +544 -0
  395. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/optimization.md +286 -0
  396. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/reference.md +307 -0
  397. moai_adk/templates/.claude/skills/moai-workflow-project/README.md +190 -0
  398. moai_adk/templates/.claude/skills/moai-workflow-project/SKILL.md +390 -0
  399. moai_adk/templates/.claude/skills/moai-workflow-project/__init__.py +520 -0
  400. moai_adk/templates/.claude/skills/moai-workflow-project/complete_workflow_demo_fixed.py +574 -0
  401. moai_adk/templates/.claude/skills/moai-workflow-project/examples/complete_project_setup.py +317 -0
  402. moai_adk/templates/.claude/skills/moai-workflow-project/examples/complete_workflow_demo.py +663 -0
  403. moai_adk/templates/.claude/skills/moai-workflow-project/examples/config-migration-example.json +190 -0
  404. moai_adk/templates/.claude/skills/moai-workflow-project/examples/question-examples.json +175 -0
  405. moai_adk/templates/.claude/skills/moai-workflow-project/examples/quick_start.py +196 -0
  406. moai_adk/templates/.claude/skills/moai-workflow-project/examples.md +547 -0
  407. moai_adk/templates/.claude/skills/moai-workflow-project/modules/__init__.py +17 -0
  408. moai_adk/templates/.claude/skills/moai-workflow-project/modules/advanced-patterns.md +158 -0
  409. moai_adk/templates/.claude/skills/moai-workflow-project/modules/ask_user_integration.py +340 -0
  410. moai_adk/templates/.claude/skills/moai-workflow-project/modules/batch_questions.py +713 -0
  411. moai_adk/templates/.claude/skills/moai-workflow-project/modules/config_manager.py +538 -0
  412. moai_adk/templates/.claude/skills/moai-workflow-project/modules/documentation_manager.py +1336 -0
  413. moai_adk/templates/.claude/skills/moai-workflow-project/modules/language_initializer.py +730 -0
  414. moai_adk/templates/.claude/skills/moai-workflow-project/modules/migration_manager.py +608 -0
  415. moai_adk/templates/.claude/skills/moai-workflow-project/modules/template_optimizer.py +1005 -0
  416. moai_adk/templates/.claude/skills/moai-workflow-project/reference.md +275 -0
  417. moai_adk/templates/.claude/skills/moai-workflow-project/schemas/config-schema.json +316 -0
  418. moai_adk/templates/.claude/skills/moai-workflow-project/schemas/tab_schema.json +1434 -0
  419. moai_adk/templates/.claude/skills/moai-workflow-project/templates/config-template.json +71 -0
  420. moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/product-template.md +44 -0
  421. moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/structure-template.md +48 -0
  422. moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/tech-template.md +92 -0
  423. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/config-manager-setup.json +109 -0
  424. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/language-initializer.json +228 -0
  425. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/menu-project-config.json +130 -0
  426. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/project-batch-questions.json +97 -0
  427. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/spec-workflow-setup.json +150 -0
  428. moai_adk/templates/.claude/skills/moai-workflow-project/test_integration_simple.py +436 -0
  429. moai_adk/templates/.claude/skills/moai-workflow-spec/SKILL.md +534 -0
  430. moai_adk/templates/.claude/skills/moai-workflow-spec/examples.md +900 -0
  431. moai_adk/templates/.claude/skills/moai-workflow-spec/reference.md +704 -0
  432. moai_adk/templates/.claude/skills/moai-workflow-templates/SKILL.md +377 -0
  433. moai_adk/templates/.claude/skills/moai-workflow-templates/examples.md +552 -0
  434. moai_adk/templates/.claude/skills/moai-workflow-templates/modules/code-templates.md +124 -0
  435. moai_adk/templates/.claude/skills/moai-workflow-templates/modules/feedback-templates.md +100 -0
  436. moai_adk/templates/.claude/skills/moai-workflow-templates/modules/template-optimizer.md +138 -0
  437. moai_adk/templates/.claude/skills/moai-workflow-templates/reference.md +346 -0
  438. moai_adk/templates/.claude/skills/moai-workflow-testing/LICENSE.txt +202 -0
  439. moai_adk/templates/.claude/skills/moai-workflow-testing/SKILL.md +456 -0
  440. moai_adk/templates/.claude/skills/moai-workflow-testing/advanced-patterns.md +576 -0
  441. moai_adk/templates/.claude/skills/moai-workflow-testing/examples/ai-powered-testing.py +294 -0
  442. moai_adk/templates/.claude/skills/moai-workflow-testing/examples/console_logging.py +35 -0
  443. moai_adk/templates/.claude/skills/moai-workflow-testing/examples/element_discovery.py +40 -0
  444. moai_adk/templates/.claude/skills/moai-workflow-testing/examples/static_html_automation.py +34 -0
  445. moai_adk/templates/.claude/skills/moai-workflow-testing/examples.md +672 -0
  446. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/README.md +220 -0
  447. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/ai-debugging.md +845 -0
  448. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review.md +1416 -0
  449. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization.md +1234 -0
  450. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/smart-refactoring.md +1243 -0
  451. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7.md +1260 -0
  452. moai_adk/templates/.claude/skills/moai-workflow-testing/optimization.md +505 -0
  453. moai_adk/templates/.claude/skills/moai-workflow-testing/reference/playwright-best-practices.md +57 -0
  454. moai_adk/templates/.claude/skills/moai-workflow-testing/reference.md +440 -0
  455. moai_adk/templates/.claude/skills/moai-workflow-testing/scripts/with_server.py +218 -0
  456. moai_adk/templates/.claude/skills/moai-workflow-testing/templates/alfred-integration.md +376 -0
  457. moai_adk/templates/.claude/skills/moai-workflow-testing/workflows/enterprise-testing-workflow.py +571 -0
  458. moai_adk/templates/.claude/skills/moai-worktree/SKILL.md +411 -0
  459. moai_adk/templates/.claude/skills/moai-worktree/examples.md +606 -0
  460. moai_adk/templates/.claude/skills/moai-worktree/modules/integration-patterns.md +982 -0
  461. moai_adk/templates/.claude/skills/moai-worktree/modules/parallel-development.md +778 -0
  462. moai_adk/templates/.claude/skills/moai-worktree/modules/worktree-commands.md +646 -0
  463. moai_adk/templates/.claude/skills/moai-worktree/modules/worktree-management.md +782 -0
  464. moai_adk/templates/.claude/skills/moai-worktree/reference.md +357 -0
  465. moai_adk/templates/.git-hooks/pre-commit +128 -0
  466. moai_adk/templates/.git-hooks/pre-push +365 -0
  467. moai_adk/templates/.github/workflows/ci-universal.yml +513 -0
  468. moai_adk/templates/.github/workflows/security-secrets-check.yml +179 -0
  469. moai_adk/templates/.github/workflows/spec-issue-sync.yml +337 -0
  470. moai_adk/templates/.gitignore +222 -0
  471. moai_adk/templates/.mcp.json +13 -0
  472. moai_adk/templates/.moai/config/config.yaml +58 -0
  473. moai_adk/templates/.moai/config/questions/_schema.yaml +174 -0
  474. moai_adk/templates/.moai/config/questions/tab0-init.yaml +251 -0
  475. moai_adk/templates/.moai/config/questions/tab1-user.yaml +107 -0
  476. moai_adk/templates/.moai/config/questions/tab2-project.yaml +79 -0
  477. moai_adk/templates/.moai/config/questions/tab3-git.yaml +632 -0
  478. moai_adk/templates/.moai/config/questions/tab4-quality.yaml +182 -0
  479. moai_adk/templates/.moai/config/questions/tab5-system.yaml +96 -0
  480. moai_adk/templates/.moai/config/sections/git-strategy.yaml +116 -0
  481. moai_adk/templates/.moai/config/sections/language.yaml +11 -0
  482. moai_adk/templates/.moai/config/sections/project.yaml +13 -0
  483. moai_adk/templates/.moai/config/sections/quality.yaml +17 -0
  484. moai_adk/templates/.moai/config/sections/system.yaml +24 -0
  485. moai_adk/templates/.moai/config/sections/user.yaml +5 -0
  486. moai_adk/templates/.moai/config/statusline-config.yaml +92 -0
  487. moai_adk/templates/.moai/scripts/setup-glm.py +136 -0
  488. moai_adk/templates/CLAUDE.md +642 -0
  489. moai_adk/utils/__init__.py +30 -0
  490. moai_adk/utils/banner.py +38 -0
  491. moai_adk/utils/common.py +294 -0
  492. moai_adk/utils/link_validator.py +241 -0
  493. moai_adk/utils/logger.py +147 -0
  494. moai_adk/utils/safe_file_reader.py +206 -0
  495. moai_adk/utils/timeout.py +160 -0
  496. moai_adk/utils/toon_utils.py +256 -0
  497. moai_adk/version.py +22 -0
  498. moai_adk-0.35.1.dist-info/METADATA +3018 -0
  499. moai_adk-0.35.1.dist-info/RECORD +502 -0
  500. moai_adk-0.35.1.dist-info/WHEEL +4 -0
  501. moai_adk-0.35.1.dist-info/entry_points.txt +3 -0
  502. moai_adk-0.35.1.dist-info/licenses/LICENSE +21 -0
@@ -0,0 +1,900 @@
1
+ # SPEC Workflow Examples
2
+
3
+ ## Real-World SPEC Documents
4
+
5
+ This document provides complete, production-ready SPEC examples for common development scenarios.
6
+
7
+ ---
8
+
9
+ ## Example 1: User Authentication System (Simple CRUD)
10
+
11
+ ```markdown
12
+ # SPEC-001: User Authentication System
13
+
14
+ Created: 2025-12-07
15
+ Status: Planned
16
+ Priority: High
17
+ Assigned: manager-tdd
18
+ Related SPECs: SPEC-002 (User Registration)
19
+ Epic: EPIC-AUTH
20
+ Estimated Effort: 8 hours
21
+ Labels: backend, security, high-priority, api
22
+ Version: 1.0.0
23
+
24
+ ## Description
25
+
26
+ Implement JWT-based user authentication system with email/password login. Users authenticate with credentials, receive JWT access token and refresh token, and use tokens to access protected resources.
27
+
28
+ ### User Stories
29
+ - As a user, I want to log in with email and password to access my account
30
+ - As a user, I want my session to persist for 24 hours without re-login
31
+ - As a system admin, I want failed login attempts logged for security monitoring
32
+
33
+ ## Requirements
34
+
35
+ ### Ubiquitous
36
+ - 시스템은 항상 로그인 시도를 로깅해야 한다 (timestamp, user_id, IP, success/failure)
37
+ - 시스템은 항상 비밀번호를 bcrypt로 해싱하여 저장해야 한다 (salt rounds: 12)
38
+ - 시스템은 항상 토큰 검증 실패 시 명확한 에러 메시지를 반환해야 한다
39
+
40
+ ### Event-Driven
41
+ - WHEN 사용자가 유효한 자격증명으로 로그인하면 THEN JWT 액세스 토큰과 리프레시 토큰을 발급한다
42
+ - WHEN 액세스 토큰이 만료되면 THEN 리프레시 토큰으로 새 액세스 토큰을 발급한다
43
+ - WHEN 로그인 실패가 5회 연속 발생하면 THEN 계정을 15분간 일시 잠금한다
44
+ - WHEN 사용자가 로그아웃하면 THEN 해당 세션의 리프레시 토큰을 무효화한다
45
+
46
+ ### State-Driven
47
+ - IF 계정 상태가 "active"이면 THEN 로그인을 허용한다
48
+ - IF 계정 상태가 "suspended" 또는 "deleted"이면 THEN 로그인을 거부하고 403 에러를 반환한다
49
+ - IF 로그인 실패 횟수가 5회 이상이면 THEN 계정 잠금 시간 종료까지 로그인을 차단한다
50
+ - IF 마지막 비밀번호 변경일로부터 90일이 지났으면 THEN 비밀번호 변경을 요구한다
51
+
52
+ ### Unwanted
53
+ - 시스템은 평문 비밀번호를 데이터베이스에 저장하지 않아야 한다
54
+ - 시스템은 비밀번호를 로그 파일에 기록하지 않아야 한다
55
+ - 시스템은 인증되지 않은 사용자의 보호된 리소스 접근을 허용하지 않아야 한다
56
+ - 시스템은 만료된 토큰으로 리소스 접근을 허용하지 않아야 한다
57
+
58
+ ### Optional
59
+ - 가능하면 OAuth 2.0 소셜 로그인(Google, GitHub)을 제공한다
60
+ - 가능하면 이중 인증(2FA, TOTP)을 지원한다
61
+ - 가능하면 "Remember Me" 기능으로 30일간 자동 로그인을 제공한다
62
+
63
+ ## API Specification
64
+
65
+ ### POST /api/auth/login
66
+
67
+ Request:
68
+ ```json
69
+ {
70
+ "email": "user@example.com",
71
+ "password": "SecurePass123!",
72
+ "rememberMe": false
73
+ }
74
+ ```
75
+
76
+ Success Response (200 OK):
77
+ ```json
78
+ {
79
+ "accessToken": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...",
80
+ "refreshToken": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...",
81
+ "expiresIn": 86400,
82
+ "tokenType": "Bearer",
83
+ "user": {
84
+ "id": 12345,
85
+ "email": "user@example.com",
86
+ "role": "user",
87
+ "lastLogin": "2025-12-07T10:00:00Z"
88
+ }
89
+ }
90
+ ```
91
+
92
+ Error Responses:
93
+
94
+ 401 Unauthorized - Invalid Credentials:
95
+ ```json
96
+ {
97
+ "error": "INVALID_CREDENTIALS",
98
+ "message": "Email or password is incorrect",
99
+ "timestamp": "2025-12-07T10:00:00Z"
100
+ }
101
+ ```
102
+
103
+ 403 Forbidden - Account Locked:
104
+ ```json
105
+ {
106
+ "error": "ACCOUNT_LOCKED",
107
+ "message": "Account temporarily locked due to multiple failed login attempts",
108
+ "lockUntil": "2025-12-07T10:15:00Z",
109
+ "timestamp": "2025-12-07T10:00:00Z"
110
+ }
111
+ ```
112
+
113
+ 403 Forbidden - Account Suspended:
114
+ ```json
115
+ {
116
+ "error": "ACCOUNT_SUSPENDED",
117
+ "message": "Account has been suspended. Contact support for assistance",
118
+ "timestamp": "2025-12-07T10:00:00Z"
119
+ }
120
+ ```
121
+
122
+ 400 Bad Request - Validation Error:
123
+ ```json
124
+ {
125
+ "error": "VALIDATION_ERROR",
126
+ "message": "Request validation failed",
127
+ "details": [
128
+ {"field": "email", "issue": "Invalid email format"},
129
+ {"field": "password", "issue": "Password is required"}
130
+ ],
131
+ "timestamp": "2025-12-07T10:00:00Z"
132
+ }
133
+ ```
134
+
135
+ ### POST /api/auth/refresh
136
+
137
+ Request:
138
+ ```json
139
+ {
140
+ "refreshToken": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9..."
141
+ }
142
+ ```
143
+
144
+ Success Response (200 OK):
145
+ ```json
146
+ {
147
+ "accessToken": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...",
148
+ "expiresIn": 86400,
149
+ "tokenType": "Bearer"
150
+ }
151
+ ```
152
+
153
+ ### POST /api/auth/logout
154
+
155
+ Request:
156
+ ```
157
+ Headers:
158
+ Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...
159
+ ```
160
+
161
+ Success Response (204 No Content)
162
+
163
+ ## Constraints
164
+
165
+ ### Technical Constraints
166
+ - Backend: Node.js 20+ with Express.js 4.18+
167
+ - Database: PostgreSQL 15+ for user credentials and session storage
168
+ - Authentication: JWT with RS256 algorithm (RSA public/private key pair)
169
+ - Password Hashing: bcrypt with salt rounds 12
170
+ - Token Storage: Redis 7+ for refresh token blacklist and rate limiting
171
+
172
+ ### Business Constraints
173
+ - Session Timeout: 24 hours for standard users, 1 hour for admin users
174
+ - Password Policy:
175
+ - Minimum 8 characters
176
+ - At least 1 uppercase letter
177
+ - At least 1 lowercase letter
178
+ - At least 1 number
179
+ - At least 1 special character (!@#$%^&*)
180
+ - Login Attempt Limit: 5 failures trigger 15-minute account lockout
181
+ - Password Rotation: Required every 90 days for compliance
182
+ - Concurrent Sessions: Maximum 3 active sessions per user
183
+
184
+ ### Security Constraints
185
+ - OWASP Authentication Cheat Sheet compliance
186
+ - TLS 1.3 required for all authentication endpoints
187
+ - Rate Limiting: 10 login attempts per minute per IP address
188
+ - CORS: Whitelist approved frontend domains only
189
+ - Token Rotation: Access token 24h, refresh token 7 days
190
+
191
+ ## Success Criteria
192
+
193
+ ### Functional Criteria
194
+ - All EARS requirements implemented and verified
195
+ - All API endpoints return correct status codes and response schemas
196
+ - Test coverage >= 85% for authentication module
197
+ - All test scenarios pass with expected results
198
+
199
+ ### Performance Criteria
200
+ - Login endpoint response time P95 < 200ms
201
+ - Token generation time < 50ms
202
+ - Password hashing time < 500ms
203
+ - Refresh token endpoint P95 < 100ms
204
+ - Concurrent login throughput >= 100 requests/second
205
+
206
+ ### Security Criteria
207
+ - OWASP Top 10 vulnerabilities absent (verified by OWASP ZAP scan)
208
+ - No SQL injection vulnerabilities (verified by SQLMap)
209
+ - No plaintext passwords in database (verified by audit)
210
+ - All sensitive data encrypted at rest and in transit
211
+ - Security headers present (HSTS, CSP, X-Frame-Options)
212
+
213
+ ## Test Scenarios
214
+
215
+ | ID | Category | Scenario | Input | Expected | Status |
216
+ |---|---|---|---|---|---|
217
+ | TC-1 | Normal | Valid login | email+password | JWT tokens, 200 | Pending |
218
+ | TC-2 | Normal | Token refresh | valid refresh token | new access token, 200 | Pending |
219
+ | TC-3 | Normal | Logout | valid access token | session invalidated, 204 | Pending |
220
+ | TC-4 | Error | Invalid password | wrong password | 401 error | Pending |
221
+ | TC-5 | Error | Nonexistent user | unknown email | 401 error | Pending |
222
+ | TC-6 | Error | Empty email | empty string | 400 error | Pending |
223
+ | TC-7 | Error | Invalid email format | "notanemail" | 400 error | Pending |
224
+ | TC-8 | Error | Expired access token | expired token | 401 error | Pending |
225
+ | TC-9 | Error | Revoked refresh token | blacklisted token | 401 error | Pending |
226
+ | TC-10 | State | Suspended account | valid credentials | 403 error | Pending |
227
+ | TC-11 | State | Deleted account | valid credentials | 403 error | Pending |
228
+ | TC-12 | State | Account lockout | 5 failed attempts | 403 error, locked 15min | Pending |
229
+ | TC-13 | State | Lockout expiry | after 15min wait | login succeeds | Pending |
230
+ | TC-14 | Security | SQL injection | ' OR '1'='1 | 400 error, blocked | Pending |
231
+ | TC-15 | Security | XSS in password | <script>alert(1)</script> | sanitized, blocked | Pending |
232
+ | TC-16 | Security | Rate limit | 11 requests/min | 429 error | Pending |
233
+ | TC-17 | Performance | Concurrent logins | 100 req/sec | < 200ms P95 | Pending |
234
+ | TC-18 | Performance | Token refresh load | 500 req/sec | < 100ms P95 | Pending |
235
+
236
+ ## Implementation Notes
237
+
238
+ ### Database Schema
239
+
240
+ ```sql
241
+ CREATE TABLE users (
242
+ id SERIAL PRIMARY KEY,
243
+ email VARCHAR(255) UNIQUE NOT NULL,
244
+ password_hash VARCHAR(255) NOT NULL,
245
+ role VARCHAR(50) DEFAULT 'user',
246
+ account_status VARCHAR(50) DEFAULT 'active',
247
+ failed_login_attempts INT DEFAULT 0,
248
+ locked_until TIMESTAMP NULL,
249
+ last_password_change TIMESTAMP DEFAULT NOW(),
250
+ created_at TIMESTAMP DEFAULT NOW(),
251
+ updated_at TIMESTAMP DEFAULT NOW()
252
+ );
253
+
254
+ CREATE INDEX idx_users_email ON users(email);
255
+ CREATE INDEX idx_users_status ON users(account_status);
256
+ ```
257
+
258
+ ### Redis Schema
259
+
260
+ ```
261
+ # Refresh token blacklist (for logout)
262
+ Key: blacklist:{refresh_token_jti}
263
+ Value: user_id
264
+ TTL: refresh_token_expiry
265
+
266
+ # Rate limiting
267
+ Key: ratelimit:login:{ip_address}
268
+ Value: attempt_count
269
+ TTL: 60 seconds
270
+
271
+ # Login failure tracking
272
+ Key: loginfail:{user_id}
273
+ Value: {attempts, locked_until}
274
+ TTL: 900 seconds (15 minutes)
275
+ ```
276
+
277
+ ### Environment Variables
278
+
279
+ ```bash
280
+ # JWT Configuration
281
+ JWT_ACCESS_SECRET=<RSA_PRIVATE_KEY>
282
+ JWT_REFRESH_SECRET=<RSA_PRIVATE_KEY>
283
+ JWT_ACCESS_EXPIRY=24h
284
+ JWT_REFRESH_EXPIRY=7d
285
+
286
+ # Database
287
+ DATABASE_URL=postgresql://user:pass@localhost:5432/dbname
288
+
289
+ # Redis
290
+ REDIS_URL=redis://localhost:6379
291
+
292
+ # Security
293
+ BCRYPT_SALT_ROUNDS=12
294
+ RATE_LIMIT_WINDOW=60
295
+ RATE_LIMIT_MAX_REQUESTS=10
296
+ ```
297
+
298
+ ## Migration Plan
299
+
300
+ 1. Create database tables and indexes
301
+ 2. Set up Redis for session management
302
+ 3. Generate RSA key pair for JWT signing
303
+ 4. Implement password hashing utility
304
+ 5. Implement JWT generation and validation
305
+ 6. Implement login endpoint with validation
306
+ 7. Implement token refresh endpoint
307
+ 8. Implement logout with token blacklist
308
+ 9. Add rate limiting middleware
309
+ 10. Add security headers middleware
310
+ 11. Write unit tests (target 85% coverage)
311
+ 12. Write integration tests for API endpoints
312
+ 13. Run security audit (OWASP ZAP, SQLMap)
313
+ 14. Performance testing (load test with 100 req/sec)
314
+ 15. Documentation generation
315
+
316
+ ## References
317
+
318
+ - OWASP Authentication Cheat Sheet: https://cheatsheetseries.owasp.org/cheatsheets/Authentication_Cheat_Sheet.html
319
+ - JWT RFC 7519: https://tools.ietf.org/html/rfc7519
320
+ - bcrypt Algorithm: https://en.wikipedia.org/wiki/Bcrypt
321
+ - Redis Best Practices: https://redis.io/docs/manual/
322
+ ```
323
+
324
+ ---
325
+
326
+ ## Example 2: Payment Processing API (Complex Workflow)
327
+
328
+ ```markdown
329
+ # SPEC-005: Payment Processing Workflow
330
+
331
+ Created: 2025-12-07
332
+ Status: Planned
333
+ Priority: High
334
+ Assigned: manager-tdd
335
+ Related SPECs: SPEC-003 (Order Management), SPEC-006 (Refund System)
336
+ Epic: EPIC-PAYMENT
337
+ Estimated Effort: 16 hours
338
+ Labels: backend, payment, critical, workflow
339
+ Version: 1.0.0
340
+
341
+ ## Description
342
+
343
+ Process payment for orders with comprehensive error handling, rollback mechanisms, and third-party payment gateway integration (Stripe, PayPal). Implements idempotent payment processing with precondition validation and multi-step side effect management.
344
+
345
+ ### Preconditions
346
+ 1. Order must exist in "pending_payment" status
347
+ 2. Payment method must be registered and validated
348
+ 3. User account balance sufficient for payment amount
349
+ 4. All order items must be in stock and purchasable
350
+ 5. Order total must match payment amount (fraud prevention)
351
+
352
+ ### Side Effects
353
+ 1. Deduct payment amount from user account or charge payment method
354
+ 2. Update order status from "pending_payment" to "paid"
355
+ 3. Create payment record in payment_transactions table
356
+ 4. Create refund eligibility record (policy: 30 days)
357
+ 5. Add order to fulfillment queue for shipping
358
+ 6. Send notification to seller
359
+ 7. Send confirmation email to buyer
360
+ 8. Generate invoice PDF and store in object storage
361
+ 9. Update inventory levels for purchased items
362
+ 10. Create accounting journal entry for revenue recognition
363
+
364
+ ## Requirements
365
+
366
+ ### Ubiquitous
367
+ - 시스템은 항상 결제 시도를 감사 로그에 기록해야 한다 (user_id, order_id, amount, timestamp, result)
368
+ - 시스템은 항상 결제 금액과 주문 금액의 일치를 검증해야 한다
369
+ - 시스템은 항상 idempotency key를 검증하여 중복 결제를 방지해야 한다
370
+
371
+ ### Event-Driven
372
+ - WHEN 결제 요청이 수신되면 THEN 모든 사전 조건을 검증한다
373
+ - WHEN 사전 조건 검증이 통과하면 THEN 결제 게이트웨이를 호출한다
374
+ - WHEN 결제가 성공하면 THEN 모든 부작용을 순차적으로 실행한다
375
+ - WHEN 부작용 실행 중 오류가 발생하면 THEN 롤백 프로세스를 시작한다
376
+ - WHEN 결제가 완료되면 THEN 구매자와 판매자에게 알림을 전송한다
377
+
378
+ ### State-Driven
379
+ - IF 주문 상태가 "pending_payment"이면 THEN 결제를 허용한다
380
+ - IF 주문 상태가 "paid", "cancelled", "refunded"이면 THEN 결제를 거부한다
381
+ - IF 재고가 충분하면 THEN 결제를 진행한다
382
+ - IF 재고가 부족하면 THEN 결제를 거부하고 주문을 취소한다
383
+ - IF 동일한 idempotency key로 이전 결제가 있으면 THEN 이전 결과를 반환한다
384
+
385
+ ### Unwanted
386
+ - 시스템은 사전 조건 검증 없이 결제를 처리하지 않아야 한다
387
+ - 시스템은 중복 결제를 허용하지 않아야 한다 (idempotency 보장)
388
+ - 시스템은 결제 실패 시 부분적인 부작용 실행을 허용하지 않아야 한다 (원자성 보장)
389
+ - 시스템은 민감한 결제 정보(카드 번호, CVV)를 저장하지 않아야 한다 (PCI DSS 준수)
390
+
391
+ ### Optional
392
+ - 가능하면 결제 시 할인 쿠폰 적용을 지원한다
393
+ - 가능하면 포인트 적립 및 사용을 지원한다
394
+ - 가능하면 무이자 할부 옵션을 제공한다
395
+
396
+ ## API Specification
397
+
398
+ ### POST /api/orders/{orderId}/payment
399
+
400
+ Request:
401
+ ```json
402
+ {
403
+ "paymentMethodId": "pm_visa_1234",
404
+ "amount": {
405
+ "value": 149900,
406
+ "currency": "KRW"
407
+ },
408
+ "captureFullAmount": true,
409
+ "idempotencyKey": "order_123_payment_1",
410
+ "metadata": {
411
+ "couponCode": "WELCOME10",
412
+ "usePoints": 1000
413
+ }
414
+ }
415
+ ```
416
+
417
+ Success Response (200 OK):
418
+ ```json
419
+ {
420
+ "orderId": "order_123abc",
421
+ "paymentId": "payment_456def",
422
+ "status": "paid",
423
+ "amount": {
424
+ "value": 149900,
425
+ "currency": "KRW",
426
+ "paid": 148900,
427
+ "discount": 1000
428
+ },
429
+ "paymentMethod": {
430
+ "id": "pm_visa_1234",
431
+ "type": "card",
432
+ "last4": "4242",
433
+ "brand": "visa"
434
+ },
435
+ "transactions": [
436
+ {
437
+ "id": "txn_789ghi",
438
+ "type": "payment",
439
+ "amount": 148900,
440
+ "status": "succeeded",
441
+ "gateway": "stripe",
442
+ "gatewayTransactionId": "ch_1ABC2DEF3GHI",
443
+ "createdAt": "2025-12-07T10:00:00Z"
444
+ }
445
+ ],
446
+ "refundPolicy": {
447
+ "eligible": true,
448
+ "expiresAt": "2026-01-06T10:00:00Z"
449
+ },
450
+ "invoice": {
451
+ "id": "inv_2025_001234",
452
+ "url": "https://cdn.example.com/invoices/inv_2025_001234.pdf"
453
+ },
454
+ "createdAt": "2025-12-07T10:00:00Z"
455
+ }
456
+ ```
457
+
458
+ Error Responses:
459
+
460
+ 400 Bad Request - Precondition Failed:
461
+ ```json
462
+ {
463
+ "error": "PRECONDITION_FAILED",
464
+ "message": "Payment cannot be processed due to failed preconditions",
465
+ "details": [
466
+ {"check": "order_status", "expected": "pending_payment", "actual": "paid"},
467
+ {"check": "inventory", "expected": "available", "actual": "out_of_stock"}
468
+ ]
469
+ }
470
+ ```
471
+
472
+ 402 Payment Required - Insufficient Funds:
473
+ ```json
474
+ {
475
+ "error": "INSUFFICIENT_FUNDS",
476
+ "message": "Payment method has insufficient funds",
477
+ "required": 149900,
478
+ "available": 100000
479
+ }
480
+ ```
481
+
482
+ 409 Conflict - Duplicate Payment:
483
+ ```json
484
+ {
485
+ "error": "DUPLICATE_PAYMENT",
486
+ "message": "Payment with this idempotency key already processed",
487
+ "originalPaymentId": "payment_456def",
488
+ "originalPayment": { /* original payment response */ }
489
+ }
490
+ ```
491
+
492
+ ## Constraints
493
+
494
+ ### Technical Constraints
495
+ - Backend: Node.js 20+ with NestJS framework
496
+ - Database: PostgreSQL 15+ with transaction support
497
+ - Payment Gateways: Stripe, PayPal SDK integration
498
+ - Message Queue: RabbitMQ for async notifications and fulfillment
499
+ - Object Storage: AWS S3 for invoice PDFs
500
+
501
+ ### Business Constraints
502
+ - Payment Gateway Fees: 2.9% + $0.30 per transaction (Stripe)
503
+ - Transaction Timeout: 30 seconds maximum processing time
504
+ - Refund Window: 30 days from payment date
505
+ - Maximum Transaction: $10,000 per payment
506
+ - Daily Limit: $50,000 per user account
507
+
508
+ ### Security Constraints
509
+ - PCI DSS Level 1 compliance (no card data storage)
510
+ - TLS 1.3 required for all payment endpoints
511
+ - Rate Limiting: 10 payment attempts per hour per user
512
+ - 3D Secure authentication for high-value transactions (> $500)
513
+ - Fraud detection: Block suspicious patterns (velocity, geography)
514
+
515
+ ## Success Criteria
516
+
517
+ ### Functional Criteria
518
+ - All preconditions validated before payment processing
519
+ - All side effects executed in correct order
520
+ - Rollback mechanism tested for all failure points
521
+ - Idempotency verified with duplicate requests
522
+ - Test coverage >= 90% for payment module
523
+
524
+ ### Performance Criteria
525
+ - Payment processing P95 < 2000ms (includes gateway roundtrip)
526
+ - Precondition validation < 200ms
527
+ - Side effect execution < 500ms per step
528
+ - Rollback execution < 1000ms
529
+
530
+ ### Security Criteria
531
+ - PCI DSS compliance verified by QSA audit
532
+ - No sensitive payment data in logs or database
533
+ - All transactions encrypted end-to-end
534
+ - Fraud detection catches 99% of known attack patterns
535
+
536
+ ## Test Scenarios
537
+
538
+ | ID | Category | Scenario | Input | Expected | Status |
539
+ |---|---|---|---|---|---|
540
+ | TC-1 | Normal | Valid payment | valid order+payment | payment succeeds, 200 | Pending |
541
+ | TC-2 | Normal | Payment with coupon | coupon code | discount applied | Pending |
542
+ | TC-3 | Normal | Idempotent retry | same idempotency key | same result, 200 | Pending |
543
+ | TC-4 | Error | Order not pending | paid order | 400 precondition failed | Pending |
544
+ | TC-5 | Error | Insufficient stock | out of stock item | 400 precondition failed | Pending |
545
+ | TC-6 | Error | Amount mismatch | wrong amount | 400 validation error | Pending |
546
+ | TC-7 | Error | Insufficient funds | balance too low | 402 payment required | Pending |
547
+ | TC-8 | Error | Gateway timeout | slow gateway | 504 gateway timeout | Pending |
548
+ | TC-9 | Rollback | Side effect failure | DB error | payment rolled back | Pending |
549
+ | TC-10 | Rollback | Gateway decline | card declined | no side effects | Pending |
550
+ | TC-11 | Security | PCI data exposure | card number | masked, not stored | Pending |
551
+ | TC-12 | Security | Rate limit | 11 payments/hour | 429 too many requests | Pending |
552
+ | TC-13 | Performance | Concurrent payments | 50 req/sec | < 2000ms P95 | Pending |
553
+
554
+ ## Rollback Strategy
555
+
556
+ ### Rollback Triggers
557
+ - Payment gateway returns decline or error
558
+ - Database transaction fails during side effects
559
+ - Notification service unavailable (optional, compensate later)
560
+ - Inventory update fails (race condition)
561
+
562
+ ### Rollback Steps
563
+ 1. If payment charged: Initiate automatic refund via gateway
564
+ 2. Revert order status to "pending_payment"
565
+ 3. Delete payment transaction record
566
+ 4. Restore inventory levels if decremented
567
+ 5. Remove from fulfillment queue if added
568
+ 6. Log rollback event with full context
569
+ 7. Notify user of payment failure
570
+
571
+ ### Compensating Transactions
572
+ - Async notifications: Retry with exponential backoff (not rollback trigger)
573
+ - Email delivery: Queue for retry, not critical path
574
+ - Invoice generation: Regenerate on-demand, not rollback trigger
575
+
576
+ ## Implementation Notes
577
+
578
+ ### Database Schema
579
+
580
+ ```sql
581
+ CREATE TABLE payment_transactions (
582
+ id SERIAL PRIMARY KEY,
583
+ order_id INT REFERENCES orders(id),
584
+ user_id INT REFERENCES users(id),
585
+ amount INT NOT NULL,
586
+ currency VARCHAR(3) DEFAULT 'KRW',
587
+ status VARCHAR(50) NOT NULL,
588
+ gateway VARCHAR(50) NOT NULL,
589
+ gateway_transaction_id VARCHAR(255),
590
+ idempotency_key VARCHAR(255) UNIQUE,
591
+ payment_method_id VARCHAR(255),
592
+ created_at TIMESTAMP DEFAULT NOW(),
593
+ updated_at TIMESTAMP DEFAULT NOW()
594
+ );
595
+
596
+ CREATE INDEX idx_payments_order ON payment_transactions(order_id);
597
+ CREATE INDEX idx_payments_idempotency ON payment_transactions(idempotency_key);
598
+ ```
599
+
600
+ ### State Machine
601
+
602
+ ```
603
+ pending_payment → [precondition check] → validating
604
+ validating → [gateway call] → processing
605
+ processing → [success] → paid
606
+ processing → [failure] → failed → [rollback] → pending_payment
607
+ paid → [refund request] → refunding → refunded
608
+ ```
609
+ ```
610
+
611
+ ---
612
+
613
+ ## Example 3: React Component Library (Frontend)
614
+
615
+ ```markdown
616
+ # SPEC-010: Reusable Button Component Library
617
+
618
+ Created: 2025-12-07
619
+ Status: Planned
620
+ Priority: Medium
621
+ Assigned: expert-frontend
622
+ Related SPECs: SPEC-011 (Design System), SPEC-012 (Accessibility)
623
+ Epic: EPIC-UI
624
+ Estimated Effort: 4 hours
625
+ Labels: frontend, react, ui, component
626
+ Version: 1.0.0
627
+
628
+ ## Description
629
+
630
+ Create comprehensive, accessible button component library for React 19 with TypeScript. Supports multiple variants (primary, secondary, outline, ghost), sizes (small, medium, large), states (default, hover, active, disabled, loading), and full WCAG 2.1 AA accessibility compliance.
631
+
632
+ ## Requirements
633
+
634
+ ### Ubiquitous
635
+ - 시스템은 항상 WCAG 2.1 AA 접근성 기준을 준수해야 한다
636
+ - 시스템은 항상 TypeScript 타입 안정성을 보장해야 한다
637
+ - 시스템은 항상 적절한 ARIA 속성을 제공해야 한다
638
+
639
+ ### Event-Driven
640
+ - WHEN 버튼이 클릭되면 THEN onClick 핸들러를 실행한다
641
+ - WHEN 로딩 상태이면 THEN 클릭 이벤트를 차단한다
642
+ - WHEN 키보드 포커스를 받으면 THEN 포커스 링을 표시한다
643
+ - WHEN 비활성 상태이면 THEN 모든 인터랙션을 차단한다
644
+
645
+ ### State-Driven
646
+ - IF variant가 "primary"이면 THEN 브랜드 색상 스타일을 적용한다
647
+ - IF variant가 "outline"이면 THEN 테두리 스타일을 적용한다
648
+ - IF size가 "small"이면 THEN 작은 패딩과 폰트 크기를 적용한다
649
+ - IF isLoading이 true이면 THEN 스피너를 표시하고 텍스트를 숨긴다
650
+
651
+ ### Unwanted
652
+ - 시스템은 비활성 버튼의 클릭 이벤트를 발생시키지 않아야 한다
653
+ - 시스템은 접근성 속성 없이 버튼을 렌더링하지 않아야 한다
654
+ - 시스템은 키보드 내비게이션을 차단하지 않아야 한다
655
+
656
+ ### Optional
657
+ - 가능하면 아이콘 버튼 변형을 제공한다
658
+ - 가능하면 버튼 그룹 컴포넌트를 제공한다
659
+ - 가능하면 다크 모드 자동 지원을 제공한다
660
+
661
+ ## Component API
662
+
663
+ ### Props Interface
664
+
665
+ ```typescript
666
+ interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {
667
+ // Variant
668
+ variant?: 'primary' | 'secondary' | 'outline' | 'ghost' | 'danger';
669
+
670
+ // Size
671
+ size?: 'small' | 'medium' | 'large';
672
+
673
+ // States
674
+ isLoading?: boolean;
675
+ isDisabled?: boolean;
676
+ isFullWidth?: boolean;
677
+
678
+ // Content
679
+ children: React.ReactNode;
680
+ leftIcon?: React.ReactNode;
681
+ rightIcon?: React.ReactNode;
682
+
683
+ // Accessibility
684
+ ariaLabel?: string;
685
+ ariaDescribedBy?: string;
686
+
687
+ // Events
688
+ onClick?: (event: React.MouseEvent<HTMLButtonElement>) => void;
689
+
690
+ // Styling
691
+ className?: string;
692
+ style?: React.CSSProperties;
693
+ }
694
+ ```
695
+
696
+ ### Usage Examples
697
+
698
+ ```tsx
699
+ // Basic primary button
700
+ <Button variant="primary" onClick={handleClick}>
701
+ Click Me
702
+ </Button>
703
+
704
+ // Loading state
705
+ <Button variant="primary" isLoading>
706
+ Processing...
707
+ </Button>
708
+
709
+ // With icons
710
+ <Button variant="secondary" leftIcon={<Icon name="plus" />}>
711
+ Add Item
712
+ </Button>
713
+
714
+ // Disabled state
715
+ <Button variant="outline" isDisabled>
716
+ Unavailable
717
+ </Button>
718
+
719
+ // Full width
720
+ <Button variant="primary" isFullWidth>
721
+ Submit Form
722
+ </Button>
723
+
724
+ // Custom accessibility
725
+ <Button
726
+ variant="danger"
727
+ ariaLabel="Delete user account permanently"
728
+ ariaDescribedBy="delete-warning"
729
+ >
730
+ Delete Account
731
+ </Button>
732
+ ```
733
+
734
+ ## Constraints
735
+
736
+ ### Technical Constraints
737
+ - React: 19+ with React Server Components support
738
+ - TypeScript: 5.3+ with strict mode
739
+ - Styling: Tailwind CSS 4+ or CSS Modules
740
+ - Build: Vite 5+ for fast HMR
741
+ - Testing: Vitest + React Testing Library
742
+
743
+ ### Design Constraints
744
+ - Color Palette: Must use design system tokens
745
+ - Typography: Inter font family, variable sizes
746
+ - Spacing: 4px grid system (padding: 8px, 12px, 16px)
747
+ - Border Radius: 6px for medium, 4px for small, 8px for large
748
+ - Transition: 150ms ease-in-out for all state changes
749
+
750
+ ### Accessibility Constraints
751
+ - WCAG 2.1 AA compliance mandatory
752
+ - Color contrast ratio >= 4.5:1 for text
753
+ - Focus indicator visible and distinct (2px outline)
754
+ - Keyboard navigation full support (Tab, Enter, Space)
755
+ - Screen reader friendly with proper ARIA labels
756
+
757
+ ## Success Criteria
758
+
759
+ ### Functional Criteria
760
+ - All variants render correctly
761
+ - All sizes apply correct styles
762
+ - Loading and disabled states work as expected
763
+ - Event handlers execute correctly
764
+ - Icons render in correct positions
765
+
766
+ ### Accessibility Criteria
767
+ - Passes axe-core automated accessibility audit
768
+ - Keyboard navigation works for all interactions
769
+ - Screen reader announces button purpose and state
770
+ - Color contrast meets WCAG AA requirements
771
+ - Focus indicators clearly visible
772
+
773
+ ### Quality Criteria
774
+ - Test coverage >= 90% for component
775
+ - TypeScript strict mode with no errors
776
+ - Bundle size < 5KB (gzipped)
777
+ - Render performance < 16ms (60fps)
778
+ - Storybook documentation complete
779
+
780
+ ## Test Scenarios
781
+
782
+ | ID | Category | Scenario | Input | Expected | Status |
783
+ |---|---|---|---|---|---|
784
+ | TC-1 | Render | Primary variant | variant="primary" | blue bg, white text | Pending |
785
+ | TC-2 | Render | Small size | size="small" | 8px padding, 14px font | Pending |
786
+ | TC-3 | State | Loading | isLoading=true | spinner visible, text hidden | Pending |
787
+ | TC-4 | State | Disabled | isDisabled=true | gray bg, no click | Pending |
788
+ | TC-5 | Event | Click handler | onClick={fn} | function called on click | Pending |
789
+ | TC-6 | Event | Disabled click | isDisabled + click | function not called | Pending |
790
+ | TC-7 | A11y | Keyboard focus | Tab key | focus ring visible | Pending |
791
+ | TC-8 | A11y | Enter key | Enter key | onClick called | Pending |
792
+ | TC-9 | A11y | Space key | Space key | onClick called | Pending |
793
+ | TC-10 | A11y | ARIA label | ariaLabel prop | screen reader announces | Pending |
794
+ | TC-11 | A11y | Color contrast | all variants | ratio >= 4.5:1 | Pending |
795
+ | TC-12 | Icon | Left icon | leftIcon prop | icon before text | Pending |
796
+ | TC-13 | Icon | Right icon | rightIcon prop | icon after text | Pending |
797
+
798
+ ## Implementation Notes
799
+
800
+ ### File Structure
801
+
802
+ ```
803
+ src/components/Button/
804
+ ├── Button.tsx # Main component
805
+ ├── Button.styles.ts # Styled components or CSS modules
806
+ ├── Button.types.ts # TypeScript interfaces
807
+ ├── Button.test.tsx # Unit tests
808
+ ├── Button.stories.tsx # Storybook stories
809
+ ├── Button.spec.cy.tsx # Cypress component tests
810
+ └── index.ts # Public exports
811
+ ```
812
+
813
+ ### Style Variants (Tailwind)
814
+
815
+ ```typescript
816
+ const variantStyles = {
817
+ primary: 'bg-blue-600 text-white hover:bg-blue-700 active:bg-blue-800',
818
+ secondary: 'bg-gray-200 text-gray-900 hover:bg-gray-300 active:bg-gray-400',
819
+ outline: 'border-2 border-blue-600 text-blue-600 hover:bg-blue-50',
820
+ ghost: 'text-blue-600 hover:bg-blue-50 active:bg-blue-100',
821
+ danger: 'bg-red-600 text-white hover:bg-red-700 active:bg-red-800'
822
+ };
823
+
824
+ const sizeStyles = {
825
+ small: 'px-3 py-1.5 text-sm',
826
+ medium: 'px-4 py-2 text-base',
827
+ large: 'px-6 py-3 text-lg'
828
+ };
829
+
830
+ const baseStyles = 'inline-flex items-center justify-center font-medium rounded-md transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2 disabled:opacity-50 disabled:cursor-not-allowed';
831
+ ```
832
+
833
+ ### Accessibility Implementation
834
+
835
+ ```tsx
836
+ <button
837
+ type="button"
838
+ disabled={isDisabled || isLoading}
839
+ aria-label={ariaLabel}
840
+ aria-describedby={ariaDescribedBy}
841
+ aria-busy={isLoading}
842
+ className={cn(baseStyles, variantStyles[variant], sizeStyles[size])}
843
+ onClick={handleClick}
844
+ {...props}
845
+ >
846
+ {leftIcon && <span className="mr-2">{leftIcon}</span>}
847
+ {isLoading ? <Spinner /> : children}
848
+ {rightIcon && <span className="ml-2">{rightIcon}</span>}
849
+ </button>
850
+ ```
851
+
852
+ ## Storybook Stories
853
+
854
+ ```tsx
855
+ export default {
856
+ title: 'Components/Button',
857
+ component: Button,
858
+ argTypes: {
859
+ variant: {
860
+ control: 'select',
861
+ options: ['primary', 'secondary', 'outline', 'ghost', 'danger']
862
+ },
863
+ size: {
864
+ control: 'select',
865
+ options: ['small', 'medium', 'large']
866
+ }
867
+ }
868
+ };
869
+
870
+ export const AllVariants = () => (
871
+ <div className="space-x-2">
872
+ <Button variant="primary">Primary</Button>
873
+ <Button variant="secondary">Secondary</Button>
874
+ <Button variant="outline">Outline</Button>
875
+ <Button variant="ghost">Ghost</Button>
876
+ <Button variant="danger">Danger</Button>
877
+ </div>
878
+ );
879
+
880
+ export const AllSizes = () => (
881
+ <div className="space-x-2">
882
+ <Button size="small">Small</Button>
883
+ <Button size="medium">Medium</Button>
884
+ <Button size="large">Large</Button>
885
+ </div>
886
+ );
887
+
888
+ export const LoadingStates = () => (
889
+ <div className="space-x-2">
890
+ <Button variant="primary" isLoading>Loading</Button>
891
+ <Button variant="secondary" isLoading>Processing</Button>
892
+ </div>
893
+ );
894
+ ```
895
+ ```
896
+
897
+ ---
898
+
899
+ Version: 1.0.0
900
+ Last Updated: 2025-12-07