@bevel-software/platform-core-backend 0.34.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 (908) hide show
  1. package/agent-guide/access-control.md +146 -300
  2. package/agent-guide/conventions.md +23 -25
  3. package/agent-guide/directory-structure.md +72 -120
  4. package/agent-guide/drafts-and-change-requests.md +92 -0
  5. package/agent-guide/for-git-users.md +47 -0
  6. package/agent-guide/glossary.md +36 -0
  7. package/agent-guide/how-agents-find-things.md +49 -0
  8. package/agent-guide/html-views.md +16 -11
  9. package/agent-guide/new-knowledge-base.md +9 -8
  10. package/agent-guide/onboarding.md +111 -0
  11. package/agent-guide/skills.md +67 -42
  12. package/agent-guide/start-here.md +66 -0
  13. package/agent-guide/tool-manuals.md +133 -154
  14. package/agent-guide/tools.md +67 -0
  15. package/agent-guide/where-a-new-file-goes.md +45 -28
  16. package/dist/core/catalog-cache-invalidation.d.ts +2 -2
  17. package/dist/core/catalog-cache-invalidation.d.ts.map +1 -1
  18. package/dist/core/compose-embed.d.ts +2 -2
  19. package/dist/core/compose-embed.d.ts.map +1 -1
  20. package/dist/core/compose-embed.js +1 -1
  21. package/dist/core/compose-embed.js.map +1 -1
  22. package/dist/core/core-ports.d.ts +19 -4
  23. package/dist/core/core-ports.d.ts.map +1 -1
  24. package/dist/core/core-ports.js.map +1 -1
  25. package/dist/core/create-core-server.d.ts.map +1 -1
  26. package/dist/core/create-core-server.js +27 -25
  27. package/dist/core/create-core-server.js.map +1 -1
  28. package/dist/core/create-core-services.d.ts +25 -13
  29. package/dist/core/create-core-services.d.ts.map +1 -1
  30. package/dist/core/create-core-services.js +75 -60
  31. package/dist/core/create-core-services.js.map +1 -1
  32. package/dist/core/lifecycle.d.ts +4 -4
  33. package/dist/core/lifecycle.d.ts.map +1 -1
  34. package/dist/core/lifecycle.js +5 -5
  35. package/dist/core/lifecycle.js.map +1 -1
  36. package/dist/core-config.d.ts +2 -2
  37. package/dist/core-config.js +3 -3
  38. package/dist/core-config.js.map +1 -1
  39. package/dist/index.d.ts +4 -4
  40. package/dist/index.d.ts.map +1 -1
  41. package/dist/index.js +3 -3
  42. package/dist/index.js.map +1 -1
  43. package/dist/modules/access/access-control.interface.d.ts +22 -0
  44. package/dist/modules/access/access-control.interface.d.ts.map +1 -1
  45. package/dist/modules/access/access-control.service.d.ts +3 -1
  46. package/dist/modules/access/access-control.service.d.ts.map +1 -1
  47. package/dist/modules/access/access-control.service.js +76 -1
  48. package/dist/modules/access/access-control.service.js.map +1 -1
  49. package/dist/modules/access/access-declarations.d.ts +2 -2
  50. package/dist/modules/access/access-declarations.d.ts.map +1 -1
  51. package/dist/modules/access/access-declarations.js +2 -2
  52. package/dist/modules/access/access-declarations.js.map +1 -1
  53. package/dist/modules/access/access-mutation.service.d.ts +2 -2
  54. package/dist/modules/access/access-mutation.service.d.ts.map +1 -1
  55. package/dist/modules/access/access-mutation.service.js +2 -2
  56. package/dist/modules/access/access-mutation.service.js.map +1 -1
  57. package/dist/modules/access/access-requests.routes.d.ts +2 -2
  58. package/dist/modules/access/access-requests.routes.d.ts.map +1 -1
  59. package/dist/modules/access/access-requests.routes.js +5 -5
  60. package/dist/modules/access/access-requests.routes.js.map +1 -1
  61. package/dist/modules/access/access-requests.service.d.ts +2 -2
  62. package/dist/modules/access/access-requests.service.d.ts.map +1 -1
  63. package/dist/modules/access/access-requests.service.js +11 -11
  64. package/dist/modules/access/access-requests.service.js.map +1 -1
  65. package/dist/modules/access/access.routes.d.ts +2 -2
  66. package/dist/modules/access/access.routes.d.ts.map +1 -1
  67. package/dist/modules/access/access.routes.js +32 -13
  68. package/dist/modules/access/access.routes.js.map +1 -1
  69. package/dist/modules/access/admin-locked-commit.d.ts +5 -5
  70. package/dist/modules/access/admin-locked-commit.d.ts.map +1 -1
  71. package/dist/modules/access/admin-locked-commit.js +7 -7
  72. package/dist/modules/access/admin-locked-commit.js.map +1 -1
  73. package/dist/modules/access/admin-route-helpers.d.ts +1 -1
  74. package/dist/modules/access/admin-route-helpers.js +5 -5
  75. package/dist/modules/access/admin-route-helpers.js.map +1 -1
  76. package/dist/modules/access/change-read-gate.d.ts +1 -1
  77. package/dist/modules/access/change-read-gate.js +1 -1
  78. package/dist/modules/access/groups-admin.service.d.ts +7 -7
  79. package/dist/modules/access/groups-admin.service.d.ts.map +1 -1
  80. package/dist/modules/access/groups-admin.service.js +6 -6
  81. package/dist/modules/access/groups-admin.service.js.map +1 -1
  82. package/dist/modules/access/index.d.ts +1 -1
  83. package/dist/modules/access/index.d.ts.map +1 -1
  84. package/dist/modules/access/reference-scan.d.ts +1 -1
  85. package/dist/modules/access/roles-admin.service.d.ts +7 -7
  86. package/dist/modules/access/roles-admin.service.d.ts.map +1 -1
  87. package/dist/modules/access/roles-admin.service.js +8 -8
  88. package/dist/modules/access/roles-admin.service.js.map +1 -1
  89. package/dist/modules/access/synced-groups-committer.d.ts +4 -4
  90. package/dist/modules/access/synced-groups-committer.d.ts.map +1 -1
  91. package/dist/modules/access/synced-groups-committer.js +7 -7
  92. package/dist/modules/access/synced-groups-committer.js.map +1 -1
  93. package/dist/modules/access/user-access-removal.service.d.ts +6 -6
  94. package/dist/modules/access/user-access-removal.service.d.ts.map +1 -1
  95. package/dist/modules/access/user-access-removal.service.js +4 -4
  96. package/dist/modules/access/user-access-removal.service.js.map +1 -1
  97. package/dist/modules/access-model/access-errors.d.ts +4 -4
  98. package/dist/modules/access-model/access-errors.d.ts.map +1 -1
  99. package/dist/modules/access-model/access-errors.js +4 -4
  100. package/dist/modules/access-model/access-errors.js.map +1 -1
  101. package/dist/modules/access-model/access-grammar.d.ts +1 -1
  102. package/dist/modules/access-model/access-grammar.js +4 -4
  103. package/dist/modules/access-model/change-gate.d.ts +1 -1
  104. package/dist/modules/access-model/change-gate.js +1 -1
  105. package/dist/modules/access-model/roles-yaml-guard.d.ts +4 -4
  106. package/dist/modules/access-model/roles-yaml-guard.d.ts.map +1 -1
  107. package/dist/modules/access-model/roles-yaml-guard.js +4 -4
  108. package/dist/modules/access-model/roles-yaml-guard.js.map +1 -1
  109. package/dist/modules/agent-guide/agent-guide.d.ts +63 -18
  110. package/dist/modules/agent-guide/agent-guide.d.ts.map +1 -1
  111. package/dist/modules/agent-guide/agent-guide.js +144 -30
  112. package/dist/modules/agent-guide/agent-guide.js.map +1 -1
  113. package/dist/modules/agent-guide/agent-guide.tools.d.ts +6 -2
  114. package/dist/modules/agent-guide/agent-guide.tools.d.ts.map +1 -1
  115. package/dist/modules/agent-guide/agent-guide.tools.js +45 -31
  116. package/dist/modules/agent-guide/agent-guide.tools.js.map +1 -1
  117. package/dist/modules/agent-guide/guide-budget.d.ts +51 -0
  118. package/dist/modules/agent-guide/guide-budget.d.ts.map +1 -0
  119. package/dist/modules/agent-guide/guide-budget.js +71 -0
  120. package/dist/modules/agent-guide/guide-budget.js.map +1 -0
  121. package/dist/modules/agent-guide/index.d.ts +2 -1
  122. package/dist/modules/agent-guide/index.d.ts.map +1 -1
  123. package/dist/modules/agent-guide/index.js +2 -1
  124. package/dist/modules/agent-guide/index.js.map +1 -1
  125. package/dist/modules/agent-instructions/agent-instructions.routes.d.ts +12 -5
  126. package/dist/modules/agent-instructions/agent-instructions.routes.d.ts.map +1 -1
  127. package/dist/modules/agent-instructions/agent-instructions.routes.js +13 -6
  128. package/dist/modules/agent-instructions/agent-instructions.routes.js.map +1 -1
  129. package/dist/modules/agent-instructions/compose.d.ts +15 -8
  130. package/dist/modules/agent-instructions/compose.d.ts.map +1 -1
  131. package/dist/modules/agent-instructions/compose.js +28 -10
  132. package/dist/modules/agent-instructions/compose.js.map +1 -1
  133. package/dist/modules/agent-instructions/shared-file-rules.d.ts +14 -6
  134. package/dist/modules/agent-instructions/shared-file-rules.d.ts.map +1 -1
  135. package/dist/modules/agent-instructions/shared-file-rules.js +60 -18
  136. package/dist/modules/agent-instructions/shared-file-rules.js.map +1 -1
  137. package/dist/modules/auth/account-erasure.service.d.ts +36 -7
  138. package/dist/modules/auth/account-erasure.service.d.ts.map +1 -1
  139. package/dist/modules/auth/account-erasure.service.js +30 -10
  140. package/dist/modules/auth/account-erasure.service.js.map +1 -1
  141. package/dist/modules/auth/account-hooks.d.ts +20 -0
  142. package/dist/modules/auth/account-hooks.d.ts.map +1 -1
  143. package/dist/modules/auth/account-hooks.js +10 -0
  144. package/dist/modules/auth/account-hooks.js.map +1 -1
  145. package/dist/modules/auth/account-switch-lock.js +2 -2
  146. package/dist/modules/auth/account-switch-lock.js.map +1 -1
  147. package/dist/modules/auth/account.routes.d.ts +7 -2
  148. package/dist/modules/auth/account.routes.d.ts.map +1 -1
  149. package/dist/modules/auth/account.routes.js +23 -4
  150. package/dist/modules/auth/account.routes.js.map +1 -1
  151. package/dist/modules/auth/auth.service.d.ts +1 -1
  152. package/dist/modules/auth/auth.service.js +4 -4
  153. package/dist/modules/auth/auth.service.js.map +1 -1
  154. package/dist/modules/auth/index.d.ts +1 -0
  155. package/dist/modules/auth/index.d.ts.map +1 -1
  156. package/dist/modules/code-mode/code-mode.tool.js +2 -2
  157. package/dist/modules/code-mode/code-mode.tool.js.map +1 -1
  158. package/dist/modules/connection-probe/connection-probe.service.d.ts +0 -12
  159. package/dist/modules/connection-probe/connection-probe.service.d.ts.map +1 -1
  160. package/dist/modules/connection-probe/connection-probe.service.js +1 -38
  161. package/dist/modules/connection-probe/connection-probe.service.js.map +1 -1
  162. package/dist/modules/database/core-schema.js +2 -2
  163. package/dist/modules/database/core-schema.js.map +1 -1
  164. package/dist/modules/diff/diff.routes.d.ts +3 -3
  165. package/dist/modules/diff/diff.routes.d.ts.map +1 -1
  166. package/dist/modules/diff/diff.routes.js +7 -7
  167. package/dist/modules/diff/diff.routes.js.map +1 -1
  168. package/dist/modules/embed/embed.routes.js +1 -1
  169. package/dist/modules/embed/embed.routes.js.map +1 -1
  170. package/dist/modules/embed/embed.service.d.ts +4 -4
  171. package/dist/modules/embed/embed.service.d.ts.map +1 -1
  172. package/dist/modules/embed/embed.service.js +18 -18
  173. package/dist/modules/embed/embed.service.js.map +1 -1
  174. package/dist/modules/kb-fs/branch-name.js +8 -8
  175. package/dist/modules/kb-fs/branch-name.js.map +1 -1
  176. package/dist/modules/kb-fs/file-change-notifier.d.ts +2 -2
  177. package/dist/modules/kb-fs/locking-filesystem.d.ts +9 -9
  178. package/dist/modules/kb-fs/locking-filesystem.d.ts.map +1 -1
  179. package/dist/modules/kb-fs/locking-filesystem.js +27 -27
  180. package/dist/modules/kb-fs/locking-filesystem.js.map +1 -1
  181. package/dist/modules/kb-fs/repo-path.js +5 -5
  182. package/dist/modules/kb-fs/repo-path.js.map +1 -1
  183. package/dist/modules/kb-fs/tmp-ref.d.ts +2 -2
  184. package/dist/modules/kb-fs/tmp-ref.d.ts.map +1 -1
  185. package/dist/modules/kb-fs/tmp-ref.js +2 -2
  186. package/dist/modules/kb-fs/tmp-ref.js.map +1 -1
  187. package/dist/modules/kb-sync/index.d.ts +1 -1
  188. package/dist/modules/kb-sync/index.d.ts.map +1 -1
  189. package/dist/modules/kb-sync/kb-sync.interface.d.ts +3 -3
  190. package/dist/modules/kb-sync/kb-sync.interface.d.ts.map +1 -1
  191. package/dist/modules/kb-sync/kb-sync.service.d.ts +3 -3
  192. package/dist/modules/kb-sync/kb-sync.service.d.ts.map +1 -1
  193. package/dist/modules/kb-sync/kb-sync.service.js +10 -10
  194. package/dist/modules/kb-sync/kb-sync.service.js.map +1 -1
  195. package/dist/modules/mcp/mcp.service.d.ts +11 -4
  196. package/dist/modules/mcp/mcp.service.d.ts.map +1 -1
  197. package/dist/modules/mcp/mcp.service.js +80 -53
  198. package/dist/modules/mcp/mcp.service.js.map +1 -1
  199. package/dist/modules/onboarding/onboarding.contract.d.ts +1 -1
  200. package/dist/modules/onboarding/onboarding.routes.js +2 -2
  201. package/dist/modules/onboarding/onboarding.routes.js.map +1 -1
  202. package/dist/modules/onboarding/starter-pack.service.d.ts +4 -4
  203. package/dist/modules/onboarding/starter-pack.service.d.ts.map +1 -1
  204. package/dist/modules/onboarding/starter-pack.service.js +4 -4
  205. package/dist/modules/onboarding/starter-pack.service.js.map +1 -1
  206. package/dist/modules/plugins/join-request-jobs.service.d.ts +2 -2
  207. package/dist/modules/plugins/join-request-jobs.service.d.ts.map +1 -1
  208. package/dist/modules/plugins/join-request-jobs.service.js +7 -7
  209. package/dist/modules/plugins/join-request-jobs.service.js.map +1 -1
  210. package/dist/modules/plugins/join-requests.service.d.ts +3 -3
  211. package/dist/modules/plugins/join-requests.service.d.ts.map +1 -1
  212. package/dist/modules/plugins/join-requests.service.js +5 -5
  213. package/dist/modules/plugins/join-requests.service.js.map +1 -1
  214. package/dist/modules/plugins/plugin-rename.service.js +1 -1
  215. package/dist/modules/plugins/plugin-rename.service.js.map +1 -1
  216. package/dist/modules/plugins/plugins.routes.d.ts +2 -2
  217. package/dist/modules/plugins/plugins.routes.d.ts.map +1 -1
  218. package/dist/modules/plugins/plugins.routes.js +8 -8
  219. package/dist/modules/plugins/plugins.routes.js.map +1 -1
  220. package/dist/modules/secrets-vault/db-secrets-vault.service.d.ts +87 -2
  221. package/dist/modules/secrets-vault/db-secrets-vault.service.d.ts.map +1 -1
  222. package/dist/modules/secrets-vault/db-secrets-vault.service.js +635 -74
  223. package/dist/modules/secrets-vault/db-secrets-vault.service.js.map +1 -1
  224. package/dist/modules/secrets-vault/index.d.ts +3 -2
  225. package/dist/modules/secrets-vault/index.d.ts.map +1 -1
  226. package/dist/modules/secrets-vault/index.js +2 -1
  227. package/dist/modules/secrets-vault/index.js.map +1 -1
  228. package/dist/modules/secrets-vault/managed-sign-in-erasure.d.ts +36 -0
  229. package/dist/modules/secrets-vault/managed-sign-in-erasure.d.ts.map +1 -0
  230. package/dist/modules/secrets-vault/managed-sign-in-erasure.js +37 -0
  231. package/dist/modules/secrets-vault/managed-sign-in-erasure.js.map +1 -0
  232. package/dist/modules/secrets-vault/secrets-vault.contract.d.ts +205 -11
  233. package/dist/modules/secrets-vault/secrets-vault.contract.d.ts.map +1 -1
  234. package/dist/modules/secrets-vault/secrets-vault.contract.js +27 -0
  235. package/dist/modules/secrets-vault/secrets-vault.contract.js.map +1 -1
  236. package/dist/modules/secrets-vault/secrets-vault.routes.d.ts +7 -1
  237. package/dist/modules/secrets-vault/secrets-vault.routes.d.ts.map +1 -1
  238. package/dist/modules/secrets-vault/secrets-vault.routes.js +206 -45
  239. package/dist/modules/secrets-vault/secrets-vault.routes.js.map +1 -1
  240. package/dist/modules/settings/connection-check.js +1 -1
  241. package/dist/modules/settings/connection-check.js.map +1 -1
  242. package/dist/modules/settings/deployment-settings.service.js +1 -1
  243. package/dist/modules/settings/git-root-folders.js +1 -1
  244. package/dist/modules/settings/git-root-folders.js.map +1 -1
  245. package/dist/modules/settings/oidc-check.d.ts.map +1 -1
  246. package/dist/modules/settings/oidc-check.js +5 -17
  247. package/dist/modules/settings/oidc-check.js.map +1 -1
  248. package/dist/modules/settings/setup.routes.d.ts +1 -1
  249. package/dist/modules/settings/setup.routes.js +1 -1
  250. package/dist/modules/skills/pending-skills.service.d.ts +3 -3
  251. package/dist/modules/skills/pending-skills.service.d.ts.map +1 -1
  252. package/dist/modules/skills/pending-skills.service.js +4 -4
  253. package/dist/modules/skills/pending-skills.service.js.map +1 -1
  254. package/dist/modules/skills/skill-access-requests.routes.d.ts +2 -2
  255. package/dist/modules/skills/skill-access-requests.routes.d.ts.map +1 -1
  256. package/dist/modules/skills/skill-access-requests.routes.js +5 -5
  257. package/dist/modules/skills/skill-access-requests.routes.js.map +1 -1
  258. package/dist/modules/skills/skills.tools.js +1 -1
  259. package/dist/modules/skills/skills.tools.js.map +1 -1
  260. package/dist/modules/tool-helpers/tool-context.d.ts +4 -4
  261. package/dist/modules/tool-helpers/tool-context.d.ts.map +1 -1
  262. package/dist/modules/tool-helpers/tool-context.js +2 -2
  263. package/dist/modules/tool-helpers/tool-context.js.map +1 -1
  264. package/dist/modules/tool-helpers/tool-def.js +1 -1
  265. package/dist/modules/tool-helpers/tool-def.js.map +1 -1
  266. package/dist/modules/tool-helpers/tool-handler.js +2 -2
  267. package/dist/modules/tool-helpers/tool-handler.js.map +1 -1
  268. package/dist/modules/tool-helpers/tool.contract.d.ts +4 -4
  269. package/dist/modules/tool-helpers/tool.contract.d.ts.map +1 -1
  270. package/dist/modules/tool-manuals/mcp-json-discovery.d.ts +7 -1
  271. package/dist/modules/tool-manuals/mcp-json-discovery.d.ts.map +1 -1
  272. package/dist/modules/tool-manuals/mcp-json-discovery.js +69 -38
  273. package/dist/modules/tool-manuals/mcp-json-discovery.js.map +1 -1
  274. package/dist/modules/tool-manuals/mcp-server-edit.service.js +1 -1
  275. package/dist/modules/tool-manuals/mcp-server-edit.service.js.map +1 -1
  276. package/dist/modules/tool-manuals/pending-tools.service.d.ts +3 -3
  277. package/dist/modules/tool-manuals/pending-tools.service.d.ts.map +1 -1
  278. package/dist/modules/tool-manuals/pending-tools.service.js +4 -4
  279. package/dist/modules/tool-manuals/pending-tools.service.js.map +1 -1
  280. package/dist/modules/tool-manuals/tool-delete.service.js +1 -1
  281. package/dist/modules/tool-manuals/tool-delete.service.js.map +1 -1
  282. package/dist/modules/tool-manuals/tool-manuals.contract.d.ts +70 -3
  283. package/dist/modules/tool-manuals/tool-manuals.contract.d.ts.map +1 -1
  284. package/dist/modules/tool-manuals/tool-manuals.service.d.ts +18 -8
  285. package/dist/modules/tool-manuals/tool-manuals.service.d.ts.map +1 -1
  286. package/dist/modules/tool-manuals/tool-manuals.service.js +166 -49
  287. package/dist/modules/tool-manuals/tool-manuals.service.js.map +1 -1
  288. package/dist/modules/tool-manuals/tool-manuals.tools.d.ts +11 -2
  289. package/dist/modules/tool-manuals/tool-manuals.tools.d.ts.map +1 -1
  290. package/dist/modules/tool-manuals/tool-manuals.tools.js +66 -24
  291. package/dist/modules/tool-manuals/tool-manuals.tools.js.map +1 -1
  292. package/dist/modules/version-control/agent-tools/change-request-read-shape.d.ts.map +1 -0
  293. package/dist/modules/version-control/agent-tools/change-request-read-shape.js.map +1 -0
  294. package/dist/modules/version-control/agent-tools/change-request-read.tools.d.ts.map +1 -0
  295. package/dist/modules/{workflow → version-control}/agent-tools/change-request-read.tools.js +2 -2
  296. package/dist/modules/version-control/agent-tools/change-request-read.tools.js.map +1 -0
  297. package/dist/modules/version-control/agent-tools/change-request-summary.d.ts.map +1 -0
  298. package/dist/modules/version-control/agent-tools/change-request-summary.js.map +1 -0
  299. package/dist/modules/{workflow/agent-tools/workflow.tools.d.ts → version-control/agent-tools/version-control.tools.d.ts} +4 -4
  300. package/dist/modules/version-control/agent-tools/version-control.tools.d.ts.map +1 -0
  301. package/dist/modules/{workflow/agent-tools/workflow.tools.js → version-control/agent-tools/version-control.tools.js} +53 -49
  302. package/dist/modules/version-control/agent-tools/version-control.tools.js.map +1 -0
  303. package/dist/modules/{workflow → version-control}/change-request-hooks.d.ts +1 -1
  304. package/dist/modules/version-control/change-request-hooks.d.ts.map +1 -0
  305. package/dist/modules/version-control/change-request-hooks.js.map +1 -0
  306. package/dist/modules/version-control/change-request-review/approval-lock.d.ts.map +1 -0
  307. package/dist/modules/version-control/change-request-review/approval-lock.js.map +1 -0
  308. package/dist/modules/{workflow/review-workflow/review-workflow.interface.d.ts → version-control/change-request-review/change-request-review.interface.d.ts} +2 -2
  309. package/dist/modules/version-control/change-request-review/change-request-review.interface.d.ts.map +1 -0
  310. package/dist/modules/version-control/change-request-review/change-request-review.interface.js +2 -0
  311. package/dist/modules/version-control/change-request-review/change-request-review.interface.js.map +1 -0
  312. package/dist/modules/{workflow/review-workflow/review-workflow.service.d.ts → version-control/change-request-review/change-request-review.service.d.ts} +3 -3
  313. package/dist/modules/version-control/change-request-review/change-request-review.service.d.ts.map +1 -0
  314. package/dist/modules/{workflow/review-workflow/review-workflow.service.js → version-control/change-request-review/change-request-review.service.js} +26 -26
  315. package/dist/modules/version-control/change-request-review/change-request-review.service.js.map +1 -0
  316. package/dist/modules/{workflow → version-control}/event-bus.d.ts +8 -8
  317. package/dist/modules/version-control/event-bus.d.ts.map +1 -0
  318. package/dist/modules/{workflow → version-control}/event-bus.js +4 -4
  319. package/dist/modules/version-control/event-bus.js.map +1 -0
  320. package/dist/modules/{workflow → version-control}/events-delivery.d.ts +4 -4
  321. package/dist/modules/version-control/events-delivery.d.ts.map +1 -0
  322. package/dist/modules/version-control/events-delivery.js.map +1 -0
  323. package/dist/modules/{workflow → version-control}/events.routes.d.ts +4 -4
  324. package/dist/modules/version-control/events.routes.d.ts.map +1 -0
  325. package/dist/modules/version-control/events.routes.js.map +1 -0
  326. package/dist/modules/{workflow → version-control}/file-lock.service.d.ts +2 -2
  327. package/dist/modules/version-control/file-lock.service.d.ts.map +1 -0
  328. package/dist/modules/{workflow → version-control}/file-lock.service.js +6 -6
  329. package/dist/modules/version-control/file-lock.service.js.map +1 -0
  330. package/dist/modules/version-control/git/change-request-link.d.ts.map +1 -0
  331. package/dist/modules/version-control/git/change-request-link.js.map +1 -0
  332. package/dist/modules/version-control/git/git-version.d.ts.map +1 -0
  333. package/dist/modules/version-control/git/git-version.js.map +1 -0
  334. package/dist/modules/{workflow → version-control}/git/git.service.d.ts +8 -8
  335. package/dist/modules/version-control/git/git.service.d.ts.map +1 -0
  336. package/dist/modules/{workflow → version-control}/git/git.service.js +53 -53
  337. package/dist/modules/version-control/git/git.service.js.map +1 -0
  338. package/dist/modules/version-control/git/merge-commit.d.ts.map +1 -0
  339. package/dist/modules/version-control/git/merge-commit.js.map +1 -0
  340. package/dist/modules/version-control/git/node-git-runner.d.ts.map +1 -0
  341. package/dist/modules/{workflow → version-control}/git/node-git-runner.js +1 -1
  342. package/dist/modules/version-control/git/node-git-runner.js.map +1 -0
  343. package/dist/modules/{workflow → version-control}/git/pull-request.service.d.ts +5 -5
  344. package/dist/modules/version-control/git/pull-request.service.d.ts.map +1 -0
  345. package/dist/modules/{workflow → version-control}/git/pull-request.service.js +10 -10
  346. package/dist/modules/version-control/git/pull-request.service.js.map +1 -0
  347. package/dist/modules/{workflow → version-control}/index.d.ts +6 -5
  348. package/dist/modules/version-control/index.d.ts.map +1 -0
  349. package/dist/modules/{workflow → version-control}/index.js +3 -2
  350. package/dist/modules/version-control/index.js.map +1 -0
  351. package/dist/modules/{workflow → version-control}/pending-commits.service.d.ts +2 -2
  352. package/dist/modules/version-control/pending-commits.service.d.ts.map +1 -0
  353. package/dist/modules/{workflow → version-control}/pending-commits.service.js +2 -2
  354. package/dist/modules/version-control/pending-commits.service.js.map +1 -0
  355. package/dist/modules/{workflow → version-control}/pending-commits.worker.d.ts +5 -5
  356. package/dist/modules/version-control/pending-commits.worker.d.ts.map +1 -0
  357. package/dist/modules/{workflow → version-control}/pending-commits.worker.js +3 -3
  358. package/dist/modules/version-control/pending-commits.worker.js.map +1 -0
  359. package/dist/modules/{workflow → version-control}/read-on-branch.d.ts +2 -2
  360. package/dist/modules/version-control/read-on-branch.d.ts.map +1 -0
  361. package/dist/modules/{workflow → version-control}/read-on-branch.js +2 -2
  362. package/dist/modules/version-control/read-on-branch.js.map +1 -0
  363. package/dist/modules/version-control/recovery-bot.d.ts.map +1 -0
  364. package/dist/modules/version-control/recovery-bot.js.map +1 -0
  365. package/dist/modules/version-control/sanitize-error.d.ts.map +1 -0
  366. package/dist/modules/version-control/sanitize-error.js.map +1 -0
  367. package/dist/modules/{workflow/workflow-hooks.d.ts → version-control/version-control-hooks.d.ts} +4 -4
  368. package/dist/modules/version-control/version-control-hooks.d.ts.map +1 -0
  369. package/dist/modules/{workflow/workflow-hooks.js → version-control/version-control-hooks.js} +3 -3
  370. package/dist/modules/version-control/version-control-hooks.js.map +1 -0
  371. package/dist/modules/{workflow/workflow.routes.d.ts → version-control/version-control.routes.d.ts} +6 -5
  372. package/dist/modules/version-control/version-control.routes.d.ts.map +1 -0
  373. package/dist/modules/{workflow/workflow.routes.js → version-control/version-control.routes.js} +61 -60
  374. package/dist/modules/version-control/version-control.routes.js.map +1 -0
  375. package/dist/modules/{workflow/workflow.service.d.ts → version-control/version-control.service.d.ts} +26 -31
  376. package/dist/modules/version-control/version-control.service.d.ts.map +1 -0
  377. package/dist/modules/{workflow/workflow.service.js → version-control/version-control.service.js} +89 -94
  378. package/dist/modules/version-control/version-control.service.js.map +1 -0
  379. package/dist/modules/workspace/agent-access.gate.d.ts +6 -6
  380. package/dist/modules/workspace/agent-access.gate.d.ts.map +1 -1
  381. package/dist/modules/workspace/agent-access.gate.js +2 -2
  382. package/dist/modules/workspace/agent-access.gate.js.map +1 -1
  383. package/dist/modules/workspace/git-internals.middleware.d.ts +1 -1
  384. package/dist/modules/workspace/git-internals.middleware.js +2 -2
  385. package/dist/modules/workspace/kb-repository.js +1 -1
  386. package/dist/modules/workspace/kb-repository.js.map +1 -1
  387. package/dist/modules/workspace/startup/kb-git.d.ts +1 -1
  388. package/dist/modules/workspace/startup/kb-git.d.ts.map +1 -1
  389. package/dist/modules/workspace/startup/kb-git.js +1 -1
  390. package/dist/modules/workspace/startup/kb-git.js.map +1 -1
  391. package/dist/modules/workspace/startup/steps/seed-tree.d.ts +2 -2
  392. package/dist/modules/workspace/startup/steps/seed-tree.d.ts.map +1 -1
  393. package/dist/modules/workspace/startup/steps/seed-tree.js +1 -1
  394. package/dist/modules/workspace/startup/steps/seed-tree.js.map +1 -1
  395. package/dist/modules/workspace/startup/steps/template-files.step.d.ts +2 -2
  396. package/dist/modules/workspace/startup/steps/template-files.step.d.ts.map +1 -1
  397. package/dist/modules/workspace/startup/steps/template-files.step.js +2 -2
  398. package/dist/modules/workspace/startup/steps/template-files.step.js.map +1 -1
  399. package/dist/modules/workspace/startup/steps/template-source.d.ts +17 -4
  400. package/dist/modules/workspace/startup/steps/template-source.d.ts.map +1 -1
  401. package/dist/modules/workspace/startup/steps/template-source.js +8 -5
  402. package/dist/modules/workspace/startup/steps/template-source.js.map +1 -1
  403. package/dist/modules/workspace/workspace-tmp.js +3 -3
  404. package/dist/modules/workspace/workspace-tmp.js.map +1 -1
  405. package/dist/modules/workspace/workspace.routes.d.ts +4 -4
  406. package/dist/modules/workspace/workspace.routes.d.ts.map +1 -1
  407. package/dist/modules/workspace/workspace.routes.js +22 -22
  408. package/dist/modules/workspace/workspace.routes.js.map +1 -1
  409. package/dist/modules/workspace/workspace.service.d.ts +6 -6
  410. package/dist/modules/workspace/workspace.service.d.ts.map +1 -1
  411. package/dist/modules/workspace/workspace.service.js +11 -11
  412. package/dist/modules/workspace/workspace.service.js.map +1 -1
  413. package/dist/modules/workspace/workspace.tools.d.ts +5 -3
  414. package/dist/modules/workspace/workspace.tools.d.ts.map +1 -1
  415. package/dist/modules/workspace/workspace.tools.js +85 -30
  416. package/dist/modules/workspace/workspace.tools.js.map +1 -1
  417. package/dist/shared/canonical-file-identity.d.ts +2 -2
  418. package/dist/shared/canonical-file-identity.js +5 -5
  419. package/dist/shared/canonical-file-identity.js.map +1 -1
  420. package/dist/shared/domain-errors.d.ts +39 -39
  421. package/dist/shared/domain-errors.d.ts.map +1 -1
  422. package/dist/shared/domain-errors.js +44 -44
  423. package/dist/shared/domain-errors.js.map +1 -1
  424. package/dist/shared/git.contract.d.ts +1 -1
  425. package/dist/shared/git.contract.js +1 -1
  426. package/dist/shared/http-errors.d.ts +3 -3
  427. package/dist/shared/http-errors.d.ts.map +1 -1
  428. package/dist/shared/http-errors.js +1 -1
  429. package/dist/shared/http-errors.js.map +1 -1
  430. package/dist/shared/oauth-token-error.d.ts +23 -0
  431. package/dist/shared/oauth-token-error.d.ts.map +1 -0
  432. package/dist/shared/oauth-token-error.js +47 -0
  433. package/dist/shared/oauth-token-error.js.map +1 -0
  434. package/dist/shared/pending-proposals.d.ts +3 -3
  435. package/dist/shared/pending-proposals.d.ts.map +1 -1
  436. package/dist/shared/pending-proposals.js +2 -2
  437. package/dist/shared/pending-proposals.js.map +1 -1
  438. package/dist/shared/read-capped.d.ts +19 -0
  439. package/dist/shared/read-capped.d.ts.map +1 -0
  440. package/dist/shared/read-capped.js +45 -0
  441. package/dist/shared/read-capped.js.map +1 -0
  442. package/dist/tenancy/static-tenant-source.js +1 -1
  443. package/dist/tenancy/static-tenant-source.js.map +1 -1
  444. package/migrations/0012_agent_audit.sql +40 -40
  445. package/migrations/0013_agent_identity_and_key_soft_delete.sql +29 -29
  446. package/migrations/meta/0012_snapshot.json +2246 -2246
  447. package/migrations/meta/0013_snapshot.json +2258 -2258
  448. package/package.json +5 -4
  449. package/src/__tests__/account-admin.ts +27 -0
  450. package/src/__tests__/hexis-catalog.ts +144 -0
  451. package/src/__tests__/kb-context.ts +30 -30
  452. package/src/__tests__/kb-layout-config.test.ts +21 -0
  453. package/src/__tests__/open-change-gate.ts +1 -1
  454. package/src/__tests__/real-disk.ts +21 -0
  455. package/src/__tests__/tokens.ts +19 -0
  456. package/src/__tests__/tool-handler.ts +15 -0
  457. package/src/__tests__/tool-manuals.ts +32 -0
  458. package/src/__tests__/tool-wiring.ts +31 -0
  459. package/src/__tests__/workspace-service.ts +1 -1
  460. package/src/core/__tests__/catalog-cache-invalidation.test.ts +3 -3
  461. package/src/core/__tests__/compose-embed.test.ts +1 -1
  462. package/src/core/__tests__/damaged-document.tools.test.ts +3 -3
  463. package/src/core/__tests__/erasure-slices-wired-once.test.ts +46 -0
  464. package/src/core/__tests__/gated-boot.test.ts +2 -2
  465. package/src/core/__tests__/lifecycle.test.ts +9 -9
  466. package/src/core/__tests__/oauth-sign-in-real-file.test.ts +179 -0
  467. package/src/core/catalog-cache-invalidation.ts +2 -2
  468. package/src/core/compose-embed.ts +3 -3
  469. package/src/core/core-ports.ts +19 -4
  470. package/src/core/create-core-server.ts +40 -26
  471. package/src/core/create-core-services.ts +92 -66
  472. package/src/core/lifecycle.ts +9 -9
  473. package/src/core-config.ts +3 -3
  474. package/src/index.ts +5 -5
  475. package/src/modules/access/__tests__/access-control.admin-root-floor.test.ts +4 -4
  476. package/src/modules/access/__tests__/access-own-read-grant.test.ts +14 -14
  477. package/src/modules/access/__tests__/access-requests.routes.test.ts +20 -20
  478. package/src/modules/access/__tests__/access.routes.admins.test.ts +4 -4
  479. package/src/modules/access/__tests__/access.routes.batch.test.ts +4 -4
  480. package/src/modules/access/__tests__/access.routes.folder-governs.test.ts +6 -6
  481. package/src/modules/access/__tests__/access.routes.group-grant.test.ts +6 -6
  482. package/src/modules/access/__tests__/access.routes.overrides.test.ts +5 -5
  483. package/src/modules/access/__tests__/access.routes.proposal-branch.test.ts +6 -6
  484. package/src/modules/access/__tests__/access.routes.prospective.test.ts +54 -14
  485. package/src/modules/access/__tests__/access.routes.revoke.test.ts +6 -6
  486. package/src/modules/access/__tests__/access.routes.unknown-email.test.ts +6 -6
  487. package/src/modules/access/__tests__/admin-locked-commit.test.ts +6 -6
  488. package/src/modules/access/__tests__/admin-route-helpers.test.ts +5 -5
  489. package/src/modules/access/__tests__/groups-admin.service.test.ts +27 -27
  490. package/src/modules/access/__tests__/holder-changes.test.ts +127 -0
  491. package/src/modules/access/__tests__/roles-admin.security.test.ts +14 -13
  492. package/src/modules/access/__tests__/roles-admin.service.test.ts +27 -27
  493. package/src/modules/access/__tests__/roles-capabilities.test.ts +19 -19
  494. package/src/modules/access/__tests__/roles.routes.test.ts +6 -6
  495. package/src/modules/access/__tests__/synced-groups-committer.test.ts +13 -13
  496. package/src/modules/access/__tests__/user-access-removal.service.test.ts +29 -29
  497. package/src/modules/access/access-control.interface.ts +26 -0
  498. package/src/modules/access/access-control.service.ts +93 -1
  499. package/src/modules/access/access-declarations.ts +2 -2
  500. package/src/modules/access/access-mutation.service.ts +2 -2
  501. package/src/modules/access/access-requests.routes.ts +7 -7
  502. package/src/modules/access/access-requests.service.ts +13 -13
  503. package/src/modules/access/access.routes.ts +34 -15
  504. package/src/modules/access/admin-locked-commit.ts +11 -11
  505. package/src/modules/access/admin-route-helpers.ts +5 -5
  506. package/src/modules/access/change-read-gate.ts +1 -1
  507. package/src/modules/access/groups-admin.service.ts +7 -7
  508. package/src/modules/access/index.ts +1 -1
  509. package/src/modules/access/reference-scan.ts +1 -1
  510. package/src/modules/access/roles-admin.service.ts +9 -9
  511. package/src/modules/access/synced-groups-committer.ts +11 -11
  512. package/src/modules/access/user-access-removal.service.ts +7 -7
  513. package/src/modules/access-model/__tests__/access-grammar.test.ts +2 -2
  514. package/src/modules/access-model/access-errors.ts +4 -4
  515. package/src/modules/access-model/access-grammar.ts +4 -4
  516. package/src/modules/access-model/change-gate.ts +1 -1
  517. package/src/modules/access-model/roles-yaml-guard.ts +4 -4
  518. package/src/modules/agent-guide/__tests__/agent-guide.test.ts +98 -29
  519. package/src/modules/agent-guide/__tests__/agent-guide.tools.test.ts +39 -12
  520. package/src/modules/agent-guide/__tests__/guide-budget.test.ts +95 -0
  521. package/src/modules/agent-guide/__tests__/guide-eval.test.ts +182 -0
  522. package/src/modules/agent-guide/__tests__/guide-matches-code.test.ts +263 -0
  523. package/src/modules/agent-guide/__tests__/tool-surface.json +514 -0
  524. package/src/modules/agent-guide/__tests__/tool-surface.test.ts +75 -0
  525. package/src/modules/agent-guide/agent-guide.tools.ts +49 -31
  526. package/src/modules/agent-guide/agent-guide.ts +165 -32
  527. package/src/modules/agent-guide/guide-budget.ts +77 -0
  528. package/src/modules/agent-guide/index.ts +12 -0
  529. package/src/modules/agent-instructions/__tests__/agent-instructions.route.test.ts +4 -5
  530. package/src/modules/agent-instructions/__tests__/compose.test.ts +1 -1
  531. package/src/modules/agent-instructions/__tests__/shared-file-rules.test.ts +117 -11
  532. package/src/modules/agent-instructions/agent-instructions.routes.ts +12 -5
  533. package/src/modules/agent-instructions/compose.ts +28 -9
  534. package/src/modules/agent-instructions/shared-file-rules.ts +62 -18
  535. package/src/modules/agent-scope/__tests__/agent-surfaces.connect-as.test.ts +1 -1
  536. package/src/modules/audit/__tests__/agent-rest-audit.middleware.test.ts +113 -113
  537. package/src/modules/audit/__tests__/event-classifier.test.ts +121 -121
  538. package/src/modules/audit/event-classifier.ts +155 -155
  539. package/src/modules/auth/__tests__/account-deactivation.test.ts +1 -1
  540. package/src/modules/auth/__tests__/account-erasure.approval-gate.test.ts +4 -4
  541. package/src/modules/auth/__tests__/account-erasure.participants.test.ts +56 -0
  542. package/src/modules/auth/__tests__/account-switch-lock.pg.test.ts +2 -2
  543. package/src/modules/auth/__tests__/account-switch-lock.test.ts +2 -2
  544. package/src/modules/auth/__tests__/account.routes.test.ts +73 -11
  545. package/src/modules/auth/__tests__/auth.service.test.ts +1 -1
  546. package/src/modules/auth/account-erasure.service.ts +27 -9
  547. package/src/modules/auth/account-hooks.ts +34 -0
  548. package/src/modules/auth/account-switch-lock.ts +2 -2
  549. package/src/modules/auth/account.routes.ts +23 -5
  550. package/src/modules/auth/auth.service.ts +4 -4
  551. package/src/modules/auth/index.ts +1 -0
  552. package/src/modules/code-mode/code-mode.tool.ts +2 -2
  553. package/src/modules/connection-probe/__tests__/connection-probe.service.test.ts +5 -24
  554. package/src/modules/connection-probe/connection-probe.service.ts +1 -34
  555. package/src/modules/database/__tests__/advisory-lock.test.ts +169 -169
  556. package/src/modules/database/__tests__/migrations-unqualified.test.ts +32 -32
  557. package/src/modules/database/core-schema.ts +2 -2
  558. package/src/modules/diff/__tests__/diff.routes.read-gate.test.ts +2 -2
  559. package/src/modules/diff/__tests__/diff.routes.rejectPathsLocked.test.ts +12 -12
  560. package/src/modules/diff/diff.routes.ts +8 -8
  561. package/src/modules/embed/__tests__/embed.service.lock.test.ts +7 -7
  562. package/src/modules/embed/__tests__/embed.service.test.ts +42 -42
  563. package/src/modules/embed/__tests__/embed.tools.test.ts +1 -1
  564. package/src/modules/embed/embed.routes.ts +1 -1
  565. package/src/modules/embed/embed.service.ts +17 -17
  566. package/src/modules/kb-fs/__tests__/branch-name.test.ts +2 -2
  567. package/src/modules/kb-fs/__tests__/locking-filesystem.test.ts +260 -260
  568. package/src/modules/kb-fs/__tests__/move-with-edits.test.ts +34 -34
  569. package/src/modules/kb-fs/__tests__/repo-path.test.ts +8 -8
  570. package/src/modules/kb-fs/branch-name.ts +8 -8
  571. package/src/modules/kb-fs/file-change-notifier.ts +2 -2
  572. package/src/modules/kb-fs/locking-filesystem.ts +30 -30
  573. package/src/modules/kb-fs/repo-path.ts +5 -5
  574. package/src/modules/kb-fs/tmp-ref.ts +3 -3
  575. package/src/modules/kb-sync/__tests__/kb-sync.service.test.ts +36 -36
  576. package/src/modules/kb-sync/index.ts +1 -1
  577. package/src/modules/kb-sync/kb-sync.interface.ts +3 -3
  578. package/src/modules/kb-sync/kb-sync.service.ts +9 -9
  579. package/src/modules/marketplace/__tests__/github-facade.test.ts +1 -1
  580. package/src/modules/marketplace/__tests__/marketplace-git.test.ts +1 -1
  581. package/src/modules/mcp/__tests__/mcp-proxy-helpers.test.ts +4 -2
  582. package/src/modules/mcp/__tests__/mcp.e2e.test.ts +69 -8
  583. package/src/modules/mcp/__tests__/mcp.service.test.ts +91 -13
  584. package/src/modules/mcp/__tests__/read-only-hint.pg.test.ts +194 -0
  585. package/src/modules/mcp/mcp.service.ts +93 -62
  586. package/src/modules/onboarding/__tests__/starter-pack.service.test.ts +55 -55
  587. package/src/modules/onboarding/onboarding.contract.ts +1 -1
  588. package/src/modules/onboarding/onboarding.routes.ts +2 -2
  589. package/src/modules/onboarding/starter-pack.service.ts +6 -6
  590. package/src/modules/plugins/__tests__/bundle-dialect.e2e.test.ts +1 -1
  591. package/src/modules/plugins/__tests__/compile-marketplace.test.ts +1 -1
  592. package/src/modules/plugins/__tests__/join-request-jobs.service.test.ts +43 -43
  593. package/src/modules/plugins/__tests__/join-requests.service.test.ts +19 -19
  594. package/src/modules/plugins/__tests__/join-requests.settlement.test.ts +26 -26
  595. package/src/modules/plugins/__tests__/plugins.routes.test.ts +25 -25
  596. package/src/modules/plugins/join-request-jobs.service.ts +10 -10
  597. package/src/modules/plugins/join-requests.service.ts +4 -4
  598. package/src/modules/plugins/plugin-rename.service.ts +1 -1
  599. package/src/modules/plugins/plugins.routes.ts +9 -9
  600. package/src/modules/secrets-vault/__tests__/db-secrets-vault.managed.test.ts +773 -0
  601. package/src/modules/secrets-vault/__tests__/db-secrets-vault.oauth.test.ts +458 -4
  602. package/src/modules/secrets-vault/__tests__/managed-sign-in.route.test.ts +351 -0
  603. package/src/modules/secrets-vault/__tests__/oauth-live-declaration.route.test.ts +218 -0
  604. package/src/modules/secrets-vault/__tests__/oauth-return-to.route.test.ts +39 -6
  605. package/src/modules/secrets-vault/db-secrets-vault.service.ts +728 -118
  606. package/src/modules/secrets-vault/index.ts +8 -1
  607. package/src/modules/secrets-vault/managed-sign-in-erasure.ts +41 -0
  608. package/src/modules/secrets-vault/secrets-variable-loader.ts +134 -134
  609. package/src/modules/secrets-vault/secrets-vault.contract.ts +213 -11
  610. package/src/modules/secrets-vault/secrets-vault.routes.ts +244 -45
  611. package/src/modules/settings/__tests__/repository-source.test.ts +1 -1
  612. package/src/modules/settings/__tests__/setup.routes.layout-phase.test.ts +1 -1
  613. package/src/modules/settings/__tests__/setup.routes.managed-phase.test.ts +1 -1
  614. package/src/modules/settings/connection-check.ts +1 -1
  615. package/src/modules/settings/deployment-settings.service.ts +1 -1
  616. package/src/modules/settings/git-root-folders.ts +1 -1
  617. package/src/modules/settings/oidc-check.ts +5 -18
  618. package/src/modules/settings/setup.routes.ts +1 -1
  619. package/src/modules/skills/__tests__/allowed-tools-warn.tools.test.ts +3 -3
  620. package/src/modules/skills/__tests__/branch-skills.tools.test.ts +1 -1
  621. package/src/modules/skills/__tests__/pending-skills.service.test.ts +8 -8
  622. package/src/modules/skills/__tests__/skill-access-requests.routes.test.ts +18 -18
  623. package/src/modules/skills/__tests__/skills.service.test.ts +3 -3
  624. package/src/modules/skills/pending-skills.service.ts +3 -3
  625. package/src/modules/skills/skill-access-requests.routes.ts +7 -7
  626. package/src/modules/skills/skills.tools.ts +1 -1
  627. package/src/modules/tool-helpers/__tests__/agent-roles-write.test.ts +22 -14
  628. package/src/modules/tool-helpers/__tests__/branch-declaration.test.ts +3 -3
  629. package/src/modules/tool-helpers/__tests__/can-write.tools.test.ts +3 -3
  630. package/src/modules/tool-helpers/__tests__/phase4-tools.test.ts +4 -4
  631. package/src/modules/tool-helpers/__tests__/route-tool-schemas.catalog.test.ts +38 -0
  632. package/src/modules/tool-helpers/__tests__/tools-surface.test.ts +3 -3
  633. package/src/modules/tool-helpers/__tests__/validate-token.test.ts +1 -1
  634. package/src/modules/tool-helpers/tool-context.ts +6 -6
  635. package/src/modules/tool-helpers/tool-def.ts +1 -1
  636. package/src/modules/tool-helpers/tool-handler.ts +2 -2
  637. package/src/modules/tool-helpers/tool.contract.ts +4 -4
  638. package/src/modules/tool-manuals/__tests__/pending-tools.service.test.ts +9 -9
  639. package/src/modules/tool-manuals/__tests__/tool-manuals.managed-sign-in.test.ts +89 -0
  640. package/src/modules/tool-manuals/__tests__/tool-manuals.mcp-oauth.test.ts +197 -11
  641. package/src/modules/tool-manuals/__tests__/tool-manuals.restart.test.ts +1 -1
  642. package/src/modules/tool-manuals/__tests__/tool-manuals.tools.test.ts +132 -6
  643. package/src/modules/tool-manuals/mcp-json-discovery.ts +73 -34
  644. package/src/modules/tool-manuals/mcp-server-edit.service.ts +1 -1
  645. package/src/modules/tool-manuals/pending-tools.service.ts +3 -3
  646. package/src/modules/tool-manuals/tool-delete.service.ts +1 -1
  647. package/src/modules/tool-manuals/tool-manuals.contract.ts +63 -3
  648. package/src/modules/tool-manuals/tool-manuals.service.ts +191 -51
  649. package/src/modules/tool-manuals/tool-manuals.tools.ts +93 -28
  650. package/src/modules/tool-registry/__tests__/own-tool-schemas.test.ts +4 -4
  651. package/src/modules/tool-registry/__tests__/read-only-hints.test.ts +3 -3
  652. package/src/modules/tool-registry/__tests__/tool-description-length.test.ts +12 -119
  653. package/src/modules/{workflow → version-control}/__tests__/apply-failure.test.ts +54 -54
  654. package/src/modules/{workflow → version-control}/__tests__/event-bus.test.ts +27 -27
  655. package/src/modules/{workflow → version-control}/__tests__/events-delivery.test.ts +37 -37
  656. package/src/modules/{workflow → version-control}/__tests__/file-lock.service.deletion-gate.test.ts +2 -2
  657. package/src/modules/{workflow → version-control}/__tests__/file-lock.service.path-identity.test.ts +8 -8
  658. package/src/modules/{workflow → version-control}/__tests__/merge-announces-tree.test.ts +11 -11
  659. package/src/modules/{workflow → version-control}/__tests__/pending-commits.worker.concurrency.test.ts +9 -9
  660. package/src/modules/{workflow → version-control}/__tests__/pending-commits.worker.test.ts +25 -25
  661. package/src/modules/{workflow → version-control}/__tests__/preserve-roles-yaml.test.ts +42 -42
  662. package/src/modules/version-control/__tests__/public-surface.test.ts +114 -0
  663. package/src/modules/{workflow/__tests__/workflow.routes.folder-proposals.test.ts → version-control/__tests__/version-control.routes.folder-proposals.test.ts} +18 -18
  664. 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
  665. 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
  666. package/src/modules/{workflow/__tests__/workflow.routes.lock-path.test.ts → version-control/__tests__/version-control.routes.lock-path.test.ts} +18 -18
  667. 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
  668. package/src/modules/{workflow/__tests__/workflow.routes.push-refused.test.ts → version-control/__tests__/version-control.routes.push-refused.test.ts} +14 -14
  669. 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
  670. package/src/modules/{workflow/__tests__/workflow.service.commitFileWhileLocked.test.ts → version-control/__tests__/version-control.service.commitFileWhileLocked.test.ts} +14 -14
  671. package/src/modules/{workflow/__tests__/workflow.service.delete-branch.test.ts → version-control/__tests__/version-control.service.delete-branch.test.ts} +14 -14
  672. 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
  673. package/src/modules/{workflow/__tests__/workflow.service.facade.test.ts → version-control/__tests__/version-control.service.facade.test.ts} +97 -99
  674. package/src/modules/{workflow/__tests__/workflow.service.folder-proposals.test.ts → version-control/__tests__/version-control.service.folder-proposals.test.ts} +7 -7
  675. package/src/modules/{workflow/__tests__/workflow.service.platform-restore.test.ts → version-control/__tests__/version-control.service.platform-restore.test.ts} +6 -6
  676. package/src/modules/{workflow/__tests__/workflow.service.read-gate.test.ts → version-control/__tests__/version-control.service.read-gate.test.ts} +9 -9
  677. package/src/modules/{workflow/__tests__/workflow.service.releaseLock.test.ts → version-control/__tests__/version-control.service.releaseLock.test.ts} +42 -42
  678. package/src/modules/{workflow/__tests__/workflow.service.repository-replaced.test.ts → version-control/__tests__/version-control.service.repository-replaced.test.ts} +4 -4
  679. package/src/modules/{workflow/__tests__/workflow.service.sync.test.ts → version-control/__tests__/version-control.service.sync.test.ts} +17 -17
  680. 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
  681. 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
  682. 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
  683. package/src/modules/{workflow → version-control}/agent-tools/__tests__/change-request-read.tools.test.ts +3 -3
  684. package/src/modules/{workflow → version-control}/agent-tools/__tests__/update-change-request.parity.test.ts +16 -16
  685. package/src/modules/{workflow/agent-tools/__tests__/workflow.tools.test.ts → version-control/agent-tools/__tests__/version-control.tools.test.ts} +9 -9
  686. package/src/modules/{workflow → version-control}/agent-tools/change-request-read.tools.ts +2 -2
  687. package/src/modules/{workflow/agent-tools/workflow.tools.ts → version-control/agent-tools/version-control.tools.ts} +52 -48
  688. package/src/modules/{workflow → version-control}/change-request-hooks.ts +1 -1
  689. package/src/modules/{workflow/review-workflow → version-control/change-request-review}/__tests__/approval-states.test.ts +5 -5
  690. package/src/modules/{workflow/review-workflow → version-control/change-request-review}/__tests__/cancel-pr.test.ts +8 -8
  691. package/src/modules/{workflow/review-workflow → version-control/change-request-review}/__tests__/carry-approvals-forward.test.ts +6 -6
  692. package/src/modules/{workflow/review-workflow → version-control/change-request-review}/__tests__/erase-approver.test.ts +5 -5
  693. package/src/modules/{workflow/review-workflow → version-control/change-request-review}/__tests__/merge-gate.test.ts +3 -3
  694. package/src/modules/{workflow/review-workflow → version-control/change-request-review}/__tests__/merge-records-own-commit.test.ts +3 -3
  695. package/src/modules/{workflow/review-workflow/review-workflow.interface.ts → version-control/change-request-review/change-request-review.interface.ts} +1 -1
  696. package/src/modules/{workflow/review-workflow/review-workflow.service.ts → version-control/change-request-review/change-request-review.service.ts} +28 -28
  697. package/src/modules/{workflow → version-control}/event-bus.ts +14 -14
  698. package/src/modules/{workflow → version-control}/events-delivery.ts +11 -11
  699. package/src/modules/{workflow → version-control}/events.routes.ts +5 -5
  700. package/src/modules/{workflow → version-control}/file-lock.service.ts +6 -6
  701. package/src/modules/{workflow → version-control}/git/__tests__/git-test-helpers.ts +3 -3
  702. package/src/modules/{workflow → version-control}/git/__tests__/git.service.accessGating.test.ts +5 -5
  703. package/src/modules/{workflow → version-control}/git/__tests__/git.service.appliedChange.test.ts +4 -4
  704. package/src/modules/{workflow → version-control}/git/__tests__/git.service.changedFilesForPr.test.ts +16 -16
  705. package/src/modules/{workflow → version-control}/git/__tests__/git.service.changedPathsMemo.test.ts +2 -2
  706. package/src/modules/{workflow → version-control}/git/__tests__/git.service.commitChanges.test.ts +3 -3
  707. package/src/modules/{workflow → version-control}/git/__tests__/git.service.commitFile.strayPath.test.ts +10 -10
  708. package/src/modules/{workflow → version-control}/git/__tests__/git.service.commitFile.test.ts +3 -3
  709. package/src/modules/{workflow → version-control}/git/__tests__/git.service.createBranch.test.ts +3 -3
  710. package/src/modules/{workflow → version-control}/git/__tests__/git.service.deleteBranch.test.ts +7 -7
  711. package/src/modules/{workflow → version-control}/git/__tests__/git.service.diffFileAtCommit.test.ts +9 -9
  712. package/src/modules/{workflow → version-control}/git/__tests__/git.service.diffFileBetweenBranches.test.ts +23 -23
  713. package/src/modules/{workflow → version-control}/git/__tests__/git.service.fileBytesAtCommit.test.ts +7 -7
  714. package/src/modules/{workflow → version-control}/git/__tests__/git.service.fileContentsAtCommit.test.ts +3 -3
  715. package/src/modules/{workflow → version-control}/git/__tests__/git.service.forkPoint.test.ts +2 -2
  716. package/src/modules/{workflow → version-control}/git/__tests__/git.service.history-guards.test.ts +2 -2
  717. package/src/modules/{workflow → version-control}/git/__tests__/git.service.list-branches.test.ts +12 -12
  718. package/src/modules/{workflow → version-control}/git/__tests__/git.service.listTrackedFiles.test.ts +2 -2
  719. package/src/modules/{workflow → version-control}/git/__tests__/git.service.logForFile.test.ts +6 -6
  720. package/src/modules/{workflow → version-control}/git/__tests__/git.service.mergeChangeRequest.test.ts +20 -20
  721. package/src/modules/{workflow → version-control}/git/__tests__/git.service.mergeIntoBranch.test.ts +16 -16
  722. package/src/modules/{workflow → version-control}/git/__tests__/git.service.pendingChanges.test.ts +2 -2
  723. package/src/modules/{workflow → version-control}/git/__tests__/git.service.postMergePull.test.ts +5 -5
  724. package/src/modules/{workflow → version-control}/git/__tests__/git.service.prFetchFailure.test.ts +2 -2
  725. package/src/modules/{workflow → version-control}/git/__tests__/git.service.pull.test.ts +12 -12
  726. package/src/modules/{workflow → version-control}/git/__tests__/git.service.readFileAtRef.test.ts +3 -3
  727. package/src/modules/{workflow → version-control}/git/__tests__/git.service.revertPathsAndPush.test.ts +2 -2
  728. package/src/modules/{workflow → version-control}/git/__tests__/git.service.status.test.ts +4 -4
  729. package/src/modules/{workflow → version-control}/git/__tests__/git.service.syncFromRemote.test.ts +8 -8
  730. package/src/modules/{workflow → version-control}/git/__tests__/git.service.worktrees.test.ts +4 -4
  731. package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.list-fetch.test.ts +2 -2
  732. package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.test.ts +6 -6
  733. package/src/modules/{workflow → version-control}/git/git.service.ts +57 -57
  734. package/src/modules/{workflow → version-control}/git/node-git-runner.ts +1 -1
  735. package/src/modules/{workflow → version-control}/git/pull-request.service.ts +12 -12
  736. package/src/modules/{workflow → version-control}/index.ts +6 -5
  737. package/src/modules/{workflow → version-control}/pending-commits.service.ts +2 -2
  738. package/src/modules/{workflow → version-control}/pending-commits.worker.ts +8 -8
  739. package/src/modules/{workflow → version-control}/read-on-branch.ts +2 -2
  740. package/src/modules/{workflow/workflow-hooks.ts → version-control/version-control-hooks.ts} +3 -3
  741. package/src/modules/{workflow/workflow.routes.ts → version-control/version-control.routes.ts} +64 -63
  742. package/src/modules/{workflow/workflow.service.ts → version-control/version-control.service.ts} +92 -97
  743. package/src/modules/workspace/__tests__/agent-access.gate.test.ts +8 -8
  744. package/src/modules/workspace/__tests__/agent-downloads.test.ts +13 -16
  745. package/src/modules/workspace/__tests__/agent-uploads.test.ts +11 -12
  746. package/src/modules/workspace/__tests__/escape-sequences.routes.test.ts +11 -16
  747. package/src/modules/workspace/__tests__/file-stat-access.test.ts +3 -3
  748. package/src/modules/workspace/__tests__/git-internals.security.test.ts +27 -27
  749. package/src/modules/workspace/__tests__/kb-repository.test.ts +1 -1
  750. package/src/modules/workspace/__tests__/rest-tool-arguments.test.ts +3 -3
  751. package/src/modules/workspace/__tests__/start-session.default-branch.test.ts +152 -0
  752. package/src/modules/workspace/__tests__/workspace-paths-inside-the-repo.test.ts +6 -6
  753. package/src/modules/workspace/__tests__/workspace-tmp.tools.test.ts +13 -14
  754. package/src/modules/workspace/__tests__/workspace.routes.at-ref.test.ts +6 -6
  755. package/src/modules/workspace/__tests__/workspace.routes.branch-errors.test.ts +4 -4
  756. package/src/modules/workspace/__tests__/workspace.routes.create-grant.test.ts +6 -6
  757. package/src/modules/workspace/__tests__/workspace.routes.delete.test.ts +8 -8
  758. package/src/modules/workspace/__tests__/workspace.routes.download-implies-read.test.ts +4 -4
  759. package/src/modules/workspace/__tests__/workspace.routes.download.test.ts +6 -6
  760. package/src/modules/workspace/__tests__/workspace.routes.file-writes.test.ts +6 -6
  761. package/src/modules/workspace/__tests__/workspace.routes.folder-zip-access.test.ts +4 -4
  762. package/src/modules/workspace/__tests__/workspace.routes.folders.test.ts +6 -6
  763. package/src/modules/workspace/__tests__/workspace.routes.move-platform-files.test.ts +7 -7
  764. package/src/modules/workspace/__tests__/workspace.routes.read-gate.test.ts +13 -13
  765. package/src/modules/workspace/__tests__/workspace.service.any-workspace-credentials.test.ts +1 -1
  766. package/src/modules/workspace/__tests__/workspace.service.replaced-repository.test.ts +1 -1
  767. package/src/modules/workspace/__tests__/workspace.service.worktrees.test.ts +1 -1
  768. package/src/modules/workspace/__tests__/workspace.tools.agents-file.test.ts +12 -14
  769. package/src/modules/workspace/__tests__/workspace.tools.branch-errors.test.ts +5 -5
  770. package/src/modules/workspace/__tests__/workspace.tools.test.ts +182 -75
  771. package/src/modules/workspace/agent-access.gate.ts +6 -6
  772. package/src/modules/workspace/git-internals.middleware.ts +2 -2
  773. package/src/modules/workspace/kb-repository.ts +1 -1
  774. package/src/modules/workspace/startup/__tests__/kb-startup-runner.degraded.test.ts +1 -1
  775. package/src/modules/workspace/startup/__tests__/kb-startup-runner.test.ts +1 -1
  776. package/src/modules/workspace/startup/__tests__/kb-startup-runner.worktrees.test.ts +1 -1
  777. package/src/modules/workspace/startup/kb-git.ts +1 -1
  778. package/src/modules/workspace/startup/steps/__tests__/steps.test.ts +94 -70
  779. package/src/modules/workspace/startup/steps/seed-tree.ts +4 -5
  780. package/src/modules/workspace/startup/steps/template-files.step.ts +4 -5
  781. package/src/modules/workspace/startup/steps/template-source.ts +21 -6
  782. package/src/modules/workspace/workspace-tmp.ts +4 -4
  783. package/src/modules/workspace/workspace.routes.ts +26 -26
  784. package/src/modules/workspace/workspace.service.ts +11 -11
  785. package/src/modules/workspace/workspace.tools.ts +90 -30
  786. package/src/shared/__tests__/canonical-file-identity.test.ts +5 -5
  787. package/src/shared/__tests__/http-errors.test.ts +4 -4
  788. package/src/shared/__tests__/read-capped.test.ts +68 -0
  789. package/src/shared/canonical-file-identity.ts +5 -5
  790. package/src/shared/domain-errors.ts +44 -44
  791. package/src/shared/git.contract.ts +1 -1
  792. package/src/shared/http-errors.ts +3 -3
  793. package/src/shared/kb-context.ts +130 -130
  794. package/src/shared/oauth-token-error.ts +46 -0
  795. package/src/shared/pending-proposals.ts +4 -4
  796. package/src/shared/read-capped.ts +40 -0
  797. package/src/tenancy/__tests__/tenant-host.test.ts +372 -372
  798. package/src/tenancy/__tests__/tenant-runtime.test.ts +221 -221
  799. package/src/tenancy/__tests__/tenant-secrets.test.ts +35 -35
  800. package/src/tenancy/index.ts +35 -35
  801. package/src/tenancy/static-tenant-source.ts +1 -1
  802. package/src/tenancy/tenant-host.ts +261 -261
  803. package/src/tenancy/tenant-runtime.ts +208 -208
  804. package/src/tenancy/tenant-source.contract.ts +59 -59
  805. package/agent-guide/finding-things.md +0 -7
  806. package/agent-guide/introduction.md +0 -27
  807. package/dist/modules/workflow/agent-tools/change-request-read-shape.d.ts.map +0 -1
  808. package/dist/modules/workflow/agent-tools/change-request-read-shape.js.map +0 -1
  809. package/dist/modules/workflow/agent-tools/change-request-read.tools.d.ts.map +0 -1
  810. package/dist/modules/workflow/agent-tools/change-request-read.tools.js.map +0 -1
  811. package/dist/modules/workflow/agent-tools/change-request-summary.d.ts.map +0 -1
  812. package/dist/modules/workflow/agent-tools/change-request-summary.js.map +0 -1
  813. package/dist/modules/workflow/agent-tools/workflow.tools.d.ts.map +0 -1
  814. package/dist/modules/workflow/agent-tools/workflow.tools.js.map +0 -1
  815. package/dist/modules/workflow/change-request-hooks.d.ts.map +0 -1
  816. package/dist/modules/workflow/change-request-hooks.js.map +0 -1
  817. package/dist/modules/workflow/event-bus.d.ts.map +0 -1
  818. package/dist/modules/workflow/event-bus.js.map +0 -1
  819. package/dist/modules/workflow/events-delivery.d.ts.map +0 -1
  820. package/dist/modules/workflow/events-delivery.js.map +0 -1
  821. package/dist/modules/workflow/events.routes.d.ts.map +0 -1
  822. package/dist/modules/workflow/events.routes.js.map +0 -1
  823. package/dist/modules/workflow/file-lock.service.d.ts.map +0 -1
  824. package/dist/modules/workflow/file-lock.service.js.map +0 -1
  825. package/dist/modules/workflow/git/change-request-link.d.ts.map +0 -1
  826. package/dist/modules/workflow/git/change-request-link.js.map +0 -1
  827. package/dist/modules/workflow/git/git-version.d.ts.map +0 -1
  828. package/dist/modules/workflow/git/git-version.js.map +0 -1
  829. package/dist/modules/workflow/git/git.service.d.ts.map +0 -1
  830. package/dist/modules/workflow/git/git.service.js.map +0 -1
  831. package/dist/modules/workflow/git/merge-commit.d.ts.map +0 -1
  832. package/dist/modules/workflow/git/merge-commit.js.map +0 -1
  833. package/dist/modules/workflow/git/node-git-runner.d.ts.map +0 -1
  834. package/dist/modules/workflow/git/node-git-runner.js.map +0 -1
  835. package/dist/modules/workflow/git/pull-request.service.d.ts.map +0 -1
  836. package/dist/modules/workflow/git/pull-request.service.js.map +0 -1
  837. package/dist/modules/workflow/index.d.ts.map +0 -1
  838. package/dist/modules/workflow/index.js.map +0 -1
  839. package/dist/modules/workflow/pending-commits.service.d.ts.map +0 -1
  840. package/dist/modules/workflow/pending-commits.service.js.map +0 -1
  841. package/dist/modules/workflow/pending-commits.worker.d.ts.map +0 -1
  842. package/dist/modules/workflow/pending-commits.worker.js.map +0 -1
  843. package/dist/modules/workflow/read-on-branch.d.ts.map +0 -1
  844. package/dist/modules/workflow/read-on-branch.js.map +0 -1
  845. package/dist/modules/workflow/recovery-bot.d.ts.map +0 -1
  846. package/dist/modules/workflow/recovery-bot.js.map +0 -1
  847. package/dist/modules/workflow/review-workflow/approval-lock.d.ts.map +0 -1
  848. package/dist/modules/workflow/review-workflow/approval-lock.js.map +0 -1
  849. package/dist/modules/workflow/review-workflow/review-workflow.interface.d.ts.map +0 -1
  850. package/dist/modules/workflow/review-workflow/review-workflow.interface.js +0 -2
  851. package/dist/modules/workflow/review-workflow/review-workflow.interface.js.map +0 -1
  852. package/dist/modules/workflow/review-workflow/review-workflow.service.d.ts.map +0 -1
  853. package/dist/modules/workflow/review-workflow/review-workflow.service.js.map +0 -1
  854. package/dist/modules/workflow/sanitize-error.d.ts.map +0 -1
  855. package/dist/modules/workflow/sanitize-error.js.map +0 -1
  856. package/dist/modules/workflow/workflow-hooks.d.ts.map +0 -1
  857. package/dist/modules/workflow/workflow-hooks.js.map +0 -1
  858. package/dist/modules/workflow/workflow.routes.d.ts.map +0 -1
  859. package/dist/modules/workflow/workflow.routes.js.map +0 -1
  860. package/dist/modules/workflow/workflow.service.d.ts.map +0 -1
  861. package/dist/modules/workflow/workflow.service.js.map +0 -1
  862. package/src/modules/mcp/__tests__/read-only-hint.e2e.test.ts +0 -213
  863. /package/dist/modules/{workflow → version-control}/agent-tools/change-request-read-shape.d.ts +0 -0
  864. /package/dist/modules/{workflow → version-control}/agent-tools/change-request-read-shape.js +0 -0
  865. /package/dist/modules/{workflow → version-control}/agent-tools/change-request-read.tools.d.ts +0 -0
  866. /package/dist/modules/{workflow → version-control}/agent-tools/change-request-summary.d.ts +0 -0
  867. /package/dist/modules/{workflow → version-control}/agent-tools/change-request-summary.js +0 -0
  868. /package/dist/modules/{workflow → version-control}/change-request-hooks.js +0 -0
  869. /package/dist/modules/{workflow/review-workflow → version-control/change-request-review}/approval-lock.d.ts +0 -0
  870. /package/dist/modules/{workflow/review-workflow → version-control/change-request-review}/approval-lock.js +0 -0
  871. /package/dist/modules/{workflow → version-control}/events-delivery.js +0 -0
  872. /package/dist/modules/{workflow → version-control}/events.routes.js +0 -0
  873. /package/dist/modules/{workflow → version-control}/git/change-request-link.d.ts +0 -0
  874. /package/dist/modules/{workflow → version-control}/git/change-request-link.js +0 -0
  875. /package/dist/modules/{workflow → version-control}/git/git-version.d.ts +0 -0
  876. /package/dist/modules/{workflow → version-control}/git/git-version.js +0 -0
  877. /package/dist/modules/{workflow → version-control}/git/merge-commit.d.ts +0 -0
  878. /package/dist/modules/{workflow → version-control}/git/merge-commit.js +0 -0
  879. /package/dist/modules/{workflow → version-control}/git/node-git-runner.d.ts +0 -0
  880. /package/dist/modules/{workflow → version-control}/recovery-bot.d.ts +0 -0
  881. /package/dist/modules/{workflow → version-control}/recovery-bot.js +0 -0
  882. /package/dist/modules/{workflow → version-control}/sanitize-error.d.ts +0 -0
  883. /package/dist/modules/{workflow → version-control}/sanitize-error.js +0 -0
  884. /package/src/modules/{workflow → version-control}/__tests__/change-request-hooks.test.ts +0 -0
  885. /package/src/modules/{workflow → version-control}/__tests__/fake-file-lock-db.ts +0 -0
  886. /package/src/modules/{workflow → version-control}/__tests__/pending-commits.canonical.test.ts +0 -0
  887. /package/src/modules/{workflow → version-control}/__tests__/pending-commits.enqueue-if-absent.test.ts +0 -0
  888. /package/src/modules/{workflow → version-control}/__tests__/pending-commits.repository-replaced.test.ts +0 -0
  889. /package/src/modules/{workflow → version-control}/__tests__/sanitize-error.test.ts +0 -0
  890. /package/src/modules/{workflow → version-control}/agent-tools/__tests__/change-request-read-shape.test.ts +0 -0
  891. /package/src/modules/{workflow → version-control}/agent-tools/change-request-read-shape.ts +0 -0
  892. /package/src/modules/{workflow → version-control}/agent-tools/change-request-summary.ts +0 -0
  893. /package/src/modules/{workflow/review-workflow → version-control/change-request-review}/approval-lock.ts +0 -0
  894. /package/src/modules/{workflow → version-control}/git/__tests__/branchAuthor.test.ts +0 -0
  895. /package/src/modules/{workflow → version-control}/git/__tests__/change-request-link.test.ts +0 -0
  896. /package/src/modules/{workflow → version-control}/git/__tests__/git-version.failure.test.ts +0 -0
  897. /package/src/modules/{workflow → version-control}/git/__tests__/git-version.test.ts +0 -0
  898. /package/src/modules/{workflow → version-control}/git/__tests__/node-git-runner.test.ts +0 -0
  899. /package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.getPrDetail.test.ts +0 -0
  900. /package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.placeholder.test.ts +0 -0
  901. /package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.viewer-can-cancel.test.ts +0 -0
  902. /package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.viewer-can-delete.test.ts +0 -0
  903. /package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.viewer-can-update.test.ts +0 -0
  904. /package/src/modules/{workflow → version-control}/git/change-request-link.ts +0 -0
  905. /package/src/modules/{workflow → version-control}/git/git-version.ts +0 -0
  906. /package/src/modules/{workflow → version-control}/git/merge-commit.ts +0 -0
  907. /package/src/modules/{workflow → version-control}/recovery-bot.ts +0 -0
  908. /package/src/modules/{workflow → version-control}/sanitize-error.ts +0 -0
@@ -1,20 +1,15 @@
1
1
  /**
2
- * Workflow facade — the only thing app callers (routes, agent tools, tests)
2
+ * Version-control facade — the only thing app callers (routes, agent tools, tests)
3
3
  * should reach for. Today it delegates to the existing git / PR /
4
- * review-workflow services; over PLAN steps 2–5 the implementations migrate
4
+ * change-request-review services; over PLAN steps 2–5 the implementations migrate
5
5
  * here directly and the underlying services either disappear or move
6
6
  * underneath this module.
7
7
  *
8
8
  * The facade does no caching, no validation, no policy of its own — it
9
9
  * exists to:
10
- * 1. Lock in the workflow vocabulary on the consumer side.
11
- * 2. Concentrate every call into git/PR/review-workflow into one place
10
+ * 1. Lock in the version-control vocabulary on the consumer side.
11
+ * 2. Concentrate every call into git/PR/change-request-review into one place
12
12
  * so the agent prompt can stop knowing about `git` / `gh`.
13
- *
14
- * Methods backed by services that don't exist yet (locks, openChangeRequest,
15
- * updateFromTarget) throw `NotImplementedWorkflowError`. The interface
16
- * defines them so frontend / agent code can wire to the final surface while
17
- * those backings land.
18
13
  */
19
14
  import path from 'node:path';
20
15
  import { execFile } from 'node:child_process';
@@ -38,11 +33,11 @@ import { redactSecret } from '../../shared/redact-secret.js';
38
33
  import { workspaceIdForBranch, branchForWorkspaceId } from '../../shared/workspace-id.js';
39
34
  import { canonicalFileIdentity } from '../../shared/canonical-file-identity.js';
40
35
  import { describeSyncFailure, sanitizeError } from './sanitize-error.js';
41
- import { WorkflowHooks } from './workflow-hooks.js';
36
+ import { VersionControlHooks } from './version-control-hooks.js';
42
37
  import { ChangeRequestHooks, } from './change-request-hooks.js';
43
38
  import { WorkspaceMutex, assertValidBranchName } from '../kb-fs/index.js';
44
39
  import { canonicalEmail, hashEmail } from '../../shared/email-identity.js';
45
- import { BranchAuthorshipError, BranchDeleteBlockedError, BranchNotFoundError, ChangeRequestConflictsError, DuplicateChangeRequestError, OpenChangeRequestBlocksMergeError, ProtectedBranchError, RolesYamlPreservationError, PullRebaseConflictError, PushNeedsAgentResolutionError, RemoteBranchGoneError, WorkflowDomainError, WorkflowValidationError, } from '../../shared/domain-errors.js';
40
+ import { BranchAuthorshipError, BranchDeleteBlockedError, BranchNotFoundError, ChangeRequestConflictsError, DuplicateChangeRequestError, OpenChangeRequestBlocksMergeError, ProtectedBranchError, RolesYamlPreservationError, PullRebaseConflictError, PushNeedsAgentResolutionError, RemoteBranchGoneError, VersionControlDomainError, VersionControlValidationError, } from '../../shared/domain-errors.js';
46
41
  import { RECOVERY_BOT_EMAIL, RECOVERY_BOT_NAME } from './recovery-bot.js';
47
42
  import { AccessDeniedError, EVERYONE_CANONICAL } from '../access-model/index.js';
48
43
  import { printable } from '../../shared/printable.js';
@@ -117,15 +112,15 @@ function redactTokens(msg, token) {
117
112
  */
118
113
  function assertDescriptionFits(description) {
119
114
  if (description !== undefined && description.length > CHANGE_REQUEST_DESCRIPTION_MAX) {
120
- throw new WorkflowValidationError(`A change request's description is at most ${CHANGE_REQUEST_DESCRIPTION_MAX} characters; this one would have ${description.length}.`);
115
+ throw new VersionControlValidationError(`A change request's description is at most ${CHANGE_REQUEST_DESCRIPTION_MAX} characters; this one would have ${description.length}.`);
121
116
  }
122
117
  }
123
118
  function assertEditable(state) {
124
119
  if (state === 'merged') {
125
- throw new WorkflowDomainError('This change request has already been applied; its title and description can no longer be changed.', 409);
120
+ throw new VersionControlDomainError('This change request has already been applied; its title and description can no longer be changed.', 409);
126
121
  }
127
122
  if (state !== 'open') {
128
- throw new WorkflowDomainError('This change request is closed; its title and description can no longer be changed.', 409);
123
+ throw new VersionControlDomainError('This change request is closed; its title and description can no longer be changed.', 409);
129
124
  }
130
125
  }
131
126
  /** Git commit subjects are capped at 200 characters (`GitService.commitFile`). */
@@ -148,11 +143,11 @@ const basenameOf = (repoRelPath) => repoRelPath.split('/').pop() ?? repoRelPath;
148
143
  function folderPrefix(folder) {
149
144
  return `${folder.replace(/\/+$/, '')}/`;
150
145
  }
151
- export class WorkflowService {
146
+ export class VersionControlService {
152
147
  db;
153
148
  git;
154
149
  prs;
155
- reviewWorkflow;
150
+ changeRequestReview;
156
151
  workspaceService;
157
152
  accessControl;
158
153
  fileLocks;
@@ -167,9 +162,9 @@ export class WorkflowService {
167
162
  /**
168
163
  * Concrete `PullRequestService` (not the interface) so the facade can call
169
164
  * `invalidateDetailCache` after a mutation lands — the legacy routes do
170
- * this inline, and the workflow facade absorbs that responsibility so its
165
+ * this inline, and the version-control facade absorbs that responsibility so its
171
166
  * own routes stay free of cache plumbing. Replaceable later when the PR
172
- * detail cache moves into the workflow module proper (PLAN step 5).
167
+ * detail cache moves into the version-control module proper (PLAN step 5).
173
168
  *
174
169
  * `db` + `workspaceService` + `kbDirName` back `openChangeRequest`, which
175
170
  * inserts a change_requests row and runs the local auto-merge — no provider
@@ -177,16 +172,16 @@ export class WorkflowService {
177
172
  */
178
173
  /**
179
174
  * Concrete `GitService` (not the interface) so the facade can reach
180
- * `mergeFromOrigin` — the local auto-merge primitive the workflow needs
175
+ * `mergeFromOrigin` — the local auto-merge primitive the version-control service needs
181
176
  * for `openChangeRequest` + `updateFromTarget` (PLAN §1). The interface
182
177
  * intentionally doesn't surface that method because it's an internal
183
- * implementation detail of the workflow auto-merge story; nothing outside
178
+ * implementation detail of the version-control auto-merge story; nothing outside
184
179
  * the facade should call it directly.
185
180
  */
186
181
  get kbDirName() {
187
182
  return this.kb.kbDirName;
188
183
  }
189
- constructor(db, git, prs, reviewWorkflow, workspaceService, accessControl, fileLocks,
184
+ constructor(db, git, prs, changeRequestReview, workspaceService, accessControl, fileLocks,
190
185
  /**
191
186
  * Background commit queue. `releaseLock` enqueues a row instead of
192
187
  * committing inline; the `PendingCommitsWorker` drains the queue and
@@ -217,15 +212,15 @@ export class WorkflowService {
217
212
  */
218
213
  fileChanges,
219
214
  /**
220
- * Workflow lifecycle-hook registry (see `workflow-hooks.ts`). PUBLIC so
215
+ * Version-control lifecycle-hook registry (see `version-control-hooks.ts`). PUBLIC so
221
216
  * the composition root registers module-owned behavior against it
222
- * (`core.workflowService.hooks.onCommitValidation(…)` /
217
+ * (`core.versionControlService.hooks.onCommitValidation(…)` /
223
218
  * `.onPreWrite(…)`) after `createCoreServices` returns. The composition
224
219
  * root passes the SAME instance `GitService` and the agent-access gate
225
220
  * consult; the default keeps test constructions (which don't exercise
226
221
  * hooks) unchanged.
227
222
  */
228
- hooks = new WorkflowHooks(),
223
+ hooks = new VersionControlHooks(),
229
224
  /**
230
225
  * The seam a deployment's notification extends when a request is opened
231
226
  * (see `change-request-hooks.ts`). The composition root passes the SAME
@@ -242,7 +237,7 @@ export class WorkflowService {
242
237
  this.db = db;
243
238
  this.git = git;
244
239
  this.prs = prs;
245
- this.reviewWorkflow = reviewWorkflow;
240
+ this.changeRequestReview = changeRequestReview;
246
241
  this.workspaceService = workspaceService;
247
242
  this.accessControl = accessControl;
248
243
  this.fileLocks = fileLocks;
@@ -257,7 +252,7 @@ export class WorkflowService {
257
252
  // The type already requires it; this holds for a caller the compiler did
258
253
  // not see (plain JavaScript, a positional slip in a harness).
259
254
  if (!changeGate || typeof changeGate.assertMayChange !== 'function') {
260
- throw new Error('WorkflowService requires a read-before-write gate (IChangeReadGate)');
255
+ throw new Error('VersionControlService requires a read-before-write gate (IChangeReadGate)');
261
256
  }
262
257
  }
263
258
  // ── Branches ──────────────────────────────────────────────────────────────
@@ -401,7 +396,7 @@ export class WorkflowService {
401
396
  // this branch is the deleter's own to withdraw; a request INTO it
402
397
  // belongs to someone else, and telling the branch owner to
403
398
  // "withdraw" it points them at a verb they cannot use.
404
- throw new WorkflowValidationError(open.end === 'source'
399
+ throw new VersionControlValidationError(open.end === 'source'
405
400
  ? `Branch "${name}" has an open change request (#${open.number}). ` +
406
401
  `Withdraw or decline it before deleting the branch.`
407
402
  : `Open change request #${open.number} proposes changes into "${name}". ` +
@@ -747,7 +742,7 @@ export class WorkflowService {
747
742
  // longer exposes a "checkout this branch on the source workspace's clone"
748
743
  // operation, which was the only place the legacy DirtyWorkingTreeError
749
744
  // could surface as a user-facing 409.
750
- // `forkCurrentToDraft` removed (see IWorkflowService): per-branch workspaces
745
+ // `forkCurrentToDraft` removed (see IVersionControlService): per-branch workspaces
751
746
  // make the dirty-tree-carry-along escape hatch impossible by construction.
752
747
  branchStatus(workspaceId) {
753
748
  return this.git.status(workspaceId);
@@ -950,7 +945,7 @@ export class WorkflowService {
950
945
  // this sync's — never a save that landed alongside. Capped: a bulk
951
946
  // import would otherwise fan hundreds of events out to say what one
952
947
  // refresh says.
953
- if (announce.changedPaths.length <= WorkflowService.SYNC_FILE_EVENT_CAP) {
948
+ if (announce.changedPaths.length <= VersionControlService.SYNC_FILE_EVENT_CAP) {
954
949
  for (const p of announce.changedPaths) {
955
950
  this.events?.emit({
956
951
  kind: 'file-changed',
@@ -1261,7 +1256,7 @@ export class WorkflowService {
1261
1256
  const targetPath = canonicalFileIdentity(rawPath);
1262
1257
  const lock = await this.fileLocks.get(workspaceId, branch, targetPath);
1263
1258
  if (!lock || lock.holderUserId !== user.id) {
1264
- throw new WorkflowValidationError(`Cannot commit "${targetPath}": you don't hold the lock.`, { kind: 'lock-not-held', branch, path: targetPath });
1259
+ throw new VersionControlValidationError(`Cannot commit "${targetPath}": you don't hold the lock.`, { kind: 'lock-not-held', branch, path: targetPath });
1265
1260
  }
1266
1261
  // A coordination hold is NOT write possession (see `acquireLock`): it was
1267
1262
  // acquired past the write-authorization gate on the promise that nothing
@@ -1269,7 +1264,7 @@ export class WorkflowService {
1269
1264
  // holder checkpoint bytes onto a path — machine-owned files included —
1270
1265
  // whose write rule they never passed.
1271
1266
  if (lock.mode === 'coordination') {
1272
- throw new WorkflowValidationError(`Cannot commit "${targetPath}": the lock is a coordination hold, which grants no write authority.`, { kind: 'coordination-hold', branch, path: targetPath });
1267
+ throw new VersionControlValidationError(`Cannot commit "${targetPath}": the lock is a coordination hold, which grants no write authority.`, { kind: 'coordination-hold', branch, path: targetPath });
1273
1268
  }
1274
1269
  const change = await this.git.commitFile(workspaceId, user, targetPath, summary);
1275
1270
  // Push the autosave commit so other users on the branch see it
@@ -1380,7 +1375,7 @@ export class WorkflowService {
1380
1375
  const lock = await this.fileLocks.get(workspaceId, branch, targetPath);
1381
1376
  if (!lock || lock.holderUserId !== user.id) {
1382
1377
  lockLog.warn(`RELEASE refused ws=${workspaceId} branch=${branch} path=${targetPath} user=${user.id} → ${lock ? `held by ${lock.holderUserId}` : 'no lock row'}`);
1383
- throw new WorkflowValidationError(`Cannot release lock on "${targetPath}": not held by you (or no longer exists).`, { kind: 'lock-not-held', branch, path: targetPath });
1378
+ throw new VersionControlValidationError(`Cannot release lock on "${targetPath}": not held by you (or no longer exists).`, { kind: 'lock-not-held', branch, path: targetPath });
1384
1379
  }
1385
1380
  // Releasing a coordination hold must NEVER enqueue a commit: the hold was
1386
1381
  // granted past the write-authorization gate (see `acquireLock`) on the
@@ -1393,7 +1388,7 @@ export class WorkflowService {
1393
1388
  // row until its TTL.
1394
1389
  if (lock.mode === 'coordination') {
1395
1390
  lockLog.warn(`RELEASE refused ws=${workspaceId} branch=${branch} path=${targetPath} user=${user.id} → coordination hold (no commit may be enqueued)`);
1396
- throw new WorkflowValidationError(`Cannot release lock on "${targetPath}" with a commit: it is a coordination hold. Use releaseLockNoCommit.`, { kind: 'coordination-hold', branch, path: targetPath });
1391
+ throw new VersionControlValidationError(`Cannot release lock on "${targetPath}" with a commit: it is a coordination hold. Use releaseLockNoCommit.`, { kind: 'coordination-hold', branch, path: targetPath });
1397
1392
  }
1398
1393
  // Order matters here:
1399
1394
  // 1. Drop the lock row. Other sessions can re-acquire immediately.
@@ -1563,7 +1558,7 @@ export class WorkflowService {
1563
1558
  * still fails." The full rationale lives at the call site in
1564
1559
  * `releaseLock`; this method is the de-duplicated body.
1565
1560
  *
1566
- * EVERY workflow push goes through here — saves, sharing a branch, opening
1561
+ * EVERY version-control push goes through here — saves, sharing a branch, opening
1567
1562
  * a request, update-from-target, the decline revert, the roles.yaml
1568
1563
  * restore — so a push the host refuses answers one way everywhere: the
1569
1564
  * commit stays local, the sync banner goes up, and the caller gets the
@@ -1683,7 +1678,7 @@ export class WorkflowService {
1683
1678
  //
1684
1679
  // One refinement for COORDINATION holds: the holder never legitimately
1685
1680
  // wrote the path (the write paths refuse coordination possession), so
1686
- // anything dirty there is either bytes smuggled in around the workflow —
1681
+ // anything dirty there is either bytes smuggled in around version control —
1687
1682
  // which the discard rightly wipes — or a PRIOR save's work whose commit
1688
1683
  // is still queued. Only the queue can tell those apart: when a live
1689
1684
  // pending-commit row exists for the path, the dirty bytes are that
@@ -1850,17 +1845,17 @@ export class WorkflowService {
1850
1845
  */
1851
1846
  async openChangeRequest(workspaceId, user, input) {
1852
1847
  if (!input.sourceBranch)
1853
- throw new WorkflowValidationError('sourceBranch is required');
1848
+ throw new VersionControlValidationError('sourceBranch is required');
1854
1849
  if (!input.targetBranch)
1855
- throw new WorkflowValidationError('targetBranch is required');
1850
+ throw new VersionControlValidationError('targetBranch is required');
1856
1851
  if (input.sourceBranch === input.targetBranch) {
1857
- throw new WorkflowValidationError('source and target branches must differ');
1852
+ throw new VersionControlValidationError('source and target branches must differ');
1858
1853
  }
1859
1854
  if (!input.title?.trim())
1860
- throw new WorkflowValidationError('title is required');
1855
+ throw new VersionControlValidationError('title is required');
1861
1856
  assertDescriptionFits(input.description?.trim());
1862
1857
  if (this.kb.isProtectedBranch(input.sourceBranch)) {
1863
- throw new WorkflowValidationError(`Cannot open a change request *from* a protected branch ("${input.sourceBranch}").`, { kind: 'source-is-protected', sourceBranch: input.sourceBranch });
1858
+ throw new VersionControlValidationError(`Cannot open a change request *from* a protected branch ("${input.sourceBranch}").`, { kind: 'source-is-protected', sourceBranch: input.sourceBranch });
1864
1859
  }
1865
1860
  // The whole open sequence — uniqueness check through row insert — runs
1866
1861
  // under the lifecycle lock of BOTH branches. `retireMergedSourceBranch`
@@ -1890,7 +1885,7 @@ export class WorkflowService {
1890
1885
  }
1891
1886
  // Auto-merge target → source. `mergeFromOrigin` enforces "current
1892
1887
  // branch == source" and "clean working tree" before attempting; both
1893
- // failures surface as structured workflow errors that pass straight
1888
+ // failures surface as structured version-control errors that pass straight
1894
1889
  // through to the caller.
1895
1890
  const mergeOutcome = await this.git.mergeFromOrigin(workspaceId, input.sourceBranch, input.targetBranch, user);
1896
1891
  if (mergeOutcome.kind === 'conflicts') {
@@ -1959,7 +1954,7 @@ export class WorkflowService {
1959
1954
  // rival was merged/closed in the microsecond between the conflict and
1960
1955
  // this re-query), don't fabricate a #0 — report it as a transient race.
1961
1956
  if (!existing) {
1962
- throw new WorkflowValidationError(`Change request for "${input.sourceBranch}" → "${input.targetBranch}" ` +
1957
+ throw new VersionControlValidationError(`Change request for "${input.sourceBranch}" → "${input.targetBranch}" ` +
1963
1958
  'raced with a concurrent open/close; retry.', { kind: 'open-change-request-failed' });
1964
1959
  }
1965
1960
  throw new DuplicateChangeRequestError(input.sourceBranch, input.targetBranch, existing.number);
@@ -1970,7 +1965,7 @@ export class WorkflowService {
1970
1965
  // openChangeRequest finds no duplicate, re-runs the (idempotent, already
1971
1966
  // up-to-date) auto-merge, and inserts the row.
1972
1967
  const rawMsg = err instanceof Error ? err.message : String(err);
1973
- throw new WorkflowValidationError(`Failed to open change request: ${redactTokens(rawMsg, this.git.credentials?.token())}`, { kind: 'open-change-request-failed' });
1968
+ throw new VersionControlValidationError(`Failed to open change request: ${redactTokens(rawMsg, this.git.credentials?.token())}`, { kind: 'open-change-request-failed' });
1974
1969
  }
1975
1970
  this.prs.invalidateDetailCache(prNumber);
1976
1971
  const opened = {
@@ -2013,7 +2008,7 @@ export class WorkflowService {
2013
2008
  eligible,
2014
2009
  detail: null,
2015
2010
  pushRefused: null,
2016
- detailError: detailError ?? new WorkflowValidationError(`Created change request #${prNumber} but could not fetch its detail`),
2011
+ detailError: detailError ?? new VersionControlValidationError(`Created change request #${prNumber} but could not fetch its detail`),
2017
2012
  };
2018
2013
  });
2019
2014
  // The request exists in every branch of the outcome — the listeners are
@@ -2134,13 +2129,13 @@ export class WorkflowService {
2134
2129
  patches: false,
2135
2130
  });
2136
2131
  if (!detail) {
2137
- throw new WorkflowValidationError(`Change request #${number} not found.`, { kind: 'change-request-not-found', number });
2132
+ throw new VersionControlValidationError(`Change request #${number} not found.`, { kind: 'change-request-not-found', number });
2138
2133
  }
2139
2134
  if (detail.state !== 'open') {
2140
- throw new WorkflowValidationError(`Change request #${number} is ${detail.state} — only open requests can refresh from target.`, { kind: 'change-request-not-open', state: detail.state });
2135
+ throw new VersionControlValidationError(`Change request #${number} is ${detail.state} — only open requests can refresh from target.`, { kind: 'change-request-not-open', state: detail.state });
2141
2136
  }
2142
2137
  if (!detail.viewerCanUpdate) {
2143
- throw new WorkflowDomainError('Only the author of this change request, or someone who may apply it, can update it.', 403);
2138
+ throw new VersionControlDomainError('Only the author of this change request, or someone who may apply it, can update it.', 403);
2144
2139
  }
2145
2140
  // Taken BEFORE the head moves (the pull below can move it too): only a
2146
2141
  // refusal recorded earlier describes the revision this replaces (see
@@ -2263,7 +2258,7 @@ export class WorkflowService {
2263
2258
  if (headMoved) {
2264
2259
  try {
2265
2260
  updatedPaths = await this.git.pathsChangedBetween(workspaceId, headBeforeMerge, headAfterMerge);
2266
- await this.reviewWorkflow.carryApprovalsForward(number, headBeforeMerge, headAfterMerge, updatedPaths);
2261
+ await this.changeRequestReview.carryApprovalsForward(number, headBeforeMerge, headAfterMerge, updatedPaths);
2267
2262
  }
2268
2263
  catch (err) {
2269
2264
  log.warn(`could not carry approvals forward on change request #${number} after updating from target`, { err });
@@ -2282,14 +2277,14 @@ export class WorkflowService {
2282
2277
  viewerEmail: user.email,
2283
2278
  });
2284
2279
  if (!refreshed) {
2285
- throw new WorkflowValidationError(`Refreshed change request #${number} but could not re-fetch its detail.`);
2280
+ throw new VersionControlValidationError(`Refreshed change request #${number} but could not re-fetch its detail.`);
2286
2281
  }
2287
2282
  return { ...refreshed, updatedPaths };
2288
2283
  }
2289
2284
  async approveFile(number, path, user, files, headSha, baseBranch, authorIdHash, workspaceId) {
2290
2285
  // Taken BEFORE the approval lands (see `clearApplyFailure`).
2291
2286
  const approvedAfter = new Date();
2292
- const approvals = await this.reviewWorkflow.approveFile(number, path, user, files, headSha, baseBranch, authorIdHash, workspaceId);
2287
+ const approvals = await this.changeRequestReview.approveFile(number, path, user, files, headSha, baseBranch, authorIdHash, workspaceId);
2293
2288
  // A recorded approval can answer a GATE refusal only — a conflict or a git
2294
2289
  // error still describes the request — and only once the gate that refused
2295
2290
  // would now pass: approving one file of several leaves the rest waiting,
@@ -2310,7 +2305,7 @@ export class WorkflowService {
2310
2305
  return approvals;
2311
2306
  }
2312
2307
  async unapproveFile(number, path, user, files, headSha, baseBranch, authorIdHash, workspaceId) {
2313
- const approvals = await this.reviewWorkflow.unapproveFile(number, path, user, files, headSha, baseBranch, authorIdHash, workspaceId);
2308
+ const approvals = await this.changeRequestReview.unapproveFile(number, path, user, files, headSha, baseBranch, authorIdHash, workspaceId);
2314
2309
  this.prs.invalidateDetailCache(number);
2315
2310
  this.events?.emit({
2316
2311
  kind: 'approval-changed',
@@ -2362,9 +2357,9 @@ export class WorkflowService {
2362
2357
  async revertChangeRequestFile(number, user, repoRelPath) {
2363
2358
  const summary = await this.prs.getPr(number);
2364
2359
  if (!summary)
2365
- throw new WorkflowDomainError('change request not found', 404);
2360
+ throw new VersionControlDomainError('change request not found', 404);
2366
2361
  if (summary.state !== 'open') {
2367
- throw new WorkflowDomainError('This change request is no longer open.', 422);
2362
+ throw new VersionControlDomainError('This change request is no longer open.', 422);
2368
2363
  }
2369
2364
  const baseBranch = summary.base;
2370
2365
  const headBranch = summary.branch;
@@ -2381,15 +2376,15 @@ export class WorkflowService {
2381
2376
  // The verb acts on the request as it is NOW — never a cached file list.
2382
2377
  const paths = await this.git.changedPathsForPr(ws.id, baseBranch, headBranch);
2383
2378
  if (!paths.includes(repoRelPath)) {
2384
- throw new WorkflowDomainError('That file is not part of this change request.', 422);
2379
+ throw new VersionControlDomainError('That file is not part of this change request.', 422);
2385
2380
  }
2386
2381
  const canApprove = await this.accessControl.canWriteAtRef(ws.id, `origin/${baseBranch}`, user.email, repoRelPath);
2387
2382
  if (canApprove !== true) {
2388
- throw new WorkflowDomainError('Only an eligible approver of this file can revert it — declining takes the same permission as accepting.', 403);
2383
+ throw new VersionControlDomainError('Only an eligible approver of this file can revert it — declining takes the same permission as accepting.', 403);
2389
2384
  }
2390
2385
  const mergeBase = await this.git.mergeBaseForPr(ws.id, baseBranch, headBranch);
2391
2386
  if (!mergeBase) {
2392
- throw new WorkflowDomainError('These branches share no history to revert to.', 422);
2387
+ throw new VersionControlDomainError('These branches share no history to revert to.', 422);
2393
2388
  }
2394
2389
  const placeholder = await this.placeholderRevertedWith(ws.id, mergeBase, repoRelPath, paths);
2395
2390
  const reverted = placeholder ? [repoRelPath, placeholder] : [repoRelPath];
@@ -2406,7 +2401,7 @@ export class WorkflowService {
2406
2401
  const lockPath = `${this.kbDirName}/${p}`;
2407
2402
  const lock = await this.fileLocks.acquire(ws.id, headBranch, lockPath, user);
2408
2403
  if (!lock.acquired) {
2409
- throw new WorkflowDomainError(p === repoRelPath
2404
+ throw new VersionControlDomainError(p === repoRelPath
2410
2405
  ? `${repoRelPath} is being edited by ${lock.lock.holderName} — try again once the edit settles.`
2411
2406
  : `The folder of ${repoRelPath} is being changed by ${lock.lock.holderName} — try again once the edit settles.`, 409);
2412
2407
  }
@@ -2486,7 +2481,7 @@ export class WorkflowService {
2486
2481
  }
2487
2482
  catch (err) {
2488
2483
  log.warn(`changedPathsForPr failed for #${cr.number} under folder ${printable(folder)}: ${printable(sanitizeError(err))}`);
2489
- throw new WorkflowDomainError(`Couldn't read what change request #${cr.number} proposes — try again in a moment.`, 500);
2484
+ throw new VersionControlDomainError(`Couldn't read what change request #${cr.number} proposes — try again in a moment.`, 500);
2490
2485
  }
2491
2486
  }));
2492
2487
  const touching = resolved
@@ -2549,7 +2544,7 @@ export class WorkflowService {
2549
2544
  const requests = await this.changeRequestsUnderFolder(folder, user);
2550
2545
  const refused = requests.filter((r) => !r.mayRemove);
2551
2546
  if (refused.length > 0) {
2552
- throw new WorkflowDomainError(`You can't remove proposed changes from ${refused.map((r) => `#${r.number}`).join(', ')} — only the author, an admin or someone who can write every file it proposes here can.`, 403);
2547
+ throw new VersionControlDomainError(`You can't remove proposed changes from ${refused.map((r) => `#${r.number}`).join(', ')} — only the author, an admin or someone who can write every file it proposes here can.`, 403);
2553
2548
  }
2554
2549
  const prefix = folderPrefix(folder);
2555
2550
  // Everything that can refuse happens before the first commit, so a
@@ -2571,7 +2566,7 @@ export class WorkflowService {
2571
2566
  }
2572
2567
  catch (err) {
2573
2568
  log.warn(`pull failed for #${summary.number} before removing folder ${printable(folder)}: ${printable(sanitizeError(err))}`);
2574
- throw new WorkflowDomainError(`#${summary.number} could not be brought up to date, so nothing was removed — try again in a moment.`, 409);
2569
+ throw new VersionControlDomainError(`#${summary.number} could not be brought up to date, so nothing was removed — try again in a moment.`, 409);
2575
2570
  }
2576
2571
  const paths = (await this.git.changedPathsForPr(ws.id, summary.base, summary.branch)).filter((p) => p.startsWith(prefix));
2577
2572
  // The permission above was judged on the paths the request proposed
@@ -2579,13 +2574,13 @@ export class WorkflowService {
2579
2574
  // file need not be one of it — so the request has to be asked about again.
2580
2575
  const unjudged = paths.filter((p) => !request.paths.includes(p));
2581
2576
  if (unjudged.length > 0) {
2582
- throw new WorkflowDomainError(`#${summary.number} changed while the folder was being deleted (${unjudged.length === 1 ? unjudged[0] : `${unjudged.length} new files`}), so no proposed changes were removed — try again.`, 409);
2577
+ throw new VersionControlDomainError(`#${summary.number} changed while the folder was being deleted (${unjudged.length === 1 ? unjudged[0] : `${unjudged.length} new files`}), so no proposed changes were removed — try again.`, 409);
2583
2578
  }
2584
2579
  let mergeBase = null;
2585
2580
  if (paths.length > 0) {
2586
2581
  mergeBase = await this.git.mergeBaseForPr(ws.id, summary.base, summary.branch);
2587
2582
  if (!mergeBase) {
2588
- throw new WorkflowDomainError(`#${summary.number} shares no history with its target to revert to.`, 422);
2583
+ throw new VersionControlDomainError(`#${summary.number} shares no history with its target to revert to.`, 422);
2589
2584
  }
2590
2585
  }
2591
2586
  plans.push({ number: summary.number, branch: summary.branch, wsId: ws.id, paths, mergeBase });
@@ -2612,7 +2607,7 @@ export class WorkflowService {
2612
2607
  }
2613
2608
  else if (seen.mergeBase !== plan.mergeBase) {
2614
2609
  const sharing = group.plans.map((other) => `#${other.number}`).join(', ');
2615
- throw new WorkflowDomainError(`${sharing} propose ${repoRelPath} from the same branch against different targets, so it can't be taken out of both at once. Decline it in each request instead.`, 422);
2610
+ throw new VersionControlDomainError(`${sharing} propose ${repoRelPath} from the same branch against different targets, so it can't be taken out of both at once. Decline it in each request instead.`, 422);
2616
2611
  }
2617
2612
  }
2618
2613
  }
@@ -2639,7 +2634,7 @@ export class WorkflowService {
2639
2634
  const lockPath = `${this.kbDirName}/${repoRelPath}`;
2640
2635
  const lock = await this.fileLocks.acquire(group.wsId, group.branch, lockPath, user);
2641
2636
  if (!lock.acquired) {
2642
- throw new WorkflowDomainError(`${repoRelPath} is being edited by ${lock.lock.holderName} — try again once the edit settles.`, 409);
2637
+ throw new VersionControlDomainError(`${repoRelPath} is being edited by ${lock.lock.holderName} — try again once the edit settles.`, 409);
2643
2638
  }
2644
2639
  held.push({ wsId: group.wsId, branch: group.branch, lockPath });
2645
2640
  }
@@ -2710,7 +2705,7 @@ export class WorkflowService {
2710
2705
  if (pushFailure) {
2711
2706
  const failed = pushFailure.group.plans.map((plan) => `#${plan.number}`).join(', ');
2712
2707
  log.warn(`push failed for ${failed} removing folder ${printable(folder)}: ${printable(sanitizeError(pushFailure.err))}`);
2713
- throw new WorkflowDomainError(`The folder's files were removed from ${finished.map((plan) => `#${plan.number}`).join(', ')}, but ${failed} could not be updated and it and any later requests were left as they were. Run the delete again to finish.`, 500);
2708
+ throw new VersionControlDomainError(`The folder's files were removed from ${finished.map((plan) => `#${plan.number}`).join(', ')}, but ${failed} could not be updated and it and any later requests were left as they were. Run the delete again to finish.`, 500);
2714
2709
  }
2715
2710
  return results;
2716
2711
  }
@@ -2731,9 +2726,9 @@ export class WorkflowService {
2731
2726
  async deleteChangeRequest(number, user) {
2732
2727
  const summary = await this.prs.getPr(number);
2733
2728
  if (!summary)
2734
- throw new WorkflowDomainError('change request not found', 404);
2729
+ throw new VersionControlDomainError('change request not found', 404);
2735
2730
  if (summary.state === 'merged') {
2736
- throw new WorkflowDomainError('This change request has already been applied.', 422);
2731
+ throw new VersionControlDomainError('This change request has already been applied.', 422);
2737
2732
  }
2738
2733
  // Which `roles.yaml` authorizes this? The base branch's, exactly as every
2739
2734
  // other admin check here. When the base branch itself is gone, this
@@ -2758,7 +2753,7 @@ export class WorkflowService {
2758
2753
  await this.workspaceService.ensureRemotesFetched(ws.id, { strict: true });
2759
2754
  }
2760
2755
  catch {
2761
- throw new WorkflowDomainError(`Could not verify the base branch "${summary.base}" — origin was unreachable. Retry in a moment.`, 409);
2756
+ throw new VersionControlDomainError(`Could not verify the base branch "${summary.base}" — origin was unreachable. Retry in a moment.`, 409);
2762
2757
  }
2763
2758
  isAdmin = await this.accessControl.canWriteAtRef(ws.id, `origin/${summary.base}`, user.email, 'roles.yaml');
2764
2759
  }
@@ -2774,7 +2769,7 @@ export class WorkflowService {
2774
2769
  // attempt the sweep has either closed the row or shown the base alive.
2775
2770
  if (isAdmin === null) {
2776
2771
  this.kickDeletedBranchSweep();
2777
- throw new WorkflowDomainError(`The base branch "${summary.base}" could not be resolved — it may have been deleted, or origin was unreachable. A background check is running; retry in a moment.`, 409);
2772
+ throw new VersionControlDomainError(`The base branch "${summary.base}" could not be resolved — it may have been deleted, or origin was unreachable. A background check is running; retry in a moment.`, 409);
2778
2773
  }
2779
2774
  // Authorship is decided from the STORED author hash, never from anything
2780
2775
  // the caller sends. Note what is deliberately NOT short-circuited for an
@@ -2786,7 +2781,7 @@ export class WorkflowService {
2786
2781
  // stay honest.
2787
2782
  const callerIsAuthor = !!(summary.authorId && summary.authorId === hashEmail(user.email));
2788
2783
  if (!callerIsAuthor && isAdmin !== true) {
2789
- throw new WorkflowDomainError("Only the request's author or an admin can delete it.", 403);
2784
+ throw new VersionControlDomainError("Only the request's author or an admin can delete it.", 403);
2790
2785
  }
2791
2786
  // Close first (idempotent: an already-closed request just skips to the
2792
2787
  // branch retirement). Guarded on `open` so a concurrent merge wins.
@@ -2803,7 +2798,7 @@ export class WorkflowService {
2803
2798
  else {
2804
2799
  const fresh = await this.prs.getPr(number);
2805
2800
  if (fresh?.state === 'merged') {
2806
- throw new WorkflowDomainError('This change request has already been applied.', 422);
2801
+ throw new VersionControlDomainError('This change request has already been applied.', 422);
2807
2802
  }
2808
2803
  }
2809
2804
  await this.retireMergedSourceBranch(number, summary.base, user);
@@ -2837,7 +2832,7 @@ export class WorkflowService {
2837
2832
  }
2838
2833
  catch {
2839
2834
  this.kickDeletedBranchSweep();
2840
- throw new WorkflowDomainError(`Could not verify the base branch "${baseBranch}" — origin was unreachable. Retry in a moment.`, 409);
2835
+ throw new VersionControlDomainError(`Could not verify the base branch "${baseBranch}" — origin was unreachable. Retry in a moment.`, 409);
2841
2836
  }
2842
2837
  const isAdmin = await this.accessControl.canWriteAtRef(workspaceId, `origin/${baseBranch}`, user.email, 'roles.yaml');
2843
2838
  if (isAdmin === true)
@@ -2847,7 +2842,7 @@ export class WorkflowService {
2847
2842
  // read and a batch lookup done for nothing.
2848
2843
  if (isAdmin === null) {
2849
2844
  this.kickDeletedBranchSweep();
2850
- throw new WorkflowDomainError(`The base branch "${baseBranch}" could not be resolved — it may have been deleted, or origin was unreachable. A background check is running; retry in a moment.`, 409);
2845
+ throw new VersionControlDomainError(`The base branch "${baseBranch}" could not be resolved — it may have been deleted, or origin was unreachable. A background check is running; retry in a moment.`, 409);
2851
2846
  }
2852
2847
  let detail;
2853
2848
  try {
@@ -2885,16 +2880,16 @@ export class WorkflowService {
2885
2880
  const description = input.description === undefined ? undefined : input.description.trim();
2886
2881
  const appended = input.appendDescription === undefined ? undefined : input.appendDescription.trim();
2887
2882
  if (title === undefined && description === undefined && appended === undefined) {
2888
- throw new WorkflowValidationError('Give a new title, a new description, or both.');
2883
+ throw new VersionControlValidationError('Give a new title, a new description, or both.');
2889
2884
  }
2890
2885
  if (description !== undefined && appended !== undefined) {
2891
- throw new WorkflowValidationError('Give either a new description or text to append to it, not both.');
2886
+ throw new VersionControlValidationError('Give either a new description or text to append to it, not both.');
2892
2887
  }
2893
2888
  if (title !== undefined && title.length === 0) {
2894
- throw new WorkflowValidationError('A change request needs a title; it cannot be empty.');
2889
+ throw new VersionControlValidationError('A change request needs a title; it cannot be empty.');
2895
2890
  }
2896
2891
  if (title !== undefined && title.length > CHANGE_REQUEST_TITLE_MAX) {
2897
- throw new WorkflowValidationError(`A change request's title is at most ${CHANGE_REQUEST_TITLE_MAX} characters; this one has ${title.length}.`);
2892
+ throw new VersionControlValidationError(`A change request's title is at most ${CHANGE_REQUEST_TITLE_MAX} characters; this one has ${title.length}.`);
2898
2893
  }
2899
2894
  // A replacement is measured here; an append is measured on what it
2900
2895
  // leaves, inside the transaction, since that depends on the body as
@@ -2902,7 +2897,7 @@ export class WorkflowService {
2902
2897
  assertDescriptionFits(description);
2903
2898
  const summary = await this.prs.getPr(number);
2904
2899
  if (!summary)
2905
- throw new WorkflowDomainError('change request not found', 404);
2900
+ throw new VersionControlDomainError('change request not found', 404);
2906
2901
  assertEditable(summary.state);
2907
2902
  // The grants beyond authorship are read in the base branch's own workspace,
2908
2903
  // resolved only once authorship has not already decided: an author's edit
@@ -2918,7 +2913,7 @@ export class WorkflowService {
2918
2913
  }
2919
2914
  });
2920
2915
  if (grant === null) {
2921
- throw new WorkflowDomainError("Only the request's author, an admin, or someone who may approve every file it changes can edit its title and description.", 403);
2916
+ throw new VersionControlDomainError("Only the request's author, an admin, or someone who may approve every file it changes can edit its title and description.", 403);
2922
2917
  }
2923
2918
  // The body is rewritten from the row as stored, not from the summary read
2924
2919
  // above, inside one transaction holding the row's lock (`FOR UPDATE`) from
@@ -2963,15 +2958,15 @@ export class WorkflowService {
2963
2958
  if (!updated) {
2964
2959
  const fresh = await this.prs.getPr(number);
2965
2960
  if (!fresh)
2966
- throw new WorkflowDomainError('change request not found', 404);
2961
+ throw new VersionControlDomainError('change request not found', 404);
2967
2962
  assertEditable(fresh.state);
2968
- throw new WorkflowDomainError('This change request changed while it was being edited. Retry in a moment.', 409);
2963
+ throw new VersionControlDomainError('This change request changed while it was being edited. Retry in a moment.', 409);
2969
2964
  }
2970
2965
  crLog.info(`#${number} title/description edited`);
2971
2966
  this.events?.emit({ kind: 'change-request-edited', number });
2972
2967
  const fresh = await this.prs.getPr(number);
2973
2968
  if (!fresh)
2974
- throw new WorkflowDomainError('change request not found', 404);
2969
+ throw new VersionControlDomainError('change request not found', 404);
2975
2970
  return fresh;
2976
2971
  }
2977
2972
  /**
@@ -3043,7 +3038,7 @@ export class WorkflowService {
3043
3038
  * branch is gone. Closing takes it out of every open list (which is the
3044
3039
  * whole visible problem) while a `state = 'closed'` row can still be read,
3045
3040
  * counted, and reopened by hand. Deleting would make this sweep the one
3046
- * operation in the workflow that destroys history without a human asking.
3041
+ * operation in version control that destroys history without a human asking.
3047
3042
  *
3048
3043
  * ONE fetch, then a set lookup. The freshness matters more than the cost:
3049
3044
  * `changedPathsForPr` fails when a branch is missing from THAT
@@ -3506,7 +3501,7 @@ export class WorkflowService {
3506
3501
  effectiveAuthorIdHash = hashEmail(user.email);
3507
3502
  }
3508
3503
  }
3509
- const result = await this.reviewWorkflow.cancelPr(number, user, state, effectiveAuthorIdHash, baseBranch, workspaceId);
3504
+ const result = await this.changeRequestReview.cancelPr(number, user, state, effectiveAuthorIdHash, baseBranch, workspaceId);
3510
3505
  this.prs.invalidateDetailCache(number);
3511
3506
  this.events?.emit({ kind: 'change-request-rejected', number });
3512
3507
  return result;
@@ -3561,7 +3556,7 @@ export class WorkflowService {
3561
3556
  }
3562
3557
  let result;
3563
3558
  try {
3564
- result = await this.reviewWorkflow.mergePr(number, user, mergeHeadSha, mergeApprovals, state, title, baseBranch, workspaceId, opts);
3559
+ result = await this.changeRequestReview.mergePr(number, user, mergeHeadSha, mergeApprovals, state, title, baseBranch, workspaceId, opts);
3565
3560
  }
3566
3561
  catch (err) {
3567
3562
  // The local merge hit conflicts — hand the caller (agent/UI) the actual
@@ -3693,7 +3688,7 @@ export class WorkflowService {
3693
3688
  }
3694
3689
  async mergeBranch(user, sourceBranch, targetBranch) {
3695
3690
  if (sourceBranch === targetBranch) {
3696
- throw new WorkflowValidationError(`\`source\` and \`target\` are both "${sourceBranch}" — name two different branches.`);
3691
+ throw new VersionControlValidationError(`\`source\` and \`target\` are both "${sourceBranch}" — name two different branches.`);
3697
3692
  }
3698
3693
  // Asked once BEFORE waiting, so a merge the open request forbids is refused
3699
3694
  // at once rather than after the source's commits have landed. Not the
@@ -3742,7 +3737,7 @@ export class WorkflowService {
3742
3737
  // The merge runs in the target's own workspace, like a change request's.
3743
3738
  const targetWorkspaceId = (await this.workspaceService.getOrCreateForBranch(targetBranch)).id;
3744
3739
  if (!(await this.git.remoteBranchExists(targetWorkspaceId, sourceBranch))) {
3745
- throw new WorkflowValidationError(`No branch named "${sourceBranch}" on the shared remote.`);
3740
+ throw new VersionControlValidationError(`No branch named "${sourceBranch}" on the shared remote.`);
3746
3741
  }
3747
3742
  const result = await this.git.mergeChangeRequest(targetWorkspaceId, sourceBranch, targetBranch, {
3748
3743
  subject: `Merge ${sourceBranch} into ${targetBranch}`,
@@ -3780,7 +3775,7 @@ export class WorkflowService {
3780
3775
  // roles.yaml would bypass both, on the one file the access
3781
3776
  // model cannot survive being wrong.
3782
3777
  if (changedPaths.includes('roles.yaml')) {
3783
- throw new WorkflowDomainError(`"${targetBranch}" is protected and this merge would change its roles.yaml. ` +
3778
+ throw new VersionControlDomainError(`"${targetBranch}" is protected and this merge would change its roles.yaml. ` +
3784
3779
  `Roles never change through a merge: restore roles.yaml on "${sourceBranch}" to the version on ` +
3785
3780
  `"${targetBranch}" and merge again, and ask the user to change roles in the app.`, 403, { kind: 'protected-merge-changes-roles', targetBranch, sourceBranch });
3786
3781
  }
@@ -3788,7 +3783,7 @@ export class WorkflowService {
3788
3783
  const denied = allowed ? changedPaths.filter((p) => !allowed.get(p)) : [];
3789
3784
  if (denied.length === 0)
3790
3785
  return;
3791
- throw new WorkflowDomainError(`"${targetBranch}" is protected and you cannot commit directly to it: ` +
3786
+ throw new VersionControlDomainError(`"${targetBranch}" is protected and you cannot commit directly to it: ` +
3792
3787
  `${denied.length} changed file(s) are outside your write access (${denied.join(', ')}). ` +
3793
3788
  `Open a change request from "${sourceBranch}" into "${targetBranch}" and ask the user to review it in the app.`, 403, { kind: 'protected-merge-target', targetBranch, deniedPaths: denied });
3794
3789
  }
@@ -3888,7 +3883,7 @@ export class WorkflowService {
3888
3883
  */
3889
3884
  gateWouldPass(number, approvals) {
3890
3885
  try {
3891
- const gate = this.reviewWorkflow.evaluateMergeGate({ prNumber: number, state: 'open', approvals });
3886
+ const gate = this.changeRequestReview.evaluateMergeGate({ prNumber: number, state: 'open', approvals });
3892
3887
  return gate?.mergeable === true && gate.warnings.length === 0;
3893
3888
  }
3894
3889
  catch (err) {
@@ -4159,7 +4154,7 @@ export class WorkflowService {
4159
4154
  throw new Error('updateBranch: resolutions need a `validateWrite` to be asked before the merge');
4160
4155
  }
4161
4156
  if (this.kb.isProtectedBranch(branch)) {
4162
- throw new WorkflowDomainError(`"${branch}" is protected: it is changed through change requests, never merged into directly.`, 403, { kind: 'protected-update-target', branch });
4157
+ throw new VersionControlDomainError(`"${branch}" is protected: it is changed through change requests, never merged into directly.`, 403, { kind: 'protected-update-target', branch });
4163
4158
  }
4164
4159
  // The one merge a person makes: a change request's. An update that would
4165
4160
  // land an OPEN request from `from` into this draft is that merge by
@@ -4205,7 +4200,7 @@ export class WorkflowService {
4205
4200
  throw new OpenChangeRequestBlocksMergeError(from, branch, open);
4206
4201
  }
4207
4202
  if (!(await this.git.remoteBranchExists(workspaceId, from))) {
4208
- throw new WorkflowValidationError(`No branch named "${from}" on the shared repository.`);
4203
+ throw new VersionControlValidationError(`No branch named "${from}" on the shared repository.`);
4209
4204
  }
4210
4205
  const resolutions = opts.resolutions ?? [];
4211
4206
  const subject = from === branch ? `Merge the shared ${branch} into the local one` : `Merge ${from} into ${branch}`;
@@ -4216,7 +4211,7 @@ export class WorkflowService {
4216
4211
  ? ` Conflicts resolved by ${user.name} <${user.email}> in: ${resolutions.map((r) => r.path).join(', ')}.`
4217
4212
  : '');
4218
4213
  // Published inside the merge's own reservation: nothing lands between
4219
- // the merge commit and its push, and the push is EVERY workflow push's
4214
+ // the merge commit and its push, and the push is EVERY version-control push's
4220
4215
  // `pushWithRecovery`, run over the merge's own unlocked moves — a
4221
4216
  // rejection replays the merge (kept as a merge) onto the moved branch
4222
4217
  // and pushes again; a replay that conflicts or a host that refuses
@@ -4268,4 +4263,4 @@ export class WorkflowService {
4268
4263
  return this.git.changedPathsForPr(workspaceId, base, branch);
4269
4264
  }
4270
4265
  }
4271
- //# sourceMappingURL=workflow.service.js.map
4266
+ //# sourceMappingURL=version-control.service.js.map