@sk8metal/michi-cli 0.0.9 → 0.1.0

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.
Files changed (371) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/README.md +235 -57
  3. package/dist/scripts/__tests__/create-project.test.js +24 -28
  4. package/dist/scripts/__tests__/create-project.test.js.map +1 -1
  5. package/dist/scripts/__tests__/jira-transitions.test.d.ts +5 -0
  6. package/dist/scripts/__tests__/jira-transitions.test.d.ts.map +1 -0
  7. package/dist/scripts/__tests__/jira-transitions.test.js +172 -0
  8. package/dist/scripts/__tests__/jira-transitions.test.js.map +1 -0
  9. package/dist/scripts/__tests__/multi-project-estimate.test.js +14 -15
  10. package/dist/scripts/__tests__/multi-project-estimate.test.js.map +1 -1
  11. package/dist/scripts/__tests__/setup-existing-project.test.js +79 -0
  12. package/dist/scripts/__tests__/setup-existing-project.test.js.map +1 -1
  13. package/dist/scripts/__tests__/setup-interactive.test.js +23 -17
  14. package/dist/scripts/__tests__/setup-interactive.test.js.map +1 -1
  15. package/dist/scripts/__tests__/spec-impl-workflow.test.d.ts +5 -0
  16. package/dist/scripts/__tests__/spec-impl-workflow.test.d.ts.map +1 -0
  17. package/dist/scripts/__tests__/spec-impl-workflow.test.js +321 -0
  18. package/dist/scripts/__tests__/spec-impl-workflow.test.js.map +1 -0
  19. package/dist/scripts/__tests__/spec-loader.test.d.ts +5 -0
  20. package/dist/scripts/__tests__/spec-loader.test.d.ts.map +1 -0
  21. package/dist/scripts/__tests__/spec-loader.test.js +153 -0
  22. package/dist/scripts/__tests__/spec-loader.test.js.map +1 -0
  23. package/dist/scripts/__tests__/validate-phase.test.js +26 -22
  24. package/dist/scripts/__tests__/validate-phase.test.js.map +1 -1
  25. package/dist/scripts/config/config-schema.d.ts +17 -0
  26. package/dist/scripts/config/config-schema.d.ts.map +1 -1
  27. package/dist/scripts/config/config-schema.js +55 -26
  28. package/dist/scripts/config/config-schema.js.map +1 -1
  29. package/dist/scripts/config-interactive.d.ts.map +1 -1
  30. package/dist/scripts/config-interactive.js +53 -38
  31. package/dist/scripts/config-interactive.js.map +1 -1
  32. package/dist/scripts/confluence-sync.d.ts.map +1 -1
  33. package/dist/scripts/confluence-sync.js +0 -11
  34. package/dist/scripts/confluence-sync.js.map +1 -1
  35. package/dist/scripts/constants/__tests__/environments.test.js +39 -5
  36. package/dist/scripts/constants/__tests__/environments.test.js.map +1 -1
  37. package/dist/scripts/constants/environments.d.ts +1 -1
  38. package/dist/scripts/constants/environments.d.ts.map +1 -1
  39. package/dist/scripts/constants/environments.js +22 -7
  40. package/dist/scripts/constants/environments.js.map +1 -1
  41. package/dist/scripts/constants/test-commands.d.ts +36 -0
  42. package/dist/scripts/constants/test-commands.d.ts.map +1 -0
  43. package/dist/scripts/constants/test-commands.js +70 -0
  44. package/dist/scripts/constants/test-commands.js.map +1 -0
  45. package/dist/scripts/jira-sync.d.ts +89 -3
  46. package/dist/scripts/jira-sync.d.ts.map +1 -1
  47. package/dist/scripts/jira-sync.js +366 -96
  48. package/dist/scripts/jira-sync.js.map +1 -1
  49. package/dist/scripts/markdown-to-confluence.js +1 -1
  50. package/dist/scripts/markdown-to-confluence.js.map +1 -1
  51. package/dist/scripts/phase-runner.d.ts +1 -1
  52. package/dist/scripts/phase-runner.d.ts.map +1 -1
  53. package/dist/scripts/phase-runner.js +809 -13
  54. package/dist/scripts/phase-runner.js.map +1 -1
  55. package/dist/scripts/pr-automation.d.ts.map +1 -1
  56. package/dist/scripts/pr-automation.js.map +1 -1
  57. package/dist/scripts/pre-flight-check.js +1 -1
  58. package/dist/scripts/pre-flight-check.js.map +1 -1
  59. package/dist/scripts/setup-existing-project.js +61 -29
  60. package/dist/scripts/setup-existing-project.js.map +1 -1
  61. package/dist/scripts/setup-interactive.js +3 -3
  62. package/dist/scripts/setup-interactive.js.map +1 -1
  63. package/dist/scripts/spec-impl-workflow.d.ts +94 -0
  64. package/dist/scripts/spec-impl-workflow.d.ts.map +1 -0
  65. package/dist/scripts/spec-impl-workflow.js +354 -0
  66. package/dist/scripts/spec-impl-workflow.js.map +1 -0
  67. package/dist/scripts/template/__tests__/renderer.test.js.map +1 -1
  68. package/dist/scripts/test-execution-generator.d.ts +52 -0
  69. package/dist/scripts/test-execution-generator.d.ts.map +1 -0
  70. package/dist/scripts/test-execution-generator.js +576 -0
  71. package/dist/scripts/test-execution-generator.js.map +1 -0
  72. package/dist/scripts/test-interactive.d.ts +10 -0
  73. package/dist/scripts/test-interactive.d.ts.map +1 -0
  74. package/dist/scripts/test-interactive.js +627 -0
  75. package/dist/scripts/test-interactive.js.map +1 -0
  76. package/dist/scripts/test-new-features.d.ts +5 -0
  77. package/dist/scripts/test-new-features.d.ts.map +1 -0
  78. package/dist/scripts/test-new-features.js +145 -0
  79. package/dist/scripts/test-new-features.js.map +1 -0
  80. package/dist/scripts/test-spec-generator.d.ts +29 -0
  81. package/dist/scripts/test-spec-generator.d.ts.map +1 -0
  82. package/dist/scripts/test-spec-generator.js +494 -0
  83. package/dist/scripts/test-spec-generator.js.map +1 -0
  84. package/dist/scripts/test-workflow-stages.d.ts +6 -0
  85. package/dist/scripts/test-workflow-stages.d.ts.map +1 -0
  86. package/dist/scripts/test-workflow-stages.js +43 -0
  87. package/dist/scripts/test-workflow-stages.js.map +1 -0
  88. package/dist/scripts/utils/__tests__/aidlc-parser.test.d.ts +5 -0
  89. package/dist/scripts/utils/__tests__/aidlc-parser.test.d.ts.map +1 -0
  90. package/dist/scripts/utils/__tests__/aidlc-parser.test.js +315 -0
  91. package/dist/scripts/utils/__tests__/aidlc-parser.test.js.map +1 -0
  92. package/dist/scripts/utils/__tests__/business-days.test.d.ts +5 -0
  93. package/dist/scripts/utils/__tests__/business-days.test.d.ts.map +1 -0
  94. package/dist/scripts/utils/__tests__/business-days.test.js +171 -0
  95. package/dist/scripts/utils/__tests__/business-days.test.js.map +1 -0
  96. package/dist/scripts/utils/__tests__/config-loader.test.js +1 -1
  97. package/dist/scripts/utils/__tests__/config-loader.test.js.map +1 -1
  98. package/dist/scripts/utils/__tests__/config-validator.test.js +164 -35
  99. package/dist/scripts/utils/__tests__/config-validator.test.js.map +1 -1
  100. package/dist/scripts/utils/__tests__/env-config.test.d.ts +5 -0
  101. package/dist/scripts/utils/__tests__/env-config.test.d.ts.map +1 -0
  102. package/dist/scripts/utils/__tests__/env-config.test.js +218 -0
  103. package/dist/scripts/utils/__tests__/env-config.test.js.map +1 -0
  104. package/dist/scripts/utils/__tests__/jira-issue-type-fetcher.test.d.ts +5 -0
  105. package/dist/scripts/utils/__tests__/jira-issue-type-fetcher.test.d.ts.map +1 -0
  106. package/dist/scripts/utils/__tests__/jira-issue-type-fetcher.test.js +202 -0
  107. package/dist/scripts/utils/__tests__/jira-issue-type-fetcher.test.js.map +1 -0
  108. package/dist/scripts/utils/__tests__/tasks-converter.test.d.ts +5 -0
  109. package/dist/scripts/utils/__tests__/tasks-converter.test.d.ts.map +1 -0
  110. package/dist/scripts/utils/__tests__/tasks-converter.test.js +500 -0
  111. package/dist/scripts/utils/__tests__/tasks-converter.test.js.map +1 -0
  112. package/dist/scripts/utils/__tests__/tasks-format-validator.test.d.ts +5 -0
  113. package/dist/scripts/utils/__tests__/tasks-format-validator.test.d.ts.map +1 -0
  114. package/dist/scripts/utils/__tests__/tasks-format-validator.test.js +314 -0
  115. package/dist/scripts/utils/__tests__/tasks-format-validator.test.js.map +1 -0
  116. package/dist/scripts/utils/__tests__/test-runner.test.d.ts +5 -0
  117. package/dist/scripts/utils/__tests__/test-runner.test.d.ts.map +1 -0
  118. package/dist/scripts/utils/__tests__/test-runner.test.js +64 -0
  119. package/dist/scripts/utils/__tests__/test-runner.test.js.map +1 -0
  120. package/dist/scripts/utils/aidlc-parser.d.ts +86 -0
  121. package/dist/scripts/utils/aidlc-parser.d.ts.map +1 -0
  122. package/dist/scripts/utils/aidlc-parser.js +208 -0
  123. package/dist/scripts/utils/aidlc-parser.js.map +1 -0
  124. package/dist/scripts/utils/business-days.d.ts +52 -0
  125. package/dist/scripts/utils/business-days.d.ts.map +1 -0
  126. package/dist/scripts/utils/business-days.js +98 -0
  127. package/dist/scripts/utils/business-days.js.map +1 -0
  128. package/dist/scripts/utils/ci-generator.d.ts +14 -0
  129. package/dist/scripts/utils/ci-generator.d.ts.map +1 -0
  130. package/dist/scripts/utils/ci-generator.js +61 -0
  131. package/dist/scripts/utils/ci-generator.js.map +1 -0
  132. package/dist/scripts/utils/config-loader.js +2 -2
  133. package/dist/scripts/utils/config-loader.js.map +1 -1
  134. package/dist/scripts/utils/config-validator.d.ts +7 -1
  135. package/dist/scripts/utils/config-validator.d.ts.map +1 -1
  136. package/dist/scripts/utils/config-validator.js +136 -23
  137. package/dist/scripts/utils/config-validator.js.map +1 -1
  138. package/dist/scripts/utils/confluence-approval.d.ts +46 -0
  139. package/dist/scripts/utils/confluence-approval.d.ts.map +1 -0
  140. package/dist/scripts/utils/confluence-approval.js +118 -0
  141. package/dist/scripts/utils/confluence-approval.js.map +1 -0
  142. package/dist/scripts/utils/confluence-hierarchy.d.ts.map +1 -1
  143. package/dist/scripts/utils/confluence-hierarchy.js +1 -1
  144. package/dist/scripts/utils/confluence-hierarchy.js.map +1 -1
  145. package/dist/scripts/utils/docker-generator.d.ts +9 -0
  146. package/dist/scripts/utils/docker-generator.d.ts.map +1 -0
  147. package/dist/scripts/utils/docker-generator.js +132 -0
  148. package/dist/scripts/utils/docker-generator.js.map +1 -0
  149. package/dist/scripts/utils/docker-requirement-detector.d.ts +15 -0
  150. package/dist/scripts/utils/docker-requirement-detector.d.ts.map +1 -0
  151. package/dist/scripts/utils/docker-requirement-detector.js +124 -0
  152. package/dist/scripts/utils/docker-requirement-detector.js.map +1 -0
  153. package/dist/scripts/utils/env-config.d.ts +54 -0
  154. package/dist/scripts/utils/env-config.d.ts.map +1 -0
  155. package/dist/scripts/utils/env-config.js +414 -0
  156. package/dist/scripts/utils/env-config.js.map +1 -0
  157. package/dist/scripts/utils/jira-issue-type-fetcher.d.ts +70 -0
  158. package/dist/scripts/utils/jira-issue-type-fetcher.d.ts.map +1 -0
  159. package/dist/scripts/utils/jira-issue-type-fetcher.js +147 -0
  160. package/dist/scripts/utils/jira-issue-type-fetcher.js.map +1 -0
  161. package/dist/scripts/utils/language-detector.d.ts +14 -0
  162. package/dist/scripts/utils/language-detector.d.ts.map +1 -0
  163. package/dist/scripts/utils/language-detector.js +119 -0
  164. package/dist/scripts/utils/language-detector.js.map +1 -0
  165. package/dist/scripts/utils/markdown-parser.d.ts +55 -0
  166. package/dist/scripts/utils/markdown-parser.d.ts.map +1 -0
  167. package/dist/scripts/utils/markdown-parser.js +289 -0
  168. package/dist/scripts/utils/markdown-parser.js.map +1 -0
  169. package/dist/scripts/utils/project-detector.d.ts +17 -0
  170. package/dist/scripts/utils/project-detector.d.ts.map +1 -0
  171. package/dist/scripts/utils/project-detector.js +166 -0
  172. package/dist/scripts/utils/project-detector.js.map +1 -0
  173. package/dist/scripts/utils/project-finder.js +2 -2
  174. package/dist/scripts/utils/project-finder.js.map +1 -1
  175. package/dist/scripts/utils/release-notes-generator.d.ts +56 -0
  176. package/dist/scripts/utils/release-notes-generator.d.ts.map +1 -0
  177. package/dist/scripts/utils/release-notes-generator.js +162 -0
  178. package/dist/scripts/utils/release-notes-generator.js.map +1 -0
  179. package/dist/scripts/utils/spec-loader.d.ts +79 -0
  180. package/dist/scripts/utils/spec-loader.d.ts.map +1 -0
  181. package/dist/scripts/utils/spec-loader.js +80 -0
  182. package/dist/scripts/utils/spec-loader.js.map +1 -0
  183. package/dist/scripts/utils/spec-updater.d.ts +7 -0
  184. package/dist/scripts/utils/spec-updater.d.ts.map +1 -1
  185. package/dist/scripts/utils/spec-updater.js.map +1 -1
  186. package/dist/scripts/utils/tasks-converter.d.ts +57 -0
  187. package/dist/scripts/utils/tasks-converter.d.ts.map +1 -0
  188. package/dist/scripts/utils/tasks-converter.js +322 -0
  189. package/dist/scripts/utils/tasks-converter.js.map +1 -0
  190. package/dist/scripts/utils/tasks-format-validator.d.ts +36 -0
  191. package/dist/scripts/utils/tasks-format-validator.d.ts.map +1 -0
  192. package/dist/scripts/utils/tasks-format-validator.js +158 -0
  193. package/dist/scripts/utils/tasks-format-validator.js.map +1 -0
  194. package/dist/scripts/utils/template-applier.d.ts +37 -0
  195. package/dist/scripts/utils/template-applier.d.ts.map +1 -0
  196. package/dist/scripts/utils/template-applier.js +129 -0
  197. package/dist/scripts/utils/template-applier.js.map +1 -0
  198. package/dist/scripts/utils/test-config-generator.d.ts +12 -0
  199. package/dist/scripts/utils/test-config-generator.d.ts.map +1 -0
  200. package/dist/scripts/utils/test-config-generator.js +185 -0
  201. package/dist/scripts/utils/test-config-generator.js.map +1 -0
  202. package/dist/scripts/utils/test-runner.d.ts +31 -0
  203. package/dist/scripts/utils/test-runner.d.ts.map +1 -0
  204. package/dist/scripts/utils/test-runner.js +103 -0
  205. package/dist/scripts/utils/test-runner.js.map +1 -0
  206. package/dist/scripts/validate-phase.d.ts +1 -1
  207. package/dist/scripts/validate-phase.d.ts.map +1 -1
  208. package/dist/scripts/validate-phase.js +153 -5
  209. package/dist/scripts/validate-phase.js.map +1 -1
  210. package/dist/scripts/workflow-orchestrator.d.ts +8 -0
  211. package/dist/scripts/workflow-orchestrator.d.ts.map +1 -1
  212. package/dist/scripts/workflow-orchestrator.js +108 -7
  213. package/dist/scripts/workflow-orchestrator.js.map +1 -1
  214. package/dist/src/__tests__/integration/internationalization.test.d.ts +8 -0
  215. package/dist/src/__tests__/integration/internationalization.test.d.ts.map +1 -0
  216. package/dist/src/__tests__/integration/internationalization.test.js +333 -0
  217. package/dist/src/__tests__/integration/internationalization.test.js.map +1 -0
  218. package/dist/src/__tests__/integration/setup/claude-agent.test.d.ts +1 -1
  219. package/dist/src/__tests__/integration/setup/claude-agent.test.js +17 -20
  220. package/dist/src/__tests__/integration/setup/claude-agent.test.js.map +1 -1
  221. package/dist/src/__tests__/integration/setup/cursor.test.js +23 -19
  222. package/dist/src/__tests__/integration/setup/cursor.test.js.map +1 -1
  223. package/dist/src/__tests__/integration/setup/validation.test.js +41 -58
  224. package/dist/src/__tests__/integration/setup/validation.test.js.map +1 -1
  225. package/dist/src/cli.d.ts.map +1 -1
  226. package/dist/src/cli.js +208 -18
  227. package/dist/src/cli.js.map +1 -1
  228. package/dist/src/commands/setup-existing.d.ts +3 -0
  229. package/dist/src/commands/setup-existing.d.ts.map +1 -1
  230. package/dist/src/commands/setup-existing.js +334 -47
  231. package/dist/src/commands/setup-existing.js.map +1 -1
  232. package/docs/README.md +3 -1
  233. package/docs/context.md +59 -0
  234. package/docs/design-issue-55.md +240 -0
  235. package/docs/design-issue-56.md +181 -0
  236. package/docs/michi-development/testing/manual-verification-flow.md +2242 -0
  237. package/docs/michi-development/testing/pre-publish-checklist.md +560 -0
  238. package/docs/plan.md +275 -0
  239. package/docs/user-guide/getting-started/github-token-setup.md +509 -0
  240. package/docs/{getting-started → user-guide/getting-started}/quick-start.md +16 -0
  241. package/docs/{getting-started → user-guide/getting-started}/setup.md +28 -1
  242. package/docs/user-guide/guides/internationalization.md +540 -0
  243. package/docs/{guides → user-guide/guides}/multi-project.md +1 -1
  244. package/docs/{guides → user-guide/guides}/phase-automation.md +67 -9
  245. package/docs/user-guide/guides/workflow.md +582 -0
  246. package/docs/user-guide/hands-on/README.md +142 -0
  247. package/docs/user-guide/hands-on/claude-agent-setup.md +455 -0
  248. package/docs/user-guide/hands-on/claude-setup.md +398 -0
  249. package/docs/user-guide/hands-on/cursor-setup.md +352 -0
  250. package/docs/user-guide/hands-on/troubleshooting.md +964 -0
  251. package/docs/user-guide/hands-on/verification-checklist.md +438 -0
  252. package/docs/user-guide/hands-on/workflow-walkthrough.md +906 -0
  253. package/docs/user-guide/reference/config.md +564 -0
  254. package/docs/{reference → user-guide/reference}/quick-reference.md +53 -40
  255. package/docs/user-guide/release/ci-setup.md +541 -0
  256. package/docs/user-guide/release/release-flow.md +476 -0
  257. package/docs/user-guide/templates/test-specs/README.md +173 -0
  258. package/docs/user-guide/templates/test-specs/e2e-test-spec-template.md +547 -0
  259. package/docs/user-guide/templates/test-specs/integration-test-spec-template.md +435 -0
  260. package/docs/user-guide/templates/test-specs/performance-test-spec-template.md +454 -0
  261. package/docs/user-guide/templates/test-specs/security-test-spec-template.md +664 -0
  262. package/docs/user-guide/templates/test-specs/unit-test-spec-template.md +328 -0
  263. package/docs/{testing → user-guide/testing}/integration-tests.md +24 -9
  264. package/docs/user-guide/testing/tdd-cycle.md +349 -0
  265. package/docs/user-guide/testing/test-execution-flow.md +396 -0
  266. package/docs/user-guide/testing/test-failure-handling.md +521 -0
  267. package/docs/user-guide/testing/test-planning-flow.md +181 -0
  268. package/docs/user-guide/testing-strategy.md +185 -0
  269. package/docs/verification-guide.md +518 -0
  270. package/package.json +7 -2
  271. package/scripts/__tests__/create-project.test.ts +67 -49
  272. package/scripts/__tests__/jira-transitions.test.ts +225 -0
  273. package/scripts/__tests__/multi-project-estimate.test.ts +36 -30
  274. package/scripts/__tests__/setup-existing-project.test.ts +98 -1
  275. package/scripts/__tests__/setup-interactive.test.ts +52 -46
  276. package/scripts/__tests__/spec-impl-workflow.test.ts +429 -0
  277. package/scripts/__tests__/spec-loader.test.ts +199 -0
  278. package/scripts/__tests__/validate-phase.test.ts +78 -54
  279. package/scripts/config/config-schema.ts +89 -50
  280. package/scripts/config-interactive.ts +191 -136
  281. package/scripts/confluence-sync.ts +0 -12
  282. package/scripts/constants/__tests__/environments.test.ts +42 -6
  283. package/scripts/constants/environments.ts +33 -13
  284. package/scripts/constants/test-commands.ts +96 -0
  285. package/scripts/jira-sync.ts +767 -232
  286. package/scripts/markdown-to-confluence.ts +1 -1
  287. package/scripts/phase-runner.ts +1056 -63
  288. package/scripts/pr-automation.ts +0 -1
  289. package/scripts/pre-flight-check.ts +1 -1
  290. package/scripts/pre-publish-check.sh +311 -0
  291. package/scripts/quick-verify.sh +115 -0
  292. package/scripts/setup-existing-project.ts +201 -117
  293. package/scripts/setup-interactive.ts +4 -4
  294. package/scripts/spec-impl-workflow.ts +505 -0
  295. package/scripts/template/__tests__/renderer.test.ts +1 -2
  296. package/scripts/test-execution-generator.ts +695 -0
  297. package/scripts/test-interactive.ts +779 -0
  298. package/scripts/test-new-features.ts +168 -0
  299. package/scripts/test-npm-package.sh +345 -0
  300. package/scripts/test-spec-generator.ts +574 -0
  301. package/scripts/test-workflow-stages.ts +53 -0
  302. package/scripts/utils/__tests__/aidlc-parser.test.ts +349 -0
  303. package/scripts/utils/__tests__/business-days.test.ts +214 -0
  304. package/scripts/utils/__tests__/config-loader.test.ts +1 -1
  305. package/scripts/utils/__tests__/config-validator.test.ts +309 -88
  306. package/scripts/utils/__tests__/env-config.test.ts +259 -0
  307. package/scripts/utils/__tests__/jira-issue-type-fetcher.test.ts +272 -0
  308. package/scripts/utils/__tests__/tasks-converter.test.ts +582 -0
  309. package/scripts/utils/__tests__/tasks-format-validator.test.ts +338 -0
  310. package/scripts/utils/__tests__/test-runner.test.ts +77 -0
  311. package/scripts/utils/aidlc-parser.ts +289 -0
  312. package/scripts/utils/business-days.ts +115 -0
  313. package/scripts/utils/ci-generator.ts +84 -0
  314. package/scripts/utils/config-loader.ts +2 -2
  315. package/scripts/utils/config-validator.ts +304 -117
  316. package/scripts/utils/confluence-approval.ts +167 -0
  317. package/scripts/utils/confluence-hierarchy.ts +2 -4
  318. package/scripts/utils/docker-generator.ts +151 -0
  319. package/scripts/utils/docker-requirement-detector.ts +153 -0
  320. package/scripts/utils/env-config.ts +526 -0
  321. package/scripts/utils/jira-issue-type-fetcher.ts +199 -0
  322. package/scripts/utils/language-detector.ts +139 -0
  323. package/scripts/utils/markdown-parser.ts +376 -0
  324. package/scripts/utils/project-detector.ts +192 -0
  325. package/scripts/utils/project-finder.ts +2 -2
  326. package/scripts/utils/release-notes-generator.ts +210 -0
  327. package/scripts/utils/spec-loader.ts +125 -0
  328. package/scripts/utils/spec-updater.ts +8 -1
  329. package/scripts/utils/tasks-converter.ts +601 -0
  330. package/scripts/utils/tasks-format-validator.ts +193 -0
  331. package/scripts/utils/template-applier.ts +202 -0
  332. package/scripts/utils/test-config-generator.ts +210 -0
  333. package/scripts/utils/test-runner.ts +133 -0
  334. package/scripts/validate-phase.ts +186 -9
  335. package/scripts/workflow-orchestrator.ts +130 -12
  336. package/templates/ci/github-actions/java.yml +54 -0
  337. package/templates/ci/github-actions/nodejs.yml +46 -0
  338. package/templates/ci/github-actions/php.yml +52 -0
  339. package/templates/ci/screwdriver/java.yaml +17 -0
  340. package/templates/ci/screwdriver/nodejs.yaml +17 -0
  341. package/templates/ci/screwdriver/php.yaml +20 -0
  342. package/templates/claude/commands/kiro/kiro-spec-impl.md +244 -0
  343. package/templates/claude/commands/kiro/kiro-spec-tasks.md +354 -0
  344. package/templates/claude-agent/README.md +7 -1
  345. package/templates/claude-agent/agents/.gitkeep +0 -0
  346. package/templates/claude-agent/agents/designer.md +79 -0
  347. package/templates/claude-agent/agents/developer.md +68 -0
  348. package/templates/claude-agent/agents/manager-agent.md +59 -0
  349. package/templates/claude-agent/agents/tester.md +101 -0
  350. package/templates/claude-agent/commands/kiro/.gitkeep +0 -0
  351. package/templates/claude-agent/commands/kiro/kiro-spec-impl.md +244 -0
  352. package/templates/claude-agent/commands/kiro/kiro-spec-tasks.md +354 -0
  353. package/templates/cline/rules/atlassian-integration.md +36 -0
  354. package/templates/cline/rules/michi-core.md +56 -0
  355. package/templates/codex/AGENTS.override.md +277 -0
  356. package/templates/codex/prompts/confluence-sync.md +177 -0
  357. package/templates/codex/rules/README.md +210 -0
  358. package/templates/common/.kiro/project.json.template +21 -0
  359. package/templates/cursor/commands/kiro/kiro-spec-impl.md +244 -0
  360. package/templates/cursor/commands/kiro/kiro-spec-tasks.md +354 -0
  361. package/templates/gemini/commands/README.md +41 -0
  362. package/templates/gemini/rules/GEMINI.md +80 -0
  363. package/docs/guides/workflow.md +0 -342
  364. package/docs/reference/config.md +0 -545
  365. package/scripts/setup-existing.sh +0 -279
  366. /package/docs/{contributing → michi-development/contributing}/development.md +0 -0
  367. /package/docs/{contributing → michi-development/contributing}/release.md +0 -0
  368. /package/docs/{testing-strategy.md → michi-development/testing-strategy.md} +0 -0
  369. /package/docs/{getting-started → user-guide/getting-started}/new-repository-setup.md +0 -0
  370. /package/docs/{guides → user-guide/guides}/customization.md +0 -0
  371. /package/docs/{reference → user-guide/reference}/tasks-template.md +0 -0
@@ -9,7 +9,7 @@ import { validatePhase } from '../validate-phase.js';
9
9
  // fsモジュールのモック
10
10
  vi.mock('fs', () => ({
11
11
  existsSync: vi.fn(),
12
- readFileSync: vi.fn()
12
+ readFileSync: vi.fn(),
13
13
  }));
14
14
 
15
15
  // project-metaのモック
@@ -17,8 +17,8 @@ vi.mock('../utils/project-meta.js', () => ({
17
17
  loadProjectMeta: vi.fn(() => ({
18
18
  projectId: 'test-project',
19
19
  projectName: 'テストプロジェクト',
20
- jiraProjectKey: 'TEST'
21
- }))
20
+ jiraProjectKey: 'TEST',
21
+ })),
22
22
  }));
23
23
 
24
24
  describe('validatePhase', () => {
@@ -30,17 +30,19 @@ describe('validatePhase', () => {
30
30
  it('すべての必須項目が揃っている場合、validationが成功する', () => {
31
31
  // Arrange: requirementsフェーズを代表例としてテスト
32
32
  vi.mocked(existsSync).mockReturnValue(true);
33
- vi.mocked(readFileSync).mockReturnValue(JSON.stringify({
34
- confluence: {
35
- spaceKey: 'TEST',
36
- requirementsPageId: '12345'
37
- },
38
- milestones: {
39
- requirements: {
40
- completed: true
41
- }
42
- }
43
- }));
33
+ vi.mocked(readFileSync).mockReturnValue(
34
+ JSON.stringify({
35
+ confluence: {
36
+ spaceKey: 'TEST',
37
+ requirementsPageId: '12345',
38
+ },
39
+ milestones: {
40
+ requirements: {
41
+ completed: true,
42
+ },
43
+ },
44
+ }),
45
+ );
44
46
 
45
47
  // Act
46
48
  const result = validatePhase('test-feature', 'requirements');
@@ -54,19 +56,23 @@ describe('validatePhase', () => {
54
56
  it('Confluenceページが作成されていない場合、エラーを返す', () => {
55
57
  // Arrange
56
58
  vi.mocked(existsSync).mockReturnValue(true);
57
- vi.mocked(readFileSync).mockReturnValue(JSON.stringify({
58
- confluence: {
59
- spaceKey: 'TEST'
60
- // requirementsPageId が存在しない
61
- }
62
- }));
59
+ vi.mocked(readFileSync).mockReturnValue(
60
+ JSON.stringify({
61
+ confluence: {
62
+ spaceKey: 'TEST',
63
+ // requirementsPageId が存在しない
64
+ },
65
+ }),
66
+ );
63
67
 
64
68
  // Act
65
69
  const result = validatePhase('test-feature', 'requirements');
66
70
 
67
71
  // Assert
68
72
  expect(result.valid).toBe(false);
69
- expect(result.errors).toContain('❌ Confluenceページ(要件定義)が作成されていません');
73
+ expect(result.errors).toContain(
74
+ '❌ Confluenceページ(要件定義)が作成されていません',
75
+ );
70
76
  });
71
77
  });
72
78
 
@@ -74,23 +80,27 @@ describe('validatePhase', () => {
74
80
  it('designフェーズ: 前提条件(requirements完了)をチェックする', () => {
75
81
  // Arrange
76
82
  vi.mocked(existsSync).mockReturnValue(true);
77
- vi.mocked(readFileSync).mockReturnValue(JSON.stringify({
78
- confluence: {
79
- designPageId: '67890'
80
- },
81
- milestones: {
82
- requirements: {
83
- completed: false // 前提条件が満たされていない
84
- }
85
- }
86
- }));
83
+ vi.mocked(readFileSync).mockReturnValue(
84
+ JSON.stringify({
85
+ confluence: {
86
+ designPageId: '67890',
87
+ },
88
+ milestones: {
89
+ requirements: {
90
+ completed: false, // 前提条件が満たされていない
91
+ },
92
+ },
93
+ }),
94
+ );
87
95
 
88
96
  // Act
89
97
  const result = validatePhase('test-feature', 'design');
90
98
 
91
99
  // Assert
92
100
  expect(result.valid).toBe(false);
93
- expect(result.errors).toContain('❌ 要件定義が完了していません(前提条件)');
101
+ expect(result.errors).toContain(
102
+ '❌ 要件定義が完了していません(前提条件)',
103
+ );
94
104
  });
95
105
 
96
106
  it('tasksフェーズ: JIRA Epic/Story作成をチェックする', () => {
@@ -103,12 +113,12 @@ describe('validatePhase', () => {
103
113
  return JSON.stringify({
104
114
  milestones: {
105
115
  design: {
106
- completed: true
107
- }
116
+ completed: true,
117
+ },
108
118
  },
109
119
  jira: {
110
120
  // epicKey が存在しない(重要なチェック)
111
- }
121
+ },
112
122
  });
113
123
  });
114
124
 
@@ -130,16 +140,16 @@ describe('validatePhase', () => {
130
140
  return JSON.stringify({
131
141
  milestones: {
132
142
  design: {
133
- completed: true
134
- }
143
+ completed: true,
144
+ },
135
145
  },
136
146
  jira: {
137
147
  epicKey: 'TEST-1',
138
148
  stories: {
139
149
  created: 5,
140
- total: 5
141
- }
142
- }
150
+ total: 5,
151
+ },
152
+ },
143
153
  });
144
154
  });
145
155
 
@@ -148,7 +158,9 @@ describe('validatePhase', () => {
148
158
 
149
159
  // Assert
150
160
  expect(result.valid).toBe(true); // 警告だけなのでvalid
151
- expect(result.warnings).toContain('⚠️ tasks.mdに曜日表記(月、火、水...)が含まれていません');
161
+ expect(result.warnings).toContain(
162
+ '⚠️ tasks.mdに曜日表記(月、火、水...)が含まれていません',
163
+ );
152
164
  });
153
165
  });
154
166
 
@@ -156,30 +168,42 @@ describe('validatePhase', () => {
156
168
  it('spec.jsonが存在しない場合、エラーを返す', () => {
157
169
  // Arrange
158
170
  // requirements.mdは存在するが、spec.jsonは存在しない
159
- vi.mocked(existsSync).mockImplementation((path: string | Buffer | URL) => {
160
- const pathStr = typeof path === 'string' ? path : path instanceof URL ? path.pathname : path.toString();
161
- if (pathStr.includes('requirements.md')) {
162
- return true;
163
- }
164
- if (pathStr.includes('spec.json')) {
171
+ vi.mocked(existsSync).mockImplementation(
172
+ (path: string | Buffer | URL) => {
173
+ const pathStr =
174
+ typeof path === 'string'
175
+ ? path
176
+ : path instanceof URL
177
+ ? path.pathname
178
+ : path.toString();
179
+ if (pathStr.includes('requirements.md')) {
180
+ return true;
181
+ }
182
+ if (pathStr.includes('spec.json')) {
183
+ return false;
184
+ }
165
185
  return false;
166
- }
167
- return false;
168
- });
186
+ },
187
+ );
169
188
 
170
189
  // Act
171
190
  const result = validatePhase('test-feature', 'requirements');
172
191
 
173
192
  // Assert: エラーをスローせず、errors配列にエラーを含めて返す
174
193
  expect(result.valid).toBe(false);
175
- expect(result.errors).toContainEqual(expect.stringContaining('spec.json読み込みエラー'));
176
- expect(result.errors).toContainEqual(expect.stringContaining('spec.json not found'));
194
+ expect(result.errors).toContainEqual(
195
+ expect.stringContaining('spec.json読み込みエラー'),
196
+ );
197
+ expect(result.errors).toContainEqual(
198
+ expect.stringContaining('spec.json not found'),
199
+ );
177
200
  });
178
201
 
179
202
  it('不正なフェーズ名の場合、エラーをスローする', () => {
180
203
  // Act & Assert
181
- expect(() => validatePhase('test-feature', 'invalid' as any)).toThrow('Unknown phase: invalid');
204
+ expect(() =>
205
+ validatePhase('test-feature', 'invalid' as 'requirements'),
206
+ ).toThrow('Unknown phase: invalid');
182
207
  });
183
208
  });
184
209
  });
185
-
@@ -17,7 +17,7 @@ export const ConfluencePageCreationGranularitySchema = z.enum([
17
17
  'single',
18
18
  'by-section',
19
19
  'by-hierarchy',
20
- 'manual'
20
+ 'manual',
21
21
  ]);
22
22
 
23
23
  /**
@@ -27,41 +27,54 @@ export const ConfluenceHierarchyStructureSchema = z.object({
27
27
  mode: ConfluenceHierarchyModeSchema.optional(),
28
28
  parentPageTitle: z.string().optional(),
29
29
  createDocTypeParents: z.boolean().optional(),
30
- structure: z.record(
31
- z.string(),
32
- z.object({
33
- parent: z.string().optional(),
34
- title: z.string().optional(),
35
- children: z.array(
36
- z.object({
37
- section: z.string(),
38
- title: z.string()
39
- })
40
- ).optional(),
41
- pages: z.array(
42
- z.object({
43
- title: z.string(),
44
- sections: z.array(z.string()),
45
- labels: z.array(z.string()).optional()
46
- })
47
- ).optional()
48
- })
49
- ).optional()
30
+ structure: z
31
+ .record(
32
+ z.string(),
33
+ z.object({
34
+ parent: z.string().optional(),
35
+ title: z.string().optional(),
36
+ children: z
37
+ .array(
38
+ z.object({
39
+ section: z.string(),
40
+ title: z.string(),
41
+ }),
42
+ )
43
+ .optional(),
44
+ pages: z
45
+ .array(
46
+ z.object({
47
+ title: z.string(),
48
+ sections: z.array(z.string()),
49
+ labels: z.array(z.string()).optional(),
50
+ }),
51
+ )
52
+ .optional(),
53
+ }),
54
+ )
55
+ .optional(),
50
56
  });
51
57
 
52
58
  /**
53
59
  * Confluence設定スキーマ
54
60
  */
55
61
  export const ConfluenceConfigSchema = z.object({
56
- pageCreationGranularity: ConfluencePageCreationGranularitySchema.default('single'),
57
- pageTitleFormat: z.string().default('[{projectName}] {featureName} {docTypeLabel}'),
58
- autoLabels: z.array(z.string()).default(['{projectLabel}', '{docType}', '{featureName}', 'github-sync']),
59
- spaces: z.object({
60
- requirements: z.string().optional(),
61
- design: z.string().optional(),
62
- tasks: z.string().optional()
63
- }).optional(),
64
- hierarchy: ConfluenceHierarchyStructureSchema.optional()
62
+ pageCreationGranularity:
63
+ ConfluencePageCreationGranularitySchema.default('single'),
64
+ pageTitleFormat: z
65
+ .string()
66
+ .default('[{projectName}] {featureName} {docTypeLabel}'),
67
+ autoLabels: z
68
+ .array(z.string())
69
+ .default(['{projectLabel}', '{docType}', '{featureName}', 'github-sync']),
70
+ spaces: z
71
+ .object({
72
+ requirements: z.string().optional(),
73
+ design: z.string().optional(),
74
+ tasks: z.string().optional(),
75
+ })
76
+ .optional(),
77
+ hierarchy: ConfluenceHierarchyStructureSchema.optional(),
65
78
  });
66
79
 
67
80
  /**
@@ -70,7 +83,7 @@ export const ConfluenceConfigSchema = z.object({
70
83
  export const JiraStoryCreationGranularitySchema = z.enum([
71
84
  'all',
72
85
  'by-phase',
73
- 'selected-phases'
86
+ 'selected-phases',
74
87
  ]);
75
88
 
76
89
  /**
@@ -78,6 +91,15 @@ export const JiraStoryCreationGranularitySchema = z.enum([
78
91
  */
79
92
  export const JiraStoryPointsSchema = z.enum(['auto', 'manual', 'disabled']);
80
93
 
94
+ /**
95
+ * JIRA ステータスマッピングスキーマ
96
+ * spec-impl ワークフローで使用するステータス名
97
+ */
98
+ export const JiraStatusMappingSchema = z.object({
99
+ inProgress: z.string().default('In Progress'),
100
+ readyForReview: z.string().default('Ready for Review'),
101
+ });
102
+
81
103
  /**
82
104
  * JIRA設定スキーマ
83
105
  */
@@ -85,25 +107,34 @@ export const JiraConfigSchema = z.object({
85
107
  storyCreationGranularity: JiraStoryCreationGranularitySchema.default('all'),
86
108
  createEpic: z.boolean().default(true),
87
109
  storyPoints: JiraStoryPointsSchema.default('auto'),
88
- autoLabels: z.array(z.string()).default(['{projectLabel}', '{featureName}', '{phaseLabel}']),
89
- issueTypes: z.object({
90
- epic: z.string().default('Epic'),
91
- story: z.string().nullish().default(null), // null | undefined | string
92
- subtask: z.string().nullish().default(null) // null | undefined | string
93
- }).optional(),
94
- selectedPhases: z.array(z.string()).optional()
110
+ autoLabels: z
111
+ .array(z.string())
112
+ .default(['{projectLabel}', '{featureName}', '{phaseLabel}']),
113
+ issueTypes: z
114
+ .object({
115
+ epic: z.string().default('Epic'),
116
+ story: z.string().nullish().default(null), // null | undefined | string
117
+ subtask: z.string().nullish().default(null), // null | undefined | string
118
+ })
119
+ .optional(),
120
+ selectedPhases: z.array(z.string()).optional(),
121
+ statusMapping: JiraStatusMappingSchema.optional(),
95
122
  });
96
123
 
97
124
  /**
98
125
  * ワークフロー設定スキーマ
99
126
  */
100
127
  export const WorkflowConfigSchema = z.object({
101
- enabledPhases: z.array(z.string()).default(['requirements', 'design', 'tasks']),
102
- approvalGates: z.object({
103
- requirements: z.array(z.string()).optional(),
104
- design: z.array(z.string()).optional(),
105
- release: z.array(z.string()).optional()
106
- }).optional()
128
+ enabledPhases: z
129
+ .array(z.string())
130
+ .default(['requirements', 'design', 'tasks']),
131
+ approvalGates: z
132
+ .object({
133
+ requirements: z.array(z.string()).optional(),
134
+ design: z.array(z.string()).optional(),
135
+ release: z.array(z.string()).optional(),
136
+ })
137
+ .optional(),
107
138
  });
108
139
 
109
140
  /**
@@ -112,19 +143,27 @@ export const WorkflowConfigSchema = z.object({
112
143
  export const AppConfigSchema = z.object({
113
144
  confluence: ConfluenceConfigSchema.optional(),
114
145
  jira: JiraConfigSchema.optional(),
115
- workflow: WorkflowConfigSchema.optional()
146
+ workflow: WorkflowConfigSchema.optional(),
116
147
  });
117
148
 
118
149
  /**
119
150
  * 設定の型定義
120
151
  */
121
- export type ConfluenceHierarchyMode = z.infer<typeof ConfluenceHierarchyModeSchema>;
122
- export type ConfluencePageCreationGranularity = z.infer<typeof ConfluencePageCreationGranularitySchema>;
123
- export type ConfluenceHierarchyStructure = z.infer<typeof ConfluenceHierarchyStructureSchema>;
152
+ export type ConfluenceHierarchyMode = z.infer<
153
+ typeof ConfluenceHierarchyModeSchema
154
+ >;
155
+ export type ConfluencePageCreationGranularity = z.infer<
156
+ typeof ConfluencePageCreationGranularitySchema
157
+ >;
158
+ export type ConfluenceHierarchyStructure = z.infer<
159
+ typeof ConfluenceHierarchyStructureSchema
160
+ >;
124
161
  export type ConfluenceConfig = z.infer<typeof ConfluenceConfigSchema>;
125
- export type JiraStoryCreationGranularity = z.infer<typeof JiraStoryCreationGranularitySchema>;
162
+ export type JiraStoryCreationGranularity = z.infer<
163
+ typeof JiraStoryCreationGranularitySchema
164
+ >;
126
165
  export type JiraStoryPoints = z.infer<typeof JiraStoryPointsSchema>;
166
+ export type JiraStatusMapping = z.infer<typeof JiraStatusMappingSchema>;
127
167
  export type JiraConfig = z.infer<typeof JiraConfigSchema>;
128
168
  export type WorkflowConfig = z.infer<typeof WorkflowConfigSchema>;
129
169
  export type AppConfig = z.infer<typeof AppConfigSchema>;
130
-