@evolith/smart-cli 0.0.3-beta → 1.1.1

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 (496) hide show
  1. package/ARCHITECTURE.md +1 -1
  2. package/LICENSE +21 -0
  3. package/README.es.md +81 -17
  4. package/README.md +930 -158
  5. package/dist/app.module.js +81 -6
  6. package/dist/app.module.js.map +1 -1
  7. package/dist/commands/adr/adr.command.d.ts +9 -3
  8. package/dist/commands/adr/adr.command.js +82 -88
  9. package/dist/commands/adr/adr.command.js.map +1 -1
  10. package/dist/commands/agents/agents.command.d.ts +14 -0
  11. package/dist/commands/agents/agents.command.js +61 -0
  12. package/dist/commands/agents/agents.command.js.map +1 -0
  13. package/dist/commands/agents/index.d.ts +1 -0
  14. package/dist/commands/agents/index.js +6 -0
  15. package/dist/commands/agents/index.js.map +1 -0
  16. package/dist/commands/alias/alias.command.d.ts +16 -0
  17. package/dist/commands/alias/alias.command.js +95 -0
  18. package/dist/commands/alias/alias.command.js.map +1 -0
  19. package/dist/commands/api/api.catalog.d.ts +38 -0
  20. package/dist/commands/api/api.catalog.js +167 -0
  21. package/dist/commands/api/api.catalog.js.map +1 -0
  22. package/dist/commands/api/api.command.d.ts +21 -0
  23. package/dist/commands/api/api.command.js +162 -0
  24. package/dist/commands/api/api.command.js.map +1 -0
  25. package/dist/commands/architecture/scaffold/index.d.ts +2 -0
  26. package/dist/commands/architecture/scaffold/index.js +6 -0
  27. package/dist/commands/architecture/scaffold/index.js.map +1 -0
  28. package/dist/commands/architecture/scaffold/scaffold-strategy.d.ts +15 -0
  29. package/dist/commands/architecture/scaffold/scaffold-strategy.js +20 -0
  30. package/dist/commands/architecture/scaffold/scaffold-strategy.js.map +1 -0
  31. package/dist/commands/architecture/scaffold.command.d.ts +12 -3
  32. package/dist/commands/architecture/scaffold.command.js +210 -51
  33. package/dist/commands/architecture/scaffold.command.js.map +1 -1
  34. package/dist/commands/completion/completion.command.d.ts +12 -4
  35. package/dist/commands/completion/completion.command.js +159 -53
  36. package/dist/commands/completion/completion.command.js.map +1 -1
  37. package/dist/commands/docs/docs.command.d.ts +6 -3
  38. package/dist/commands/docs/docs.command.js +75 -16
  39. package/dist/commands/docs/docs.command.js.map +1 -1
  40. package/dist/commands/drift/drift.command.d.ts +7 -3
  41. package/dist/commands/drift/drift.command.js +82 -49
  42. package/dist/commands/drift/drift.command.js.map +1 -1
  43. package/dist/commands/fixtures/fixtures.command.d.ts +21 -0
  44. package/dist/commands/fixtures/fixtures.command.js +310 -0
  45. package/dist/commands/fixtures/fixtures.command.js.map +1 -0
  46. package/dist/commands/gate/gate.command.d.ts +29 -0
  47. package/dist/commands/gate/gate.command.js +193 -0
  48. package/dist/commands/gate/gate.command.js.map +1 -0
  49. package/dist/commands/history/history.command.d.ts +3 -3
  50. package/dist/commands/history/history.command.js +24 -55
  51. package/dist/commands/history/history.command.js.map +1 -1
  52. package/dist/commands/init/agents.command.d.ts +6 -4
  53. package/dist/commands/init/agents.command.js +142 -314
  54. package/dist/commands/init/agents.command.js.map +1 -1
  55. package/dist/commands/init/init.command.d.ts +9 -3
  56. package/dist/commands/init/init.command.js +39 -198
  57. package/dist/commands/init/init.command.js.map +1 -1
  58. package/dist/commands/init/init.wizard.d.ts +19 -0
  59. package/dist/commands/init/init.wizard.js +181 -0
  60. package/dist/commands/init/init.wizard.js.map +1 -0
  61. package/dist/commands/init/upgrade.command.d.ts +6 -3
  62. package/dist/commands/init/upgrade.command.js +34 -66
  63. package/dist/commands/init/upgrade.command.js.map +1 -1
  64. package/dist/commands/mcp/mcp-serve.command.d.ts +7 -5
  65. package/dist/commands/mcp/mcp-serve.command.js +84 -37
  66. package/dist/commands/mcp/mcp-serve.command.js.map +1 -1
  67. package/dist/commands/phase/phase-advance.command.d.ts +30 -0
  68. package/dist/commands/phase/phase-advance.command.js +206 -0
  69. package/dist/commands/phase/phase-advance.command.js.map +1 -0
  70. package/dist/commands/profile/profile.command.d.ts +18 -0
  71. package/dist/commands/profile/profile.command.js +198 -0
  72. package/dist/commands/profile/profile.command.js.map +1 -0
  73. package/dist/commands/sdlc/gate-status.command.d.ts +8 -3
  74. package/dist/commands/sdlc/gate-status.command.js +114 -66
  75. package/dist/commands/sdlc/gate-status.command.js.map +1 -1
  76. package/dist/commands/sdlc/generate-domain.command.d.ts +6 -3
  77. package/dist/commands/sdlc/generate-domain.command.js +126 -16
  78. package/dist/commands/sdlc/generate-domain.command.js.map +1 -1
  79. package/dist/commands/sdlc/handoff.command.d.ts +9 -4
  80. package/dist/commands/sdlc/handoff.command.js +106 -104
  81. package/dist/commands/sdlc/handoff.command.js.map +1 -1
  82. package/dist/commands/sdlc/sdlc.command.d.ts +4 -3
  83. package/dist/commands/sdlc/sdlc.command.js +17 -9
  84. package/dist/commands/sdlc/sdlc.command.js.map +1 -1
  85. package/dist/commands/standards/standards.command.d.ts +6 -3
  86. package/dist/commands/standards/standards.command.js +52 -77
  87. package/dist/commands/standards/standards.command.js.map +1 -1
  88. package/dist/commands/update/update.command.d.ts +21 -0
  89. package/dist/commands/update/update.command.js +214 -0
  90. package/dist/commands/update/update.command.js.map +1 -0
  91. package/dist/commands/upgrade/index.d.ts +1 -0
  92. package/dist/commands/upgrade/index.js +6 -0
  93. package/dist/commands/upgrade/index.js.map +1 -0
  94. package/dist/commands/upgrade/upgrade.command.d.ts +14 -0
  95. package/dist/commands/upgrade/upgrade.command.js +58 -0
  96. package/dist/commands/upgrade/upgrade.command.js.map +1 -0
  97. package/dist/commands/validate/validate.command.d.ts +24 -4
  98. package/dist/commands/validate/validate.command.js +309 -65
  99. package/dist/commands/validate/validate.command.js.map +1 -1
  100. package/dist/config/alias.service.d.ts +14 -0
  101. package/dist/{core/sync/sync.service.js → config/alias.service.js} +54 -32
  102. package/dist/config/alias.service.js.map +1 -0
  103. package/dist/contributions/contribution-validator.d.ts +16 -0
  104. package/dist/contributions/contribution-validator.js +34 -0
  105. package/dist/contributions/contribution-validator.js.map +1 -0
  106. package/dist/contributions/index.d.ts +1 -0
  107. package/dist/contributions/index.js +6 -0
  108. package/dist/contributions/index.js.map +1 -0
  109. package/dist/{domain/services → infrastructure/adapters}/agent-registry.service.d.ts +6 -2
  110. package/dist/{domain/services → infrastructure/adapters}/agent-registry.service.js +33 -10
  111. package/dist/infrastructure/adapters/agent-registry.service.js.map +1 -0
  112. package/dist/{core → infrastructure}/architecture/nx-workspace.strategy.d.ts +9 -1
  113. package/dist/infrastructure/architecture/nx-workspace.strategy.js +125 -0
  114. package/dist/infrastructure/architecture/nx-workspace.strategy.js.map +1 -0
  115. package/dist/infrastructure/catalog/catalog-loader.d.ts +1 -2
  116. package/dist/infrastructure/catalog/catalog-loader.js +14 -5
  117. package/dist/infrastructure/catalog/catalog-loader.js.map +1 -1
  118. package/dist/infrastructure/cli/base-command.d.ts +14 -0
  119. package/dist/infrastructure/cli/base-command.js +41 -0
  120. package/dist/infrastructure/cli/base-command.js.map +1 -0
  121. package/dist/infrastructure/cli/command-executor.d.ts +1 -1
  122. package/dist/infrastructure/cli/command-executor.js +4 -3
  123. package/dist/infrastructure/cli/command-executor.js.map +1 -1
  124. package/dist/infrastructure/config/config.service.d.ts +34 -0
  125. package/dist/infrastructure/config/config.service.js +126 -0
  126. package/dist/infrastructure/config/config.service.js.map +1 -0
  127. package/dist/infrastructure/filesystem/file-manager.service.d.ts +12 -0
  128. package/dist/{core → infrastructure}/filesystem/file-manager.service.js +8 -25
  129. package/dist/infrastructure/filesystem/file-manager.service.js.map +1 -0
  130. package/dist/infrastructure/formatters/output-formatter.service.js +2 -1
  131. package/dist/infrastructure/formatters/output-formatter.service.js.map +1 -1
  132. package/dist/{core → infrastructure}/observability/command-watcher.js +31 -0
  133. package/dist/infrastructure/observability/command-watcher.js.map +1 -0
  134. package/dist/{core → infrastructure}/observability/error-reporter.js +5 -5
  135. package/dist/infrastructure/observability/error-reporter.js.map +1 -0
  136. package/dist/infrastructure/observability/index.d.ts +11 -0
  137. package/dist/{core → infrastructure}/observability/index.js +8 -1
  138. package/dist/infrastructure/observability/index.js.map +1 -0
  139. package/dist/infrastructure/observability/otel-tracing.d.ts +4 -0
  140. package/dist/infrastructure/observability/otel-tracing.js +34 -0
  141. package/dist/infrastructure/observability/otel-tracing.js.map +1 -0
  142. package/dist/infrastructure/observability/structured-logger.js.map +1 -0
  143. package/dist/infrastructure/observability/timing.js.map +1 -0
  144. package/dist/infrastructure/observability/tool-usage-telemetry.service.js.map +1 -0
  145. package/dist/infrastructure/plugins/plugin-loader.d.ts +10 -0
  146. package/dist/infrastructure/plugins/plugin-loader.js +145 -0
  147. package/dist/infrastructure/plugins/plugin-loader.js.map +1 -0
  148. package/dist/infrastructure/plugins/plugin.module.d.ts +4 -0
  149. package/dist/infrastructure/plugins/plugin.module.js +28 -0
  150. package/dist/infrastructure/plugins/plugin.module.js.map +1 -0
  151. package/dist/infrastructure/prompts/init-prompt-group.d.ts +3 -0
  152. package/dist/infrastructure/prompts/init-prompt-group.js +115 -0
  153. package/dist/infrastructure/prompts/init-prompt-group.js.map +1 -0
  154. package/dist/infrastructure/prompts/init-prompt-options.d.ts +10 -0
  155. package/dist/infrastructure/prompts/init-prompt-options.js +40 -0
  156. package/dist/infrastructure/prompts/init-prompt-options.js.map +1 -0
  157. package/dist/infrastructure/prompts/progress.service.d.ts +24 -0
  158. package/dist/infrastructure/prompts/progress.service.js +180 -0
  159. package/dist/infrastructure/prompts/progress.service.js.map +1 -0
  160. package/dist/infrastructure/prompts/prompt.service.d.ts +42 -0
  161. package/dist/infrastructure/prompts/prompt.service.js +142 -0
  162. package/dist/infrastructure/prompts/prompt.service.js.map +1 -0
  163. package/dist/infrastructure/prompts/wizard.service.d.ts +27 -0
  164. package/dist/infrastructure/prompts/wizard.service.js +163 -0
  165. package/dist/infrastructure/prompts/wizard.service.js.map +1 -0
  166. package/dist/{core/abstractions → infrastructure}/providers/config-parser.provider.d.ts +1 -1
  167. package/dist/infrastructure/providers/config-parser.provider.js.map +1 -0
  168. package/dist/{core/abstractions → infrastructure}/providers/logger.provider.d.ts +1 -1
  169. package/dist/infrastructure/providers/logger.provider.js.map +1 -0
  170. package/dist/{core/abstractions → infrastructure}/providers/mock-filesystem.provider.d.ts +6 -2
  171. package/dist/{core/abstractions → infrastructure}/providers/mock-filesystem.provider.js +8 -1
  172. package/dist/infrastructure/providers/mock-filesystem.provider.js.map +1 -0
  173. package/dist/{core/abstractions → infrastructure}/providers/node-filesystem.provider.d.ts +6 -2
  174. package/dist/{core/abstractions → infrastructure}/providers/node-filesystem.provider.js +13 -0
  175. package/dist/infrastructure/providers/node-filesystem.provider.js.map +1 -0
  176. package/dist/main.js +18 -1
  177. package/dist/main.js.map +1 -1
  178. package/dist/plugins/index.d.ts +1 -0
  179. package/dist/plugins/index.js +6 -0
  180. package/dist/plugins/index.js.map +1 -0
  181. package/dist/plugins/plugin-registry.d.ts +22 -0
  182. package/dist/plugins/plugin-registry.js +33 -0
  183. package/dist/plugins/plugin-registry.js.map +1 -0
  184. package/package.json +53 -26
  185. package/shell/hooks.bash +68 -0
  186. package/shell/hooks.fish +57 -0
  187. package/shell/hooks.zsh +68 -0
  188. package/dist/app.module.spec.d.ts +0 -1
  189. package/dist/app.module.spec.js +0 -305
  190. package/dist/app.module.spec.js.map +0 -1
  191. package/dist/application/services/index.d.ts +0 -63
  192. package/dist/application/services/index.js +0 -345
  193. package/dist/application/services/index.js.map +0 -1
  194. package/dist/application/services/phase-transition.use-case.spec.d.ts +0 -1
  195. package/dist/application/services/phase-transition.use-case.spec.js +0 -297
  196. package/dist/application/services/phase-transition.use-case.spec.js.map +0 -1
  197. package/dist/application/services/services.test.d.ts +0 -1
  198. package/dist/application/services/services.test.js +0 -176
  199. package/dist/application/services/services.test.js.map +0 -1
  200. package/dist/application/use-cases/validate-satellite.use-case.d.ts +0 -18
  201. package/dist/application/use-cases/validate-satellite.use-case.js +0 -92
  202. package/dist/application/use-cases/validate-satellite.use-case.js.map +0 -1
  203. package/dist/application/use-cases/validate-satellite.use-case.spec.d.ts +0 -1
  204. package/dist/application/use-cases/validate-satellite.use-case.spec.js +0 -102
  205. package/dist/application/use-cases/validate-satellite.use-case.spec.js.map +0 -1
  206. package/dist/commands/adr/adr.command.spec.d.ts +0 -1
  207. package/dist/commands/adr/adr.command.spec.js +0 -409
  208. package/dist/commands/adr/adr.command.spec.js.map +0 -1
  209. package/dist/commands/architecture/scaffold.command.spec.d.ts +0 -1
  210. package/dist/commands/architecture/scaffold.command.spec.js +0 -207
  211. package/dist/commands/architecture/scaffold.command.spec.js.map +0 -1
  212. package/dist/commands/commands.test.d.ts +0 -1
  213. package/dist/commands/commands.test.js +0 -131
  214. package/dist/commands/commands.test.js.map +0 -1
  215. package/dist/commands/completion/completion.command.spec.d.ts +0 -1
  216. package/dist/commands/completion/completion.command.spec.js +0 -240
  217. package/dist/commands/completion/completion.command.spec.js.map +0 -1
  218. package/dist/commands/docs/docs.command.spec.d.ts +0 -1
  219. package/dist/commands/docs/docs.command.spec.js +0 -87
  220. package/dist/commands/docs/docs.command.spec.js.map +0 -1
  221. package/dist/commands/drift/drift.command.spec.d.ts +0 -1
  222. package/dist/commands/drift/drift.command.spec.js +0 -327
  223. package/dist/commands/drift/drift.command.spec.js.map +0 -1
  224. package/dist/commands/history/history.command.spec.d.ts +0 -1
  225. package/dist/commands/history/history.command.spec.js +0 -392
  226. package/dist/commands/history/history.command.spec.js.map +0 -1
  227. package/dist/commands/init/agents.command.spec.d.ts +0 -1
  228. package/dist/commands/init/agents.command.spec.js +0 -550
  229. package/dist/commands/init/agents.command.spec.js.map +0 -1
  230. package/dist/commands/init/init.command.spec.d.ts +0 -1
  231. package/dist/commands/init/init.command.spec.js +0 -272
  232. package/dist/commands/init/init.command.spec.js.map +0 -1
  233. package/dist/commands/init/upgrade.command.spec.d.ts +0 -1
  234. package/dist/commands/init/upgrade.command.spec.js +0 -378
  235. package/dist/commands/init/upgrade.command.spec.js.map +0 -1
  236. package/dist/commands/mcp/mcp-serve.command.spec.d.ts +0 -1
  237. package/dist/commands/mcp/mcp-serve.command.spec.js +0 -58
  238. package/dist/commands/mcp/mcp-serve.command.spec.js.map +0 -1
  239. package/dist/commands/sdlc/generate-domain.command.spec.d.ts +0 -1
  240. package/dist/commands/sdlc/generate-domain.command.spec.js +0 -47
  241. package/dist/commands/sdlc/generate-domain.command.spec.js.map +0 -1
  242. package/dist/commands/sdlc/handoff.command.spec.d.ts +0 -1
  243. package/dist/commands/sdlc/handoff.command.spec.js +0 -395
  244. package/dist/commands/sdlc/handoff.command.spec.js.map +0 -1
  245. package/dist/commands/sdlc/sdlc.command.spec.d.ts +0 -1
  246. package/dist/commands/sdlc/sdlc.command.spec.js +0 -45
  247. package/dist/commands/sdlc/sdlc.command.spec.js.map +0 -1
  248. package/dist/commands/standards/standards.command.spec.d.ts +0 -1
  249. package/dist/commands/standards/standards.command.spec.js +0 -311
  250. package/dist/commands/standards/standards.command.spec.js.map +0 -1
  251. package/dist/commands/validate/validate.command.spec.d.ts +0 -1
  252. package/dist/commands/validate/validate.command.spec.js +0 -368
  253. package/dist/commands/validate/validate.command.spec.js.map +0 -1
  254. package/dist/config/runtimes.json +0 -196
  255. package/dist/config/tool-catalog.json +0 -343
  256. package/dist/core/abstractions/index.d.ts +0 -6
  257. package/dist/core/abstractions/index.js +0 -23
  258. package/dist/core/abstractions/index.js.map +0 -1
  259. package/dist/core/abstractions/interfaces.d.ts +0 -60
  260. package/dist/core/abstractions/interfaces.js +0 -5
  261. package/dist/core/abstractions/interfaces.js.map +0 -1
  262. package/dist/core/abstractions/providers/config-parser.provider.js.map +0 -1
  263. package/dist/core/abstractions/providers/logger.provider.js.map +0 -1
  264. package/dist/core/abstractions/providers/logger.provider.spec.d.ts +0 -1
  265. package/dist/core/abstractions/providers/logger.provider.spec.js +0 -212
  266. package/dist/core/abstractions/providers/logger.provider.spec.js.map +0 -1
  267. package/dist/core/abstractions/providers/mock-filesystem.provider.js.map +0 -1
  268. package/dist/core/abstractions/providers/node-filesystem.provider.js.map +0 -1
  269. package/dist/core/agents/agent-ruleset-builder.d.ts +0 -30
  270. package/dist/core/agents/agent-ruleset-builder.js +0 -75
  271. package/dist/core/agents/agent-ruleset-builder.js.map +0 -1
  272. package/dist/core/agents/agent-ruleset-builder.spec.d.ts +0 -1
  273. package/dist/core/agents/agent-ruleset-builder.spec.js +0 -135
  274. package/dist/core/agents/agent-ruleset-builder.spec.js.map +0 -1
  275. package/dist/core/architecture/nx-workspace.strategy.js +0 -107
  276. package/dist/core/architecture/nx-workspace.strategy.js.map +0 -1
  277. package/dist/core/architecture/workspace-manager.strategy.d.ts +0 -7
  278. package/dist/core/architecture/workspace-manager.strategy.js +0 -3
  279. package/dist/core/architecture/workspace-manager.strategy.js.map +0 -1
  280. package/dist/core/config/config.service.d.ts +0 -15
  281. package/dist/core/config/config.service.js +0 -55
  282. package/dist/core/config/config.service.js.map +0 -1
  283. package/dist/core/config/config.service.spec.d.ts +0 -1
  284. package/dist/core/config/config.service.spec.js +0 -43
  285. package/dist/core/config/config.service.spec.js.map +0 -1
  286. package/dist/core/di/container.d.ts +0 -25
  287. package/dist/core/di/container.js +0 -87
  288. package/dist/core/di/container.js.map +0 -1
  289. package/dist/core/di/container.spec.d.ts +0 -1
  290. package/dist/core/di/container.spec.js +0 -301
  291. package/dist/core/di/container.spec.js.map +0 -1
  292. package/dist/core/errors/index.d.ts +0 -26
  293. package/dist/core/errors/index.js +0 -67
  294. package/dist/core/errors/index.js.map +0 -1
  295. package/dist/core/filesystem/file-manager.service.d.ts +0 -4
  296. package/dist/core/filesystem/file-manager.service.js.map +0 -1
  297. package/dist/core/filesystem/file-manager.service.spec.d.ts +0 -1
  298. package/dist/core/filesystem/file-manager.service.spec.js +0 -103
  299. package/dist/core/filesystem/file-manager.service.spec.js.map +0 -1
  300. package/dist/core/mcp/mcp-server.service.d.ts +0 -7
  301. package/dist/core/mcp/mcp-server.service.js +0 -31
  302. package/dist/core/mcp/mcp-server.service.js.map +0 -1
  303. package/dist/core/mcp/metrics.service.d.ts +0 -37
  304. package/dist/core/mcp/metrics.service.js +0 -72
  305. package/dist/core/mcp/metrics.service.js.map +0 -1
  306. package/dist/core/mcp/metrics.service.spec.d.ts +0 -1
  307. package/dist/core/mcp/metrics.service.spec.js +0 -159
  308. package/dist/core/mcp/metrics.service.spec.js.map +0 -1
  309. package/dist/core/mcp/prompts/index.d.ts +0 -22
  310. package/dist/core/mcp/prompts/index.js +0 -211
  311. package/dist/core/mcp/prompts/index.js.map +0 -1
  312. package/dist/core/mcp/prompts/index.spec.d.ts +0 -1
  313. package/dist/core/mcp/prompts/index.spec.js +0 -150
  314. package/dist/core/mcp/prompts/index.spec.js.map +0 -1
  315. package/dist/core/mcp/resources/index.d.ts +0 -11
  316. package/dist/core/mcp/resources/index.js +0 -209
  317. package/dist/core/mcp/resources/index.js.map +0 -1
  318. package/dist/core/mcp/resources/index.spec.d.ts +0 -1
  319. package/dist/core/mcp/resources/index.spec.js +0 -212
  320. package/dist/core/mcp/resources/index.spec.js.map +0 -1
  321. package/dist/core/mcp/server.d.ts +0 -31
  322. package/dist/core/mcp/server.js +0 -719
  323. package/dist/core/mcp/server.js.map +0 -1
  324. package/dist/core/mcp/server.spec.d.ts +0 -1
  325. package/dist/core/mcp/server.spec.js +0 -563
  326. package/dist/core/mcp/server.spec.js.map +0 -1
  327. package/dist/core/mcp/tools/agent.d.ts +0 -41
  328. package/dist/core/mcp/tools/agent.js +0 -195
  329. package/dist/core/mcp/tools/agent.js.map +0 -1
  330. package/dist/core/mcp/tools/agent.spec.d.ts +0 -1
  331. package/dist/core/mcp/tools/agent.spec.js +0 -171
  332. package/dist/core/mcp/tools/agent.spec.js.map +0 -1
  333. package/dist/core/mcp/tools/architecture.d.ts +0 -29
  334. package/dist/core/mcp/tools/architecture.js +0 -234
  335. package/dist/core/mcp/tools/architecture.js.map +0 -1
  336. package/dist/core/mcp/tools/architecture.spec.d.ts +0 -1
  337. package/dist/core/mcp/tools/architecture.spec.js +0 -145
  338. package/dist/core/mcp/tools/architecture.spec.js.map +0 -1
  339. package/dist/core/mcp/tools/moscow.d.ts +0 -30
  340. package/dist/core/mcp/tools/moscow.js +0 -113
  341. package/dist/core/mcp/tools/moscow.js.map +0 -1
  342. package/dist/core/mcp/tools/moscow.spec.d.ts +0 -1
  343. package/dist/core/mcp/tools/moscow.spec.js +0 -209
  344. package/dist/core/mcp/tools/moscow.spec.js.map +0 -1
  345. package/dist/core/mcp/tools/sdlc.d.ts +0 -32
  346. package/dist/core/mcp/tools/sdlc.js +0 -190
  347. package/dist/core/mcp/tools/sdlc.js.map +0 -1
  348. package/dist/core/mcp/tools/sdlc.spec.d.ts +0 -1
  349. package/dist/core/mcp/tools/sdlc.spec.js +0 -170
  350. package/dist/core/mcp/tools/sdlc.spec.js.map +0 -1
  351. package/dist/core/mcp/tools/tool-utils.d.ts +0 -4
  352. package/dist/core/mcp/tools/tool-utils.js +0 -18
  353. package/dist/core/mcp/tools/tool-utils.js.map +0 -1
  354. package/dist/core/mcp/tools/validate.d.ts +0 -18
  355. package/dist/core/mcp/tools/validate.js +0 -56
  356. package/dist/core/mcp/tools/validate.js.map +0 -1
  357. package/dist/core/mcp/tools/validate.spec.d.ts +0 -1
  358. package/dist/core/mcp/tools/validate.spec.js +0 -130
  359. package/dist/core/mcp/tools/validate.spec.js.map +0 -1
  360. package/dist/core/mcp/watcher.service.d.ts +0 -8
  361. package/dist/core/mcp/watcher.service.js +0 -82
  362. package/dist/core/mcp/watcher.service.js.map +0 -1
  363. package/dist/core/mcp/watcher.service.spec.d.ts +0 -1
  364. package/dist/core/mcp/watcher.service.spec.js +0 -171
  365. package/dist/core/mcp/watcher.service.spec.js.map +0 -1
  366. package/dist/core/observability/command-watcher.js.map +0 -1
  367. package/dist/core/observability/error-reporter.js.map +0 -1
  368. package/dist/core/observability/error-reporter.spec.d.ts +0 -1
  369. package/dist/core/observability/error-reporter.spec.js +0 -291
  370. package/dist/core/observability/error-reporter.spec.js.map +0 -1
  371. package/dist/core/observability/index.d.ts +0 -4
  372. package/dist/core/observability/index.js.map +0 -1
  373. package/dist/core/observability/observability.test.d.ts +0 -1
  374. package/dist/core/observability/observability.test.js +0 -224
  375. package/dist/core/observability/observability.test.js.map +0 -1
  376. package/dist/core/observability/structured-logger.js.map +0 -1
  377. package/dist/core/observability/structured-logger.spec.d.ts +0 -1
  378. package/dist/core/observability/structured-logger.spec.js +0 -197
  379. package/dist/core/observability/structured-logger.spec.js.map +0 -1
  380. package/dist/core/observability/timing.js.map +0 -1
  381. package/dist/core/observability/timing.spec.d.ts +0 -1
  382. package/dist/core/observability/timing.spec.js +0 -216
  383. package/dist/core/observability/timing.spec.js.map +0 -1
  384. package/dist/core/services/command-executor.service.d.ts +0 -3
  385. package/dist/core/services/command-executor.service.js +0 -12
  386. package/dist/core/services/command-executor.service.js.map +0 -1
  387. package/dist/core/services/command-history.service.d.ts +0 -38
  388. package/dist/core/services/command-history.service.js +0 -146
  389. package/dist/core/services/command-history.service.js.map +0 -1
  390. package/dist/core/services/command-history.service.spec.d.ts +0 -1
  391. package/dist/core/services/command-history.service.spec.js +0 -166
  392. package/dist/core/services/command-history.service.spec.js.map +0 -1
  393. package/dist/core/services/command-providers.d.ts +0 -1
  394. package/dist/core/services/command-providers.js +0 -17
  395. package/dist/core/services/command-providers.js.map +0 -1
  396. package/dist/core/services/runtime-catalog.service.d.ts +0 -2
  397. package/dist/core/services/runtime-catalog.service.js +0 -7
  398. package/dist/core/services/runtime-catalog.service.js.map +0 -1
  399. package/dist/core/sync/sync.service.d.ts +0 -4
  400. package/dist/core/sync/sync.service.js.map +0 -1
  401. package/dist/core/sync/sync.service.spec.d.ts +0 -1
  402. package/dist/core/sync/sync.service.spec.js +0 -63
  403. package/dist/core/sync/sync.service.spec.js.map +0 -1
  404. package/dist/core/upgrade/satellite-upgrade.service.d.ts +0 -48
  405. package/dist/core/upgrade/satellite-upgrade.service.js +0 -358
  406. package/dist/core/upgrade/satellite-upgrade.service.js.map +0 -1
  407. package/dist/core/upgrade/satellite-upgrade.service.spec.d.ts +0 -1
  408. package/dist/core/upgrade/satellite-upgrade.service.spec.js +0 -163
  409. package/dist/core/upgrade/satellite-upgrade.service.spec.js.map +0 -1
  410. package/dist/core/validators/architecture-drift.service.d.ts +0 -68
  411. package/dist/core/validators/architecture-drift.service.js +0 -266
  412. package/dist/core/validators/architecture-drift.service.js.map +0 -1
  413. package/dist/core/validators/architecture-drift.service.spec.d.ts +0 -1
  414. package/dist/core/validators/architecture-drift.service.spec.js +0 -315
  415. package/dist/core/validators/architecture-drift.service.spec.js.map +0 -1
  416. package/dist/core/validators/deep-architecture-analyzer.d.ts +0 -58
  417. package/dist/core/validators/deep-architecture-analyzer.js +0 -333
  418. package/dist/core/validators/deep-architecture-analyzer.js.map +0 -1
  419. package/dist/core/validators/deep-architecture-analyzer.spec.d.ts +0 -1
  420. package/dist/core/validators/deep-architecture-analyzer.spec.js +0 -216
  421. package/dist/core/validators/deep-architecture-analyzer.spec.js.map +0 -1
  422. package/dist/core/validators/phase-gate-validator.service.d.ts +0 -71
  423. package/dist/core/validators/phase-gate-validator.service.js +0 -273
  424. package/dist/core/validators/phase-gate-validator.service.js.map +0 -1
  425. package/dist/core/validators/phase-gate-validator.service.spec.d.ts +0 -1
  426. package/dist/core/validators/phase-gate-validator.service.spec.js +0 -326
  427. package/dist/core/validators/phase-gate-validator.service.spec.js.map +0 -1
  428. package/dist/core/validators/ruleset-validator-architecture.spec.d.ts +0 -1
  429. package/dist/core/validators/ruleset-validator-architecture.spec.js +0 -178
  430. package/dist/core/validators/ruleset-validator-architecture.spec.js.map +0 -1
  431. package/dist/core/validators/ruleset-validator.service.d.ts +0 -80
  432. package/dist/core/validators/ruleset-validator.service.js +0 -657
  433. package/dist/core/validators/ruleset-validator.service.js.map +0 -1
  434. package/dist/core/validators/ruleset-validator.service.spec.d.ts +0 -1
  435. package/dist/core/validators/ruleset-validator.service.spec.js +0 -469
  436. package/dist/core/validators/ruleset-validator.service.spec.js.map +0 -1
  437. package/dist/domain/entities/index.d.ts +0 -72
  438. package/dist/domain/entities/index.js +0 -119
  439. package/dist/domain/entities/index.js.map +0 -1
  440. package/dist/domain/interfaces.d.ts +0 -224
  441. package/dist/domain/interfaces.js +0 -3
  442. package/dist/domain/interfaces.js.map +0 -1
  443. package/dist/domain/services/adr.service.d.ts +0 -50
  444. package/dist/domain/services/adr.service.js +0 -125
  445. package/dist/domain/services/adr.service.js.map +0 -1
  446. package/dist/domain/services/adr.service.spec.d.ts +0 -1
  447. package/dist/domain/services/adr.service.spec.js +0 -141
  448. package/dist/domain/services/adr.service.spec.js.map +0 -1
  449. package/dist/domain/services/agent-registry.service.js.map +0 -1
  450. package/dist/domain/services/agent-registry.service.spec.d.ts +0 -1
  451. package/dist/domain/services/agent-registry.service.spec.js +0 -162
  452. package/dist/domain/services/agent-registry.service.spec.js.map +0 -1
  453. package/dist/domain/services/index.d.ts +0 -34
  454. package/dist/domain/services/index.js +0 -128
  455. package/dist/domain/services/index.js.map +0 -1
  456. package/dist/domain/services/moscow-prioritization.service.d.ts +0 -44
  457. package/dist/domain/services/moscow-prioritization.service.js +0 -213
  458. package/dist/domain/services/moscow-prioritization.service.js.map +0 -1
  459. package/dist/domain/services/moscow-prioritization.service.spec.d.ts +0 -1
  460. package/dist/domain/services/moscow-prioritization.service.spec.js +0 -285
  461. package/dist/domain/services/moscow-prioritization.service.spec.js.map +0 -1
  462. package/dist/domain/services/services.test.d.ts +0 -1
  463. package/dist/domain/services/services.test.js +0 -236
  464. package/dist/domain/services/services.test.js.map +0 -1
  465. package/dist/domain/services/standards.service.d.ts +0 -47
  466. package/dist/domain/services/standards.service.js +0 -129
  467. package/dist/domain/services/standards.service.js.map +0 -1
  468. package/dist/domain/services/standards.service.spec.d.ts +0 -1
  469. package/dist/domain/services/standards.service.spec.js +0 -600
  470. package/dist/domain/services/standards.service.spec.js.map +0 -1
  471. package/dist/domain/services/tool-usage-telemetry.service.js.map +0 -1
  472. package/dist/domain/services/tool-usage-telemetry.service.spec.d.ts +0 -1
  473. package/dist/domain/services/tool-usage-telemetry.service.spec.js +0 -180
  474. package/dist/domain/services/tool-usage-telemetry.service.spec.js.map +0 -1
  475. package/dist/infrastructure/catalog/catalog-loader.test.d.ts +0 -1
  476. package/dist/infrastructure/catalog/catalog-loader.test.js +0 -184
  477. package/dist/infrastructure/catalog/catalog-loader.test.js.map +0 -1
  478. package/dist/infrastructure/cli/command-executor.test.d.ts +0 -1
  479. package/dist/infrastructure/cli/command-executor.test.js +0 -98
  480. package/dist/infrastructure/cli/command-executor.test.js.map +0 -1
  481. package/dist/infrastructure/formatters/output-formatter.service.spec.d.ts +0 -1
  482. package/dist/infrastructure/formatters/output-formatter.service.spec.js +0 -164
  483. package/dist/infrastructure/formatters/output-formatter.service.spec.js.map +0 -1
  484. package/dist/test/mocks/index.d.ts +0 -44
  485. package/dist/test/mocks/index.js +0 -135
  486. package/dist/test/mocks/index.js.map +0 -1
  487. /package/dist/{core → infrastructure}/observability/command-watcher.d.ts +0 -0
  488. /package/dist/{core → infrastructure}/observability/error-reporter.d.ts +0 -0
  489. /package/dist/{core → infrastructure}/observability/structured-logger.d.ts +0 -0
  490. /package/dist/{core → infrastructure}/observability/structured-logger.js +0 -0
  491. /package/dist/{core → infrastructure}/observability/timing.d.ts +0 -0
  492. /package/dist/{core → infrastructure}/observability/timing.js +0 -0
  493. /package/dist/{domain/services → infrastructure/observability}/tool-usage-telemetry.service.d.ts +0 -0
  494. /package/dist/{domain/services → infrastructure/observability}/tool-usage-telemetry.service.js +0 -0
  495. /package/dist/{core/abstractions → infrastructure}/providers/config-parser.provider.js +0 -0
  496. /package/dist/{core/abstractions → infrastructure}/providers/logger.provider.js +0 -0
@@ -1,326 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const phase_gate_validator_service_1 = require("./phase-gate-validator.service");
4
- const abstractions_1 = require("../abstractions");
5
- const createMockFileSystem = (overrides) => {
6
- const mock = {
7
- exists: jest.fn().mockResolvedValue(true),
8
- existsSync: jest.fn().mockReturnValue(true),
9
- readFile: jest.fn().mockResolvedValue(''),
10
- readJson: jest.fn().mockResolvedValue({}),
11
- readdirNames: jest.fn().mockResolvedValue([]),
12
- writeFile: jest.fn().mockResolvedValue(undefined),
13
- writeJson: jest.fn().mockResolvedValue(undefined),
14
- ensureDir: jest.fn().mockResolvedValue(undefined),
15
- remove: jest.fn().mockResolvedValue(undefined),
16
- stat: jest.fn().mockResolvedValue({ isDirectory: () => true, isFile: () => false }),
17
- ...overrides,
18
- };
19
- return mock;
20
- };
21
- const mockRuleset = {
22
- gates: [
23
- {
24
- phase: 1,
25
- name: 'Business Sign-Off',
26
- description: 'Scope frozen; funding authorized; architectural constraints aligned.',
27
- mandatoryEvidence: [
28
- { artifact: 'PRD', schemaRef: '../schema/prd.schema.json', status: 'Approved', validation: 'PRD status = Approved' },
29
- { artifact: 'Discovery Canvas', validation: 'Initiative registered' },
30
- { artifact: 'Business Case ROI', validation: 'Financial viability documented' },
31
- { artifact: 'Ballpark Estimation', validation: 'T-Shirt sizing completed' },
32
- ],
33
- blockingCriteria: [
34
- { criterion: 'Scope is ambiguous', action: 'BLOCK — return to Phase 1' },
35
- { criterion: 'Funding outcome is unclear', action: 'BLOCK — return to Phase 1' },
36
- { criterion: 'Architecture constraints are ignored', action: 'BLOCK — return to Phase 1' },
37
- ],
38
- accountableRole: 'Product Owner',
39
- waiverAuthority: 'Executive Sponsor',
40
- waiverRequiredFields: ['criterion', 'justification', 'risk', 'owner', 'expirationDate', 'mitigationPlan'],
41
- },
42
- {
43
- phase: 2,
44
- name: 'Design Baseline Approved',
45
- description: 'Architecture decisions documented; bounded contexts defined.',
46
- mandatoryEvidence: [
47
- { artifact: 'ADR Registry', validation: 'All architecture decisions have ADR' },
48
- { artifact: 'Functional Stories', schemaRef: '../schema/functional-story.schema.json', validation: 'All stories in Ready state' },
49
- { artifact: 'Bounded Context Map', validation: 'All contexts identified' },
50
- ],
51
- blockingCriteria: [
52
- { criterion: 'Significant architecture decisions are undocumented', action: 'BLOCK — require ADR' },
53
- { criterion: 'Bounded context boundaries are contradictory', action: 'BLOCK — require context map resolution' },
54
- { criterion: 'Functional stories Lack acceptance criteria', action: 'BLOCK — return to story writing' },
55
- ],
56
- accountableRole: 'Software Architect',
57
- waiverAuthority: 'Architecture Board',
58
- waiverRequiredFields: ['criterion', 'justification', 'risk', 'owner', 'expirationDate', 'mitigationPlan'],
59
- },
60
- {
61
- phase: 3,
62
- name: 'Successful Build',
63
- description: 'All code merged to main; CI passes; quality gates green.',
64
- mandatoryEvidence: [
65
- { artifact: 'Technical Stories', schemaRef: '../schema/technical-story.schema.json', validation: 'All technical stories Done' },
66
- { artifact: 'CI Pipeline', validation: 'CI run green on main branch' },
67
- { artifact: 'Coverage Report', validation: 'Business logic coverage >= 80%' },
68
- ],
69
- blockingCriteria: [
70
- { criterion: 'CI fails on main branch', action: 'BLOCK merge — fix CI' },
71
- { criterion: 'Coverage below threshold (< 80%)', action: 'BLOCK merge — add tests' },
72
- { criterion: 'High or Critical CVEs detected', action: 'BLOCK merge — remediate CVEs' },
73
- { criterion: 'Missing code review approval', action: 'BLOCK merge — require review' },
74
- ],
75
- accountableRole: 'Tech Lead',
76
- waiverAuthority: 'Architecture Board (with exception for CVEs requires Executive Risk Acceptance)',
77
- waiverRequiredFields: ['criterion', 'justification', 'risk', 'owner', 'expirationDate', 'mitigationPlan', 'approvalAuthority'],
78
- },
79
- {
80
- phase: 4,
81
- name: 'RC Stamped',
82
- description: 'All quality thresholds verified; security scans clean; UAT passed.',
83
- mandatoryEvidence: [
84
- { artifact: 'Test Summary Report', schemaRef: '../schema/test-summary-report.schema.json', validation: 'All quality gates green' },
85
- { artifact: 'Acceptance Validation', validation: 'Product Owner signs off' },
86
- { artifact: 'Security Scan Report', validation: 'Zero High/Critical CVEs' },
87
- ],
88
- blockingCriteria: [
89
- { criterion: 'Any mandatory quality metric fails', action: 'BLOCK RC stamp — remediate or waiver' },
90
- { criterion: 'Acceptance criteria remain unverified', action: 'BLOCK RC stamp — return to validation' },
91
- { criterion: 'Technical debt ratio exceeds 5%', action: 'BLOCK RC stamp — remediation plan required' },
92
- ],
93
- accountableRole: 'QA Lead',
94
- waiverAuthority: 'Architecture Board',
95
- waiverRequiredFields: ['criterion', 'justification', 'risk', 'owner', 'expirationDate', 'mitigationPlan'],
96
- },
97
- {
98
- phase: 5,
99
- name: 'Production Live',
100
- description: 'Deployment executed; observability verified nominal; monitoring active.',
101
- mandatoryEvidence: [
102
- { artifact: 'Release Notes', schemaRef: '../schema/release-notes.schema.json', validation: 'Release scope, deployment steps, rollback procedure present' },
103
- { artifact: 'Observability Validation', validation: 'Metrics nominal, logs flowing, traces complete' },
104
- { artifact: 'Rollback Procedure', validation: 'Rollback steps documented and tested' },
105
- { artifact: 'Deployment Evidence', validation: 'Deployment artifacts traceable to RC' },
106
- ],
107
- blockingCriteria: [
108
- { criterion: 'Monitoring is not nominal', action: 'BLOCK Production Live — investigate' },
109
- { criterion: 'Rollback procedure is undefined', action: 'BLOCK Production Live — document rollback' },
110
- { criterion: 'Release is not traceable to RC', action: 'BLOCK Production Live — ensure RC → Release chain' },
111
- ],
112
- accountableRole: 'DevOps Lead',
113
- waiverAuthority: 'Technology Director',
114
- waiverRequiredFields: ['criterion', 'justification', 'risk', 'owner', 'expirationDate', 'mitigationPlan'],
115
- },
116
- ],
117
- };
118
- describe('PhaseGateValidatorService', () => {
119
- let service;
120
- let mockFs;
121
- beforeEach(() => {
122
- (0, abstractions_1.resetContainer)();
123
- jest.clearAllMocks();
124
- mockFs = createMockFileSystem({
125
- readFile: jest.fn().mockResolvedValue(JSON.stringify(mockRuleset)),
126
- });
127
- const mockProvider = {
128
- createFileSystem: () => mockFs,
129
- };
130
- (0, abstractions_1.getContainer)().setFileSystemProvider(mockProvider);
131
- service = new phase_gate_validator_service_1.PhaseGateValidatorService('/core');
132
- });
133
- afterEach(() => {
134
- (0, abstractions_1.resetContainer)();
135
- });
136
- describe('loadRuleset', () => {
137
- it('should load and cache the ruleset from file', async () => {
138
- const result = await service.loadRuleset();
139
- expect(result.gates).toHaveLength(5);
140
- expect(result.gates[0].phase).toBe(1);
141
- expect(result.gates[0].name).toBe('Business Sign-Off');
142
- });
143
- it('should return cached ruleset on subsequent calls', async () => {
144
- await service.loadRuleset();
145
- await service.loadRuleset();
146
- expect(mockFs.readFile).toHaveBeenCalledTimes(1);
147
- });
148
- it('should throw when ruleset file cannot be read', async () => {
149
- mockFs.readFile.mockRejectedValue(new Error('File not found'));
150
- await expect(service.loadRuleset()).rejects.toThrow('Cannot load phase gates ruleset');
151
- });
152
- });
153
- describe('validateGate', () => {
154
- it('should pass gate 1 when all evidence artifacts exist', async () => {
155
- const result = await service.validateGate(1, '/project');
156
- expect(result.phase).toBe(1);
157
- expect(result.name).toBe('Business Sign-Off');
158
- expect(result.passed).toBe(true);
159
- expect(result.evidenceResults).toHaveLength(4);
160
- expect(result.evidenceResults.every(e => e.passed)).toBe(true);
161
- });
162
- it('should fail gate 1 when PRD artifact is missing', async () => {
163
- mockFs.exists.mockImplementation((p) => {
164
- if (p.includes('prd-template.md'))
165
- return Promise.resolve(false);
166
- return Promise.resolve(true);
167
- });
168
- const result = await service.validateGate(1, '/project');
169
- expect(result.passed).toBe(false);
170
- const prdEvidence = result.evidenceResults.find(e => e.artifact === 'PRD');
171
- expect(prdEvidence?.passed).toBe(false);
172
- expect(prdEvidence?.found).toBe(false);
173
- });
174
- it('should fail gate when blocking criterion is triggered', async () => {
175
- mockFs.exists.mockImplementation((p) => {
176
- if (p.includes('prd-template.md'))
177
- return Promise.resolve(false);
178
- return Promise.resolve(true);
179
- });
180
- const result = await service.validateGate(1, '/project');
181
- const triggeredBlocks = result.blockingChecks.filter(b => b.triggered);
182
- expect(triggeredBlocks.length).toBeGreaterThan(0);
183
- });
184
- it('should throw for undefined phase gate', async () => {
185
- await expect(service.validateGate(99, '/project')).rejects.toThrow('Phase gate 99 not defined');
186
- });
187
- it('should return correct accountable role and waiver authority', async () => {
188
- const result = await service.validateGate(1, '/project');
189
- expect(result.accountableRole).toBe('Product Owner');
190
- expect(result.waiverAuthority).toBe('Executive Sponsor');
191
- expect(result.waiverAvailable).toBe(true);
192
- });
193
- });
194
- describe('validateAllGates', () => {
195
- it('should validate all 5 phase gates', async () => {
196
- const results = await service.validateAllGates('/project');
197
- expect(results).toHaveLength(5);
198
- expect(results.map(r => r.phase)).toEqual([1, 2, 3, 4, 5]);
199
- });
200
- it('should return mixed pass/fail results based on artifact availability', async () => {
201
- mockFs.exists.mockImplementation((p) => {
202
- if (p.includes('Dockerfile'))
203
- return Promise.resolve(false);
204
- if (p.includes('release-notes'))
205
- return Promise.resolve(false);
206
- return Promise.resolve(true);
207
- });
208
- const results = await service.validateAllGates('/project');
209
- const passedGates = results.filter(r => r.passed);
210
- const failedGates = results.filter(r => !r.passed);
211
- expect(passedGates.length + failedGates.length).toBe(5);
212
- });
213
- });
214
- describe('getGateStatus', () => {
215
- it('should return summary with current phase and counts', async () => {
216
- const status = await service.getGateStatus('/project');
217
- expect(status).toHaveProperty('currentPhase');
218
- expect(status).toHaveProperty('gatesPassed');
219
- expect(status).toHaveProperty('gatesFailed');
220
- expect(status).toHaveProperty('gatesPending');
221
- expect(status).toHaveProperty('results');
222
- expect(status.results).toHaveLength(5);
223
- });
224
- it('should calculate correct current phase when gates 1-2 pass', async () => {
225
- mockFs.exists.mockImplementation((p) => {
226
- if (p.includes('Dockerfile'))
227
- return Promise.resolve(false);
228
- if (p.includes('release-notes'))
229
- return Promise.resolve(false);
230
- if (p.includes('Test Summary'))
231
- return Promise.resolve(false);
232
- if (p.includes('Technical Stories'))
233
- return Promise.resolve(false);
234
- return Promise.resolve(true);
235
- });
236
- const status = await service.getGateStatus('/project');
237
- expect(status.currentPhase).toBeGreaterThanOrEqual(0);
238
- });
239
- });
240
- describe('validateSingleEvidence', () => {
241
- it('should mark evidence as not found when artifact path does not exist', async () => {
242
- mockFs.exists.mockResolvedValue(false);
243
- const result = await service.validateGate(1, '/project');
244
- const missingEvidence = result.evidenceResults.find(e => !e.found);
245
- if (missingEvidence) {
246
- expect(missingEvidence.passed).toBe(false);
247
- expect(missingEvidence.validationMessage).toContain('Artifact not found');
248
- }
249
- });
250
- it('should validate schema when schemaRef is provided', async () => {
251
- mockFs.exists.mockResolvedValue(true);
252
- mockFs.readFile.mockImplementation((p) => {
253
- if (p.includes('phase-gates.rules.json'))
254
- return Promise.resolve(JSON.stringify(mockRuleset));
255
- return Promise.resolve('valid content');
256
- });
257
- const result = await service.validateGate(1, '/project');
258
- const prdEvidence = result.evidenceResults.find(e => e.artifact === 'PRD');
259
- expect(prdEvidence).toBeDefined();
260
- });
261
- it('should fail schema validation when artifact is empty', async () => {
262
- mockFs.exists.mockResolvedValue(true);
263
- mockFs.readFile.mockImplementation((p) => {
264
- if (p.includes('phase-gates.rules.json'))
265
- return Promise.resolve(JSON.stringify(mockRuleset));
266
- return Promise.resolve('');
267
- });
268
- const result = await service.validateGate(1, '/project');
269
- const prdEvidence = result.evidenceResults.find(e => e.artifact === 'PRD');
270
- expect(prdEvidence?.schemaValid).toBe(false);
271
- });
272
- });
273
- describe('resolveArtifactPath', () => {
274
- it('should resolve PRD artifact to correct path', async () => {
275
- await service.validateGate(1, '/project');
276
- expect(mockFs.exists).toHaveBeenCalledWith(expect.stringContaining('prd-template.md'));
277
- });
278
- it('should resolve ADR Registry to correct path', async () => {
279
- await service.validateGate(2, '/project');
280
- expect(mockFs.exists).toHaveBeenCalledWith(expect.stringContaining('adr-matrix.json'));
281
- });
282
- });
283
- describe('blocking criteria checks', () => {
284
- it('should detect scope ambiguity when PRD is missing', async () => {
285
- mockFs.exists.mockImplementation((p) => {
286
- if (p.includes('prd-template.md'))
287
- return Promise.resolve(false);
288
- return Promise.resolve(true);
289
- });
290
- const result = await service.validateGate(1, '/project');
291
- const scopeBlock = result.blockingChecks.find(b => b.criterion.toLowerCase().includes('scope'));
292
- expect(scopeBlock?.triggered).toBe(true);
293
- });
294
- it('should detect undocumented architecture decisions when ADR Registry is missing', async () => {
295
- mockFs.exists.mockImplementation((p) => {
296
- if (p.includes('adr-matrix.json'))
297
- return Promise.resolve(false);
298
- return Promise.resolve(true);
299
- });
300
- const result = await service.validateGate(2, '/project');
301
- const adrBlock = result.blockingChecks.find(b => b.criterion.toLowerCase().includes('undocumented'));
302
- expect(adrBlock?.triggered).toBe(true);
303
- });
304
- it('should detect CI failure when .github/workflows is missing', async () => {
305
- mockFs.exists.mockImplementation((p) => {
306
- if (p.includes('.github/workflows'))
307
- return Promise.resolve(false);
308
- return Promise.resolve(true);
309
- });
310
- const result = await service.validateGate(3, '/project');
311
- const ciBlock = result.blockingChecks.find(b => b.criterion.toLowerCase().includes('ci fails'));
312
- expect(ciBlock?.triggered).toBe(true);
313
- });
314
- it('should detect missing rollback procedure when Release Notes are missing', async () => {
315
- mockFs.exists.mockImplementation((p) => {
316
- if (p.includes('release-notes'))
317
- return Promise.resolve(false);
318
- return Promise.resolve(true);
319
- });
320
- const result = await service.validateGate(5, '/project');
321
- const rollbackBlock = result.blockingChecks.find(b => b.criterion.toLowerCase().includes('rollback'));
322
- expect(rollbackBlock?.triggered).toBe(true);
323
- });
324
- });
325
- });
326
- //# sourceMappingURL=phase-gate-validator.service.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"phase-gate-validator.service.spec.js","sourceRoot":"","sources":["../../../src/core/validators/phase-gate-validator.service.spec.ts"],"names":[],"mappings":"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"}
@@ -1,178 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const ruleset_validator_service_1 = require("./ruleset-validator.service");
4
- const abstractions_1 = require("../abstractions");
5
- const createMockFileSystem = (overrides) => {
6
- const mock = {
7
- exists: jest.fn().mockResolvedValue(true),
8
- existsSync: jest.fn().mockReturnValue(true),
9
- readFile: jest.fn().mockResolvedValue(''),
10
- readJson: jest.fn().mockResolvedValue({}),
11
- readdirNames: jest.fn().mockResolvedValue([]),
12
- writeFile: jest.fn().mockResolvedValue(undefined),
13
- writeJson: jest.fn().mockResolvedValue(undefined),
14
- ensureDir: jest.fn().mockResolvedValue(undefined),
15
- remove: jest.fn().mockResolvedValue(undefined),
16
- stat: jest.fn().mockResolvedValue({ isDirectory: () => true, isFile: () => false }),
17
- ...overrides,
18
- };
19
- return mock;
20
- };
21
- const mockF1Ruleset = {
22
- rules: [
23
- {
24
- id: 'F1-R01',
25
- severity: 'MUST',
26
- category: 'topology',
27
- title: 'Single Deployment Unit',
28
- description: 'All bounded contexts MUST be deployed as a single artifact',
29
- blocking: true,
30
- },
31
- {
32
- id: 'F1-R02',
33
- severity: 'MUST',
34
- category: 'bounded-contexts',
35
- title: 'Explicit Bounded Context Boundaries',
36
- description: 'Each bounded context MUST be clearly separated',
37
- blocking: true,
38
- },
39
- {
40
- id: 'F1-R03',
41
- severity: 'MUST',
42
- category: 'hexagonal-architecture',
43
- title: 'Ports and Adapters Boundary',
44
- description: 'All bounded contexts MUST implement hexagonal architecture',
45
- blocking: true,
46
- },
47
- ],
48
- };
49
- describe('RulesetValidatorService - Architecture Validation', () => {
50
- let service;
51
- let mockFs;
52
- beforeEach(() => {
53
- (0, abstractions_1.resetContainer)();
54
- jest.clearAllMocks();
55
- mockFs = createMockFileSystem({
56
- readFile: jest.fn().mockImplementation((p) => {
57
- if (p.includes('f1-modular-monolith'))
58
- return Promise.resolve(JSON.stringify(mockF1Ruleset));
59
- if (p.includes('f2-distributed-modules'))
60
- return Promise.resolve(JSON.stringify({ rules: [] }));
61
- if (p.includes('f3-microservices'))
62
- return Promise.resolve(JSON.stringify({ rules: [] }));
63
- return Promise.resolve('');
64
- }),
65
- });
66
- const mockProvider = {
67
- createFileSystem: () => mockFs,
68
- };
69
- (0, abstractions_1.getContainer)().setFileSystemProvider(mockProvider);
70
- service = new ruleset_validator_service_1.RulesetValidatorService();
71
- });
72
- afterEach(() => {
73
- (0, abstractions_1.resetContainer)();
74
- });
75
- describe('validateArchitecture', () => {
76
- it('should validate F1 architecture level', async () => {
77
- const result = await service.validateArchitecture('/project', '/core', 'F1');
78
- expect(result).toHaveProperty('status');
79
- expect(result).toHaveProperty('levels');
80
- expect(result).toHaveProperty('rulesChecked');
81
- expect(result).toHaveProperty('issues');
82
- expect(result).toHaveProperty('timestamp');
83
- expect(result.levels).toContain('F1');
84
- });
85
- it('should validate ALL architecture levels by default', async () => {
86
- const result = await service.validateArchitecture('/project', '/core');
87
- expect(result.levels).toContain('F1');
88
- expect(result.levels).toContain('F2');
89
- expect(result.levels).toContain('F3');
90
- });
91
- it('should validate specific level when specified', async () => {
92
- const result = await service.validateArchitecture('/project', '/core', 'F2');
93
- expect(result.levels).toEqual(['F2']);
94
- });
95
- it('should return failed status when blocking issues exist', async () => {
96
- const result = await service.validateArchitecture('/project', '/core', 'F1');
97
- expect(result.status).toBe('failed');
98
- });
99
- it('should return issues array even when validation passes', async () => {
100
- const result = await service.validateArchitecture('/project', '/core', 'F1');
101
- expect(Array.isArray(result.issues)).toBe(true);
102
- });
103
- it('should count rules checked', async () => {
104
- const result = await service.validateArchitecture('/project', '/core', 'F1');
105
- expect(result.rulesChecked).toBeGreaterThan(0);
106
- });
107
- it('should handle missing ruleset gracefully', async () => {
108
- mockFs.exists.mockResolvedValue(false);
109
- const result = await service.validateArchitecture('/project', '/core', 'F1');
110
- expect(result.issues.some((i) => i.ruleId.includes('MISSING'))).toBe(true);
111
- });
112
- });
113
- describe('validateArchitectureRule - topology', () => {
114
- it('should validate topology rules for F1', async () => {
115
- mockFs.readFile.mockImplementation((p) => {
116
- if (p.includes('f1-modular-monolith')) {
117
- return Promise.resolve(JSON.stringify({
118
- rules: [{
119
- id: 'F1-R01',
120
- severity: 'MUST',
121
- category: 'topology',
122
- title: 'Single Deployment Unit',
123
- description: 'All bounded contexts MUST be deployed as a single artifact',
124
- blocking: true,
125
- }],
126
- }));
127
- }
128
- return Promise.resolve(JSON.stringify({ rules: [] }));
129
- });
130
- const result = await service.validateArchitecture('/project', '/core', 'F1');
131
- expect(result.rulesChecked).toBeGreaterThan(0);
132
- });
133
- });
134
- describe('validateArchitectureRule - bounded-contexts', () => {
135
- it('should validate bounded contexts rules', async () => {
136
- mockFs.readFile.mockImplementation((p) => {
137
- if (p.includes('f1-modular-monolith')) {
138
- return Promise.resolve(JSON.stringify({
139
- rules: [{
140
- id: 'F1-R02',
141
- severity: 'MUST',
142
- category: 'bounded-contexts',
143
- title: 'Explicit Bounded Context Boundaries',
144
- description: 'Each bounded context MUST be clearly separated',
145
- blocking: true,
146
- }],
147
- }));
148
- }
149
- return Promise.resolve(JSON.stringify({ rules: [] }));
150
- });
151
- mockFs.readdirNames.mockResolvedValue(['context-a', 'context-b']);
152
- const result = await service.validateArchitecture('/project', '/core', 'F1');
153
- expect(result.rulesChecked).toBeGreaterThan(0);
154
- });
155
- });
156
- describe('validateArchitectureRule - hexagonal-architecture', () => {
157
- it('should validate hexagonal architecture rules', async () => {
158
- mockFs.readFile.mockImplementation((p) => {
159
- if (p.includes('f1-modular-monolith')) {
160
- return Promise.resolve(JSON.stringify({
161
- rules: [{
162
- id: 'F1-R03',
163
- severity: 'MUST',
164
- category: 'hexagonal-architecture',
165
- title: 'Ports and Adapters Boundary',
166
- description: 'All bounded contexts MUST implement hexagonal architecture',
167
- blocking: true,
168
- }],
169
- }));
170
- }
171
- return Promise.resolve(JSON.stringify({ rules: [] }));
172
- });
173
- const result = await service.validateArchitecture('/project', '/core', 'F1');
174
- expect(result.rulesChecked).toBeGreaterThan(0);
175
- });
176
- });
177
- });
178
- //# sourceMappingURL=ruleset-validator-architecture.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ruleset-validator-architecture.spec.js","sourceRoot":"","sources":["../../../src/core/validators/ruleset-validator-architecture.spec.ts"],"names":[],"mappings":"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"}
@@ -1,80 +0,0 @@
1
- import { ILogger, IFileSystem, IConfigParser } from '../abstractions';
2
- export interface ValidationResult {
3
- status: 'passed' | 'failed' | 'warning';
4
- rulesChecked: number;
5
- issues: ValidationIssue[];
6
- coreRef: {
7
- version: string | null;
8
- path: string | null;
9
- };
10
- timestamp: string;
11
- }
12
- export interface ValidationIssue {
13
- ruleId: string;
14
- severity: 'MUST' | 'SHOULD' | 'COULD';
15
- category: string;
16
- title: string;
17
- description: string;
18
- file?: string;
19
- expected?: string;
20
- actual?: string;
21
- blocking: boolean;
22
- }
23
- export interface EvolithYaml {
24
- coreRef?: {
25
- version?: string;
26
- path?: string;
27
- };
28
- governance?: {
29
- version?: string;
30
- adrRegistry?: Array<{
31
- id: string;
32
- status: string;
33
- }>;
34
- };
35
- product?: {
36
- name?: string;
37
- type?: string;
38
- };
39
- }
40
- export interface RulesetValidatorOptions {
41
- fileSystem?: IFileSystem;
42
- configParser?: IConfigParser;
43
- logger?: ILogger;
44
- }
45
- export declare class RulesetValidatorService {
46
- private readonly logger;
47
- private readonly fs;
48
- private readonly configParser;
49
- constructor(options?: RulesetValidatorOptions);
50
- validate(satellitePath: string, corePath?: string): Promise<ValidationResult>;
51
- private loadEvolithYaml;
52
- private loadRuleset;
53
- private findCorePath;
54
- private isValidSemver;
55
- loadRulesetById(corePath: string, rulesetId: string): Promise<ValidationIssue[]>;
56
- validateArchitecture(satellitePath: string, corePath?: string, level?: 'F1' | 'F2' | 'F3' | 'ALL'): Promise<ArchitectureValidationResult>;
57
- private validateArchitectureRule;
58
- private validateTopologyRule;
59
- private validateBoundedContextsRule;
60
- private validateHexagonalRule;
61
- private validateCommunicationRule;
62
- private validatePersistenceRule;
63
- private validateAsyncRule;
64
- private validateExtractionReadinessRule;
65
- private validateObservabilityRule;
66
- private validateModuleAutonomyRule;
67
- private validateContractStabilityRule;
68
- private validateDataOwnershipRule;
69
- private validateAsyncCommunicationRule;
70
- private validateDistributedTracingRule;
71
- private validateContainerizationRule;
72
- private validateServiceBoundariesRule;
73
- }
74
- export interface ArchitectureValidationResult {
75
- status: 'passed' | 'failed' | 'warning';
76
- levels: string[];
77
- rulesChecked: number;
78
- issues: ValidationIssue[];
79
- timestamp: string;
80
- }