reviewflow 3.26.0 → 3.27.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 (306) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/dist/config/projectConfig.d.ts +1 -0
  3. package/dist/config/projectConfig.d.ts.map +1 -1
  4. package/dist/config/projectConfig.js +17 -0
  5. package/dist/config/projectConfig.js.map +1 -1
  6. package/dist/dashboard/index.html +77 -2
  7. package/dist/dashboard/modules/headerCapacityBadge.d.ts +33 -0
  8. package/dist/dashboard/modules/headerCapacityBadge.d.ts.map +1 -0
  9. package/dist/dashboard/modules/headerCapacityBadge.js +53 -0
  10. package/dist/dashboard/modules/headerCapacityBadge.js.map +1 -0
  11. package/dist/dashboard/modules/i18n.d.ts.map +1 -1
  12. package/dist/dashboard/modules/i18n.js +4 -0
  13. package/dist/dashboard/modules/i18n.js.map +1 -1
  14. package/dist/dashboard/modules/settingsModal.d.ts +17 -0
  15. package/dist/dashboard/modules/settingsModal.d.ts.map +1 -1
  16. package/dist/dashboard/modules/settingsModal.js +38 -0
  17. package/dist/dashboard/modules/settingsModal.js.map +1 -1
  18. package/dist/dashboard/modules/worktreePanel.d.ts +40 -0
  19. package/dist/dashboard/modules/worktreePanel.d.ts.map +1 -1
  20. package/dist/dashboard/modules/worktreePanel.js +98 -1
  21. package/dist/dashboard/modules/worktreePanel.js.map +1 -1
  22. package/dist/dashboard/styles.css +125 -1
  23. package/dist/frameworks/claude/claudeInvoker.d.ts.map +1 -1
  24. package/dist/frameworks/claude/claudeInvoker.js +5 -10
  25. package/dist/frameworks/claude/claudeInvoker.js.map +1 -1
  26. package/dist/frameworks/config/configLoader.d.ts +1 -0
  27. package/dist/frameworks/config/configLoader.d.ts.map +1 -1
  28. package/dist/frameworks/config/configLoader.js +11 -0
  29. package/dist/frameworks/config/configLoader.js.map +1 -1
  30. package/dist/frameworks/queue/pQueueAdapter.d.ts +17 -0
  31. package/dist/frameworks/queue/pQueueAdapter.d.ts.map +1 -1
  32. package/dist/frameworks/queue/pQueueAdapter.js +103 -40
  33. package/dist/frameworks/queue/pQueueAdapter.js.map +1 -1
  34. package/dist/frameworks/queue/projectSemaphore.d.ts +26 -0
  35. package/dist/frameworks/queue/projectSemaphore.d.ts.map +1 -0
  36. package/dist/frameworks/queue/projectSemaphore.js +79 -0
  37. package/dist/frameworks/queue/projectSemaphore.js.map +1 -0
  38. package/dist/frameworks/settings/runtimeSettings.d.ts +3 -0
  39. package/dist/frameworks/settings/runtimeSettings.d.ts.map +1 -1
  40. package/dist/frameworks/settings/runtimeSettings.js +14 -0
  41. package/dist/frameworks/settings/runtimeSettings.js.map +1 -1
  42. package/dist/main/dependencies.d.ts +4 -0
  43. package/dist/main/dependencies.d.ts.map +1 -1
  44. package/dist/main/dependencies.js +8 -0
  45. package/dist/main/dependencies.js.map +1 -1
  46. package/dist/main/routes.d.ts.map +1 -1
  47. package/dist/main/routes.js +32 -3
  48. package/dist/main/routes.js.map +1 -1
  49. package/dist/main/server.d.ts.map +1 -1
  50. package/dist/main/server.js +69 -1
  51. package/dist/main/server.js.map +1 -1
  52. package/dist/modules/cli-configuration/entities/projectConcurrencyCap/projectConcurrencyCap.guard.d.ts +2 -0
  53. package/dist/modules/cli-configuration/entities/projectConcurrencyCap/projectConcurrencyCap.guard.d.ts.map +1 -0
  54. package/dist/modules/cli-configuration/entities/projectConcurrencyCap/projectConcurrencyCap.guard.js +4 -0
  55. package/dist/modules/cli-configuration/entities/projectConcurrencyCap/projectConcurrencyCap.guard.js.map +1 -0
  56. package/dist/modules/cli-configuration/entities/projectConcurrencyCap/projectConcurrencyCap.schema.d.ts +7 -0
  57. package/dist/modules/cli-configuration/entities/projectConcurrencyCap/projectConcurrencyCap.schema.d.ts.map +1 -0
  58. package/dist/modules/cli-configuration/entities/projectConcurrencyCap/projectConcurrencyCap.schema.js +10 -0
  59. package/dist/modules/cli-configuration/entities/projectConcurrencyCap/projectConcurrencyCap.schema.js.map +1 -0
  60. package/dist/modules/cli-configuration/entities/projectConcurrencyCap/projectConcurrencyCap.valueObject.d.ts +18 -0
  61. package/dist/modules/cli-configuration/entities/projectConcurrencyCap/projectConcurrencyCap.valueObject.d.ts.map +1 -0
  62. package/dist/modules/cli-configuration/entities/projectConcurrencyCap/projectConcurrencyCap.valueObject.js +28 -0
  63. package/dist/modules/cli-configuration/entities/projectConcurrencyCap/projectConcurrencyCap.valueObject.js.map +1 -0
  64. package/dist/modules/cli-configuration/entities/repositoriesList/repositoriesList.gateway.d.ts +9 -0
  65. package/dist/modules/cli-configuration/entities/repositoriesList/repositoriesList.gateway.d.ts.map +1 -0
  66. package/dist/modules/cli-configuration/entities/repositoriesList/repositoriesList.gateway.js +2 -0
  67. package/dist/modules/cli-configuration/entities/repositoriesList/repositoriesList.gateway.js.map +1 -0
  68. package/dist/modules/cli-configuration/interface-adapters/controllers/http/projectConfig.routes.d.ts +1 -0
  69. package/dist/modules/cli-configuration/interface-adapters/controllers/http/projectConfig.routes.d.ts.map +1 -1
  70. package/dist/modules/cli-configuration/interface-adapters/controllers/http/projectConfig.routes.js +26 -0
  71. package/dist/modules/cli-configuration/interface-adapters/controllers/http/projectConfig.routes.js.map +1 -1
  72. package/dist/modules/cli-configuration/interface-adapters/gateways/repositoriesList.runtimeConfig.gateway.d.ts +8 -0
  73. package/dist/modules/cli-configuration/interface-adapters/gateways/repositoriesList.runtimeConfig.gateway.d.ts.map +1 -0
  74. package/dist/modules/cli-configuration/interface-adapters/gateways/repositoriesList.runtimeConfig.gateway.js +14 -0
  75. package/dist/modules/cli-configuration/interface-adapters/gateways/repositoriesList.runtimeConfig.gateway.js.map +1 -0
  76. package/dist/modules/cli-configuration/usecases/projectConfig/recomputeGlobalConcurrency.usecase.d.ts +26 -0
  77. package/dist/modules/cli-configuration/usecases/projectConfig/recomputeGlobalConcurrency.usecase.d.ts.map +1 -0
  78. package/dist/modules/cli-configuration/usecases/projectConfig/recomputeGlobalConcurrency.usecase.js +24 -0
  79. package/dist/modules/cli-configuration/usecases/projectConfig/recomputeGlobalConcurrency.usecase.js.map +1 -0
  80. package/dist/modules/cli-configuration/usecases/projectConfig/updateProjectConfig.usecase.d.ts +2 -1
  81. package/dist/modules/cli-configuration/usecases/projectConfig/updateProjectConfig.usecase.d.ts.map +1 -1
  82. package/dist/modules/cli-configuration/usecases/projectConfig/updateProjectConfig.usecase.js +29 -5
  83. package/dist/modules/cli-configuration/usecases/projectConfig/updateProjectConfig.usecase.js.map +1 -1
  84. package/dist/modules/review-execution/entities/job/jobHistory.gateway.d.ts +10 -0
  85. package/dist/modules/review-execution/entities/job/jobHistory.gateway.d.ts.map +1 -0
  86. package/dist/modules/review-execution/entities/job/jobHistory.gateway.js +2 -0
  87. package/dist/modules/review-execution/entities/job/jobHistory.gateway.js.map +1 -0
  88. package/dist/modules/review-execution/entities/job/jobRecord.guard.d.ts +13 -0
  89. package/dist/modules/review-execution/entities/job/jobRecord.guard.d.ts.map +1 -0
  90. package/dist/modules/review-execution/entities/job/jobRecord.guard.js +4 -0
  91. package/dist/modules/review-execution/entities/job/jobRecord.guard.js.map +1 -0
  92. package/dist/modules/review-execution/entities/job/jobRecord.schema.d.ts +33 -0
  93. package/dist/modules/review-execution/entities/job/jobRecord.schema.d.ts.map +1 -0
  94. package/dist/modules/review-execution/entities/job/jobRecord.schema.js +15 -0
  95. package/dist/modules/review-execution/entities/job/jobRecord.schema.js.map +1 -0
  96. package/dist/modules/review-execution/interface-adapters/gateways/fileSystem/jobHistory.fileSystem.gateway.d.ts +19 -0
  97. package/dist/modules/review-execution/interface-adapters/gateways/fileSystem/jobHistory.fileSystem.gateway.d.ts.map +1 -0
  98. package/dist/modules/review-execution/interface-adapters/gateways/fileSystem/jobHistory.fileSystem.gateway.js +120 -0
  99. package/dist/modules/review-execution/interface-adapters/gateways/fileSystem/jobHistory.fileSystem.gateway.js.map +1 -0
  100. package/dist/modules/review-execution/usecases/jobHistory/loadRecentJobHistory.usecase.d.ts +17 -0
  101. package/dist/modules/review-execution/usecases/jobHistory/loadRecentJobHistory.usecase.d.ts.map +1 -0
  102. package/dist/modules/review-execution/usecases/jobHistory/loadRecentJobHistory.usecase.js +11 -0
  103. package/dist/modules/review-execution/usecases/jobHistory/loadRecentJobHistory.usecase.js.map +1 -0
  104. package/dist/modules/review-execution/usecases/jobHistory/persistJobRecord.usecase.d.ts +18 -0
  105. package/dist/modules/review-execution/usecases/jobHistory/persistJobRecord.usecase.d.ts.map +1 -0
  106. package/dist/modules/review-execution/usecases/jobHistory/persistJobRecord.usecase.js +58 -0
  107. package/dist/modules/review-execution/usecases/jobHistory/persistJobRecord.usecase.js.map +1 -0
  108. package/dist/modules/review-execution/usecases/jobHistory/pruneJobHistory.usecase.d.ts +16 -0
  109. package/dist/modules/review-execution/usecases/jobHistory/pruneJobHistory.usecase.d.ts.map +1 -0
  110. package/dist/modules/review-execution/usecases/jobHistory/pruneJobHistory.usecase.js +12 -0
  111. package/dist/modules/review-execution/usecases/jobHistory/pruneJobHistory.usecase.js.map +1 -0
  112. package/dist/modules/statistics-insights/interface-adapters/controllers/http/overview.routes.d.ts +4 -0
  113. package/dist/modules/statistics-insights/interface-adapters/controllers/http/overview.routes.d.ts.map +1 -1
  114. package/dist/modules/statistics-insights/interface-adapters/controllers/http/overview.routes.js +2 -0
  115. package/dist/modules/statistics-insights/interface-adapters/controllers/http/overview.routes.js.map +1 -1
  116. package/dist/modules/statistics-insights/interface-adapters/presenters/overview.presenter.d.ts +12 -0
  117. package/dist/modules/statistics-insights/interface-adapters/presenters/overview.presenter.d.ts.map +1 -1
  118. package/dist/modules/statistics-insights/interface-adapters/presenters/overview.presenter.js +8 -0
  119. package/dist/modules/statistics-insights/interface-adapters/presenters/overview.presenter.js.map +1 -1
  120. package/dist/modules/statistics-insights/services/fetchDiffStatsSafely.d.ts +5 -0
  121. package/dist/modules/statistics-insights/services/fetchDiffStatsSafely.d.ts.map +1 -0
  122. package/dist/modules/statistics-insights/services/fetchDiffStatsSafely.js +10 -0
  123. package/dist/modules/statistics-insights/services/fetchDiffStatsSafely.js.map +1 -0
  124. package/dist/modules/statistics-insights/services/statsService.d.ts +5 -0
  125. package/dist/modules/statistics-insights/services/statsService.d.ts.map +1 -1
  126. package/dist/modules/statistics-insights/services/statsService.js +5 -0
  127. package/dist/modules/statistics-insights/services/statsService.js.map +1 -1
  128. package/dist/modules/worktree-management/entities/gitCommand/gitCommand.gateway.d.ts +1 -1
  129. package/dist/modules/worktree-management/entities/gitCommand/gitCommand.gateway.d.ts.map +1 -1
  130. package/dist/modules/worktree-management/entities/worktree/worktree.gateway.d.ts +1 -0
  131. package/dist/modules/worktree-management/entities/worktree/worktree.gateway.d.ts.map +1 -1
  132. package/dist/modules/worktree-management/entities/worktree/worktreeHealth.schema.d.ts +44 -0
  133. package/dist/modules/worktree-management/entities/worktree/worktreeHealth.schema.d.ts.map +1 -0
  134. package/dist/modules/worktree-management/entities/worktree/worktreeHealth.schema.js +31 -0
  135. package/dist/modules/worktree-management/entities/worktree/worktreeHealth.schema.js.map +1 -0
  136. package/dist/modules/worktree-management/entities/worktree/worktreeHealthProbe.gateway.d.ts +20 -0
  137. package/dist/modules/worktree-management/entities/worktree/worktreeHealthProbe.gateway.d.ts.map +1 -0
  138. package/dist/modules/worktree-management/entities/worktree/worktreeHealthProbe.gateway.js +2 -0
  139. package/dist/modules/worktree-management/entities/worktree/worktreeHealthProbe.gateway.js.map +1 -0
  140. package/dist/modules/worktree-management/interface-adapters/controllers/http/worktreeOverview.routes.d.ts +6 -0
  141. package/dist/modules/worktree-management/interface-adapters/controllers/http/worktreeOverview.routes.d.ts.map +1 -1
  142. package/dist/modules/worktree-management/interface-adapters/controllers/http/worktreeOverview.routes.js +52 -1
  143. package/dist/modules/worktree-management/interface-adapters/controllers/http/worktreeOverview.routes.js.map +1 -1
  144. package/dist/modules/worktree-management/interface-adapters/gateways/worktree.fileSystem.gateway.d.ts.map +1 -1
  145. package/dist/modules/worktree-management/interface-adapters/gateways/worktree.fileSystem.gateway.js +5 -1
  146. package/dist/modules/worktree-management/interface-adapters/gateways/worktree.fileSystem.gateway.js.map +1 -1
  147. package/dist/modules/worktree-management/interface-adapters/gateways/worktreeHealthProbe.fileSystem.gateway.d.ts +14 -0
  148. package/dist/modules/worktree-management/interface-adapters/gateways/worktreeHealthProbe.fileSystem.gateway.d.ts.map +1 -0
  149. package/dist/modules/worktree-management/interface-adapters/gateways/worktreeHealthProbe.fileSystem.gateway.js +97 -0
  150. package/dist/modules/worktree-management/interface-adapters/gateways/worktreeHealthProbe.fileSystem.gateway.js.map +1 -0
  151. package/dist/modules/worktree-management/interface-adapters/presenters/worktreePanel.presenter.d.ts +20 -0
  152. package/dist/modules/worktree-management/interface-adapters/presenters/worktreePanel.presenter.d.ts.map +1 -1
  153. package/dist/modules/worktree-management/interface-adapters/presenters/worktreePanel.presenter.js +58 -0
  154. package/dist/modules/worktree-management/interface-adapters/presenters/worktreePanel.presenter.js.map +1 -1
  155. package/dist/modules/worktree-management/services/forceCleanupLock.d.ts +10 -0
  156. package/dist/modules/worktree-management/services/forceCleanupLock.d.ts.map +1 -0
  157. package/dist/modules/worktree-management/services/forceCleanupLock.js +14 -0
  158. package/dist/modules/worktree-management/services/forceCleanupLock.js.map +1 -0
  159. package/dist/modules/worktree-management/usecases/detectDegradedWorktrees.usecase.d.ts +13 -0
  160. package/dist/modules/worktree-management/usecases/detectDegradedWorktrees.usecase.d.ts.map +1 -0
  161. package/dist/modules/worktree-management/usecases/detectDegradedWorktrees.usecase.js +35 -0
  162. package/dist/modules/worktree-management/usecases/detectDegradedWorktrees.usecase.js.map +1 -0
  163. package/dist/modules/worktree-management/usecases/removeWorktree.usecase.d.ts +1 -0
  164. package/dist/modules/worktree-management/usecases/removeWorktree.usecase.d.ts.map +1 -1
  165. package/dist/modules/worktree-management/usecases/removeWorktree.usecase.js +2 -1
  166. package/dist/modules/worktree-management/usecases/removeWorktree.usecase.js.map +1 -1
  167. package/dist/tests/acceptance/175-worktree-failure-visibility.acceptance.test.d.ts +12 -0
  168. package/dist/tests/acceptance/175-worktree-failure-visibility.acceptance.test.d.ts.map +1 -0
  169. package/dist/tests/acceptance/175-worktree-failure-visibility.acceptance.test.js +293 -0
  170. package/dist/tests/acceptance/175-worktree-failure-visibility.acceptance.test.js.map +1 -0
  171. package/dist/tests/acceptance/176-job-history-persistence.acceptance.test.d.ts +13 -0
  172. package/dist/tests/acceptance/176-job-history-persistence.acceptance.test.d.ts.map +1 -0
  173. package/dist/tests/acceptance/176-job-history-persistence.acceptance.test.js +261 -0
  174. package/dist/tests/acceptance/176-job-history-persistence.acceptance.test.js.map +1 -0
  175. package/dist/tests/acceptance/186-per-project-concurrency-cap.acceptance.test.d.ts +16 -0
  176. package/dist/tests/acceptance/186-per-project-concurrency-cap.acceptance.test.d.ts.map +1 -0
  177. package/dist/tests/acceptance/186-per-project-concurrency-cap.acceptance.test.js +391 -0
  178. package/dist/tests/acceptance/186-per-project-concurrency-cap.acceptance.test.js.map +1 -0
  179. package/dist/tests/acceptance/47-capture-git-diff-stats.acceptance.test.d.ts +18 -0
  180. package/dist/tests/acceptance/47-capture-git-diff-stats.acceptance.test.d.ts.map +1 -0
  181. package/dist/tests/acceptance/47-capture-git-diff-stats.acceptance.test.js +221 -0
  182. package/dist/tests/acceptance/47-capture-git-diff-stats.acceptance.test.js.map +1 -0
  183. package/dist/tests/factories/config.factory.d.ts.map +1 -1
  184. package/dist/tests/factories/config.factory.js +1 -0
  185. package/dist/tests/factories/config.factory.js.map +1 -1
  186. package/dist/tests/factories/jobRecord.factory.d.ts +5 -0
  187. package/dist/tests/factories/jobRecord.factory.d.ts.map +1 -0
  188. package/dist/tests/factories/jobRecord.factory.js +18 -0
  189. package/dist/tests/factories/jobRecord.factory.js.map +1 -0
  190. package/dist/tests/factories/projectConcurrencyCap.factory.d.ts +5 -0
  191. package/dist/tests/factories/projectConcurrencyCap.factory.d.ts.map +1 -0
  192. package/dist/tests/factories/projectConcurrencyCap.factory.js +8 -0
  193. package/dist/tests/factories/projectConcurrencyCap.factory.js.map +1 -0
  194. package/dist/tests/factories/worktreeHealth.factory.d.ts +22 -0
  195. package/dist/tests/factories/worktreeHealth.factory.d.ts.map +1 -0
  196. package/dist/tests/factories/worktreeHealth.factory.js +53 -0
  197. package/dist/tests/factories/worktreeHealth.factory.js.map +1 -0
  198. package/dist/tests/stubs/jobHistory.stub.d.ts +13 -0
  199. package/dist/tests/stubs/jobHistory.stub.d.ts.map +1 -0
  200. package/dist/tests/stubs/jobHistory.stub.js +63 -0
  201. package/dist/tests/stubs/jobHistory.stub.js.map +1 -0
  202. package/dist/tests/stubs/queueCapacityPort.stub.d.ts +8 -0
  203. package/dist/tests/stubs/queueCapacityPort.stub.d.ts.map +1 -0
  204. package/dist/tests/stubs/queueCapacityPort.stub.js +11 -0
  205. package/dist/tests/stubs/queueCapacityPort.stub.js.map +1 -0
  206. package/dist/tests/stubs/repositoriesListGateway.stub.d.ts +7 -0
  207. package/dist/tests/stubs/repositoriesListGateway.stub.d.ts.map +1 -0
  208. package/dist/tests/stubs/repositoriesListGateway.stub.js +10 -0
  209. package/dist/tests/stubs/repositoriesListGateway.stub.js.map +1 -0
  210. package/dist/tests/stubs/worktreeHealthProbe.stub.d.ts +11 -0
  211. package/dist/tests/stubs/worktreeHealthProbe.stub.d.ts.map +1 -0
  212. package/dist/tests/stubs/worktreeHealthProbe.stub.js +26 -0
  213. package/dist/tests/stubs/worktreeHealthProbe.stub.js.map +1 -0
  214. package/dist/tests/units/cli/cli.integration.test.js +6 -4
  215. package/dist/tests/units/cli/cli.integration.test.js.map +1 -1
  216. package/dist/tests/units/dashboard/modules/headerCapacityBadge.test.d.ts +2 -0
  217. package/dist/tests/units/dashboard/modules/headerCapacityBadge.test.d.ts.map +1 -0
  218. package/dist/tests/units/dashboard/modules/headerCapacityBadge.test.js +55 -0
  219. package/dist/tests/units/dashboard/modules/headerCapacityBadge.test.js.map +1 -0
  220. package/dist/tests/units/dashboard/modules/notifications.test.js +17 -0
  221. package/dist/tests/units/dashboard/modules/notifications.test.js.map +1 -1
  222. package/dist/tests/units/dashboard/modules/settingsModal.test.js +7 -0
  223. package/dist/tests/units/dashboard/modules/settingsModal.test.js.map +1 -1
  224. package/dist/tests/units/dashboard/modules/worktreePanel.test.js +123 -1
  225. package/dist/tests/units/dashboard/modules/worktreePanel.test.js.map +1 -1
  226. package/dist/tests/units/frameworks/config/configLoader.test.js +28 -0
  227. package/dist/tests/units/frameworks/config/configLoader.test.js.map +1 -1
  228. package/dist/tests/units/frameworks/queue/pQueueAdapter.test.js +125 -0
  229. package/dist/tests/units/frameworks/queue/pQueueAdapter.test.js.map +1 -1
  230. package/dist/tests/units/frameworks/queue/projectSemaphore.test.d.ts +2 -0
  231. package/dist/tests/units/frameworks/queue/projectSemaphore.test.d.ts.map +1 -0
  232. package/dist/tests/units/frameworks/queue/projectSemaphore.test.js +92 -0
  233. package/dist/tests/units/frameworks/queue/projectSemaphore.test.js.map +1 -0
  234. package/dist/tests/units/frameworks/settings/runtimeSettings.test.js +34 -2
  235. package/dist/tests/units/frameworks/settings/runtimeSettings.test.js.map +1 -1
  236. package/dist/tests/units/modules/cli-configuration/entities/projectConcurrencyCap/projectConcurrencyCap.guard.test.d.ts +2 -0
  237. package/dist/tests/units/modules/cli-configuration/entities/projectConcurrencyCap/projectConcurrencyCap.guard.test.d.ts.map +1 -0
  238. package/dist/tests/units/modules/cli-configuration/entities/projectConcurrencyCap/projectConcurrencyCap.guard.test.js +22 -0
  239. package/dist/tests/units/modules/cli-configuration/entities/projectConcurrencyCap/projectConcurrencyCap.guard.test.js.map +1 -0
  240. package/dist/tests/units/modules/cli-configuration/entities/projectConcurrencyCap/projectConcurrencyCap.valueObject.test.d.ts +2 -0
  241. package/dist/tests/units/modules/cli-configuration/entities/projectConcurrencyCap/projectConcurrencyCap.valueObject.test.d.ts.map +1 -0
  242. package/dist/tests/units/modules/cli-configuration/entities/projectConcurrencyCap/projectConcurrencyCap.valueObject.test.js +85 -0
  243. package/dist/tests/units/modules/cli-configuration/entities/projectConcurrencyCap/projectConcurrencyCap.valueObject.test.js.map +1 -0
  244. package/dist/tests/units/modules/cli-configuration/interface-adapters/controllers/http/projectConfig.routes.test.js +91 -0
  245. package/dist/tests/units/modules/cli-configuration/interface-adapters/controllers/http/projectConfig.routes.test.js.map +1 -1
  246. package/dist/tests/units/modules/cli-configuration/interface-adapters/gateways/repositoriesList.runtimeConfig.gateway.test.d.ts +2 -0
  247. package/dist/tests/units/modules/cli-configuration/interface-adapters/gateways/repositoriesList.runtimeConfig.gateway.test.d.ts.map +1 -0
  248. package/dist/tests/units/modules/cli-configuration/interface-adapters/gateways/repositoriesList.runtimeConfig.gateway.test.js +29 -0
  249. package/dist/tests/units/modules/cli-configuration/interface-adapters/gateways/repositoriesList.runtimeConfig.gateway.test.js.map +1 -0
  250. package/dist/tests/units/modules/cli-configuration/usecases/projectConfig/recomputeGlobalConcurrency.usecase.test.d.ts +2 -0
  251. package/dist/tests/units/modules/cli-configuration/usecases/projectConfig/recomputeGlobalConcurrency.usecase.test.d.ts.map +1 -0
  252. package/dist/tests/units/modules/cli-configuration/usecases/projectConfig/recomputeGlobalConcurrency.usecase.test.js +126 -0
  253. package/dist/tests/units/modules/cli-configuration/usecases/projectConfig/recomputeGlobalConcurrency.usecase.test.js.map +1 -0
  254. package/dist/tests/units/modules/cli-configuration/usecases/projectConfig/updateProjectConfig.usecase.test.js +78 -0
  255. package/dist/tests/units/modules/cli-configuration/usecases/projectConfig/updateProjectConfig.usecase.test.js.map +1 -1
  256. package/dist/tests/units/modules/review-execution/entities/job/jobRecord.guard.test.d.ts +2 -0
  257. package/dist/tests/units/modules/review-execution/entities/job/jobRecord.guard.test.d.ts.map +1 -0
  258. package/dist/tests/units/modules/review-execution/entities/job/jobRecord.guard.test.js +48 -0
  259. package/dist/tests/units/modules/review-execution/entities/job/jobRecord.guard.test.js.map +1 -0
  260. package/dist/tests/units/modules/review-execution/interface-adapters/gateways/fileSystem/jobHistory.fileSystem.gateway.test.d.ts +2 -0
  261. package/dist/tests/units/modules/review-execution/interface-adapters/gateways/fileSystem/jobHistory.fileSystem.gateway.test.d.ts.map +1 -0
  262. package/dist/tests/units/modules/review-execution/interface-adapters/gateways/fileSystem/jobHistory.fileSystem.gateway.test.js +134 -0
  263. package/dist/tests/units/modules/review-execution/interface-adapters/gateways/fileSystem/jobHistory.fileSystem.gateway.test.js.map +1 -0
  264. package/dist/tests/units/modules/review-execution/usecases/jobHistory/loadRecentJobHistory.usecase.test.d.ts +2 -0
  265. package/dist/tests/units/modules/review-execution/usecases/jobHistory/loadRecentJobHistory.usecase.test.d.ts.map +1 -0
  266. package/dist/tests/units/modules/review-execution/usecases/jobHistory/loadRecentJobHistory.usecase.test.js +38 -0
  267. package/dist/tests/units/modules/review-execution/usecases/jobHistory/loadRecentJobHistory.usecase.test.js.map +1 -0
  268. package/dist/tests/units/modules/review-execution/usecases/jobHistory/persistJobRecord.usecase.test.d.ts +2 -0
  269. package/dist/tests/units/modules/review-execution/usecases/jobHistory/persistJobRecord.usecase.test.d.ts.map +1 -0
  270. package/dist/tests/units/modules/review-execution/usecases/jobHistory/persistJobRecord.usecase.test.js +126 -0
  271. package/dist/tests/units/modules/review-execution/usecases/jobHistory/persistJobRecord.usecase.test.js.map +1 -0
  272. package/dist/tests/units/modules/review-execution/usecases/jobHistory/pruneJobHistory.usecase.test.d.ts +2 -0
  273. package/dist/tests/units/modules/review-execution/usecases/jobHistory/pruneJobHistory.usecase.test.d.ts.map +1 -0
  274. package/dist/tests/units/modules/review-execution/usecases/jobHistory/pruneJobHistory.usecase.test.js +42 -0
  275. package/dist/tests/units/modules/review-execution/usecases/jobHistory/pruneJobHistory.usecase.test.js.map +1 -0
  276. package/dist/tests/units/modules/statistics-insights/interface-adapters/controllers/http/overview.routes.test.js +28 -0
  277. package/dist/tests/units/modules/statistics-insights/interface-adapters/controllers/http/overview.routes.test.js.map +1 -1
  278. package/dist/tests/units/modules/statistics-insights/interface-adapters/presenters/overview.presenter.test.js +39 -0
  279. package/dist/tests/units/modules/statistics-insights/interface-adapters/presenters/overview.presenter.test.js.map +1 -1
  280. package/dist/tests/units/modules/worktree-management/entities/worktree/worktreeHealth.schema.test.d.ts +2 -0
  281. package/dist/tests/units/modules/worktree-management/entities/worktree/worktreeHealth.schema.test.d.ts.map +1 -0
  282. package/dist/tests/units/modules/worktree-management/entities/worktree/worktreeHealth.schema.test.js +50 -0
  283. package/dist/tests/units/modules/worktree-management/entities/worktree/worktreeHealth.schema.test.js.map +1 -0
  284. package/dist/tests/units/modules/worktree-management/interface-adapters/controllers/http/worktreeOverview.routes.test.js +106 -0
  285. package/dist/tests/units/modules/worktree-management/interface-adapters/controllers/http/worktreeOverview.routes.test.js.map +1 -1
  286. package/dist/tests/units/modules/worktree-management/interface-adapters/gateways/worktreeHealthProbe.fileSystem.gateway.test.d.ts +2 -0
  287. package/dist/tests/units/modules/worktree-management/interface-adapters/gateways/worktreeHealthProbe.fileSystem.gateway.test.d.ts.map +1 -0
  288. package/dist/tests/units/modules/worktree-management/interface-adapters/gateways/worktreeHealthProbe.fileSystem.gateway.test.js +114 -0
  289. package/dist/tests/units/modules/worktree-management/interface-adapters/gateways/worktreeHealthProbe.fileSystem.gateway.test.js.map +1 -0
  290. package/dist/tests/units/modules/worktree-management/interface-adapters/presenters/worktreePanel.presenter.test.js +140 -0
  291. package/dist/tests/units/modules/worktree-management/interface-adapters/presenters/worktreePanel.presenter.test.js.map +1 -1
  292. package/dist/tests/units/modules/worktree-management/services/forceCleanupLock.test.d.ts +2 -0
  293. package/dist/tests/units/modules/worktree-management/services/forceCleanupLock.test.d.ts.map +1 -0
  294. package/dist/tests/units/modules/worktree-management/services/forceCleanupLock.test.js +29 -0
  295. package/dist/tests/units/modules/worktree-management/services/forceCleanupLock.test.js.map +1 -0
  296. package/dist/tests/units/modules/worktree-management/usecases/detectDegradedWorktrees.usecase.test.d.ts +2 -0
  297. package/dist/tests/units/modules/worktree-management/usecases/detectDegradedWorktrees.usecase.test.d.ts.map +1 -0
  298. package/dist/tests/units/modules/worktree-management/usecases/detectDegradedWorktrees.usecase.test.js +124 -0
  299. package/dist/tests/units/modules/worktree-management/usecases/detectDegradedWorktrees.usecase.test.js.map +1 -0
  300. package/dist/tests/units/modules/worktree-management/usecases/removeWorktree.usecase.test.js +27 -0
  301. package/dist/tests/units/modules/worktree-management/usecases/removeWorktree.usecase.test.js.map +1 -1
  302. package/dist/tests/units/services/statsService.summary.test.d.ts +2 -0
  303. package/dist/tests/units/services/statsService.summary.test.d.ts.map +1 -0
  304. package/dist/tests/units/services/statsService.summary.test.js +43 -0
  305. package/dist/tests/units/services/statsService.summary.test.js.map +1 -0
  306. package/package.json +1 -1
@@ -113,4 +113,129 @@ describe('pQueueAdapter - MR-scoped concurrency chain', () => {
113
113
  expect(__getMrChainsSize()).toBe(0);
114
114
  });
115
115
  });
116
+ describe('pQueueAdapter - SPEC-186 per-project concurrency cap', () => {
117
+ beforeEach(async () => {
118
+ initQueue(createStubLogger());
119
+ const { __resetProjectConcurrencyState } = await import('../../../../frameworks/queue/pQueueAdapter.js');
120
+ __resetProjectConcurrencyState();
121
+ });
122
+ it('exposes getRunningCount and getTotalCapacity that reflect setProjectConcurrencyCap', async () => {
123
+ const { setProjectConcurrencyCap, getRunningCount, getTotalCapacity } = await import('../../../../frameworks/queue/pQueueAdapter.js');
124
+ setProjectConcurrencyCap('/repos/A', 3);
125
+ setProjectConcurrencyCap('/repos/B', 2);
126
+ expect(getTotalCapacity()).toBe(5);
127
+ expect(getRunningCount()).toBe(0);
128
+ });
129
+ it('queues a third review for a project capped at 2 while the first two run', async () => {
130
+ const { setProjectConcurrencyCap, setGlobalConcurrency, getRunningCount } = await import('../../../../frameworks/queue/pQueueAdapter.js');
131
+ setProjectConcurrencyCap('test-org/cap-2', 2);
132
+ setGlobalConcurrency(10);
133
+ const releases = [];
134
+ const completed = [];
135
+ const makeProcessor = (label) => async () => {
136
+ await new Promise(resolve => releases.push(resolve));
137
+ completed.push(label);
138
+ };
139
+ const jobA = createJob({
140
+ id: 'gitlab:test-org/cap-2:1',
141
+ projectPath: 'test-org/cap-2',
142
+ mrNumber: 1,
143
+ });
144
+ const jobB = createJob({
145
+ id: 'gitlab:test-org/cap-2:2',
146
+ projectPath: 'test-org/cap-2',
147
+ mrNumber: 2,
148
+ });
149
+ const jobC = createJob({
150
+ id: 'gitlab:test-org/cap-2:3',
151
+ projectPath: 'test-org/cap-2',
152
+ mrNumber: 3,
153
+ });
154
+ await enqueueReview(jobA, makeProcessor('A'));
155
+ await enqueueReview(jobB, makeProcessor('B'));
156
+ await enqueueReview(jobC, makeProcessor('C'));
157
+ await new Promise(resolve => setTimeout(resolve, 40));
158
+ expect(getRunningCount()).toBe(2);
159
+ expect(completed).toEqual([]);
160
+ releases[0]?.();
161
+ releases[1]?.();
162
+ await new Promise(resolve => setTimeout(resolve, 40));
163
+ expect(completed.sort()).toEqual(['A', 'B']);
164
+ expect(getRunningCount()).toBe(1);
165
+ releases[2]?.();
166
+ await new Promise(resolve => setTimeout(resolve, 40));
167
+ expect(completed.sort()).toEqual(['A', 'B', 'C']);
168
+ expect(getRunningCount()).toBe(0);
169
+ });
170
+ });
171
+ describe('pQueueAdapter - persist job record callback (SPEC-176)', () => {
172
+ beforeEach(async () => {
173
+ initQueue(createStubLogger());
174
+ const { setPersistJobRecordCallback, replaceCompletedJobs } = await import('../../../../frameworks/queue/pQueueAdapter.js');
175
+ setPersistJobRecordCallback(null);
176
+ replaceCompletedJobs([]);
177
+ });
178
+ it('invokes the persist callback after a successful job with aborted=false', async () => {
179
+ const { setPersistJobRecordCallback } = await import('../../../../frameworks/queue/pQueueAdapter.js');
180
+ const recorded = [];
181
+ setPersistJobRecordCallback(async (status, aborted) => {
182
+ recorded.push({ jobId: status.job.id, aborted });
183
+ });
184
+ const job = createJob({ id: 'gitlab:cb-success:1', mrNumber: 1 });
185
+ await enqueueReview(job, async () => { });
186
+ await new Promise(resolve => setTimeout(resolve, 30));
187
+ expect(recorded).toEqual([{ jobId: 'gitlab:cb-success:1', aborted: false }]);
188
+ });
189
+ it('invokes the persist callback after a failed job (does not break the queue)', async () => {
190
+ const { setPersistJobRecordCallback } = await import('../../../../frameworks/queue/pQueueAdapter.js');
191
+ const recorded = [];
192
+ setPersistJobRecordCallback(async (status) => {
193
+ recorded.push({ jobId: status.job.id, status: status.status });
194
+ });
195
+ const job = createJob({ id: 'gitlab:cb-failed:1', mrNumber: 1 });
196
+ await enqueueReview(job, async () => {
197
+ throw new Error('boom');
198
+ });
199
+ await new Promise(resolve => setTimeout(resolve, 30));
200
+ expect(recorded).toEqual([{ jobId: 'gitlab:cb-failed:1', status: 'failed' }]);
201
+ });
202
+ it('does not propagate a callback rejection back into the queue', async () => {
203
+ const { setPersistJobRecordCallback } = await import('../../../../frameworks/queue/pQueueAdapter.js');
204
+ setPersistJobRecordCallback(async () => {
205
+ throw new Error('callback rejected');
206
+ });
207
+ const job = createJob({ id: 'gitlab:cb-throws:1', mrNumber: 1 });
208
+ await expect(enqueueReview(job, async () => { })).resolves.toBe(true);
209
+ await new Promise(resolve => setTimeout(resolve, 30));
210
+ });
211
+ });
212
+ describe('pQueueAdapter - replaceCompletedJobs (SPEC-176)', () => {
213
+ beforeEach(async () => {
214
+ initQueue(createStubLogger());
215
+ const { replaceCompletedJobs } = await import('../../../../frameworks/queue/pQueueAdapter.js');
216
+ replaceCompletedJobs([]);
217
+ });
218
+ it('seeds the in-memory completed list, capped at 20', async () => {
219
+ const { replaceCompletedJobs, getJobsStatus } = await import('../../../../frameworks/queue/pQueueAdapter.js');
220
+ const records = Array.from({ length: 25 }, (_, index) => ({
221
+ job: createJob({ id: `seed:${index}`, mrNumber: index }),
222
+ status: 'completed',
223
+ }));
224
+ replaceCompletedJobs(records);
225
+ const snapshot = getJobsStatus();
226
+ expect(snapshot.recent).toHaveLength(20);
227
+ expect(snapshot.recent[0].id).toBe('seed:0');
228
+ });
229
+ it('clears the previous list before seeding', async () => {
230
+ const { replaceCompletedJobs, getJobsStatus } = await import('../../../../frameworks/queue/pQueueAdapter.js');
231
+ replaceCompletedJobs([
232
+ { job: createJob({ id: 'first', mrNumber: 1 }), status: 'completed' },
233
+ ]);
234
+ replaceCompletedJobs([
235
+ { job: createJob({ id: 'second', mrNumber: 2 }), status: 'completed' },
236
+ ]);
237
+ const snapshot = getJobsStatus();
238
+ expect(snapshot.recent.map((entry) => entry.id)).toEqual(['second']);
239
+ });
240
+ });
116
241
  //# sourceMappingURL=pQueueAdapter.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"pQueueAdapter.test.js","sourceRoot":"","sources":["../../../../../src/tests/units/frameworks/queue/pQueueAdapter.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pQueueAdapter.test.js","sourceRoot":"","sources":["../../../../../src/tests/units/frameworks/queue/pQueueAdapter.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=projectSemaphore.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projectSemaphore.test.d.ts","sourceRoot":"","sources":["../../../../../src/tests/units/frameworks/queue/projectSemaphore.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,92 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { ProjectSemaphore } from '../../../../frameworks/queue/projectSemaphore.js';
3
+ async function flushMicrotasks() {
4
+ for (let i = 0; i < 5; i += 1)
5
+ await Promise.resolve();
6
+ }
7
+ describe('ProjectSemaphore', () => {
8
+ it('uses default capacity 2 when no explicit cap is set', async () => {
9
+ const semaphore = new ProjectSemaphore();
10
+ await semaphore.acquire('/proj/A');
11
+ await semaphore.acquire('/proj/A');
12
+ expect(semaphore.runningCount('/proj/A')).toBe(2);
13
+ let thirdResolved = false;
14
+ semaphore.acquire('/proj/A').then(() => { thirdResolved = true; });
15
+ await flushMicrotasks();
16
+ expect(thirdResolved).toBe(false);
17
+ });
18
+ it('acquire resolves immediately when running < capacity', async () => {
19
+ const semaphore = new ProjectSemaphore();
20
+ semaphore.setCapacity('/proj/A', 3);
21
+ const first = await semaphore.acquire('/proj/A');
22
+ const second = await semaphore.acquire('/proj/A');
23
+ const third = await semaphore.acquire('/proj/A');
24
+ expect(first).toBe(true);
25
+ expect(second).toBe(true);
26
+ expect(third).toBe(true);
27
+ expect(semaphore.runningCount('/proj/A')).toBe(3);
28
+ });
29
+ it('acquire blocks (pending) once capacity is reached and resolves on release in FIFO order', async () => {
30
+ const semaphore = new ProjectSemaphore();
31
+ semaphore.setCapacity('/proj/A', 1);
32
+ await semaphore.acquire('/proj/A');
33
+ const log = [];
34
+ const w1 = semaphore.acquire('/proj/A').then(() => { log.push('w1'); });
35
+ const w2 = semaphore.acquire('/proj/A').then(() => { log.push('w2'); });
36
+ await flushMicrotasks();
37
+ expect(log).toEqual([]);
38
+ expect(semaphore.pendingCount('/proj/A')).toBe(2);
39
+ semaphore.release('/proj/A');
40
+ await flushMicrotasks();
41
+ expect(log).toEqual(['w1']);
42
+ semaphore.release('/proj/A');
43
+ await flushMicrotasks();
44
+ expect(log).toEqual(['w1', 'w2']);
45
+ await w1;
46
+ await w2;
47
+ });
48
+ it('lowering the cap does NOT interrupt running acquisitions', async () => {
49
+ const semaphore = new ProjectSemaphore();
50
+ semaphore.setCapacity('/proj/A', 4);
51
+ await semaphore.acquire('/proj/A');
52
+ await semaphore.acquire('/proj/A');
53
+ await semaphore.acquire('/proj/A');
54
+ await semaphore.acquire('/proj/A');
55
+ semaphore.setCapacity('/proj/A', 2);
56
+ expect(semaphore.runningCount('/proj/A')).toBe(4);
57
+ });
58
+ it('raising the cap immediately drains pending waiters up to the new cap', async () => {
59
+ const semaphore = new ProjectSemaphore();
60
+ semaphore.setCapacity('/proj/A', 2);
61
+ await semaphore.acquire('/proj/A');
62
+ await semaphore.acquire('/proj/A');
63
+ const counter = { released: 0 };
64
+ semaphore.acquire('/proj/A').then(() => { counter.released += 1; });
65
+ semaphore.acquire('/proj/A').then(() => { counter.released += 1; });
66
+ semaphore.acquire('/proj/A').then(() => { counter.released += 1; });
67
+ await flushMicrotasks();
68
+ expect(counter.released).toBe(0);
69
+ semaphore.setCapacity('/proj/A', 4);
70
+ await flushMicrotasks();
71
+ expect(counter.released).toBe(2);
72
+ expect(semaphore.pendingCount('/proj/A')).toBe(1);
73
+ });
74
+ it('isolates per-key state (separate counts, separate caps)', async () => {
75
+ const semaphore = new ProjectSemaphore();
76
+ semaphore.setCapacity('/proj/A', 1);
77
+ semaphore.setCapacity('/proj/B', 2);
78
+ await semaphore.acquire('/proj/A');
79
+ await semaphore.acquire('/proj/B');
80
+ await semaphore.acquire('/proj/B');
81
+ expect(semaphore.runningCount('/proj/A')).toBe(1);
82
+ expect(semaphore.runningCount('/proj/B')).toBe(2);
83
+ expect(semaphore.totalRunning()).toBe(3);
84
+ });
85
+ it('release without prior acquire is a no-op (does not go negative)', () => {
86
+ const semaphore = new ProjectSemaphore();
87
+ semaphore.setCapacity('/proj/A', 1);
88
+ semaphore.release('/proj/A');
89
+ expect(semaphore.runningCount('/proj/A')).toBe(0);
90
+ });
91
+ });
92
+ //# sourceMappingURL=projectSemaphore.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projectSemaphore.test.js","sourceRoot":"","sources":["../../../../../src/tests/units/frameworks/queue/projectSemaphore.test.ts"],"names":[],"mappings":"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"}
@@ -44,7 +44,7 @@ describe('runtimeSettings', () => {
44
44
  await loadSettingsFromDisk();
45
45
  expect(existsSync(settingsPath)).toBe(true);
46
46
  const written = JSON.parse(readFileSync(settingsPath, 'utf-8'));
47
- expect(written).toEqual({ language: 'en', model: 'opus' });
47
+ expect(written).toEqual({ language: 'en', model: 'opus', worktreeStaleThresholdHours: 24 });
48
48
  });
49
49
  it('falls back to defaults silently when file is malformed JSON', async () => {
50
50
  writeFileSync(settingsPath, '{ this is not valid json');
@@ -96,7 +96,7 @@ describe('runtimeSettings', () => {
96
96
  await loadSettingsFromDisk();
97
97
  await Promise.all([setModel('sonnet'), setDefaultLanguage('fr')]);
98
98
  const written = JSON.parse(readFileSync(settingsPath, 'utf-8'));
99
- expect(written).toEqual({ language: 'fr', model: 'sonnet' });
99
+ expect(written).toEqual({ language: 'fr', model: 'sonnet', worktreeStaleThresholdHours: 24 });
100
100
  });
101
101
  });
102
102
  describe('validation', () => {
@@ -104,6 +104,38 @@ describe('runtimeSettings', () => {
104
104
  await expect(setModel('gpt-5')).rejects.toThrow(/Invalid model/);
105
105
  });
106
106
  });
107
+ describe('worktreeStaleThresholdHours', () => {
108
+ it('defaults to 24 when no settings file exists', async () => {
109
+ await loadSettingsFromDisk();
110
+ const { getWorktreeStaleThresholdHours } = await import('../../../../frameworks/settings/runtimeSettings.js');
111
+ expect(getWorktreeStaleThresholdHours()).toBe(24);
112
+ });
113
+ it('restores worktreeStaleThresholdHours from an existing file', async () => {
114
+ writeFileSync(settingsPath, JSON.stringify({ language: 'en', model: 'opus', worktreeStaleThresholdHours: 48 }));
115
+ await loadSettingsFromDisk();
116
+ const { getWorktreeStaleThresholdHours } = await import('../../../../frameworks/settings/runtimeSettings.js');
117
+ expect(getWorktreeStaleThresholdHours()).toBe(48);
118
+ });
119
+ it('falls back to the default when the persisted value is below the minimum', async () => {
120
+ writeFileSync(settingsPath, JSON.stringify({ language: 'en', model: 'opus', worktreeStaleThresholdHours: 0 }));
121
+ await loadSettingsFromDisk();
122
+ const { getWorktreeStaleThresholdHours } = await import('../../../../frameworks/settings/runtimeSettings.js');
123
+ expect(getWorktreeStaleThresholdHours()).toBe(24);
124
+ });
125
+ it('persists worktreeStaleThresholdHours after setWorktreeStaleThresholdHours', async () => {
126
+ await loadSettingsFromDisk();
127
+ const { setWorktreeStaleThresholdHours } = await import('../../../../frameworks/settings/runtimeSettings.js');
128
+ await setWorktreeStaleThresholdHours(72);
129
+ const written = JSON.parse(readFileSync(settingsPath, 'utf-8'));
130
+ expect(written.worktreeStaleThresholdHours).toBe(72);
131
+ });
132
+ it('throws when setWorktreeStaleThresholdHours receives a value outside [1, 720]', async () => {
133
+ await loadSettingsFromDisk();
134
+ const { setWorktreeStaleThresholdHours } = await import('../../../../frameworks/settings/runtimeSettings.js');
135
+ await expect(setWorktreeStaleThresholdHours(0)).rejects.toThrow(/Invalid stale threshold/);
136
+ await expect(setWorktreeStaleThresholdHours(721)).rejects.toThrow(/Invalid stale threshold/);
137
+ });
138
+ });
107
139
  describe('logger injection', () => {
108
140
  it('reports malformed JSON via the injected logger instead of console', async () => {
109
141
  const warnings = [];
@@ -1 +1 @@
1
- {"version":3,"file":"runtimeSettings.test.js","sourceRoot":"","sources":["../../../../../src/tests/units/frameworks/settings/runtimeSettings.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runtimeSettings.test.js","sourceRoot":"","sources":["../../../../../src/tests/units/frameworks/settings/runtimeSettings.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=projectConcurrencyCap.guard.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projectConcurrencyCap.guard.test.d.ts","sourceRoot":"","sources":["../../../../../../../src/tests/units/modules/cli-configuration/entities/projectConcurrencyCap/projectConcurrencyCap.guard.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,22 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { projectConcurrencyCapGuard } from '../../../../../../modules/cli-configuration/entities/projectConcurrencyCap/projectConcurrencyCap.guard.js';
3
+ describe('projectConcurrencyCapGuard', () => {
4
+ it('isValid returns true for integers within [1, 10]', () => {
5
+ expect(projectConcurrencyCapGuard.isValid(1)).toBe(true);
6
+ expect(projectConcurrencyCapGuard.isValid(5)).toBe(true);
7
+ expect(projectConcurrencyCapGuard.isValid(10)).toBe(true);
8
+ });
9
+ it('isValid returns false outside the range', () => {
10
+ expect(projectConcurrencyCapGuard.isValid(0)).toBe(false);
11
+ expect(projectConcurrencyCapGuard.isValid(11)).toBe(false);
12
+ expect(projectConcurrencyCapGuard.isValid(2.5)).toBe(false);
13
+ expect(projectConcurrencyCapGuard.isValid('abc')).toBe(false);
14
+ });
15
+ it('parse returns the validated value', () => {
16
+ expect(projectConcurrencyCapGuard.parse(4)).toBe(4);
17
+ });
18
+ it('parse throws on invalid input', () => {
19
+ expect(() => projectConcurrencyCapGuard.parse(11)).toThrow(/projectConcurrencyCap/);
20
+ });
21
+ });
22
+ //# sourceMappingURL=projectConcurrencyCap.guard.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projectConcurrencyCap.guard.test.js","sourceRoot":"","sources":["../../../../../../../src/tests/units/modules/cli-configuration/entities/projectConcurrencyCap/projectConcurrencyCap.guard.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,0BAA0B,EAAE,MAAM,2FAA2F,CAAC;AAEvI,QAAQ,CAAC,4BAA4B,EAAE,GAAG,EAAE;IAC1C,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,MAAM,CAAC,0BAA0B,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzD,MAAM,CAAC,0BAA0B,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzD,MAAM,CAAC,0BAA0B,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,MAAM,CAAC,0BAA0B,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1D,MAAM,CAAC,0BAA0B,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC3D,MAAM,CAAC,0BAA0B,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5D,MAAM,CAAC,0BAA0B,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,MAAM,CAAC,0BAA0B,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,MAAM,CAAC,GAAG,EAAE,CAAC,0BAA0B,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC;IACtF,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=projectConcurrencyCap.valueObject.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projectConcurrencyCap.valueObject.test.d.ts","sourceRoot":"","sources":["../../../../../../../src/tests/units/modules/cli-configuration/entities/projectConcurrencyCap/projectConcurrencyCap.valueObject.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,85 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { DEFAULT_PROJECT_CONCURRENCY_CAP, MAX_PROJECT_CONCURRENCY_CAP, MIN_PROJECT_CONCURRENCY_CAP, PROJECT_CAP_NOT_INTEGER_MESSAGE, PROJECT_CAP_OUT_OF_RANGE_MESSAGE, PROJECT_CAP_REQUIRED_MESSAGE, effectiveProjectConcurrencyCap, validateProjectConcurrencyCap, } from '../../../../../../modules/cli-configuration/entities/projectConcurrencyCap/projectConcurrencyCap.valueObject.js';
3
+ describe('projectConcurrencyCap value object — constants', () => {
4
+ it('exposes the documented numeric range and default', () => {
5
+ expect(MIN_PROJECT_CONCURRENCY_CAP).toBe(1);
6
+ expect(MAX_PROJECT_CONCURRENCY_CAP).toBe(10);
7
+ expect(DEFAULT_PROJECT_CONCURRENCY_CAP).toBe(2);
8
+ });
9
+ });
10
+ describe('validateProjectConcurrencyCap', () => {
11
+ it('accepts every integer in the inclusive range 1..10', () => {
12
+ for (let value = 1; value <= 10; value += 1) {
13
+ const result = validateProjectConcurrencyCap(value);
14
+ expect(result.ok).toBe(true);
15
+ if (result.ok)
16
+ expect(result.value).toBe(value);
17
+ }
18
+ });
19
+ it('rejects null with the required message', () => {
20
+ expect(validateProjectConcurrencyCap(null)).toEqual({
21
+ ok: false,
22
+ reason: PROJECT_CAP_REQUIRED_MESSAGE,
23
+ });
24
+ });
25
+ it('rejects undefined with the required message', () => {
26
+ expect(validateProjectConcurrencyCap(undefined)).toEqual({
27
+ ok: false,
28
+ reason: PROJECT_CAP_REQUIRED_MESSAGE,
29
+ });
30
+ });
31
+ it('rejects the empty string with the required message', () => {
32
+ expect(validateProjectConcurrencyCap('')).toEqual({
33
+ ok: false,
34
+ reason: PROJECT_CAP_REQUIRED_MESSAGE,
35
+ });
36
+ });
37
+ it('rejects non-numeric values with the integer message', () => {
38
+ expect(validateProjectConcurrencyCap('abc')).toEqual({
39
+ ok: false,
40
+ reason: PROJECT_CAP_NOT_INTEGER_MESSAGE,
41
+ });
42
+ });
43
+ it('rejects non-integer numbers with the integer message', () => {
44
+ expect(validateProjectConcurrencyCap(2.5)).toEqual({
45
+ ok: false,
46
+ reason: PROJECT_CAP_NOT_INTEGER_MESSAGE,
47
+ });
48
+ });
49
+ it('rejects 0 with the range message', () => {
50
+ expect(validateProjectConcurrencyCap(0)).toEqual({
51
+ ok: false,
52
+ reason: PROJECT_CAP_OUT_OF_RANGE_MESSAGE,
53
+ });
54
+ });
55
+ it('rejects -1 with the range message', () => {
56
+ expect(validateProjectConcurrencyCap(-1)).toEqual({
57
+ ok: false,
58
+ reason: PROJECT_CAP_OUT_OF_RANGE_MESSAGE,
59
+ });
60
+ });
61
+ it('rejects 11 with the range message', () => {
62
+ expect(validateProjectConcurrencyCap(11)).toEqual({
63
+ ok: false,
64
+ reason: PROJECT_CAP_OUT_OF_RANGE_MESSAGE,
65
+ });
66
+ });
67
+ });
68
+ describe('effectiveProjectConcurrencyCap', () => {
69
+ it('returns the explicit value when valid', () => {
70
+ expect(effectiveProjectConcurrencyCap({ maxConcurrentReviews: 5 })).toBe(5);
71
+ });
72
+ it('falls back to default when the field is missing', () => {
73
+ expect(effectiveProjectConcurrencyCap({})).toBe(DEFAULT_PROJECT_CONCURRENCY_CAP);
74
+ });
75
+ it('falls back to default when the field is null', () => {
76
+ expect(effectiveProjectConcurrencyCap({ maxConcurrentReviews: null })).toBe(DEFAULT_PROJECT_CONCURRENCY_CAP);
77
+ });
78
+ it('falls back to default when the value is out of range', () => {
79
+ expect(effectiveProjectConcurrencyCap({ maxConcurrentReviews: 99 })).toBe(DEFAULT_PROJECT_CONCURRENCY_CAP);
80
+ });
81
+ it('falls back to default when the value is a non-integer', () => {
82
+ expect(effectiveProjectConcurrencyCap({ maxConcurrentReviews: 2.5 })).toBe(DEFAULT_PROJECT_CONCURRENCY_CAP);
83
+ });
84
+ });
85
+ //# sourceMappingURL=projectConcurrencyCap.valueObject.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projectConcurrencyCap.valueObject.test.js","sourceRoot":"","sources":["../../../../../../../src/tests/units/modules/cli-configuration/entities/projectConcurrencyCap/projectConcurrencyCap.valueObject.test.ts"],"names":[],"mappings":"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"}
@@ -276,5 +276,96 @@ describe('projectConfigRoutes — PATCH /api/project-config', () => {
276
276
  expect(response.json().config.qualityThreshold).toBeUndefined();
277
277
  await app.close();
278
278
  });
279
+ it('accepts a numeric maxConcurrentReviews in the patch body', async () => {
280
+ const gateway = new StubProjectConfigGateway();
281
+ gateway.set('/repo/A', baseConfig());
282
+ const app = await buildAppWithPatch(gateway);
283
+ const response = await app.inject({
284
+ method: 'PATCH',
285
+ url: '/api/project-config?path=' + encodeURIComponent('/repo/A'),
286
+ payload: { maxConcurrentReviews: 4 },
287
+ });
288
+ expect(response.statusCode).toBe(200);
289
+ expect(response.json().config.maxConcurrentReviews).toBe(4);
290
+ await app.close();
291
+ });
292
+ it('accepts a string integer "4" for maxConcurrentReviews', async () => {
293
+ const gateway = new StubProjectConfigGateway();
294
+ gateway.set('/repo/A', baseConfig());
295
+ const app = await buildAppWithPatch(gateway);
296
+ const response = await app.inject({
297
+ method: 'PATCH',
298
+ url: '/api/project-config?path=' + encodeURIComponent('/repo/A'),
299
+ payload: { maxConcurrentReviews: '4' },
300
+ });
301
+ expect(response.statusCode).toBe(200);
302
+ expect(response.json().config.maxConcurrentReviews).toBe(4);
303
+ await app.close();
304
+ });
305
+ it('returns 400 with French range message when maxConcurrentReviews is 0', async () => {
306
+ const gateway = new StubProjectConfigGateway();
307
+ gateway.set('/repo/A', baseConfig());
308
+ const app = await buildAppWithPatch(gateway);
309
+ const response = await app.inject({
310
+ method: 'PATCH',
311
+ url: '/api/project-config?path=' + encodeURIComponent('/repo/A'),
312
+ payload: { maxConcurrentReviews: 0 },
313
+ });
314
+ expect(response.statusCode).toBe(400);
315
+ expect(response.json().error).toBe('La valeur doit être comprise entre 1 et 10');
316
+ await app.close();
317
+ });
318
+ it('returns 400 with French range message when maxConcurrentReviews is 11', async () => {
319
+ const gateway = new StubProjectConfigGateway();
320
+ gateway.set('/repo/A', baseConfig());
321
+ const app = await buildAppWithPatch(gateway);
322
+ const response = await app.inject({
323
+ method: 'PATCH',
324
+ url: '/api/project-config?path=' + encodeURIComponent('/repo/A'),
325
+ payload: { maxConcurrentReviews: 11 },
326
+ });
327
+ expect(response.statusCode).toBe(400);
328
+ expect(response.json().error).toBe('La valeur doit être comprise entre 1 et 10');
329
+ await app.close();
330
+ });
331
+ it('returns 400 with French integer message when maxConcurrentReviews is "abc"', async () => {
332
+ const gateway = new StubProjectConfigGateway();
333
+ gateway.set('/repo/A', baseConfig());
334
+ const app = await buildAppWithPatch(gateway);
335
+ const response = await app.inject({
336
+ method: 'PATCH',
337
+ url: '/api/project-config?path=' + encodeURIComponent('/repo/A'),
338
+ payload: { maxConcurrentReviews: 'abc' },
339
+ });
340
+ expect(response.statusCode).toBe(400);
341
+ expect(response.json().error).toBe('La valeur doit être un nombre entier');
342
+ await app.close();
343
+ });
344
+ it('returns 400 with French required message when maxConcurrentReviews is empty string', async () => {
345
+ const gateway = new StubProjectConfigGateway();
346
+ gateway.set('/repo/A', baseConfig());
347
+ const app = await buildAppWithPatch(gateway);
348
+ const response = await app.inject({
349
+ method: 'PATCH',
350
+ url: '/api/project-config?path=' + encodeURIComponent('/repo/A'),
351
+ payload: { maxConcurrentReviews: '' },
352
+ });
353
+ expect(response.statusCode).toBe(400);
354
+ expect(response.json().error).toBe('La valeur est obligatoire');
355
+ await app.close();
356
+ });
357
+ it('clears maxConcurrentReviews from persisted config when patch sends null', async () => {
358
+ const gateway = new StubProjectConfigGateway();
359
+ gateway.set('/repo/A', baseConfig({ maxConcurrentReviews: 4 }));
360
+ const app = await buildAppWithPatch(gateway);
361
+ const response = await app.inject({
362
+ method: 'PATCH',
363
+ url: '/api/project-config?path=' + encodeURIComponent('/repo/A'),
364
+ payload: { maxConcurrentReviews: null },
365
+ });
366
+ expect(response.statusCode).toBe(200);
367
+ expect(response.json().config.maxConcurrentReviews).toBeUndefined();
368
+ await app.close();
369
+ });
279
370
  });
280
371
  //# sourceMappingURL=projectConfig.routes.test.js.map