@sk8metal/michi-cli 0.14.1 → 0.20.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 (623) hide show
  1. package/CHANGELOG.md +268 -2
  2. package/README.md +27 -2
  3. package/dist/scripts/config/config-schema.d.ts +5 -333
  4. package/dist/scripts/config/config-schema.d.ts.map +1 -1
  5. package/dist/scripts/config/config-schema.js +6 -233
  6. package/dist/scripts/config/config-schema.js.map +1 -1
  7. package/dist/scripts/config-global.d.ts.map +1 -1
  8. package/dist/scripts/config-global.js +3 -2
  9. package/dist/scripts/config-global.js.map +1 -1
  10. package/dist/scripts/confluence-sync.d.ts +5 -73
  11. package/dist/scripts/confluence-sync.d.ts.map +1 -1
  12. package/dist/scripts/confluence-sync.js +14 -392
  13. package/dist/scripts/confluence-sync.js.map +1 -1
  14. package/dist/scripts/constants/environments.d.ts +3 -30
  15. package/dist/scripts/constants/environments.d.ts.map +1 -1
  16. package/dist/scripts/constants/environments.js +3 -41
  17. package/dist/scripts/constants/environments.js.map +1 -1
  18. package/dist/scripts/constants/languages.d.ts +3 -20
  19. package/dist/scripts/constants/languages.d.ts.map +1 -1
  20. package/dist/scripts/constants/languages.js +3 -50
  21. package/dist/scripts/constants/languages.js.map +1 -1
  22. package/dist/scripts/constants/test-commands.d.ts +3 -33
  23. package/dist/scripts/constants/test-commands.d.ts.map +1 -1
  24. package/dist/scripts/constants/test-commands.js +3 -67
  25. package/dist/scripts/constants/test-commands.js.map +1 -1
  26. package/dist/scripts/dev-tools/mermaid-converter.d.ts.map +1 -0
  27. package/dist/scripts/dev-tools/mermaid-converter.js.map +1 -0
  28. package/dist/scripts/dev-tools/test-interactive.d.ts.map +1 -0
  29. package/dist/scripts/{test-interactive.js → dev-tools/test-interactive.js} +4 -3
  30. package/dist/scripts/dev-tools/test-interactive.js.map +1 -0
  31. package/dist/scripts/github-actions-client.d.ts +5 -75
  32. package/dist/scripts/github-actions-client.d.ts.map +1 -1
  33. package/dist/scripts/github-actions-client.js +4 -178
  34. package/dist/scripts/github-actions-client.js.map +1 -1
  35. package/dist/scripts/jira-sync.d.ts +3 -121
  36. package/dist/scripts/jira-sync.d.ts.map +1 -1
  37. package/dist/scripts/jira-sync.js +5 -879
  38. package/dist/scripts/jira-sync.js.map +1 -1
  39. package/dist/scripts/markdown-to-confluence.d.ts.map +1 -1
  40. package/dist/scripts/markdown-to-confluence.js +2 -2
  41. package/dist/scripts/markdown-to-confluence.js.map +1 -1
  42. package/dist/scripts/multi-project-estimate.d.ts.map +1 -1
  43. package/dist/scripts/multi-project-estimate.js +3 -2
  44. package/dist/scripts/multi-project-estimate.js.map +1 -1
  45. package/dist/scripts/phase-runner.d.ts.map +1 -1
  46. package/dist/scripts/phase-runner.js +34 -18
  47. package/dist/scripts/phase-runner.js.map +1 -1
  48. package/dist/scripts/pre-flight-check.d.ts.map +1 -1
  49. package/dist/scripts/pre-flight-check.js +27 -11
  50. package/dist/scripts/pre-flight-check.js.map +1 -1
  51. package/dist/scripts/template/multi-repo-renderer.js +2 -2
  52. package/dist/scripts/template/multi-repo-renderer.js.map +1 -1
  53. package/dist/scripts/test-execution-generator.d.ts.map +1 -1
  54. package/dist/scripts/test-execution-generator.js +5 -4
  55. package/dist/scripts/test-execution-generator.js.map +1 -1
  56. package/dist/scripts/utils/aidlc-parser.d.ts +5 -82
  57. package/dist/scripts/utils/aidlc-parser.d.ts.map +1 -1
  58. package/dist/scripts/utils/aidlc-parser.js +4 -204
  59. package/dist/scripts/utils/aidlc-parser.js.map +1 -1
  60. package/dist/scripts/utils/ci-generator.d.ts.map +1 -1
  61. package/dist/scripts/utils/ci-generator.js +4 -3
  62. package/dist/scripts/utils/ci-generator.js.map +1 -1
  63. package/dist/scripts/utils/config-loader.d.ts.map +1 -1
  64. package/dist/scripts/utils/config-loader.js +46 -49
  65. package/dist/scripts/utils/config-loader.js.map +1 -1
  66. package/dist/scripts/utils/config-validator.d.ts +9 -10
  67. package/dist/scripts/utils/config-validator.d.ts.map +1 -1
  68. package/dist/scripts/utils/config-validator.js +68 -70
  69. package/dist/scripts/utils/config-validator.js.map +1 -1
  70. package/dist/scripts/utils/docker-requirement-detector.d.ts.map +1 -1
  71. package/dist/scripts/utils/docker-requirement-detector.js +5 -4
  72. package/dist/scripts/utils/docker-requirement-detector.js.map +1 -1
  73. package/dist/scripts/utils/env-config.d.ts.map +1 -1
  74. package/dist/scripts/utils/env-config.js +55 -38
  75. package/dist/scripts/utils/env-config.js.map +1 -1
  76. package/dist/scripts/utils/feature-name-validator.d.ts +4 -9
  77. package/dist/scripts/utils/feature-name-validator.d.ts.map +1 -1
  78. package/dist/scripts/utils/feature-name-validator.js +12 -21
  79. package/dist/scripts/utils/feature-name-validator.js.map +1 -1
  80. package/dist/scripts/utils/interactive-helpers.d.ts +5 -29
  81. package/dist/scripts/utils/interactive-helpers.d.ts.map +1 -1
  82. package/dist/scripts/utils/interactive-helpers.js +5 -89
  83. package/dist/scripts/utils/interactive-helpers.js.map +1 -1
  84. package/dist/scripts/utils/language-detector.d.ts.map +1 -1
  85. package/dist/scripts/utils/language-detector.js +4 -3
  86. package/dist/scripts/utils/language-detector.js.map +1 -1
  87. package/dist/scripts/utils/markdown-parser.d.ts +6 -52
  88. package/dist/scripts/utils/markdown-parser.d.ts.map +1 -1
  89. package/dist/scripts/utils/markdown-parser.js +5 -286
  90. package/dist/scripts/utils/markdown-parser.js.map +1 -1
  91. package/dist/scripts/utils/multi-repo-validator.d.ts +9 -10
  92. package/dist/scripts/utils/multi-repo-validator.d.ts.map +1 -1
  93. package/dist/scripts/utils/multi-repo-validator.js +15 -17
  94. package/dist/scripts/utils/multi-repo-validator.js.map +1 -1
  95. package/dist/scripts/utils/project-analyzer.d.ts +120 -0
  96. package/dist/scripts/utils/project-analyzer.d.ts.map +1 -0
  97. package/dist/scripts/utils/project-analyzer.js +358 -0
  98. package/dist/scripts/utils/project-analyzer.js.map +1 -0
  99. package/dist/scripts/utils/project-detector.d.ts.map +1 -1
  100. package/dist/scripts/utils/project-detector.js +6 -5
  101. package/dist/scripts/utils/project-detector.js.map +1 -1
  102. package/dist/scripts/utils/project-finder.d.ts +1 -21
  103. package/dist/scripts/utils/project-finder.d.ts.map +1 -1
  104. package/dist/scripts/utils/project-finder.js +2 -121
  105. package/dist/scripts/utils/project-finder.js.map +1 -1
  106. package/dist/scripts/utils/project-meta.d.ts +4 -27
  107. package/dist/scripts/utils/project-meta.d.ts.map +1 -1
  108. package/dist/scripts/utils/project-meta.js +3 -67
  109. package/dist/scripts/utils/project-meta.js.map +1 -1
  110. package/dist/scripts/utils/safe-file-reader.d.ts +84 -0
  111. package/dist/scripts/utils/safe-file-reader.d.ts.map +1 -0
  112. package/dist/scripts/utils/safe-file-reader.js +122 -0
  113. package/dist/scripts/utils/safe-file-reader.js.map +1 -0
  114. package/dist/scripts/utils/security-validator.d.ts +8 -19
  115. package/dist/scripts/utils/security-validator.d.ts.map +1 -1
  116. package/dist/scripts/utils/security-validator.js +28 -58
  117. package/dist/scripts/utils/security-validator.js.map +1 -1
  118. package/dist/scripts/utils/spec-archiver.d.ts.map +1 -1
  119. package/dist/scripts/utils/spec-archiver.js +7 -6
  120. package/dist/scripts/utils/spec-archiver.js.map +1 -1
  121. package/dist/scripts/utils/spec-updater.d.ts.map +1 -1
  122. package/dist/scripts/utils/spec-updater.js +10 -7
  123. package/dist/scripts/utils/spec-updater.js.map +1 -1
  124. package/dist/scripts/utils/tasks-converter.js +2 -2
  125. package/dist/scripts/utils/tasks-converter.js.map +1 -1
  126. package/dist/scripts/utils/tasks-format-validator.js +4 -4
  127. package/dist/scripts/utils/tasks-format-validator.js.map +1 -1
  128. package/dist/scripts/utils/template-applier.d.ts.map +1 -1
  129. package/dist/scripts/utils/template-applier.js +4 -3
  130. package/dist/scripts/utils/template-applier.js.map +1 -1
  131. package/dist/scripts/utils/types/validation.d.ts +57 -0
  132. package/dist/scripts/utils/types/validation.d.ts.map +1 -0
  133. package/dist/scripts/utils/types/validation.js +50 -0
  134. package/dist/scripts/utils/types/validation.js.map +1 -0
  135. package/dist/scripts/validate-phase.d.ts +6 -1
  136. package/dist/scripts/validate-phase.d.ts.map +1 -1
  137. package/dist/scripts/validate-phase.js +42 -20
  138. package/dist/scripts/validate-phase.js.map +1 -1
  139. package/dist/scripts/workflow-orchestrator.d.ts +4 -40
  140. package/dist/scripts/workflow-orchestrator.d.ts.map +1 -1
  141. package/dist/scripts/workflow-orchestrator.js +7 -194
  142. package/dist/scripts/workflow-orchestrator.js.map +1 -1
  143. package/dist/src/application/interfaces/config-provider.d.ts +89 -0
  144. package/dist/src/application/interfaces/config-provider.d.ts.map +1 -0
  145. package/dist/src/application/interfaces/config-provider.js +8 -0
  146. package/dist/src/application/interfaces/config-provider.js.map +1 -0
  147. package/dist/src/application/interfaces/external-api.d.ts +80 -0
  148. package/dist/src/application/interfaces/external-api.d.ts.map +1 -0
  149. package/dist/src/application/interfaces/external-api.js +8 -0
  150. package/dist/src/application/interfaces/external-api.js.map +1 -0
  151. package/dist/src/application/interfaces/spec-repository.d.ts +52 -0
  152. package/dist/src/application/interfaces/spec-repository.d.ts.map +1 -0
  153. package/dist/src/application/interfaces/spec-repository.js +8 -0
  154. package/dist/src/application/interfaces/spec-repository.js.map +1 -0
  155. package/dist/src/application/services/spec-service.d.ts +49 -0
  156. package/dist/src/application/services/spec-service.d.ts.map +1 -0
  157. package/dist/src/application/services/spec-service.js +94 -0
  158. package/dist/src/application/services/spec-service.js.map +1 -0
  159. package/dist/src/application/services/workflow-service.d.ts +58 -0
  160. package/dist/src/application/services/workflow-service.d.ts.map +1 -0
  161. package/dist/src/application/services/workflow-service.js +125 -0
  162. package/dist/src/application/services/workflow-service.js.map +1 -0
  163. package/dist/src/application/templates/processor.d.ts +31 -0
  164. package/dist/src/application/templates/processor.d.ts.map +1 -0
  165. package/dist/src/application/templates/processor.js +58 -0
  166. package/dist/src/application/templates/processor.js.map +1 -0
  167. package/dist/src/application/use-cases/spec/archive-spec.d.ts +34 -0
  168. package/dist/src/application/use-cases/spec/archive-spec.d.ts.map +1 -0
  169. package/dist/src/application/use-cases/spec/archive-spec.js +56 -0
  170. package/dist/src/application/use-cases/spec/archive-spec.js.map +1 -0
  171. package/dist/src/application/use-cases/spec/generate-design.d.ts +34 -0
  172. package/dist/src/application/use-cases/spec/generate-design.d.ts.map +1 -0
  173. package/dist/src/application/use-cases/spec/generate-design.js +58 -0
  174. package/dist/src/application/use-cases/spec/generate-design.js.map +1 -0
  175. package/dist/src/application/use-cases/spec/generate-requirements.d.ts +34 -0
  176. package/dist/src/application/use-cases/spec/generate-requirements.d.ts.map +1 -0
  177. package/dist/src/application/use-cases/spec/generate-requirements.js +58 -0
  178. package/dist/src/application/use-cases/spec/generate-requirements.js.map +1 -0
  179. package/dist/src/application/use-cases/spec/generate-tasks.d.ts +34 -0
  180. package/dist/src/application/use-cases/spec/generate-tasks.d.ts.map +1 -0
  181. package/dist/src/application/use-cases/spec/generate-tasks.js +58 -0
  182. package/dist/src/application/use-cases/spec/generate-tasks.js.map +1 -0
  183. package/dist/src/application/use-cases/spec/init-spec.d.ts +48 -0
  184. package/dist/src/application/use-cases/spec/init-spec.d.ts.map +1 -0
  185. package/dist/src/application/use-cases/spec/init-spec.js +121 -0
  186. package/dist/src/application/use-cases/spec/init-spec.js.map +1 -0
  187. package/dist/src/cli.d.ts +6 -7
  188. package/dist/src/cli.d.ts.map +1 -1
  189. package/dist/src/cli.js +6 -745
  190. package/dist/src/cli.js.map +1 -1
  191. package/dist/src/commands/config-validate.js +2 -2
  192. package/dist/src/commands/init.d.ts +6 -21
  193. package/dist/src/commands/init.d.ts.map +1 -1
  194. package/dist/src/commands/init.js +5 -508
  195. package/dist/src/commands/init.js.map +1 -1
  196. package/dist/src/commands/migrate.js +4 -3
  197. package/dist/src/commands/migrate.js.map +1 -1
  198. package/dist/src/commands/spec-archive.d.ts +6 -13
  199. package/dist/src/commands/spec-archive.d.ts.map +1 -1
  200. package/dist/src/commands/spec-archive.js +5 -36
  201. package/dist/src/commands/spec-archive.js.map +1 -1
  202. package/dist/src/commands/spec-list.d.ts +6 -11
  203. package/dist/src/commands/spec-list.d.ts.map +1 -1
  204. package/dist/src/commands/spec-list.js +5 -51
  205. package/dist/src/commands/spec-list.js.map +1 -1
  206. package/dist/src/domain/constants/approval.d.ts +18 -0
  207. package/dist/src/domain/constants/approval.d.ts.map +1 -0
  208. package/dist/src/domain/constants/approval.js +23 -0
  209. package/dist/src/domain/constants/approval.js.map +1 -0
  210. package/dist/src/domain/constants/environments.d.ts +33 -0
  211. package/dist/src/domain/constants/environments.d.ts.map +1 -0
  212. package/dist/src/domain/constants/environments.js +44 -0
  213. package/dist/src/domain/constants/environments.js.map +1 -0
  214. package/dist/src/domain/constants/index.d.ts +12 -0
  215. package/dist/src/domain/constants/index.d.ts.map +1 -0
  216. package/dist/src/domain/constants/index.js +18 -0
  217. package/dist/src/domain/constants/index.js.map +1 -0
  218. package/dist/src/domain/constants/languages.d.ts +23 -0
  219. package/dist/src/domain/constants/languages.d.ts.map +1 -0
  220. package/dist/src/domain/constants/languages.js +53 -0
  221. package/dist/src/domain/constants/languages.js.map +1 -0
  222. package/dist/src/domain/constants/phases.d.ts +32 -0
  223. package/dist/src/domain/constants/phases.d.ts.map +1 -0
  224. package/dist/src/domain/constants/phases.js +52 -0
  225. package/dist/src/domain/constants/phases.js.map +1 -0
  226. package/dist/src/domain/constants/test-commands.d.ts +36 -0
  227. package/dist/src/domain/constants/test-commands.d.ts.map +1 -0
  228. package/dist/src/domain/constants/test-commands.js +70 -0
  229. package/dist/src/domain/constants/test-commands.js.map +1 -0
  230. package/dist/src/domain/constants/validation-rules.d.ts +32 -0
  231. package/dist/src/domain/constants/validation-rules.d.ts.map +1 -0
  232. package/dist/src/domain/constants/validation-rules.js +51 -0
  233. package/dist/src/domain/constants/validation-rules.js.map +1 -0
  234. package/dist/src/domain/entities/spec.d.ts +66 -0
  235. package/dist/src/domain/entities/spec.d.ts.map +1 -0
  236. package/dist/src/domain/entities/spec.js +112 -0
  237. package/dist/src/domain/entities/spec.js.map +1 -0
  238. package/dist/src/domain/entities/task.d.ts +43 -0
  239. package/dist/src/domain/entities/task.d.ts.map +1 -0
  240. package/dist/src/domain/entities/task.js +65 -0
  241. package/dist/src/domain/entities/task.js.map +1 -0
  242. package/dist/src/domain/services/spec-validator.d.ts +46 -0
  243. package/dist/src/domain/services/spec-validator.d.ts.map +1 -0
  244. package/dist/src/domain/services/spec-validator.js +99 -0
  245. package/dist/src/domain/services/spec-validator.js.map +1 -0
  246. package/dist/src/domain/value-objects/feature-name.d.ts +24 -0
  247. package/dist/src/domain/value-objects/feature-name.d.ts.map +1 -0
  248. package/dist/src/domain/value-objects/feature-name.js +36 -0
  249. package/dist/src/domain/value-objects/feature-name.js.map +1 -0
  250. package/dist/src/domain/value-objects/index.d.ts +7 -0
  251. package/dist/src/domain/value-objects/index.d.ts.map +1 -0
  252. package/dist/src/domain/value-objects/index.js +7 -0
  253. package/dist/src/domain/value-objects/index.js.map +1 -0
  254. package/dist/src/infrastructure/config/index.d.ts +5 -0
  255. package/dist/src/infrastructure/config/index.d.ts.map +1 -0
  256. package/dist/src/infrastructure/config/index.js +6 -0
  257. package/dist/src/infrastructure/config/index.js.map +1 -0
  258. package/dist/src/infrastructure/config/schema.d.ts +337 -0
  259. package/dist/src/infrastructure/config/schema.d.ts.map +1 -0
  260. package/dist/src/infrastructure/config/schema.js +237 -0
  261. package/dist/src/infrastructure/config/schema.js.map +1 -0
  262. package/dist/src/infrastructure/external-apis/atlassian/confluence/approval.d.ts +14 -0
  263. package/dist/src/infrastructure/external-apis/atlassian/confluence/approval.d.ts.map +1 -0
  264. package/dist/src/infrastructure/external-apis/atlassian/confluence/approval.js +102 -0
  265. package/dist/src/infrastructure/external-apis/atlassian/confluence/approval.js.map +1 -0
  266. package/dist/src/infrastructure/external-apis/atlassian/confluence/client.d.ts +23 -0
  267. package/dist/src/infrastructure/external-apis/atlassian/confluence/client.d.ts.map +1 -0
  268. package/dist/src/infrastructure/external-apis/atlassian/confluence/client.js +192 -0
  269. package/dist/src/infrastructure/external-apis/atlassian/confluence/client.js.map +1 -0
  270. package/dist/src/infrastructure/external-apis/atlassian/confluence/hierarchy.d.ts +48 -0
  271. package/dist/src/infrastructure/external-apis/atlassian/confluence/hierarchy.d.ts.map +1 -0
  272. package/dist/src/infrastructure/external-apis/atlassian/confluence/hierarchy.js +531 -0
  273. package/dist/src/infrastructure/external-apis/atlassian/confluence/hierarchy.js.map +1 -0
  274. package/dist/src/infrastructure/external-apis/atlassian/confluence/index.d.ts +10 -0
  275. package/dist/src/infrastructure/external-apis/atlassian/confluence/index.d.ts.map +1 -0
  276. package/dist/src/infrastructure/external-apis/atlassian/confluence/index.js +12 -0
  277. package/dist/src/infrastructure/external-apis/atlassian/confluence/index.js.map +1 -0
  278. package/dist/src/infrastructure/external-apis/atlassian/confluence/sync-service.d.ts +13 -0
  279. package/dist/src/infrastructure/external-apis/atlassian/confluence/sync-service.d.ts.map +1 -0
  280. package/dist/src/infrastructure/external-apis/atlassian/confluence/sync-service.js +129 -0
  281. package/dist/src/infrastructure/external-apis/atlassian/confluence/sync-service.js.map +1 -0
  282. package/dist/src/infrastructure/external-apis/atlassian/confluence/types.d.ts +113 -0
  283. package/dist/src/infrastructure/external-apis/atlassian/confluence/types.d.ts.map +1 -0
  284. package/dist/src/infrastructure/external-apis/atlassian/confluence/types.js +5 -0
  285. package/dist/src/infrastructure/external-apis/atlassian/confluence/types.js.map +1 -0
  286. package/dist/src/infrastructure/external-apis/atlassian/jira/adf-converter.d.ts +15 -0
  287. package/dist/src/infrastructure/external-apis/atlassian/jira/adf-converter.d.ts.map +1 -0
  288. package/dist/src/infrastructure/external-apis/atlassian/jira/adf-converter.js +141 -0
  289. package/dist/src/infrastructure/external-apis/atlassian/jira/adf-converter.js.map +1 -0
  290. package/dist/src/infrastructure/external-apis/atlassian/jira/client.d.ts +50 -0
  291. package/dist/src/infrastructure/external-apis/atlassian/jira/client.d.ts.map +1 -0
  292. package/dist/src/infrastructure/external-apis/atlassian/jira/client.js +226 -0
  293. package/dist/src/infrastructure/external-apis/atlassian/jira/client.js.map +1 -0
  294. package/dist/src/infrastructure/external-apis/atlassian/jira/index.d.ts +12 -0
  295. package/dist/src/infrastructure/external-apis/atlassian/jira/index.d.ts.map +1 -0
  296. package/dist/src/infrastructure/external-apis/atlassian/jira/index.js +16 -0
  297. package/dist/src/infrastructure/external-apis/atlassian/jira/index.js.map +1 -0
  298. package/dist/src/infrastructure/external-apis/atlassian/jira/issue-builder.d.ts +49 -0
  299. package/dist/src/infrastructure/external-apis/atlassian/jira/issue-builder.d.ts.map +1 -0
  300. package/dist/src/infrastructure/external-apis/atlassian/jira/issue-builder.js +165 -0
  301. package/dist/src/infrastructure/external-apis/atlassian/jira/issue-builder.js.map +1 -0
  302. package/dist/src/infrastructure/external-apis/atlassian/jira/status-mapper.d.ts +14 -0
  303. package/dist/src/infrastructure/external-apis/atlassian/jira/status-mapper.d.ts.map +1 -0
  304. package/dist/src/infrastructure/external-apis/atlassian/jira/status-mapper.js +110 -0
  305. package/dist/src/infrastructure/external-apis/atlassian/jira/status-mapper.js.map +1 -0
  306. package/dist/src/infrastructure/external-apis/atlassian/jira/sync-service.d.ts +32 -0
  307. package/dist/src/infrastructure/external-apis/atlassian/jira/sync-service.d.ts.map +1 -0
  308. package/dist/src/infrastructure/external-apis/atlassian/jira/sync-service.js +284 -0
  309. package/dist/src/infrastructure/external-apis/atlassian/jira/sync-service.js.map +1 -0
  310. package/dist/src/infrastructure/external-apis/atlassian/jira/types.d.ts +114 -0
  311. package/dist/src/infrastructure/external-apis/atlassian/jira/types.d.ts.map +1 -0
  312. package/dist/src/infrastructure/external-apis/atlassian/jira/types.js +7 -0
  313. package/dist/src/infrastructure/external-apis/atlassian/jira/types.js.map +1 -0
  314. package/dist/src/infrastructure/external-apis/github/client.d.ts +25 -0
  315. package/dist/src/infrastructure/external-apis/github/client.d.ts.map +1 -0
  316. package/dist/src/infrastructure/external-apis/github/client.js +109 -0
  317. package/dist/src/infrastructure/external-apis/github/client.js.map +1 -0
  318. package/dist/src/infrastructure/external-apis/github/index.d.ts +7 -0
  319. package/dist/src/infrastructure/external-apis/github/index.d.ts.map +1 -0
  320. package/dist/src/infrastructure/external-apis/github/index.js +8 -0
  321. package/dist/src/infrastructure/external-apis/github/index.js.map +1 -0
  322. package/dist/src/infrastructure/external-apis/github/types.d.ts +69 -0
  323. package/dist/src/infrastructure/external-apis/github/types.d.ts.map +1 -0
  324. package/dist/src/infrastructure/external-apis/github/types.js +5 -0
  325. package/dist/src/infrastructure/external-apis/github/types.js.map +1 -0
  326. package/dist/src/infrastructure/external-apis/github/utils.d.ts +18 -0
  327. package/dist/src/infrastructure/external-apis/github/utils.d.ts.map +1 -0
  328. package/dist/src/infrastructure/external-apis/github/utils.js +84 -0
  329. package/dist/src/infrastructure/external-apis/github/utils.js.map +1 -0
  330. package/dist/src/infrastructure/filesystem/index.d.ts +6 -0
  331. package/dist/src/infrastructure/filesystem/index.d.ts.map +1 -0
  332. package/dist/src/infrastructure/filesystem/index.js +5 -0
  333. package/dist/src/infrastructure/filesystem/index.js.map +1 -0
  334. package/dist/src/infrastructure/filesystem/project-meta.d.ts +32 -0
  335. package/dist/src/infrastructure/filesystem/project-meta.d.ts.map +1 -0
  336. package/dist/src/infrastructure/filesystem/project-meta.js +75 -0
  337. package/dist/src/infrastructure/filesystem/project-meta.js.map +1 -0
  338. package/dist/src/infrastructure/parsers/aidlc-parser.d.ts +86 -0
  339. package/dist/src/infrastructure/parsers/aidlc-parser.d.ts.map +1 -0
  340. package/dist/src/infrastructure/parsers/aidlc-parser.js +208 -0
  341. package/dist/src/infrastructure/parsers/aidlc-parser.js.map +1 -0
  342. package/dist/src/infrastructure/parsers/index.d.ts +8 -0
  343. package/dist/src/infrastructure/parsers/index.d.ts.map +1 -0
  344. package/dist/src/infrastructure/parsers/index.js +6 -0
  345. package/dist/src/infrastructure/parsers/index.js.map +1 -0
  346. package/dist/src/infrastructure/parsers/markdown-parser.d.ts +51 -0
  347. package/dist/src/infrastructure/parsers/markdown-parser.d.ts.map +1 -0
  348. package/dist/src/infrastructure/parsers/markdown-parser.js +253 -0
  349. package/dist/src/infrastructure/parsers/markdown-parser.js.map +1 -0
  350. package/dist/src/presentation/cli/config.d.ts +12 -0
  351. package/dist/src/presentation/cli/config.d.ts.map +1 -0
  352. package/dist/src/presentation/cli/config.js +22 -0
  353. package/dist/src/presentation/cli/config.js.map +1 -0
  354. package/dist/src/presentation/cli/version.d.ts +10 -0
  355. package/dist/src/presentation/cli/version.d.ts.map +1 -0
  356. package/dist/src/presentation/cli/version.js +41 -0
  357. package/dist/src/presentation/cli/version.js.map +1 -0
  358. package/dist/src/presentation/cli.d.ts +22 -0
  359. package/dist/src/presentation/cli.d.ts.map +1 -0
  360. package/dist/src/presentation/cli.js +85 -0
  361. package/dist/src/presentation/cli.js.map +1 -0
  362. package/dist/src/presentation/commands/config/register.d.ts +11 -0
  363. package/dist/src/presentation/commands/config/register.d.ts.map +1 -0
  364. package/dist/src/presentation/commands/config/register.js +98 -0
  365. package/dist/src/presentation/commands/config/register.js.map +1 -0
  366. package/dist/src/presentation/commands/confluence/register.d.ts +11 -0
  367. package/dist/src/presentation/commands/confluence/register.d.ts.map +1 -0
  368. package/dist/src/presentation/commands/confluence/register.js +32 -0
  369. package/dist/src/presentation/commands/confluence/register.js.map +1 -0
  370. package/dist/src/presentation/commands/confluence/sync.d.ts +17 -0
  371. package/dist/src/presentation/commands/confluence/sync.d.ts.map +1 -0
  372. package/dist/src/presentation/commands/confluence/sync.js +25 -0
  373. package/dist/src/presentation/commands/confluence/sync.js.map +1 -0
  374. package/dist/src/presentation/commands/init/handler.d.ts +10 -0
  375. package/dist/src/presentation/commands/init/handler.d.ts.map +1 -0
  376. package/dist/src/presentation/commands/init/handler.js +64 -0
  377. package/dist/src/presentation/commands/init/handler.js.map +1 -0
  378. package/dist/src/presentation/commands/init/prompts.d.ts +41 -0
  379. package/dist/src/presentation/commands/init/prompts.d.ts.map +1 -0
  380. package/dist/src/presentation/commands/init/prompts.js +119 -0
  381. package/dist/src/presentation/commands/init/prompts.js.map +1 -0
  382. package/dist/src/presentation/commands/init/register.d.ts +11 -0
  383. package/dist/src/presentation/commands/init/register.d.ts.map +1 -0
  384. package/dist/src/presentation/commands/init/register.js +141 -0
  385. package/dist/src/presentation/commands/init/register.js.map +1 -0
  386. package/dist/src/presentation/commands/init/setup.d.ts +26 -0
  387. package/dist/src/presentation/commands/init/setup.d.ts.map +1 -0
  388. package/dist/src/presentation/commands/init/setup.js +196 -0
  389. package/dist/src/presentation/commands/init/setup.js.map +1 -0
  390. package/dist/src/presentation/commands/init/templates.d.ts +19 -0
  391. package/dist/src/presentation/commands/init/templates.d.ts.map +1 -0
  392. package/dist/src/presentation/commands/init/templates.js +140 -0
  393. package/dist/src/presentation/commands/init/templates.js.map +1 -0
  394. package/dist/src/presentation/commands/init/validation.d.ts +21 -0
  395. package/dist/src/presentation/commands/init/validation.d.ts.map +1 -0
  396. package/dist/src/presentation/commands/init/validation.js +65 -0
  397. package/dist/src/presentation/commands/init/validation.js.map +1 -0
  398. package/dist/src/presentation/commands/jira/register.d.ts +11 -0
  399. package/dist/src/presentation/commands/jira/register.d.ts.map +1 -0
  400. package/dist/src/presentation/commands/jira/register.js +75 -0
  401. package/dist/src/presentation/commands/jira/register.js.map +1 -0
  402. package/dist/src/presentation/commands/jira/sync.d.ts +29 -0
  403. package/dist/src/presentation/commands/jira/sync.d.ts.map +1 -0
  404. package/dist/src/presentation/commands/jira/sync.js +37 -0
  405. package/dist/src/presentation/commands/jira/sync.js.map +1 -0
  406. package/dist/src/{commands/multi-repo-add-repo.d.ts → presentation/commands/multi-repo/add-repo.d.ts} +1 -1
  407. package/dist/src/presentation/commands/multi-repo/add-repo.d.ts.map +1 -0
  408. package/dist/src/{commands/multi-repo-add-repo.js → presentation/commands/multi-repo/add-repo.js} +4 -4
  409. package/dist/src/presentation/commands/multi-repo/add-repo.js.map +1 -0
  410. package/dist/src/{commands/multi-repo-ci-status.d.ts → presentation/commands/multi-repo/ci-status.d.ts} +2 -2
  411. package/dist/src/presentation/commands/multi-repo/ci-status.d.ts.map +1 -0
  412. package/dist/src/{commands/multi-repo-ci-status.js → presentation/commands/multi-repo/ci-status.js} +95 -81
  413. package/dist/src/presentation/commands/multi-repo/ci-status.js.map +1 -0
  414. package/dist/src/{commands/multi-repo-confluence-sync.d.ts → presentation/commands/multi-repo/confluence-sync.d.ts} +1 -1
  415. package/dist/src/presentation/commands/multi-repo/confluence-sync.d.ts.map +1 -0
  416. package/dist/src/{commands/multi-repo-confluence-sync.js → presentation/commands/multi-repo/confluence-sync.js} +7 -6
  417. package/dist/src/presentation/commands/multi-repo/confluence-sync.js.map +1 -0
  418. package/dist/src/{commands/multi-repo-init.d.ts → presentation/commands/multi-repo/init.d.ts} +1 -1
  419. package/dist/src/presentation/commands/multi-repo/init.d.ts.map +1 -0
  420. package/dist/src/{commands/multi-repo-init.js → presentation/commands/multi-repo/init.js} +6 -6
  421. package/dist/src/presentation/commands/multi-repo/init.js.map +1 -0
  422. package/dist/src/{commands/multi-repo-list.d.ts → presentation/commands/multi-repo/list.d.ts} +1 -1
  423. package/dist/src/presentation/commands/multi-repo/list.d.ts.map +1 -0
  424. package/dist/src/{commands/multi-repo-list.js → presentation/commands/multi-repo/list.js} +2 -2
  425. package/dist/src/presentation/commands/multi-repo/list.js.map +1 -0
  426. package/dist/src/presentation/commands/multi-repo/register.d.ts +12 -0
  427. package/dist/src/presentation/commands/multi-repo/register.d.ts.map +1 -0
  428. package/dist/src/presentation/commands/multi-repo/register.js +249 -0
  429. package/dist/src/presentation/commands/multi-repo/register.js.map +1 -0
  430. package/dist/src/{commands/multi-repo-test.d.ts → presentation/commands/multi-repo/test.d.ts} +1 -1
  431. package/dist/src/presentation/commands/multi-repo/test.d.ts.map +1 -0
  432. package/dist/src/{commands/multi-repo-test.js → presentation/commands/multi-repo/test.js} +4 -4
  433. package/dist/src/presentation/commands/multi-repo/test.js.map +1 -0
  434. package/dist/src/presentation/commands/phase/register.d.ts +11 -0
  435. package/dist/src/presentation/commands/phase/register.d.ts.map +1 -0
  436. package/dist/src/presentation/commands/phase/register.js +97 -0
  437. package/dist/src/presentation/commands/phase/register.js.map +1 -0
  438. package/dist/src/presentation/commands/spec/archive.d.ts +17 -0
  439. package/dist/src/presentation/commands/spec/archive.d.ts.map +1 -0
  440. package/dist/src/presentation/commands/spec/archive.js +40 -0
  441. package/dist/src/presentation/commands/spec/archive.js.map +1 -0
  442. package/dist/src/presentation/commands/spec/list.d.ts +15 -0
  443. package/dist/src/presentation/commands/spec/list.d.ts.map +1 -0
  444. package/dist/src/presentation/commands/spec/list.js +55 -0
  445. package/dist/src/presentation/commands/spec/list.js.map +1 -0
  446. package/dist/src/presentation/commands/spec/register.d.ts +11 -0
  447. package/dist/src/presentation/commands/spec/register.d.ts.map +1 -0
  448. package/dist/src/presentation/commands/spec/register.js +45 -0
  449. package/dist/src/presentation/commands/spec/register.js.map +1 -0
  450. package/dist/src/presentation/commands/workflow/orchestrator.d.ts +50 -0
  451. package/dist/src/presentation/commands/workflow/orchestrator.d.ts.map +1 -0
  452. package/dist/src/presentation/commands/workflow/orchestrator.js +174 -0
  453. package/dist/src/presentation/commands/workflow/orchestrator.js.map +1 -0
  454. package/dist/src/presentation/commands/workflow/register.d.ts +11 -0
  455. package/dist/src/presentation/commands/workflow/register.d.ts.map +1 -0
  456. package/dist/src/presentation/commands/workflow/register.js +58 -0
  457. package/dist/src/presentation/commands/workflow/register.js.map +1 -0
  458. package/dist/src/presentation/formatters/error-formatter.d.ts +79 -0
  459. package/dist/src/presentation/formatters/error-formatter.d.ts.map +1 -0
  460. package/dist/src/presentation/formatters/error-formatter.js +150 -0
  461. package/dist/src/presentation/formatters/error-formatter.js.map +1 -0
  462. package/dist/src/presentation/formatters/index.d.ts +8 -0
  463. package/dist/src/presentation/formatters/index.d.ts.map +1 -0
  464. package/dist/src/presentation/formatters/index.js +11 -0
  465. package/dist/src/presentation/formatters/index.js.map +1 -0
  466. package/dist/src/presentation/formatters/output-formatter.d.ts +98 -0
  467. package/dist/src/presentation/formatters/output-formatter.d.ts.map +1 -0
  468. package/dist/src/presentation/formatters/output-formatter.js +165 -0
  469. package/dist/src/presentation/formatters/output-formatter.js.map +1 -0
  470. package/dist/src/presentation/formatters/progress-formatter.d.ts +121 -0
  471. package/dist/src/presentation/formatters/progress-formatter.d.ts.map +1 -0
  472. package/dist/src/presentation/formatters/progress-formatter.js +235 -0
  473. package/dist/src/presentation/formatters/progress-formatter.js.map +1 -0
  474. package/dist/src/presentation/interactive/config/env-wizard.d.ts +9 -0
  475. package/dist/src/presentation/interactive/config/env-wizard.d.ts.map +1 -0
  476. package/dist/src/presentation/interactive/config/env-wizard.js +193 -0
  477. package/dist/src/presentation/interactive/config/env-wizard.js.map +1 -0
  478. package/dist/src/presentation/interactive/config/index.d.ts +5 -0
  479. package/dist/src/presentation/interactive/config/index.d.ts.map +1 -0
  480. package/dist/src/presentation/interactive/config/index.js +5 -0
  481. package/dist/src/presentation/interactive/config/index.js.map +1 -0
  482. package/dist/src/presentation/interactive/confirmation.d.ts +24 -0
  483. package/dist/src/presentation/interactive/confirmation.d.ts.map +1 -0
  484. package/dist/src/presentation/interactive/confirmation.js +54 -0
  485. package/dist/src/presentation/interactive/confirmation.js.map +1 -0
  486. package/dist/src/presentation/interactive/index.d.ts +8 -0
  487. package/dist/src/presentation/interactive/index.d.ts.map +1 -0
  488. package/dist/src/presentation/interactive/index.js +11 -0
  489. package/dist/src/presentation/interactive/index.js.map +1 -0
  490. package/dist/src/presentation/interactive/prompts.d.ts +30 -0
  491. package/dist/src/presentation/interactive/prompts.d.ts.map +1 -0
  492. package/dist/src/presentation/interactive/prompts.js +69 -0
  493. package/dist/src/presentation/interactive/prompts.js.map +1 -0
  494. package/dist/src/presentation/interactive/selection.d.ts +31 -0
  495. package/dist/src/presentation/interactive/selection.d.ts.map +1 -0
  496. package/dist/src/presentation/interactive/selection.js +138 -0
  497. package/dist/src/presentation/interactive/selection.js.map +1 -0
  498. package/dist/src/shared/types/errors.d.ts +132 -0
  499. package/dist/src/shared/types/errors.d.ts.map +1 -0
  500. package/dist/src/shared/types/errors.js +61 -0
  501. package/dist/src/shared/types/errors.js.map +1 -0
  502. package/dist/src/shared/types/result.d.ts +53 -0
  503. package/dist/src/shared/types/result.d.ts.map +1 -0
  504. package/dist/src/shared/types/result.js +42 -0
  505. package/dist/src/shared/types/result.js.map +1 -0
  506. package/dist/test-confluence-auth.d.ts +6 -0
  507. package/dist/test-confluence-auth.d.ts.map +1 -0
  508. package/dist/test-confluence-auth.js +128 -0
  509. package/dist/test-confluence-auth.js.map +1 -0
  510. package/docs/MIGRATION.md +513 -0
  511. package/docs/architecture.md +774 -0
  512. package/docs/guides/comprehensive-verification-guide.md +1926 -0
  513. package/docs/guides/interactive-config.md +285 -0
  514. package/docs/onion-architecture-phase0-complete.md +91 -0
  515. package/package.json +6 -6
  516. package/scripts/README.md +148 -0
  517. package/scripts/__tests__/jira-transitions.test.ts +44 -30
  518. package/scripts/__tests__/mermaid-converter.test.ts +2 -2
  519. package/scripts/__tests__/multi-repo-validator.test.ts +62 -62
  520. package/scripts/__tests__/spec-archiver.test.ts +12 -0
  521. package/scripts/__tests__/validate-phase.test.ts +6 -6
  522. package/scripts/build/README.md +24 -0
  523. package/scripts/{copy-static-assets.js → build/copy-static-assets.js} +1 -1
  524. package/scripts/{set-permissions.js → build/set-permissions.js} +1 -1
  525. package/scripts/config/config-schema.ts +43 -302
  526. package/scripts/config-global.ts +3 -2
  527. package/scripts/confluence-sync.ts +17 -538
  528. package/scripts/constants/environments.ts +3 -53
  529. package/scripts/constants/languages.ts +3 -68
  530. package/scripts/constants/test-commands.ts +3 -94
  531. package/scripts/dev-tools/README.md +22 -0
  532. package/scripts/{test-interactive.ts → dev-tools/test-interactive.ts} +4 -3
  533. package/scripts/github-actions-client.ts +18 -256
  534. package/scripts/jira-sync.ts +5 -1270
  535. package/scripts/markdown-to-confluence.ts +5 -5
  536. package/scripts/multi-project-estimate.ts +3 -2
  537. package/scripts/phase-runner.ts +41 -19
  538. package/scripts/pre-flight-check.ts +27 -11
  539. package/scripts/template/__tests__/multi-repo-renderer.test.ts +12 -0
  540. package/scripts/template/multi-repo-renderer.ts +2 -2
  541. package/scripts/test-execution-generator.ts +5 -4
  542. package/scripts/utils/__tests__/config-validator.test.ts +19 -19
  543. package/scripts/utils/__tests__/feature-name-validator.test.ts +13 -13
  544. package/scripts/utils/__tests__/multi-repo-validator.test.ts +34 -34
  545. package/scripts/utils/__tests__/project-analyzer.test.ts +542 -0
  546. package/scripts/utils/__tests__/safe-file-reader.test.ts +208 -0
  547. package/scripts/utils/__tests__/security-validator.test.ts +33 -33
  548. package/scripts/utils/__tests__/validation-result.test.ts +112 -0
  549. package/scripts/utils/aidlc-parser.ts +18 -287
  550. package/scripts/utils/ci-generator.ts +4 -3
  551. package/scripts/utils/config-loader.ts +54 -50
  552. package/scripts/utils/config-validator.ts +89 -80
  553. package/scripts/utils/docker-requirement-detector.ts +5 -4
  554. package/scripts/utils/env-config.ts +59 -40
  555. package/scripts/utils/feature-name-validator.ts +25 -40
  556. package/scripts/utils/interactive-helpers.ts +24 -132
  557. package/scripts/utils/language-detector.ts +4 -3
  558. package/scripts/utils/markdown-parser.ts +18 -373
  559. package/scripts/utils/multi-repo-validator.ts +27 -28
  560. package/scripts/utils/project-analyzer.ts +429 -0
  561. package/scripts/utils/project-detector.ts +6 -5
  562. package/scripts/utils/project-finder.ts +2 -154
  563. package/scripts/utils/project-meta.ts +8 -91
  564. package/scripts/utils/safe-file-reader.ts +158 -0
  565. package/scripts/utils/security-validator.ts +42 -78
  566. package/scripts/utils/spec-archiver.ts +7 -6
  567. package/scripts/utils/spec-updater.ts +12 -6
  568. package/scripts/utils/tasks-converter.ts +2 -2
  569. package/scripts/utils/tasks-format-validator.ts +4 -4
  570. package/scripts/utils/template-applier.ts +4 -3
  571. package/scripts/utils/types/validation.ts +92 -0
  572. package/scripts/validate-phase.ts +51 -23
  573. package/scripts/workflow-orchestrator.ts +16 -251
  574. package/dist/scripts/mermaid-converter.d.ts.map +0 -1
  575. package/dist/scripts/mermaid-converter.js.map +0 -1
  576. package/dist/scripts/resource-dashboard.d.ts +0 -7
  577. package/dist/scripts/resource-dashboard.d.ts.map +0 -1
  578. package/dist/scripts/resource-dashboard.js +0 -157
  579. package/dist/scripts/resource-dashboard.js.map +0 -1
  580. package/dist/scripts/test-interactive.d.ts.map +0 -1
  581. package/dist/scripts/test-interactive.js.map +0 -1
  582. package/dist/scripts/test-new-features.d.ts +0 -5
  583. package/dist/scripts/test-new-features.d.ts.map +0 -1
  584. package/dist/scripts/test-new-features.js +0 -148
  585. package/dist/scripts/test-new-features.js.map +0 -1
  586. package/dist/scripts/test-spec-generator.d.ts +0 -29
  587. package/dist/scripts/test-spec-generator.d.ts.map +0 -1
  588. package/dist/scripts/test-spec-generator.js +0 -493
  589. package/dist/scripts/test-spec-generator.js.map +0 -1
  590. package/dist/scripts/utils/confluence-approval.d.ts +0 -46
  591. package/dist/scripts/utils/confluence-approval.d.ts.map +0 -1
  592. package/dist/scripts/utils/confluence-approval.js +0 -120
  593. package/dist/scripts/utils/confluence-approval.js.map +0 -1
  594. package/dist/scripts/utils/template-finder.d.ts +0 -37
  595. package/dist/scripts/utils/template-finder.d.ts.map +0 -1
  596. package/dist/scripts/utils/template-finder.js +0 -58
  597. package/dist/scripts/utils/template-finder.js.map +0 -1
  598. package/dist/src/commands/multi-repo-add-repo.d.ts.map +0 -1
  599. package/dist/src/commands/multi-repo-add-repo.js.map +0 -1
  600. package/dist/src/commands/multi-repo-ci-status.d.ts.map +0 -1
  601. package/dist/src/commands/multi-repo-ci-status.js.map +0 -1
  602. package/dist/src/commands/multi-repo-confluence-sync.d.ts.map +0 -1
  603. package/dist/src/commands/multi-repo-confluence-sync.js.map +0 -1
  604. package/dist/src/commands/multi-repo-init.d.ts.map +0 -1
  605. package/dist/src/commands/multi-repo-init.js.map +0 -1
  606. package/dist/src/commands/multi-repo-list.d.ts.map +0 -1
  607. package/dist/src/commands/multi-repo-list.js.map +0 -1
  608. package/dist/src/commands/multi-repo-test.d.ts.map +0 -1
  609. package/dist/src/commands/multi-repo-test.js.map +0 -1
  610. package/dist/src/commands/setup-existing.d.ts +0 -22
  611. package/dist/src/commands/setup-existing.d.ts.map +0 -1
  612. package/dist/src/commands/setup-existing.js +0 -606
  613. package/dist/src/commands/setup-existing.js.map +0 -1
  614. package/scripts/__tests__/setup-existing-project.test.ts +0 -244
  615. package/scripts/resource-dashboard.ts +0 -189
  616. package/scripts/test-new-features.ts +0 -171
  617. package/scripts/test-spec-generator.ts +0 -570
  618. package/scripts/utils/confluence-approval.ts +0 -169
  619. package/scripts/utils/template-finder.ts +0 -69
  620. /package/dist/scripts/{mermaid-converter.d.ts → dev-tools/mermaid-converter.d.ts} +0 -0
  621. /package/dist/scripts/{mermaid-converter.js → dev-tools/mermaid-converter.js} +0 -0
  622. /package/dist/scripts/{test-interactive.d.ts → dev-tools/test-interactive.d.ts} +0 -0
  623. /package/scripts/{mermaid-converter.ts → dev-tools/mermaid-converter.ts} +0 -0
@@ -3,6 +3,7 @@
3
3
  */
4
4
 
5
5
  import MarkdownIt from 'markdown-it';
6
+ import { safeReadFileOrThrow } from './utils/safe-file-reader.js';
6
7
 
7
8
  const md = new MarkdownIt({
8
9
  html: true,
@@ -174,19 +175,18 @@ ${content}
174
175
 
175
176
  // CLI実行用
176
177
  if (import.meta.url === `file://${process.argv[1]}`) {
177
- const { readFileSync } = await import('fs');
178
178
  const { resolve } = await import('path');
179
-
179
+
180
180
  const args = process.argv.slice(2);
181
181
  if (args.length === 0) {
182
182
  console.error('Usage: tsx markdown-to-confluence.ts <markdown-file>');
183
183
  process.exit(1);
184
184
  }
185
-
185
+
186
186
  const markdownFile = resolve(args[0]);
187
- const markdown = readFileSync(markdownFile, 'utf-8');
187
+ const markdown = safeReadFileOrThrow(markdownFile);
188
188
  const confluenceHtml = convertMarkdownToConfluence(markdown);
189
-
189
+
190
190
  console.log(confluenceHtml);
191
191
  }
192
192
 
@@ -6,7 +6,8 @@ import { Octokit } from '@octokit/rest';
6
6
  import { loadEnv } from './utils/env-loader.js';
7
7
  import ExcelJS from 'exceljs';
8
8
  import { resolve, join, dirname } from 'path';
9
- import { writeFileSync, mkdirSync, unlinkSync, readFileSync } from 'fs';
9
+ import { writeFileSync, mkdirSync, unlinkSync } from 'fs';
10
+ import { safeReadFileOrThrow } from './utils/safe-file-reader.js';
10
11
  import { tmpdir } from 'os';
11
12
  import { mkdir } from 'fs/promises';
12
13
 
@@ -41,7 +42,7 @@ interface RiskEstimate {
41
42
  * design.mdから見積もりを抽出(estimate-generator.tsから統合)
42
43
  */
43
44
  function parseEstimateFromDesign(designPath: string): EstimateData {
44
- const content = readFileSync(designPath, 'utf-8');
45
+ const content = safeReadFileOrThrow(designPath, 'utf-8');
45
46
 
46
47
  const tasks: TaskEstimate[] = [];
47
48
  let totalDays = 0;
@@ -3,7 +3,7 @@
3
3
  * 各フェーズを実行し、Confluence/JIRA作成を確実に実行
4
4
  */
5
5
 
6
- import { existsSync, writeFileSync, readFileSync } from 'fs';
6
+ import { existsSync, writeFileSync } from 'fs';
7
7
  import { join, relative } from 'path';
8
8
  import { syncToConfluence } from './confluence-sync.js';
9
9
  import { syncTasksToJIRA } from './jira-sync.js';
@@ -12,6 +12,8 @@ import { runPreFlightCheck } from './pre-flight-check.js';
12
12
  import { validateFeatureNameOrThrow } from './utils/feature-name-validator.js';
13
13
  import { getTestCommands } from './constants/test-commands.js';
14
14
  import { loadSpecJson } from './utils/spec-updater.js';
15
+ import { safeReadFileOrThrow, safeReadJsonFile } from './utils/safe-file-reader.js';
16
+ import { type SpecJson } from './utils/spec-updater.js';
15
17
  import inquirer from 'inquirer';
16
18
 
17
19
  type Phase =
@@ -31,6 +33,10 @@ interface PhaseRunResult {
31
33
  errors: string[];
32
34
  }
33
35
 
36
+ interface TestTypeSelection {
37
+ selectedTypes?: string[];
38
+ }
39
+
34
40
  /**
35
41
  * 要件定義フェーズを実行
36
42
  */
@@ -91,10 +97,10 @@ async function runRequirementsPhase(feature: string): Promise<PhaseRunResult> {
91
97
  ` ${confluenceCreated ? '✅' : '❌'} Confluenceページ: ${confluenceCreated ? '作成済み' : '未作成'}`,
92
98
  );
93
99
  console.log(
94
- ` ${validation.valid ? '✅' : '❌'} バリデーション: ${validation.valid ? '成功' : '失敗'}`,
100
+ ` ${validation.success ? '✅' : '❌'} バリデーション: ${validation.success ? '成功' : '失敗'}`,
95
101
  );
96
102
 
97
- if (validation.valid && confluenceCreated) {
103
+ if (validation.success && confluenceCreated) {
98
104
  console.log('\n🎉 要件定義フェーズが完了しました!');
99
105
  console.log('📢 PMや部長にConfluenceでレビューを依頼してください');
100
106
  if (confluenceUrl) {
@@ -110,10 +116,10 @@ async function runRequirementsPhase(feature: string): Promise<PhaseRunResult> {
110
116
 
111
117
  return {
112
118
  phase: 'requirements',
113
- success: validation.valid && confluenceCreated,
119
+ success: validation.success && confluenceCreated,
114
120
  confluenceCreated,
115
121
  jiraCreated: false,
116
- validationPassed: validation.valid,
122
+ validationPassed: validation.success,
117
123
  errors,
118
124
  };
119
125
  }
@@ -178,10 +184,10 @@ async function runDesignPhase(feature: string): Promise<PhaseRunResult> {
178
184
  ` ${confluenceCreated ? '✅' : '❌'} Confluenceページ: ${confluenceCreated ? '作成済み' : '未作成'}`,
179
185
  );
180
186
  console.log(
181
- ` ${validation.valid ? '✅' : '❌'} バリデーション: ${validation.valid ? '成功' : '失敗'}`,
187
+ ` ${validation.success ? '✅' : '❌'} バリデーション: ${validation.success ? '成功' : '失敗'}`,
182
188
  );
183
189
 
184
- if (validation.valid && confluenceCreated) {
190
+ if (validation.success && confluenceCreated) {
185
191
  console.log('\n🎉 設計フェーズが完了しました!');
186
192
  console.log('📢 PMや部長にConfluenceでレビューを依頼してください');
187
193
  if (confluenceUrl) {
@@ -197,10 +203,10 @@ async function runDesignPhase(feature: string): Promise<PhaseRunResult> {
197
203
 
198
204
  return {
199
205
  phase: 'design',
200
- success: validation.valid && confluenceCreated,
206
+ success: validation.success && confluenceCreated,
201
207
  confluenceCreated,
202
208
  jiraCreated: false,
203
- validationPassed: validation.valid,
209
+ validationPassed: validation.success,
204
210
  errors,
205
211
  };
206
212
  }
@@ -249,7 +255,14 @@ async function detectAndConvertAIDLCFormat(
249
255
 
250
256
  console.log('\n🔍 tasks.mdフォーマット検証中...');
251
257
  const { isAIDLCFormat } = await import('./utils/aidlc-parser.js');
252
- const tasksContent = readFileSync(tasksPath, 'utf-8');
258
+
259
+ let tasksContent: string;
260
+ try {
261
+ tasksContent = safeReadFileOrThrow(tasksPath);
262
+ } catch (error) {
263
+ errors.push(`tasks.md読み込み失敗: ${error instanceof Error ? error.message : String(error)}`);
264
+ return { success: false, errors };
265
+ }
253
266
 
254
267
  if (!isAIDLCFormat(tasksContent)) {
255
268
  return { success: true, errors: [] };
@@ -355,7 +368,7 @@ async function validateTasksFormatAndSyncJIRA(
355
368
  */
356
369
  function displayTasksPhaseSummary(
357
370
  jiraCreated: boolean,
358
- validation: { valid: boolean; errors: string[] }
371
+ validation: { success: boolean; errors: string[] }
359
372
  ): void {
360
373
  console.log('\n' + '='.repeat(60));
361
374
  console.log('📊 タスク分割フェーズ完了チェック:');
@@ -364,10 +377,10 @@ function displayTasksPhaseSummary(
364
377
  ` ${jiraCreated ? '✅' : '❌'} JIRA Epic/Story: ${jiraCreated ? '作成済み' : '未作成'}`,
365
378
  );
366
379
  console.log(
367
- ` ${validation.valid ? '✅' : '❌'} バリデーション: ${validation.valid ? '成功' : '失敗'}`,
380
+ ` ${validation.success ? '✅' : '❌'} バリデーション: ${validation.success ? '成功' : '失敗'}`,
368
381
  );
369
382
 
370
- if (validation.valid && jiraCreated) {
383
+ if (validation.success && jiraCreated) {
371
384
  console.log('\n🎉 タスク分割フェーズが完了しました!');
372
385
  console.log('📢 開発チームに実装開始を通知してください');
373
386
  console.log('🚀 次のステップ: /kiro:spec-impl <feature>');
@@ -427,10 +440,10 @@ async function runTasksPhase(feature: string): Promise<PhaseRunResult> {
427
440
 
428
441
  return {
429
442
  phase: 'tasks',
430
- success: validation.valid && jiraCreated,
443
+ success: validation.success && jiraCreated,
431
444
  confluenceCreated: false,
432
445
  jiraCreated,
433
- validationPassed: validation.valid,
446
+ validationPassed: validation.success,
434
447
  errors,
435
448
  };
436
449
  }
@@ -697,8 +710,16 @@ async function updateEnvironmentSpecJson(
697
710
  return;
698
711
  }
699
712
 
713
+ const readResult = safeReadJsonFile<SpecJson>(specPath);
714
+ if (!readResult.success) {
715
+ const error = readResult.errors[0];
716
+ const message = error.type === 'InvalidJSON' ? error.cause : error.type;
717
+ errors.push(`spec.json読み込み失敗: ${message}`);
718
+ return { success: false, errors };
719
+ }
720
+
700
721
  try {
701
- const spec = JSON.parse(readFileSync(specPath, 'utf-8'));
722
+ const spec = readResult.value!;
702
723
  spec.environmentSetup = {
703
724
  completed: true,
704
725
  language: answers.language,
@@ -840,11 +861,12 @@ function loadPhaseBTestTypes(feature: string): string[] {
840
861
 
841
862
  let selectedTypes: string[] = [];
842
863
  if (existsSync(selectionPath)) {
843
- try {
844
- const selection = JSON.parse(readFileSync(selectionPath, 'utf-8'));
864
+ const readResult = safeReadJsonFile<TestTypeSelection>(selectionPath);
865
+ if (readResult.success) {
866
+ const selection = readResult.value!;
845
867
  selectedTypes = selection.selectedTypes || [];
846
868
  console.log(`\n✅ 選択されたテストタイプ: ${selectedTypes.join(', ')}`);
847
- } catch {
869
+ } else {
848
870
  console.warn('⚠️ test-type-selection.jsonの読み込みに失敗しました');
849
871
  }
850
872
  } else {
@@ -3,7 +3,8 @@
3
3
  * スクリプト実行前に必要な設定が揃っているか確認
4
4
  */
5
5
 
6
- import { existsSync, readFileSync } from 'fs';
6
+ import { existsSync } from 'fs';
7
+ import { safeReadJsonFile } from './utils/safe-file-reader.js';
7
8
  import { join } from 'path';
8
9
  import axios from 'axios';
9
10
  import { loadEnv } from './utils/env-loader.js';
@@ -85,14 +86,19 @@ function checkProjectJson(): { errors: string[], warnings: string[] } {
85
86
  return { errors, warnings };
86
87
  }
87
88
 
88
- let projectMeta: ProjectMeta;
89
- try {
90
- projectMeta = JSON.parse(readFileSync(projectJsonPath, 'utf-8'));
91
- } catch {
92
- errors.push('❌ project.json のパースに失敗しました');
89
+ const readResult = safeReadJsonFile<ProjectMeta>(projectJsonPath);
90
+ if (!readResult.success) {
91
+ const error = readResult.errors[0];
92
+ if (error.type === 'InvalidJSON') {
93
+ errors.push(`❌ project.json のパースに失敗しました: ${error.cause}`);
94
+ } else {
95
+ errors.push('❌ project.json のパースに失敗しました');
96
+ }
93
97
  return { errors, warnings };
94
98
  }
95
-
99
+
100
+ const projectMeta = readResult.value!;
101
+
96
102
  // 必須フィールドチェック
97
103
  const required = ['projectId', 'projectName', 'jiraProjectKey'];
98
104
  const missing = required.filter(key => !projectMeta[key]);
@@ -245,10 +251,20 @@ export async function runPreFlightCheck(phase: 'confluence' | 'jira' | 'all'): P
245
251
  if (phase === 'jira' || phase === 'all') {
246
252
  console.log('\n📋 Step 4: JIRAプロジェクト存在チェック');
247
253
  const projectJsonPath = join(process.cwd(), '.kiro', 'project.json');
248
- const projectMeta = JSON.parse(readFileSync(projectJsonPath, 'utf-8'));
249
- const jiraCheck = await checkJiraProject(projectMeta.jiraProjectKey);
250
- allErrors.push(...jiraCheck.errors);
251
- allWarnings.push(...jiraCheck.warnings);
254
+
255
+ const readResult = safeReadJsonFile<ProjectMeta>(projectJsonPath);
256
+ if (!readResult.success) {
257
+ allErrors.push(`❌ project.json読み込み失敗: ${readResult.errors[0].type}`);
258
+ } else {
259
+ const projectMeta = readResult.value!;
260
+ if (!projectMeta.jiraProjectKey) {
261
+ allErrors.push('❌ project.jsonにjiraProjectKeyが設定されていません');
262
+ } else {
263
+ const jiraCheck = await checkJiraProject(projectMeta.jiraProjectKey);
264
+ allErrors.push(...jiraCheck.errors);
265
+ allWarnings.push(...jiraCheck.warnings);
266
+ }
267
+ }
252
268
  }
253
269
 
254
270
  return {
@@ -23,6 +23,18 @@ const MICHI_PACKAGE_ROOT = resolve(__dirname, '..', '..', '..');
23
23
 
24
24
  vi.mock('fs');
25
25
 
26
+ // safe-file-reader のモック(実際のreadFileSyncモックを使用するため)
27
+ vi.mock('../../utils/safe-file-reader.js', async () => {
28
+ const mockFs = await import('fs');
29
+ return {
30
+ safeReadFileOrThrow: vi.fn((filePath: string, encoding: BufferEncoding = 'utf-8') => {
31
+ return (mockFs.readFileSync as ReturnType<typeof vi.fn>)(filePath, encoding);
32
+ }),
33
+ safeReadFile: vi.fn(),
34
+ safeReadJsonFile: vi.fn(),
35
+ };
36
+ });
37
+
26
38
  describe('createMultiRepoTemplateContext', () => {
27
39
  it('必須フィールドを含むコンテキストを作成する', () => {
28
40
  const context = createMultiRepoTemplateContext(
@@ -4,7 +4,7 @@
4
4
  * Provides template rendering functionality for Multi-Repo projects
5
5
  */
6
6
 
7
- import { readFileSync } from 'fs';
7
+ import { safeReadFileOrThrow } from '../utils/safe-file-reader.js';
8
8
  import { resolve, relative, isAbsolute, dirname } from 'path';
9
9
  import { fileURLToPath } from 'url';
10
10
  import { renderTemplate, type TemplateContext } from './renderer.js';
@@ -82,7 +82,7 @@ export const loadMultiRepoTemplate = (
82
82
  }
83
83
 
84
84
  try {
85
- return readFileSync(templatePath, 'utf-8');
85
+ return safeReadFileOrThrow(templatePath, 'utf-8');
86
86
  } catch (error) {
87
87
  const errorMessage = error instanceof Error ? error.message : String(error);
88
88
  throw new Error(
@@ -3,8 +3,9 @@
3
3
  * Phase Bで選択されたテストタイプに基づいて実行ファイルを生成
4
4
  */
5
5
 
6
- import { readFileSync, writeFileSync, existsSync, mkdirSync, chmodSync } from 'fs';
6
+ import { writeFileSync, existsSync, mkdirSync, chmodSync } from 'fs';
7
7
  import { join } from 'path';
8
+ import { safeReadFileOrThrow } from './utils/safe-file-reader.js';
8
9
 
9
10
  /**
10
11
  * セキュリティ: URLバリデーション
@@ -104,7 +105,7 @@ function extractEndpointsFromDesign(designPath: string): { endpoint: string; met
104
105
  return [{ endpoint: '/api/health', method: 'GET', baseUrl: 'http://localhost:8080' }];
105
106
  }
106
107
 
107
- const content = readFileSync(designPath, 'utf-8');
108
+ const content = safeReadFileOrThrow(designPath, 'utf-8');
108
109
  const endpoints: { endpoint: string; method: string; baseUrl: string }[] = [];
109
110
 
110
111
  // APIエンドポイントのパターンを検索
@@ -147,7 +148,7 @@ function extractPerformanceRequirements(requirementsPath: string): {
147
148
  return defaults;
148
149
  }
149
150
 
150
- const content = readFileSync(requirementsPath, 'utf-8');
151
+ const content = safeReadFileOrThrow(requirementsPath, 'utf-8');
151
152
 
152
153
  // レスポンスタイム要件を検索
153
154
  const responseTimeMatch = content.match(/(\d+)\s*(?:ms|ミリ秒)以内/);
@@ -771,7 +772,7 @@ export async function generateAllTestExecutions(
771
772
  throw new Error('test-type-selection.jsonが存在しません。先にtest-type-selectionフェーズを実行してください');
772
773
  }
773
774
 
774
- const selection = JSON.parse(readFileSync(selectionPath, 'utf-8'));
775
+ const selection = JSON.parse(safeReadFileOrThrow(selectionPath, 'utf-8'));
775
776
  const testTypes: string[] = selection.selectedTypes || [];
776
777
 
777
778
  const results: GenerationResult[] = [];
@@ -65,7 +65,7 @@ describe('config-validator', () => {
65
65
 
66
66
  const result = validateProjectConfig(testProjectRoot);
67
67
 
68
- expect(result.valid).toBe(true);
68
+ expect(result.success).toBe(true);
69
69
  expect(result.errors).toHaveLength(0);
70
70
  expect(result.warnings).toHaveLength(0);
71
71
  expect(result.info.length).toBeGreaterThan(0);
@@ -94,7 +94,7 @@ describe('config-validator', () => {
94
94
 
95
95
  const result = validateProjectConfig(testProjectRoot);
96
96
 
97
- expect(result.valid).toBe(true);
97
+ expect(result.success).toBe(true);
98
98
  expect(result.errors).toHaveLength(0);
99
99
  });
100
100
 
@@ -104,7 +104,7 @@ describe('config-validator', () => {
104
104
 
105
105
  const result = validateProjectConfig(testProjectRoot);
106
106
 
107
- expect(result.valid).toBe(false);
107
+ expect(result.success).toBe(false);
108
108
  expect(result.errors.length).toBeGreaterThan(0);
109
109
  expect(result.errors[0]).toContain('Invalid JSON');
110
110
  });
@@ -122,7 +122,7 @@ describe('config-validator', () => {
122
122
 
123
123
  const result = validateProjectConfig(testProjectRoot);
124
124
 
125
- expect(result.valid).toBe(false);
125
+ expect(result.success).toBe(false);
126
126
  expect(result.errors.length).toBeGreaterThan(0);
127
127
  expect(result.errors[0]).toContain('hierarchy');
128
128
  });
@@ -140,7 +140,7 @@ describe('config-validator', () => {
140
140
 
141
141
  const result = validateProjectConfig(testProjectRoot);
142
142
 
143
- expect(result.valid).toBe(false);
143
+ expect(result.success).toBe(false);
144
144
  expect(result.errors.length).toBeGreaterThan(0);
145
145
  expect(result.errors[0]).toContain('selectedPhases');
146
146
  });
@@ -179,7 +179,7 @@ describe('config-validator', () => {
179
179
 
180
180
  const result = validateForConfluenceSync('requirements', testProjectRoot);
181
181
 
182
- expect(result.valid).toBe(true);
182
+ expect(result.success).toBe(true);
183
183
  // デフォルト設定がある場合、警告が表示されない可能性がある
184
184
  // 実際の動作に合わせてテストを調整
185
185
  if (result.warnings.length > 0) {
@@ -202,7 +202,7 @@ describe('config-validator', () => {
202
202
 
203
203
  const result = validateForConfluenceSync('requirements', testProjectRoot);
204
204
 
205
- expect(result.valid).toBe(true);
205
+ expect(result.success).toBe(true);
206
206
  expect(result.errors).toHaveLength(0);
207
207
  });
208
208
 
@@ -227,7 +227,7 @@ describe('config-validator', () => {
227
227
 
228
228
  // デフォルト設定にhierarchyがある場合、エラーにならない
229
229
  // このテストは、デフォルト設定の動作を確認するためのもの
230
- expect(result.valid).toBe(true);
230
+ expect(result.success).toBe(true);
231
231
  });
232
232
 
233
233
  it('manualモードでstructure設定がない場合はエラー', () => {
@@ -246,7 +246,7 @@ describe('config-validator', () => {
246
246
 
247
247
  const result = validateForConfluenceSync('requirements', testProjectRoot);
248
248
 
249
- expect(result.valid).toBe(false);
249
+ expect(result.success).toBe(false);
250
250
  expect(result.errors.length).toBeGreaterThan(0);
251
251
  expect(result.errors[0]).toContain('structure');
252
252
  });
@@ -266,7 +266,7 @@ describe('config-validator', () => {
266
266
 
267
267
  const result = validateForConfluenceSync('requirements', testProjectRoot);
268
268
 
269
- expect(result.valid).toBe(true);
269
+ expect(result.success).toBe(true);
270
270
  // 環境変数がある場合、infoメッセージが表示される可能性がある
271
271
  // 実際の動作に合わせてテストを調整
272
272
  if (result.info.length > 0) {
@@ -318,7 +318,7 @@ describe('config-validator', () => {
318
318
  const result = validateForJiraSync(testProjectRoot);
319
319
 
320
320
  // story=nullの場合、環境変数もないのでエラーになる
321
- expect(result.valid).toBe(false);
321
+ expect(result.success).toBe(false);
322
322
  expect(result.errors.length).toBeGreaterThan(0);
323
323
  expect(result.errors[0]).toContain('issueTypes.story');
324
324
  });
@@ -338,7 +338,7 @@ describe('config-validator', () => {
338
338
 
339
339
  const result = validateForJiraSync(testProjectRoot);
340
340
 
341
- expect(result.valid).toBe(true);
341
+ expect(result.success).toBe(true);
342
342
  expect(result.errors).toHaveLength(0);
343
343
  });
344
344
 
@@ -357,7 +357,7 @@ describe('config-validator', () => {
357
357
 
358
358
  const result = validateForJiraSync(testProjectRoot);
359
359
 
360
- expect(result.valid).toBe(true);
360
+ expect(result.success).toBe(true);
361
361
  // 環境変数がある場合、infoメッセージが表示される可能性がある
362
362
  // 実際の動作に合わせてテストを調整
363
363
  if (result.info.length > 0) {
@@ -382,7 +382,7 @@ describe('config-validator', () => {
382
382
  const result = validateForJiraSync(testProjectRoot);
383
383
 
384
384
  // subtask=nullの場合、環境変数もないので警告になる
385
- expect(result.valid).toBe(true);
385
+ expect(result.success).toBe(true);
386
386
  expect(result.warnings.length).toBeGreaterThan(0);
387
387
  expect(result.warnings[0]).toContain('subtask');
388
388
  });
@@ -403,7 +403,7 @@ describe('config-validator', () => {
403
403
 
404
404
  const result = validateForJiraSync(testProjectRoot);
405
405
 
406
- expect(result.valid).toBe(false);
406
+ expect(result.success).toBe(false);
407
407
  expect(result.errors.length).toBeGreaterThan(0);
408
408
  expect(result.errors[0]).toContain('selectedPhases');
409
409
  });
@@ -490,7 +490,7 @@ describe('config-validator', () => {
490
490
 
491
491
  const result = await validateForJiraSyncAsync(testProjectRoot);
492
492
 
493
- expect(result.valid).toBe(true);
493
+ expect(result.success).toBe(true);
494
494
  expect(result.errors).toHaveLength(0);
495
495
  });
496
496
 
@@ -536,7 +536,7 @@ describe('config-validator', () => {
536
536
 
537
537
  const result = await validateForJiraSyncAsync(testProjectRoot);
538
538
 
539
- expect(result.valid).toBe(true);
539
+ expect(result.success).toBe(true);
540
540
  expect(result.errors).toHaveLength(0);
541
541
  });
542
542
 
@@ -588,7 +588,7 @@ describe('config-validator', () => {
588
588
 
589
589
  const result = await validateForJiraSyncAsync(testProjectRoot);
590
590
 
591
- expect(result.valid).toBe(false);
591
+ expect(result.success).toBe(false);
592
592
  expect(result.errors.length).toBeGreaterThan(0);
593
593
  expect(
594
594
  result.errors.some(
@@ -635,7 +635,7 @@ describe('config-validator', () => {
635
635
 
636
636
  const result = await validateForJiraSyncAsync(testProjectRoot);
637
637
 
638
- expect(result.valid).toBe(true); // エラーにはしない
638
+ expect(result.success).toBe(true); // エラーにはしない
639
639
  expect(result.warnings.length).toBeGreaterThan(0);
640
640
  expect(
641
641
  result.warnings.some((w) => w.includes('取得できませんでした')),
@@ -9,25 +9,25 @@ describe('validateFeatureName', () => {
9
9
  describe('有効なfeature名', () => {
10
10
  it('小文字の英数字とハイフンのみ', () => {
11
11
  const result = validateFeatureName('user-auth');
12
- expect(result.valid).toBe(true);
12
+ expect(result.success).toBe(true);
13
13
  expect(result.errors).toHaveLength(0);
14
14
  });
15
15
 
16
16
  it('単一単語', () => {
17
17
  const result = validateFeatureName('payment');
18
- expect(result.valid).toBe(true);
18
+ expect(result.success).toBe(true);
19
19
  expect(result.errors).toHaveLength(0);
20
20
  });
21
21
 
22
22
  it('複数単語(ハイフン区切り)', () => {
23
23
  const result = validateFeatureName('health-check-endpoint');
24
- expect(result.valid).toBe(true);
24
+ expect(result.success).toBe(true);
25
25
  expect(result.errors).toHaveLength(0);
26
26
  });
27
27
 
28
28
  it('数字を含む', () => {
29
29
  const result = validateFeatureName('api-v2');
30
- expect(result.valid).toBe(true);
30
+ expect(result.success).toBe(true);
31
31
  expect(result.errors).toHaveLength(0);
32
32
  });
33
33
  });
@@ -35,55 +35,55 @@ describe('validateFeatureName', () => {
35
35
  describe('無効なfeature名', () => {
36
36
  it('大文字を含む', () => {
37
37
  const result = validateFeatureName('UserAuth');
38
- expect(result.valid).toBe(false);
38
+ expect(result.success).toBe(false);
39
39
  expect(result.errors.some(e => e.includes('大文字'))).toBe(true);
40
40
  });
41
41
 
42
42
  it('日本語を含む', () => {
43
43
  const result = validateFeatureName('ユーザー認証');
44
- expect(result.valid).toBe(false);
44
+ expect(result.success).toBe(false);
45
45
  expect(result.errors.some(e => e.includes('日本語'))).toBe(true);
46
46
  });
47
47
 
48
48
  it('アンダースコアを含む', () => {
49
49
  const result = validateFeatureName('user_auth');
50
- expect(result.valid).toBe(false);
50
+ expect(result.success).toBe(false);
51
51
  expect(result.errors.some(e => e.includes('アンダースコア'))).toBe(true);
52
52
  });
53
53
 
54
54
  it('スペースを含む', () => {
55
55
  const result = validateFeatureName('user auth');
56
- expect(result.valid).toBe(false);
56
+ expect(result.success).toBe(false);
57
57
  expect(result.errors.some(e => e.includes('スペース'))).toBe(true);
58
58
  });
59
59
 
60
60
  it('先頭にハイフン', () => {
61
61
  const result = validateFeatureName('-user-auth');
62
- expect(result.valid).toBe(false);
62
+ expect(result.success).toBe(false);
63
63
  expect(result.errors.some(e => e.includes('先頭'))).toBe(true);
64
64
  });
65
65
 
66
66
  it('末尾にハイフン', () => {
67
67
  const result = validateFeatureName('user-auth-');
68
- expect(result.valid).toBe(false);
68
+ expect(result.success).toBe(false);
69
69
  expect(result.errors.some(e => e.includes('末尾'))).toBe(true);
70
70
  });
71
71
 
72
72
  it('連続したハイフン', () => {
73
73
  const result = validateFeatureName('user--auth');
74
- expect(result.valid).toBe(false);
74
+ expect(result.success).toBe(false);
75
75
  expect(result.errors.some(e => e.includes('連続'))).toBe(true);
76
76
  });
77
77
 
78
78
  it('空文字', () => {
79
79
  const result = validateFeatureName('');
80
- expect(result.valid).toBe(false);
80
+ expect(result.success).toBe(false);
81
81
  expect(result.errors.some(e => e.includes('空'))).toBe(true);
82
82
  });
83
83
 
84
84
  it('特殊文字を含む', () => {
85
85
  const result = validateFeatureName('user@auth');
86
- expect(result.valid).toBe(false);
86
+ expect(result.success).toBe(false);
87
87
  expect(result.errors.some(e => e.includes('使用できない文字'))).toBe(true);
88
88
  });
89
89
  });