moai-adk 0.11.0__py3-none-any.whl → 0.11.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


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

Files changed (265) hide show
  1. moai_adk/core/issue_creator.py +2 -2
  2. moai_adk/core/project/detector.py +285 -12
  3. moai_adk/templates/.claude/agents/alfred/cc-manager.md +316 -0
  4. moai_adk/templates/.claude/agents/alfred/debug-helper.md +208 -0
  5. moai_adk/templates/.claude/agents/alfred/doc-syncer.md +214 -0
  6. moai_adk/templates/.claude/agents/alfred/git-manager.md +406 -0
  7. moai_adk/templates/.claude/agents/alfred/implementation-planner.md +350 -0
  8. moai_adk/templates/.claude/agents/alfred/project-manager.md +273 -0
  9. moai_adk/templates/.claude/agents/alfred/quality-gate.md +343 -0
  10. moai_adk/templates/.claude/agents/alfred/skill-factory.md +865 -0
  11. moai_adk/templates/.claude/agents/alfred/spec-builder.md +287 -0
  12. moai_adk/templates/.claude/agents/alfred/tag-agent.md +287 -0
  13. moai_adk/templates/.claude/agents/alfred/tdd-implementer.md +326 -0
  14. moai_adk/templates/.claude/agents/alfred/trust-checker.md +375 -0
  15. moai_adk/templates/.claude/commands/alfred/0-project.md +1187 -0
  16. moai_adk/templates/.claude/commands/alfred/1-plan.md +734 -0
  17. moai_adk/templates/.claude/commands/alfred/2-run.md +551 -0
  18. moai_adk/templates/.claude/commands/alfred/3-sync.md +689 -0
  19. moai_adk/templates/.claude/commands/alfred/9-feedback.md +149 -0
  20. moai_adk/templates/.claude/hooks/alfred/alfred_hooks.py +208 -0
  21. moai_adk/templates/.claude/hooks/alfred/core/project.py +744 -0
  22. moai_adk/templates/.claude/hooks/alfred/core/timeout.py +136 -0
  23. moai_adk/templates/.claude/hooks/alfred/core/ttl_cache.py +109 -0
  24. moai_adk/templates/.claude/hooks/alfred/core/version_cache.py +198 -0
  25. moai_adk/templates/.claude/hooks/alfred/notification__handle_events.py +97 -0
  26. moai_adk/templates/.claude/hooks/alfred/post_tool__log_changes.py +97 -0
  27. moai_adk/templates/.claude/hooks/alfred/pre_tool__auto_checkpoint.py +103 -0
  28. moai_adk/templates/.claude/hooks/alfred/session_end__cleanup.py +97 -0
  29. moai_adk/templates/.claude/hooks/alfred/session_start__show_project_info.py +97 -0
  30. moai_adk/templates/.claude/hooks/alfred/shared/core/__init__.py +170 -0
  31. moai_adk/templates/.claude/hooks/alfred/shared/core/checkpoint.py +271 -0
  32. moai_adk/templates/.claude/hooks/alfred/shared/core/context.py +67 -0
  33. moai_adk/templates/.claude/hooks/alfred/shared/core/project.py +749 -0
  34. moai_adk/templates/.claude/hooks/alfred/shared/core/tags.py +230 -0
  35. moai_adk/templates/.claude/hooks/alfred/shared/core/version_cache.py +198 -0
  36. moai_adk/templates/.claude/hooks/alfred/shared/handlers/__init__.py +21 -0
  37. moai_adk/templates/.claude/hooks/alfred/shared/handlers/notification.py +156 -0
  38. moai_adk/templates/.claude/hooks/alfred/shared/handlers/session.py +174 -0
  39. moai_adk/templates/.claude/hooks/alfred/shared/handlers/tool.py +87 -0
  40. moai_adk/templates/.claude/hooks/alfred/shared/handlers/user.py +61 -0
  41. moai_adk/templates/.claude/hooks/alfred/stop__handle_interrupt.py +97 -0
  42. moai_adk/templates/.claude/hooks/alfred/subagent_stop__handle_subagent_end.py +97 -0
  43. moai_adk/templates/.claude/hooks/alfred/user_prompt__jit_load_docs.py +111 -0
  44. moai_adk/templates/.claude/hooks/alfred/utils/__init__.py +1 -0
  45. moai_adk/templates/.claude/hooks/alfred/utils/timeout.py +136 -0
  46. moai_adk/templates/.claude/output-styles/alfred/agentic-coding.md +640 -0
  47. moai_adk/templates/.claude/output-styles/alfred/moai-adk-learning.md +696 -0
  48. moai_adk/templates/.claude/output-styles/alfred/study-with-alfred.md +474 -0
  49. moai_adk/templates/.claude/settings.json +144 -0
  50. moai_adk/templates/.claude/skills/moai-alfred-ears-authoring/SKILL.md +113 -0
  51. moai_adk/templates/.claude/skills/moai-alfred-ears-authoring/examples.md +29 -0
  52. moai_adk/templates/.claude/skills/moai-alfred-ears-authoring/reference.md +28 -0
  53. moai_adk/templates/.claude/skills/moai-alfred-git-workflow/SKILL.md +122 -0
  54. moai_adk/templates/.claude/skills/moai-alfred-git-workflow/examples.md +29 -0
  55. moai_adk/templates/.claude/skills/moai-alfred-git-workflow/reference.md +29 -0
  56. moai_adk/templates/.claude/skills/moai-alfred-interactive-questions/SKILL.md +237 -0
  57. moai_adk/templates/.claude/skills/moai-alfred-interactive-questions/examples.md +615 -0
  58. moai_adk/templates/.claude/skills/moai-alfred-interactive-questions/reference.md +653 -0
  59. moai_adk/templates/.claude/skills/moai-alfred-language-detection/SKILL.md +113 -0
  60. moai_adk/templates/.claude/skills/moai-alfred-language-detection/examples.md +29 -0
  61. moai_adk/templates/.claude/skills/moai-alfred-language-detection/reference.md +28 -0
  62. moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-validation/SKILL.md +113 -0
  63. moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-validation/examples.md +29 -0
  64. moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-validation/reference.md +28 -0
  65. moai_adk/templates/.claude/skills/moai-alfred-tag-scanning/SKILL.md +113 -0
  66. moai_adk/templates/.claude/skills/moai-alfred-tag-scanning/examples.md +29 -0
  67. moai_adk/templates/.claude/skills/moai-alfred-tag-scanning/reference.md +28 -0
  68. moai_adk/templates/.claude/skills/moai-alfred-trust-validation/SKILL.md +113 -0
  69. moai_adk/templates/.claude/skills/moai-alfred-trust-validation/examples.md +29 -0
  70. moai_adk/templates/.claude/skills/moai-alfred-trust-validation/reference.md +28 -0
  71. moai_adk/templates/.claude/skills/moai-cc-agents/SKILL.md +269 -0
  72. moai_adk/templates/.claude/skills/moai-cc-agents/templates/agent-template.md +32 -0
  73. moai_adk/templates/.claude/skills/moai-cc-claude-md/SKILL.md +298 -0
  74. moai_adk/templates/.claude/skills/moai-cc-claude-md/templates/CLAUDE-template.md +26 -0
  75. moai_adk/templates/.claude/skills/moai-cc-commands/SKILL.md +307 -0
  76. moai_adk/templates/.claude/skills/moai-cc-commands/templates/command-template.md +21 -0
  77. moai_adk/templates/.claude/skills/moai-cc-hooks/SKILL.md +252 -0
  78. moai_adk/templates/.claude/skills/moai-cc-hooks/scripts/pre-bash-check.sh +19 -0
  79. moai_adk/templates/.claude/skills/moai-cc-hooks/scripts/preserve-permissions.sh +19 -0
  80. moai_adk/templates/.claude/skills/moai-cc-hooks/scripts/validate-bash-command.py +24 -0
  81. moai_adk/templates/.claude/skills/moai-cc-mcp-plugins/SKILL.md +199 -0
  82. moai_adk/templates/.claude/skills/moai-cc-mcp-plugins/templates/settings-mcp-template.json +39 -0
  83. moai_adk/templates/.claude/skills/moai-cc-memory/SKILL.md +316 -0
  84. moai_adk/templates/.claude/skills/moai-cc-memory/templates/session-summary-template.md +18 -0
  85. moai_adk/templates/.claude/skills/moai-cc-settings/SKILL.md +263 -0
  86. moai_adk/templates/.claude/skills/moai-cc-settings/templates/settings-complete-template.json +30 -0
  87. moai_adk/templates/.claude/skills/moai-cc-skills/SKILL.md +291 -0
  88. moai_adk/templates/.claude/skills/moai-cc-skills/templates/SKILL-template.md +15 -0
  89. moai_adk/templates/.claude/skills/moai-domain-backend/SKILL.md +290 -0
  90. moai_adk/templates/.claude/skills/moai-domain-backend/examples.md +1633 -0
  91. moai_adk/templates/.claude/skills/moai-domain-backend/reference.md +660 -0
  92. moai_adk/templates/.claude/skills/moai-domain-cli-tool/SKILL.md +123 -0
  93. moai_adk/templates/.claude/skills/moai-domain-cli-tool/examples.md +29 -0
  94. moai_adk/templates/.claude/skills/moai-domain-cli-tool/reference.md +30 -0
  95. moai_adk/templates/.claude/skills/moai-domain-data-science/SKILL.md +123 -0
  96. moai_adk/templates/.claude/skills/moai-domain-data-science/examples.md +29 -0
  97. moai_adk/templates/.claude/skills/moai-domain-data-science/reference.md +30 -0
  98. moai_adk/templates/.claude/skills/moai-domain-database/SKILL.md +123 -0
  99. moai_adk/templates/.claude/skills/moai-domain-database/examples.md +29 -0
  100. moai_adk/templates/.claude/skills/moai-domain-database/reference.md +30 -0
  101. moai_adk/templates/.claude/skills/moai-domain-devops/SKILL.md +124 -0
  102. moai_adk/templates/.claude/skills/moai-domain-devops/examples.md +29 -0
  103. moai_adk/templates/.claude/skills/moai-domain-devops/reference.md +31 -0
  104. moai_adk/templates/.claude/skills/moai-domain-frontend/SKILL.md +124 -0
  105. moai_adk/templates/.claude/skills/moai-domain-frontend/examples.md +29 -0
  106. moai_adk/templates/.claude/skills/moai-domain-frontend/reference.md +31 -0
  107. moai_adk/templates/.claude/skills/moai-domain-ml/SKILL.md +123 -0
  108. moai_adk/templates/.claude/skills/moai-domain-ml/examples.md +29 -0
  109. moai_adk/templates/.claude/skills/moai-domain-ml/reference.md +30 -0
  110. moai_adk/templates/.claude/skills/moai-domain-mobile-app/SKILL.md +123 -0
  111. moai_adk/templates/.claude/skills/moai-domain-mobile-app/examples.md +29 -0
  112. moai_adk/templates/.claude/skills/moai-domain-mobile-app/reference.md +30 -0
  113. moai_adk/templates/.claude/skills/moai-domain-security/SKILL.md +123 -0
  114. moai_adk/templates/.claude/skills/moai-domain-security/examples.md +29 -0
  115. moai_adk/templates/.claude/skills/moai-domain-security/reference.md +30 -0
  116. moai_adk/templates/.claude/skills/moai-domain-web-api/SKILL.md +123 -0
  117. moai_adk/templates/.claude/skills/moai-domain-web-api/examples.md +29 -0
  118. moai_adk/templates/.claude/skills/moai-domain-web-api/reference.md +30 -0
  119. moai_adk/templates/.claude/skills/moai-essentials-debug/SKILL.md +303 -0
  120. moai_adk/templates/.claude/skills/moai-essentials-debug/examples.md +1064 -0
  121. moai_adk/templates/.claude/skills/moai-essentials-debug/reference.md +1047 -0
  122. moai_adk/templates/.claude/skills/moai-essentials-perf/SKILL.md +113 -0
  123. moai_adk/templates/.claude/skills/moai-essentials-perf/examples.md +29 -0
  124. moai_adk/templates/.claude/skills/moai-essentials-perf/reference.md +28 -0
  125. moai_adk/templates/.claude/skills/moai-essentials-refactor/SKILL.md +113 -0
  126. moai_adk/templates/.claude/skills/moai-essentials-refactor/examples.md +29 -0
  127. moai_adk/templates/.claude/skills/moai-essentials-refactor/reference.md +28 -0
  128. moai_adk/templates/.claude/skills/moai-essentials-review/SKILL.md +113 -0
  129. moai_adk/templates/.claude/skills/moai-essentials-review/examples.md +29 -0
  130. moai_adk/templates/.claude/skills/moai-essentials-review/reference.md +28 -0
  131. moai_adk/templates/.claude/skills/moai-foundation-ears/SKILL.md +116 -0
  132. moai_adk/templates/.claude/skills/moai-foundation-ears/examples.md +29 -0
  133. moai_adk/templates/.claude/skills/moai-foundation-ears/reference.md +28 -0
  134. moai_adk/templates/.claude/skills/moai-foundation-git/SKILL.md +122 -0
  135. moai_adk/templates/.claude/skills/moai-foundation-git/examples.md +29 -0
  136. moai_adk/templates/.claude/skills/moai-foundation-git/reference.md +29 -0
  137. moai_adk/templates/.claude/skills/moai-foundation-langs/SKILL.md +113 -0
  138. moai_adk/templates/.claude/skills/moai-foundation-langs/examples.md +29 -0
  139. moai_adk/templates/.claude/skills/moai-foundation-langs/reference.md +28 -0
  140. moai_adk/templates/.claude/skills/moai-foundation-specs/SKILL.md +113 -0
  141. moai_adk/templates/.claude/skills/moai-foundation-specs/examples.md +29 -0
  142. moai_adk/templates/.claude/skills/moai-foundation-specs/reference.md +28 -0
  143. moai_adk/templates/.claude/skills/moai-foundation-tags/SKILL.md +113 -0
  144. moai_adk/templates/.claude/skills/moai-foundation-tags/examples.md +29 -0
  145. moai_adk/templates/.claude/skills/moai-foundation-tags/reference.md +28 -0
  146. moai_adk/templates/.claude/skills/moai-foundation-trust/SKILL.md +307 -0
  147. moai_adk/templates/.claude/skills/moai-foundation-trust/examples.md +0 -0
  148. moai_adk/templates/.claude/skills/moai-foundation-trust/reference.md +1099 -0
  149. moai_adk/templates/.claude/skills/moai-lang-c/SKILL.md +124 -0
  150. moai_adk/templates/.claude/skills/moai-lang-c/examples.md +29 -0
  151. moai_adk/templates/.claude/skills/moai-lang-c/reference.md +31 -0
  152. moai_adk/templates/.claude/skills/moai-lang-cpp/SKILL.md +124 -0
  153. moai_adk/templates/.claude/skills/moai-lang-cpp/examples.md +29 -0
  154. moai_adk/templates/.claude/skills/moai-lang-cpp/reference.md +31 -0
  155. moai_adk/templates/.claude/skills/moai-lang-csharp/SKILL.md +123 -0
  156. moai_adk/templates/.claude/skills/moai-lang-csharp/examples.md +29 -0
  157. moai_adk/templates/.claude/skills/moai-lang-csharp/reference.md +30 -0
  158. moai_adk/templates/.claude/skills/moai-lang-dart/SKILL.md +123 -0
  159. moai_adk/templates/.claude/skills/moai-lang-dart/examples.md +29 -0
  160. moai_adk/templates/.claude/skills/moai-lang-dart/reference.md +30 -0
  161. moai_adk/templates/.claude/skills/moai-lang-go/SKILL.md +124 -0
  162. moai_adk/templates/.claude/skills/moai-lang-go/examples.md +29 -0
  163. moai_adk/templates/.claude/skills/moai-lang-go/reference.md +31 -0
  164. moai_adk/templates/.claude/skills/moai-lang-java/SKILL.md +124 -0
  165. moai_adk/templates/.claude/skills/moai-lang-java/examples.md +29 -0
  166. moai_adk/templates/.claude/skills/moai-lang-java/reference.md +31 -0
  167. moai_adk/templates/.claude/skills/moai-lang-javascript/SKILL.md +125 -0
  168. moai_adk/templates/.claude/skills/moai-lang-javascript/examples.md +29 -0
  169. moai_adk/templates/.claude/skills/moai-lang-javascript/reference.md +32 -0
  170. moai_adk/templates/.claude/skills/moai-lang-kotlin/SKILL.md +124 -0
  171. moai_adk/templates/.claude/skills/moai-lang-kotlin/examples.md +29 -0
  172. moai_adk/templates/.claude/skills/moai-lang-kotlin/reference.md +31 -0
  173. moai_adk/templates/.claude/skills/moai-lang-php/SKILL.md +123 -0
  174. moai_adk/templates/.claude/skills/moai-lang-php/examples.md +29 -0
  175. moai_adk/templates/.claude/skills/moai-lang-php/reference.md +30 -0
  176. moai_adk/templates/.claude/skills/moai-lang-python/SKILL.md +431 -0
  177. moai_adk/templates/.claude/skills/moai-lang-python/examples.md +624 -0
  178. moai_adk/templates/.claude/skills/moai-lang-python/reference.md +316 -0
  179. moai_adk/templates/.claude/skills/moai-lang-r/SKILL.md +123 -0
  180. moai_adk/templates/.claude/skills/moai-lang-r/examples.md +29 -0
  181. moai_adk/templates/.claude/skills/moai-lang-r/reference.md +30 -0
  182. moai_adk/templates/.claude/skills/moai-lang-ruby/SKILL.md +124 -0
  183. moai_adk/templates/.claude/skills/moai-lang-ruby/examples.md +29 -0
  184. moai_adk/templates/.claude/skills/moai-lang-ruby/reference.md +31 -0
  185. moai_adk/templates/.claude/skills/moai-lang-rust/SKILL.md +124 -0
  186. moai_adk/templates/.claude/skills/moai-lang-rust/examples.md +29 -0
  187. moai_adk/templates/.claude/skills/moai-lang-rust/reference.md +31 -0
  188. moai_adk/templates/.claude/skills/moai-lang-scala/SKILL.md +123 -0
  189. moai_adk/templates/.claude/skills/moai-lang-scala/examples.md +29 -0
  190. moai_adk/templates/.claude/skills/moai-lang-scala/reference.md +30 -0
  191. moai_adk/templates/.claude/skills/moai-lang-shell/SKILL.md +123 -0
  192. moai_adk/templates/.claude/skills/moai-lang-shell/examples.md +29 -0
  193. moai_adk/templates/.claude/skills/moai-lang-shell/reference.md +30 -0
  194. moai_adk/templates/.claude/skills/moai-lang-sql/SKILL.md +124 -0
  195. moai_adk/templates/.claude/skills/moai-lang-sql/examples.md +29 -0
  196. moai_adk/templates/.claude/skills/moai-lang-sql/reference.md +31 -0
  197. moai_adk/templates/.claude/skills/moai-lang-swift/SKILL.md +123 -0
  198. moai_adk/templates/.claude/skills/moai-lang-swift/examples.md +29 -0
  199. moai_adk/templates/.claude/skills/moai-lang-swift/reference.md +30 -0
  200. moai_adk/templates/.claude/skills/moai-lang-typescript/SKILL.md +127 -0
  201. moai_adk/templates/.claude/skills/moai-lang-typescript/examples.md +29 -0
  202. moai_adk/templates/.claude/skills/moai-lang-typescript/reference.md +34 -0
  203. moai_adk/templates/.claude/skills/moai-skill-factory/CHECKLIST.md +482 -0
  204. moai_adk/templates/.claude/skills/moai-skill-factory/EXAMPLES.md +278 -0
  205. moai_adk/templates/.claude/skills/moai-skill-factory/INTERACTIVE-DISCOVERY.md +524 -0
  206. moai_adk/templates/.claude/skills/moai-skill-factory/METADATA.md +477 -0
  207. moai_adk/templates/.claude/skills/moai-skill-factory/PARALLEL-ANALYSIS-REPORT.md +429 -0
  208. moai_adk/templates/.claude/skills/moai-skill-factory/PYTHON-VERSION-MATRIX.md +391 -0
  209. moai_adk/templates/.claude/skills/moai-skill-factory/SKILL-FACTORY-WORKFLOW.md +431 -0
  210. moai_adk/templates/.claude/skills/moai-skill-factory/SKILL-UPDATE-ADVISOR.md +577 -0
  211. moai_adk/templates/.claude/skills/moai-skill-factory/SKILL.md +271 -0
  212. moai_adk/templates/.claude/skills/moai-skill-factory/STEP-BY-STEP-GUIDE.md +466 -0
  213. moai_adk/templates/.claude/skills/moai-skill-factory/STRUCTURE.md +583 -0
  214. moai_adk/templates/.claude/skills/moai-skill-factory/WEB-RESEARCH.md +526 -0
  215. moai_adk/templates/.claude/skills/moai-skill-factory/reference.md +465 -0
  216. moai_adk/templates/.claude/skills/moai-skill-factory/scripts/generate-structure.sh +328 -0
  217. moai_adk/templates/.claude/skills/moai-skill-factory/scripts/validate-skill.sh +312 -0
  218. moai_adk/templates/.claude/skills/moai-skill-factory/templates/SKILL_TEMPLATE.md +245 -0
  219. moai_adk/templates/.claude/skills/moai-skill-factory/templates/examples-template.md +285 -0
  220. moai_adk/templates/.claude/skills/moai-skill-factory/templates/reference-template.md +278 -0
  221. moai_adk/templates/.claude/skills/moai-skill-factory/templates/scripts-template.sh +303 -0
  222. moai_adk/templates/.claude/skills/moai-spec-authoring/README.md +137 -0
  223. moai_adk/templates/.claude/skills/moai-spec-authoring/SKILL.md +219 -0
  224. moai_adk/templates/.claude/skills/moai-spec-authoring/examples/validate-spec.sh +161 -0
  225. moai_adk/templates/.claude/skills/moai-spec-authoring/examples.md +541 -0
  226. moai_adk/templates/.claude/skills/moai-spec-authoring/reference.md +622 -0
  227. moai_adk/templates/.github/workflows/c-tag-validation.yml +83 -0
  228. moai_adk/templates/.github/workflows/cpp-tag-validation.yml +79 -0
  229. moai_adk/templates/.github/workflows/csharp-tag-validation.yml +65 -0
  230. moai_adk/templates/.github/workflows/dart-tag-validation.yml +82 -0
  231. moai_adk/templates/.github/workflows/java-tag-validation.yml +75 -0
  232. moai_adk/templates/.github/workflows/kotlin-tag-validation.yml +67 -0
  233. moai_adk/templates/.github/workflows/php-tag-validation.yml +56 -0
  234. moai_adk/templates/.github/workflows/ruby-tag-validation.yml +68 -0
  235. moai_adk/templates/.github/workflows/rust-tag-validation.yml +73 -0
  236. moai_adk/templates/.github/workflows/shell-tag-validation.yml +65 -0
  237. moai_adk/templates/.github/workflows/swift-tag-validation.yml +79 -0
  238. moai_adk/templates/.moai/config.json +113 -0
  239. moai_adk/templates/.moai/memory/CLAUDE-AGENTS-GUIDE.md +208 -0
  240. moai_adk/templates/.moai/memory/CLAUDE-PRACTICES.md +369 -0
  241. moai_adk/templates/.moai/memory/CLAUDE-RULES.md +539 -0
  242. moai_adk/templates/.moai/memory/DEVELOPMENT-GUIDE.md +344 -0
  243. moai_adk/templates/.moai/memory/GITFLOW-PROTECTION-POLICY.md +330 -0
  244. moai_adk/templates/.moai/memory/ISSUE-LABEL-MAPPING.md +150 -0
  245. moai_adk/templates/.moai/memory/SKILLS-DESCRIPTION-POLICY.md +218 -0
  246. moai_adk/templates/.moai/memory/SPEC-METADATA.md +356 -0
  247. moai_adk/templates/.moai/memory/gitflow-protection-policy.md +330 -0
  248. moai_adk/templates/.moai/memory/spec-metadata.md +356 -0
  249. moai_adk/templates/.moai/project/product.md +161 -0
  250. moai_adk/templates/.moai/project/structure.md +156 -0
  251. moai_adk/templates/.moai/project/tech.md +227 -0
  252. moai_adk/templates/CLAUDE.md +90 -10
  253. moai_adk/templates/workflows/go-tag-validation.yml +130 -0
  254. moai_adk/templates/workflows/javascript-tag-validation.yml +135 -0
  255. moai_adk/templates/workflows/python-tag-validation.yml +118 -0
  256. moai_adk/templates/workflows/typescript-tag-validation.yml +154 -0
  257. {moai_adk-0.11.0.dist-info → moai_adk-0.11.1.dist-info}/METADATA +43 -1
  258. moai_adk-0.11.1.dist-info/RECORD +330 -0
  259. moai_adk-0.11.0.dist-info/RECORD +0 -77
  260. /moai_adk/templates/.github/workflows/{release.yml → moai-adk-release.yml} +0 -0
  261. /moai_adk/templates/.github/workflows/{spec-issue-sync.yml → moai-adk-spec-issue-sync.yml} +0 -0
  262. /moai_adk/templates/.github/workflows/{tag-validation.yml → moai-adk-tag-validation.yml} +0 -0
  263. {moai_adk-0.11.0.dist-info → moai_adk-0.11.1.dist-info}/WHEEL +0 -0
  264. {moai_adk-0.11.0.dist-info → moai_adk-0.11.1.dist-info}/entry_points.txt +0 -0
  265. {moai_adk-0.11.0.dist-info → moai_adk-0.11.1.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,1099 @@
1
+ # TRUST Validation Reference Guide
2
+
3
+ ## Quick Reference
4
+
5
+ This document provides comprehensive CLI commands, configuration templates, and tool setup instructions for implementing TRUST 5-principles validation across all supported languages.
6
+
7
+ ---
8
+
9
+ ## T - Test First: CLI Command Matrix
10
+
11
+ ### Python (pytest 8.4.2)
12
+
13
+ **Installation**:
14
+ ```bash
15
+ pip install pytest==8.4.2 pytest-cov==5.0.0 pytest-xdist==3.6.1
16
+ ```
17
+
18
+ **Basic Coverage**:
19
+ ```bash
20
+ pytest --cov=src --cov-report=term-missing
21
+ ```
22
+
23
+ **Coverage with Threshold**:
24
+ ```bash
25
+ pytest --cov=src --cov-report=term-missing --cov-fail-under=85
26
+ ```
27
+
28
+ **Coverage Reports (Multiple Formats)**:
29
+ ```bash
30
+ pytest --cov=src --cov-report=html --cov-report=xml --cov-report=term
31
+ ```
32
+
33
+ **Parallel Execution**:
34
+ ```bash
35
+ pytest -n auto --cov=src --cov-report=term-missing
36
+ ```
37
+
38
+ **Configuration** (`pyproject.toml`):
39
+ ```toml
40
+ [tool.pytest.ini_options]
41
+ testpaths = ["tests"]
42
+ python_files = ["test_*.py", "*_test.py"]
43
+ addopts = [
44
+ "--cov=src",
45
+ "--cov-report=term-missing",
46
+ "--cov-fail-under=85",
47
+ "--strict-markers",
48
+ "--disable-warnings"
49
+ ]
50
+
51
+ [tool.coverage.run]
52
+ branch = true
53
+ source = ["src"]
54
+ omit = ["*/tests/*", "*/migrations/*", "*/__pycache__/*"]
55
+
56
+ [tool.coverage.report]
57
+ exclude_lines = [
58
+ "pragma: no cover",
59
+ "def __repr__",
60
+ "raise AssertionError",
61
+ "raise NotImplementedError",
62
+ "if __name__ == .__main__.:",
63
+ "if TYPE_CHECKING:",
64
+ ]
65
+ ```
66
+
67
+ ---
68
+
69
+ ### TypeScript/JavaScript (Vitest 2.0.5)
70
+
71
+ **Installation**:
72
+ ```bash
73
+ npm install -D vitest@2.0.5 @vitest/coverage-v8@2.0.5
74
+ ```
75
+
76
+ **Basic Coverage**:
77
+ ```bash
78
+ vitest run --coverage
79
+ ```
80
+
81
+ **Coverage with Threshold**:
82
+ ```bash
83
+ vitest run --coverage --coverage.thresholds.lines=85 --coverage.thresholds.branches=80
84
+ ```
85
+
86
+ **Watch Mode**:
87
+ ```bash
88
+ vitest --coverage --watch
89
+ ```
90
+
91
+ **Configuration** (`vitest.config.ts`):
92
+ ```typescript
93
+ import { defineConfig } from 'vitest/config';
94
+
95
+ export default defineConfig({
96
+ test: {
97
+ globals: true,
98
+ environment: 'node',
99
+ coverage: {
100
+ provider: 'v8',
101
+ reporter: ['text', 'html', 'lcov'],
102
+ exclude: [
103
+ 'node_modules/',
104
+ 'dist/',
105
+ '**/*.spec.ts',
106
+ '**/*.test.ts',
107
+ '**/types/**',
108
+ ],
109
+ thresholds: {
110
+ lines: 85,
111
+ branches: 80,
112
+ functions: 85,
113
+ statements: 85,
114
+ },
115
+ },
116
+ },
117
+ });
118
+ ```
119
+
120
+ ---
121
+
122
+ ### JavaScript (Jest 29.x)
123
+
124
+ **Installation**:
125
+ ```bash
126
+ npm install -D jest@29 @types/jest
127
+ ```
128
+
129
+ **Basic Coverage**:
130
+ ```bash
131
+ jest --coverage
132
+ ```
133
+
134
+ **Coverage with Threshold**:
135
+ ```bash
136
+ jest --coverage --coverageThreshold='{"global":{"lines":85,"branches":80}}'
137
+ ```
138
+
139
+ **Configuration** (`jest.config.js`):
140
+ ```javascript
141
+ module.exports = {
142
+ testEnvironment: 'node',
143
+ collectCoverageFrom: [
144
+ 'src/**/*.{js,jsx}',
145
+ '!src/**/*.test.{js,jsx}',
146
+ '!src/**/__tests__/**',
147
+ ],
148
+ coverageThreshold: {
149
+ global: {
150
+ lines: 85,
151
+ branches: 80,
152
+ functions: 85,
153
+ statements: 85,
154
+ },
155
+ },
156
+ coverageReporters: ['text', 'html', 'lcov'],
157
+ };
158
+ ```
159
+
160
+ ---
161
+
162
+ ### Go (testing 1.23)
163
+
164
+ **Basic Tests**:
165
+ ```bash
166
+ go test ./...
167
+ ```
168
+
169
+ **Coverage Report**:
170
+ ```bash
171
+ go test ./... -cover -coverprofile=coverage.out
172
+ ```
173
+
174
+ **Coverage by Package**:
175
+ ```bash
176
+ go test ./... -coverprofile=coverage.out -covermode=atomic
177
+ go tool cover -html=coverage.out -o coverage.html
178
+ ```
179
+
180
+ **Coverage Threshold Check**:
181
+ ```bash
182
+ # Custom script for threshold enforcement
183
+ go test ./... -coverprofile=coverage.out -covermode=atomic
184
+ go tool cover -func=coverage.out | grep total | awk '{print $3}' | sed 's/%//' | awk '{if($1<85)exit 1}'
185
+ ```
186
+
187
+ **Makefile Example**:
188
+ ```makefile
189
+ .PHONY: test coverage
190
+
191
+ test:
192
+ go test -v ./...
193
+
194
+ coverage:
195
+ go test -coverprofile=coverage.out -covermode=atomic ./...
196
+ go tool cover -html=coverage.out -o coverage.html
197
+ @echo "Coverage report: coverage.html"
198
+
199
+ coverage-check:
200
+ @go test -coverprofile=coverage.out -covermode=atomic ./...
201
+ @go tool cover -func=coverage.out | grep total | awk '{print "Total coverage: " $$3}'
202
+ @go tool cover -func=coverage.out | grep total | awk '{print $$3}' | sed 's/%//' | \
203
+ awk '{if($$1<85){print "FAIL: Coverage below 85%"; exit 1}else{print "PASS: Coverage >= 85%"}}'
204
+ ```
205
+
206
+ ---
207
+
208
+ ### Rust (cargo test 1.82.0)
209
+
210
+ **Basic Tests**:
211
+ ```bash
212
+ cargo test
213
+ ```
214
+
215
+ **Coverage with tarpaulin**:
216
+ ```bash
217
+ cargo install cargo-tarpaulin
218
+ cargo tarpaulin --out Xml --output-dir coverage/ --fail-under 85
219
+ ```
220
+
221
+ **Coverage with HTML Report**:
222
+ ```bash
223
+ cargo tarpaulin --out Html --output-dir coverage/
224
+ ```
225
+
226
+ **Configuration** (`Cargo.toml`):
227
+ ```toml
228
+ [package]
229
+ name = "my-project"
230
+ version = "0.1.0"
231
+
232
+ [dependencies]
233
+
234
+ [dev-dependencies]
235
+
236
+ [profile.test]
237
+ opt-level = 0
238
+
239
+ # Coverage configuration
240
+ [package.metadata.tarpaulin]
241
+ exclude-files = ["target/*", "tests/*"]
242
+ out = ["Html", "Xml"]
243
+ output-dir = "coverage/"
244
+ fail-under = 85
245
+ ```
246
+
247
+ ---
248
+
249
+ ### Java/Kotlin (JUnit 5.10.x + JaCoCo)
250
+
251
+ **Gradle Configuration** (`build.gradle.kts`):
252
+ ```kotlin
253
+ plugins {
254
+ kotlin("jvm") version "1.9.22"
255
+ jacoco
256
+ }
257
+
258
+ jacoco {
259
+ toolVersion = "0.8.11"
260
+ }
261
+
262
+ tasks.test {
263
+ useJUnitPlatform()
264
+ finalizedBy(tasks.jacocoTestReport)
265
+ }
266
+
267
+ tasks.jacocoTestReport {
268
+ dependsOn(tasks.test)
269
+ reports {
270
+ xml.required.set(true)
271
+ html.required.set(true)
272
+ csv.required.set(false)
273
+ }
274
+ }
275
+
276
+ tasks.jacocoTestCoverageVerification {
277
+ violationRules {
278
+ rule {
279
+ limit {
280
+ minimum = "0.85".toBigDecimal()
281
+ }
282
+ }
283
+ }
284
+ }
285
+ ```
286
+
287
+ **Commands**:
288
+ ```bash
289
+ ./gradlew test jacocoTestReport
290
+ ./gradlew jacocoTestCoverageVerification
291
+ ```
292
+
293
+ ---
294
+
295
+ ## R - Readable: Linting & Formatting
296
+
297
+ ### Python (ruff 0.6.x)
298
+
299
+ **Installation**:
300
+ ```bash
301
+ pip install ruff==0.6.8
302
+ ```
303
+
304
+ **Commands**:
305
+ ```bash
306
+ ruff check . # Check only
307
+ ruff check . --fix # Auto-fix
308
+ ruff format . # Format code
309
+ ruff check . --statistics # Show statistics
310
+ ```
311
+
312
+ **Configuration** (`pyproject.toml`):
313
+ ```toml
314
+ [tool.ruff]
315
+ line-length = 100
316
+ target-version = "py311"
317
+
318
+ [tool.ruff.lint]
319
+ select = [
320
+ "E", # pycodestyle errors
321
+ "W", # pycodestyle warnings
322
+ "F", # pyflakes
323
+ "I", # isort
324
+ "N", # pep8-naming
325
+ "UP", # pyupgrade
326
+ "B", # flake8-bugbear
327
+ "C4", # flake8-comprehensions
328
+ "SIM", # flake8-simplify
329
+ ]
330
+ ignore = ["E501"] # line too long (handled by formatter)
331
+
332
+ [tool.ruff.lint.per-file-ignores]
333
+ "__init__.py" = ["F401"] # unused imports
334
+ "tests/**" = ["S101"] # allow assert in tests
335
+
336
+ [tool.ruff.lint.mccabe]
337
+ max-complexity = 10
338
+ ```
339
+
340
+ ---
341
+
342
+ ### TypeScript/JavaScript (Biome 1.9.x)
343
+
344
+ **Installation**:
345
+ ```bash
346
+ npm install -D @biomejs/biome@1.9.0
347
+ ```
348
+
349
+ **Commands**:
350
+ ```bash
351
+ biome check . # Check all
352
+ biome check --apply . # Auto-fix
353
+ biome format . # Format only
354
+ biome lint . # Lint only
355
+ ```
356
+
357
+ **Configuration** (`biome.json`):
358
+ ```json
359
+ {
360
+ "$schema": "https://biomejs.dev/schemas/1.9.0/schema.json",
361
+ "organizeImports": {
362
+ "enabled": true
363
+ },
364
+ "linter": {
365
+ "enabled": true,
366
+ "rules": {
367
+ "recommended": true,
368
+ "complexity": {
369
+ "noExtraBooleanCast": "error",
370
+ "noMultipleSpacesInRegularExpressionLiterals": "error",
371
+ "noUselessCatch": "error",
372
+ "noUselessConstructor": "error"
373
+ },
374
+ "correctness": {
375
+ "noUnusedVariables": "error",
376
+ "useExhaustiveDependencies": "warn"
377
+ },
378
+ "suspicious": {
379
+ "noExplicitAny": "warn"
380
+ }
381
+ }
382
+ },
383
+ "formatter": {
384
+ "enabled": true,
385
+ "formatWithErrors": false,
386
+ "indentStyle": "space",
387
+ "indentWidth": 2,
388
+ "lineWidth": 100
389
+ },
390
+ "javascript": {
391
+ "formatter": {
392
+ "quoteStyle": "single",
393
+ "semicolons": "always"
394
+ }
395
+ }
396
+ }
397
+ ```
398
+
399
+ ---
400
+
401
+ ### Go (golangci-lint 1.60.x)
402
+
403
+ **Installation**:
404
+ ```bash
405
+ # Binary installation
406
+ curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin v1.60.3
407
+ ```
408
+
409
+ **Commands**:
410
+ ```bash
411
+ golangci-lint run # Run all linters
412
+ golangci-lint run --fix # Auto-fix
413
+ golangci-lint run --enable-all # Enable all linters
414
+ ```
415
+
416
+ **Configuration** (`.golangci.yml`):
417
+ ```yaml
418
+ run:
419
+ timeout: 5m
420
+ tests: true
421
+
422
+ linters:
423
+ enable:
424
+ - gofmt
425
+ - goimports
426
+ - govet
427
+ - staticcheck
428
+ - errcheck
429
+ - gosimple
430
+ - ineffassign
431
+ - unused
432
+ - misspell
433
+ - gocyclo
434
+ - dupl
435
+ - goconst
436
+ - gocognit
437
+
438
+ linters-settings:
439
+ gocyclo:
440
+ min-complexity: 10
441
+ dupl:
442
+ threshold: 100
443
+ goconst:
444
+ min-len: 3
445
+ min-occurrences: 3
446
+ gocognit:
447
+ min-complexity: 15
448
+
449
+ issues:
450
+ exclude-use-default: false
451
+ max-issues-per-linter: 0
452
+ max-same-issues: 0
453
+ ```
454
+
455
+ ---
456
+
457
+ ### Rust (clippy 1.82.0)
458
+
459
+ **Commands**:
460
+ ```bash
461
+ cargo clippy # Basic check
462
+ cargo clippy -- -D warnings # Treat warnings as errors
463
+ cargo clippy --all-targets # Check all targets
464
+ cargo fmt # Format code
465
+ cargo fmt -- --check # Check formatting
466
+ ```
467
+
468
+ **Configuration** (`clippy.toml`):
469
+ ```toml
470
+ # Clippy configuration
471
+ disallowed-methods = [
472
+ "std::env::set_var",
473
+ ]
474
+
475
+ cognitive-complexity-threshold = 10
476
+ ```
477
+
478
+ ---
479
+
480
+ ## U - Unified: Type Checking
481
+
482
+ ### Python (mypy 1.11.x)
483
+
484
+ **Installation**:
485
+ ```bash
486
+ pip install mypy==1.11.2
487
+ ```
488
+
489
+ **Commands**:
490
+ ```bash
491
+ mypy src/ # Check src directory
492
+ mypy src/ --strict # Strict mode
493
+ mypy src/ --no-error-summary # Quiet mode
494
+ mypy src/ --install-types # Install missing type stubs
495
+ ```
496
+
497
+ **Configuration** (`pyproject.toml`):
498
+ ```toml
499
+ [tool.mypy]
500
+ python_version = "3.11"
501
+ strict = true
502
+ warn_return_any = true
503
+ warn_unused_configs = true
504
+ disallow_untyped_defs = true
505
+ disallow_any_generics = true
506
+ check_untyped_defs = true
507
+ no_implicit_optional = true
508
+ warn_redundant_casts = true
509
+ warn_unused_ignores = true
510
+ warn_no_return = true
511
+ warn_unreachable = true
512
+
513
+ [[tool.mypy.overrides]]
514
+ module = "tests.*"
515
+ disallow_untyped_defs = false
516
+ ```
517
+
518
+ ---
519
+
520
+ ### TypeScript (tsc 5.6.x)
521
+
522
+ **Commands**:
523
+ ```bash
524
+ tsc --noEmit # Type check only
525
+ tsc --noEmit --strict # Strict mode
526
+ tsc --noEmit --watch # Watch mode
527
+ ```
528
+
529
+ **Configuration** (`tsconfig.json`):
530
+ ```json
531
+ {
532
+ "compilerOptions": {
533
+ "target": "ES2022",
534
+ "module": "ESNext",
535
+ "lib": ["ES2022"],
536
+ "strict": true,
537
+ "noImplicitAny": true,
538
+ "strictNullChecks": true,
539
+ "strictFunctionTypes": true,
540
+ "strictBindCallApply": true,
541
+ "strictPropertyInitialization": true,
542
+ "noImplicitThis": true,
543
+ "alwaysStrict": true,
544
+ "noUnusedLocals": true,
545
+ "noUnusedParameters": true,
546
+ "noImplicitReturns": true,
547
+ "noFallthroughCasesInSwitch": true,
548
+ "esModuleInterop": true,
549
+ "skipLibCheck": true,
550
+ "forceConsistentCasingInFileNames": true
551
+ },
552
+ "include": ["src/**/*"],
553
+ "exclude": ["node_modules", "dist"]
554
+ }
555
+ ```
556
+
557
+ ---
558
+
559
+ ## S - Secured: SAST Tools
560
+
561
+ ### detect-secrets 1.4.x
562
+
563
+ **Installation**:
564
+ ```bash
565
+ pip install detect-secrets==1.4.0
566
+ ```
567
+
568
+ **Commands**:
569
+ ```bash
570
+ # Create baseline
571
+ detect-secrets scan > .secrets.baseline
572
+
573
+ # Scan against baseline
574
+ detect-secrets scan --baseline .secrets.baseline
575
+
576
+ # Audit findings
577
+ detect-secrets audit .secrets.baseline
578
+
579
+ # Update baseline
580
+ detect-secrets scan --baseline .secrets.baseline --update
581
+ ```
582
+
583
+ **Pre-commit Hook** (`.pre-commit-config.yaml`):
584
+ ```yaml
585
+ repos:
586
+ - repo: https://github.com/Yelp/detect-secrets
587
+ rev: v1.4.0
588
+ hooks:
589
+ - id: detect-secrets
590
+ args: ['--baseline', '.secrets.baseline']
591
+ ```
592
+
593
+ ---
594
+
595
+ ### Trivy 0.56.x
596
+
597
+ **Installation**:
598
+ ```bash
599
+ # macOS
600
+ brew install aquasecurity/trivy/trivy
601
+
602
+ # Linux
603
+ wget -qO - https://aquasecurity.github.io/trivy-repo/deb/public.key | sudo apt-key add -
604
+ echo "deb https://aquasecurity.github.io/trivy-repo/deb $(lsb_release -sc) main" | sudo tee -a /etc/apt/sources.list.d/trivy.list
605
+ sudo apt-get update
606
+ sudo apt-get install trivy
607
+ ```
608
+
609
+ **Commands**:
610
+ ```bash
611
+ # Filesystem scan
612
+ trivy fs .
613
+
614
+ # Scan with severity filter
615
+ trivy fs --severity HIGH,CRITICAL .
616
+
617
+ # Exit on vulnerabilities
618
+ trivy fs --severity HIGH,CRITICAL --exit-code 1 .
619
+
620
+ # Output formats
621
+ trivy fs --format json --output result.json .
622
+ trivy fs --format sarif --output result.sarif .
623
+ ```
624
+
625
+ **Configuration** (`trivy.yaml`):
626
+ ```yaml
627
+ severity: HIGH,CRITICAL
628
+ exit-code: 1
629
+ timeout: 5m
630
+ cache:
631
+ dir: .trivy-cache
632
+ ```
633
+
634
+ ---
635
+
636
+ ### Semgrep 1.94.x
637
+
638
+ **Installation**:
639
+ ```bash
640
+ pip install semgrep==1.94.0
641
+ ```
642
+
643
+ **Commands**:
644
+ ```bash
645
+ # Auto configuration (recommended)
646
+ semgrep --config=auto .
647
+
648
+ # Specific rulesets
649
+ semgrep --config=p/owasp-top-ten .
650
+ semgrep --config=p/security-audit .
651
+
652
+ # Exit on findings
653
+ semgrep --config=auto --error .
654
+
655
+ # Output formats
656
+ semgrep --config=auto --json --output=results.json .
657
+ semgrep --config=auto --sarif --output=results.sarif .
658
+ ```
659
+
660
+ **Configuration** (`.semgrep.yml`):
661
+ ```yaml
662
+ rules:
663
+ - id: hardcoded-secret
664
+ pattern: |
665
+ password = "..."
666
+ message: Hardcoded password detected
667
+ severity: ERROR
668
+ languages: [python, javascript, typescript]
669
+ ```
670
+
671
+ ---
672
+
673
+ ### Bandit 1.7.x (Python)
674
+
675
+ **Installation**:
676
+ ```bash
677
+ pip install bandit==1.7.9
678
+ ```
679
+
680
+ **Commands**:
681
+ ```bash
682
+ bandit -r src/ # Scan src directory
683
+ bandit -r src/ -ll # High severity only
684
+ bandit -r src/ -f json # JSON output
685
+ ```
686
+
687
+ **Configuration** (`.bandit`):
688
+ ```yaml
689
+ exclude_dirs:
690
+ - /tests
691
+ - /venv
692
+
693
+ tests:
694
+ - B201 # flask_debug_true
695
+ - B301 # pickle
696
+ - B302 # marshal
697
+ - B303 # md5
698
+ - B304 # ciphers
699
+ - B305 # cipher_modes
700
+ - B306 # mktemp_q
701
+ - B307 # eval
702
+ - B308 # mark_safe
703
+ - B309 # httpsconnection
704
+ - B310 # urllib_urlopen
705
+ ```
706
+
707
+ ---
708
+
709
+ ## T - Trackable: TAG Validation
710
+
711
+ ### TAG Scanning Commands
712
+
713
+ **Find all TAGs**:
714
+ ```bash
715
+ rg '@(SPEC|TEST|CODE|DOC):' -n .moai/specs/ tests/ src/ docs/
716
+ ```
717
+
718
+ **Find specific TAG**:
719
+ ```bash
720
+ rg '@CODE:AUTH-001' -n src/
721
+ ```
722
+
723
+ **Find orphaned TAGs** (CODE without SPEC):
724
+ ```bash
725
+ # 1. Extract all CODE TAGs
726
+ rg '@CODE:([A-Z]+-\d+)' -or '$1' src/ | sort -u > code_tags.txt
727
+
728
+ # 2. Extract all SPEC TAGs
729
+ rg '@SPEC:([A-Z]+-\d+)' -or '$1' .moai/specs/ | sort -u > spec_tags.txt
730
+
731
+ # 3. Find orphans (in CODE but not in SPEC)
732
+ comm -23 code_tags.txt spec_tags.txt
733
+ ```
734
+
735
+ **TAG Chain Validation Script** (`scripts/validate-tags.sh`):
736
+ ```bash
737
+ #!/bin/bash
738
+ set -e
739
+
740
+ echo "Validating TAG chains..."
741
+
742
+ # Find all TAGs
743
+ ALL_TAGS=$(rg '@(SPEC|TEST|CODE|DOC):([A-Z]+-\d+)' -or '$2' .moai/specs/ tests/ src/ docs/ 2>/dev/null | sort -u)
744
+
745
+ ERRORS=0
746
+
747
+ for TAG in $ALL_TAGS; do
748
+ SPEC_COUNT=$(rg "@SPEC:$TAG" -c .moai/specs/ 2>/dev/null | awk -F: '{sum+=$2} END {print sum}')
749
+ CODE_COUNT=$(rg "@CODE:$TAG" -c src/ 2>/dev/null | awk -F: '{sum+=$2} END {print sum}')
750
+ TEST_COUNT=$(rg "@TEST:$TAG" -c tests/ 2>/dev/null | awk -F: '{sum+=$2} END {print sum}')
751
+
752
+ echo "TAG $TAG: SPEC=$SPEC_COUNT CODE=$CODE_COUNT TEST=$TEST_COUNT"
753
+
754
+ if [ "$CODE_COUNT" -gt 0 ] && [ "$SPEC_COUNT" -eq 0 ]; then
755
+ echo " ERROR: CODE exists but SPEC missing"
756
+ ERRORS=$((ERRORS + 1))
757
+ fi
758
+
759
+ if [ "$CODE_COUNT" -gt 0 ] && [ "$TEST_COUNT" -eq 0 ]; then
760
+ echo " WARNING: CODE exists but TEST missing"
761
+ fi
762
+ done
763
+
764
+ if [ $ERRORS -gt 0 ]; then
765
+ echo "TAG validation FAILED with $ERRORS errors"
766
+ exit 1
767
+ fi
768
+
769
+ echo "TAG validation PASSED"
770
+ ```
771
+
772
+ ---
773
+
774
+ ## CI/CD Integration Examples
775
+
776
+ ### GitHub Actions (Python Project)
777
+
778
+ **File**: `.github/workflows/trust-check.yml`
779
+
780
+ ```yaml
781
+ name: TRUST Validation
782
+
783
+ on:
784
+ pull_request:
785
+ push:
786
+ branches: [main, develop]
787
+
788
+ jobs:
789
+ trust-gate:
790
+ runs-on: ubuntu-latest
791
+
792
+ steps:
793
+ - name: Checkout code
794
+ uses: actions/checkout@v4
795
+
796
+ - name: Set up Python
797
+ uses: actions/setup-python@v5
798
+ with:
799
+ python-version: '3.11'
800
+ cache: 'pip'
801
+
802
+ - name: Install dependencies
803
+ run: |
804
+ pip install -r requirements.txt
805
+ pip install pytest pytest-cov ruff mypy detect-secrets
806
+
807
+ # T - Test First
808
+ - name: Run tests with coverage
809
+ run: |
810
+ pytest --cov=src --cov-report=xml --cov-report=term --cov-fail-under=85
811
+
812
+ - name: Upload coverage to Codecov
813
+ uses: codecov/codecov-action@v4
814
+ with:
815
+ file: ./coverage.xml
816
+ fail_ci_if_error: true
817
+
818
+ # R - Readable
819
+ - name: Lint with ruff
820
+ run: ruff check .
821
+
822
+ # U - Unified
823
+ - name: Type check with mypy
824
+ run: mypy src/ --strict
825
+
826
+ # S - Secured
827
+ - name: Scan for secrets
828
+ run: detect-secrets scan --baseline .secrets.baseline
829
+
830
+ - name: Security scan with Trivy
831
+ uses: aquasecurity/trivy-action@master
832
+ with:
833
+ scan-type: 'fs'
834
+ scan-ref: '.'
835
+ severity: 'HIGH,CRITICAL'
836
+ exit-code: '1'
837
+
838
+ - name: SAST with Semgrep
839
+ run: |
840
+ pip install semgrep
841
+ semgrep --config=auto --error .
842
+
843
+ # T - Trackable
844
+ - name: Validate TAG chains
845
+ run: |
846
+ chmod +x scripts/validate-tags.sh
847
+ ./scripts/validate-tags.sh
848
+
849
+ - name: TRUST gate summary
850
+ if: always()
851
+ run: |
852
+ echo "## TRUST Validation Results" >> $GITHUB_STEP_SUMMARY
853
+ echo "- Test coverage: $(grep -oP 'TOTAL.*\K\d+%' coverage.txt || echo 'N/A')" >> $GITHUB_STEP_SUMMARY
854
+ echo "- Linting: $(ruff check . --statistics | tail -1)" >> $GITHUB_STEP_SUMMARY
855
+ ```
856
+
857
+ ---
858
+
859
+ ### GitHub Actions (TypeScript Project)
860
+
861
+ **File**: `.github/workflows/trust-check.yml`
862
+
863
+ ```yaml
864
+ name: TRUST Validation
865
+
866
+ on:
867
+ pull_request:
868
+ push:
869
+ branches: [main, develop]
870
+
871
+ jobs:
872
+ trust-gate:
873
+ runs-on: ubuntu-latest
874
+
875
+ steps:
876
+ - name: Checkout code
877
+ uses: actions/checkout@v4
878
+
879
+ - name: Setup Node.js
880
+ uses: actions/setup-node@v4
881
+ with:
882
+ node-version: '20'
883
+ cache: 'npm'
884
+
885
+ - name: Install dependencies
886
+ run: npm ci
887
+
888
+ # T - Test First
889
+ - name: Run tests with coverage
890
+ run: npm run test:coverage
891
+
892
+ - name: Check coverage threshold
893
+ run: |
894
+ COVERAGE=$(npx vitest run --coverage --reporter=json | jq '.coverage.lines.pct')
895
+ if (( $(echo "$COVERAGE < 85" | bc -l) )); then
896
+ echo "Coverage $COVERAGE% is below 85%"
897
+ exit 1
898
+ fi
899
+
900
+ # R - Readable
901
+ - name: Lint with Biome
902
+ run: npx biome check .
903
+
904
+ # U - Unified
905
+ - name: Type check
906
+ run: npm run type-check
907
+
908
+ # S - Secured
909
+ - name: Audit dependencies
910
+ run: npm audit --audit-level=high
911
+
912
+ - name: Security scan with Trivy
913
+ uses: aquasecurity/trivy-action@master
914
+ with:
915
+ scan-type: 'fs'
916
+ scan-ref: '.'
917
+ severity: 'HIGH,CRITICAL'
918
+ exit-code: '1'
919
+
920
+ # T - Trackable
921
+ - name: Validate TAG chains
922
+ run: |
923
+ chmod +x scripts/validate-tags.sh
924
+ ./scripts/validate-tags.sh
925
+ ```
926
+
927
+ ---
928
+
929
+ ## Local Pre-commit Hooks
930
+
931
+ ### Python Project (`.git/hooks/pre-commit`)
932
+
933
+ ```bash
934
+ #!/bin/bash
935
+ set -e
936
+
937
+ echo "Running TRUST validation..."
938
+
939
+ # T - Test First
940
+ echo "→ Running tests..."
941
+ pytest --cov=src --cov-fail-under=85 --quiet || exit 1
942
+
943
+ # R - Readable
944
+ echo "→ Linting..."
945
+ ruff check . || exit 1
946
+
947
+ # U - Unified
948
+ echo "→ Type checking..."
949
+ mypy src/ --strict || exit 1
950
+
951
+ # S - Secured
952
+ echo "→ Checking for secrets..."
953
+ detect-secrets scan --baseline .secrets.baseline || exit 1
954
+
955
+ echo "✓ TRUST validation passed"
956
+ ```
957
+
958
+ ### TypeScript Project (`.git/hooks/pre-commit`)
959
+
960
+ ```bash
961
+ #!/bin/bash
962
+ set -e
963
+
964
+ echo "Running TRUST validation..."
965
+
966
+ # T - Test First
967
+ echo "→ Running tests..."
968
+ npm run test:coverage || exit 1
969
+
970
+ # R - Readable
971
+ echo "→ Linting..."
972
+ npx biome check . || exit 1
973
+
974
+ # U - Unified
975
+ echo "→ Type checking..."
976
+ npm run type-check || exit 1
977
+
978
+ # S - Secured
979
+ echo "→ Auditing dependencies..."
980
+ npm audit --audit-level=high || exit 1
981
+
982
+ echo "✓ TRUST validation passed"
983
+ ```
984
+
985
+ ---
986
+
987
+ ## Makefile Automation
988
+
989
+ ### Universal TRUST Makefile
990
+
991
+ ```makefile
992
+ .PHONY: trust trust-test trust-lint trust-type trust-security trust-tags
993
+
994
+ # Run all TRUST checks
995
+ trust: trust-test trust-lint trust-type trust-security trust-tags
996
+ @echo "✓ All TRUST principles validated"
997
+
998
+ # T - Test First
999
+ trust-test:
1000
+ @echo "→ T - Test First (Coverage ≥85%)"
1001
+ @pytest --cov=src --cov-fail-under=85 --quiet || exit 1
1002
+ @echo "✓ Tests passed with adequate coverage"
1003
+
1004
+ # R - Readable
1005
+ trust-lint:
1006
+ @echo "→ R - Readable (Linting)"
1007
+ @ruff check . || exit 1
1008
+ @echo "✓ Code is readable and well-formatted"
1009
+
1010
+ # U - Unified
1011
+ trust-type:
1012
+ @echo "→ U - Unified (Type checking)"
1013
+ @mypy src/ --strict || exit 1
1014
+ @echo "✓ Type safety verified"
1015
+
1016
+ # S - Secured
1017
+ trust-security:
1018
+ @echo "→ S - Secured (Security scans)"
1019
+ @detect-secrets scan --baseline .secrets.baseline || exit 1
1020
+ @trivy fs --severity HIGH,CRITICAL --exit-code 1 . || exit 1
1021
+ @echo "✓ Security scans passed"
1022
+
1023
+ # T - Trackable
1024
+ trust-tags:
1025
+ @echo "→ T - Trackable (TAG validation)"
1026
+ @bash scripts/validate-tags.sh || exit 1
1027
+ @echo "✓ TAG chains validated"
1028
+
1029
+ # Quick check (fast subset)
1030
+ trust-quick: trust-lint trust-type
1031
+ @echo "✓ Quick TRUST check passed"
1032
+ ```
1033
+
1034
+ ---
1035
+
1036
+ ## Tool Version Management
1037
+
1038
+ ### Python (requirements-dev.txt)
1039
+
1040
+ ```txt
1041
+ # TRUST validation tools (2025-10-22)
1042
+
1043
+ # T - Test First
1044
+ pytest==8.4.2
1045
+ pytest-cov==5.0.0
1046
+ pytest-xdist==3.6.1
1047
+
1048
+ # R - Readable
1049
+ ruff==0.6.8
1050
+
1051
+ # U - Unified
1052
+ mypy==1.11.2
1053
+
1054
+ # S - Secured
1055
+ detect-secrets==1.4.0
1056
+ bandit==1.7.9
1057
+ semgrep==1.94.0
1058
+ ```
1059
+
1060
+ ### TypeScript (package.json)
1061
+
1062
+ ```json
1063
+ {
1064
+ "devDependencies": {
1065
+ "@biomejs/biome": "^1.9.0",
1066
+ "@vitest/coverage-v8": "^2.0.5",
1067
+ "vitest": "^2.0.5",
1068
+ "typescript": "^5.6.0"
1069
+ },
1070
+ "scripts": {
1071
+ "test": "vitest run",
1072
+ "test:coverage": "vitest run --coverage",
1073
+ "test:watch": "vitest --watch",
1074
+ "lint": "biome check .",
1075
+ "lint:fix": "biome check --apply .",
1076
+ "type-check": "tsc --noEmit",
1077
+ "trust": "npm run test:coverage && npm run lint && npm run type-check"
1078
+ }
1079
+ }
1080
+ ```
1081
+
1082
+ ---
1083
+
1084
+ ## Additional Resources
1085
+
1086
+ - **pytest**: https://docs.pytest.org/
1087
+ - **Vitest**: https://vitest.dev/
1088
+ - **Jest**: https://jestjs.io/
1089
+ - **Go testing**: https://go.dev/doc/tutorial/add-a-test
1090
+ - **Rust testing**: https://doc.rust-lang.org/book/ch11-00-testing.html
1091
+ - **ruff**: https://docs.astral.sh/ruff/
1092
+ - **Biome**: https://biomejs.dev/
1093
+ - **golangci-lint**: https://golangci-lint.run/
1094
+ - **clippy**: https://github.com/rust-lang/rust-clippy
1095
+ - **mypy**: https://mypy.readthedocs.io/
1096
+ - **TypeScript**: https://www.typescriptlang.org/
1097
+ - **Trivy**: https://trivy.dev/
1098
+ - **detect-secrets**: https://github.com/Yelp/detect-secrets
1099
+ - **Semgrep**: https://semgrep.dev/