@bevel-software/platform-core-backend 0.35.0 → 0.36.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 (827) hide show
  1. package/agent-guide/directory-structure.md +1 -1
  2. package/agent-guide/onboarding.md +111 -0
  3. package/agent-guide/start-here.md +1 -0
  4. package/agent-guide/tool-manuals.md +1 -0
  5. package/dist/core/catalog-cache-invalidation.d.ts +2 -2
  6. package/dist/core/catalog-cache-invalidation.d.ts.map +1 -1
  7. package/dist/core/compose-embed.d.ts +2 -2
  8. package/dist/core/compose-embed.d.ts.map +1 -1
  9. package/dist/core/compose-embed.js +1 -1
  10. package/dist/core/compose-embed.js.map +1 -1
  11. package/dist/core/core-ports.d.ts +19 -4
  12. package/dist/core/core-ports.d.ts.map +1 -1
  13. package/dist/core/core-ports.js.map +1 -1
  14. package/dist/core/create-core-server.d.ts.map +1 -1
  15. package/dist/core/create-core-server.js +26 -24
  16. package/dist/core/create-core-server.js.map +1 -1
  17. package/dist/core/create-core-services.d.ts +19 -13
  18. package/dist/core/create-core-services.d.ts.map +1 -1
  19. package/dist/core/create-core-services.js +68 -56
  20. package/dist/core/create-core-services.js.map +1 -1
  21. package/dist/core/lifecycle.d.ts +4 -4
  22. package/dist/core/lifecycle.d.ts.map +1 -1
  23. package/dist/core/lifecycle.js +5 -5
  24. package/dist/core/lifecycle.js.map +1 -1
  25. package/dist/core-config.d.ts +2 -2
  26. package/dist/core-config.js +3 -3
  27. package/dist/core-config.js.map +1 -1
  28. package/dist/index.d.ts +4 -4
  29. package/dist/index.d.ts.map +1 -1
  30. package/dist/index.js +3 -3
  31. package/dist/index.js.map +1 -1
  32. package/dist/modules/access/access-control.service.js +1 -1
  33. package/dist/modules/access/access-control.service.js.map +1 -1
  34. package/dist/modules/access/access-declarations.d.ts +2 -2
  35. package/dist/modules/access/access-declarations.d.ts.map +1 -1
  36. package/dist/modules/access/access-declarations.js +2 -2
  37. package/dist/modules/access/access-declarations.js.map +1 -1
  38. package/dist/modules/access/access-mutation.service.d.ts +2 -2
  39. package/dist/modules/access/access-mutation.service.d.ts.map +1 -1
  40. package/dist/modules/access/access-mutation.service.js +2 -2
  41. package/dist/modules/access/access-mutation.service.js.map +1 -1
  42. package/dist/modules/access/access-requests.routes.d.ts +2 -2
  43. package/dist/modules/access/access-requests.routes.d.ts.map +1 -1
  44. package/dist/modules/access/access-requests.routes.js +5 -5
  45. package/dist/modules/access/access-requests.routes.js.map +1 -1
  46. package/dist/modules/access/access-requests.service.d.ts +2 -2
  47. package/dist/modules/access/access-requests.service.d.ts.map +1 -1
  48. package/dist/modules/access/access-requests.service.js +11 -11
  49. package/dist/modules/access/access-requests.service.js.map +1 -1
  50. package/dist/modules/access/access.routes.d.ts +2 -2
  51. package/dist/modules/access/access.routes.d.ts.map +1 -1
  52. package/dist/modules/access/access.routes.js +9 -9
  53. package/dist/modules/access/access.routes.js.map +1 -1
  54. package/dist/modules/access/admin-locked-commit.d.ts +5 -5
  55. package/dist/modules/access/admin-locked-commit.d.ts.map +1 -1
  56. package/dist/modules/access/admin-locked-commit.js +7 -7
  57. package/dist/modules/access/admin-locked-commit.js.map +1 -1
  58. package/dist/modules/access/admin-route-helpers.d.ts +1 -1
  59. package/dist/modules/access/admin-route-helpers.js +5 -5
  60. package/dist/modules/access/admin-route-helpers.js.map +1 -1
  61. package/dist/modules/access/change-read-gate.d.ts +1 -1
  62. package/dist/modules/access/change-read-gate.js +1 -1
  63. package/dist/modules/access/groups-admin.service.d.ts +7 -7
  64. package/dist/modules/access/groups-admin.service.d.ts.map +1 -1
  65. package/dist/modules/access/groups-admin.service.js +6 -6
  66. package/dist/modules/access/groups-admin.service.js.map +1 -1
  67. package/dist/modules/access/reference-scan.d.ts +1 -1
  68. package/dist/modules/access/roles-admin.service.d.ts +7 -7
  69. package/dist/modules/access/roles-admin.service.d.ts.map +1 -1
  70. package/dist/modules/access/roles-admin.service.js +8 -8
  71. package/dist/modules/access/roles-admin.service.js.map +1 -1
  72. package/dist/modules/access/synced-groups-committer.d.ts +4 -4
  73. package/dist/modules/access/synced-groups-committer.d.ts.map +1 -1
  74. package/dist/modules/access/synced-groups-committer.js +7 -7
  75. package/dist/modules/access/synced-groups-committer.js.map +1 -1
  76. package/dist/modules/access/user-access-removal.service.d.ts +6 -6
  77. package/dist/modules/access/user-access-removal.service.d.ts.map +1 -1
  78. package/dist/modules/access/user-access-removal.service.js +4 -4
  79. package/dist/modules/access/user-access-removal.service.js.map +1 -1
  80. package/dist/modules/access-model/access-errors.d.ts +4 -4
  81. package/dist/modules/access-model/access-errors.d.ts.map +1 -1
  82. package/dist/modules/access-model/access-errors.js +4 -4
  83. package/dist/modules/access-model/access-errors.js.map +1 -1
  84. package/dist/modules/access-model/access-grammar.d.ts +1 -1
  85. package/dist/modules/access-model/access-grammar.js +4 -4
  86. package/dist/modules/access-model/change-gate.d.ts +1 -1
  87. package/dist/modules/access-model/change-gate.js +1 -1
  88. package/dist/modules/access-model/roles-yaml-guard.d.ts +4 -4
  89. package/dist/modules/access-model/roles-yaml-guard.d.ts.map +1 -1
  90. package/dist/modules/access-model/roles-yaml-guard.js +4 -4
  91. package/dist/modules/access-model/roles-yaml-guard.js.map +1 -1
  92. package/dist/modules/agent-guide/agent-guide.d.ts +19 -14
  93. package/dist/modules/agent-guide/agent-guide.d.ts.map +1 -1
  94. package/dist/modules/agent-guide/agent-guide.js +42 -18
  95. package/dist/modules/agent-guide/agent-guide.js.map +1 -1
  96. package/dist/modules/agent-guide/guide-budget.d.ts +5 -2
  97. package/dist/modules/agent-guide/guide-budget.d.ts.map +1 -1
  98. package/dist/modules/agent-guide/guide-budget.js +6 -2
  99. package/dist/modules/agent-guide/guide-budget.js.map +1 -1
  100. package/dist/modules/agent-instructions/agent-instructions.routes.d.ts +12 -5
  101. package/dist/modules/agent-instructions/agent-instructions.routes.d.ts.map +1 -1
  102. package/dist/modules/agent-instructions/agent-instructions.routes.js +13 -6
  103. package/dist/modules/agent-instructions/agent-instructions.routes.js.map +1 -1
  104. package/dist/modules/agent-instructions/compose.d.ts +15 -8
  105. package/dist/modules/agent-instructions/compose.d.ts.map +1 -1
  106. package/dist/modules/agent-instructions/compose.js +24 -10
  107. package/dist/modules/agent-instructions/compose.js.map +1 -1
  108. package/dist/modules/agent-instructions/shared-file-rules.d.ts +14 -6
  109. package/dist/modules/agent-instructions/shared-file-rules.d.ts.map +1 -1
  110. package/dist/modules/agent-instructions/shared-file-rules.js +51 -11
  111. package/dist/modules/agent-instructions/shared-file-rules.js.map +1 -1
  112. package/dist/modules/auth/account-erasure.service.d.ts +36 -7
  113. package/dist/modules/auth/account-erasure.service.d.ts.map +1 -1
  114. package/dist/modules/auth/account-erasure.service.js +30 -10
  115. package/dist/modules/auth/account-erasure.service.js.map +1 -1
  116. package/dist/modules/auth/account-hooks.d.ts +20 -0
  117. package/dist/modules/auth/account-hooks.d.ts.map +1 -1
  118. package/dist/modules/auth/account-hooks.js +10 -0
  119. package/dist/modules/auth/account-hooks.js.map +1 -1
  120. package/dist/modules/auth/account-switch-lock.js +2 -2
  121. package/dist/modules/auth/account-switch-lock.js.map +1 -1
  122. package/dist/modules/auth/account.routes.d.ts +7 -2
  123. package/dist/modules/auth/account.routes.d.ts.map +1 -1
  124. package/dist/modules/auth/account.routes.js +23 -4
  125. package/dist/modules/auth/account.routes.js.map +1 -1
  126. package/dist/modules/auth/auth.service.d.ts +1 -1
  127. package/dist/modules/auth/auth.service.js +4 -4
  128. package/dist/modules/auth/auth.service.js.map +1 -1
  129. package/dist/modules/auth/index.d.ts +1 -0
  130. package/dist/modules/auth/index.d.ts.map +1 -1
  131. package/dist/modules/database/core-schema.js +2 -2
  132. package/dist/modules/database/core-schema.js.map +1 -1
  133. package/dist/modules/diff/diff.routes.d.ts +3 -3
  134. package/dist/modules/diff/diff.routes.d.ts.map +1 -1
  135. package/dist/modules/diff/diff.routes.js +7 -7
  136. package/dist/modules/diff/diff.routes.js.map +1 -1
  137. package/dist/modules/embed/embed.routes.js +1 -1
  138. package/dist/modules/embed/embed.routes.js.map +1 -1
  139. package/dist/modules/embed/embed.service.d.ts +4 -4
  140. package/dist/modules/embed/embed.service.d.ts.map +1 -1
  141. package/dist/modules/embed/embed.service.js +18 -18
  142. package/dist/modules/embed/embed.service.js.map +1 -1
  143. package/dist/modules/kb-fs/branch-name.js +8 -8
  144. package/dist/modules/kb-fs/branch-name.js.map +1 -1
  145. package/dist/modules/kb-fs/file-change-notifier.d.ts +2 -2
  146. package/dist/modules/kb-fs/locking-filesystem.d.ts +9 -9
  147. package/dist/modules/kb-fs/locking-filesystem.d.ts.map +1 -1
  148. package/dist/modules/kb-fs/locking-filesystem.js +27 -27
  149. package/dist/modules/kb-fs/locking-filesystem.js.map +1 -1
  150. package/dist/modules/kb-fs/repo-path.js +5 -5
  151. package/dist/modules/kb-fs/repo-path.js.map +1 -1
  152. package/dist/modules/kb-fs/tmp-ref.d.ts +2 -2
  153. package/dist/modules/kb-fs/tmp-ref.d.ts.map +1 -1
  154. package/dist/modules/kb-fs/tmp-ref.js +2 -2
  155. package/dist/modules/kb-fs/tmp-ref.js.map +1 -1
  156. package/dist/modules/kb-sync/index.d.ts +1 -1
  157. package/dist/modules/kb-sync/index.d.ts.map +1 -1
  158. package/dist/modules/kb-sync/kb-sync.interface.d.ts +3 -3
  159. package/dist/modules/kb-sync/kb-sync.interface.d.ts.map +1 -1
  160. package/dist/modules/kb-sync/kb-sync.service.d.ts +3 -3
  161. package/dist/modules/kb-sync/kb-sync.service.d.ts.map +1 -1
  162. package/dist/modules/kb-sync/kb-sync.service.js +10 -10
  163. package/dist/modules/kb-sync/kb-sync.service.js.map +1 -1
  164. package/dist/modules/mcp/mcp.service.d.ts +11 -4
  165. package/dist/modules/mcp/mcp.service.d.ts.map +1 -1
  166. package/dist/modules/mcp/mcp.service.js +75 -19
  167. package/dist/modules/mcp/mcp.service.js.map +1 -1
  168. package/dist/modules/onboarding/onboarding.contract.d.ts +1 -1
  169. package/dist/modules/onboarding/onboarding.routes.js +2 -2
  170. package/dist/modules/onboarding/onboarding.routes.js.map +1 -1
  171. package/dist/modules/onboarding/starter-pack.service.d.ts +4 -4
  172. package/dist/modules/onboarding/starter-pack.service.d.ts.map +1 -1
  173. package/dist/modules/onboarding/starter-pack.service.js +4 -4
  174. package/dist/modules/onboarding/starter-pack.service.js.map +1 -1
  175. package/dist/modules/plugins/join-request-jobs.service.d.ts +2 -2
  176. package/dist/modules/plugins/join-request-jobs.service.d.ts.map +1 -1
  177. package/dist/modules/plugins/join-request-jobs.service.js +7 -7
  178. package/dist/modules/plugins/join-request-jobs.service.js.map +1 -1
  179. package/dist/modules/plugins/join-requests.service.d.ts +3 -3
  180. package/dist/modules/plugins/join-requests.service.d.ts.map +1 -1
  181. package/dist/modules/plugins/join-requests.service.js +5 -5
  182. package/dist/modules/plugins/join-requests.service.js.map +1 -1
  183. package/dist/modules/plugins/plugin-rename.service.js +1 -1
  184. package/dist/modules/plugins/plugin-rename.service.js.map +1 -1
  185. package/dist/modules/plugins/plugins.routes.d.ts +2 -2
  186. package/dist/modules/plugins/plugins.routes.d.ts.map +1 -1
  187. package/dist/modules/plugins/plugins.routes.js +8 -8
  188. package/dist/modules/plugins/plugins.routes.js.map +1 -1
  189. package/dist/modules/secrets-vault/db-secrets-vault.service.d.ts +77 -2
  190. package/dist/modules/secrets-vault/db-secrets-vault.service.d.ts.map +1 -1
  191. package/dist/modules/secrets-vault/db-secrets-vault.service.js +479 -53
  192. package/dist/modules/secrets-vault/db-secrets-vault.service.js.map +1 -1
  193. package/dist/modules/secrets-vault/index.d.ts +2 -1
  194. package/dist/modules/secrets-vault/index.d.ts.map +1 -1
  195. package/dist/modules/secrets-vault/index.js +1 -0
  196. package/dist/modules/secrets-vault/index.js.map +1 -1
  197. package/dist/modules/secrets-vault/managed-sign-in-erasure.d.ts +36 -0
  198. package/dist/modules/secrets-vault/managed-sign-in-erasure.d.ts.map +1 -0
  199. package/dist/modules/secrets-vault/managed-sign-in-erasure.js +37 -0
  200. package/dist/modules/secrets-vault/managed-sign-in-erasure.js.map +1 -0
  201. package/dist/modules/secrets-vault/secrets-vault.contract.d.ts +152 -0
  202. package/dist/modules/secrets-vault/secrets-vault.contract.d.ts.map +1 -1
  203. package/dist/modules/secrets-vault/secrets-vault.contract.js.map +1 -1
  204. package/dist/modules/secrets-vault/secrets-vault.routes.d.ts +7 -1
  205. package/dist/modules/secrets-vault/secrets-vault.routes.d.ts.map +1 -1
  206. package/dist/modules/secrets-vault/secrets-vault.routes.js +125 -10
  207. package/dist/modules/secrets-vault/secrets-vault.routes.js.map +1 -1
  208. package/dist/modules/settings/connection-check.js +1 -1
  209. package/dist/modules/settings/connection-check.js.map +1 -1
  210. package/dist/modules/settings/deployment-settings.service.js +1 -1
  211. package/dist/modules/settings/git-root-folders.js +1 -1
  212. package/dist/modules/settings/git-root-folders.js.map +1 -1
  213. package/dist/modules/settings/setup.routes.d.ts +1 -1
  214. package/dist/modules/settings/setup.routes.js +1 -1
  215. package/dist/modules/skills/pending-skills.service.d.ts +3 -3
  216. package/dist/modules/skills/pending-skills.service.d.ts.map +1 -1
  217. package/dist/modules/skills/pending-skills.service.js +4 -4
  218. package/dist/modules/skills/pending-skills.service.js.map +1 -1
  219. package/dist/modules/skills/skill-access-requests.routes.d.ts +2 -2
  220. package/dist/modules/skills/skill-access-requests.routes.d.ts.map +1 -1
  221. package/dist/modules/skills/skill-access-requests.routes.js +5 -5
  222. package/dist/modules/skills/skill-access-requests.routes.js.map +1 -1
  223. package/dist/modules/tool-helpers/tool-context.d.ts +4 -4
  224. package/dist/modules/tool-helpers/tool-context.d.ts.map +1 -1
  225. package/dist/modules/tool-helpers/tool-context.js +2 -2
  226. package/dist/modules/tool-helpers/tool-context.js.map +1 -1
  227. package/dist/modules/tool-helpers/tool-handler.js +2 -2
  228. package/dist/modules/tool-helpers/tool-handler.js.map +1 -1
  229. package/dist/modules/tool-helpers/tool.contract.d.ts +4 -4
  230. package/dist/modules/tool-helpers/tool.contract.d.ts.map +1 -1
  231. package/dist/modules/tool-manuals/mcp-server-edit.service.js +1 -1
  232. package/dist/modules/tool-manuals/mcp-server-edit.service.js.map +1 -1
  233. package/dist/modules/tool-manuals/pending-tools.service.d.ts +3 -3
  234. package/dist/modules/tool-manuals/pending-tools.service.d.ts.map +1 -1
  235. package/dist/modules/tool-manuals/pending-tools.service.js +4 -4
  236. package/dist/modules/tool-manuals/pending-tools.service.js.map +1 -1
  237. package/dist/modules/tool-manuals/tool-delete.service.js +1 -1
  238. package/dist/modules/tool-manuals/tool-delete.service.js.map +1 -1
  239. package/dist/modules/tool-manuals/tool-manuals.contract.d.ts +43 -3
  240. package/dist/modules/tool-manuals/tool-manuals.contract.d.ts.map +1 -1
  241. package/dist/modules/tool-manuals/tool-manuals.service.d.ts +6 -0
  242. package/dist/modules/tool-manuals/tool-manuals.service.d.ts.map +1 -1
  243. package/dist/modules/tool-manuals/tool-manuals.service.js +51 -5
  244. package/dist/modules/tool-manuals/tool-manuals.service.js.map +1 -1
  245. package/dist/modules/tool-manuals/tool-manuals.tools.d.ts +3 -0
  246. package/dist/modules/tool-manuals/tool-manuals.tools.d.ts.map +1 -1
  247. package/dist/modules/tool-manuals/tool-manuals.tools.js +36 -15
  248. package/dist/modules/tool-manuals/tool-manuals.tools.js.map +1 -1
  249. package/dist/modules/version-control/agent-tools/change-request-read-shape.d.ts.map +1 -0
  250. package/dist/modules/version-control/agent-tools/change-request-read-shape.js.map +1 -0
  251. package/dist/modules/version-control/agent-tools/change-request-read.tools.d.ts.map +1 -0
  252. package/dist/modules/{workflow → version-control}/agent-tools/change-request-read.tools.js +2 -2
  253. package/dist/modules/version-control/agent-tools/change-request-read.tools.js.map +1 -0
  254. package/dist/modules/version-control/agent-tools/change-request-summary.d.ts.map +1 -0
  255. package/dist/modules/version-control/agent-tools/change-request-summary.js.map +1 -0
  256. package/dist/modules/{workflow/agent-tools/workflow.tools.d.ts → version-control/agent-tools/version-control.tools.d.ts} +4 -4
  257. package/dist/modules/version-control/agent-tools/version-control.tools.d.ts.map +1 -0
  258. package/dist/modules/{workflow/agent-tools/workflow.tools.js → version-control/agent-tools/version-control.tools.js} +31 -31
  259. package/dist/modules/version-control/agent-tools/version-control.tools.js.map +1 -0
  260. package/dist/modules/{workflow → version-control}/change-request-hooks.d.ts +1 -1
  261. package/dist/modules/version-control/change-request-hooks.d.ts.map +1 -0
  262. package/dist/modules/version-control/change-request-hooks.js.map +1 -0
  263. package/dist/modules/version-control/change-request-review/approval-lock.d.ts.map +1 -0
  264. package/dist/modules/version-control/change-request-review/approval-lock.js.map +1 -0
  265. package/dist/modules/{workflow/review-workflow/review-workflow.interface.d.ts → version-control/change-request-review/change-request-review.interface.d.ts} +2 -2
  266. package/dist/modules/version-control/change-request-review/change-request-review.interface.d.ts.map +1 -0
  267. package/dist/modules/version-control/change-request-review/change-request-review.interface.js +2 -0
  268. package/dist/modules/version-control/change-request-review/change-request-review.interface.js.map +1 -0
  269. package/dist/modules/{workflow/review-workflow/review-workflow.service.d.ts → version-control/change-request-review/change-request-review.service.d.ts} +3 -3
  270. package/dist/modules/version-control/change-request-review/change-request-review.service.d.ts.map +1 -0
  271. package/dist/modules/{workflow/review-workflow/review-workflow.service.js → version-control/change-request-review/change-request-review.service.js} +26 -26
  272. package/dist/modules/version-control/change-request-review/change-request-review.service.js.map +1 -0
  273. package/dist/modules/{workflow → version-control}/event-bus.d.ts +8 -8
  274. package/dist/modules/version-control/event-bus.d.ts.map +1 -0
  275. package/dist/modules/{workflow → version-control}/event-bus.js +4 -4
  276. package/dist/modules/version-control/event-bus.js.map +1 -0
  277. package/dist/modules/{workflow → version-control}/events-delivery.d.ts +4 -4
  278. package/dist/modules/version-control/events-delivery.d.ts.map +1 -0
  279. package/dist/modules/version-control/events-delivery.js.map +1 -0
  280. package/dist/modules/{workflow → version-control}/events.routes.d.ts +4 -4
  281. package/dist/modules/version-control/events.routes.d.ts.map +1 -0
  282. package/dist/modules/version-control/events.routes.js.map +1 -0
  283. package/dist/modules/{workflow → version-control}/file-lock.service.d.ts +2 -2
  284. package/dist/modules/version-control/file-lock.service.d.ts.map +1 -0
  285. package/dist/modules/{workflow → version-control}/file-lock.service.js +6 -6
  286. package/dist/modules/version-control/file-lock.service.js.map +1 -0
  287. package/dist/modules/version-control/git/change-request-link.d.ts.map +1 -0
  288. package/dist/modules/version-control/git/change-request-link.js.map +1 -0
  289. package/dist/modules/version-control/git/git-version.d.ts.map +1 -0
  290. package/dist/modules/version-control/git/git-version.js.map +1 -0
  291. package/dist/modules/{workflow → version-control}/git/git.service.d.ts +8 -8
  292. package/dist/modules/version-control/git/git.service.d.ts.map +1 -0
  293. package/dist/modules/{workflow → version-control}/git/git.service.js +53 -53
  294. package/dist/modules/version-control/git/git.service.js.map +1 -0
  295. package/dist/modules/version-control/git/merge-commit.d.ts.map +1 -0
  296. package/dist/modules/version-control/git/merge-commit.js.map +1 -0
  297. package/dist/modules/version-control/git/node-git-runner.d.ts.map +1 -0
  298. package/dist/modules/{workflow → version-control}/git/node-git-runner.js +1 -1
  299. package/dist/modules/version-control/git/node-git-runner.js.map +1 -0
  300. package/dist/modules/{workflow → version-control}/git/pull-request.service.d.ts +5 -5
  301. package/dist/modules/version-control/git/pull-request.service.d.ts.map +1 -0
  302. package/dist/modules/{workflow → version-control}/git/pull-request.service.js +10 -10
  303. package/dist/modules/version-control/git/pull-request.service.js.map +1 -0
  304. package/dist/modules/{workflow → version-control}/index.d.ts +6 -5
  305. package/dist/modules/version-control/index.d.ts.map +1 -0
  306. package/dist/modules/{workflow → version-control}/index.js +3 -2
  307. package/dist/modules/version-control/index.js.map +1 -0
  308. package/dist/modules/{workflow → version-control}/pending-commits.service.d.ts +2 -2
  309. package/dist/modules/version-control/pending-commits.service.d.ts.map +1 -0
  310. package/dist/modules/{workflow → version-control}/pending-commits.service.js +2 -2
  311. package/dist/modules/version-control/pending-commits.service.js.map +1 -0
  312. package/dist/modules/{workflow → version-control}/pending-commits.worker.d.ts +5 -5
  313. package/dist/modules/version-control/pending-commits.worker.d.ts.map +1 -0
  314. package/dist/modules/{workflow → version-control}/pending-commits.worker.js +3 -3
  315. package/dist/modules/version-control/pending-commits.worker.js.map +1 -0
  316. package/dist/modules/{workflow → version-control}/read-on-branch.d.ts +2 -2
  317. package/dist/modules/version-control/read-on-branch.d.ts.map +1 -0
  318. package/dist/modules/{workflow → version-control}/read-on-branch.js +2 -2
  319. package/dist/modules/version-control/read-on-branch.js.map +1 -0
  320. package/dist/modules/version-control/recovery-bot.d.ts.map +1 -0
  321. package/dist/modules/version-control/recovery-bot.js.map +1 -0
  322. package/dist/modules/version-control/sanitize-error.d.ts.map +1 -0
  323. package/dist/modules/version-control/sanitize-error.js.map +1 -0
  324. package/dist/modules/{workflow/workflow-hooks.d.ts → version-control/version-control-hooks.d.ts} +4 -4
  325. package/dist/modules/version-control/version-control-hooks.d.ts.map +1 -0
  326. package/dist/modules/{workflow/workflow-hooks.js → version-control/version-control-hooks.js} +3 -3
  327. package/dist/modules/version-control/version-control-hooks.js.map +1 -0
  328. package/dist/modules/{workflow/workflow.routes.d.ts → version-control/version-control.routes.d.ts} +6 -5
  329. package/dist/modules/version-control/version-control.routes.d.ts.map +1 -0
  330. package/dist/modules/{workflow/workflow.routes.js → version-control/version-control.routes.js} +61 -60
  331. package/dist/modules/version-control/version-control.routes.js.map +1 -0
  332. package/dist/modules/{workflow/workflow.service.d.ts → version-control/version-control.service.d.ts} +26 -31
  333. package/dist/modules/version-control/version-control.service.d.ts.map +1 -0
  334. package/dist/modules/{workflow/workflow.service.js → version-control/version-control.service.js} +89 -94
  335. package/dist/modules/version-control/version-control.service.js.map +1 -0
  336. package/dist/modules/workspace/agent-access.gate.d.ts +5 -5
  337. package/dist/modules/workspace/agent-access.gate.d.ts.map +1 -1
  338. package/dist/modules/workspace/agent-access.gate.js +1 -1
  339. package/dist/modules/workspace/git-internals.middleware.d.ts +1 -1
  340. package/dist/modules/workspace/git-internals.middleware.js +2 -2
  341. package/dist/modules/workspace/kb-repository.js +1 -1
  342. package/dist/modules/workspace/kb-repository.js.map +1 -1
  343. package/dist/modules/workspace/startup/kb-git.d.ts +1 -1
  344. package/dist/modules/workspace/startup/kb-git.d.ts.map +1 -1
  345. package/dist/modules/workspace/startup/kb-git.js +1 -1
  346. package/dist/modules/workspace/startup/kb-git.js.map +1 -1
  347. package/dist/modules/workspace/startup/steps/seed-tree.d.ts +2 -2
  348. package/dist/modules/workspace/startup/steps/seed-tree.d.ts.map +1 -1
  349. package/dist/modules/workspace/startup/steps/seed-tree.js +1 -1
  350. package/dist/modules/workspace/startup/steps/seed-tree.js.map +1 -1
  351. package/dist/modules/workspace/startup/steps/template-files.step.d.ts +2 -2
  352. package/dist/modules/workspace/startup/steps/template-files.step.d.ts.map +1 -1
  353. package/dist/modules/workspace/startup/steps/template-files.step.js +2 -2
  354. package/dist/modules/workspace/startup/steps/template-files.step.js.map +1 -1
  355. package/dist/modules/workspace/startup/steps/template-source.d.ts +17 -4
  356. package/dist/modules/workspace/startup/steps/template-source.d.ts.map +1 -1
  357. package/dist/modules/workspace/startup/steps/template-source.js +8 -5
  358. package/dist/modules/workspace/startup/steps/template-source.js.map +1 -1
  359. package/dist/modules/workspace/workspace-tmp.js +3 -3
  360. package/dist/modules/workspace/workspace-tmp.js.map +1 -1
  361. package/dist/modules/workspace/workspace.routes.d.ts +4 -4
  362. package/dist/modules/workspace/workspace.routes.d.ts.map +1 -1
  363. package/dist/modules/workspace/workspace.routes.js +22 -22
  364. package/dist/modules/workspace/workspace.routes.js.map +1 -1
  365. package/dist/modules/workspace/workspace.service.d.ts +6 -6
  366. package/dist/modules/workspace/workspace.service.d.ts.map +1 -1
  367. package/dist/modules/workspace/workspace.service.js +11 -11
  368. package/dist/modules/workspace/workspace.service.js.map +1 -1
  369. package/dist/modules/workspace/workspace.tools.d.ts +2 -1
  370. package/dist/modules/workspace/workspace.tools.d.ts.map +1 -1
  371. package/dist/modules/workspace/workspace.tools.js +15 -10
  372. package/dist/modules/workspace/workspace.tools.js.map +1 -1
  373. package/dist/shared/canonical-file-identity.d.ts +2 -2
  374. package/dist/shared/canonical-file-identity.js +5 -5
  375. package/dist/shared/canonical-file-identity.js.map +1 -1
  376. package/dist/shared/domain-errors.d.ts +39 -39
  377. package/dist/shared/domain-errors.d.ts.map +1 -1
  378. package/dist/shared/domain-errors.js +44 -44
  379. package/dist/shared/domain-errors.js.map +1 -1
  380. package/dist/shared/git.contract.d.ts +1 -1
  381. package/dist/shared/git.contract.js +1 -1
  382. package/dist/shared/http-errors.d.ts +3 -3
  383. package/dist/shared/http-errors.d.ts.map +1 -1
  384. package/dist/shared/http-errors.js +1 -1
  385. package/dist/shared/http-errors.js.map +1 -1
  386. package/dist/shared/pending-proposals.d.ts +3 -3
  387. package/dist/shared/pending-proposals.d.ts.map +1 -1
  388. package/dist/shared/pending-proposals.js +2 -2
  389. package/dist/shared/pending-proposals.js.map +1 -1
  390. package/dist/tenancy/static-tenant-source.js +1 -1
  391. package/dist/tenancy/static-tenant-source.js.map +1 -1
  392. package/migrations/0012_agent_audit.sql +40 -40
  393. package/migrations/0013_agent_identity_and_key_soft_delete.sql +29 -29
  394. package/migrations/meta/0012_snapshot.json +2246 -2246
  395. package/migrations/meta/0013_snapshot.json +2258 -2258
  396. package/package.json +4 -4
  397. package/src/__tests__/account-admin.ts +27 -0
  398. package/src/__tests__/hexis-catalog.ts +4 -4
  399. package/src/__tests__/kb-context.ts +30 -30
  400. package/src/__tests__/kb-layout-config.test.ts +21 -0
  401. package/src/__tests__/open-change-gate.ts +1 -1
  402. package/src/__tests__/tool-handler.ts +15 -0
  403. package/src/__tests__/tool-wiring.ts +10 -4
  404. package/src/__tests__/workspace-service.ts +1 -1
  405. package/src/core/__tests__/catalog-cache-invalidation.test.ts +3 -3
  406. package/src/core/__tests__/compose-embed.test.ts +1 -1
  407. package/src/core/__tests__/damaged-document.tools.test.ts +3 -3
  408. package/src/core/__tests__/erasure-slices-wired-once.test.ts +46 -0
  409. package/src/core/__tests__/gated-boot.test.ts +2 -2
  410. package/src/core/__tests__/lifecycle.test.ts +9 -9
  411. package/src/core/catalog-cache-invalidation.ts +2 -2
  412. package/src/core/compose-embed.ts +3 -3
  413. package/src/core/core-ports.ts +19 -4
  414. package/src/core/create-core-server.ts +39 -25
  415. package/src/core/create-core-services.ts +79 -63
  416. package/src/core/lifecycle.ts +9 -9
  417. package/src/core-config.ts +3 -3
  418. package/src/index.ts +5 -5
  419. package/src/modules/access/__tests__/access-control.admin-root-floor.test.ts +4 -4
  420. package/src/modules/access/__tests__/access-own-read-grant.test.ts +14 -14
  421. package/src/modules/access/__tests__/access-requests.routes.test.ts +20 -20
  422. package/src/modules/access/__tests__/access.routes.admins.test.ts +4 -4
  423. package/src/modules/access/__tests__/access.routes.batch.test.ts +4 -4
  424. package/src/modules/access/__tests__/access.routes.folder-governs.test.ts +6 -6
  425. package/src/modules/access/__tests__/access.routes.group-grant.test.ts +6 -6
  426. package/src/modules/access/__tests__/access.routes.overrides.test.ts +5 -5
  427. package/src/modules/access/__tests__/access.routes.proposal-branch.test.ts +6 -6
  428. package/src/modules/access/__tests__/access.routes.prospective.test.ts +3 -3
  429. package/src/modules/access/__tests__/access.routes.revoke.test.ts +6 -6
  430. package/src/modules/access/__tests__/access.routes.unknown-email.test.ts +6 -6
  431. package/src/modules/access/__tests__/admin-locked-commit.test.ts +6 -6
  432. package/src/modules/access/__tests__/admin-route-helpers.test.ts +5 -5
  433. package/src/modules/access/__tests__/groups-admin.service.test.ts +27 -27
  434. package/src/modules/access/__tests__/roles-admin.security.test.ts +14 -13
  435. package/src/modules/access/__tests__/roles-admin.service.test.ts +27 -27
  436. package/src/modules/access/__tests__/roles-capabilities.test.ts +19 -19
  437. package/src/modules/access/__tests__/roles.routes.test.ts +6 -6
  438. package/src/modules/access/__tests__/synced-groups-committer.test.ts +13 -13
  439. package/src/modules/access/__tests__/user-access-removal.service.test.ts +29 -29
  440. package/src/modules/access/access-control.service.ts +1 -1
  441. package/src/modules/access/access-declarations.ts +2 -2
  442. package/src/modules/access/access-mutation.service.ts +2 -2
  443. package/src/modules/access/access-requests.routes.ts +7 -7
  444. package/src/modules/access/access-requests.service.ts +13 -13
  445. package/src/modules/access/access.routes.ts +11 -11
  446. package/src/modules/access/admin-locked-commit.ts +11 -11
  447. package/src/modules/access/admin-route-helpers.ts +5 -5
  448. package/src/modules/access/change-read-gate.ts +1 -1
  449. package/src/modules/access/groups-admin.service.ts +7 -7
  450. package/src/modules/access/reference-scan.ts +1 -1
  451. package/src/modules/access/roles-admin.service.ts +9 -9
  452. package/src/modules/access/synced-groups-committer.ts +11 -11
  453. package/src/modules/access/user-access-removal.service.ts +7 -7
  454. package/src/modules/access-model/__tests__/access-grammar.test.ts +2 -2
  455. package/src/modules/access-model/access-errors.ts +4 -4
  456. package/src/modules/access-model/access-grammar.ts +4 -4
  457. package/src/modules/access-model/change-gate.ts +1 -1
  458. package/src/modules/access-model/roles-yaml-guard.ts +4 -4
  459. package/src/modules/agent-guide/__tests__/agent-guide.test.ts +19 -4
  460. package/src/modules/agent-guide/__tests__/agent-guide.tools.test.ts +1 -1
  461. package/src/modules/agent-guide/__tests__/guide-matches-code.test.ts +2 -2
  462. package/src/modules/agent-guide/agent-guide.ts +48 -22
  463. package/src/modules/agent-guide/guide-budget.ts +6 -2
  464. package/src/modules/agent-instructions/__tests__/agent-instructions.route.test.ts +4 -5
  465. package/src/modules/agent-instructions/__tests__/compose.test.ts +1 -1
  466. package/src/modules/agent-instructions/__tests__/shared-file-rules.test.ts +113 -7
  467. package/src/modules/agent-instructions/agent-instructions.routes.ts +12 -5
  468. package/src/modules/agent-instructions/compose.ts +24 -9
  469. package/src/modules/agent-instructions/shared-file-rules.ts +53 -11
  470. package/src/modules/agent-scope/__tests__/agent-surfaces.connect-as.test.ts +1 -1
  471. package/src/modules/audit/__tests__/agent-rest-audit.middleware.test.ts +113 -113
  472. package/src/modules/audit/__tests__/event-classifier.test.ts +121 -121
  473. package/src/modules/audit/event-classifier.ts +155 -155
  474. package/src/modules/auth/__tests__/account-deactivation.test.ts +1 -1
  475. package/src/modules/auth/__tests__/account-erasure.approval-gate.test.ts +4 -4
  476. package/src/modules/auth/__tests__/account-erasure.participants.test.ts +56 -0
  477. package/src/modules/auth/__tests__/account-switch-lock.pg.test.ts +2 -2
  478. package/src/modules/auth/__tests__/account-switch-lock.test.ts +2 -2
  479. package/src/modules/auth/__tests__/account.routes.test.ts +73 -11
  480. package/src/modules/auth/__tests__/auth.service.test.ts +1 -1
  481. package/src/modules/auth/account-erasure.service.ts +27 -9
  482. package/src/modules/auth/account-hooks.ts +34 -0
  483. package/src/modules/auth/account-switch-lock.ts +2 -2
  484. package/src/modules/auth/account.routes.ts +23 -5
  485. package/src/modules/auth/auth.service.ts +4 -4
  486. package/src/modules/auth/index.ts +1 -0
  487. package/src/modules/database/__tests__/advisory-lock.test.ts +169 -169
  488. package/src/modules/database/__tests__/migrations-unqualified.test.ts +32 -32
  489. package/src/modules/database/core-schema.ts +2 -2
  490. package/src/modules/diff/__tests__/diff.routes.read-gate.test.ts +2 -2
  491. package/src/modules/diff/__tests__/diff.routes.rejectPathsLocked.test.ts +12 -12
  492. package/src/modules/diff/diff.routes.ts +8 -8
  493. package/src/modules/embed/__tests__/embed.service.lock.test.ts +7 -7
  494. package/src/modules/embed/__tests__/embed.service.test.ts +42 -42
  495. package/src/modules/embed/__tests__/embed.tools.test.ts +1 -1
  496. package/src/modules/embed/embed.routes.ts +1 -1
  497. package/src/modules/embed/embed.service.ts +17 -17
  498. package/src/modules/kb-fs/__tests__/branch-name.test.ts +2 -2
  499. package/src/modules/kb-fs/__tests__/locking-filesystem.test.ts +260 -260
  500. package/src/modules/kb-fs/__tests__/move-with-edits.test.ts +34 -34
  501. package/src/modules/kb-fs/__tests__/repo-path.test.ts +8 -8
  502. package/src/modules/kb-fs/branch-name.ts +8 -8
  503. package/src/modules/kb-fs/file-change-notifier.ts +2 -2
  504. package/src/modules/kb-fs/locking-filesystem.ts +30 -30
  505. package/src/modules/kb-fs/repo-path.ts +5 -5
  506. package/src/modules/kb-fs/tmp-ref.ts +3 -3
  507. package/src/modules/kb-sync/__tests__/kb-sync.service.test.ts +36 -36
  508. package/src/modules/kb-sync/index.ts +1 -1
  509. package/src/modules/kb-sync/kb-sync.interface.ts +3 -3
  510. package/src/modules/kb-sync/kb-sync.service.ts +9 -9
  511. package/src/modules/marketplace/__tests__/github-facade.test.ts +1 -1
  512. package/src/modules/marketplace/__tests__/marketplace-git.test.ts +1 -1
  513. package/src/modules/mcp/__tests__/mcp-proxy-helpers.test.ts +4 -2
  514. package/src/modules/mcp/__tests__/mcp.e2e.test.ts +69 -8
  515. package/src/modules/mcp/__tests__/mcp.service.test.ts +91 -13
  516. package/src/modules/mcp/__tests__/read-only-hint.pg.test.ts +194 -0
  517. package/src/modules/mcp/mcp.service.ts +89 -28
  518. package/src/modules/onboarding/__tests__/starter-pack.service.test.ts +55 -55
  519. package/src/modules/onboarding/onboarding.contract.ts +1 -1
  520. package/src/modules/onboarding/onboarding.routes.ts +2 -2
  521. package/src/modules/onboarding/starter-pack.service.ts +6 -6
  522. package/src/modules/plugins/__tests__/bundle-dialect.e2e.test.ts +1 -1
  523. package/src/modules/plugins/__tests__/compile-marketplace.test.ts +1 -1
  524. package/src/modules/plugins/__tests__/join-request-jobs.service.test.ts +43 -43
  525. package/src/modules/plugins/__tests__/join-requests.service.test.ts +19 -19
  526. package/src/modules/plugins/__tests__/join-requests.settlement.test.ts +26 -26
  527. package/src/modules/plugins/__tests__/plugins.routes.test.ts +25 -25
  528. package/src/modules/plugins/join-request-jobs.service.ts +10 -10
  529. package/src/modules/plugins/join-requests.service.ts +4 -4
  530. package/src/modules/plugins/plugin-rename.service.ts +1 -1
  531. package/src/modules/plugins/plugins.routes.ts +9 -9
  532. package/src/modules/secrets-vault/__tests__/db-secrets-vault.managed.test.ts +773 -0
  533. package/src/modules/secrets-vault/__tests__/db-secrets-vault.oauth.test.ts +28 -1
  534. package/src/modules/secrets-vault/__tests__/managed-sign-in.route.test.ts +351 -0
  535. package/src/modules/secrets-vault/db-secrets-vault.service.ts +562 -95
  536. package/src/modules/secrets-vault/index.ts +7 -0
  537. package/src/modules/secrets-vault/managed-sign-in-erasure.ts +41 -0
  538. package/src/modules/secrets-vault/secrets-variable-loader.ts +134 -134
  539. package/src/modules/secrets-vault/secrets-vault.contract.ts +152 -0
  540. package/src/modules/secrets-vault/secrets-vault.routes.ts +157 -10
  541. package/src/modules/settings/__tests__/repository-source.test.ts +1 -1
  542. package/src/modules/settings/__tests__/setup.routes.layout-phase.test.ts +1 -1
  543. package/src/modules/settings/__tests__/setup.routes.managed-phase.test.ts +1 -1
  544. package/src/modules/settings/connection-check.ts +1 -1
  545. package/src/modules/settings/deployment-settings.service.ts +1 -1
  546. package/src/modules/settings/git-root-folders.ts +1 -1
  547. package/src/modules/settings/setup.routes.ts +1 -1
  548. package/src/modules/skills/__tests__/allowed-tools-warn.tools.test.ts +3 -3
  549. package/src/modules/skills/__tests__/branch-skills.tools.test.ts +1 -1
  550. package/src/modules/skills/__tests__/pending-skills.service.test.ts +8 -8
  551. package/src/modules/skills/__tests__/skill-access-requests.routes.test.ts +18 -18
  552. package/src/modules/skills/__tests__/skills.service.test.ts +3 -3
  553. package/src/modules/skills/pending-skills.service.ts +3 -3
  554. package/src/modules/skills/skill-access-requests.routes.ts +7 -7
  555. package/src/modules/tool-helpers/__tests__/agent-roles-write.test.ts +4 -4
  556. package/src/modules/tool-helpers/__tests__/branch-declaration.test.ts +3 -3
  557. package/src/modules/tool-helpers/__tests__/can-write.tools.test.ts +3 -3
  558. package/src/modules/tool-helpers/__tests__/phase4-tools.test.ts +4 -4
  559. package/src/modules/tool-helpers/__tests__/tools-surface.test.ts +3 -3
  560. package/src/modules/tool-helpers/__tests__/validate-token.test.ts +1 -1
  561. package/src/modules/tool-helpers/tool-context.ts +6 -6
  562. package/src/modules/tool-helpers/tool-handler.ts +2 -2
  563. package/src/modules/tool-helpers/tool.contract.ts +4 -4
  564. package/src/modules/tool-manuals/__tests__/pending-tools.service.test.ts +9 -9
  565. package/src/modules/tool-manuals/__tests__/tool-manuals.managed-sign-in.test.ts +89 -0
  566. package/src/modules/tool-manuals/__tests__/tool-manuals.restart.test.ts +1 -1
  567. package/src/modules/tool-manuals/__tests__/tool-manuals.tools.test.ts +36 -1
  568. package/src/modules/tool-manuals/mcp-server-edit.service.ts +1 -1
  569. package/src/modules/tool-manuals/pending-tools.service.ts +3 -3
  570. package/src/modules/tool-manuals/tool-delete.service.ts +1 -1
  571. package/src/modules/tool-manuals/tool-manuals.contract.ts +41 -3
  572. package/src/modules/tool-manuals/tool-manuals.service.ts +53 -5
  573. package/src/modules/tool-manuals/tool-manuals.tools.ts +41 -15
  574. package/src/modules/tool-registry/__tests__/own-tool-schemas.test.ts +4 -4
  575. package/src/modules/tool-registry/__tests__/read-only-hints.test.ts +3 -3
  576. package/src/modules/tool-registry/__tests__/tool-description-length.test.ts +6 -6
  577. package/src/modules/{workflow → version-control}/__tests__/apply-failure.test.ts +54 -54
  578. package/src/modules/{workflow → version-control}/__tests__/event-bus.test.ts +27 -27
  579. package/src/modules/{workflow → version-control}/__tests__/events-delivery.test.ts +37 -37
  580. package/src/modules/{workflow → version-control}/__tests__/file-lock.service.deletion-gate.test.ts +2 -2
  581. package/src/modules/{workflow → version-control}/__tests__/file-lock.service.path-identity.test.ts +8 -8
  582. package/src/modules/{workflow → version-control}/__tests__/merge-announces-tree.test.ts +11 -11
  583. package/src/modules/{workflow → version-control}/__tests__/pending-commits.worker.concurrency.test.ts +9 -9
  584. package/src/modules/{workflow → version-control}/__tests__/pending-commits.worker.test.ts +25 -25
  585. package/src/modules/{workflow → version-control}/__tests__/preserve-roles-yaml.test.ts +42 -42
  586. package/src/modules/version-control/__tests__/public-surface.test.ts +114 -0
  587. package/src/modules/{workflow/__tests__/workflow.routes.folder-proposals.test.ts → version-control/__tests__/version-control.routes.folder-proposals.test.ts} +18 -18
  588. package/src/modules/{workflow/__tests__/workflow.routes.fork-point-file.test.ts → version-control/__tests__/version-control.routes.fork-point-file.test.ts} +19 -19
  589. package/src/modules/{workflow/__tests__/workflow.routes.history-read-gate.test.ts → version-control/__tests__/version-control.routes.history-read-gate.test.ts} +13 -13
  590. package/src/modules/{workflow/__tests__/workflow.routes.lock-path.test.ts → version-control/__tests__/version-control.routes.lock-path.test.ts} +18 -18
  591. package/src/modules/{workflow/__tests__/workflow.routes.open-change-request.test.ts → version-control/__tests__/version-control.routes.open-change-request.test.ts} +7 -7
  592. package/src/modules/{workflow/__tests__/workflow.routes.push-refused.test.ts → version-control/__tests__/version-control.routes.push-refused.test.ts} +14 -14
  593. package/src/modules/{workflow/__tests__/workflow.service.branch-in-use.test.ts → version-control/__tests__/version-control.service.branch-in-use.test.ts} +6 -6
  594. package/src/modules/{workflow/__tests__/workflow.service.commitFileWhileLocked.test.ts → version-control/__tests__/version-control.service.commitFileWhileLocked.test.ts} +14 -14
  595. package/src/modules/{workflow/__tests__/workflow.service.delete-branch.test.ts → version-control/__tests__/version-control.service.delete-branch.test.ts} +14 -14
  596. package/src/modules/{workflow/__tests__/workflow.service.deleted-branch-sweep.test.ts → version-control/__tests__/version-control.service.deleted-branch-sweep.test.ts} +4 -4
  597. package/src/modules/{workflow/__tests__/workflow.service.facade.test.ts → version-control/__tests__/version-control.service.facade.test.ts} +97 -99
  598. package/src/modules/{workflow/__tests__/workflow.service.folder-proposals.test.ts → version-control/__tests__/version-control.service.folder-proposals.test.ts} +7 -7
  599. package/src/modules/{workflow/__tests__/workflow.service.platform-restore.test.ts → version-control/__tests__/version-control.service.platform-restore.test.ts} +6 -6
  600. package/src/modules/{workflow/__tests__/workflow.service.read-gate.test.ts → version-control/__tests__/version-control.service.read-gate.test.ts} +9 -9
  601. package/src/modules/{workflow/__tests__/workflow.service.releaseLock.test.ts → version-control/__tests__/version-control.service.releaseLock.test.ts} +42 -42
  602. package/src/modules/{workflow/__tests__/workflow.service.repository-replaced.test.ts → version-control/__tests__/version-control.service.repository-replaced.test.ts} +4 -4
  603. package/src/modules/{workflow/__tests__/workflow.service.sync.test.ts → version-control/__tests__/version-control.service.sync.test.ts} +17 -17
  604. package/src/modules/{workflow/__tests__/workflow.service.update-change-request.pg.test.ts → version-control/__tests__/version-control.service.update-change-request.pg.test.ts} +6 -6
  605. package/src/modules/{workflow/__tests__/workflow.service.update-change-request.test.ts → version-control/__tests__/version-control.service.update-change-request.test.ts} +11 -11
  606. package/src/modules/{workflow/__tests__/workflow.service.update-from-target.test.ts → version-control/__tests__/version-control.service.update-from-target.test.ts} +22 -22
  607. package/src/modules/{workflow → version-control}/agent-tools/__tests__/change-request-read.tools.test.ts +3 -3
  608. package/src/modules/{workflow → version-control}/agent-tools/__tests__/update-change-request.parity.test.ts +16 -16
  609. package/src/modules/{workflow/agent-tools/__tests__/workflow.tools.test.ts → version-control/agent-tools/__tests__/version-control.tools.test.ts} +9 -9
  610. package/src/modules/{workflow → version-control}/agent-tools/change-request-read.tools.ts +2 -2
  611. package/src/modules/{workflow/agent-tools/workflow.tools.ts → version-control/agent-tools/version-control.tools.ts} +30 -30
  612. package/src/modules/{workflow → version-control}/change-request-hooks.ts +1 -1
  613. package/src/modules/{workflow/review-workflow → version-control/change-request-review}/__tests__/approval-states.test.ts +5 -5
  614. package/src/modules/{workflow/review-workflow → version-control/change-request-review}/__tests__/cancel-pr.test.ts +8 -8
  615. package/src/modules/{workflow/review-workflow → version-control/change-request-review}/__tests__/carry-approvals-forward.test.ts +6 -6
  616. package/src/modules/{workflow/review-workflow → version-control/change-request-review}/__tests__/erase-approver.test.ts +5 -5
  617. package/src/modules/{workflow/review-workflow → version-control/change-request-review}/__tests__/merge-gate.test.ts +3 -3
  618. package/src/modules/{workflow/review-workflow → version-control/change-request-review}/__tests__/merge-records-own-commit.test.ts +3 -3
  619. package/src/modules/{workflow/review-workflow/review-workflow.interface.ts → version-control/change-request-review/change-request-review.interface.ts} +1 -1
  620. package/src/modules/{workflow/review-workflow/review-workflow.service.ts → version-control/change-request-review/change-request-review.service.ts} +28 -28
  621. package/src/modules/{workflow → version-control}/event-bus.ts +14 -14
  622. package/src/modules/{workflow → version-control}/events-delivery.ts +11 -11
  623. package/src/modules/{workflow → version-control}/events.routes.ts +5 -5
  624. package/src/modules/{workflow → version-control}/file-lock.service.ts +6 -6
  625. package/src/modules/{workflow → version-control}/git/__tests__/git-test-helpers.ts +3 -3
  626. package/src/modules/{workflow → version-control}/git/__tests__/git.service.accessGating.test.ts +5 -5
  627. package/src/modules/{workflow → version-control}/git/__tests__/git.service.appliedChange.test.ts +4 -4
  628. package/src/modules/{workflow → version-control}/git/__tests__/git.service.changedFilesForPr.test.ts +16 -16
  629. package/src/modules/{workflow → version-control}/git/__tests__/git.service.changedPathsMemo.test.ts +2 -2
  630. package/src/modules/{workflow → version-control}/git/__tests__/git.service.commitChanges.test.ts +3 -3
  631. package/src/modules/{workflow → version-control}/git/__tests__/git.service.commitFile.strayPath.test.ts +10 -10
  632. package/src/modules/{workflow → version-control}/git/__tests__/git.service.commitFile.test.ts +3 -3
  633. package/src/modules/{workflow → version-control}/git/__tests__/git.service.createBranch.test.ts +3 -3
  634. package/src/modules/{workflow → version-control}/git/__tests__/git.service.deleteBranch.test.ts +7 -7
  635. package/src/modules/{workflow → version-control}/git/__tests__/git.service.diffFileAtCommit.test.ts +9 -9
  636. package/src/modules/{workflow → version-control}/git/__tests__/git.service.diffFileBetweenBranches.test.ts +23 -23
  637. package/src/modules/{workflow → version-control}/git/__tests__/git.service.fileBytesAtCommit.test.ts +7 -7
  638. package/src/modules/{workflow → version-control}/git/__tests__/git.service.fileContentsAtCommit.test.ts +3 -3
  639. package/src/modules/{workflow → version-control}/git/__tests__/git.service.forkPoint.test.ts +2 -2
  640. package/src/modules/{workflow → version-control}/git/__tests__/git.service.history-guards.test.ts +2 -2
  641. package/src/modules/{workflow → version-control}/git/__tests__/git.service.list-branches.test.ts +12 -12
  642. package/src/modules/{workflow → version-control}/git/__tests__/git.service.listTrackedFiles.test.ts +2 -2
  643. package/src/modules/{workflow → version-control}/git/__tests__/git.service.logForFile.test.ts +6 -6
  644. package/src/modules/{workflow → version-control}/git/__tests__/git.service.mergeChangeRequest.test.ts +20 -20
  645. package/src/modules/{workflow → version-control}/git/__tests__/git.service.mergeIntoBranch.test.ts +16 -16
  646. package/src/modules/{workflow → version-control}/git/__tests__/git.service.pendingChanges.test.ts +2 -2
  647. package/src/modules/{workflow → version-control}/git/__tests__/git.service.postMergePull.test.ts +5 -5
  648. package/src/modules/{workflow → version-control}/git/__tests__/git.service.prFetchFailure.test.ts +2 -2
  649. package/src/modules/{workflow → version-control}/git/__tests__/git.service.pull.test.ts +12 -12
  650. package/src/modules/{workflow → version-control}/git/__tests__/git.service.readFileAtRef.test.ts +3 -3
  651. package/src/modules/{workflow → version-control}/git/__tests__/git.service.revertPathsAndPush.test.ts +2 -2
  652. package/src/modules/{workflow → version-control}/git/__tests__/git.service.status.test.ts +4 -4
  653. package/src/modules/{workflow → version-control}/git/__tests__/git.service.syncFromRemote.test.ts +8 -8
  654. package/src/modules/{workflow → version-control}/git/__tests__/git.service.worktrees.test.ts +4 -4
  655. package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.list-fetch.test.ts +2 -2
  656. package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.test.ts +6 -6
  657. package/src/modules/{workflow → version-control}/git/git.service.ts +57 -57
  658. package/src/modules/{workflow → version-control}/git/node-git-runner.ts +1 -1
  659. package/src/modules/{workflow → version-control}/git/pull-request.service.ts +12 -12
  660. package/src/modules/{workflow → version-control}/index.ts +6 -5
  661. package/src/modules/{workflow → version-control}/pending-commits.service.ts +2 -2
  662. package/src/modules/{workflow → version-control}/pending-commits.worker.ts +8 -8
  663. package/src/modules/{workflow → version-control}/read-on-branch.ts +2 -2
  664. package/src/modules/{workflow/workflow-hooks.ts → version-control/version-control-hooks.ts} +3 -3
  665. package/src/modules/{workflow/workflow.routes.ts → version-control/version-control.routes.ts} +64 -63
  666. package/src/modules/{workflow/workflow.service.ts → version-control/version-control.service.ts} +92 -97
  667. package/src/modules/workspace/__tests__/agent-access.gate.test.ts +8 -8
  668. package/src/modules/workspace/__tests__/agent-downloads.test.ts +13 -16
  669. package/src/modules/workspace/__tests__/agent-uploads.test.ts +11 -12
  670. package/src/modules/workspace/__tests__/escape-sequences.routes.test.ts +11 -16
  671. package/src/modules/workspace/__tests__/file-stat-access.test.ts +3 -3
  672. package/src/modules/workspace/__tests__/git-internals.security.test.ts +27 -27
  673. package/src/modules/workspace/__tests__/kb-repository.test.ts +1 -1
  674. package/src/modules/workspace/__tests__/rest-tool-arguments.test.ts +3 -3
  675. package/src/modules/workspace/__tests__/start-session.default-branch.test.ts +152 -0
  676. package/src/modules/workspace/__tests__/workspace-paths-inside-the-repo.test.ts +6 -6
  677. package/src/modules/workspace/__tests__/workspace-tmp.tools.test.ts +13 -14
  678. package/src/modules/workspace/__tests__/workspace.routes.at-ref.test.ts +6 -6
  679. package/src/modules/workspace/__tests__/workspace.routes.branch-errors.test.ts +4 -4
  680. package/src/modules/workspace/__tests__/workspace.routes.create-grant.test.ts +6 -6
  681. package/src/modules/workspace/__tests__/workspace.routes.delete.test.ts +8 -8
  682. package/src/modules/workspace/__tests__/workspace.routes.download-implies-read.test.ts +4 -4
  683. package/src/modules/workspace/__tests__/workspace.routes.download.test.ts +6 -6
  684. package/src/modules/workspace/__tests__/workspace.routes.file-writes.test.ts +6 -6
  685. package/src/modules/workspace/__tests__/workspace.routes.folder-zip-access.test.ts +4 -4
  686. package/src/modules/workspace/__tests__/workspace.routes.folders.test.ts +6 -6
  687. package/src/modules/workspace/__tests__/workspace.routes.move-platform-files.test.ts +7 -7
  688. package/src/modules/workspace/__tests__/workspace.routes.read-gate.test.ts +13 -13
  689. package/src/modules/workspace/__tests__/workspace.service.any-workspace-credentials.test.ts +1 -1
  690. package/src/modules/workspace/__tests__/workspace.service.replaced-repository.test.ts +1 -1
  691. package/src/modules/workspace/__tests__/workspace.service.worktrees.test.ts +1 -1
  692. package/src/modules/workspace/__tests__/workspace.tools.agents-file.test.ts +5 -5
  693. package/src/modules/workspace/__tests__/workspace.tools.branch-errors.test.ts +5 -5
  694. package/src/modules/workspace/__tests__/workspace.tools.test.ts +27 -27
  695. package/src/modules/workspace/agent-access.gate.ts +5 -5
  696. package/src/modules/workspace/git-internals.middleware.ts +2 -2
  697. package/src/modules/workspace/kb-repository.ts +1 -1
  698. package/src/modules/workspace/startup/__tests__/kb-startup-runner.degraded.test.ts +1 -1
  699. package/src/modules/workspace/startup/__tests__/kb-startup-runner.test.ts +1 -1
  700. package/src/modules/workspace/startup/__tests__/kb-startup-runner.worktrees.test.ts +1 -1
  701. package/src/modules/workspace/startup/kb-git.ts +1 -1
  702. package/src/modules/workspace/startup/steps/__tests__/steps.test.ts +94 -70
  703. package/src/modules/workspace/startup/steps/seed-tree.ts +4 -5
  704. package/src/modules/workspace/startup/steps/template-files.step.ts +4 -5
  705. package/src/modules/workspace/startup/steps/template-source.ts +21 -6
  706. package/src/modules/workspace/workspace-tmp.ts +4 -4
  707. package/src/modules/workspace/workspace.routes.ts +26 -26
  708. package/src/modules/workspace/workspace.service.ts +11 -11
  709. package/src/modules/workspace/workspace.tools.ts +17 -10
  710. package/src/shared/__tests__/canonical-file-identity.test.ts +5 -5
  711. package/src/shared/__tests__/http-errors.test.ts +4 -4
  712. package/src/shared/canonical-file-identity.ts +5 -5
  713. package/src/shared/domain-errors.ts +44 -44
  714. package/src/shared/git.contract.ts +1 -1
  715. package/src/shared/http-errors.ts +3 -3
  716. package/src/shared/kb-context.ts +130 -130
  717. package/src/shared/pending-proposals.ts +4 -4
  718. package/src/tenancy/__tests__/tenant-host.test.ts +372 -372
  719. package/src/tenancy/__tests__/tenant-runtime.test.ts +221 -221
  720. package/src/tenancy/__tests__/tenant-secrets.test.ts +35 -35
  721. package/src/tenancy/index.ts +35 -35
  722. package/src/tenancy/static-tenant-source.ts +1 -1
  723. package/src/tenancy/tenant-host.ts +261 -261
  724. package/src/tenancy/tenant-runtime.ts +208 -208
  725. package/src/tenancy/tenant-source.contract.ts +59 -59
  726. package/dist/modules/workflow/agent-tools/change-request-read-shape.d.ts.map +0 -1
  727. package/dist/modules/workflow/agent-tools/change-request-read-shape.js.map +0 -1
  728. package/dist/modules/workflow/agent-tools/change-request-read.tools.d.ts.map +0 -1
  729. package/dist/modules/workflow/agent-tools/change-request-read.tools.js.map +0 -1
  730. package/dist/modules/workflow/agent-tools/change-request-summary.d.ts.map +0 -1
  731. package/dist/modules/workflow/agent-tools/change-request-summary.js.map +0 -1
  732. package/dist/modules/workflow/agent-tools/workflow.tools.d.ts.map +0 -1
  733. package/dist/modules/workflow/agent-tools/workflow.tools.js.map +0 -1
  734. package/dist/modules/workflow/change-request-hooks.d.ts.map +0 -1
  735. package/dist/modules/workflow/change-request-hooks.js.map +0 -1
  736. package/dist/modules/workflow/event-bus.d.ts.map +0 -1
  737. package/dist/modules/workflow/event-bus.js.map +0 -1
  738. package/dist/modules/workflow/events-delivery.d.ts.map +0 -1
  739. package/dist/modules/workflow/events-delivery.js.map +0 -1
  740. package/dist/modules/workflow/events.routes.d.ts.map +0 -1
  741. package/dist/modules/workflow/events.routes.js.map +0 -1
  742. package/dist/modules/workflow/file-lock.service.d.ts.map +0 -1
  743. package/dist/modules/workflow/file-lock.service.js.map +0 -1
  744. package/dist/modules/workflow/git/change-request-link.d.ts.map +0 -1
  745. package/dist/modules/workflow/git/change-request-link.js.map +0 -1
  746. package/dist/modules/workflow/git/git-version.d.ts.map +0 -1
  747. package/dist/modules/workflow/git/git-version.js.map +0 -1
  748. package/dist/modules/workflow/git/git.service.d.ts.map +0 -1
  749. package/dist/modules/workflow/git/git.service.js.map +0 -1
  750. package/dist/modules/workflow/git/merge-commit.d.ts.map +0 -1
  751. package/dist/modules/workflow/git/merge-commit.js.map +0 -1
  752. package/dist/modules/workflow/git/node-git-runner.d.ts.map +0 -1
  753. package/dist/modules/workflow/git/node-git-runner.js.map +0 -1
  754. package/dist/modules/workflow/git/pull-request.service.d.ts.map +0 -1
  755. package/dist/modules/workflow/git/pull-request.service.js.map +0 -1
  756. package/dist/modules/workflow/index.d.ts.map +0 -1
  757. package/dist/modules/workflow/index.js.map +0 -1
  758. package/dist/modules/workflow/pending-commits.service.d.ts.map +0 -1
  759. package/dist/modules/workflow/pending-commits.service.js.map +0 -1
  760. package/dist/modules/workflow/pending-commits.worker.d.ts.map +0 -1
  761. package/dist/modules/workflow/pending-commits.worker.js.map +0 -1
  762. package/dist/modules/workflow/read-on-branch.d.ts.map +0 -1
  763. package/dist/modules/workflow/read-on-branch.js.map +0 -1
  764. package/dist/modules/workflow/recovery-bot.d.ts.map +0 -1
  765. package/dist/modules/workflow/recovery-bot.js.map +0 -1
  766. package/dist/modules/workflow/review-workflow/approval-lock.d.ts.map +0 -1
  767. package/dist/modules/workflow/review-workflow/approval-lock.js.map +0 -1
  768. package/dist/modules/workflow/review-workflow/review-workflow.interface.d.ts.map +0 -1
  769. package/dist/modules/workflow/review-workflow/review-workflow.interface.js +0 -2
  770. package/dist/modules/workflow/review-workflow/review-workflow.interface.js.map +0 -1
  771. package/dist/modules/workflow/review-workflow/review-workflow.service.d.ts.map +0 -1
  772. package/dist/modules/workflow/review-workflow/review-workflow.service.js.map +0 -1
  773. package/dist/modules/workflow/sanitize-error.d.ts.map +0 -1
  774. package/dist/modules/workflow/sanitize-error.js.map +0 -1
  775. package/dist/modules/workflow/workflow-hooks.d.ts.map +0 -1
  776. package/dist/modules/workflow/workflow-hooks.js.map +0 -1
  777. package/dist/modules/workflow/workflow.routes.d.ts.map +0 -1
  778. package/dist/modules/workflow/workflow.routes.js.map +0 -1
  779. package/dist/modules/workflow/workflow.service.d.ts.map +0 -1
  780. package/dist/modules/workflow/workflow.service.js.map +0 -1
  781. package/src/modules/mcp/__tests__/read-only-hint.e2e.test.ts +0 -213
  782. /package/dist/modules/{workflow → version-control}/agent-tools/change-request-read-shape.d.ts +0 -0
  783. /package/dist/modules/{workflow → version-control}/agent-tools/change-request-read-shape.js +0 -0
  784. /package/dist/modules/{workflow → version-control}/agent-tools/change-request-read.tools.d.ts +0 -0
  785. /package/dist/modules/{workflow → version-control}/agent-tools/change-request-summary.d.ts +0 -0
  786. /package/dist/modules/{workflow → version-control}/agent-tools/change-request-summary.js +0 -0
  787. /package/dist/modules/{workflow → version-control}/change-request-hooks.js +0 -0
  788. /package/dist/modules/{workflow/review-workflow → version-control/change-request-review}/approval-lock.d.ts +0 -0
  789. /package/dist/modules/{workflow/review-workflow → version-control/change-request-review}/approval-lock.js +0 -0
  790. /package/dist/modules/{workflow → version-control}/events-delivery.js +0 -0
  791. /package/dist/modules/{workflow → version-control}/events.routes.js +0 -0
  792. /package/dist/modules/{workflow → version-control}/git/change-request-link.d.ts +0 -0
  793. /package/dist/modules/{workflow → version-control}/git/change-request-link.js +0 -0
  794. /package/dist/modules/{workflow → version-control}/git/git-version.d.ts +0 -0
  795. /package/dist/modules/{workflow → version-control}/git/git-version.js +0 -0
  796. /package/dist/modules/{workflow → version-control}/git/merge-commit.d.ts +0 -0
  797. /package/dist/modules/{workflow → version-control}/git/merge-commit.js +0 -0
  798. /package/dist/modules/{workflow → version-control}/git/node-git-runner.d.ts +0 -0
  799. /package/dist/modules/{workflow → version-control}/recovery-bot.d.ts +0 -0
  800. /package/dist/modules/{workflow → version-control}/recovery-bot.js +0 -0
  801. /package/dist/modules/{workflow → version-control}/sanitize-error.d.ts +0 -0
  802. /package/dist/modules/{workflow → version-control}/sanitize-error.js +0 -0
  803. /package/src/modules/{workflow → version-control}/__tests__/change-request-hooks.test.ts +0 -0
  804. /package/src/modules/{workflow → version-control}/__tests__/fake-file-lock-db.ts +0 -0
  805. /package/src/modules/{workflow → version-control}/__tests__/pending-commits.canonical.test.ts +0 -0
  806. /package/src/modules/{workflow → version-control}/__tests__/pending-commits.enqueue-if-absent.test.ts +0 -0
  807. /package/src/modules/{workflow → version-control}/__tests__/pending-commits.repository-replaced.test.ts +0 -0
  808. /package/src/modules/{workflow → version-control}/__tests__/sanitize-error.test.ts +0 -0
  809. /package/src/modules/{workflow → version-control}/agent-tools/__tests__/change-request-read-shape.test.ts +0 -0
  810. /package/src/modules/{workflow → version-control}/agent-tools/change-request-read-shape.ts +0 -0
  811. /package/src/modules/{workflow → version-control}/agent-tools/change-request-summary.ts +0 -0
  812. /package/src/modules/{workflow/review-workflow → version-control/change-request-review}/approval-lock.ts +0 -0
  813. /package/src/modules/{workflow → version-control}/git/__tests__/branchAuthor.test.ts +0 -0
  814. /package/src/modules/{workflow → version-control}/git/__tests__/change-request-link.test.ts +0 -0
  815. /package/src/modules/{workflow → version-control}/git/__tests__/git-version.failure.test.ts +0 -0
  816. /package/src/modules/{workflow → version-control}/git/__tests__/git-version.test.ts +0 -0
  817. /package/src/modules/{workflow → version-control}/git/__tests__/node-git-runner.test.ts +0 -0
  818. /package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.getPrDetail.test.ts +0 -0
  819. /package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.placeholder.test.ts +0 -0
  820. /package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.viewer-can-cancel.test.ts +0 -0
  821. /package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.viewer-can-delete.test.ts +0 -0
  822. /package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.viewer-can-update.test.ts +0 -0
  823. /package/src/modules/{workflow → version-control}/git/change-request-link.ts +0 -0
  824. /package/src/modules/{workflow → version-control}/git/git-version.ts +0 -0
  825. /package/src/modules/{workflow → version-control}/git/merge-commit.ts +0 -0
  826. /package/src/modules/{workflow → version-control}/recovery-bot.ts +0 -0
  827. /package/src/modules/{workflow → version-control}/sanitize-error.ts +0 -0
@@ -53,7 +53,7 @@ function heldCommits() {
53
53
  const open = new Map<string, () => void>();
54
54
  let inFlight = 0;
55
55
  let peak = 0;
56
- const workflow = {
56
+ const versionControl = {
57
57
  runPendingCommit: vi.fn(
58
58
  (workspaceId: string) =>
59
59
  new Promise<void>((resolve) => {
@@ -67,7 +67,7 @@ function heldCommits() {
67
67
  ),
68
68
  };
69
69
  return {
70
- workflow,
70
+ versionControl,
71
71
  release: (workspaceId: string) => open.get(workspaceId)?.(),
72
72
  releaseAll: () => [...open.keys()].forEach((id) => open.get(id)?.()),
73
73
  get inFlight() {
@@ -81,12 +81,12 @@ function heldCommits() {
81
81
 
82
82
  function makeWorker(
83
83
  service: PendingCommitsService,
84
- workflow: { runPendingCommit: ReturnType<typeof vi.fn> },
84
+ versionControl: { runPendingCommit: ReturnType<typeof vi.fn> },
85
85
  workspaceIds: string[],
86
86
  ): PendingCommitsWorker {
87
87
  const worker = new PendingCommitsWorker({
88
88
  service,
89
- workflow: workflow as never,
89
+ versionControl: versionControl as never,
90
90
  recoveryAgent: { run: vi.fn() } as unknown as RecoveryAgentRunner,
91
91
  feedback: { send: vi.fn() } as unknown as ISystemNoticeSink,
92
92
  workspaces: { knownWorkspaces: () => workspaceIds.map((id) => ({ id, branch: 'feat/x' })) },
@@ -104,7 +104,7 @@ describe('PendingCommitsWorker.drainOnce across workspaces', () => {
104
104
  it('a workspace whose remote has stalled does not delay another workspace', async () => {
105
105
  const service = queueWith([row('ws-stalled'), row('ws-fine')]);
106
106
  const commits = heldCommits();
107
- const worker = makeWorker(service, commits.workflow, ['ws-stalled', 'ws-fine']);
107
+ const worker = makeWorker(service, commits.versionControl, ['ws-stalled', 'ws-fine']);
108
108
 
109
109
  const pass = worker.drainOnce();
110
110
  await settle();
@@ -127,7 +127,7 @@ describe('PendingCommitsWorker.drainOnce across workspaces', () => {
127
127
  // encoded one. They are one workspace, one clone, and one drain.
128
128
  const service = queueWith([]);
129
129
  const commits = heldCommits();
130
- const worker = makeWorker(service, commits.workflow, ['alice/feature', 'alice%2Ffeature']);
130
+ const worker = makeWorker(service, commits.versionControl, ['alice/feature', 'alice%2Ffeature']);
131
131
 
132
132
  await worker.drainOnce();
133
133
 
@@ -139,7 +139,7 @@ describe('PendingCommitsWorker.drainOnce across workspaces', () => {
139
139
  const ids = ['ws-1', 'ws-2', 'ws-3', 'ws-4', 'ws-5', 'ws-6'];
140
140
  const service = queueWith(ids.map((id) => row(id)));
141
141
  const commits = heldCommits();
142
- const worker = makeWorker(service, commits.workflow, ids);
142
+ const worker = makeWorker(service, commits.versionControl, ids);
143
143
 
144
144
  const pass = worker.drainOnce();
145
145
  await settle();
@@ -169,7 +169,7 @@ describe('PendingCommitsWorker.drainOnce across workspaces', () => {
169
169
  (service.claimNext as ReturnType<typeof vi.fn>).mockImplementation(async () => rows.shift() ?? null);
170
170
  (service.hasReadyRow as ReturnType<typeof vi.fn>).mockImplementation(async () => rows.length > 0);
171
171
  const commits = heldCommits();
172
- const worker = makeWorker(service, commits.workflow, ['ws-1']);
172
+ const worker = makeWorker(service, commits.versionControl, ['ws-1']);
173
173
 
174
174
  const pass = worker.drainOnce();
175
175
  await settle();
@@ -177,7 +177,7 @@ describe('PendingCommitsWorker.drainOnce across workspaces', () => {
177
177
 
178
178
  commits.release('ws-1');
179
179
  await settle();
180
- expect(commits.workflow.runPendingCommit).toHaveBeenCalledTimes(2);
180
+ expect(commits.versionControl.runPendingCommit).toHaveBeenCalledTimes(2);
181
181
 
182
182
  commits.release('ws-1');
183
183
  await pass;
@@ -6,7 +6,7 @@ import {
6
6
  N_TRANSIENT,
7
7
  PendingCommitsWorker,
8
8
  type RecoveryAgentRunner,
9
- type WorkflowCommitDriver,
9
+ type VersionControlCommitDriver,
10
10
  type WorkspaceProvider,
11
11
  } from '../pending-commits.worker.js';
12
12
  import type {
@@ -16,7 +16,7 @@ import type {
16
16
  import { assertInsideRepo } from '../../kb-fs/repo-path.js';
17
17
 
18
18
  /**
19
- * Unit tests for the queue-draining worker. The service + workflow layers
19
+ * Unit tests for the queue-draining worker. The service + version-control layers
20
20
  * have their own tests; here we focus on the *decision tree* the worker
21
21
  * applies per claimed row:
22
22
  *
@@ -88,7 +88,7 @@ function makeFeedback(): ISystemNoticeSink {
88
88
 
89
89
  describe('PendingCommitsWorker.drainOnce', () => {
90
90
  let service: PendingCommitsService;
91
- let workflow: WorkflowCommitDriver & {
91
+ let versionControl: VersionControlCommitDriver & {
92
92
  runPendingCommit: ReturnType<typeof vi.fn>;
93
93
  };
94
94
  let recoveryAgent: RecoveryAgentRunner & { run: ReturnType<typeof vi.fn> };
@@ -97,12 +97,12 @@ describe('PendingCommitsWorker.drainOnce', () => {
97
97
 
98
98
  beforeEach(() => {
99
99
  service = makeService();
100
- workflow = { runPendingCommit: vi.fn() } as never;
100
+ versionControl = { runPendingCommit: vi.fn() } as never;
101
101
  recoveryAgent = { run: vi.fn() } as never;
102
102
  feedback = makeFeedback() as never;
103
103
  worker = new PendingCommitsWorker({
104
104
  service,
105
- workflow,
105
+ versionControl,
106
106
  recoveryAgent,
107
107
  feedback,
108
108
  workspaces: makeWorkspaces(),
@@ -118,12 +118,12 @@ describe('PendingCommitsWorker.drainOnce', () => {
118
118
  it('happy path: claims row, runs commit, marks succeeded — no other branches taken', async () => {
119
119
  const row = makeRow();
120
120
  (service.claimNext as ReturnType<typeof vi.fn>).mockResolvedValueOnce(row);
121
- workflow.runPendingCommit.mockResolvedValueOnce(undefined);
121
+ versionControl.runPendingCommit.mockResolvedValueOnce(undefined);
122
122
 
123
123
  await worker.drainOnce();
124
124
 
125
125
  expect(service.claimNext).toHaveBeenCalledWith('ws-1', expect.any(Date));
126
- expect(workflow.runPendingCommit).toHaveBeenCalledWith(
126
+ expect(versionControl.runPendingCommit).toHaveBeenCalledWith(
127
127
  'ws-1',
128
128
  'feat/x',
129
129
  'Foo.md',
@@ -147,7 +147,7 @@ describe('PendingCommitsWorker.drainOnce', () => {
147
147
  */
148
148
  it("the commit author's id carries no address, and is the same for one person", async () => {
149
149
  const seen: string[] = [];
150
- workflow.runPendingCommit.mockImplementation(async (_ws: string, _b: string, _p: string, user: AuthUser) => {
150
+ versionControl.runPendingCommit.mockImplementation(async (_ws: string, _b: string, _p: string, user: AuthUser) => {
151
151
  seen.push(user.id);
152
152
  });
153
153
  for (const authorEmail of ['alice@example.com', 'Alice@Example.com ', 'bob@example.com']) {
@@ -168,7 +168,7 @@ describe('PendingCommitsWorker.drainOnce', () => {
168
168
 
169
169
  await worker.drainOnce();
170
170
 
171
- expect(workflow.runPendingCommit).not.toHaveBeenCalled();
171
+ expect(versionControl.runPendingCommit).not.toHaveBeenCalled();
172
172
  expect(service.markSucceeded).not.toHaveBeenCalled();
173
173
  });
174
174
 
@@ -176,7 +176,7 @@ describe('PendingCommitsWorker.drainOnce', () => {
176
176
  // attempts=0 → next attempt would be 1, which is < N_TRANSIENT (3).
177
177
  const row = makeRow({ attempts: 0 });
178
178
  (service.claimNext as ReturnType<typeof vi.fn>).mockResolvedValueOnce(row);
179
- workflow.runPendingCommit.mockRejectedValueOnce(new Error('transient git error'));
179
+ versionControl.runPendingCommit.mockRejectedValueOnce(new Error('transient git error'));
180
180
 
181
181
  await worker.drainOnce();
182
182
 
@@ -192,7 +192,7 @@ describe('PendingCommitsWorker.drainOnce', () => {
192
192
  // crossing the budget. recoveryAgentRuns=0 → still within recovery budget.
193
193
  const row = makeRow({ attempts: N_TRANSIENT - 1, recoveryAgentRuns: 0 });
194
194
  (service.claimNext as ReturnType<typeof vi.fn>).mockResolvedValueOnce(row);
195
- workflow.runPendingCommit.mockRejectedValueOnce(new Error('cannot push: needs human'));
195
+ versionControl.runPendingCommit.mockRejectedValueOnce(new Error('cannot push: needs human'));
196
196
  recoveryAgent.run.mockResolvedValueOnce(undefined);
197
197
 
198
198
  await worker.drainOnce();
@@ -213,7 +213,7 @@ describe('PendingCommitsWorker.drainOnce', () => {
213
213
  it('a recovery-agent crash does not abort the worker — the row stays pending for the next pass', async () => {
214
214
  const row = makeRow({ attempts: N_TRANSIENT - 1, recoveryAgentRuns: 0 });
215
215
  (service.claimNext as ReturnType<typeof vi.fn>).mockResolvedValueOnce(row);
216
- workflow.runPendingCommit.mockRejectedValueOnce(new Error('cannot push'));
216
+ versionControl.runPendingCommit.mockRejectedValueOnce(new Error('cannot push'));
217
217
  recoveryAgent.run.mockRejectedValueOnce(new Error('codemode wiring broken'));
218
218
 
219
219
  // No throw — the worker swallows the agent crash and moves on.
@@ -233,7 +233,7 @@ describe('PendingCommitsWorker.drainOnce', () => {
233
233
  recoveryAgentRuns: N_RECOVERY,
234
234
  });
235
235
  (service.claimNext as ReturnType<typeof vi.fn>).mockResolvedValueOnce(row);
236
- workflow.runPendingCommit.mockRejectedValueOnce(new Error('unrecoverable'));
236
+ versionControl.runPendingCommit.mockRejectedValueOnce(new Error('unrecoverable'));
237
237
 
238
238
  await worker.drainOnce();
239
239
 
@@ -265,7 +265,7 @@ describe('PendingCommitsWorker.drainOnce', () => {
265
265
  (service.claimNext as ReturnType<typeof vi.fn>).mockResolvedValueOnce(row);
266
266
  // The commit layer's own refusal, built by its producer so the shape the
267
267
  // worker switches on cannot drift from what is actually thrown.
268
- workflow.runPendingCommit.mockRejectedValueOnce(captureRefusal('KnowledgeBase/Reviews/PR-12.html'));
268
+ versionControl.runPendingCommit.mockRejectedValueOnce(captureRefusal('KnowledgeBase/Reviews/PR-12.html'));
269
269
 
270
270
  await worker.drainOnce();
271
271
 
@@ -293,7 +293,7 @@ describe('PendingCommitsWorker.drainOnce', () => {
293
293
  it('a feedback-sink failure does not throw — the row stays needs_attention regardless', async () => {
294
294
  const row = makeRow({ attempts: N_TRANSIENT - 1, recoveryAgentRuns: N_RECOVERY });
295
295
  (service.claimNext as ReturnType<typeof vi.fn>).mockResolvedValueOnce(row);
296
- workflow.runPendingCommit.mockRejectedValueOnce(new Error('unrecoverable'));
296
+ versionControl.runPendingCommit.mockRejectedValueOnce(new Error('unrecoverable'));
297
297
  (feedback.send as ReturnType<typeof vi.fn>).mockRejectedValueOnce(new Error('feedback DB down'));
298
298
 
299
299
  await expect(worker.drainOnce()).resolves.toBeUndefined();
@@ -324,7 +324,7 @@ describe('PendingCommitsWorker.drainOnce', () => {
324
324
  it('commits every queued row in ONE pass', async () => {
325
325
  queue(12);
326
326
  await worker.drainOnce();
327
- expect(workflow.runPendingCommit).toHaveBeenCalledTimes(12);
327
+ expect(versionControl.runPendingCommit).toHaveBeenCalledTimes(12);
328
328
  expect(service.markSucceeded).toHaveBeenCalledTimes(12);
329
329
  });
330
330
 
@@ -333,7 +333,7 @@ describe('PendingCommitsWorker.drainOnce', () => {
333
333
  // so per-file runs cost a full parse each and all say the same thing.
334
334
  queue(5);
335
335
  await worker.drainOnce();
336
- const skipped = workflow.runPendingCommit.mock.calls.map((c) => c[4]?.skipValidation);
336
+ const skipped = versionControl.runPendingCommit.mock.calls.map((c) => c[4]?.skipValidation);
337
337
  expect(skipped).toEqual([true, true, true, true, false]);
338
338
  });
339
339
 
@@ -342,16 +342,16 @@ describe('PendingCommitsWorker.drainOnce', () => {
342
342
  // would park every other user's save behind a huge migration.
343
343
  queue(200);
344
344
  await worker.drainOnce();
345
- expect(workflow.runPendingCommit).toHaveBeenCalledTimes(50);
345
+ expect(versionControl.runPendingCommit).toHaveBeenCalledTimes(50);
346
346
  });
347
347
 
348
348
  it('gives up the pass the moment stop() lands mid-burst', async () => {
349
349
  queue(12);
350
- workflow.runPendingCommit.mockImplementation(async () => {
350
+ versionControl.runPendingCommit.mockImplementation(async () => {
351
351
  (worker as unknown as { running: boolean }).running = false;
352
352
  });
353
353
  await worker.drainOnce();
354
- expect(workflow.runPendingCommit).toHaveBeenCalledTimes(1);
354
+ expect(versionControl.runPendingCommit).toHaveBeenCalledTimes(1);
355
355
  });
356
356
 
357
357
  it('carries on after a transient failure and ends the pass when nothing is ready', async () => {
@@ -370,7 +370,7 @@ describe('PendingCommitsWorker.drainOnce', () => {
370
370
  .mockResolvedValueOnce(makeRow({ id: 'bad' }))
371
371
  .mockResolvedValueOnce(makeRow({ id: 'good' }))
372
372
  .mockResolvedValue(null);
373
- workflow.runPendingCommit
373
+ versionControl.runPendingCommit
374
374
  .mockRejectedValueOnce(new Error('push rejected'))
375
375
  .mockResolvedValueOnce(undefined);
376
376
 
@@ -378,7 +378,7 @@ describe('PendingCommitsWorker.drainOnce', () => {
378
378
 
379
379
  expect(service.markTransientFailure).toHaveBeenCalledTimes(1);
380
380
  expect(service.markSucceeded).toHaveBeenCalledTimes(1);
381
- expect(workflow.runPendingCommit).toHaveBeenCalledTimes(2);
381
+ expect(versionControl.runPendingCommit).toHaveBeenCalledTimes(2);
382
382
  });
383
383
 
384
384
  it('validates the final slot when the burst hits its ceiling', async () => {
@@ -387,7 +387,7 @@ describe('PendingCommitsWorker.drainOnce', () => {
387
387
  // backlog on an unvalidated commit.
388
388
  queue(200);
389
389
  await worker.drainOnce();
390
- const calls = workflow.runPendingCommit.mock.calls;
390
+ const calls = versionControl.runPendingCommit.mock.calls;
391
391
  expect(calls).toHaveLength(50);
392
392
  expect(calls[49]?.[4]?.skipValidation).toBe(false);
393
393
  expect(calls[48]?.[4]?.skipValidation).toBe(true);
@@ -411,7 +411,7 @@ describe('PendingCommitsWorker.drainOnce', () => {
411
411
  await expect(worker.drainOnce()).resolves.toBeUndefined();
412
412
 
413
413
  expect(service.markSucceeded).toHaveBeenCalledTimes(1);
414
- expect(workflow.runPendingCommit.mock.calls[0]?.[4]?.skipValidation).toBe(false);
414
+ expect(versionControl.runPendingCommit.mock.calls[0]?.[4]?.skipValidation).toBe(false);
415
415
  });
416
416
  });
417
417
  });
@@ -420,7 +420,7 @@ describe('PendingCommitsWorker lifecycle', () => {
420
420
  it('start() is idempotent; stop() awaits the in-flight pass without throwing', async () => {
421
421
  const worker = new PendingCommitsWorker({
422
422
  service: makeService(),
423
- workflow: { runPendingCommit: vi.fn() },
423
+ versionControl: { runPendingCommit: vi.fn() },
424
424
  recoveryAgent: { run: vi.fn() },
425
425
  feedback: makeFeedback(),
426
426
  workspaces: makeWorkspaces(),
@@ -6,18 +6,18 @@ import os from 'node:os';
6
6
 
7
7
  import type { GitService } from '../git/git.service.js';
8
8
  import type { PullRequestService } from '../git/pull-request.service.js';
9
- import type { IReviewWorkflowService } from '../review-workflow/review-workflow.interface.js';
9
+ import type { IChangeRequestReviewService } from '../change-request-review/change-request-review.interface.js';
10
10
  import type { WorkspaceService } from '../../workspace/workspace.service.js';
11
11
  import type { IAccessControl } from '../../access/access-control.interface.js';
12
12
  import { FileLockService } from '../file-lock.service.js';
13
13
  import { PendingCommitsService } from '../pending-commits.service.js';
14
- import { WorkflowService } from '../workflow.service.js';
14
+ import { VersionControlService } from '../version-control.service.js';
15
15
  import type { Database } from '../../database/connection.js';
16
16
  import {
17
17
  PushNeedsAgentResolutionError,
18
18
  RolesYamlPreservationError,
19
19
  } from '../../../shared/domain-errors.js';
20
- import type { WorkflowEventBus } from '../event-bus.js';
20
+ import type { VersionControlEventBus } from '../event-bus.js';
21
21
  import { openChangeGate } from '../../../__tests__/open-change-gate.js';
22
22
 
23
23
  /**
@@ -78,12 +78,12 @@ describe('mergeChangeRequest — roles.yaml preservation guard', () => {
78
78
  // Simulate a concurrent editor already holding the roles.yaml lock. When set,
79
79
  // acquire returns { acquired: false } and the restore must fail-closed.
80
80
  lockHeldBy?: string;
81
- events?: WorkflowEventBus;
81
+ events?: VersionControlEventBus;
82
82
  }) {
83
83
  const ac = noopAccessControl();
84
- const reviewWorkflow = {
84
+ const changeRequestReview = {
85
85
  mergePr: vi.fn().mockResolvedValue({ prNumber: 1, sha: 'merged', mergedAt: 't' }),
86
- } as unknown as IReviewWorkflowService;
86
+ } as unknown as IChangeRequestReviewService;
87
87
 
88
88
  const workspaceService = {
89
89
  getOrCreateForBranch: vi.fn(async (branch: string) => ({ id: encodeURIComponent(branch) })),
@@ -132,44 +132,44 @@ describe('mergeChangeRequest — roles.yaml preservation guard', () => {
132
132
  const release = vi.fn(async () => undefined);
133
133
  const fileLocks = { acquire, release } as unknown as FileLockService;
134
134
 
135
- const svc = new WorkflowService(
135
+ const svc = new VersionControlService(
136
136
  {} as unknown as Database,
137
- git, prs, reviewWorkflow, workspaceService, ac,
137
+ git, prs, changeRequestReview, workspaceService, ac,
138
138
  fileLocks, {} as unknown as PendingCommitsService,
139
139
  testKbContext({ kbDirName: KB_DIR }),
140
140
  openChangeGate(),
141
141
  opts.events,
142
142
  );
143
- // Conflicts are now surfaced by the local merge inside `reviewWorkflow.mergePr`
143
+ // Conflicts are now surfaced by the local merge inside `changeRequestReview.mergePr`
144
144
  // (mocked to resolve here), so there's no provider "mergeable" pre-check to stub.
145
- return { svc, git, prs, reviewWorkflow, fileLocks };
145
+ return { svc, git, prs, changeRequestReview, fileLocks };
146
146
  }
147
147
 
148
- async function merge(svc: WorkflowService) {
148
+ async function merge(svc: VersionControlService) {
149
149
  return svc.mergeChangeRequest(1, USER, 'sha', [], 'open', 'Title', BASE, 'w1', { bypass: false });
150
150
  }
151
151
 
152
152
  it('no-ops when the CR does not change roles.yaml (identical content)', async () => {
153
- const { svc, git, reviewWorkflow } = makeSvc({ headRoles: BASE_ROLES, baseRoles: BASE_ROLES });
153
+ const { svc, git, changeRequestReview } = makeSvc({ headRoles: BASE_ROLES, baseRoles: BASE_ROLES });
154
154
  await merge(svc);
155
155
  // No restore write/commit/push, but the merge still proceeds.
156
156
  expect(git.commitFile).not.toHaveBeenCalled();
157
157
  expect(git.push).not.toHaveBeenCalled();
158
- expect(reviewWorkflow.mergePr).toHaveBeenCalledTimes(1);
158
+ expect(changeRequestReview.mergePr).toHaveBeenCalledTimes(1);
159
159
  });
160
160
 
161
161
  it('no-ops when neither base nor head has a roles.yaml (both absent)', async () => {
162
- const { svc, git, reviewWorkflow } = makeSvc({ headRoles: null, baseRoles: null });
162
+ const { svc, git, changeRequestReview } = makeSvc({ headRoles: null, baseRoles: null });
163
163
  await merge(svc);
164
164
  expect(git.commitFile).not.toHaveBeenCalled();
165
- expect(reviewWorkflow.mergePr).toHaveBeenCalledTimes(1);
165
+ expect(changeRequestReview.mergePr).toHaveBeenCalledTimes(1);
166
166
  });
167
167
 
168
168
  it('restores base roles.yaml on the source branch when the CR changed it (escalation guard)', async () => {
169
169
  // Seed the source workspace with the ATTACKER version, as it would be after
170
170
  // reset-to-origin of the CR head.
171
171
  await fs.writeFile(path.join(headRepoDir, 'roles.yaml'), ATTACKER_ROLES);
172
- const { svc, git, reviewWorkflow, fileLocks } = makeSvc({ headRoles: ATTACKER_ROLES, baseRoles: BASE_ROLES });
172
+ const { svc, git, changeRequestReview, fileLocks } = makeSvc({ headRoles: ATTACKER_ROLES, baseRoles: BASE_ROLES });
173
173
 
174
174
  await merge(svc);
175
175
 
@@ -202,7 +202,7 @@ describe('mergeChangeRequest — roles.yaml preservation guard', () => {
202
202
  USER,
203
203
  );
204
204
  // ...and only THEN does the merge proceed.
205
- expect(reviewWorkflow.mergePr).toHaveBeenCalledTimes(1);
205
+ expect(changeRequestReview.mergePr).toHaveBeenCalledTimes(1);
206
206
  });
207
207
 
208
208
  it('ABORTS the merge when roles.yaml is locked by a concurrent editor (fail-closed)', async () => {
@@ -210,7 +210,7 @@ describe('mergeChangeRequest — roles.yaml preservation guard', () => {
210
210
  // it — acquire returns { acquired: false }, so the merge aborts rather than
211
211
  // writing over (or being overwritten by) the live edit.
212
212
  await fs.writeFile(path.join(headRepoDir, 'roles.yaml'), ATTACKER_ROLES);
213
- const { svc, git, reviewWorkflow } = makeSvc({
213
+ const { svc, git, changeRequestReview } = makeSvc({
214
214
  headRoles: ATTACKER_ROLES,
215
215
  baseRoles: BASE_ROLES,
216
216
  lockHeldBy: 'Someone Else',
@@ -220,7 +220,7 @@ describe('mergeChangeRequest — roles.yaml preservation guard', () => {
220
220
  // Nothing was written/committed/pushed, and the merge never ran.
221
221
  expect(git.commitFile).not.toHaveBeenCalled();
222
222
  expect(git.push).not.toHaveBeenCalled();
223
- expect(reviewWorkflow.mergePr).not.toHaveBeenCalled();
223
+ expect(changeRequestReview.mergePr).not.toHaveBeenCalled();
224
224
  // The on-disk attacker version is untouched — the lock holder's edit stands.
225
225
  const onDisk = await fs.readFile(path.join(headRepoDir, 'roles.yaml'), 'utf-8');
226
226
  expect(onDisk).toBe(ATTACKER_ROLES);
@@ -240,13 +240,13 @@ describe('mergeChangeRequest — roles.yaml preservation guard', () => {
240
240
  it('ABORTS the merge when the host refuses the restore push, keeping the restore locally (409, saved-locally, banner)', async () => {
241
241
  await fs.writeFile(path.join(headRepoDir, 'roles.yaml'), ATTACKER_ROLES);
242
242
  const emit = vi.fn();
243
- const { svc, git, reviewWorkflow, fileLocks } = makeSvc({
243
+ const { svc, git, changeRequestReview, fileLocks } = makeSvc({
244
244
  headRoles: ATTACKER_ROLES,
245
245
  baseRoles: BASE_ROLES,
246
246
  pushImpl: async () => {
247
247
  throw new Error('git push failed: remote: Internal Server Error');
248
248
  },
249
- events: { emit } as unknown as WorkflowEventBus,
249
+ events: { emit } as unknown as VersionControlEventBus,
250
250
  });
251
251
 
252
252
  const err = await merge(svc).catch((e: unknown) => e);
@@ -258,7 +258,7 @@ describe('mergeChangeRequest — roles.yaml preservation guard', () => {
258
258
  expect(JSON.stringify((err as PushNeedsAgentResolutionError).payload)).not.toContain('Internal Server Error');
259
259
  // Fail-closed: the merge must NOT have run — origin still carries the
260
260
  // divergent roles.yaml.
261
- expect(reviewWorkflow.mergePr).not.toHaveBeenCalled();
261
+ expect(changeRequestReview.mergePr).not.toHaveBeenCalled();
262
262
  // The local result stays: base version on disk, committed, lock dropped.
263
263
  expect(await fs.readFile(path.join(headRepoDir, 'roles.yaml'), 'utf-8')).toBe(BASE_ROLES);
264
264
  expect(git.commitFile).toHaveBeenCalled();
@@ -274,7 +274,7 @@ describe('mergeChangeRequest — roles.yaml preservation guard', () => {
274
274
  it('a non-fast-forward restore push takes the cooperative pull-rebase, then the merge proceeds', async () => {
275
275
  await fs.writeFile(path.join(headRepoDir, 'roles.yaml'), ATTACKER_ROLES);
276
276
  let pushes = 0;
277
- const { svc, git, reviewWorkflow } = makeSvc({
277
+ const { svc, git, changeRequestReview } = makeSvc({
278
278
  headRoles: ATTACKER_ROLES,
279
279
  baseRoles: BASE_ROLES,
280
280
  pushImpl: async () => {
@@ -285,13 +285,13 @@ describe('mergeChangeRequest — roles.yaml preservation guard', () => {
285
285
  await merge(svc);
286
286
  expect(git.pull).toHaveBeenCalled();
287
287
  expect(git.push).toHaveBeenCalledTimes(2);
288
- expect(reviewWorkflow.mergePr).toHaveBeenCalledTimes(1);
288
+ expect(changeRequestReview.mergePr).toHaveBeenCalledTimes(1);
289
289
  });
290
290
 
291
291
  it('ABORTS the merge if the CR (PR) cannot be resolved', async () => {
292
- const { svc, reviewWorkflow } = makeSvc({ headRoles: BASE_ROLES, baseRoles: BASE_ROLES, getPrResult: null });
292
+ const { svc, changeRequestReview } = makeSvc({ headRoles: BASE_ROLES, baseRoles: BASE_ROLES, getPrResult: null });
293
293
  await expect(merge(svc)).rejects.toBeInstanceOf(RolesYamlPreservationError);
294
- expect(reviewWorkflow.mergePr).not.toHaveBeenCalled();
294
+ expect(changeRequestReview.mergePr).not.toHaveBeenCalled();
295
295
  });
296
296
 
297
297
  it('refreshes the merge inputs from the updated PR head after a preservation commit', async () => {
@@ -299,13 +299,13 @@ describe('mergeChangeRequest — roles.yaml preservation guard', () => {
299
299
  // (resolved pre-preservation) go stale. mergeChangeRequest must re-resolve them
300
300
  // from the live PR before merging, not forward the originals.
301
301
  await fs.writeFile(path.join(headRepoDir, 'roles.yaml'), ATTACKER_ROLES);
302
- const { svc, prs, reviewWorkflow } = makeSvc({ headRoles: ATTACKER_ROLES, baseRoles: BASE_ROLES });
302
+ const { svc, prs, changeRequestReview } = makeSvc({ headRoles: ATTACKER_ROLES, baseRoles: BASE_ROLES });
303
303
 
304
304
  await merge(svc);
305
305
 
306
306
  expect(prs.getPrDetail).toHaveBeenCalledWith(1, expect.objectContaining({ fresh: true }));
307
307
  // mergePr is called with the REFRESHED head sha, not the original 'sha'.
308
- expect(reviewWorkflow.mergePr).toHaveBeenCalledWith(
308
+ expect(changeRequestReview.mergePr).toHaveBeenCalledWith(
309
309
  1, USER, 'sha-after-preserve', [], 'open', 'Title', BASE, 'w1', { bypass: false },
310
310
  );
311
311
  });
@@ -313,10 +313,10 @@ describe('mergeChangeRequest — roles.yaml preservation guard', () => {
313
313
  it('does NOT refresh (keeps the caller inputs) when the CR does not touch roles.yaml', async () => {
314
314
  // No preservation commit → no head advance → nothing to refresh; the original
315
315
  // headSha/approvals flow straight through.
316
- const { svc, prs, reviewWorkflow } = makeSvc({ headRoles: BASE_ROLES, baseRoles: BASE_ROLES });
316
+ const { svc, prs, changeRequestReview } = makeSvc({ headRoles: BASE_ROLES, baseRoles: BASE_ROLES });
317
317
  await merge(svc);
318
318
  expect(prs.getPrDetail).not.toHaveBeenCalled();
319
- expect(reviewWorkflow.mergePr).toHaveBeenCalledWith(
319
+ expect(changeRequestReview.mergePr).toHaveBeenCalledWith(
320
320
  1, USER, 'sha', [], 'open', 'Title', BASE, 'w1', { bypass: false },
321
321
  );
322
322
  });
@@ -327,14 +327,14 @@ describe('mergeChangeRequest — roles.yaml preservation guard', () => {
327
327
  // origin/head would still carry the divergent roles.yaml, so this must fail
328
328
  // closed rather than return "nothing to do".
329
329
  await fs.writeFile(path.join(headRepoDir, 'roles.yaml'), BASE_ROLES);
330
- const { svc, git, reviewWorkflow } = makeSvc({
330
+ const { svc, git, changeRequestReview } = makeSvc({
331
331
  headRoles: ATTACKER_ROLES,
332
332
  baseRoles: BASE_ROLES,
333
333
  commitFileResult: null,
334
334
  });
335
335
  await expect(merge(svc)).rejects.toBeInstanceOf(RolesYamlPreservationError);
336
336
  expect(git.push).not.toHaveBeenCalled();
337
- expect(reviewWorkflow.mergePr).not.toHaveBeenCalled();
337
+ expect(changeRequestReview.mergePr).not.toHaveBeenCalled();
338
338
  });
339
339
 
340
340
  it('a merge retried after a refused restore push pushes the restore that is already committed, then merges', async () => {
@@ -345,7 +345,7 @@ describe('mergeChangeRequest — roles.yaml preservation guard', () => {
345
345
  // of everything origin has. The retry must push it and merge, not refuse
346
346
  // "out of sync" forever.
347
347
  await fs.writeFile(path.join(headRepoDir, 'roles.yaml'), BASE_ROLES);
348
- const { svc, git, reviewWorkflow } = makeSvc({
348
+ const { svc, git, changeRequestReview } = makeSvc({
349
349
  headRoles: ATTACKER_ROLES,
350
350
  baseRoles: BASE_ROLES,
351
351
  commitFileResult: null,
@@ -353,7 +353,7 @@ describe('mergeChangeRequest — roles.yaml preservation guard', () => {
353
353
  });
354
354
  await expect(merge(svc)).resolves.toMatchObject({ kind: 'merged' });
355
355
  expect(git.push).toHaveBeenCalledTimes(1);
356
- expect(reviewWorkflow.mergePr).toHaveBeenCalled();
356
+ expect(changeRequestReview.mergePr).toHaveBeenCalled();
357
357
  });
358
358
 
359
359
  it('still ABORTS when the base version is on disk but the clone is BEHIND origin/head (fail-closed)', async () => {
@@ -363,7 +363,7 @@ describe('mergeChangeRequest — roles.yaml preservation guard', () => {
363
363
  // the merge would land it — so holding unpushed work is not the question,
364
364
  // holding all of origin is.
365
365
  await fs.writeFile(path.join(headRepoDir, 'roles.yaml'), BASE_ROLES);
366
- const { svc, git, reviewWorkflow } = makeSvc({
366
+ const { svc, git, changeRequestReview } = makeSvc({
367
367
  headRoles: ATTACKER_ROLES,
368
368
  baseRoles: BASE_ROLES,
369
369
  commitFileResult: null,
@@ -371,12 +371,12 @@ describe('mergeChangeRequest — roles.yaml preservation guard', () => {
371
371
  });
372
372
  await expect(merge(svc)).rejects.toBeInstanceOf(RolesYamlPreservationError);
373
373
  expect(git.push).not.toHaveBeenCalled();
374
- expect(reviewWorkflow.mergePr).not.toHaveBeenCalled();
374
+ expect(changeRequestReview.mergePr).not.toHaveBeenCalled();
375
375
  });
376
376
 
377
377
  it('ABORTS when the probe for "does HEAD hold origin/head" itself fails (fail-closed, not open)', async () => {
378
378
  await fs.writeFile(path.join(headRepoDir, 'roles.yaml'), BASE_ROLES);
379
- const { svc, git, reviewWorkflow } = makeSvc({
379
+ const { svc, git, changeRequestReview } = makeSvc({
380
380
  headRoles: ATTACKER_ROLES,
381
381
  baseRoles: BASE_ROLES,
382
382
  commitFileResult: null,
@@ -384,7 +384,7 @@ describe('mergeChangeRequest — roles.yaml preservation guard', () => {
384
384
  });
385
385
  await expect(merge(svc)).rejects.toBeInstanceOf(RolesYamlPreservationError);
386
386
  expect(git.push).not.toHaveBeenCalled();
387
- expect(reviewWorkflow.mergePr).not.toHaveBeenCalled();
387
+ expect(changeRequestReview.mergePr).not.toHaveBeenCalled();
388
388
  });
389
389
 
390
390
  it('ABORTS the merge when the post-preservation CR detail cannot be reloaded (fail-closed)', async () => {
@@ -392,24 +392,24 @@ describe('mergeChangeRequest — roles.yaml preservation guard', () => {
392
392
  // re-resolved. If the fresh detail is unavailable, abort — never fall back to
393
393
  // the stale headSha/approvals.
394
394
  await fs.writeFile(path.join(headRepoDir, 'roles.yaml'), ATTACKER_ROLES);
395
- const { svc, reviewWorkflow } = makeSvc({
395
+ const { svc, changeRequestReview } = makeSvc({
396
396
  headRoles: ATTACKER_ROLES,
397
397
  baseRoles: BASE_ROLES,
398
398
  getPrDetailResult: null,
399
399
  });
400
400
  await expect(merge(svc)).rejects.toBeInstanceOf(RolesYamlPreservationError);
401
- expect(reviewWorkflow.mergePr).not.toHaveBeenCalled();
401
+ expect(changeRequestReview.mergePr).not.toHaveBeenCalled();
402
402
  });
403
403
 
404
404
  it('ABORTS the merge when reading roles.yaml fails for a non-absence reason (fail-closed)', async () => {
405
405
  // readFileAtRef now rethrows real git errors (only true absence maps to null),
406
406
  // so a fatal read must surface as RolesYamlPreservationError — never be mistaken
407
407
  // for "roles.yaml absent" and waved through.
408
- const { svc, git, reviewWorkflow } = makeSvc({ headRoles: ATTACKER_ROLES, baseRoles: BASE_ROLES });
408
+ const { svc, git, changeRequestReview } = makeSvc({ headRoles: ATTACKER_ROLES, baseRoles: BASE_ROLES });
409
409
  (git.readFileAtRef as unknown as ReturnType<typeof vi.fn>).mockRejectedValue(
410
410
  new Error('git show failed: fatal: unable to read tree object'),
411
411
  );
412
412
  await expect(merge(svc)).rejects.toBeInstanceOf(RolesYamlPreservationError);
413
- expect(reviewWorkflow.mergePr).not.toHaveBeenCalled();
413
+ expect(changeRequestReview.mergePr).not.toHaveBeenCalled();
414
414
  });
415
415
  });