moai-adk 0.8.0__py3-none-any.whl → 0.15.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 (207) hide show
  1. moai_adk/cli/commands/init.py +14 -2
  2. moai_adk/cli/commands/update.py +229 -60
  3. moai_adk/core/config/migration.py +1 -1
  4. moai_adk/core/issue_creator.py +313 -0
  5. moai_adk/core/project/detector.py +201 -12
  6. moai_adk/core/project/initializer.py +62 -1
  7. moai_adk/core/project/phase_executor.py +48 -6
  8. moai_adk/core/tags/__init__.py +86 -0
  9. moai_adk/core/tags/ci_validator.py +463 -0
  10. moai_adk/core/tags/cli.py +283 -0
  11. moai_adk/core/tags/generator.py +109 -0
  12. moai_adk/core/tags/inserter.py +99 -0
  13. moai_adk/core/tags/mapper.py +126 -0
  14. moai_adk/core/tags/parser.py +76 -0
  15. moai_adk/core/tags/pre_commit_validator.py +393 -0
  16. moai_adk/core/tags/reporter.py +956 -0
  17. moai_adk/core/tags/tags.py +149 -0
  18. moai_adk/core/tags/validator.py +897 -0
  19. moai_adk/core/template_engine.py +268 -0
  20. moai_adk/templates/.claude/agents/alfred/backend-expert.md +319 -0
  21. moai_adk/templates/.claude/agents/alfred/cc-manager.md +25 -2
  22. moai_adk/templates/.claude/agents/alfred/debug-helper.md +24 -12
  23. moai_adk/templates/.claude/agents/alfred/devops-expert.md +464 -0
  24. moai_adk/templates/.claude/agents/alfred/doc-syncer.md +20 -13
  25. moai_adk/templates/.claude/agents/alfred/frontend-expert.md +357 -0
  26. moai_adk/templates/.claude/agents/alfred/git-manager.md +47 -16
  27. moai_adk/templates/.claude/agents/alfred/implementation-planner.md +95 -15
  28. moai_adk/templates/.claude/agents/alfred/project-manager.md +78 -12
  29. moai_adk/templates/.claude/agents/alfred/quality-gate.md +28 -5
  30. moai_adk/templates/.claude/agents/alfred/skill-factory.md +30 -2
  31. moai_adk/templates/.claude/agents/alfred/spec-builder.md +133 -13
  32. moai_adk/templates/.claude/agents/alfred/tag-agent.md +104 -8
  33. moai_adk/templates/.claude/agents/alfred/tdd-implementer.md +133 -16
  34. moai_adk/templates/.claude/agents/alfred/trust-checker.md +27 -4
  35. moai_adk/templates/.claude/agents/alfred/ui-ux-expert.md +571 -0
  36. moai_adk/templates/.claude/commands/alfred/0-project.md +466 -125
  37. moai_adk/templates/.claude/commands/alfred/1-plan.md +208 -71
  38. moai_adk/templates/.claude/commands/alfred/2-run.md +276 -55
  39. moai_adk/templates/.claude/commands/alfred/3-sync.md +439 -53
  40. moai_adk/templates/.claude/commands/alfred/9-feedback.md +149 -0
  41. moai_adk/templates/.claude/hooks/alfred/core/project.py +361 -29
  42. moai_adk/templates/.claude/hooks/alfred/core/timeout.py +136 -0
  43. moai_adk/templates/.claude/hooks/alfred/core/ttl_cache.py +108 -0
  44. moai_adk/templates/.claude/hooks/alfred/core/version_cache.py +198 -0
  45. moai_adk/templates/.claude/hooks/alfred/handlers/__init__.py +14 -6
  46. moai_adk/templates/.claude/hooks/alfred/post_tool__log_changes.py +94 -0
  47. moai_adk/templates/.claude/hooks/alfred/pre_tool__auto_checkpoint.py +100 -0
  48. moai_adk/templates/.claude/hooks/alfred/session_end__cleanup.py +94 -0
  49. moai_adk/templates/.claude/hooks/alfred/session_start__show_project_info.py +94 -0
  50. moai_adk/templates/.claude/hooks/alfred/{core → shared/core}/__init__.py +2 -2
  51. moai_adk/templates/.claude/hooks/alfred/{core → shared/core}/checkpoint.py +3 -3
  52. moai_adk/templates/.claude/hooks/alfred/{core → shared/core}/context.py +5 -5
  53. moai_adk/templates/.claude/hooks/alfred/shared/core/project.py +749 -0
  54. moai_adk/templates/.claude/hooks/alfred/{core → shared/core}/tags.py +55 -23
  55. moai_adk/templates/.claude/hooks/alfred/shared/core/version_cache.py +198 -0
  56. moai_adk/templates/.claude/hooks/alfred/shared/handlers/__init__.py +21 -0
  57. moai_adk/templates/.claude/hooks/alfred/shared/handlers/notification.py +154 -0
  58. moai_adk/templates/.claude/hooks/alfred/{handlers → shared/handlers}/session.py +28 -15
  59. moai_adk/templates/.claude/hooks/alfred/{handlers → shared/handlers}/tool.py +3 -6
  60. moai_adk/templates/.claude/hooks/alfred/{handlers → shared/handlers}/user.py +19 -0
  61. moai_adk/templates/.claude/hooks/alfred/user_prompt__jit_load_docs.py +112 -0
  62. moai_adk/templates/.claude/hooks/alfred/utils/__init__.py +1 -0
  63. moai_adk/templates/.claude/hooks/alfred/utils/timeout.py +161 -0
  64. moai_adk/templates/.claude/settings.json +5 -5
  65. moai_adk/templates/.claude/skills/moai-alfred-agent-guide/SKILL.md +70 -0
  66. moai_adk/templates/.claude/skills/moai-alfred-agent-guide/examples.md +62 -0
  67. moai_adk/templates/{.moai/memory/CLAUDE-AGENTS-GUIDE.md → .claude/skills/moai-alfred-agent-guide/reference.md} +34 -0
  68. moai_adk/templates/.claude/skills/moai-alfred-config-schema/SKILL.md +56 -0
  69. moai_adk/templates/.claude/skills/moai-alfred-config-schema/examples.md +28 -0
  70. moai_adk/templates/.claude/skills/moai-alfred-context-budget/SKILL.md +62 -0
  71. moai_adk/templates/.claude/skills/moai-alfred-context-budget/examples.md +28 -0
  72. moai_adk/templates/.claude/skills/moai-alfred-context-budget/reference.md +405 -0
  73. moai_adk/templates/.claude/skills/moai-alfred-dev-guide/SKILL.md +51 -0
  74. moai_adk/templates/.claude/skills/moai-alfred-dev-guide/examples.md +355 -0
  75. moai_adk/templates/.claude/skills/moai-alfred-dev-guide/reference.md +239 -0
  76. moai_adk/templates/.claude/skills/moai-alfred-expertise-detection/SKILL.md +323 -0
  77. moai_adk/templates/.claude/skills/moai-alfred-expertise-detection/examples.md +286 -0
  78. moai_adk/templates/.claude/skills/moai-alfred-expertise-detection/reference.md +126 -0
  79. moai_adk/templates/.claude/skills/moai-alfred-gitflow-policy/SKILL.md +74 -0
  80. moai_adk/templates/.claude/skills/moai-alfred-gitflow-policy/examples.md +4 -0
  81. moai_adk/templates/.claude/skills/moai-alfred-gitflow-policy/reference.md +269 -0
  82. moai_adk/templates/.claude/skills/moai-alfred-issue-labels/SKILL.md +19 -0
  83. moai_adk/templates/.claude/skills/moai-alfred-issue-labels/examples.md +4 -0
  84. moai_adk/templates/.claude/skills/moai-alfred-issue-labels/reference.md +150 -0
  85. moai_adk/templates/.claude/skills/moai-alfred-persona-roles/SKILL.md +198 -0
  86. moai_adk/templates/.claude/skills/moai-alfred-persona-roles/examples.md +431 -0
  87. moai_adk/templates/.claude/skills/moai-alfred-persona-roles/reference.md +141 -0
  88. moai_adk/templates/.claude/skills/moai-alfred-practices/SKILL.md +89 -0
  89. moai_adk/templates/.claude/skills/moai-alfred-practices/examples.md +122 -0
  90. moai_adk/templates/.claude/skills/moai-alfred-proactive-suggestions/SKILL.md +508 -0
  91. moai_adk/templates/.claude/skills/moai-alfred-proactive-suggestions/examples.md +481 -0
  92. moai_adk/templates/.claude/skills/moai-alfred-proactive-suggestions/reference.md +100 -0
  93. moai_adk/templates/.claude/skills/moai-alfred-reporting/SKILL.md +273 -0
  94. moai_adk/templates/.claude/skills/moai-alfred-rules/SKILL.md +77 -0
  95. moai_adk/templates/.claude/skills/moai-alfred-rules/examples.md +265 -0
  96. moai_adk/templates/.claude/skills/moai-alfred-session-state/SKILL.md +19 -0
  97. moai_adk/templates/.claude/skills/moai-alfred-session-state/examples.md +4 -0
  98. moai_adk/templates/.claude/skills/moai-alfred-session-state/reference.md +84 -0
  99. moai_adk/templates/.claude/skills/moai-alfred-spec-authoring/README.md +137 -0
  100. moai_adk/templates/.claude/skills/moai-alfred-spec-authoring/SKILL.md +219 -0
  101. moai_adk/templates/.claude/skills/{moai-spec-authoring → moai-alfred-spec-authoring}/examples/validate-spec.sh +3 -3
  102. moai_adk/templates/.claude/skills/moai-alfred-spec-authoring/examples.md +541 -0
  103. moai_adk/templates/.claude/skills/moai-alfred-spec-authoring/reference.md +622 -0
  104. moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-extended/SKILL.md +115 -0
  105. moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-extended/examples.md +4 -0
  106. moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-extended/reference.md +348 -0
  107. moai_adk/templates/.claude/skills/moai-alfred-todowrite-pattern/SKILL.md +19 -0
  108. moai_adk/templates/.claude/skills/moai-alfred-todowrite-pattern/examples.md +4 -0
  109. moai_adk/templates/.claude/skills/moai-alfred-todowrite-pattern/reference.md +211 -0
  110. moai_adk/templates/.claude/skills/moai-alfred-workflow/SKILL.md +288 -0
  111. moai_adk/templates/.claude/skills/moai-cc-skill-descriptions/SKILL.md +19 -0
  112. moai_adk/templates/.claude/skills/moai-cc-skill-descriptions/examples.md +4 -0
  113. moai_adk/templates/.claude/skills/{moai-skill-factory → moai-cc-skill-factory}/SKILL.md +3 -3
  114. moai_adk/templates/.claude/skills/moai-design-systems/SKILL.md +802 -0
  115. moai_adk/templates/.claude/skills/moai-design-systems/examples.md +1238 -0
  116. moai_adk/templates/.claude/skills/moai-design-systems/reference.md +673 -0
  117. moai_adk/templates/.claude/skills/moai-domain-frontend/SKILL.md +17 -13
  118. moai_adk/templates/.claude/skills/moai-foundation-ears/SKILL.md +9 -6
  119. moai_adk/templates/.claude/skills/moai-lang-go/SKILL.md +15 -12
  120. moai_adk/templates/.claude/skills/moai-lang-java/SKILL.md +14 -12
  121. moai_adk/templates/.claude/skills/moai-lang-php/SKILL.md +14 -11
  122. moai_adk/templates/.claude/skills/moai-lang-python/SKILL.md +10 -8
  123. moai_adk/templates/.claude/skills/moai-lang-rust/SKILL.md +15 -12
  124. moai_adk/templates/.claude/skills/moai-lang-scala/SKILL.md +13 -11
  125. moai_adk/templates/.claude/skills/moai-lang-typescript/SKILL.md +16 -10
  126. moai_adk/templates/.claude/skills/moai-project-documentation.md +622 -0
  127. moai_adk/templates/.git-hooks/pre-push +143 -0
  128. moai_adk/templates/.github/workflows/c-tag-validation.yml +11 -0
  129. moai_adk/templates/.github/workflows/cpp-tag-validation.yml +11 -0
  130. moai_adk/templates/.github/workflows/csharp-tag-validation.yml +11 -0
  131. moai_adk/templates/.github/workflows/dart-tag-validation.yml +11 -0
  132. moai_adk/templates/.github/workflows/go-tag-validation.yml +130 -0
  133. moai_adk/templates/.github/workflows/java-tag-validation.yml +11 -0
  134. moai_adk/templates/.github/workflows/javascript-tag-validation.yml +135 -0
  135. moai_adk/templates/.github/workflows/kotlin-tag-validation.yml +11 -0
  136. moai_adk/templates/.github/workflows/moai-gitflow.yml +166 -3
  137. moai_adk/templates/.github/workflows/moai-release-create.yml +100 -0
  138. moai_adk/templates/.github/workflows/moai-release-pipeline.yml +188 -0
  139. moai_adk/templates/.github/workflows/php-tag-validation.yml +11 -0
  140. moai_adk/templates/.github/workflows/python-tag-validation.yml +118 -0
  141. moai_adk/templates/.github/workflows/release.yml +118 -0
  142. moai_adk/templates/.github/workflows/ruby-tag-validation.yml +11 -0
  143. moai_adk/templates/.github/workflows/rust-tag-validation.yml +11 -0
  144. moai_adk/templates/.github/workflows/shell-tag-validation.yml +11 -0
  145. moai_adk/templates/.github/workflows/spec-issue-sync.yml +206 -35
  146. moai_adk/templates/.github/workflows/swift-tag-validation.yml +11 -0
  147. moai_adk/templates/.github/workflows/tag-report.yml +269 -0
  148. moai_adk/templates/.github/workflows/tag-validation.yml +186 -0
  149. moai_adk/templates/.github/workflows/typescript-tag-validation.yml +154 -0
  150. moai_adk/templates/.moai/config.json +21 -2
  151. moai_adk/templates/CLAUDE.md +972 -78
  152. moai_adk/templates/workflows/go-tag-validation.yml +30 -0
  153. moai_adk/templates/workflows/javascript-tag-validation.yml +41 -0
  154. moai_adk/templates/workflows/python-tag-validation.yml +42 -0
  155. moai_adk/templates/workflows/typescript-tag-validation.yml +31 -0
  156. moai_adk/utils/banner.py +5 -5
  157. {moai_adk-0.8.0.dist-info → moai_adk-0.15.0.dist-info}/METADATA +1518 -161
  158. {moai_adk-0.8.0.dist-info → moai_adk-0.15.0.dist-info}/RECORD +183 -100
  159. moai_adk/templates/.claude/hooks/alfred/HOOK_SCHEMA_VALIDATION.md +0 -313
  160. moai_adk/templates/.claude/hooks/alfred/README.md +0 -230
  161. moai_adk/templates/.claude/hooks/alfred/alfred_hooks.py +0 -174
  162. moai_adk/templates/.claude/hooks/alfred/handlers/notification.py +0 -25
  163. moai_adk/templates/.claude/hooks/alfred/test_hook_output.py +0 -175
  164. moai_adk/templates/.claude/output-styles/alfred/agentic-coding.md +0 -640
  165. moai_adk/templates/.claude/output-styles/alfred/moai-adk-learning.md +0 -696
  166. moai_adk/templates/.claude/output-styles/alfred/study-with-alfred.md +0 -474
  167. moai_adk/templates/.claude/skills/moai-spec-authoring/README.md +0 -137
  168. moai_adk/templates/.claude/skills/moai-spec-authoring/SKILL.md +0 -218
  169. moai_adk/templates/.claude/skills/moai-spec-authoring/examples.md +0 -541
  170. moai_adk/templates/.claude/skills/moai-spec-authoring/reference.md +0 -622
  171. moai_adk/templates/.github/ISSUE_TEMPLATE/spec.yml +0 -176
  172. moai_adk/templates/.github/PULL_REQUEST_TEMPLATE.md +0 -69
  173. moai_adk/templates/.moai/memory/DEVELOPMENT-GUIDE.md +0 -344
  174. moai_adk/templates/.moai/memory/GITFLOW-PROTECTION-POLICY.md +0 -220
  175. moai_adk/templates/.moai/memory/SPEC-METADATA.md +0 -356
  176. moai_adk/templates/.moai/memory/config-schema.md +0 -444
  177. moai_adk/templates/.moai/memory/gitflow-protection-policy.md +0 -220
  178. moai_adk/templates/.moai/memory/spec-metadata.md +0 -356
  179. moai_adk/templates/.moai/project/product.md +0 -161
  180. moai_adk/templates/.moai/project/structure.md +0 -156
  181. moai_adk/templates/.moai/project/tech.md +0 -227
  182. moai_adk/templates/__init__.py +0 -2
  183. /moai_adk/templates/{.moai/memory/CONFIG-SCHEMA.md → .claude/skills/moai-alfred-config-schema/reference.md} +0 -0
  184. /moai_adk/templates/{.moai/memory/CLAUDE-PRACTICES.md → .claude/skills/moai-alfred-practices/reference.md} +0 -0
  185. /moai_adk/templates/{.moai/memory/CLAUDE-RULES.md → .claude/skills/moai-alfred-rules/reference.md} +0 -0
  186. /moai_adk/templates/{.moai/memory/SKILLS-DESCRIPTION-POLICY.md → .claude/skills/moai-cc-skill-descriptions/reference.md} +0 -0
  187. /moai_adk/templates/.claude/skills/{moai-skill-factory → moai-cc-skill-factory}/CHECKLIST.md +0 -0
  188. /moai_adk/templates/.claude/skills/{moai-skill-factory → moai-cc-skill-factory}/EXAMPLES.md +0 -0
  189. /moai_adk/templates/.claude/skills/{moai-skill-factory → moai-cc-skill-factory}/INTERACTIVE-DISCOVERY.md +0 -0
  190. /moai_adk/templates/.claude/skills/{moai-skill-factory → moai-cc-skill-factory}/METADATA.md +0 -0
  191. /moai_adk/templates/.claude/skills/{moai-skill-factory → moai-cc-skill-factory}/PARALLEL-ANALYSIS-REPORT.md +0 -0
  192. /moai_adk/templates/.claude/skills/{moai-skill-factory → moai-cc-skill-factory}/PYTHON-VERSION-MATRIX.md +0 -0
  193. /moai_adk/templates/.claude/skills/{moai-skill-factory → moai-cc-skill-factory}/SKILL-FACTORY-WORKFLOW.md +0 -0
  194. /moai_adk/templates/.claude/skills/{moai-skill-factory → moai-cc-skill-factory}/SKILL-UPDATE-ADVISOR.md +0 -0
  195. /moai_adk/templates/.claude/skills/{moai-skill-factory → moai-cc-skill-factory}/STEP-BY-STEP-GUIDE.md +0 -0
  196. /moai_adk/templates/.claude/skills/{moai-skill-factory → moai-cc-skill-factory}/STRUCTURE.md +0 -0
  197. /moai_adk/templates/.claude/skills/{moai-skill-factory → moai-cc-skill-factory}/WEB-RESEARCH.md +0 -0
  198. /moai_adk/templates/.claude/skills/{moai-skill-factory → moai-cc-skill-factory}/reference.md +0 -0
  199. /moai_adk/templates/.claude/skills/{moai-skill-factory → moai-cc-skill-factory}/scripts/generate-structure.sh +0 -0
  200. /moai_adk/templates/.claude/skills/{moai-skill-factory → moai-cc-skill-factory}/scripts/validate-skill.sh +0 -0
  201. /moai_adk/templates/.claude/skills/{moai-skill-factory → moai-cc-skill-factory}/templates/SKILL_TEMPLATE.md +0 -0
  202. /moai_adk/templates/.claude/skills/{moai-skill-factory → moai-cc-skill-factory}/templates/examples-template.md +0 -0
  203. /moai_adk/templates/.claude/skills/{moai-skill-factory → moai-cc-skill-factory}/templates/reference-template.md +0 -0
  204. /moai_adk/templates/.claude/skills/{moai-skill-factory → moai-cc-skill-factory}/templates/scripts-template.sh +0 -0
  205. {moai_adk-0.8.0.dist-info → moai_adk-0.15.0.dist-info}/WHEEL +0 -0
  206. {moai_adk-0.8.0.dist-info → moai_adk-0.15.0.dist-info}/entry_points.txt +0 -0
  207. {moai_adk-0.8.0.dist-info → moai_adk-0.15.0.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,541 @@
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