@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
@@ -24,7 +24,7 @@ const KB = 'knowledge-base';
24
24
  const ACCESS_MD = '---\nread:\n - everyone\n---\nread: []\n';
25
25
 
26
26
  function harness(over: Partial<JoinRequestJobsDeps> = {}, sharedStore?: FakeJoinRequestStore) {
27
- const workflow = {
27
+ const versionControl = {
28
28
  listChangeRequestsAuthoredBy: vi.fn(async () => [] as never[]),
29
29
  createBranch: vi.fn(async () => ({ name: 'x', isDefault: false, isProtected: false })),
30
30
  listBranches: vi.fn(async () => [] as { name: string }[]),
@@ -38,14 +38,14 @@ function harness(over: Partial<JoinRequestJobsDeps> = {}, sharedStore?: FakeJoin
38
38
  };
39
39
  const store = sharedStore ?? new FakeJoinRequestStore();
40
40
  const jobs = new PluginJoinRequestJobs(store, {
41
- workflow: workflow as never,
41
+ versionControl: versionControl as never,
42
42
  workspaceService: workspaceService as never,
43
43
  kb: testKbContext({ kbDirName: KB }),
44
44
  target: async () => ({ folder: 'Plugins/Finance', displayName: 'Finance' }),
45
45
  requester: async (mail) => ({ ...ALI_USER, email: mail }),
46
46
  ...over,
47
47
  });
48
- return { workflow, workspaceService, store, jobs };
48
+ return { versionControl, workspaceService, store, jobs };
49
49
  }
50
50
 
51
51
  function pendingRow(store: FakeJoinRequestStore) {
@@ -86,7 +86,7 @@ describe('PluginJoinRequestJobs', () => {
86
86
  await h.jobs.start(pendingRow(h.store));
87
87
 
88
88
  const branch = joinBranchFor(ALI, 'Finance');
89
- expect(h.workflow.createBranch).toHaveBeenCalledWith(
89
+ expect(h.versionControl.createBranch).toHaveBeenCalledWith(
90
90
  workspaceIdForBranch(DEFAULT_BRANCH),
91
91
  branch,
92
92
  DEFAULT_BRANCH,
@@ -94,8 +94,8 @@ describe('PluginJoinRequestJobs', () => {
94
94
  const write = h.workspaceService.writeFile.mock.calls[0] as unknown as [string, string, string];
95
95
  expect(write[1]).toBe(`${KB}/Plugins/Finance/access.md`);
96
96
  expect(write[2]).toContain('Ali Baba <ali@bevel.software>');
97
- expect(h.workflow.commitChanges).toHaveBeenCalled();
98
- expect(h.workflow.openChangeRequest).toHaveBeenCalledWith(
97
+ expect(h.versionControl.commitChanges).toHaveBeenCalled();
98
+ expect(h.versionControl.openChangeRequest).toHaveBeenCalledWith(
99
99
  workspaceIdForBranch(branch),
100
100
  expect.objectContaining({ email: ALI }),
101
101
  expect.objectContaining({ title: 'Join request: Finance', sourceBranch: branch }),
@@ -107,7 +107,7 @@ describe('PluginJoinRequestJobs', () => {
107
107
  const h = harness();
108
108
  const record = pendingRow(h.store);
109
109
  await Promise.all([h.jobs.start(record), h.jobs.start(record)]);
110
- expect(h.workflow.openChangeRequest).toHaveBeenCalledTimes(1);
110
+ expect(h.versionControl.openChangeRequest).toHaveBeenCalledTimes(1);
111
111
  });
112
112
 
113
113
  it('a start on a record another flight already opened does nothing at all', async () => {
@@ -117,7 +117,7 @@ describe('PluginJoinRequestJobs', () => {
117
117
  // The SAME stale snapshot a second tab would hold: still `pending` in
118
118
  // this object, `opened` in the store.
119
119
  await h.jobs.start(record);
120
- expect(h.workflow.openChangeRequest).toHaveBeenCalledTimes(1);
120
+ expect(h.versionControl.openChangeRequest).toHaveBeenCalledTimes(1);
121
121
  });
122
122
 
123
123
  it('leaves the branch alone when the grant is already on it', async () => {
@@ -127,14 +127,14 @@ describe('PluginJoinRequestJobs', () => {
127
127
  );
128
128
  await h.jobs.start(pendingRow(h.store));
129
129
  expect(h.workspaceService.writeFile).not.toHaveBeenCalled();
130
- expect(h.workflow.commitChanges).not.toHaveBeenCalled();
130
+ expect(h.versionControl.commitChanges).not.toHaveBeenCalled();
131
131
  // Still opens the request: the branch carries the proposal either way.
132
- expect(h.workflow.openChangeRequest).toHaveBeenCalledTimes(1);
132
+ expect(h.versionControl.openChangeRequest).toHaveBeenCalledTimes(1);
133
133
  });
134
134
 
135
135
  it('records a failure in the words the git work used, with credentials stripped', async () => {
136
136
  const h = harness();
137
- h.workflow.openChangeRequest.mockRejectedValue(
137
+ h.versionControl.openChangeRequest.mockRejectedValue(
138
138
  new Error("fatal: unable to access 'https://x-access-token:ghp_secret@github.com/acme/kb'"),
139
139
  );
140
140
  await h.jobs.start(pendingRow(h.store));
@@ -149,7 +149,7 @@ describe('PluginJoinRequestJobs', () => {
149
149
  const h = harness();
150
150
  // What Drizzle throws: its own error class, the SQL in the message, the
151
151
  // driver's error as the cause.
152
- h.workflow.openChangeRequest.mockRejectedValue(
152
+ h.versionControl.openChangeRequest.mockRejectedValue(
153
153
  new DrizzleQueryError(
154
154
  'insert into "change_requests" ("id", "number", "title", "body", "source_branch", "target_branch", "author_id", "status", "created_at", "updated_at") values ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10)',
155
155
  [],
@@ -174,7 +174,7 @@ describe('PluginJoinRequestJobs', () => {
174
174
  // The git work failing behind a wrapper of its own: the cause is what is
175
175
  // logged, and what the requester reads, credentials stripped — the
176
176
  // database's stable sentence would hide the detail they can act on.
177
- h.workflow.openChangeRequest.mockRejectedValue(
177
+ h.versionControl.openChangeRequest.mockRejectedValue(
178
178
  new Error('opening the change request failed', {
179
179
  cause: new Error('fatal: unable to access https://x:ghp_secret@github.com/acme/kb: could not resolve host'),
180
180
  }),
@@ -193,7 +193,7 @@ describe('PluginJoinRequestJobs', () => {
193
193
  expect(h.store.all()).toMatchObject([
194
194
  { status: 'failed', failureReason: 'the plugin is no longer available' },
195
195
  ]);
196
- expect(h.workflow.createBranch).not.toHaveBeenCalled();
196
+ expect(h.versionControl.createBranch).not.toHaveBeenCalled();
197
197
  });
198
198
 
199
199
  it('fails the record when no account answers to the address that asked', async () => {
@@ -210,7 +210,7 @@ describe('PluginJoinRequestJobs', () => {
210
210
  requester: async (mail) => ({ ...ALI_USER, id: asked++ === 0 ? 'u-1' : 'u-2', email: mail }),
211
211
  });
212
212
  await h.jobs.start(pendingRow(h.store));
213
- expect(h.workflow.openChangeRequest).not.toHaveBeenCalled();
213
+ expect(h.versionControl.openChangeRequest).not.toHaveBeenCalled();
214
214
  expect(h.store.all()).toMatchObject([{ status: 'failed' }]);
215
215
  });
216
216
 
@@ -218,7 +218,7 @@ describe('PluginJoinRequestJobs', () => {
218
218
  const h = harness();
219
219
  h.jobs.stopSweeping();
220
220
  await h.jobs.start(pendingRow(h.store));
221
- expect(h.workflow.createBranch).not.toHaveBeenCalled();
221
+ expect(h.versionControl.createBranch).not.toHaveBeenCalled();
222
222
  expect(h.store.all()).toMatchObject([{ status: 'pending' }]);
223
223
  });
224
224
 
@@ -230,8 +230,8 @@ describe('PluginJoinRequestJobs', () => {
230
230
  requester: async (mail) => (asked++ === 0 ? { ...ALI_USER, email: mail } : null),
231
231
  });
232
232
  await h.jobs.start(pendingRow(h.store));
233
- expect(h.workflow.commitChanges).toHaveBeenCalled();
234
- expect(h.workflow.openChangeRequest).not.toHaveBeenCalled();
233
+ expect(h.versionControl.commitChanges).toHaveBeenCalled();
234
+ expect(h.versionControl.openChangeRequest).not.toHaveBeenCalled();
235
235
  expect(h.store.all()).toMatchObject([
236
236
  { status: 'failed', failureReason: 'the account that asked no longer exists' },
237
237
  ]);
@@ -262,7 +262,7 @@ describe('PluginJoinRequestJobs', () => {
262
262
  await h.jobs.sweep();
263
263
  await h.jobs.drain();
264
264
 
265
- expect(h.workflow.openChangeRequest).toHaveBeenCalledTimes(1);
265
+ expect(h.versionControl.openChangeRequest).toHaveBeenCalledTimes(1);
266
266
  expect(h.store.all().map((r) => r.status)).toEqual(['opened', 'opened', 'failed']);
267
267
  });
268
268
 
@@ -271,7 +271,7 @@ describe('PluginJoinRequestJobs', () => {
271
271
  // A first request from a person is a full clone; the boot must not queue
272
272
  // behind one, so `sweep` resolves once the work is under way.
273
273
  let release = () => {};
274
- h.workflow.createBranch.mockReturnValue(
274
+ h.versionControl.createBranch.mockReturnValue(
275
275
  new Promise((resolve) => {
276
276
  release = () => resolve({ name: 'x', isDefault: false, isProtected: false });
277
277
  }) as never,
@@ -299,8 +299,8 @@ describe('PluginJoinRequestJobs', () => {
299
299
  // pushing the same branch into one shared workspace is the thing the
300
300
  // claim exists to prevent, and neither one's single-flight map can see
301
301
  // the other.
302
- expect(h.workflow.createBranch).not.toHaveBeenCalled();
303
- expect(h.workflow.openChangeRequest).not.toHaveBeenCalled();
302
+ expect(h.versionControl.createBranch).not.toHaveBeenCalled();
303
+ expect(h.versionControl.openChangeRequest).not.toHaveBeenCalled();
304
304
  expect(h.store.all()[0].status).toBe('pending');
305
305
  });
306
306
 
@@ -340,7 +340,7 @@ describe('PluginJoinRequestJobs', () => {
340
340
  await fresh.jobs.drain();
341
341
 
342
342
  expect(h.store.all()[0]).toMatchObject({ status: 'opened', changeRequestNumber: 42 });
343
- expect(fresh.workflow.openChangeRequest).toHaveBeenCalledTimes(1);
343
+ expect(fresh.versionControl.openChangeRequest).toHaveBeenCalledTimes(1);
344
344
  });
345
345
 
346
346
  it('a live process keeps its claim however long the work takes, by its own heartbeat', async () => {
@@ -358,7 +358,7 @@ describe('PluginJoinRequestJobs', () => {
358
358
  // stale window, which is the case the heartbeat exists for: without it
359
359
  // the work would be stolen out from under the process doing it.
360
360
  let finishClone = (): void => {};
361
- h.workflow.createBranch.mockReturnValue(
361
+ h.versionControl.createBranch.mockReturnValue(
362
362
  new Promise((resolve) => {
363
363
  finishClone = () => resolve({ name: 'x', isDefault: false, isProtected: false });
364
364
  }) as never,
@@ -372,14 +372,14 @@ describe('PluginJoinRequestJobs', () => {
372
372
  // Four windows in, and still held — by the interval, and nothing else.
373
373
  const other = harness({}, h.store);
374
374
  await other.jobs.start({ ...record });
375
- expect(other.workflow.createBranch).not.toHaveBeenCalled();
375
+ expect(other.versionControl.createBranch).not.toHaveBeenCalled();
376
376
  expect(h.store.all()[0].status).toBe('pending');
377
377
 
378
378
  // And it still completes: the beats did not disturb the work.
379
379
  finishClone();
380
380
  await flight;
381
381
  expect(h.store.all()[0]).toMatchObject({ status: 'opened', changeRequestNumber: 42 });
382
- expect(h.workflow.openChangeRequest).toHaveBeenCalledTimes(1);
382
+ expect(h.versionControl.openChangeRequest).toHaveBeenCalledTimes(1);
383
383
  });
384
384
 
385
385
  it('stops before the change request when the row was erased under it', async () => {
@@ -389,7 +389,7 @@ describe('PluginJoinRequestJobs', () => {
389
389
  // comes next is the one step that leaves something a manager sees.
390
390
  const h = harness();
391
391
  const record = pendingRow(h.store);
392
- h.workflow.commitChanges.mockImplementation(async () => {
392
+ h.versionControl.commitChanges.mockImplementation(async () => {
393
393
  h.store.deleteFor(ALI, 'Finance');
394
394
  return null;
395
395
  });
@@ -398,7 +398,7 @@ describe('PluginJoinRequestJobs', () => {
398
398
 
399
399
  // No change request in a deleted person's name — and no row written back,
400
400
  // which would resurrect the ask the erasure just removed.
401
- expect(h.workflow.openChangeRequest).not.toHaveBeenCalled();
401
+ expect(h.versionControl.openChangeRequest).not.toHaveBeenCalled();
402
402
  expect(h.store.all()).toEqual([]);
403
403
  });
404
404
 
@@ -410,7 +410,7 @@ describe('PluginJoinRequestJobs', () => {
410
410
  // that replaced it.
411
411
  const h = harness();
412
412
  const record = pendingRow(h.store);
413
- h.workflow.commitChanges.mockImplementation(async () => {
413
+ h.versionControl.commitChanges.mockImplementation(async () => {
414
414
  // A zero window is "the claim has lapsed", without minutes of fake time.
415
415
  await h.store.claim(record.id, 0);
416
416
  return null;
@@ -418,7 +418,7 @@ describe('PluginJoinRequestJobs', () => {
418
418
 
419
419
  await h.jobs.start(record);
420
420
 
421
- expect(h.workflow.openChangeRequest).not.toHaveBeenCalled();
421
+ expect(h.versionControl.openChangeRequest).not.toHaveBeenCalled();
422
422
  // Still pending, under the NEW claim: not `failed`, which is what an
423
423
  // unfenced worker would have written over a run that is going fine.
424
424
  expect(h.store.all()[0]).toMatchObject({ status: 'pending', failureReason: null });
@@ -444,8 +444,8 @@ describe('PluginJoinRequestJobs', () => {
444
444
  // Nothing was written to the branch and nothing was opened — and the row
445
445
  // is left exactly as it was, pending, for the next sweep to redo.
446
446
  expect(h.workspaceService.writeFile).not.toHaveBeenCalled();
447
- expect(h.workflow.commitChanges).not.toHaveBeenCalled();
448
- expect(h.workflow.openChangeRequest).not.toHaveBeenCalled();
447
+ expect(h.versionControl.commitChanges).not.toHaveBeenCalled();
448
+ expect(h.versionControl.openChangeRequest).not.toHaveBeenCalled();
449
449
  expect(h.store.all()[0]).toMatchObject({ status: 'pending', failureReason: null });
450
450
  });
451
451
 
@@ -466,7 +466,7 @@ describe('PluginJoinRequestJobs', () => {
466
466
  };
467
467
 
468
468
  let finishClone = (): void => {};
469
- h.workflow.createBranch.mockReturnValue(
469
+ h.versionControl.createBranch.mockReturnValue(
470
470
  new Promise((resolve) => {
471
471
  finishClone = () => resolve({ name: 'x', isDefault: false, isProtected: false });
472
472
  }) as never,
@@ -502,8 +502,8 @@ describe('PluginJoinRequestJobs', () => {
502
502
  // The branch was created under a claim this process did hold — that is
503
503
  // idempotent and harmless — but nothing after the clone ran.
504
504
  expect(h.workspaceService.writeFile).not.toHaveBeenCalled();
505
- expect(h.workflow.commitChanges).not.toHaveBeenCalled();
506
- expect(h.workflow.openChangeRequest).not.toHaveBeenCalled();
505
+ expect(h.versionControl.commitChanges).not.toHaveBeenCalled();
506
+ expect(h.versionControl.openChangeRequest).not.toHaveBeenCalled();
507
507
  });
508
508
 
509
509
  it('a superseded token can neither beat nor decide the row', async () => {
@@ -562,7 +562,7 @@ describe('PluginJoinRequestJobs', () => {
562
562
  await vi.advanceTimersByTimeAsync(5000);
563
563
  await h.jobs.drain();
564
564
 
565
- expect(h.workflow.openChangeRequest).not.toHaveBeenCalled();
565
+ expect(h.versionControl.openChangeRequest).not.toHaveBeenCalled();
566
566
  });
567
567
 
568
568
  it("a sweep that cannot read the table logs the database's reason, not the wrapper's cut-off SQL", async () => {
@@ -594,12 +594,12 @@ describe('PluginJoinRequestJobs', () => {
594
594
  it('proceeds past a createBranch failure only when the branch is really there', async () => {
595
595
  const h = harness();
596
596
  const branch = joinBranchFor(ALI, 'Finance');
597
- h.workflow.createBranch.mockRejectedValue(new Error('a branch named that already exists'));
598
- h.workflow.listBranches.mockResolvedValue([{ name: branch }]);
597
+ h.versionControl.createBranch.mockRejectedValue(new Error('a branch named that already exists'));
598
+ h.versionControl.listBranches.mockResolvedValue([{ name: branch }]);
599
599
 
600
600
  await h.jobs.start(pendingRow(h.store));
601
601
 
602
- expect(h.workflow.listBranches).toHaveBeenCalledWith(expect.any(String), {
602
+ expect(h.versionControl.listBranches).toHaveBeenCalledWith(expect.any(String), {
603
603
  freshFetch: true,
604
604
  strictFetch: true,
605
605
  });
@@ -608,8 +608,8 @@ describe('PluginJoinRequestJobs', () => {
608
608
 
609
609
  it('fails the record when createBranch refuses and no branch exists to work against', async () => {
610
610
  const h = harness();
611
- h.workflow.createBranch.mockRejectedValue(new Error('remote: permission denied'));
612
- h.workflow.listBranches.mockResolvedValue([]);
611
+ h.versionControl.createBranch.mockRejectedValue(new Error('remote: permission denied'));
612
+ h.versionControl.listBranches.mockResolvedValue([]);
613
613
 
614
614
  await h.jobs.start(pendingRow(h.store));
615
615
 
@@ -620,7 +620,7 @@ describe('PluginJoinRequestJobs', () => {
620
620
  status: 'failed',
621
621
  failureReason: 'remote: permission denied',
622
622
  });
623
- expect(h.workflow.openChangeRequest).not.toHaveBeenCalled();
623
+ expect(h.versionControl.openChangeRequest).not.toHaveBeenCalled();
624
624
  });
625
625
 
626
626
  it('refuses to splice when access.md is unreadable for any reason but absence', async () => {
@@ -670,7 +670,7 @@ describe('PluginJoinRequestJobs', () => {
670
670
  // A cached listing taken before an earlier attempt opened its change
671
671
  // request shows nothing to adopt, which is how a retry becomes a
672
672
  // duplicate.
673
- expect(h.workflow.listChangeRequestsAuthoredBy).toHaveBeenCalledWith(ALI, { fresh: true });
673
+ expect(h.versionControl.listChangeRequestsAuthoredBy).toHaveBeenCalledWith(ALI, { fresh: true });
674
674
  });
675
675
 
676
676
  });
@@ -4,7 +4,7 @@ import {
4
4
  joinBranchFor,
5
5
  type AuthUser,
6
6
  type ChangeRequest,
7
- type IWorkflowService,
7
+ type IVersionControlService,
8
8
  } from '@bevel-software/platform-shared';
9
9
  import { type WorkspaceService } from '../../workspace/workspace.service.js';
10
10
  import type { IAccessControl } from '../../access/access-control.interface.js';
@@ -53,10 +53,10 @@ function makeHarness(byRef: Record<string, string>, holds: Record<string, unknow
53
53
  path === ACCESS_MD ? (byRef[ref] ?? null) : null,
54
54
  ),
55
55
  } as unknown as WorkspaceService;
56
- const workflow = {
56
+ const versionControl = {
57
57
  rejectChangeRequest: vi.fn(async () => ({ number: 7, state: 'closed' })),
58
58
  deleteBranch: vi.fn(async () => undefined),
59
- } as unknown as IWorkflowService;
59
+ } as unknown as IVersionControlService;
60
60
  // Nobody holds anything by default: every proposal stands on the file diff
61
61
  // alone, which is what these cases are about.
62
62
  const accessControl = {
@@ -67,8 +67,8 @@ function makeHarness(byRef: Record<string, string>, holds: Record<string, unknow
67
67
  ...holds,
68
68
  } as unknown as IAccessControl;
69
69
  return {
70
- svc: new JoinRequestsService(workspaceService, workflow, testKbContext(), accessControl),
71
- workflow,
70
+ svc: new JoinRequestsService(workspaceService, versionControl, testKbContext(), accessControl),
71
+ versionControl,
72
72
  workspaceService,
73
73
  accessControl,
74
74
  };
@@ -86,7 +86,7 @@ describe('JoinRequestsService.list', () => {
86
86
  expect(out).toHaveLength(1);
87
87
  expect(out[0]).toMatchObject({ number: 7, requesterName: 'Ali Baba' });
88
88
  expect(out[0].proposals.map((p) => p.label)).toEqual(['Ali Baba']);
89
- expect(h.workflow.rejectChangeRequest).not.toHaveBeenCalled();
89
+ expect(h.versionControl.rejectChangeRequest).not.toHaveBeenCalled();
90
90
  });
91
91
 
92
92
  it('SETTLES a request whose proposals have all landed: closes it, deletes the branch, omits it', async () => {
@@ -94,7 +94,7 @@ describe('JoinRequestsService.list', () => {
94
94
  const h = makeHarness(refs(PROPOSING_MD, PROPOSING_MD));
95
95
  const out = await h.svc.list('GTM', folderTarget(FOLDER), [cr()], ACTOR);
96
96
  expect(out).toEqual([]);
97
- expect(h.workflow.rejectChangeRequest).toHaveBeenCalledWith(
97
+ expect(h.versionControl.rejectChangeRequest).toHaveBeenCalledWith(
98
98
  7,
99
99
  ACTOR,
100
100
  'open',
@@ -105,7 +105,7 @@ describe('JoinRequestsService.list', () => {
105
105
  // branch could never silently break this.
106
106
  workspaceIdForBranch(DEFAULT_BRANCH),
107
107
  );
108
- expect(h.workflow.deleteBranch).toHaveBeenCalledWith(
108
+ expect(h.versionControl.deleteBranch).toHaveBeenCalledWith(
109
109
  workspaceIdForBranch(DEFAULT_BRANCH),
110
110
  joinBranchFor(ALI, 'GTM'),
111
111
  ACTOR,
@@ -121,12 +121,12 @@ describe('JoinRequestsService.list', () => {
121
121
  ACTOR,
122
122
  );
123
123
  expect(out).toEqual([]);
124
- expect(h.workflow.rejectChangeRequest).not.toHaveBeenCalled();
124
+ expect(h.versionControl.rejectChangeRequest).not.toHaveBeenCalled();
125
125
  });
126
126
 
127
127
  it('keeps listing when closing one request fails', async () => {
128
128
  const h = makeHarness(refs(PROPOSING_MD, PROPOSING_MD));
129
- (h.workflow.rejectChangeRequest as ReturnType<typeof vi.fn>).mockRejectedValue(
129
+ (h.versionControl.rejectChangeRequest as ReturnType<typeof vi.fn>).mockRejectedValue(
130
130
  new Error('gh down'),
131
131
  );
132
132
  const warn = vi.spyOn(console, 'warn').mockImplementation(() => {});
@@ -137,12 +137,12 @@ describe('JoinRequestsService.list', () => {
137
137
 
138
138
  it('still closes the request when the branch delete fails, and says so', async () => {
139
139
  const h = makeHarness(refs(PROPOSING_MD, PROPOSING_MD));
140
- (h.workflow.deleteBranch as ReturnType<typeof vi.fn>).mockRejectedValue(new Error('protected'));
140
+ (h.versionControl.deleteBranch as ReturnType<typeof vi.fn>).mockRejectedValue(new Error('protected'));
141
141
  const warn = vi.spyOn(console, 'warn').mockImplementation(() => {});
142
142
  // The request still settles (omitted from the list) — the leftover branch
143
143
  // is cosmetic, and the failure is logged rather than swallowed.
144
144
  await expect(h.svc.list('GTM', folderTarget(FOLDER), [cr()], ACTOR)).resolves.toEqual([]);
145
- expect(h.workflow.rejectChangeRequest).toHaveBeenCalled();
145
+ expect(h.versionControl.rejectChangeRequest).toHaveBeenCalled();
146
146
  expect(warn).toHaveBeenCalledWith(expect.stringContaining('could not delete'));
147
147
  warn.mockRestore();
148
148
  });
@@ -159,10 +159,10 @@ describe('JoinRequestsService.list', () => {
159
159
  [`origin/${joinBranchFor(ALI, 'Finance!')}`]: DEFAULT_MD,
160
160
  });
161
161
  await expect(h.svc.list('finance', folderTarget('Plugins/finance'), [other], ACTOR)).resolves.toEqual([]);
162
- expect(h.workflow.rejectChangeRequest).not.toHaveBeenCalled();
163
- expect(h.workflow.deleteBranch).not.toHaveBeenCalled();
162
+ expect(h.versionControl.rejectChangeRequest).not.toHaveBeenCalled();
163
+ expect(h.versionControl.deleteBranch).not.toHaveBeenCalled();
164
164
  await expect(h.svc.reconcile('finance', folderTarget('Plugins/finance'), other, ACTOR)).resolves.toBe(false);
165
- expect(h.workflow.rejectChangeRequest).not.toHaveBeenCalled();
165
+ expect(h.versionControl.rejectChangeRequest).not.toHaveBeenCalled();
166
166
  });
167
167
  });
168
168
 
@@ -170,14 +170,14 @@ describe('JoinRequestsService.reconcile', () => {
170
170
  it('settles and reports true once nothing is pending', async () => {
171
171
  const h = makeHarness(refs(PROPOSING_MD, PROPOSING_MD));
172
172
  await expect(h.svc.reconcile('GTM', folderTarget(FOLDER), cr(), ACTOR)).resolves.toBe(true);
173
- expect(h.workflow.rejectChangeRequest).toHaveBeenCalled();
174
- expect(h.workflow.deleteBranch).toHaveBeenCalled();
173
+ expect(h.versionControl.rejectChangeRequest).toHaveBeenCalled();
174
+ expect(h.versionControl.deleteBranch).toHaveBeenCalled();
175
175
  });
176
176
 
177
177
  it('leaves a request alone while proposals remain', async () => {
178
178
  const h = makeHarness(refs(PROPOSING_MD));
179
179
  await expect(h.svc.reconcile('GTM', folderTarget(FOLDER), cr(), ACTOR)).resolves.toBe(false);
180
- expect(h.workflow.rejectChangeRequest).not.toHaveBeenCalled();
180
+ expect(h.versionControl.rejectChangeRequest).not.toHaveBeenCalled();
181
181
  });
182
182
 
183
183
  it('refuses a change request that is not this plugin\'s join branch', async () => {
@@ -185,6 +185,6 @@ describe('JoinRequestsService.reconcile', () => {
185
185
  await expect(
186
186
  h.svc.reconcile('GTM', folderTarget(FOLDER), cr({ branch: 'ali/some-draft' }), ACTOR),
187
187
  ).resolves.toBe(false);
188
- expect(h.workflow.rejectChangeRequest).not.toHaveBeenCalled();
188
+ expect(h.versionControl.rejectChangeRequest).not.toHaveBeenCalled();
189
189
  });
190
190
  });
@@ -4,7 +4,7 @@ import {
4
4
  joinBranchFor,
5
5
  type AuthUser,
6
6
  type ChangeRequest,
7
- type IWorkflowService,
7
+ type IVersionControlService,
8
8
  } from '@bevel-software/platform-shared';
9
9
  import { type WorkspaceService } from '../../workspace/workspace.service.js';
10
10
  import type { IAccessControl } from '../../access/access-control.interface.js';
@@ -82,10 +82,10 @@ function makeHarness(
82
82
  return text;
83
83
  }),
84
84
  } as unknown as WorkspaceService;
85
- const workflow = {
85
+ const versionControl = {
86
86
  rejectChangeRequest: vi.fn(async () => ({ number: 7, state: 'closed' })),
87
87
  deleteBranch: vi.fn(async () => undefined),
88
- } as unknown as IWorkflowService;
88
+ } as unknown as IVersionControlService;
89
89
  const asked: { verb: string; path: string; email: string }[] = [];
90
90
  const answer = (verb: 'canRead' | 'canWrite' | 'canOwner' | 'canDownload') =>
91
91
  vi.fn(async (_ws: string, email: string, path: string) => {
@@ -99,8 +99,8 @@ function makeHarness(
99
99
  canDownload: answer('canDownload'),
100
100
  } as unknown as IAccessControl;
101
101
  return {
102
- svc: new JoinRequestsService(workspaceService, workflow, testKbContext(), accessControl),
103
- workflow,
102
+ svc: new JoinRequestsService(workspaceService, versionControl, testKbContext(), accessControl),
103
+ versionControl,
104
104
  asked,
105
105
  fetches,
106
106
  };
@@ -112,8 +112,8 @@ describe('a request settles once the person holds what it asked for', () => {
112
112
  // so an owner grant made in the dialog retires the Can edit request.
113
113
  const h = makeHarness(ASKS_WRITE, { canWrite: true });
114
114
  await expect(h.svc.list('GTM', folderTarget(FOLDER), [cr()], ACTOR)).resolves.toEqual([]);
115
- expect(h.workflow.rejectChangeRequest).toHaveBeenCalled();
116
- expect(h.workflow.deleteBranch).toHaveBeenCalledWith(expect.anything(), BRANCH, ACTOR);
115
+ expect(h.versionControl.rejectChangeRequest).toHaveBeenCalled();
116
+ expect(h.versionControl.deleteBranch).toHaveBeenCalledWith(expect.anything(), BRANCH, ACTOR);
117
117
  });
118
118
 
119
119
  it('asks about the ITEM, not its rules file — a folder request is about the folder', async () => {
@@ -134,7 +134,7 @@ describe('a request settles once the person holds what it asked for', () => {
134
134
  const out = await h.svc.list('GTM', folderTarget(FOLDER), [cr()], ACTOR);
135
135
  expect(out).toHaveLength(1);
136
136
  expect(out[0].proposals.map((p) => p.verb)).toEqual(['write']);
137
- expect(h.workflow.rejectChangeRequest).not.toHaveBeenCalled();
137
+ expect(h.versionControl.rejectChangeRequest).not.toHaveBeenCalled();
138
138
  });
139
139
 
140
140
  it('keeps today\'s literal rule for a proposal naming a ROLE', async () => {
@@ -145,7 +145,7 @@ describe('a request settles once the person holds what it asked for', () => {
145
145
  const out = await h.svc.list('GTM', folderTarget(FOLDER), [cr()], ACTOR);
146
146
  expect(out).toHaveLength(1);
147
147
  expect(out[0].proposals.map((p) => p.label)).toEqual(['role/Analysts']);
148
- expect(h.workflow.rejectChangeRequest).not.toHaveBeenCalled();
148
+ expect(h.versionControl.rejectChangeRequest).not.toHaveBeenCalled();
149
149
  });
150
150
 
151
151
  it('leaves the request open when the resolver cannot answer', async () => {
@@ -155,7 +155,7 @@ describe('a request settles once the person holds what it asked for', () => {
155
155
  const warn = vi.spyOn(console, 'warn').mockImplementation(() => {});
156
156
  const out = await h.svc.list('GTM', folderTarget(FOLDER), [cr()], ACTOR);
157
157
  expect(out).toHaveLength(1);
158
- expect(h.workflow.rejectChangeRequest).not.toHaveBeenCalled();
158
+ expect(h.versionControl.rejectChangeRequest).not.toHaveBeenCalled();
159
159
  warn.mockRestore();
160
160
  });
161
161
  });
@@ -182,27 +182,27 @@ describe('a branch that cannot be read settles nothing', () => {
182
182
  expect(h.fetches.some((f) => f.force)).toBe(true);
183
183
  expect(out).toHaveLength(1);
184
184
  expect(out[0].proposals.map((p) => p.verb)).toEqual(['write']);
185
- expect(h.workflow.rejectChangeRequest).not.toHaveBeenCalled();
185
+ expect(h.versionControl.rejectChangeRequest).not.toHaveBeenCalled();
186
186
  });
187
187
 
188
188
  it('leaves the request open — and unclosed — when the branch still cannot be read', async () => {
189
189
  const h = makeHarness(undefined);
190
190
  await expect(h.svc.list('GTM', folderTarget(FOLDER), [cr()], ACTOR)).resolves.toEqual([]);
191
- expect(h.workflow.rejectChangeRequest).not.toHaveBeenCalled();
192
- expect(h.workflow.deleteBranch).not.toHaveBeenCalled();
191
+ expect(h.versionControl.rejectChangeRequest).not.toHaveBeenCalled();
192
+ expect(h.versionControl.deleteBranch).not.toHaveBeenCalled();
193
193
  });
194
194
 
195
195
  it('reconcile refuses to settle one it could not read', async () => {
196
196
  const h = makeHarness(undefined);
197
197
  await expect(h.svc.reconcile('GTM', folderTarget(FOLDER), cr(), ACTOR)).resolves.toBe(false);
198
- expect(h.workflow.rejectChangeRequest).not.toHaveBeenCalled();
198
+ expect(h.versionControl.rejectChangeRequest).not.toHaveBeenCalled();
199
199
  });
200
200
 
201
201
  it('still settles a branch it DID read that proposes nothing', async () => {
202
202
  // The distinction has to cut both ways, or nothing would ever retire.
203
203
  const h = makeHarness(DEFAULT_MD);
204
204
  await expect(h.svc.reconcile('GTM', folderTarget(FOLDER), cr(), ACTOR)).resolves.toBe(true);
205
- expect(h.workflow.rejectChangeRequest).toHaveBeenCalled();
205
+ expect(h.versionControl.rejectChangeRequest).toHaveBeenCalled();
206
206
  });
207
207
  });
208
208
 
@@ -227,7 +227,7 @@ describe('a person the rules explicitly deny', () => {
227
227
  const out = await h.svc.list('GTM', folderTarget(FOLDER), [cr()], ACTOR);
228
228
  expect(out).toHaveLength(1);
229
229
  expect(out[0].proposals.map((p) => p.verb)).toEqual(['write']);
230
- expect(h.workflow.rejectChangeRequest).not.toHaveBeenCalled();
230
+ expect(h.versionControl.rejectChangeRequest).not.toHaveBeenCalled();
231
231
  });
232
232
 
233
233
  it('retires it once the grant has landed and the resolver says they write', async () => {
@@ -254,8 +254,8 @@ describe('a stale ref must not be mistaken for a finished request', () => {
254
254
  const h = staleHarness();
255
255
  const out = await h.svc.list('GTM', folderTarget(FOLDER), [cr()], ACTOR);
256
256
 
257
- expect(h.workflow.rejectChangeRequest).not.toHaveBeenCalled();
258
- expect(h.workflow.deleteBranch).not.toHaveBeenCalled();
257
+ expect(h.versionControl.rejectChangeRequest).not.toHaveBeenCalled();
258
+ expect(h.versionControl.deleteBranch).not.toHaveBeenCalled();
259
259
  // And having fetched, it reports the proposal rather than nothing.
260
260
  expect(out).toHaveLength(1);
261
261
  expect(out[0].proposals.map((p) => p.verb)).toEqual(['write']);
@@ -264,7 +264,7 @@ describe('a stale ref must not be mistaken for a finished request', () => {
264
264
  it('reconcile refuses to settle it either', async () => {
265
265
  const h = staleHarness();
266
266
  await expect(h.svc.reconcile('GTM', folderTarget(FOLDER), cr(), ACTOR)).resolves.toBe(false);
267
- expect(h.workflow.rejectChangeRequest).not.toHaveBeenCalled();
267
+ expect(h.versionControl.rejectChangeRequest).not.toHaveBeenCalled();
268
268
  });
269
269
 
270
270
  it('confirms with a FORCED fetch before closing anything', async () => {
@@ -272,7 +272,7 @@ describe('a stale ref must not be mistaken for a finished request', () => {
272
272
  await h.svc.list('GTM', folderTarget(FOLDER), [cr()], ACTOR);
273
273
  expect(h.fetches.some((f) => f.force)).toBe(true);
274
274
  // Genuinely finished — the confirming read agrees, so it closes.
275
- expect(h.workflow.rejectChangeRequest).toHaveBeenCalled();
275
+ expect(h.versionControl.rejectChangeRequest).toHaveBeenCalled();
276
276
  });
277
277
  });
278
278
 
@@ -318,10 +318,10 @@ describe('a request whose target is a FILE', () => {
318
318
  return text;
319
319
  }),
320
320
  } as unknown as WorkspaceService;
321
- const workflow = {
321
+ const versionControl = {
322
322
  rejectChangeRequest: vi.fn(async () => ({ number: 7, state: 'closed' })),
323
323
  deleteBranch: vi.fn(async () => undefined),
324
- } as unknown as IWorkflowService;
324
+ } as unknown as IVersionControlService;
325
325
  const answer = (verb: string) => vi.fn(async () => holds[verb] ?? false);
326
326
  const accessControl = {
327
327
  canRead: answer('canRead'),
@@ -330,8 +330,8 @@ describe('a request whose target is a FILE', () => {
330
330
  canDownload: answer('canDownload'),
331
331
  } as unknown as IAccessControl;
332
332
  return {
333
- svc: new JoinRequestsService(workspaceService, workflow, testKbContext(), accessControl),
334
- workflow,
333
+ svc: new JoinRequestsService(workspaceService, versionControl, testKbContext(), accessControl),
334
+ versionControl,
335
335
  workspaceService,
336
336
  };
337
337
  }
@@ -342,8 +342,8 @@ describe('a request whose target is a FILE', () => {
342
342
 
343
343
  expect(out).toHaveLength(1);
344
344
  expect(out[0].proposals.map((p) => p.verb)).toEqual(['write']);
345
- expect(h.workflow.rejectChangeRequest).not.toHaveBeenCalled();
346
- expect(h.workflow.deleteBranch).not.toHaveBeenCalled();
345
+ expect(h.versionControl.rejectChangeRequest).not.toHaveBeenCalled();
346
+ expect(h.versionControl.deleteBranch).not.toHaveBeenCalled();
347
347
  });
348
348
 
349
349
  it('reads the FILE itself, never an access.md beside it', async () => {