@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
@@ -1,14 +1,14 @@
1
1
  import { describe, it, expect, vi, afterEach } from 'vitest';
2
2
 
3
3
  import { toHttpError, requireNonEmptyString } from '../admin-route-helpers.js';
4
- import { WorkflowDomainError } from '../../../shared/domain-errors.js';
4
+ import { VersionControlDomainError } from '../../../shared/domain-errors.js';
5
5
  import { AccessMutationError } from '../access-mutation.service.js';
6
6
 
7
7
  describe('toHttpError — the shared access-family error shape', () => {
8
8
  afterEach(() => vi.restoreAllMocks());
9
9
 
10
10
  it('a sub-500 domain error keeps its status, message, and payload', () => {
11
- const err = new WorkflowDomainError('groups are being edited', 409, { kind: 'idp-mode' });
11
+ const err = new VersionControlDomainError('groups are being edited', 409, { kind: 'idp-mode' });
12
12
  expect(toHttpError(err, 'test')).toEqual({
13
13
  status: 409,
14
14
  body: { error: 'groups are being edited', kind: 'idp-mode' },
@@ -37,7 +37,7 @@ describe('toHttpError — the shared access-family error shape', () => {
37
37
  });
38
38
 
39
39
  it("a payload key named 'error' cannot overwrite the client-facing message", () => {
40
- const err = new WorkflowDomainError('the real message', 422, { error: 'spoofed', kind: 'x' });
40
+ const err = new VersionControlDomainError('the real message', 422, { error: 'spoofed', kind: 'x' });
41
41
  const { body } = toHttpError(err, 'test');
42
42
  expect(body.error).toBe('the real message');
43
43
  expect(body.kind).toBe('x');
@@ -54,8 +54,8 @@ describe('requireNonEmptyString', () => {
54
54
  } catch (err) {
55
55
  caught = err;
56
56
  }
57
- expect(caught).toBeInstanceOf(WorkflowDomainError);
58
- expect((caught as WorkflowDomainError).status).toBe(400);
57
+ expect(caught).toBeInstanceOf(VersionControlDomainError);
58
+ expect((caught as VersionControlDomainError).status).toBe(400);
59
59
  }
60
60
  });
61
61
  });
@@ -5,7 +5,7 @@ import path from 'node:path';
5
5
  import os from 'node:os';
6
6
 
7
7
  import type { WorkspaceService } from '../../workspace/workspace.service.js';
8
- import type { WorkflowService } from '../../workflow/workflow.service.js';
8
+ import type { VersionControlService } from '../../version-control/version-control.service.js';
9
9
  import type { AuthUser, FileTreeEntry } from '@bevel-software/platform-shared';
10
10
  import { DEFAULT_BRANCH } from '@bevel-software/platform-shared';
11
11
  import { AccessControlService } from '../access-control.service.js';
@@ -61,7 +61,7 @@ function stubWorkspace(workspaceDir: string): WorkspaceService {
61
61
  } as unknown as WorkspaceService;
62
62
  }
63
63
 
64
- function stubWorkflow() {
64
+ function stubVersionControl() {
65
65
  const commits: { summary: string }[] = [];
66
66
  // Strict per-path locks — a live row is contended even for the same user,
67
67
  // exactly like FileLockService (nesting bugs must fail here too).
@@ -88,7 +88,7 @@ function stubWorkflow() {
88
88
  commits.push({ summary });
89
89
  return {} as unknown;
90
90
  },
91
- } as unknown as WorkflowService;
91
+ } as unknown as VersionControlService;
92
92
  return { svc, commits };
93
93
  }
94
94
 
@@ -105,11 +105,11 @@ describe('GroupsAdminService', () => {
105
105
  await write(repo, 'groups.yaml', GROUPS);
106
106
  await write(repo, 'access.md', '---\nwrite:\n - Admin\n---\n');
107
107
  const workspace = stubWorkspace(root);
108
- const workflow = stubWorkflow();
109
- commits = workflow.commits;
108
+ const versionControl = stubVersionControl();
109
+ commits = versionControl.commits;
110
110
  service = new GroupsAdminService(
111
111
  workspace,
112
- workflow.svc,
112
+ versionControl.svc,
113
113
  new AccessControlService(workspace as never, KB, new NodeFs()),
114
114
  new NodeFs(),
115
115
  KB,
@@ -290,18 +290,18 @@ describe('GroupsAdminService', () => {
290
290
  function gatedService(): { gated: GroupsAdminService; gatedCommits: { summary: string }[] } {
291
291
  const workspace = stubWorkspace(root);
292
292
  const access = new AccessControlService(workspace as never, KB, new NodeFs());
293
- const workflow = stubWorkflow();
294
- const svc = workflow.svc as unknown as Record<string, unknown>;
293
+ const versionControl = stubVersionControl();
294
+ const svc = versionControl.svc as unknown as Record<string, unknown>;
295
295
  svc.commitChanges = async (ws: string, user: AuthUser, summary: string, onlyPaths: string[] = []) => {
296
296
  const rel = onlyPaths.map((p) => p.slice(KB.length + 1));
297
297
  const verdicts = await access.canWriteBatch(ws, user.email, rel);
298
298
  const denied = rel.find((p) => verdicts.get(p) !== true);
299
299
  if (denied) throw new AccessDeniedError({ path: denied, eligibleRoles: [], eligibleUsers: [] });
300
- workflow.commits.push({ summary });
300
+ versionControl.commits.push({ summary });
301
301
  return {} as unknown;
302
302
  };
303
- const gated = new GroupsAdminService(workspace, workflow.svc, access, new NodeFs(), KB, () => DEFAULT_BRANCH);
304
- return { gated, gatedCommits: workflow.commits };
303
+ const gated = new GroupsAdminService(workspace, versionControl.svc, access, new NodeFs(), KB, () => DEFAULT_BRANCH);
304
+ return { gated, gatedCommits: versionControl.commits };
305
305
  }
306
306
 
307
307
  const SARA_ACCESS = '---\nread:\n - deny everyone\n - Sara <sara@x.io>\nwrite:\n - Sara <sara@x.io>\n---\n';
@@ -388,13 +388,13 @@ describe('GroupsAdminService', () => {
388
388
  it('rollback of a failed commit DELETES a file this edit created (no empty artifact)', async () => {
389
389
  await fs.rm(path.join(repo, 'groups.yaml'));
390
390
  const workspace = stubWorkspace(root);
391
- const workflow = stubWorkflow();
392
- (workflow.svc as unknown as { commitChanges: unknown }).commitChanges = async () => {
391
+ const versionControl = stubVersionControl();
392
+ (versionControl.svc as unknown as { commitChanges: unknown }).commitChanges = async () => {
393
393
  throw new Error('commit exploded');
394
394
  };
395
395
  const svc = new GroupsAdminService(
396
396
  workspace,
397
- workflow.svc,
397
+ versionControl.svc,
398
398
  new AccessControlService(workspace as never, KB, new NodeFs()),
399
399
  new NodeFs(),
400
400
  KB,
@@ -408,8 +408,8 @@ describe('GroupsAdminService', () => {
408
408
 
409
409
  it('a path whose restore failed is released WITHOUT commit (discard, never partial publish)', async () => {
410
410
  const workspace = stubWorkspace(root);
411
- const workflow = stubWorkflow();
412
- const wf = workflow.svc as unknown as {
411
+ const versionControl = stubVersionControl();
412
+ const wf = versionControl.svc as unknown as {
413
413
  commitChanges: (...a: unknown[]) => Promise<unknown>;
414
414
  releaseLock: (...a: unknown[]) => Promise<void>;
415
415
  releaseLockNoCommit: (...a: unknown[]) => Promise<void>;
@@ -419,8 +419,8 @@ describe('GroupsAdminService', () => {
419
419
  };
420
420
  const committingReleases: string[] = [];
421
421
  const discardingReleases: string[] = [];
422
- const origRelease = wf.releaseLock.bind(workflow.svc);
423
- const origNoCommit = wf.releaseLockNoCommit.bind(workflow.svc);
422
+ const origRelease = wf.releaseLock.bind(versionControl.svc);
423
+ const origNoCommit = wf.releaseLockNoCommit.bind(versionControl.svc);
424
424
  wf.releaseLock = async (...a) => {
425
425
  committingReleases.push(a[2] as string);
426
426
  return origRelease(...a);
@@ -441,7 +441,7 @@ describe('GroupsAdminService', () => {
441
441
  };
442
442
  const svc = new GroupsAdminService(
443
443
  workspace,
444
- workflow.svc,
444
+ versionControl.svc,
445
445
  new AccessControlService(workspace as never, KB, new NodeFs()),
446
446
  new NodeFs(),
447
447
  KB,
@@ -468,11 +468,11 @@ describe('GroupsAdminService', () => {
468
468
  // away. Checked under the lock, the just-created file is seen and retired.
469
469
  await fs.rm(path.join(repo, 'groups.yaml'));
470
470
  const workspace = stubWorkspace(root);
471
- const workflow = stubWorkflow();
472
- const wf = workflow.svc as unknown as {
471
+ const versionControl = stubVersionControl();
472
+ const wf = versionControl.svc as unknown as {
473
473
  acquireLock: (w: string, b: string, p: string, u: AuthUser) => Promise<unknown>;
474
474
  };
475
- const origAcquire = wf.acquireLock.bind(workflow.svc);
475
+ const origAcquire = wf.acquireLock.bind(versionControl.svc);
476
476
  wf.acquireLock = async (w, b, p, u) => {
477
477
  if (p === `${KB}/groups.yaml`) {
478
478
  await write(repo, 'groups.yaml', 'groups:\n Late Team:\n - late@x.io\n');
@@ -481,7 +481,7 @@ describe('GroupsAdminService', () => {
481
481
  };
482
482
  const svc = new GroupsAdminService(
483
483
  workspace,
484
- workflow.svc,
484
+ versionControl.svc,
485
485
  new AccessControlService(workspace as never, KB, new NodeFs()),
486
486
  new NodeFs(),
487
487
  KB,
@@ -489,7 +489,7 @@ describe('GroupsAdminService', () => {
489
489
  );
490
490
  expect(await svc.retireManualGroups(ADMIN)).toBe(true);
491
491
  await expect(groupsYaml()).rejects.toMatchObject({ code: 'ENOENT' });
492
- expect(workflow.commits.some((c) => c.summary.includes('Retire manual groups'))).toBe(true);
492
+ expect(versionControl.commits.some((c) => c.summary.includes('Retire manual groups'))).toBe(true);
493
493
  });
494
494
  });
495
495
 
@@ -537,7 +537,7 @@ describe('groups roster referencedBy — the mirror of the roles roster attribut
537
537
  const workspace = stubWorkspace(root2);
538
538
  const svc = new GroupsAdminService(
539
539
  workspace,
540
- stubWorkflow().svc,
540
+ stubVersionControl().svc,
541
541
  new AccessControlService(workspace as never, KB, new NodeFs()),
542
542
  new NodeFs(),
543
543
  KB,
@@ -582,7 +582,7 @@ describe('groups roster referencedBy — the mirror of the roles roster attribut
582
582
  await write(repo2, 'secret/Plan.md', '---\nread:\n - deny everyone\n - Reviewer\n---\n# Plan\n');
583
583
  const workspace = stubWorkspace(root2);
584
584
  const access = new AccessControlService(workspace as never, KB, new NodeFs());
585
- const svc = new GroupsAdminService(workspace, stubWorkflow().svc, access, new NodeFs(), KB, () => DEFAULT_BRANCH);
585
+ const svc = new GroupsAdminService(workspace, stubVersionControl().svc, access, new NodeFs(), KB, () => DEFAULT_BRANCH);
586
586
  const rowsFor = async (email: string) =>
587
587
  (await svc.getRoster(email)).groups.find((g) => g.canonical === 'reviewer')!.bareNameResolvesToRole;
588
588
 
@@ -619,7 +619,7 @@ describe('groups roster referencedBy — the mirror of the roles roster attribut
619
619
  const workspace = stubWorkspace(root2);
620
620
  const svc = new GroupsAdminService(
621
621
  workspace,
622
- stubWorkflow().svc,
622
+ stubVersionControl().svc,
623
623
  new AccessControlService(workspace as never, KB, new NodeFs()),
624
624
  new NodeFs(),
625
625
  KB,
@@ -6,16 +6,17 @@ import os from 'node:os';
6
6
  import express from 'express';
7
7
  import { describe, it, expect, beforeEach, afterEach } from 'vitest';
8
8
 
9
- import { NodeFs } from '../../kb-fs/node-fs.js';
9
+ // Another module's implementation is never constructed here: the real disk,
10
+ // the admin check and the account routes come from the root fixtures that
11
+ // stand in for the composition root, as the entries hold contracts only.
12
+ import { realDisk } from '../../../__tests__/real-disk.js';
13
+ import { realAccountRoutes, realAdminAccess } from '../../../__tests__/account-admin.js';
10
14
  import { AccessControlService } from '../access-control.service.js';
11
15
  import { RolesAdminService } from '../roles-admin.service.js';
12
- import { AdminAccessService } from '../../admin/admin-access.service.js';
13
- import { createAccountRoutes } from '../../auth/account.routes.js';
16
+ import type { AuthService, IAccountErasureService } from '../../auth/index.js';
14
17
  import { workspaceIdForBranch } from '../../../shared/workspace-id.js';
15
- import type { WorkspaceService } from '../../workspace/workspace.service.js';
16
- import type { WorkflowService } from '../../workflow/workflow.service.js';
17
- import type { AuthService } from '../../auth/auth.service.js';
18
- import type { IAccountErasureService } from '../../auth/account-erasure.service.js';
18
+ import type { WorkspaceService } from '../../workspace/index.js';
19
+ import type { VersionControlService } from '../../version-control/index.js';
19
20
  import type { AuthUser } from '@bevel-software/platform-shared';
20
21
  import { DEFAULT_BRANCH } from '@bevel-software/platform-shared';
21
22
 
@@ -73,7 +74,7 @@ function stubWorkspace(workspaceDir: string): WorkspaceService {
73
74
  }
74
75
 
75
76
  /** Lock/commit stub: the real LockingFilesystem writes the bytes to disk. */
76
- function stubWorkflow(): WorkflowService {
77
+ function stubVersionControl(): VersionControlService {
77
78
  const locks = new Map<string, AuthUser>();
78
79
  const row = (h: AuthUser) => ({ holderUserId: h.id, holderName: h.name });
79
80
  return {
@@ -90,7 +91,7 @@ function stubWorkflow(): WorkflowService {
90
91
  releaseLock: async (_w: string, _b: string, p: string) => void locks.delete(p),
91
92
  releaseLockNoCommit: async (_w: string, _b: string, p: string) => void locks.delete(p),
92
93
  commitChanges: async () => ({}) as unknown,
93
- } as unknown as WorkflowService;
94
+ } as unknown as VersionControlService;
94
95
  }
95
96
 
96
97
  function close(s: Server): Promise<void> {
@@ -126,11 +127,11 @@ describe('SECURITY: Admin-role removal takes effect on the next request', () =>
126
127
  // how the composition root wires it. A second instance would have its own
127
128
  // cache and could pass this test while production still served stale
128
129
  // verdicts, which is the failure mode worth guarding.
129
- access = new AccessControlService(ws, KB, new NodeFs(), [OWNER]);
130
- rolesAdmin = new RolesAdminService(ws, stubWorkflow(), access, new NodeFs(), KB, () => DEFAULT_BRANCH, undefined, [
130
+ access = new AccessControlService(ws, KB, realDisk(), [OWNER]);
131
+ rolesAdmin = new RolesAdminService(ws, stubVersionControl(), access, realDisk(), KB, () => DEFAULT_BRANCH, undefined, [
131
132
  OWNER,
132
133
  ]);
133
- const adminAccess = new AdminAccessService(access, ws, DEFAULT_BRANCH, [OWNER]);
134
+ const adminAccess = realAdminAccess(access, ws, DEFAULT_BRANCH, [OWNER]);
134
135
 
135
136
  const authService = {
136
137
  listAccounts: async () => [],
@@ -146,7 +147,7 @@ describe('SECURITY: Admin-role removal takes effect on the next request', () =>
146
147
  (req as unknown as { userEmail?: string }).userEmail = req.header('x-test-email') ?? undefined;
147
148
  next();
148
149
  });
149
- app.use('/api', createAccountRoutes(authService, adminAccess, erasure, { runAccountInvited: async () => [] }));
150
+ app.use('/api', realAccountRoutes(authService, adminAccess, erasure, { runAccountInvited: async () => [], runAccountDeactivated: async () => [] }));
150
151
  server = await new Promise<Server>((resolve) => {
151
152
  const s = app.listen(0, () => resolve(s));
152
153
  });
@@ -5,9 +5,9 @@ import path from 'node:path';
5
5
  import os from 'node:os';
6
6
 
7
7
  import type { WorkspaceService } from '../../workspace/workspace.service.js';
8
- import type { WorkflowService } from '../../workflow/workflow.service.js';
9
- import type { WorkflowEventBus } from '../../workflow/event-bus.js';
10
- import type { FileTreeEntry, WorkflowEventPayload } from '@bevel-software/platform-shared';
8
+ import type { VersionControlService } from '../../version-control/version-control.service.js';
9
+ import type { VersionControlEventBus } from '../../version-control/event-bus.js';
10
+ import type { FileTreeEntry, VersionControlEventPayload } from '@bevel-software/platform-shared';
11
11
  import { workspaceIdForBranch } from '../../../shared/workspace-id.js';
12
12
  import { AccessControlService } from '../access-control.service.js';
13
13
  import { RolesAdminService } from '../roles-admin.service.js';
@@ -80,7 +80,7 @@ function stubWorkspace(workspaceDir: string): WorkspaceService {
80
80
  }
81
81
 
82
82
  /**
83
- * WorkflowService stub backed by the real temp repo. Models the two write paths
83
+ * VersionControlService stub backed by the real temp repo. Models the two write paths
84
84
  * the service uses:
85
85
  * - Single-file ops go through a real LockingFilesystem, which calls
86
86
  * acquireLock → (LocalFilesystem writes to disk) → releaseLock. We track the
@@ -91,7 +91,7 @@ function stubWorkspace(workspaceDir: string): WorkspaceService {
91
91
  * (non-deferred) atomic write straight to the repo. Records commits so tests
92
92
  * can assert one-per-op.
93
93
  */
94
- function stubWorkflow() {
94
+ function stubVersionControl() {
95
95
  const commits: { summary: string }[] = [];
96
96
  const resets: string[] = [];
97
97
  /** Per-path lock rows with STRICT acquire — mirrors FileLockService: a
@@ -133,19 +133,19 @@ function stubWorkflow() {
133
133
  resetToRemote: async (_ws: string, branch: string) => {
134
134
  resets.push(branch);
135
135
  },
136
- } as unknown as WorkflowService;
136
+ } as unknown as VersionControlService;
137
137
  return { svc, commits, resets };
138
138
  }
139
139
 
140
140
  /** Event bus stub that records every emitted payload for assertions. */
141
141
  function stubEventBus() {
142
- const events: WorkflowEventPayload[] = [];
142
+ const events: VersionControlEventPayload[] = [];
143
143
  const bus = {
144
- emit: (payload: WorkflowEventPayload) => {
144
+ emit: (payload: VersionControlEventPayload) => {
145
145
  events.push(payload);
146
146
  return {} as unknown;
147
147
  },
148
- } as unknown as WorkflowEventBus;
148
+ } as unknown as VersionControlEventBus;
149
149
  return { bus, events };
150
150
  }
151
151
 
@@ -154,7 +154,7 @@ describe('RolesAdminService', () => {
154
154
  let repo: string;
155
155
  let access: AccessControlService;
156
156
  let ws: WorkspaceService;
157
- let workflow: ReturnType<typeof stubWorkflow>;
157
+ let versionControl: ReturnType<typeof stubVersionControl>;
158
158
  let bus: ReturnType<typeof stubEventBus>;
159
159
  let svc: RolesAdminService;
160
160
 
@@ -169,9 +169,9 @@ describe('RolesAdminService', () => {
169
169
  await write(repo, 'roles.yaml', ROLES);
170
170
  ws = stubWorkspace(workspaceDir);
171
171
  access = new AccessControlService(ws, KB, new NodeFs());
172
- workflow = stubWorkflow();
172
+ versionControl = stubVersionControl();
173
173
  bus = stubEventBus();
174
- svc = new RolesAdminService(ws, workflow.svc, access, new NodeFs(), KB, () => DEFAULT_BRANCH, bus.bus, [
174
+ svc = new RolesAdminService(ws, versionControl.svc, access, new NodeFs(), KB, () => DEFAULT_BRANCH, bus.bus, [
175
175
  'recovery-admin@example.com',
176
176
  ]);
177
177
  });
@@ -193,7 +193,7 @@ describe('RolesAdminService', () => {
193
193
  // `DEFAULT_BRANCH` and froze it — every roles route then failed branch
194
194
  // validation with `Invalid branch name "": empty name` until a restart.
195
195
  let branch = '';
196
- const late = new RolesAdminService(ws, workflow.svc, access, new NodeFs(), KB, () => branch, bus.bus);
196
+ const late = new RolesAdminService(ws, versionControl.svc, access, new NodeFs(), KB, () => branch, bus.bus);
197
197
  branch = DEFAULT_BRANCH;
198
198
  const roster = await late.getRoster(ADMIN.email);
199
199
  expect(roster.map((r) => r.canonical)).toEqual(['admin', 'sales']);
@@ -225,7 +225,7 @@ describe('RolesAdminService', () => {
225
225
 
226
226
  // Recovery syncs the clone to origin's default branch BEFORE writing, so the
227
227
  // restoring commit fast-forwards on push instead of diverging.
228
- expect(workflow.resets).toEqual([DEFAULT_BRANCH]);
228
+ expect(versionControl.resets).toEqual([DEFAULT_BRANCH]);
229
229
  // Corrupted bytes parked verbatim in old-roles.yaml.
230
230
  expect(await fs.readFile(path.join(repo, 'old-roles.yaml'), 'utf-8')).toBe(corrupt);
231
231
  // roles.yaml restored to a parseable default with an Admin role.
@@ -257,7 +257,7 @@ describe('RolesAdminService', () => {
257
257
  const corrupt = 'roles:\n Admin:\n - a@x.eu\n Admin:\n - b@x.eu\n';
258
258
  await write(repo, 'roles.yaml', corrupt);
259
259
  access.invalidate(WS);
260
- const adminless = new RolesAdminService(ws, workflow.svc, access, new NodeFs(), KB, () => DEFAULT_BRANCH, bus.bus);
260
+ const adminless = new RolesAdminService(ws, versionControl.svc, access, new NodeFs(), KB, () => DEFAULT_BRANCH, bus.bus);
261
261
  // 409, not 500: the route helper hides >=500 bodies behind a generic
262
262
  // message, and this break-glass refusal must reach the operator verbatim.
263
263
  await expect(adminless.recover(ADMIN)).rejects.toMatchObject({
@@ -298,9 +298,9 @@ describe('RolesAdminService', () => {
298
298
  it('addMember persists + is idempotent', async () => {
299
299
  await svc.addMember(ADMIN, 'sales', 'New@example.com');
300
300
  expect(await readRoles()).toContain('new@example.com');
301
- const before = workflow.commits.length;
301
+ const before = versionControl.commits.length;
302
302
  await svc.addMember(ADMIN, 'sales', 'new@example.com'); // duplicate → no commit
303
- expect(workflow.commits.length).toBe(before);
303
+ expect(versionControl.commits.length).toBe(before);
304
304
  });
305
305
 
306
306
  it('removeMember refuses to empty the Admin role', async () => {
@@ -359,7 +359,7 @@ describe('RolesAdminService', () => {
359
359
  // — no commit, roles.yaml byte-for-byte unchanged, admin status intact. This
360
360
  // catches a regression that would write/commit before validating.
361
361
  const before = await readRoles();
362
- const commitsBefore = workflow.commits.length;
362
+ const commitsBefore = versionControl.commits.length;
363
363
  const realValidate = access.validateRolesYaml.bind(access);
364
364
  access.validateRolesYaml = () => ({ ok: false, errors: ['forced parse failure'] });
365
365
  try {
@@ -367,21 +367,21 @@ describe('RolesAdminService', () => {
367
367
  } finally {
368
368
  access.validateRolesYaml = realValidate;
369
369
  }
370
- expect(workflow.commits.length).toBe(commitsBefore); // nothing committed
370
+ expect(versionControl.commits.length).toBe(commitsBefore); // nothing committed
371
371
  expect(await readRoles()).toBe(before); // file untouched
372
372
  expect(await access.canWrite(WS, 'razvan@bevel.software', 'roles.yaml')).toBe(true);
373
373
  });
374
374
 
375
375
  it('a post-commit push failure does NOT revert the landed edit (saved; retried later)', async () => {
376
- // workflowService.commitChanges throwing PushNeedsAgentResolutionError
376
+ // versionControlService.commitChanges throwing PushNeedsAgentResolutionError
377
377
  // means the COMMIT landed and only the push needs help. The old twins
378
378
  // restored pre-edit bytes here — publishing a compensating revert of a
379
379
  // landed commit. The shared helper must keep the new bytes and surface
380
380
  // the typed 409 as-is.
381
- const failing = workflow.svc as unknown as {
381
+ const failing = versionControl.svc as unknown as {
382
382
  commitChanges: (...args: unknown[]) => Promise<unknown>;
383
383
  };
384
- const realCommit = failing.commitChanges.bind(workflow.svc);
384
+ const realCommit = failing.commitChanges.bind(versionControl.svc);
385
385
  failing.commitChanges = async (...args: unknown[]) => {
386
386
  await realCommit(...args); // the commit records — it "landed"
387
387
  throw new PushNeedsAgentResolutionError(DEFAULT_BRANCH, 'roles.yaml', 'rejected', 'conflict');
@@ -401,7 +401,7 @@ describe('RolesAdminService', () => {
401
401
  it('concurrent edit is serialized — a mutation 409s while another admin holds the lock', async () => {
402
402
  // Another admin is mid-edit (holds the roles.yaml lock). The getLock
403
403
  // pre-check sees a different holder and refuses with a friendly 409.
404
- await workflow.svc.acquireLock(WS, DEFAULT_BRANCH, `${KB}/roles.yaml`, OTHER_ADMIN);
404
+ await versionControl.svc.acquireLock(WS, DEFAULT_BRANCH, `${KB}/roles.yaml`, OTHER_ADMIN);
405
405
  await expect(svc.addMember(ADMIN, 'sales', 'x@example.com')).rejects.toMatchObject({ status: 409 });
406
406
  });
407
407
 
@@ -571,7 +571,7 @@ describe('roster referencedBy under group shadowing', () => {
571
571
  const ws = stubWorkspace(workspaceDir);
572
572
  svc = new RolesAdminService(
573
573
  ws,
574
- stubWorkflow().svc,
574
+ stubVersionControl().svc,
575
575
  new AccessControlService(ws, KB, new NodeFs()),
576
576
  new NodeFs(),
577
577
  KB,
@@ -623,13 +623,13 @@ describe('Admin fixed members — the deployment admin', () => {
623
623
  let root: string;
624
624
  let repo: string;
625
625
  let ws: WorkspaceService;
626
- let workflow: ReturnType<typeof stubWorkflow>;
626
+ let versionControl: ReturnType<typeof stubVersionControl>;
627
627
 
628
628
  /** Service whose configured deployment admins are `admins`. */
629
629
  function serviceWith(admins: readonly string[]): RolesAdminService {
630
630
  return new RolesAdminService(
631
631
  ws,
632
- workflow.svc,
632
+ versionControl.svc,
633
633
  new AccessControlService(ws, KB, new NodeFs()),
634
634
  new NodeFs(),
635
635
  KB,
@@ -645,7 +645,7 @@ describe('Admin fixed members — the deployment admin', () => {
645
645
  repo = path.join(workspaceDir, KB);
646
646
  await write(repo, 'roles.yaml', ROLES);
647
647
  ws = stubWorkspace(workspaceDir);
648
- workflow = stubWorkflow();
648
+ versionControl = stubVersionControl();
649
649
  });
650
650
 
651
651
  afterEach(async () => {
@@ -5,7 +5,7 @@ import path from 'node:path';
5
5
  import os from 'node:os';
6
6
 
7
7
  import type { WorkspaceService } from '../../workspace/workspace.service.js';
8
- import type { WorkflowService } from '../../workflow/workflow.service.js';
8
+ import type { VersionControlService } from '../../version-control/version-control.service.js';
9
9
  import type { AuthUser, FileTreeEntry } from '@bevel-software/platform-shared';
10
10
  import { DEFAULT_BRANCH } from '@bevel-software/platform-shared';
11
11
  import { AccessControlService } from '../access-control.service.js';
@@ -65,7 +65,7 @@ function stubWorkspace(workspaceDir: string): WorkspaceService {
65
65
  } as unknown as WorkspaceService;
66
66
  }
67
67
 
68
- function stubWorkflow() {
68
+ function stubVersionControl() {
69
69
  const commits: { summary: string }[] = [];
70
70
  // Strict per-path locks — a live row is contended even for the same user,
71
71
  // exactly like FileLockService (nesting bugs must fail here too).
@@ -107,7 +107,7 @@ function stubWorkflow() {
107
107
  commits.push({ summary });
108
108
  return {} as unknown;
109
109
  },
110
- } as unknown as WorkflowService;
110
+ } as unknown as VersionControlService;
111
111
  return { svc, commits, acquireCalls };
112
112
  }
113
113
 
@@ -126,11 +126,11 @@ describe('RolesAdminService — capabilities, group assignment, conversion', ()
126
126
  await write(repo, 'groups.yaml', 'groups:\n GTM Team:\n - sara@x.io\n');
127
127
  await write(repo, 'access.md', '---\nwrite:\n - Admin\nread:\n - Product\n---\n');
128
128
  const workspace = stubWorkspace(root);
129
- const workflow = stubWorkflow();
130
- commits = workflow.commits;
129
+ const versionControl = stubVersionControl();
130
+ commits = versionControl.commits;
131
131
  service = new RolesAdminService(
132
132
  workspace,
133
- workflow.svc,
133
+ versionControl.svc,
134
134
  new AccessControlService(workspace as never, KB, new NodeFs()),
135
135
  new NodeFs(),
136
136
  KB,
@@ -212,10 +212,10 @@ describe('RolesAdminService — capabilities, group assignment, conversion', ()
212
212
  // that claims no write authority. A write-intent acquire here would fail
213
213
  // EVERY manual-mode conversion at lock acquisition.
214
214
  const workspace = stubWorkspace(root);
215
- const workflow = stubWorkflow();
215
+ const versionControl = stubVersionControl();
216
216
  const svc = new RolesAdminService(
217
217
  workspace,
218
- workflow.svc,
218
+ versionControl.svc,
219
219
  new AccessControlService(workspace as never, KB, new NodeFs()),
220
220
  new NodeFs(),
221
221
  KB,
@@ -226,12 +226,12 @@ describe('RolesAdminService — capabilities, group assignment, conversion', ()
226
226
  expect(await groupsYaml()).toContain('Product:');
227
227
  // The synced file WAS locked (the serialization is real), via coordination;
228
228
  // the written files keep their write-gated acquires.
229
- expect(workflow.acquireCalls).toContainEqual({
229
+ expect(versionControl.acquireCalls).toContainEqual({
230
230
  path: `${KB}/synced-groups.yaml`,
231
231
  coordination: true,
232
232
  });
233
- expect(workflow.acquireCalls).toContainEqual({ path: `${KB}/roles.yaml`, coordination: false });
234
- expect(workflow.acquireCalls).toContainEqual({ path: `${KB}/groups.yaml`, coordination: false });
233
+ expect(versionControl.acquireCalls).toContainEqual({ path: `${KB}/roles.yaml`, coordination: false });
234
+ expect(versionControl.acquireCalls).toContainEqual({ path: `${KB}/groups.yaml`, coordination: false });
235
235
  });
236
236
 
237
237
  it('conversion refusals: capability role, group-assigned role, IdP mode', async () => {
@@ -259,8 +259,8 @@ describe('RolesAdminService — capabilities, group assignment, conversion', ()
259
259
  // write nothing (committing a groups.yaml group in IdP mode writes a
260
260
  // retired file).
261
261
  const workspace = stubWorkspace(root);
262
- const workflow = stubWorkflow();
263
- const wf = workflow.svc as unknown as {
262
+ const versionControl = stubVersionControl();
263
+ const wf = versionControl.svc as unknown as {
264
264
  acquireLock: (
265
265
  w: string,
266
266
  b: string,
@@ -269,7 +269,7 @@ describe('RolesAdminService — capabilities, group assignment, conversion', ()
269
269
  opts?: { coordination?: boolean },
270
270
  ) => Promise<unknown>;
271
271
  };
272
- const origAcquire = wf.acquireLock.bind(workflow.svc);
272
+ const origAcquire = wf.acquireLock.bind(versionControl.svc);
273
273
  wf.acquireLock = async (w, b, p, u, opts) => {
274
274
  if (p === `${KB}/synced-groups.yaml`) {
275
275
  // The sync's provisioning push won the race for this lock and landed.
@@ -279,7 +279,7 @@ describe('RolesAdminService — capabilities, group assignment, conversion', ()
279
279
  };
280
280
  const svc = new RolesAdminService(
281
281
  workspace,
282
- workflow.svc,
282
+ versionControl.svc,
283
283
  new AccessControlService(workspace as never, KB, new NodeFs()),
284
284
  new NodeFs(),
285
285
  KB,
@@ -292,19 +292,19 @@ describe('RolesAdminService — capabilities, group assignment, conversion', ()
292
292
  // Nothing moved.
293
293
  expect(await rolesYaml()).toBe(ROLES);
294
294
  expect(await groupsYaml()).not.toContain('Product');
295
- expect(workflow.commits).toHaveLength(0);
295
+ expect(versionControl.commits).toHaveLength(0);
296
296
  });
297
297
 
298
298
  it('a failed conversion with NO pre-existing groups.yaml leaves no groups.yaml behind', async () => {
299
299
  await fs.rm(path.join(repo, 'groups.yaml'));
300
300
  const workspace = stubWorkspace(root);
301
- const workflow = stubWorkflow();
302
- (workflow.svc as unknown as { commitChanges: unknown }).commitChanges = async () => {
301
+ const versionControl = stubVersionControl();
302
+ (versionControl.svc as unknown as { commitChanges: unknown }).commitChanges = async () => {
303
303
  throw new Error('commit exploded');
304
304
  };
305
305
  const svc = new RolesAdminService(
306
306
  workspace,
307
- workflow.svc,
307
+ versionControl.svc,
308
308
  new AccessControlService(workspace as never, KB, new NodeFs()),
309
309
  new NodeFs(),
310
310
  KB,
@@ -12,8 +12,8 @@ import { NodeFs } from '../../kb-fs/node-fs.js';
12
12
  import type { IAccessControl } from '../access-control.interface.js';
13
13
  import type { WorkspaceService } from '../../workspace/workspace.service.js';
14
14
  import { AuthService } from '../../auth/auth.service.js';
15
- import type { WorkflowService } from '../../workflow/workflow.service.js';
16
- import type { WorkflowEventBus } from '../../workflow/event-bus.js';
15
+ import type { VersionControlService } from '../../version-control/version-control.service.js';
16
+ import type { VersionControlEventBus } from '../../version-control/event-bus.js';
17
17
  import type { FileTreeEntry } from '@bevel-software/platform-shared';
18
18
  import { createAccessRoutes } from '../access.routes.js';
19
19
  import { usersDbDouble } from './users-db-double.js';
@@ -113,7 +113,7 @@ async function makeHarness(
113
113
  // exactly like FileLockService (nesting bugs must fail here too).
114
114
  const locks = new Map<string, { id: string; name: string }>();
115
115
  const lockRow = (h: { id: string; name: string }) => ({ holderUserId: h.id, holderName: h.name });
116
- const workflowService = {
116
+ const versionControlService = {
117
117
  getLock: vi.fn(async (_w: string, _b: string, p: string) => {
118
118
  const h = locks.get(p);
119
119
  return h ? lockRow(h) : null;
@@ -131,9 +131,9 @@ async function makeHarness(
131
131
  // Write-free: the lock-aware filesystem writes to disk; this just commits the
132
132
  // dirty tree. Not exercised by these route tests (no rename), but kept honest.
133
133
  commitChanges: vi.fn(async () => ({})),
134
- } as unknown as WorkflowService;
134
+ } as unknown as VersionControlService;
135
135
 
136
- const eventBus = { emit: vi.fn() } as unknown as WorkflowEventBus;
136
+ const eventBus = { emit: vi.fn() } as unknown as VersionControlEventBus;
137
137
  const accounts = [
138
138
  { email: 'off@example.com', deactivatedAt: new Date('2026-09-01T00:00:00Z') },
139
139
  'on@example.com',
@@ -182,7 +182,7 @@ async function makeHarness(
182
182
  (req as unknown as { userId: string }).userId = ADMIN.id;
183
183
  next();
184
184
  });
185
- app.use('/api', createAccessRoutes(accessControl, workspaceService, authService, authService, workflowService, eventBus, db, testKbContext({ kbDirName: KB }), new NodeFs()));
185
+ app.use('/api', createAccessRoutes(accessControl, workspaceService, authService, authService, versionControlService, eventBus, db, testKbContext({ kbDirName: KB }), new NodeFs()));
186
186
 
187
187
  const server = await new Promise<Server>((resolve) => {
188
188
  const s = app.listen(0, () => resolve(s));