moai-adk 0.10.1__py3-none-any.whl → 0.11.0__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 (245) hide show
  1. moai_adk/core/project/phase_executor.py +4 -0
  2. moai_adk/core/tags/ci_validator.py +33 -3
  3. moai_adk/core/template_engine.py +6 -2
  4. moai_adk/templates/.github/workflows/moai-gitflow.yml +6 -1
  5. moai_adk/templates/.github/workflows/release.yml +6 -2
  6. moai_adk/templates/.github/workflows/tag-validation.yml +53 -8
  7. moai_adk/templates/CLAUDE.md +458 -67
  8. {moai_adk-0.10.1.dist-info → moai_adk-0.11.0.dist-info}/METADATA +28 -13
  9. moai_adk-0.11.0.dist-info/RECORD +77 -0
  10. moai_adk/templates/.claude/agents/alfred/cc-manager.md +0 -316
  11. moai_adk/templates/.claude/agents/alfred/debug-helper.md +0 -208
  12. moai_adk/templates/.claude/agents/alfred/doc-syncer.md +0 -214
  13. moai_adk/templates/.claude/agents/alfred/git-manager.md +0 -406
  14. moai_adk/templates/.claude/agents/alfred/implementation-planner.md +0 -350
  15. moai_adk/templates/.claude/agents/alfred/project-manager.md +0 -273
  16. moai_adk/templates/.claude/agents/alfred/quality-gate.md +0 -343
  17. moai_adk/templates/.claude/agents/alfred/skill-factory.md +0 -865
  18. moai_adk/templates/.claude/agents/alfred/spec-builder.md +0 -287
  19. moai_adk/templates/.claude/agents/alfred/tag-agent.md +0 -287
  20. moai_adk/templates/.claude/agents/alfred/tdd-implementer.md +0 -326
  21. moai_adk/templates/.claude/agents/alfred/trust-checker.md +0 -375
  22. moai_adk/templates/.claude/commands/alfred/0-project.md +0 -1189
  23. moai_adk/templates/.claude/commands/alfred/1-plan.md +0 -728
  24. moai_adk/templates/.claude/commands/alfred/2-run.md +0 -545
  25. moai_adk/templates/.claude/commands/alfred/3-sync.md +0 -683
  26. moai_adk/templates/.claude/commands/alfred/9-feedback.md +0 -149
  27. moai_adk/templates/.claude/hooks/alfred/alfred_hooks.py +0 -209
  28. moai_adk/templates/.claude/hooks/alfred/core/project.py +0 -750
  29. moai_adk/templates/.claude/hooks/alfred/core/version_cache.py +0 -198
  30. moai_adk/templates/.claude/hooks/alfred/notification__handle_events.py +0 -102
  31. moai_adk/templates/.claude/hooks/alfred/post_tool__log_changes.py +0 -102
  32. moai_adk/templates/.claude/hooks/alfred/pre_tool__auto_checkpoint.py +0 -108
  33. moai_adk/templates/.claude/hooks/alfred/session_end__cleanup.py +0 -102
  34. moai_adk/templates/.claude/hooks/alfred/session_start__show_project_info.py +0 -102
  35. moai_adk/templates/.claude/hooks/alfred/shared/core/__init__.py +0 -170
  36. moai_adk/templates/.claude/hooks/alfred/shared/core/checkpoint.py +0 -271
  37. moai_adk/templates/.claude/hooks/alfred/shared/core/context.py +0 -67
  38. moai_adk/templates/.claude/hooks/alfred/shared/core/project.py +0 -756
  39. moai_adk/templates/.claude/hooks/alfred/shared/core/tags.py +0 -198
  40. moai_adk/templates/.claude/hooks/alfred/shared/core/version_cache.py +0 -198
  41. moai_adk/templates/.claude/hooks/alfred/shared/handlers/__init__.py +0 -21
  42. moai_adk/templates/.claude/hooks/alfred/shared/handlers/notification.py +0 -25
  43. moai_adk/templates/.claude/hooks/alfred/shared/handlers/session.py +0 -175
  44. moai_adk/templates/.claude/hooks/alfred/shared/handlers/tool.py +0 -90
  45. moai_adk/templates/.claude/hooks/alfred/shared/handlers/user.py +0 -61
  46. moai_adk/templates/.claude/hooks/alfred/stop__handle_interrupt.py +0 -102
  47. moai_adk/templates/.claude/hooks/alfred/subagent_stop__handle_subagent_end.py +0 -102
  48. moai_adk/templates/.claude/hooks/alfred/user_prompt__jit_load_docs.py +0 -120
  49. moai_adk/templates/.claude/output-styles/alfred/agentic-coding.md +0 -640
  50. moai_adk/templates/.claude/output-styles/alfred/moai-adk-learning.md +0 -696
  51. moai_adk/templates/.claude/output-styles/alfred/study-with-alfred.md +0 -474
  52. moai_adk/templates/.claude/settings.json +0 -144
  53. moai_adk/templates/.claude/skills/moai-alfred-ears-authoring/SKILL.md +0 -113
  54. moai_adk/templates/.claude/skills/moai-alfred-ears-authoring/examples.md +0 -29
  55. moai_adk/templates/.claude/skills/moai-alfred-ears-authoring/reference.md +0 -28
  56. moai_adk/templates/.claude/skills/moai-alfred-git-workflow/SKILL.md +0 -122
  57. moai_adk/templates/.claude/skills/moai-alfred-git-workflow/examples.md +0 -29
  58. moai_adk/templates/.claude/skills/moai-alfred-git-workflow/reference.md +0 -29
  59. moai_adk/templates/.claude/skills/moai-alfred-interactive-questions/SKILL.md +0 -237
  60. moai_adk/templates/.claude/skills/moai-alfred-interactive-questions/examples.md +0 -615
  61. moai_adk/templates/.claude/skills/moai-alfred-interactive-questions/reference.md +0 -653
  62. moai_adk/templates/.claude/skills/moai-alfred-language-detection/SKILL.md +0 -113
  63. moai_adk/templates/.claude/skills/moai-alfred-language-detection/examples.md +0 -29
  64. moai_adk/templates/.claude/skills/moai-alfred-language-detection/reference.md +0 -28
  65. moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-validation/SKILL.md +0 -113
  66. moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-validation/examples.md +0 -29
  67. moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-validation/reference.md +0 -28
  68. moai_adk/templates/.claude/skills/moai-alfred-tag-scanning/SKILL.md +0 -113
  69. moai_adk/templates/.claude/skills/moai-alfred-tag-scanning/examples.md +0 -29
  70. moai_adk/templates/.claude/skills/moai-alfred-tag-scanning/reference.md +0 -28
  71. moai_adk/templates/.claude/skills/moai-alfred-trust-validation/SKILL.md +0 -113
  72. moai_adk/templates/.claude/skills/moai-alfred-trust-validation/examples.md +0 -29
  73. moai_adk/templates/.claude/skills/moai-alfred-trust-validation/reference.md +0 -28
  74. moai_adk/templates/.claude/skills/moai-cc-agents/SKILL.md +0 -269
  75. moai_adk/templates/.claude/skills/moai-cc-agents/templates/agent-template.md +0 -32
  76. moai_adk/templates/.claude/skills/moai-cc-claude-md/SKILL.md +0 -298
  77. moai_adk/templates/.claude/skills/moai-cc-claude-md/templates/CLAUDE-template.md +0 -26
  78. moai_adk/templates/.claude/skills/moai-cc-commands/SKILL.md +0 -307
  79. moai_adk/templates/.claude/skills/moai-cc-commands/templates/command-template.md +0 -21
  80. moai_adk/templates/.claude/skills/moai-cc-hooks/SKILL.md +0 -252
  81. moai_adk/templates/.claude/skills/moai-cc-hooks/scripts/pre-bash-check.sh +0 -19
  82. moai_adk/templates/.claude/skills/moai-cc-hooks/scripts/preserve-permissions.sh +0 -19
  83. moai_adk/templates/.claude/skills/moai-cc-hooks/scripts/validate-bash-command.py +0 -24
  84. moai_adk/templates/.claude/skills/moai-cc-mcp-plugins/SKILL.md +0 -199
  85. moai_adk/templates/.claude/skills/moai-cc-mcp-plugins/templates/settings-mcp-template.json +0 -39
  86. moai_adk/templates/.claude/skills/moai-cc-memory/SKILL.md +0 -316
  87. moai_adk/templates/.claude/skills/moai-cc-memory/templates/session-summary-template.md +0 -18
  88. moai_adk/templates/.claude/skills/moai-cc-settings/SKILL.md +0 -263
  89. moai_adk/templates/.claude/skills/moai-cc-settings/templates/settings-complete-template.json +0 -30
  90. moai_adk/templates/.claude/skills/moai-cc-skills/SKILL.md +0 -291
  91. moai_adk/templates/.claude/skills/moai-cc-skills/templates/SKILL-template.md +0 -15
  92. moai_adk/templates/.claude/skills/moai-domain-backend/SKILL.md +0 -290
  93. moai_adk/templates/.claude/skills/moai-domain-backend/examples.md +0 -1633
  94. moai_adk/templates/.claude/skills/moai-domain-backend/reference.md +0 -660
  95. moai_adk/templates/.claude/skills/moai-domain-cli-tool/SKILL.md +0 -123
  96. moai_adk/templates/.claude/skills/moai-domain-cli-tool/examples.md +0 -29
  97. moai_adk/templates/.claude/skills/moai-domain-cli-tool/reference.md +0 -30
  98. moai_adk/templates/.claude/skills/moai-domain-data-science/SKILL.md +0 -123
  99. moai_adk/templates/.claude/skills/moai-domain-data-science/examples.md +0 -29
  100. moai_adk/templates/.claude/skills/moai-domain-data-science/reference.md +0 -30
  101. moai_adk/templates/.claude/skills/moai-domain-database/SKILL.md +0 -123
  102. moai_adk/templates/.claude/skills/moai-domain-database/examples.md +0 -29
  103. moai_adk/templates/.claude/skills/moai-domain-database/reference.md +0 -30
  104. moai_adk/templates/.claude/skills/moai-domain-devops/SKILL.md +0 -124
  105. moai_adk/templates/.claude/skills/moai-domain-devops/examples.md +0 -29
  106. moai_adk/templates/.claude/skills/moai-domain-devops/reference.md +0 -31
  107. moai_adk/templates/.claude/skills/moai-domain-frontend/SKILL.md +0 -124
  108. moai_adk/templates/.claude/skills/moai-domain-frontend/examples.md +0 -29
  109. moai_adk/templates/.claude/skills/moai-domain-frontend/reference.md +0 -31
  110. moai_adk/templates/.claude/skills/moai-domain-ml/SKILL.md +0 -123
  111. moai_adk/templates/.claude/skills/moai-domain-ml/examples.md +0 -29
  112. moai_adk/templates/.claude/skills/moai-domain-ml/reference.md +0 -30
  113. moai_adk/templates/.claude/skills/moai-domain-mobile-app/SKILL.md +0 -123
  114. moai_adk/templates/.claude/skills/moai-domain-mobile-app/examples.md +0 -29
  115. moai_adk/templates/.claude/skills/moai-domain-mobile-app/reference.md +0 -30
  116. moai_adk/templates/.claude/skills/moai-domain-security/SKILL.md +0 -123
  117. moai_adk/templates/.claude/skills/moai-domain-security/examples.md +0 -29
  118. moai_adk/templates/.claude/skills/moai-domain-security/reference.md +0 -30
  119. moai_adk/templates/.claude/skills/moai-domain-web-api/SKILL.md +0 -123
  120. moai_adk/templates/.claude/skills/moai-domain-web-api/examples.md +0 -29
  121. moai_adk/templates/.claude/skills/moai-domain-web-api/reference.md +0 -30
  122. moai_adk/templates/.claude/skills/moai-essentials-debug/SKILL.md +0 -303
  123. moai_adk/templates/.claude/skills/moai-essentials-debug/examples.md +0 -1064
  124. moai_adk/templates/.claude/skills/moai-essentials-debug/reference.md +0 -1047
  125. moai_adk/templates/.claude/skills/moai-essentials-perf/SKILL.md +0 -113
  126. moai_adk/templates/.claude/skills/moai-essentials-perf/examples.md +0 -29
  127. moai_adk/templates/.claude/skills/moai-essentials-perf/reference.md +0 -28
  128. moai_adk/templates/.claude/skills/moai-essentials-refactor/SKILL.md +0 -113
  129. moai_adk/templates/.claude/skills/moai-essentials-refactor/examples.md +0 -29
  130. moai_adk/templates/.claude/skills/moai-essentials-refactor/reference.md +0 -28
  131. moai_adk/templates/.claude/skills/moai-essentials-review/SKILL.md +0 -113
  132. moai_adk/templates/.claude/skills/moai-essentials-review/examples.md +0 -29
  133. moai_adk/templates/.claude/skills/moai-essentials-review/reference.md +0 -28
  134. moai_adk/templates/.claude/skills/moai-foundation-ears/SKILL.md +0 -116
  135. moai_adk/templates/.claude/skills/moai-foundation-ears/examples.md +0 -29
  136. moai_adk/templates/.claude/skills/moai-foundation-ears/reference.md +0 -28
  137. moai_adk/templates/.claude/skills/moai-foundation-git/SKILL.md +0 -122
  138. moai_adk/templates/.claude/skills/moai-foundation-git/examples.md +0 -29
  139. moai_adk/templates/.claude/skills/moai-foundation-git/reference.md +0 -29
  140. moai_adk/templates/.claude/skills/moai-foundation-langs/SKILL.md +0 -113
  141. moai_adk/templates/.claude/skills/moai-foundation-langs/examples.md +0 -29
  142. moai_adk/templates/.claude/skills/moai-foundation-langs/reference.md +0 -28
  143. moai_adk/templates/.claude/skills/moai-foundation-specs/SKILL.md +0 -113
  144. moai_adk/templates/.claude/skills/moai-foundation-specs/examples.md +0 -29
  145. moai_adk/templates/.claude/skills/moai-foundation-specs/reference.md +0 -28
  146. moai_adk/templates/.claude/skills/moai-foundation-tags/SKILL.md +0 -113
  147. moai_adk/templates/.claude/skills/moai-foundation-tags/examples.md +0 -29
  148. moai_adk/templates/.claude/skills/moai-foundation-tags/reference.md +0 -28
  149. moai_adk/templates/.claude/skills/moai-foundation-trust/SKILL.md +0 -307
  150. moai_adk/templates/.claude/skills/moai-foundation-trust/examples.md +0 -0
  151. moai_adk/templates/.claude/skills/moai-foundation-trust/reference.md +0 -1099
  152. moai_adk/templates/.claude/skills/moai-lang-c/SKILL.md +0 -124
  153. moai_adk/templates/.claude/skills/moai-lang-c/examples.md +0 -29
  154. moai_adk/templates/.claude/skills/moai-lang-c/reference.md +0 -31
  155. moai_adk/templates/.claude/skills/moai-lang-cpp/SKILL.md +0 -124
  156. moai_adk/templates/.claude/skills/moai-lang-cpp/examples.md +0 -29
  157. moai_adk/templates/.claude/skills/moai-lang-cpp/reference.md +0 -31
  158. moai_adk/templates/.claude/skills/moai-lang-csharp/SKILL.md +0 -123
  159. moai_adk/templates/.claude/skills/moai-lang-csharp/examples.md +0 -29
  160. moai_adk/templates/.claude/skills/moai-lang-csharp/reference.md +0 -30
  161. moai_adk/templates/.claude/skills/moai-lang-dart/SKILL.md +0 -123
  162. moai_adk/templates/.claude/skills/moai-lang-dart/examples.md +0 -29
  163. moai_adk/templates/.claude/skills/moai-lang-dart/reference.md +0 -30
  164. moai_adk/templates/.claude/skills/moai-lang-go/SKILL.md +0 -124
  165. moai_adk/templates/.claude/skills/moai-lang-go/examples.md +0 -29
  166. moai_adk/templates/.claude/skills/moai-lang-go/reference.md +0 -31
  167. moai_adk/templates/.claude/skills/moai-lang-java/SKILL.md +0 -124
  168. moai_adk/templates/.claude/skills/moai-lang-java/examples.md +0 -29
  169. moai_adk/templates/.claude/skills/moai-lang-java/reference.md +0 -31
  170. moai_adk/templates/.claude/skills/moai-lang-javascript/SKILL.md +0 -125
  171. moai_adk/templates/.claude/skills/moai-lang-javascript/examples.md +0 -29
  172. moai_adk/templates/.claude/skills/moai-lang-javascript/reference.md +0 -32
  173. moai_adk/templates/.claude/skills/moai-lang-kotlin/SKILL.md +0 -124
  174. moai_adk/templates/.claude/skills/moai-lang-kotlin/examples.md +0 -29
  175. moai_adk/templates/.claude/skills/moai-lang-kotlin/reference.md +0 -31
  176. moai_adk/templates/.claude/skills/moai-lang-php/SKILL.md +0 -123
  177. moai_adk/templates/.claude/skills/moai-lang-php/examples.md +0 -29
  178. moai_adk/templates/.claude/skills/moai-lang-php/reference.md +0 -30
  179. moai_adk/templates/.claude/skills/moai-lang-python/SKILL.md +0 -431
  180. moai_adk/templates/.claude/skills/moai-lang-python/examples.md +0 -624
  181. moai_adk/templates/.claude/skills/moai-lang-python/reference.md +0 -316
  182. moai_adk/templates/.claude/skills/moai-lang-r/SKILL.md +0 -123
  183. moai_adk/templates/.claude/skills/moai-lang-r/examples.md +0 -29
  184. moai_adk/templates/.claude/skills/moai-lang-r/reference.md +0 -30
  185. moai_adk/templates/.claude/skills/moai-lang-ruby/SKILL.md +0 -124
  186. moai_adk/templates/.claude/skills/moai-lang-ruby/examples.md +0 -29
  187. moai_adk/templates/.claude/skills/moai-lang-ruby/reference.md +0 -31
  188. moai_adk/templates/.claude/skills/moai-lang-rust/SKILL.md +0 -124
  189. moai_adk/templates/.claude/skills/moai-lang-rust/examples.md +0 -29
  190. moai_adk/templates/.claude/skills/moai-lang-rust/reference.md +0 -31
  191. moai_adk/templates/.claude/skills/moai-lang-scala/SKILL.md +0 -123
  192. moai_adk/templates/.claude/skills/moai-lang-scala/examples.md +0 -29
  193. moai_adk/templates/.claude/skills/moai-lang-scala/reference.md +0 -30
  194. moai_adk/templates/.claude/skills/moai-lang-shell/SKILL.md +0 -123
  195. moai_adk/templates/.claude/skills/moai-lang-shell/examples.md +0 -29
  196. moai_adk/templates/.claude/skills/moai-lang-shell/reference.md +0 -30
  197. moai_adk/templates/.claude/skills/moai-lang-sql/SKILL.md +0 -124
  198. moai_adk/templates/.claude/skills/moai-lang-sql/examples.md +0 -29
  199. moai_adk/templates/.claude/skills/moai-lang-sql/reference.md +0 -31
  200. moai_adk/templates/.claude/skills/moai-lang-swift/SKILL.md +0 -123
  201. moai_adk/templates/.claude/skills/moai-lang-swift/examples.md +0 -29
  202. moai_adk/templates/.claude/skills/moai-lang-swift/reference.md +0 -30
  203. moai_adk/templates/.claude/skills/moai-lang-typescript/SKILL.md +0 -127
  204. moai_adk/templates/.claude/skills/moai-lang-typescript/examples.md +0 -29
  205. moai_adk/templates/.claude/skills/moai-lang-typescript/reference.md +0 -34
  206. moai_adk/templates/.claude/skills/moai-skill-factory/CHECKLIST.md +0 -482
  207. moai_adk/templates/.claude/skills/moai-skill-factory/EXAMPLES.md +0 -278
  208. moai_adk/templates/.claude/skills/moai-skill-factory/INTERACTIVE-DISCOVERY.md +0 -524
  209. moai_adk/templates/.claude/skills/moai-skill-factory/METADATA.md +0 -477
  210. moai_adk/templates/.claude/skills/moai-skill-factory/PARALLEL-ANALYSIS-REPORT.md +0 -429
  211. moai_adk/templates/.claude/skills/moai-skill-factory/PYTHON-VERSION-MATRIX.md +0 -391
  212. moai_adk/templates/.claude/skills/moai-skill-factory/SKILL-FACTORY-WORKFLOW.md +0 -431
  213. moai_adk/templates/.claude/skills/moai-skill-factory/SKILL-UPDATE-ADVISOR.md +0 -577
  214. moai_adk/templates/.claude/skills/moai-skill-factory/SKILL.md +0 -271
  215. moai_adk/templates/.claude/skills/moai-skill-factory/STEP-BY-STEP-GUIDE.md +0 -466
  216. moai_adk/templates/.claude/skills/moai-skill-factory/STRUCTURE.md +0 -583
  217. moai_adk/templates/.claude/skills/moai-skill-factory/WEB-RESEARCH.md +0 -526
  218. moai_adk/templates/.claude/skills/moai-skill-factory/reference.md +0 -465
  219. moai_adk/templates/.claude/skills/moai-skill-factory/scripts/generate-structure.sh +0 -328
  220. moai_adk/templates/.claude/skills/moai-skill-factory/scripts/validate-skill.sh +0 -312
  221. moai_adk/templates/.claude/skills/moai-skill-factory/templates/SKILL_TEMPLATE.md +0 -245
  222. moai_adk/templates/.claude/skills/moai-skill-factory/templates/examples-template.md +0 -285
  223. moai_adk/templates/.claude/skills/moai-skill-factory/templates/reference-template.md +0 -278
  224. moai_adk/templates/.claude/skills/moai-skill-factory/templates/scripts-template.sh +0 -303
  225. moai_adk/templates/.claude/skills/moai-spec-authoring/README.md +0 -137
  226. moai_adk/templates/.claude/skills/moai-spec-authoring/SKILL.md +0 -219
  227. moai_adk/templates/.claude/skills/moai-spec-authoring/examples/validate-spec.sh +0 -161
  228. moai_adk/templates/.claude/skills/moai-spec-authoring/examples.md +0 -541
  229. moai_adk/templates/.claude/skills/moai-spec-authoring/reference.md +0 -622
  230. moai_adk/templates/.moai/config.json +0 -113
  231. moai_adk/templates/.moai/memory/CLAUDE-AGENTS-GUIDE.md +0 -208
  232. moai_adk/templates/.moai/memory/CLAUDE-PRACTICES.md +0 -369
  233. moai_adk/templates/.moai/memory/CLAUDE-RULES.md +0 -539
  234. moai_adk/templates/.moai/memory/DEVELOPMENT-GUIDE.md +0 -344
  235. moai_adk/templates/.moai/memory/ISSUE-LABEL-MAPPING.md +0 -150
  236. moai_adk/templates/.moai/memory/SKILLS-DESCRIPTION-POLICY.md +0 -218
  237. moai_adk/templates/.moai/memory/gitflow-protection-policy.md +0 -330
  238. moai_adk/templates/.moai/memory/spec-metadata.md +0 -356
  239. moai_adk/templates/.moai/project/product.md +0 -161
  240. moai_adk/templates/.moai/project/structure.md +0 -156
  241. moai_adk/templates/.moai/project/tech.md +0 -227
  242. moai_adk-0.10.1.dist-info/RECORD +0 -309
  243. {moai_adk-0.10.1.dist-info → moai_adk-0.11.0.dist-info}/WHEEL +0 -0
  244. {moai_adk-0.10.1.dist-info → moai_adk-0.11.0.dist-info}/entry_points.txt +0 -0
  245. {moai_adk-0.10.1.dist-info → moai_adk-0.11.0.dist-info}/licenses/LICENSE +0 -0
@@ -1,541 +0,0 @@
1
- # SPEC Authoring Examples
2
-
3
- ## Real-World EARS Examples
4
-
5
- ### Example 1: E-commerce Checkout
6
-
7
- ```markdown
8
- ### Ubiquitous Requirements
9
- **UR-001**: The system shall provide a shopping cart feature.
10
- **UR-002**: The system shall support credit card payment.
11
-
12
- ### Event-driven Requirements
13
- **ER-001**: WHEN the user adds an item to the cart, the system shall update the cart total.
14
- **ER-002**: WHEN payment succeeds, the system shall send a confirmation email.
15
- **ER-003**: WHEN inventory is insufficient, the system shall display an "Out of Stock" message.
16
-
17
- ### State-driven Requirements
18
- **SR-001**: WHILE items exist in the cart, the system shall reserve inventory for 30 minutes.
19
- **SR-002**: WHILE payment is being processed, the UI shall display a loading indicator.
20
-
21
- ### Optional Features
22
- **OF-001**: WHERE express shipping is selected, the system can calculate express shipping cost.
23
- **OF-002**: WHERE gift wrapping is available, the system can offer gift wrapping option.
24
-
25
- ### Unwanted Behaviors
26
- **UB-001**: IF cart total is less than $50, THEN the system shall add a $5 shipping fee.
27
- **UB-002**: IF 3 payment failures occur, THEN the system shall lock the order for 1 hour.
28
- **UB-003**: Order processing time shall not exceed 5 seconds.
29
- ```
30
-
31
- ### Example 2: Mobile App Push Notifications
32
-
33
- ```markdown
34
- ### Ubiquitous Requirements
35
- **UR-001**: The app shall support push notifications.
36
- **UR-002**: The app shall allow users to enable/disable notifications.
37
-
38
- ### Event-driven Requirements
39
- **ER-001**: WHEN a new message arrives, the app shall display a push notification.
40
- **ER-002**: WHEN the user taps a notification, the app shall navigate to the message screen.
41
- **ER-003**: WHEN notification permission is denied, the app shall display an in-app banner.
42
-
43
- ### State-driven Requirements
44
- **SR-001**: WHILE the app is in foreground state, the system shall display in-app banner instead of push notification.
45
- **SR-002**: WHILE Do Not Disturb mode is enabled, the system shall mute all notifications.
46
-
47
- ### Optional Features
48
- **OF-001**: WHERE notification sound is enabled, the system can play notification sound.
49
- **OF-002**: WHERE notification grouping is supported, the system can group notifications by conversation.
50
-
51
- ### Unwanted Behaviors
52
- **UB-001**: IF 10 or more notifications are pending, THEN the system shall consolidate them into a summary notification.
53
- **UB-002**: Notification delivery latency shall not exceed 5 seconds.
54
- ```
55
-
56
- ---
57
-
58
- ## Complete SPEC Examples
59
-
60
- ### Example 1: Minimal SPEC
61
-
62
- ```markdown
63
- ---
64
- id: HELLO-001
65
- version: 0.0.1
66
- status: draft
67
- created: 2025-10-29
68
- updated: 2025-10-29
69
- author: @Goos
70
- priority: low
71
- ---
72
-
73
- # @SPEC:HELLO-001: Hello World API
74
-
75
- ## HISTORY
76
-
77
- ### v0.0.1 (2025-10-29)
78
- - **INITIAL**: Hello World API SPEC draft created
79
- - **AUTHOR**: @Goos
80
-
81
- ## Environment
82
-
83
- **Runtime**: Node.js 20.x
84
- **Framework**: Express.js
85
-
86
- ## Assumptions
87
-
88
- 1. Single endpoint required
89
- 2. No authentication needed
90
- 3. JSON response format
91
-
92
- ## Requirements
93
-
94
- ### Ubiquitous Requirements
95
-
96
- **UR-001**: The system shall provide a GET /hello endpoint.
97
-
98
- ### Event-driven Requirements
99
-
100
- **ER-001**: WHEN a GET request is sent to /hello, the system shall return JSON `{"message": "Hello, World!"}`.
101
-
102
- ### Unwanted Behaviors
103
-
104
- **UB-001**: Response time shall not exceed 50ms.
105
- ```
106
-
107
- ### Example 2: Production-Grade SPEC
108
-
109
- ```markdown
110
- ---
111
- id: AUTH-001
112
- version: 0.1.0
113
- status: completed
114
- created: 2025-10-29
115
- updated: 2025-10-30
116
- author: @Goos
117
- priority: high
118
- category: feature
119
- labels:
120
- - authentication
121
- - jwt
122
- - security
123
- depends_on:
124
- - USER-001
125
- - TOKEN-001
126
- blocks:
127
- - AUTH-002
128
- - PAYMENT-001
129
- related_issue: "https://github.com/modu-ai/moai-adk/issues/42"
130
- scope:
131
- packages:
132
- - src/core/auth
133
- - src/core/token
134
- - src/api/routes/auth
135
- files:
136
- - auth-service.ts
137
- - token-manager.ts
138
- - auth.routes.ts
139
- ---
140
-
141
- # @SPEC:AUTH-001: JWT Authentication System
142
-
143
- ## HISTORY
144
-
145
- ### v0.1.0 (2025-10-30)
146
- - **COMPLETED**: TDD implementation finished
147
- - **AUTHOR**: @Goos
148
- - **EVIDENCE**: Commits 4c66076, 34e1bd9, 1dec08f
149
- - **TEST COVERAGE**: 89.13% (target: 85%)
150
- - **QUALITY METRICS**:
151
- - Test Pass Rate: 100% (42/42 tests)
152
- - Linting: ruff ✅
153
- - Type Checking: mypy ✅
154
- - **TAG CHAIN**:
155
- - @SPEC:AUTH-001: 1 occurrence
156
- - @TEST:AUTH-001: 8 occurrences
157
- - @CODE:AUTH-001: 12 occurrences
158
-
159
- ### v0.0.2 (2025-10-25)
160
- - **REFINED**: Added password reset flow requirements
161
- - **REFINED**: Clarified token lifetime constraints
162
- - **AUTHOR**: @Goos
163
-
164
- ### v0.0.1 (2025-10-29)
165
- - **INITIAL**: JWT authentication SPEC draft created
166
- - **AUTHOR**: @Goos
167
- - **SCOPE**: User authentication, token generation, token validation
168
- - **CONTEXT**: Q4 2025 product roadmap requirements
169
-
170
- ## Environment
171
-
172
- **Execution Context**:
173
- - Runtime: Node.js 20.x or later
174
- - Framework: Express.js
175
- - Database: PostgreSQL 15+
176
-
177
- **Technical Stack**:
178
- - JWT library: jsonwebtoken ^9.0.0
179
- - Hashing: bcrypt ^5.1.0
180
-
181
- **Constraints**:
182
- - Token lifetime: 15 minutes (access), 7 days (refresh)
183
- - Security: HTTPS required in production
184
-
185
- ## Assumptions
186
-
187
- 1. **User Storage**: User credentials are stored in PostgreSQL
188
- 2. **Secret Management**: JWT secrets are managed via environment variables
189
- 3. **Clock Sync**: Server clock is synchronized with NTP
190
- 4. **Password Policy**: Minimum 8 characters enforced during registration
191
-
192
- ## Requirements
193
-
194
- ### Ubiquitous Requirements
195
-
196
- **UR-001**: The system shall provide JWT-based authentication.
197
-
198
- **UR-002**: The system shall support user login with email and password.
199
-
200
- **UR-003**: The system shall issue both access and refresh tokens.
201
-
202
- ### Event-driven Requirements
203
-
204
- **ER-001**: WHEN the user submits valid credentials, the system shall issue a JWT access token with 15-minute expiration.
205
-
206
- **ER-002**: WHEN a token expires, the system shall return HTTP 401 Unauthorized.
207
-
208
- **ER-003**: WHEN a refresh token is presented, the system shall issue a new access token if the refresh token is valid.
209
-
210
- ### State-driven Requirements
211
-
212
- **SR-001**: WHILE the user is in an authenticated state, the system shall permit access to protected resources.
213
-
214
- **SR-002**: WHILE a token is valid, the system shall extract the user ID from token claims.
215
-
216
- ### Optional Features
217
-
218
- **OF-001**: WHERE multi-factor authentication is enabled, the system can require OTP verification after password confirmation.
219
-
220
- **OF-002**: WHERE session logging is enabled, the system can record login timestamp and IP address.
221
-
222
- ### Unwanted Behaviors
223
-
224
- **UB-001**: IF a token has expired, THEN the system shall deny access and return HTTP 401.
225
-
226
- **UB-002**: IF 5 or more login failures occur within 10 minutes, THEN the system shall temporarily lock the account.
227
-
228
- **UB-003**: Access token lifetime shall not exceed 15 minutes.
229
-
230
- **UB-004**: Refresh token lifetime shall not exceed 7 days.
231
-
232
- ## Traceability (@TAG Chain)
233
-
234
- ### TAG Chain Structure
235
- ```
236
- @SPEC:AUTH-001 (this document)
237
-
238
- @TEST:AUTH-001 (tests/auth/service.test.ts)
239
-
240
- @CODE:AUTH-001 (src/auth/service.ts, src/auth/token-manager.ts)
241
-
242
- @DOC:AUTH-001 (docs/api/authentication.md)
243
- ```
244
-
245
- ### Validation Commands
246
- ```bash
247
- # Validate SPEC TAG
248
- rg '@SPEC:AUTH-001' -n .moai/specs/
249
-
250
- # Check for duplicate IDs
251
- rg '@SPEC:AUTH' -n .moai/specs/
252
- rg 'AUTH-001' -n
253
-
254
- # Scan full TAG chain
255
- rg '@(SPEC|TEST|CODE|DOC):AUTH-001' -n
256
- ```
257
-
258
- ## Decision Log
259
-
260
- ### Decision 1: JWT vs Session Cookies (2025-10-29)
261
- **Context**: Need stateless authentication for microservices
262
- **Decision**: Use JWT tokens
263
- **Alternatives Considered**:
264
- - Session cookies (rejected: stateful, not scalable)
265
- - OAuth 2.0 (deferred: too complex for MVP)
266
- **Consequences**:
267
- - ✅ Stateless, scalable
268
- - ✅ Service-to-service authentication
269
- - ❌ Token revocation complexity
270
-
271
- ### Decision 2: Token Expiration 15 minutes (2025-10-30)
272
- **Context**: Balance between security and UX
273
- **Decision**: 15-minute access token, 7-day refresh token
274
- **Rationale**: Industry standard, OWASP best practices
275
- **References**: OWASP JWT best practices
276
-
277
- ## Requirements Traceability Matrix
278
-
279
- | Req ID | Description | Test Cases | Status |
280
- |--------|-------------|------------|--------|
281
- | UR-001 | JWT authentication | test_authenticate_valid_user | ✅ |
282
- | ER-001 | Token issuance | test_token_generation | ✅ |
283
- | ER-002 | Token expiration | test_expired_token_rejection | ✅ |
284
- | SR-001 | Authenticated access | test_protected_route_access | ✅ |
285
- | UB-001 | Token lifetime | test_token_expiry_constraint | ✅ |
286
- ```
287
-
288
- ---
289
-
290
- ## Advanced Patterns
291
-
292
- ### Pattern 1: Versioned Requirements
293
-
294
- Document requirement evolution across versions:
295
-
296
- ```markdown
297
- ### v0.2.0 (2025-11-15)
298
- **UR-001** (CHANGED): The system shall respond within 200ms for 99% of requests.
299
- - Previous (v0.1.0): 95% of requests
300
- - Rationale: User feedback-driven performance improvement
301
-
302
- ### v0.1.0 (2025-10-30)
303
- **UR-001**: The system shall respond within 200ms for 95% of requests.
304
- ```
305
-
306
- ### Pattern 2: Requirements Traceability Matrix
307
-
308
- Explicitly link requirements to test cases:
309
-
310
- ```markdown
311
- ## Requirements Traceability Matrix
312
-
313
- | Req ID | Description | Test Cases | Status |
314
- |--------|-------------|------------|--------|
315
- | UR-001 | JWT authentication | test_authenticate_valid_user | ✅ |
316
- | ER-001 | Token issuance | test_token_generation | ✅ |
317
- | ER-002 | Token expiration | test_expired_token_rejection | ✅ |
318
- | SR-001 | Authenticated access | test_protected_route_access | ✅ |
319
- | UB-001 | Token lifetime | test_token_expiry_constraint | ✅ |
320
- ```
321
-
322
- ### Pattern 3: Decision Log
323
-
324
- Document architectural decisions within the SPEC:
325
-
326
- ```markdown
327
- ## Decision Log
328
-
329
- ### Decision 1: JWT vs Session Cookies (2025-10-29)
330
- **Context**: Need stateless authentication for microservices
331
- **Decision**: Use JWT tokens
332
- **Alternatives Considered**:
333
- - Session cookies (rejected: stateful, not scalable)
334
- - OAuth 2.0 (deferred: too complex for MVP)
335
- **Consequences**:
336
- - ✅ Stateless, scalable
337
- - ✅ Service-to-service authentication
338
- - ❌ Token revocation complexity
339
-
340
- ### Decision 2: Token Expiration 15 minutes (2025-10-30)
341
- **Context**: Balance between security and UX
342
- **Decision**: 15-minute access token, 7-day refresh token
343
- **Rationale**: Industry standard, OWASP best practices
344
- **References**: OWASP JWT best practices
345
- ```
346
-
347
- ---
348
-
349
- ## Troubleshooting
350
-
351
- ### Issue: "Duplicate SPEC ID detected"
352
-
353
- **Symptom**: `rg "@SPEC:AUTH-001" -n` returns multiple results
354
-
355
- **Resolution**:
356
- ```bash
357
- # Find all occurrences
358
- rg "@SPEC:AUTH-001" -n .moai/specs/
359
-
360
- # Keep one SPEC, rename the other
361
- # Update TAG references in code/tests
362
- rg '@SPEC:AUTH-001' -l src/ tests/ | xargs sed -i 's/@SPEC:AUTH-001/@SPEC:AUTH-002/g'
363
- ```
364
-
365
- ### Issue: "Version number doesn't match status"
366
-
367
- **Symptom**: `status: completed` but `version: 0.0.1`
368
-
369
- **Resolution**:
370
- ```yaml
371
- # Update version to reflect completion
372
- version: 0.1.0 # Implementation completed
373
- status: completed
374
- ```
375
-
376
- ### Issue: "HISTORY section missing version entry"
377
-
378
- **Symptom**: Content changed but no new HISTORY entry
379
-
380
- **Resolution**:
381
- ```markdown
382
- ## HISTORY
383
-
384
- ### v0.0.2 (2025-10-25) ← Add new entry
385
- - **REFINED**: XYZ requirement updated
386
- - **AUTHOR**: @YourHandle
387
-
388
- ### v0.0.1 (2025-10-23)
389
- - **INITIAL**: Initial draft
390
- ```
391
-
392
- ### Issue: "Author field missing @ prefix"
393
-
394
- **Symptom**: `author: Goos` instead of `author: @Goos`
395
-
396
- **Resolution**:
397
- ```yaml
398
- # Incorrect
399
- author: Goos
400
- author: goos
401
-
402
- # Correct
403
- author: @Goos
404
- ```
405
-
406
- ### Issue: "EARS pattern mixing"
407
-
408
- **Symptom**: "WHEN user logs in, WHILE session is active, the system shall..."
409
-
410
- **Resolution**:
411
- ```markdown
412
- # Bad (pattern mixing)
413
- **ER-001**: WHEN user logs in, WHILE session is active, the system shall permit access.
414
-
415
- # Good (separate requirements)
416
- **ER-001**: WHEN user successfully logs in, the system shall create a session.
417
- **SR-001**: WHILE session is active, the system shall permit access to protected resources.
418
- ```
419
-
420
- ---
421
-
422
- ## Best Practices Summary
423
-
424
- ### ✅ DO (Best Practices)
425
-
426
- 1. **Check for duplicate IDs before creating**
427
- ```bash
428
- rg "@SPEC:AUTH-001" -n .moai/specs/
429
- rg "AUTH-001" -n
430
- ```
431
-
432
- 2. **Update HISTORY on every content change**
433
- ```markdown
434
- ### v0.0.2 (2025-10-25)
435
- - **REFINED**: XYZ added
436
- - **AUTHOR**: @YourHandle
437
- ```
438
-
439
- 3. **Follow version lifecycle strictly**
440
- ```
441
- 0.0.1 → 0.0.2 → ... → 0.1.0 → 0.1.1 → ... → 1.0.0
442
- (draft) (draft) (completed) (patches) (stable)
443
- ```
444
-
445
- 4. **Use @ prefix in author field**
446
- ```yaml
447
- author: @Goos # Correct
448
- ```
449
-
450
- 5. **Write testable, measurable requirements**
451
- ```markdown
452
- # Good
453
- **UR-001**: API response time shall not exceed 200ms for 95% of requests.
454
-
455
- # Bad
456
- **UR-001**: The system should be fast.
457
- ```
458
-
459
- 6. **Include all 7 required metadata fields**
460
- ```yaml
461
- id: AUTH-001
462
- version: 0.0.1
463
- status: draft
464
- created: 2025-10-29
465
- updated: 2025-10-29
466
- author: @Goos
467
- priority: high
468
- ```
469
-
470
- 7. **Use EARS patterns consistently**
471
-
472
- ### ❌ DON'T (Anti-Patterns)
473
-
474
- 1. **Don't change SPEC ID after assignment**
475
- - Breaks TAG chain
476
- - Orphans existing code/tests
477
- - Loses Git history
478
-
479
- 2. **Don't skip HISTORY updates**
480
- - Loses change rationale
481
- - Unclear version progression
482
- - Audit trail gaps
483
-
484
- 3. **Don't jump version numbers without reason**
485
- ```markdown
486
- # Bad: 0.0.1 → 1.0.0
487
- # Good: 0.0.1 → 0.0.2 → ... → 0.1.0 → 1.0.0
488
- ```
489
-
490
- 4. **Don't write ambiguous requirements**
491
- - Avoid "fast", "user-friendly", "good"
492
- - Use measurable criteria
493
-
494
- 5. **Don't mix EARS patterns in one requirement**
495
-
496
- 6. **Don't skip validation before submission**
497
- ```bash
498
- ./validate-spec.sh .moai/specs/SPEC-AUTH-001
499
- ```
500
-
501
- 7. **Don't create duplicate SPEC IDs**
502
-
503
- ---
504
-
505
- ## Integration Workflow
506
-
507
- ### `/alfred:1-plan` Integration
508
-
509
- When `/alfred:1-plan` is called, the `spec-builder` agent uses this Skill to:
510
-
511
- 1. **Analyze**: User request and project context
512
- 2. **Generate**: SPEC candidates with appropriate structure
513
- 3. **Validate**: Metadata completeness
514
- 4. **Create**: `.moai/specs/SPEC-{ID}/spec.md` with EARS requirements
515
- 5. **Initialize**: Git workflow (feature branch, Draft PR)
516
-
517
- ### spec-builder Integration Points
518
-
519
- ```markdown
520
- Phase 1: SPEC candidate generation
521
- ↓ (uses moai-spec-authoring for metadata structure)
522
- Phase 2: User approval
523
-
524
- Phase 3: SPEC file creation
525
- ↓ (applies EARS templates from this Skill)
526
- Phase 4: Git workflow initialization
527
-
528
- Phase 5: Handoff to /alfred:2-run
529
- ```
530
-
531
- ### Agent Collaboration
532
-
533
- - **spec-builder**: Creates SPEC using this Skill's templates
534
- - **tag-agent**: Validates TAG format and uniqueness
535
- - **trust-checker**: Verifies metadata completeness
536
- - **git-manager**: Creates feature branch and Draft PR
537
-
538
- ---
539
-
540
- **Last Updated**: 2025-10-29
541
- **Version**: 1.2.0