@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
@@ -5,7 +5,7 @@ import path from 'node:path';
5
5
  import os from 'node:os';
6
6
  import { GitService } from '../git.service.js';
7
7
  import { RemoteBranchGoneError } from '../../../../shared/domain-errors.js';
8
- import { runGit, gitOut, stubWorkflowHooks, stubWorkspaceService } from './git-test-helpers.js';
8
+ import { runGit, gitOut, stubVersionControlHooks, stubWorkspaceService } from './git-test-helpers.js';
9
9
 
10
10
  /**
11
11
  * `syncFromRemote` against real repositories: what it reports about the clone
@@ -82,7 +82,7 @@ describe('GitService.syncFromRemote', () => {
82
82
  await fs.writeFile(path.join(dir, 'b.md'), 'b\n');
83
83
  await fs.rename(path.join(dir, 'old name.md'), path.join(dir, 'new name.md'));
84
84
  });
85
- const git = new GitService(stubWorkspaceService({ ws: workspaceDir }), stubWorkflowHooks(), testKbContext());
85
+ const git = new GitService(stubWorkspaceService({ ws: workspaceDir }), stubVersionControlHooks(), testKbContext());
86
86
 
87
87
  const r = await git.syncFromRemote('ws');
88
88
  expect(r.before).toBe(before);
@@ -106,7 +106,7 @@ describe('GitService.syncFromRemote', () => {
106
106
  await runGit(repo, ['config', 'user.email', 'workspace@bevel.test']);
107
107
  await runGit(repo, ['config', 'user.name', 'bevel Workspace']);
108
108
  await runGit(repo, ['checkout', '-b', BRANCH]).catch(() => undefined);
109
- const git = new GitService(stubWorkspaceService({ ws: workspaceDir }), stubWorkflowHooks(), testKbContext());
109
+ const git = new GitService(stubWorkspaceService({ ws: workspaceDir }), stubVersionControlHooks(), testKbContext());
110
110
 
111
111
  // Still empty on both sides: nothing to sync, and NOT 'remote gone' — a
112
112
  // fresh deployment nobody has pushed to must never have its clone retired.
@@ -135,7 +135,7 @@ describe('GitService.syncFromRemote', () => {
135
135
  await runGit(upstream, ['branch', 'ali/x', BRANCH]);
136
136
  const { workspaceDir } = await cloneWorkspace(root, upstream, 'ali%2Fx', 'ali/x');
137
137
  await runGit(upstream, ['update-ref', '-d', 'refs/heads/ali/x']);
138
- const git = new GitService(stubWorkspaceService({ 'ali%2Fx': workspaceDir }), stubWorkflowHooks(), testKbContext());
138
+ const git = new GitService(stubWorkspaceService({ 'ali%2Fx': workspaceDir }), stubVersionControlHooks(), testKbContext());
139
139
  await expect(git.syncFromRemote('ali%2Fx')).rejects.toBeInstanceOf(RemoteBranchGoneError);
140
140
  });
141
141
  });
@@ -164,7 +164,7 @@ describe('GitService.syncFromRemote — the cases git exits 0 on but should not
164
164
  await pushFromElsewhere(root, upstream, async (dir) => {
165
165
  await fs.writeFile(path.join(dir, 'a.md'), 'edited on the host\n');
166
166
  });
167
- const git = new GitService(stubWorkspaceService({ ws: workspaceDir }), stubWorkflowHooks(), testKbContext());
167
+ const git = new GitService(stubWorkspaceService({ ws: workspaceDir }), stubVersionControlHooks(), testKbContext());
168
168
 
169
169
  await expect(git.syncFromRemote('ws')).rejects.toMatchObject({
170
170
  name: 'PullRebaseConflictError',
@@ -187,7 +187,7 @@ describe('GitService.syncFromRemote — the cases git exits 0 on but should not
187
187
  await runGit(repo, ['rm', '-rf', '--cached', '.']).catch(() => undefined);
188
188
  await fs.rm(path.join(repo, 'a.md'), { force: true });
189
189
  await fs.rm(path.join(repo, 'old name.md'), { force: true });
190
- const git = new GitService(stubWorkspaceService({ ws: workspaceDir }), stubWorkflowHooks(), testKbContext());
190
+ const git = new GitService(stubWorkspaceService({ ws: workspaceDir }), stubVersionControlHooks(), testKbContext());
191
191
  await expect(git.syncFromRemote('ws')).rejects.toBeInstanceOf(RemoteBranchGoneError);
192
192
  });
193
193
 
@@ -195,7 +195,7 @@ describe('GitService.syncFromRemote — the cases git exits 0 on but should not
195
195
  const upstream = await bareUpstream(root, true);
196
196
  await runGit(upstream, ['branch', 'ali/x', BRANCH]);
197
197
  const { workspaceDir } = await cloneWorkspace(root, upstream, 'ws');
198
- const git = new GitService(stubWorkspaceService({ ws: workspaceDir }), stubWorkflowHooks(), testKbContext());
198
+ const git = new GitService(stubWorkspaceService({ ws: workspaceDir }), stubVersionControlHooks(), testKbContext());
199
199
  expect(await git.remoteBranchExists('ws', 'ali/x')).toBe(true);
200
200
  await runGit(upstream, ['update-ref', '-d', 'refs/heads/ali/x']);
201
201
  expect(await git.remoteBranchExists('ws', 'ali/x')).toBe(false);
@@ -242,7 +242,7 @@ describe('GitService.syncFromRemote — an unborn clone that already holds stage
242
242
  await runGit(seed, ['add', '.']);
243
243
  await runGit(seed, ['commit', '-m', 'first']);
244
244
  await runGit(seed, ['push', upstream, BRANCH]);
245
- const git = new GitService(stubWorkspaceService({ ws: workspaceDir }), stubWorkflowHooks(), testKbContext());
245
+ const git = new GitService(stubWorkspaceService({ ws: workspaceDir }), stubVersionControlHooks(), testKbContext());
246
246
 
247
247
  await expect(git.syncFromRemote('ws')).rejects.toMatchObject({
248
248
  name: 'PullRebaseConflictError',
@@ -10,7 +10,7 @@ import { NodeFs } from '../../../kb-fs/node-fs.js';
10
10
  import { WorkspaceMutex } from '../../../kb-fs/mutex.js';
11
11
  import { WorkspaceService } from '../../../workspace/workspace.service.js';
12
12
  import { KbRepository, repositoryDirFor } from '../../../workspace/kb-repository.js';
13
- import { WorkflowHooks } from '../../workflow-hooks.js';
13
+ import { VersionControlHooks } from '../../version-control-hooks.js';
14
14
  import { GitService } from '../git.service.js';
15
15
  import { NodeGitRunner } from '../node-git-runner.js';
16
16
  import { workspaceIdForBranch } from '../../../../shared/workspace-id.js';
@@ -74,7 +74,7 @@ beforeEach(async () => {
74
74
  workspaces = newWorkspaceService(
75
75
  workspacesRoot, upstream, testKbContext(), new NodeFs(), runner, undefined, undefined, repository,
76
76
  );
77
- gitService = new GitService(workspaces, new WorkflowHooks(), testKbContext(), mutex, null, runner);
77
+ gitService = new GitService(workspaces, new VersionControlHooks(), testKbContext(), mutex, null, runner);
78
78
  });
79
79
 
80
80
  afterEach(async () => {
@@ -117,7 +117,7 @@ describe('GitService over worktrees', () => {
117
117
  await fs.mkdir(path.dirname(clone), { recursive: true });
118
118
  await git(root, ['clone', '-q', '-b', TARGET, upstream, clone]);
119
119
  const clones = newWorkspaceService(cloneRoot, upstream, testKbContext(), new NodeFs());
120
- const onClones = await new GitService(clones, new WorkflowHooks(), testKbContext()).changedFilesForPr(
120
+ const onClones = await new GitService(clones, new VersionControlHooks(), testKbContext()).changedFilesForPr(
121
121
  id(TARGET), TARGET, 'alice/a',
122
122
  );
123
123
  expect(onWorktrees).toEqual(onClones);
@@ -227,7 +227,7 @@ describe('GitService and the repository administrator', () => {
227
227
  return runner.run(cwd, args, opts);
228
228
  }) as NodeGitRunner['run'],
229
229
  };
230
- const service = new GitService(recorded, new WorkflowHooks(), testKbContext(), mutex, null, recordingRunner);
230
+ const service = new GitService(recorded, new VersionControlHooks(), testKbContext(), mutex, null, recordingRunner);
231
231
  await recorded.getOrCreateForBranch(TARGET);
232
232
  await recorded.getOrCreateForBranch('alice/a');
233
233
 
@@ -5,7 +5,7 @@ import type { Database } from '../../../database/connection.js';
5
5
  import type { WorkspaceService } from '../../../workspace/workspace.service.js';
6
6
  import type { GitService } from '../git.service.js';
7
7
  import type { IAccessControl } from '../../../access/access-control.interface.js';
8
- import { WorkflowValidationError } from '../../../../shared/domain-errors.js';
8
+ import { VersionControlValidationError } from '../../../../shared/domain-errors.js';
9
9
 
10
10
  /**
11
11
  * What a change-request LIST is allowed to cost.
@@ -178,7 +178,7 @@ describe('the list of applied requests reads each merge commit once', () => {
178
178
 
179
179
  it('asks again for a merge commit the clone did not hold the first time', async () => {
180
180
  const { svc, ofAppliedChange } = appliedHarness([applied(1)]);
181
- ofAppliedChange.mockRejectedValueOnce(new WorkflowValidationError('commit is not in this clone'));
181
+ ofAppliedChange.mockRejectedValueOnce(new VersionControlValidationError('commit is not in this clone'));
182
182
 
183
183
  const before = await svc.listPrsByState(['merged']);
184
184
  const after = await svc.listPrsByState(['merged']);
@@ -6,7 +6,7 @@ import type { Database } from '../../../database/connection.js';
6
6
  import type { WorkspaceService } from '../../../workspace/workspace.service.js';
7
7
  import type { IAccessControl } from '../../../access/access-control.interface.js';
8
8
  import { hashEmail as hash } from '../../../../shared/email-identity.js';
9
- import { AppliedChangeMismatchError, WorkflowValidationError } from '../../../../shared/domain-errors.js';
9
+ import { AppliedChangeMismatchError, VersionControlValidationError } from '../../../../shared/domain-errors.js';
10
10
 
11
11
  function pr(overrides: Partial<PullRequestSummary>): PullRequestSummary {
12
12
  return {
@@ -392,7 +392,7 @@ describe('PullRequestService.listPrsByState', () => {
392
392
 
393
393
  it('asks again for a commit the clone did not hold — that one the next fetch may bring', async () => {
394
394
  const { svc, atCommit } = svcOver([row({ number: 9, state: 'merged' })], ['A.md']);
395
- atCommit.mockRejectedValueOnce(new WorkflowValidationError('commit is not in this clone'));
395
+ atCommit.mockRejectedValueOnce(new VersionControlValidationError('commit is not in this clone'));
396
396
  expect((await svc.listPrsByState(['closed', 'merged']))[0]?.touchedNodePaths).toEqual([]);
397
397
  expect((await svc.listPrsByState(['closed', 'merged']))[0]?.touchedNodePaths).toEqual(['A.md']);
398
398
  expect(atCommit).toHaveBeenCalledTimes(2);
@@ -432,7 +432,7 @@ describe('PullRequestService.listPrsByState', () => {
432
432
  } as unknown as WorkspaceService;
433
433
  const git = {
434
434
  changedPathsAndPairsOfAppliedChange: vi.fn(async () => {
435
- throw new WorkflowValidationError(
435
+ throw new VersionControlValidationError(
436
436
  `commit ${MERGE_SHA} is not a merge commit in this clone, so it cannot be change request #1's`,
437
437
  );
438
438
  }),
@@ -487,7 +487,7 @@ describe('PullRequestService.getPrDetail with a retired branch and no merge comm
487
487
  } as unknown as WorkspaceService;
488
488
  const git = {
489
489
  resolvePrShas: async () => {
490
- throw new WorkflowValidationError('unknown branch: feature/x');
490
+ throw new VersionControlValidationError('unknown branch: feature/x');
491
491
  },
492
492
  } as unknown as GitService;
493
493
  return new PullRequestService(db, workspace, makeAccessControl({}), git);
@@ -561,7 +561,7 @@ describe('PullRequestService.getPrDetail of an applied request', () => {
561
561
  findAnyWorkspaceId: async () => 'ws',
562
562
  } as unknown as WorkspaceService;
563
563
  const resolvePrShas = vi.fn(async () => {
564
- throw new WorkflowValidationError('unknown branch: feature/x');
564
+ throw new VersionControlValidationError('unknown branch: feature/x');
565
565
  });
566
566
  const appliedChangeShas = vi.fn(async () => ({ baseSha: BASE_SHA, headSha: HEAD_SHA }));
567
567
  const changedFilesOfAppliedChange = vi.fn(async () => [
@@ -637,7 +637,7 @@ describe('PullRequestService.getPrDetail of an applied request', () => {
637
637
  const { svc } = svcFor();
638
638
  const git = (svc as unknown as { gitService: Record<string, unknown> }).gitService;
639
639
  git.appliedChangeShas = async () => {
640
- throw new WorkflowValidationError(`no first parent for commit ${MERGE_SHA}`);
640
+ throw new VersionControlValidationError(`no first parent for commit ${MERGE_SHA}`);
641
641
  };
642
642
  // Fail-closed, as before the decision: no files, so author-only — never
643
643
  // somebody else's file list.
@@ -23,7 +23,7 @@ import type {
23
23
  import { isFolderPlaceholder } from '@bevel-software/platform-shared';
24
24
  import { mergeCommitMessageNames } from './merge-commit.js';
25
25
  import type { WorkspaceService } from '../../workspace/index.js';
26
- import type { WorkflowHooks, CommitValidationContext } from '../workflow-hooks.js';
26
+ import type { VersionControlHooks, CommitValidationContext } from '../version-control-hooks.js';
27
27
  import type { IAccessControl } from '../../access/index.js';
28
28
  import { AccessDeniedError } from '../../access-model/index.js';
29
29
  import { WorkspaceIdMutex, type WorkspaceMutex, assertInsideRepo, cloneTrackingConfigArgs, SAFE_IMPLICIT_FETCH_ARGS, readRefSha } from '../../kb-fs/index.js';
@@ -42,8 +42,8 @@ import {
42
42
  AppliedChangeMismatchError,
43
43
  BranchAuthorshipError,
44
44
  BranchDeleteRefusedError,
45
- WorkflowDomainError,
46
- WorkflowValidationError,
45
+ VersionControlDomainError,
46
+ VersionControlValidationError,
47
47
  ProtectedBranchError,
48
48
  PullRebaseConflictError,
49
49
  RemoteBranchGoneError,
@@ -69,7 +69,7 @@ const crLog = logger('cr');
69
69
 
70
70
 
71
71
  /**
72
- * Fallback committer identity. Every workflow commit overrides the author via
72
+ * Fallback committer identity. Every version-control commit overrides the author via
73
73
  * `--author=…` so the real human shows up in `git log`; this is just the
74
74
  * committer git records need. Mirrors the value `WorkspaceService` stamps on
75
75
  * each clone — set again where an operation must not depend on that ambient
@@ -149,13 +149,13 @@ function buildDefaultCommitSummary(repoRelativePath: string): string {
149
149
 
150
150
  function assertValidAuthor(user: AuthUser): void {
151
151
  if (!user.name || !user.email) {
152
- throw new WorkflowValidationError('commit author name and email are required');
152
+ throw new VersionControlValidationError('commit author name and email are required');
153
153
  }
154
154
  if (/[\r\n<>]/.test(user.name)) {
155
- throw new WorkflowValidationError('commit author name contains invalid characters');
155
+ throw new VersionControlValidationError('commit author name contains invalid characters');
156
156
  }
157
157
  if (/[\r\n<>\s]/.test(user.email) || !/^[^@\s]+@[^@\s]+$/.test(user.email)) {
158
- throw new WorkflowValidationError('commit author email is not a valid address');
158
+ throw new VersionControlValidationError('commit author email is not a valid address');
159
159
  }
160
160
  }
161
161
 
@@ -317,13 +317,13 @@ export class GitService implements IGitService {
317
317
  constructor(
318
318
  private readonly workspaceService: WorkspaceService,
319
319
  /**
320
- * Workflow lifecycle hooks. This service only consults the ADVISORY
320
+ * Version-control lifecycle hooks. This service only consults the ADVISORY
321
321
  * `commitValidation` hooks (registered by the enterprise kb module in the
322
322
  * composition root — the constructor-injected `IKbValidator` this
323
323
  * replaced). No hooks registered = no commit-time validation, which is
324
324
  * safe because validation is advisory and never blocks a commit.
325
325
  */
326
- private readonly hooks: WorkflowHooks,
326
+ private readonly hooks: VersionControlHooks,
327
327
  private readonly kb: KbContext,
328
328
  // Keyed by the CANONICAL workspace id: a route's Express-decoded `:id`
329
329
  // (`alice/feature`) and a tool's `alice%2Ffeature` name one clone, and
@@ -808,7 +808,7 @@ export class GitService implements IGitService {
808
808
  const cwd = await this.repoDir(workspaceId);
809
809
  const current = await this.currentBranch(cwd);
810
810
  if (current === name) {
811
- throw new WorkflowValidationError(
811
+ throw new VersionControlValidationError(
812
812
  `Cannot delete "${name}" while it's the checked-out branch.`,
813
813
  );
814
814
  }
@@ -824,7 +824,7 @@ export class GitService implements IGitService {
824
824
  // not just their own — but keep the "refuse if origin still has the
825
825
  // ref" safety: a present remote means the branch is still live.
826
826
  if (await this.refExists(cwd, `refs/remotes/origin/${name}`)) {
827
- throw new WorkflowValidationError(
827
+ throw new VersionControlValidationError(
828
828
  `Branch "${name}" still exists on origin — refusing to auto-prune.`,
829
829
  );
830
830
  }
@@ -1008,12 +1008,12 @@ export class GitService implements IGitService {
1008
1008
  req: ShareChangesRequest,
1009
1009
  ): Promise<CommitAttribution> {
1010
1010
  const subject = req.summary?.trim();
1011
- if (!subject) throw new WorkflowValidationError('commit summary is required');
1011
+ if (!subject) throw new VersionControlValidationError('commit summary is required');
1012
1012
  if (subject.length > 200) {
1013
- throw new WorkflowValidationError('commit summary must be ≤ 200 characters');
1013
+ throw new VersionControlValidationError('commit summary must be ≤ 200 characters');
1014
1014
  }
1015
1015
  if (subject.includes('\n')) {
1016
- throw new WorkflowValidationError('commit summary must be a single line');
1016
+ throw new VersionControlValidationError('commit summary must be a single line');
1017
1017
  }
1018
1018
  assertValidAuthor(user);
1019
1019
 
@@ -1033,12 +1033,12 @@ export class GitService implements IGitService {
1033
1033
  ]);
1034
1034
  const touched = parsePorcelainZ(porcelain);
1035
1035
  if (touched.length === 0) {
1036
- throw new WorkflowValidationError('No pending changes to commit', {
1036
+ throw new VersionControlValidationError('No pending changes to commit', {
1037
1037
  kind: 'no-pending-changes',
1038
1038
  });
1039
1039
  }
1040
1040
  if (touched.length > 1) {
1041
- throw new WorkflowValidationError(
1041
+ throw new VersionControlValidationError(
1042
1042
  `Each change must affect exactly one file. ${touched.length} files are currently pending: ${touched.join(', ')}. Commit them one at a time.`,
1043
1043
  { kind: 'too-many-files-dirty', paths: touched },
1044
1044
  );
@@ -1206,7 +1206,7 @@ export class GitService implements IGitService {
1206
1206
  // **No access check at commit time.** Per the "disk is the source of
1207
1207
  // truth" rule, by the time content is on disk it must not be rejected.
1208
1208
  // The permission check that used to live here now runs at lock
1209
- // acquisition (see `WorkflowService.acquireLock`'s
1209
+ // acquisition (see `VersionControlService.acquireLock`'s
1210
1210
  // `assertCanWriteAtPath`), so a user can't even start editing a file
1211
1211
  // they lack write permission on — they never reach this commit. The
1212
1212
  // legacy gate could destroy a user's edits when access changed
@@ -1235,10 +1235,10 @@ export class GitService implements IGitService {
1235
1235
 
1236
1236
  const subject = summary?.trim() || buildDefaultCommitSummary(repoRelativePath);
1237
1237
  if (subject.length > 200) {
1238
- throw new WorkflowValidationError('commit summary must be ≤ 200 characters');
1238
+ throw new VersionControlValidationError('commit summary must be ≤ 200 characters');
1239
1239
  }
1240
1240
  if (subject.includes('\n')) {
1241
- throw new WorkflowValidationError('commit summary must be a single line');
1241
+ throw new VersionControlValidationError('commit summary must be a single line');
1242
1242
  }
1243
1243
 
1244
1244
  await this.git(cwd, [
@@ -1292,9 +1292,9 @@ export class GitService implements IGitService {
1292
1292
  ): Promise<CommitAttribution | null> {
1293
1293
  assertValidAuthor(user);
1294
1294
  const subject = summary?.trim();
1295
- if (!subject) throw new WorkflowValidationError('commit summary is required');
1296
- if (subject.length > 200) throw new WorkflowValidationError('commit summary must be ≤ 200 characters');
1297
- if (subject.includes('\n')) throw new WorkflowValidationError('commit summary must be a single line');
1295
+ if (!subject) throw new VersionControlValidationError('commit summary is required');
1296
+ if (subject.length > 200) throw new VersionControlValidationError('commit summary must be ≤ 200 characters');
1297
+ if (subject.includes('\n')) throw new VersionControlValidationError('commit summary must be a single line');
1298
1298
 
1299
1299
  return this.mutex.run(workspaceId, async () => {
1300
1300
  const cwd = await this.repoDir(workspaceId);
@@ -1480,7 +1480,7 @@ export class GitService implements IGitService {
1480
1480
  }
1481
1481
  }
1482
1482
 
1483
- // `forcePush` method removed. The workflow layer no longer auto-force-pushes
1483
+ // `forcePush` method removed. The version-control layer no longer auto-force-pushes
1484
1484
  // as a recovery — when the cooperative `pull --rebase` + retry can't
1485
1485
  // reconcile, we throw `PushNeedsAgentResolutionError` and hand off to the
1486
1486
  // agent. The agent has git + gh CLI access and can choose to run a raw
@@ -1493,7 +1493,7 @@ export class GitService implements IGitService {
1493
1493
 
1494
1494
  /**
1495
1495
  * Attempt a local merge of `origin/<targetBranch>` into the currently-
1496
- * checked-out branch. Used by the workflow module to auto-merge target →
1496
+ * checked-out branch. Used by the version-control module to auto-merge target →
1497
1497
  * source when a change request is opened or refreshed (PLAN §1).
1498
1498
  *
1499
1499
  * Two outcomes:
@@ -1564,7 +1564,7 @@ export class GitService implements IGitService {
1564
1564
  assertValidBranchName(fromBranch);
1565
1565
  assertValidAuthor(user);
1566
1566
  if (/\n\s*\n/.test(opts.subject)) {
1567
- throw new WorkflowValidationError('merge commit subject must be a single paragraph');
1567
+ throw new VersionControlValidationError('merge commit subject must be a single paragraph');
1568
1568
  }
1569
1569
  // Every resolution names a repository path; which of them are conflicted
1570
1570
  // is only known inside the merge, where they are matched exactly.
@@ -1579,12 +1579,12 @@ export class GitService implements IGitService {
1579
1579
  const p = this.stripRepoPrefix(r.path);
1580
1580
  const ways = [r.content !== undefined, r.choose !== undefined].filter(Boolean).length;
1581
1581
  if (ways !== 1) {
1582
- throw new WorkflowValidationError(`resolution for "${p}": give either \`content\` or \`choose\`, not ${ways === 0 ? 'neither' : 'both'}`);
1582
+ throw new VersionControlValidationError(`resolution for "${p}": give either \`content\` or \`choose\`, not ${ways === 0 ? 'neither' : 'both'}`);
1583
1583
  }
1584
1584
  if (r.choose !== undefined && !['ours', 'theirs', 'delete'].includes(r.choose)) {
1585
- throw new WorkflowValidationError(`resolution for "${p}": \`choose\` is \`ours\`, \`theirs\` or \`delete\``);
1585
+ throw new VersionControlValidationError(`resolution for "${p}": \`choose\` is \`ours\`, \`theirs\` or \`delete\``);
1586
1586
  }
1587
- if (resolutions.has(p)) throw new WorkflowValidationError(`"${p}" is resolved twice`);
1587
+ if (resolutions.has(p)) throw new VersionControlValidationError(`"${p}" is resolved twice`);
1588
1588
  resolutions.set(p, { ...r, path: p });
1589
1589
  }
1590
1590
  return this.mutex.run(workspaceId, async () =>
@@ -1616,7 +1616,7 @@ export class GitService implements IGitService {
1616
1616
  *
1617
1617
  * `publish` runs over the merge commit inside this same reservation, so no
1618
1618
  * save or sync can land between the commit and its push; it is the
1619
- * caller's push policy (the workflow's `pushWithRecovery`: one replay onto
1619
+ * caller's push policy (the version-control service's `pushWithRecovery`: one replay onto
1620
1620
  * the moved branch with the merge kept, `--rebase-merges`, then the typed
1621
1621
  * hand-off) over this checkout's own unlocked moves.
1622
1622
  */
@@ -1653,14 +1653,14 @@ export class GitService implements IGitService {
1653
1653
  if (opts.guardCheckout) {
1654
1654
  const checkedOut = await this.currentBranch(cwd);
1655
1655
  if (checkedOut !== branch) {
1656
- throw new WorkflowValidationError(`the workspace is on "${checkedOut}", not on "${branch}"`);
1656
+ throw new VersionControlValidationError(`the workspace is on "${checkedOut}", not on "${branch}"`);
1657
1657
  }
1658
1658
  // A merge rewrites tracked files. Edits still on their way to a commit
1659
1659
  // (a save the worker has not landed) would be swept into the merge
1660
1660
  // commit under this user's name, or lost under the merge's version.
1661
1661
  const { stdout: dirty } = await this.git(cwd, ['status', '--porcelain=v1', '-z']);
1662
1662
  if (parsePorcelainZ(dirty).length > 0) {
1663
- throw new WorkflowDomainError(
1663
+ throw new VersionControlDomainError(
1664
1664
  `"${branch}" has edits that are not committed yet. Try again once they are saved.`,
1665
1665
  409,
1666
1666
  { kind: 'branch-busy', branch },
@@ -1687,8 +1687,8 @@ export class GitService implements IGitService {
1687
1687
  // A merge with nothing to settle leaves no resolution a place to go: one
1688
1688
  // supplied anyway names a path that is not conflicted, and is refused as
1689
1689
  // such rather than dropped on the floor behind a published merge.
1690
- const noConflictsFor = (): WorkflowValidationError =>
1691
- new WorkflowValidationError(
1690
+ const noConflictsFor = (): VersionControlValidationError =>
1691
+ new VersionControlValidationError(
1692
1692
  `nothing conflicted, so nothing is resolved here: ${[...opts.resolutions.keys()].join(', ')}.`,
1693
1693
  { kind: 'not-conflicted', paths: [...opts.resolutions.keys()] },
1694
1694
  );
@@ -1723,7 +1723,7 @@ export class GitService implements IGitService {
1723
1723
  // locks. Refused whole, before any resolution is applied — naming
1724
1724
  // the caller's own paths only, never the conflicted set (which the
1725
1725
  // caller is told of, cut to what they may read, by the answer).
1726
- throw new WorkflowValidationError(
1726
+ throw new VersionControlValidationError(
1727
1727
  `not conflicted, so not resolved here: ${stray.join(', ')}.`,
1728
1728
  { kind: 'not-conflicted', paths: stray },
1729
1729
  );
@@ -1901,7 +1901,7 @@ export class GitService implements IGitService {
1901
1901
  // the way that is a link is refused, and a path that is itself a link is
1902
1902
  // replaced as a path (the link removed first), never written through.
1903
1903
  if ((await linkedAncestor(cwd, path.dirname(file))) !== null) {
1904
- throw new WorkflowValidationError(`"${r.path}" is reached through a link, so it is not resolved here`);
1904
+ throw new VersionControlValidationError(`"${r.path}" is reached through a link, so it is not resolved here`);
1905
1905
  }
1906
1906
  if (r.content !== undefined) {
1907
1907
  if ((await lstatOrNull(file))?.isSymbolicLink()) await fs.unlink(file);
@@ -2029,7 +2029,7 @@ export class GitService implements IGitService {
2029
2029
  // `mergeCommitSubject` already flattens the title it builds from; this is the
2030
2030
  // guard that keeps any other caller from reintroducing the break.
2031
2031
  if (/\n\s*\n/.test(commit.subject)) {
2032
- throw new WorkflowValidationError('merge commit subject must be a single paragraph');
2032
+ throw new VersionControlValidationError('merge commit subject must be a single paragraph');
2033
2033
  }
2034
2034
  const MAX_ATTEMPTS = 3;
2035
2035
  return this.mutex.run(baseWorkspaceId, async () => {
@@ -2044,7 +2044,7 @@ export class GitService implements IGitService {
2044
2044
  const { stdout: dirty } = await this.git(cwd, ['status', '--porcelain=v1', '-z']);
2045
2045
  const unpushed = await this.hasUnpushedCommitsAt(cwd);
2046
2046
  if (parsePorcelainZ(dirty).length > 0 || unpushed) {
2047
- throw new WorkflowDomainError(
2047
+ throw new VersionControlDomainError(
2048
2048
  `"${targetBranch}" has edits that are not shared yet. Try the merge again once they are saved.`,
2049
2049
  409,
2050
2050
  { kind: 'merge-target-busy', targetBranch },
@@ -2453,7 +2453,7 @@ export class GitService implements IGitService {
2453
2453
 
2454
2454
  /**
2455
2455
  * Rebase the checked-out branch onto `remoteRef`, turning a content
2456
- * conflict into the typed error the workflow layer queues recovery for.
2456
+ * conflict into the typed error the version-control layer queues recovery for.
2457
2457
  * Shared by `pull` and `syncFromRemote` so the two cannot drift.
2458
2458
  */
2459
2459
  private async rebaseOntoRemote(
@@ -2535,7 +2535,7 @@ export class GitService implements IGitService {
2535
2535
  abortSucceeded = false;
2536
2536
  });
2537
2537
  if (abortSucceeded && conflictedPaths.length > 0) {
2538
- // Typed so the workflow layer can queue background recovery — this
2538
+ // Typed so the version-control layer can queue background recovery — this
2539
2539
  // divergence never resolves on its own (every retry pull hits the
2540
2540
  // same conflict) and the unpushed local commits are someone's saved
2541
2541
  // content stuck violating save=share.
@@ -3029,7 +3029,7 @@ export class GitService implements IGitService {
3029
3029
  // Only the genuinely empty separator lines are skipped.
3030
3030
  const touched = nameLine.endsWith('\r') ? nameLine.slice(0, -1) : nameLine;
3031
3031
  if (touched && touched !== repoRelativePath) {
3032
- throw new WorkflowValidationError(
3032
+ throw new VersionControlValidationError(
3033
3033
  `"${relativePath}" is a directory at that point in history — history is served per file`,
3034
3034
  );
3035
3035
  }
@@ -3064,7 +3064,7 @@ export class GitService implements IGitService {
3064
3064
  ): Promise<string> {
3065
3065
  assertValidRelativePath(relativePath);
3066
3066
  if (!/^[a-f0-9]{7,40}$/i.test(sha)) {
3067
- throw new WorkflowValidationError('invalid commit sha');
3067
+ throw new VersionControlValidationError('invalid commit sha');
3068
3068
  }
3069
3069
  const repoRelativePath = this.stripRepoPrefix(relativePath);
3070
3070
  return this.mutex.run(workspaceId, async () => {
@@ -3119,7 +3119,7 @@ export class GitService implements IGitService {
3119
3119
  ): Promise<{ baseline: string | null; current: string | null }> {
3120
3120
  assertValidRelativePath(relativePath);
3121
3121
  if (!/^[a-f0-9]{7,40}$/i.test(sha)) {
3122
- throw new WorkflowValidationError('invalid commit sha');
3122
+ throw new VersionControlValidationError('invalid commit sha');
3123
3123
  }
3124
3124
  const repoRelativePath = this.stripRepoPrefix(relativePath);
3125
3125
  return this.mutex.run(workspaceId, async () => {
@@ -3160,7 +3160,7 @@ export class GitService implements IGitService {
3160
3160
  assertValidBranchName(fromBranch);
3161
3161
  assertValidBranchName(toBranch);
3162
3162
  if (fromBranch === toBranch) {
3163
- throw new WorkflowValidationError('from and to branches must differ');
3163
+ throw new VersionControlValidationError('from and to branches must differ');
3164
3164
  }
3165
3165
  const repoRelativePath = this.stripRepoPrefix(relativePath);
3166
3166
  return this.mutex.run(workspaceId, async () => {
@@ -3291,7 +3291,7 @@ export class GitService implements IGitService {
3291
3291
  if (opts.at) {
3292
3292
  for (const sha of [opts.at.baseSha, opts.at.headSha]) {
3293
3293
  if (!/^[0-9a-f]{40,64}$/.test(sha)) {
3294
- throw new WorkflowValidationError(`invalid commit sha: ${sha}`);
3294
+ throw new VersionControlValidationError(`invalid commit sha: ${sha}`);
3295
3295
  }
3296
3296
  }
3297
3297
  }
@@ -3411,7 +3411,7 @@ export class GitService implements IGitService {
3411
3411
  * side for a merge commit, and for a squashed or fast-forwarded commit it is
3412
3412
  * simply the commit before — the same answer either way.
3413
3413
  *
3414
- * Throws `WorkflowValidationError` whenever the recorded commit cannot be
3414
+ * Throws `VersionControlValidationError` whenever the recorded commit cannot be
3415
3415
  * PROVEN to be this request's own merge commit — see
3416
3416
  * {@link appliedChangeShas}. Every caller reads that as "the file set could
3417
3417
  * not be resolved" and falls back to its own fail-closed answer, which is what
@@ -3424,7 +3424,7 @@ export class GitService implements IGitService {
3424
3424
  ): Promise<{ baseSha: string; headSha: string }> {
3425
3425
  const { mergeSha, number } = applied;
3426
3426
  if (!/^[0-9a-f]{40,64}$/.test(mergeSha)) {
3427
- throw new WorkflowValidationError(`invalid commit sha: ${mergeSha}`);
3427
+ throw new VersionControlValidationError(`invalid commit sha: ${mergeSha}`);
3428
3428
  }
3429
3429
  const revParse = async (rev: string): Promise<string | null> => {
3430
3430
  try {
@@ -3447,7 +3447,7 @@ export class GitService implements IGitService {
3447
3447
  // or a message that does not name the request) never becomes it, and is
3448
3448
  // reported as a mismatch the caller may remember.
3449
3449
  if (!(await revParse(`${mergeSha}^{commit}`))) {
3450
- throw new WorkflowValidationError(
3450
+ throw new VersionControlValidationError(
3451
3451
  `commit ${mergeSha} is not in this clone, so change request #${number} cannot be read from it yet`,
3452
3452
  );
3453
3453
  }
@@ -3612,7 +3612,7 @@ export class GitService implements IGitService {
3612
3612
  // concurrent `fetch --prune origin` (`ensureRemotesFetched` and
3613
3613
  // `fetchPrRefs` both run outside this mutex, deliberately) can drop a
3614
3614
  // remote-tracking ref between the two, and re-resolving inside the mutex
3615
- // would then throw `WorkflowValidationError` — which `touchedPathsFor`
3615
+ // would then throw `VersionControlValidationError` — which `touchedPathsFor`
3616
3616
  // swallows into an empty touched-path set, i.e. exactly the change
3617
3617
  // request missing from its own author's tree that the skip is guarded
3618
3618
  // against. The commits stay readable whatever happens to the ref names.
@@ -3792,7 +3792,7 @@ export class GitService implements IGitService {
3792
3792
  ): Promise<{ mergeBaseSha: string | null; behind: boolean }> {
3793
3793
  for (const sha of [at.baseSha, at.headSha]) {
3794
3794
  if (!/^[0-9a-f]{40,64}$/.test(sha)) {
3795
- throw new WorkflowValidationError(`invalid commit sha: ${sha}`);
3795
+ throw new VersionControlValidationError(`invalid commit sha: ${sha}`);
3796
3796
  }
3797
3797
  }
3798
3798
  const cwd = await this.repoDir(workspaceId);
@@ -3835,7 +3835,7 @@ export class GitService implements IGitService {
3835
3835
  ): Promise<string[]> {
3836
3836
  for (const sha of [fromSha, toSha]) {
3837
3837
  if (!/^[0-9a-f]{40,64}$/.test(sha)) {
3838
- throw new WorkflowValidationError(`invalid commit sha: ${sha}`);
3838
+ throw new VersionControlValidationError(`invalid commit sha: ${sha}`);
3839
3839
  }
3840
3840
  }
3841
3841
  const cwd = await this.repoDir(workspaceId);
@@ -3866,7 +3866,7 @@ export class GitService implements IGitService {
3866
3866
  assertValidBranchName(baseBranch);
3867
3867
  assertValidRelativePath(relativePath);
3868
3868
  if (!/^[0-9a-f]{40,64}$/.test(sha)) {
3869
- throw new WorkflowValidationError(`invalid commit sha: ${sha}`);
3869
+ throw new VersionControlValidationError(`invalid commit sha: ${sha}`);
3870
3870
  }
3871
3871
  const repoRelativePath = this.stripRepoPrefix(relativePath);
3872
3872
  return this.mutex.run(workspaceId, async () => {
@@ -3876,7 +3876,7 @@ export class GitService implements IGitService {
3876
3876
  await this.git(cwd, ['merge-base', '--is-ancestor', sha, baseRef]);
3877
3877
  } catch (err) {
3878
3878
  if ((err as { exitCode?: number }).exitCode === 1) {
3879
- throw new WorkflowDomainError(
3879
+ throw new VersionControlDomainError(
3880
3880
  `That commit is not part of "${baseBranch}" — it is not this request's fork point.`,
3881
3881
  404,
3882
3882
  );
@@ -4086,7 +4086,7 @@ export class GitService implements IGitService {
4086
4086
  try {
4087
4087
  return await this.publishedPrEnds(cwd, baseBranch, headBranch);
4088
4088
  } catch (err) {
4089
- if (err instanceof WorkflowValidationError) return null;
4089
+ if (err instanceof VersionControlValidationError) return null;
4090
4090
  throw err;
4091
4091
  }
4092
4092
  }
@@ -4143,7 +4143,7 @@ export class GitService implements IGitService {
4143
4143
  if (!(err instanceof GitRunError) || err.timedOut || err.exitCode !== 1) throw err;
4144
4144
  }
4145
4145
  }
4146
- throw new WorkflowValidationError(`unknown branch: ${branch}`);
4146
+ throw new VersionControlValidationError(`unknown branch: ${branch}`);
4147
4147
  }
4148
4148
 
4149
4149
  /**
@@ -4182,7 +4182,7 @@ export class GitService implements IGitService {
4182
4182
  // Try the next candidate.
4183
4183
  }
4184
4184
  }
4185
- throw new WorkflowValidationError(`unknown branch: ${branch}`);
4185
+ throw new VersionControlValidationError(`unknown branch: ${branch}`);
4186
4186
  }
4187
4187
 
4188
4188
  // ── internals ──────────────────────────────────────────────────────────
@@ -4341,7 +4341,7 @@ export class GitService implements IGitService {
4341
4341
  throw err;
4342
4342
  }
4343
4343
  if (kind === 'tree') {
4344
- throw new WorkflowValidationError(
4344
+ throw new VersionControlValidationError(
4345
4345
  `"${displayPath}" is a directory at that point in history — history is served per file`,
4346
4346
  );
4347
4347
  }
@@ -4497,7 +4497,7 @@ export class GitService implements IGitService {
4497
4497
  ): Promise<{ bytes: Buffer; blobId: string } | null> {
4498
4498
  assertValidRelativePath(relativePath);
4499
4499
  if (!/^[a-f0-9]{7,40}$/i.test(sha)) {
4500
- throw new WorkflowValidationError('invalid commit sha');
4500
+ throw new VersionControlValidationError('invalid commit sha');
4501
4501
  }
4502
4502
  const repoRelativePath = this.stripRepoPrefix(relativePath);
4503
4503
  return this.mutex.run(workspaceId, async () => {
@@ -65,7 +65,7 @@ const MAX_OUTPUT_BYTES = 64 * 1024 * 1024;
65
65
  * The environment every invocation runs under, laid OVER whatever the caller
66
66
  * supplied so that none of it can be unset per call. Only what is safe for
67
67
  * EVERY caller belongs here. `GIT_LITERAL_PATHSPECS` does not: it is the
68
- * workflow service's answer to raw user paths, and the startup runner spells
68
+ * version-control service's answer to raw user paths, and the startup runner spells
69
69
  * its literal paths with `:(literal)` magic, which that setting would disable
70
70
  * — so each of them sets its own, per call.
71
71
  *