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,186 @@
1
+ name: TAG Validation
2
+
3
+ # @DOC:DOC-TAG-004 | Component 2: CI/CD workflow for TAG validation
4
+ # Validates TAG annotations on every PR to ensure quality and consistency
5
+
6
+ on:
7
+ pull_request:
8
+ types: [opened, synchronize, reopened, ready_for_review]
9
+ push:
10
+ branches: [main, develop, "feature/**"]
11
+
12
+ jobs:
13
+ validate-tags:
14
+ name: 🏷️ Validate TAG Annotations
15
+ runs-on: ubuntu-latest
16
+
17
+ # Skip validation on draft PRs (allow WIP)
18
+ if: github.event.pull_request.draft == false || github.event_name == 'push'
19
+
20
+ permissions:
21
+ contents: read
22
+ pull-requests: write
23
+
24
+ strategy:
25
+ matrix:
26
+ python-version: ["3.11", "3.12", "3.13"]
27
+
28
+ steps:
29
+ - name: Checkout code
30
+ uses: actions/checkout@v4
31
+ with:
32
+ fetch-depth: 0 # Fetch all history for comprehensive validation
33
+
34
+ - name: Setup Python
35
+ uses: actions/setup-python@v5
36
+ with:
37
+ python-version: ${{ matrix.python-version }}
38
+
39
+ - name: Install uv
40
+ uses: astral-sh/setup-uv@v5
41
+ with:
42
+ version: "latest"
43
+
44
+ - name: Install dependencies
45
+ run: |
46
+ uv pip install --system -e .
47
+ uv pip install --system requests
48
+ # Note: This workflow is for MoAI-ADK (Python project).
49
+ # Generated projects auto-detect language via moai-alfred-language-detection.
50
+
51
+ - name: Get PR number
52
+ id: pr
53
+ run: |
54
+ if [ "${{ github.event_name }}" == "pull_request" ]; then
55
+ echo "number=${{ github.event.pull_request.number }}" >> $GITHUB_OUTPUT
56
+ else
57
+ echo "number=0" >> $GITHUB_OUTPUT
58
+ fi
59
+
60
+ - name: Run TAG validation (info mode)
61
+ if: github.event_name == 'push' || github.event.pull_request.draft == false
62
+ id: validate_info
63
+ continue-on-error: true
64
+ env:
65
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
66
+ run: |
67
+ if [ "${{ steps.pr.outputs.number }}" != "0" ]; then
68
+ python -m moai_adk.core.tags.ci_validator \
69
+ --pr-number ${{ steps.pr.outputs.number }} \
70
+ --output-json validation-report.json \
71
+ --output-comment pr-comment.md
72
+ else
73
+ echo "Skipping PR validation on push event"
74
+ echo '{"status": "skipped", "message": "Push event - no PR validation"}' > validation-report.json
75
+ echo "# TAG Validation Skipped\n\nPush event detected. TAG validation runs on PRs." > pr-comment.md
76
+ fi
77
+
78
+ - name: Run TAG validation (strict mode)
79
+ if: github.event.pull_request.ready_for_review == true
80
+ id: validate_strict
81
+ continue-on-error: false
82
+ env:
83
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
84
+ run: |
85
+ python -m moai_adk.core.tags.ci_validator \
86
+ --pr-number ${{ steps.pr.outputs.number }} \
87
+ --strict \
88
+ --output-json validation-report-strict.json \
89
+ --output-comment pr-comment-strict.md
90
+
91
+ - name: Upload validation report
92
+ if: always()
93
+ uses: actions/upload-artifact@v4
94
+ with:
95
+ name: tag-validation-report
96
+ path: |
97
+ validation-report*.json
98
+ pr-comment*.md
99
+ retention-days: 30
100
+
101
+ - name: Post PR comment (info mode)
102
+ if: github.event_name == 'pull_request' && steps.pr.outputs.number != '0'
103
+ uses: actions/github-script@v7
104
+ with:
105
+ github-token: ${{ secrets.GITHUB_TOKEN }}
106
+ script: |
107
+ const fs = require('fs');
108
+
109
+ // Read the comment file
110
+ let comment = '';
111
+ try {
112
+ comment = fs.readFileSync('pr-comment.md', 'utf8');
113
+ } catch (error) {
114
+ comment = '## ⚠️ TAG Validation\n\nCould not read validation results.';
115
+ }
116
+
117
+ // Find existing comment
118
+ const { data: comments } = await github.rest.issues.listComments({
119
+ owner: context.repo.owner,
120
+ repo: context.repo.repo,
121
+ issue_number: context.issue.number,
122
+ });
123
+
124
+ const botComment = comments.find(comment =>
125
+ comment.user.login === 'github-actions[bot]' &&
126
+ comment.body.includes('TAG Validation')
127
+ );
128
+
129
+ // Create or update comment
130
+ const commentBody = comment + '\n\n---\n\n*Automated validation by [MoAI-ADK TAG System](https://github.com/YOUR_ORG/MoAI-ADK)*';
131
+
132
+ if (botComment) {
133
+ await github.rest.issues.updateComment({
134
+ owner: context.repo.owner,
135
+ repo: context.repo.repo,
136
+ comment_id: botComment.id,
137
+ body: commentBody
138
+ });
139
+ } else {
140
+ await github.rest.issues.createComment({
141
+ owner: context.repo.owner,
142
+ repo: context.repo.repo,
143
+ issue_number: context.issue.number,
144
+ body: commentBody
145
+ });
146
+ }
147
+
148
+ - name: Validation summary
149
+ if: always()
150
+ run: |
151
+ echo "## TAG Validation Summary" >> $GITHUB_STEP_SUMMARY
152
+ echo "" >> $GITHUB_STEP_SUMMARY
153
+
154
+ if [ -f validation-report.json ]; then
155
+ echo "### Info Mode Results" >> $GITHUB_STEP_SUMMARY
156
+ cat validation-report.json | python -c "import json, sys; r=json.load(sys.stdin); print(f\"- Status: {r.get('status', 'unknown')}\"); print(f\"- Errors: {r.get('statistics', {}).get('total_errors', 0)}\"); print(f\"- Warnings: {r.get('statistics', {}).get('total_warnings', 0)}\")" >> $GITHUB_STEP_SUMMARY || echo "- Could not parse report" >> $GITHUB_STEP_SUMMARY
157
+ fi
158
+
159
+ if [ -f validation-report-strict.json ]; then
160
+ echo "" >> $GITHUB_STEP_SUMMARY
161
+ echo "### Strict Mode Results" >> $GITHUB_STEP_SUMMARY
162
+ cat validation-report-strict.json | python -c "import json, sys; r=json.load(sys.stdin); print(f\"- Status: {r.get('status', 'unknown')}\"); print(f\"- Errors: {r.get('statistics', {}).get('total_errors', 0)}\"); print(f\"- Warnings: {r.get('statistics', {}).get('total_warnings', 0)}\")" >> $GITHUB_STEP_SUMMARY || echo "- Could not parse report" >> $GITHUB_STEP_SUMMARY
163
+ fi
164
+
165
+ - name: Set PR status check
166
+ if: github.event_name == 'pull_request'
167
+ run: |
168
+ if [ -f validation-report.json ]; then
169
+ STATUS=$(cat validation-report.json | python -c "import json, sys; r=json.load(sys.stdin); print('success' if r.get('is_valid', False) else 'failure')")
170
+ echo "Validation status: $STATUS"
171
+ if [ "$STATUS" = "failure" ]; then
172
+ exit 1
173
+ fi
174
+ fi
175
+
176
+ # Optional: Require TAG validation to pass before merge
177
+ # Uncomment this job to enforce strict validation
178
+ #
179
+ # require-validation:
180
+ # name: Require TAG Validation
181
+ # runs-on: ubuntu-latest
182
+ # needs: validate-tags
183
+ # if: github.event.pull_request.draft == false
184
+ # steps:
185
+ # - name: Check validation passed
186
+ # run: echo "TAG validation passed"
@@ -0,0 +1,154 @@
1
+ # @CODE:LANG-TS-001 | SPEC: SPEC-LANGUAGE-DETECTION-001.md | TEST: tests/test_workflows.py
2
+ # TypeScript Project TAG Validation Workflow
3
+ # Automatically validates TAGs with type checking, linting, and testing
4
+
5
+ name: TAG Validation (TypeScript)
6
+
7
+ on:
8
+ push:
9
+ branches: [main, develop, feature/**]
10
+ pull_request:
11
+ branches: [main, develop]
12
+
13
+ concurrency:
14
+ group: ${{ github.workflow }}-${{ github.ref }}
15
+ cancel-in-progress: true
16
+
17
+ jobs:
18
+ validate:
19
+ name: Validate TAGs - Node ${{ matrix.node-version }}
20
+ runs-on: ubuntu-latest
21
+
22
+ strategy:
23
+ matrix:
24
+ node-version: ['20', '22']
25
+ fail-fast: false
26
+
27
+ steps:
28
+ - name: Checkout repository
29
+ uses: actions/checkout@v4
30
+ with:
31
+ fetch-depth: 0
32
+
33
+ - name: Set up Node.js ${{ matrix.node-version }}
34
+ uses: actions/setup-node@v6
35
+ with:
36
+ node-version: ${{ matrix.node-version }}
37
+
38
+ - name: Detect package manager
39
+ id: detect-pm
40
+ run: |
41
+ if [ -f "bun.lockb" ]; then
42
+ echo "manager=bun" >> $GITHUB_OUTPUT
43
+ echo "lockfile=bun.lockb" >> $GITHUB_OUTPUT
44
+ elif [ -f "pnpm-lock.yaml" ]; then
45
+ echo "manager=pnpm" >> $GITHUB_OUTPUT
46
+ echo "lockfile=pnpm-lock.yaml" >> $GITHUB_OUTPUT
47
+ elif [ -f "yarn.lock" ]; then
48
+ echo "manager=yarn" >> $GITHUB_OUTPUT
49
+ echo "lockfile=yarn.lock" >> $GITHUB_OUTPUT
50
+ else
51
+ echo "manager=npm" >> $GITHUB_OUTPUT
52
+ echo "lockfile=package-lock.json" >> $GITHUB_OUTPUT
53
+ fi
54
+
55
+ - name: Setup package manager cache
56
+ uses: actions/setup-node@v6
57
+ with:
58
+ node-version: ${{ matrix.node-version }}
59
+ cache: ${{ steps.detect-pm.outputs.manager }}
60
+
61
+ - name: Install pnpm (if needed)
62
+ if: steps.detect-pm.outputs.manager == 'pnpm'
63
+ run: npm install -g pnpm
64
+
65
+ - name: Install Bun (if needed)
66
+ if: steps.detect-pm.outputs.manager == 'bun'
67
+ uses: oven-sh/setup-bun@v2
68
+
69
+ - name: Install dependencies
70
+ run: |
71
+ case "${{ steps.detect-pm.outputs.manager }}" in
72
+ npm)
73
+ npm ci
74
+ ;;
75
+ yarn)
76
+ yarn install --frozen-lockfile
77
+ ;;
78
+ pnpm)
79
+ pnpm install --frozen-lockfile
80
+ ;;
81
+ bun)
82
+ bun install --frozen-lockfile
83
+ ;;
84
+ esac
85
+
86
+ - name: Run type checking
87
+ run: |
88
+ if [ -f "tsconfig.json" ]; then
89
+ npx tsc --noEmit
90
+ else
91
+ npm run type-check || npx tsc --noEmit
92
+ fi
93
+ continue-on-error: false
94
+
95
+ - name: Run linting
96
+ run: |
97
+ if [ -f "biome.json" ]; then
98
+ npx @biomejs/biome check src/
99
+ elif command -v eslint &> /dev/null; then
100
+ npm run lint || npx eslint src/
101
+ fi
102
+ continue-on-error: false
103
+
104
+ - name: Run tests with coverage
105
+ run: npm test -- --coverage --coverage-threshold=85
106
+ continue-on-error: false
107
+
108
+ - name: Upload coverage reports
109
+ if: matrix.node-version == '22'
110
+ uses: actions/upload-artifact@v4
111
+ with:
112
+ name: coverage-report-typescript
113
+ path: coverage/
114
+
115
+ - name: Comment PR with coverage
116
+ if: github.event_name == 'pull_request' && matrix.node-version == '22'
117
+ uses: ArtiomTr/jest-coverage-report-action@v2
118
+ with:
119
+ github-token: ${{ secrets.GITHUB_TOKEN }}
120
+ threshold: 85
121
+
122
+ - name: Build project
123
+ run: |
124
+ if grep -q '"build"' package.json; then
125
+ npm run build
126
+ else
127
+ npx tsc
128
+ fi
129
+ continue-on-error: true
130
+
131
+ quality-gate:
132
+ name: Quality Gate Summary
133
+ needs: validate
134
+ runs-on: ubuntu-latest
135
+ if: always()
136
+
137
+ steps:
138
+ - name: Check validation results
139
+ run: |
140
+ if [ "${{ needs.validate.result }}" != "success" ]; then
141
+ echo "❌ TAG validation failed"
142
+ exit 1
143
+ fi
144
+ echo "✅ TAG validation passed"
145
+
146
+ - name: Quality metrics summary
147
+ run: |
148
+ echo "## Quality Metrics Summary" >> $GITHUB_STEP_SUMMARY
149
+ echo "" >> $GITHUB_STEP_SUMMARY
150
+ echo "- ✅ TypeScript tests passed" >> $GITHUB_STEP_SUMMARY
151
+ echo "- ✅ Type checking passed (tsc)" >> $GITHUB_STEP_SUMMARY
152
+ echo "- ✅ Code coverage ≥ 85%" >> $GITHUB_STEP_SUMMARY
153
+ echo "- ✅ Linting passed" >> $GITHUB_STEP_SUMMARY
154
+ echo "- ✅ TAG chain validated" >> $GITHUB_STEP_SUMMARY
@@ -4,7 +4,12 @@
4
4
  "@SPEC:PROJECT-CONFIG-001": "@SPEC:MOAI-CONFIG-001"
5
5
  },
6
6
  "moai": {
7
- "version": "{{MOAI_VERSION}}"
7
+ "version": "{{MOAI_VERSION}}",
8
+ "update_check_frequency": "daily",
9
+ "version_check": {
10
+ "enabled": true,
11
+ "cache_ttl_hours": 24
12
+ }
8
13
  },
9
14
  "constitution": {
10
15
  "enforce_tdd": true,
@@ -43,7 +48,9 @@
43
48
  "draft_pr": true,
44
49
  "feature_prefix": "feature/SPEC-",
45
50
  "main_branch": "main",
46
- "use_gitflow": true
51
+ "use_gitflow": true,
52
+ "default_pr_base": "develop",
53
+ "prevent_main_direct_merge": true
47
54
  }
48
55
  },
49
56
  "pipeline": {
@@ -92,5 +99,17 @@
92
99
  "scan_command": "rg '@TAG' -n",
93
100
  "philosophy": "The source of truth for TAGs lives in the code itself"
94
101
  }
102
+ },
103
+ "github": {
104
+ "@CODE:GITHUB-CONFIG-001": "@DOC:GITHUB-TEMPLATES-001",
105
+ "templates": {
106
+ "enable_trust_5": true,
107
+ "enable_tag_system": true,
108
+ "enable_alfred_commands": true,
109
+ "spec_directory": ".moai/specs",
110
+ "docs_directory": ".moai/docs",
111
+ "test_directory": "tests",
112
+ "notes": "Configure GitHub templates for project customization. When enable_* flags are false, corresponding MoAI-specific sections are omitted from templates."
113
+ }
95
114
  }
96
115
  }