@paraharness/git 0.0.0-stage → 0.1.0

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 (279) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +68 -2
  3. package/dist/builders/create-git-candidate-comparison-tools.d.ts +13 -0
  4. package/dist/builders/create-git-candidate-comparison-tools.d.ts.map +1 -0
  5. package/dist/builders/create-git-candidate-comparison-tools.js +41 -0
  6. package/dist/builders/create-git-candidate-comparison-tools.js.map +1 -0
  7. package/dist/builders/create-git-commit-and-push-builder.d.ts +18 -0
  8. package/dist/builders/create-git-commit-and-push-builder.d.ts.map +1 -0
  9. package/dist/builders/create-git-commit-and-push-builder.js +65 -0
  10. package/dist/builders/create-git-commit-and-push-builder.js.map +1 -0
  11. package/dist/builders/create-git-cow-worktree-builder.d.ts +15 -0
  12. package/dist/builders/create-git-cow-worktree-builder.d.ts.map +1 -0
  13. package/dist/builders/create-git-cow-worktree-builder.js +64 -0
  14. package/dist/builders/create-git-cow-worktree-builder.js.map +1 -0
  15. package/dist/builders/create-git-discard-branch-builder.d.ts +13 -0
  16. package/dist/builders/create-git-discard-branch-builder.d.ts.map +1 -0
  17. package/dist/builders/create-git-discard-branch-builder.js +22 -0
  18. package/dist/builders/create-git-discard-branch-builder.js.map +1 -0
  19. package/dist/builders/create-git-keep-worktree-builder.d.ts +13 -0
  20. package/dist/builders/create-git-keep-worktree-builder.d.ts.map +1 -0
  21. package/dist/builders/create-git-keep-worktree-builder.js +22 -0
  22. package/dist/builders/create-git-keep-worktree-builder.js.map +1 -0
  23. package/dist/builders/create-git-merge-queue-builder.d.ts +19 -0
  24. package/dist/builders/create-git-merge-queue-builder.d.ts.map +1 -0
  25. package/dist/builders/create-git-merge-queue-builder.js +59 -0
  26. package/dist/builders/create-git-merge-queue-builder.js.map +1 -0
  27. package/dist/builders/create-git-patch-equivalence-builder.d.ts +13 -0
  28. package/dist/builders/create-git-patch-equivalence-builder.d.ts.map +1 -0
  29. package/dist/builders/create-git-patch-equivalence-builder.js +32 -0
  30. package/dist/builders/create-git-patch-equivalence-builder.js.map +1 -0
  31. package/dist/builders/create-git-public-surface-cross-tester-builder.d.ts +14 -0
  32. package/dist/builders/create-git-public-surface-cross-tester-builder.d.ts.map +1 -0
  33. package/dist/builders/create-git-public-surface-cross-tester-builder.js +36 -0
  34. package/dist/builders/create-git-public-surface-cross-tester-builder.js.map +1 -0
  35. package/dist/builders/create-git-ref-reader-tools.d.ts +13 -0
  36. package/dist/builders/create-git-ref-reader-tools.d.ts.map +1 -0
  37. package/dist/builders/create-git-ref-reader-tools.js +41 -0
  38. package/dist/builders/create-git-ref-reader-tools.js.map +1 -0
  39. package/dist/builders/create-git-reset-worktree-builder.d.ts +13 -0
  40. package/dist/builders/create-git-reset-worktree-builder.d.ts.map +1 -0
  41. package/dist/builders/create-git-reset-worktree-builder.js +22 -0
  42. package/dist/builders/create-git-reset-worktree-builder.js.map +1 -0
  43. package/dist/builders/create-git-snapshot-and-reset-builder.d.ts +13 -0
  44. package/dist/builders/create-git-snapshot-and-reset-builder.d.ts.map +1 -0
  45. package/dist/builders/create-git-snapshot-and-reset-builder.js +23 -0
  46. package/dist/builders/create-git-snapshot-and-reset-builder.js.map +1 -0
  47. package/dist/builders/git-commit-and-push-builder.d.ts +44 -0
  48. package/dist/builders/git-commit-and-push-builder.d.ts.map +1 -0
  49. package/dist/builders/git-commit-and-push-builder.js +2 -0
  50. package/dist/builders/git-commit-and-push-builder.js.map +1 -0
  51. package/dist/builders/git-commit-and-push-options.d.ts +22 -0
  52. package/dist/builders/git-commit-and-push-options.d.ts.map +1 -0
  53. package/dist/builders/git-commit-and-push-options.js +2 -0
  54. package/dist/builders/git-commit-and-push-options.js.map +1 -0
  55. package/dist/builders/git-cow-worktree-builder.d.ts +64 -0
  56. package/dist/builders/git-cow-worktree-builder.d.ts.map +1 -0
  57. package/dist/builders/git-cow-worktree-builder.js +2 -0
  58. package/dist/builders/git-cow-worktree-builder.js.map +1 -0
  59. package/dist/builders/git-cow-worktree-options.d.ts +42 -0
  60. package/dist/builders/git-cow-worktree-options.d.ts.map +1 -0
  61. package/dist/builders/git-cow-worktree-options.js +2 -0
  62. package/dist/builders/git-cow-worktree-options.js.map +1 -0
  63. package/dist/builders/git-merge-queue-builder.d.ts +37 -0
  64. package/dist/builders/git-merge-queue-builder.d.ts.map +1 -0
  65. package/dist/builders/git-merge-queue-builder.js +2 -0
  66. package/dist/builders/git-merge-queue-builder.js.map +1 -0
  67. package/dist/builders/git-merge-queue-options.d.ts +23 -0
  68. package/dist/builders/git-merge-queue-options.d.ts.map +1 -0
  69. package/dist/builders/git-merge-queue-options.js +2 -0
  70. package/dist/builders/git-merge-queue-options.js.map +1 -0
  71. package/dist/builders/git-namespace-contract.d.ts +141 -0
  72. package/dist/builders/git-namespace-contract.d.ts.map +1 -0
  73. package/dist/builders/git-namespace-contract.js +2 -0
  74. package/dist/builders/git-namespace-contract.js.map +1 -0
  75. package/dist/builders/git-namespace.d.ts +6 -0
  76. package/dist/builders/git-namespace.d.ts.map +1 -0
  77. package/dist/builders/git-namespace.js +32 -0
  78. package/dist/builders/git-namespace.js.map +1 -0
  79. package/dist/builders/git-public-surface-cross-tester-options.d.ts +16 -0
  80. package/dist/builders/git-public-surface-cross-tester-options.d.ts.map +1 -0
  81. package/dist/builders/git-public-surface-cross-tester-options.js +2 -0
  82. package/dist/builders/git-public-surface-cross-tester-options.js.map +1 -0
  83. package/dist/builders/git-reconcile-strategy-options.d.ts +16 -0
  84. package/dist/builders/git-reconcile-strategy-options.d.ts.map +1 -0
  85. package/dist/builders/git-reconcile-strategy-options.js +2 -0
  86. package/dist/builders/git-reconcile-strategy-options.js.map +1 -0
  87. package/dist/builders/internal/build-git-cow-worktree-node.d.ts +35 -0
  88. package/dist/builders/internal/build-git-cow-worktree-node.d.ts.map +1 -0
  89. package/dist/builders/internal/build-git-cow-worktree-node.js +77 -0
  90. package/dist/builders/internal/build-git-cow-worktree-node.js.map +1 -0
  91. package/dist/executors/create-git-executors.d.ts +12 -0
  92. package/dist/executors/create-git-executors.d.ts.map +1 -0
  93. package/dist/executors/create-git-executors.js +43 -0
  94. package/dist/executors/create-git-executors.js.map +1 -0
  95. package/dist/executors/git-checkpoint-payload.d.ts +44 -0
  96. package/dist/executors/git-checkpoint-payload.d.ts.map +1 -0
  97. package/dist/executors/git-checkpoint-payload.js +2 -0
  98. package/dist/executors/git-checkpoint-payload.js.map +1 -0
  99. package/dist/executors/git-commit-and-merge-steps.d.ts +33 -0
  100. package/dist/executors/git-commit-and-merge-steps.d.ts.map +1 -0
  101. package/dist/executors/git-commit-and-merge-steps.js +52 -0
  102. package/dist/executors/git-commit-and-merge-steps.js.map +1 -0
  103. package/dist/executors/git-cow-worktree-scope.d.ts +201 -0
  104. package/dist/executors/git-cow-worktree-scope.d.ts.map +1 -0
  105. package/dist/executors/git-cow-worktree-scope.js +260 -0
  106. package/dist/executors/git-cow-worktree-scope.js.map +1 -0
  107. package/dist/executors/git-cross-verifiers-and-tools.d.ts +42 -0
  108. package/dist/executors/git-cross-verifiers-and-tools.d.ts.map +1 -0
  109. package/dist/executors/git-cross-verifiers-and-tools.js +112 -0
  110. package/dist/executors/git-cross-verifiers-and-tools.js.map +1 -0
  111. package/dist/executors/git-executors.constants.d.ts +4 -0
  112. package/dist/executors/git-executors.constants.d.ts.map +1 -0
  113. package/dist/executors/git-executors.constants.js +4 -0
  114. package/dist/executors/git-executors.constants.js.map +1 -0
  115. package/dist/executors/git-hooks-and-checks.d.ts +51 -0
  116. package/dist/executors/git-hooks-and-checks.d.ts.map +1 -0
  117. package/dist/executors/git-hooks-and-checks.js +139 -0
  118. package/dist/executors/git-hooks-and-checks.js.map +1 -0
  119. package/dist/executors/internal/checkpoint-restore-steps.d.ts +50 -0
  120. package/dist/executors/internal/checkpoint-restore-steps.d.ts.map +1 -0
  121. package/dist/executors/internal/checkpoint-restore-steps.js +184 -0
  122. package/dist/executors/internal/checkpoint-restore-steps.js.map +1 -0
  123. package/dist/executors/internal/checkpoint-staging-and-integrity.d.ts +51 -0
  124. package/dist/executors/internal/checkpoint-staging-and-integrity.d.ts.map +1 -0
  125. package/dist/executors/internal/checkpoint-staging-and-integrity.js +192 -0
  126. package/dist/executors/internal/checkpoint-staging-and-integrity.js.map +1 -0
  127. package/dist/executors/internal/compute-worktree-status-options.d.ts +15 -0
  128. package/dist/executors/internal/compute-worktree-status-options.d.ts.map +1 -0
  129. package/dist/executors/internal/compute-worktree-status-options.js +2 -0
  130. package/dist/executors/internal/compute-worktree-status-options.js.map +1 -0
  131. package/dist/executors/internal/cow-worktree-hydrator.d.ts +51 -0
  132. package/dist/executors/internal/cow-worktree-hydrator.d.ts.map +1 -0
  133. package/dist/executors/internal/cow-worktree-hydrator.js +174 -0
  134. package/dist/executors/internal/cow-worktree-hydrator.js.map +1 -0
  135. package/dist/executors/internal/file-digest-and-globs.d.ts +58 -0
  136. package/dist/executors/internal/file-digest-and-globs.d.ts.map +1 -0
  137. package/dist/executors/internal/file-digest-and-globs.js +188 -0
  138. package/dist/executors/internal/file-digest-and-globs.js.map +1 -0
  139. package/dist/executors/internal/git-checkpoint-diff-effects.d.ts +16 -0
  140. package/dist/executors/internal/git-checkpoint-diff-effects.d.ts.map +1 -0
  141. package/dist/executors/internal/git-checkpoint-diff-effects.js +38 -0
  142. package/dist/executors/internal/git-checkpoint-diff-effects.js.map +1 -0
  143. package/dist/executors/internal/git-checkpoint-restore.d.ts +14 -0
  144. package/dist/executors/internal/git-checkpoint-restore.d.ts.map +1 -0
  145. package/dist/executors/internal/git-checkpoint-restore.js +37 -0
  146. package/dist/executors/internal/git-checkpoint-restore.js.map +1 -0
  147. package/dist/executors/internal/git-checkpoint-serialize.d.ts +13 -0
  148. package/dist/executors/internal/git-checkpoint-serialize.d.ts.map +1 -0
  149. package/dist/executors/internal/git-checkpoint-serialize.js +48 -0
  150. package/dist/executors/internal/git-checkpoint-serialize.js.map +1 -0
  151. package/dist/executors/internal/git-checkpoint-status-map.d.ts +14 -0
  152. package/dist/executors/internal/git-checkpoint-status-map.d.ts.map +1 -0
  153. package/dist/executors/internal/git-checkpoint-status-map.js +27 -0
  154. package/dist/executors/internal/git-checkpoint-status-map.js.map +1 -0
  155. package/dist/executors/internal/git-cli-command-options.d.ts +21 -0
  156. package/dist/executors/internal/git-cli-command-options.d.ts.map +1 -0
  157. package/dist/executors/internal/git-cli-command-options.js +2 -0
  158. package/dist/executors/internal/git-cli-command-options.js.map +1 -0
  159. package/dist/executors/internal/git-cli-command-result.d.ts +16 -0
  160. package/dist/executors/internal/git-cli-command-result.d.ts.map +1 -0
  161. package/dist/executors/internal/git-cli-command-result.js +2 -0
  162. package/dist/executors/internal/git-cli-command-result.js.map +1 -0
  163. package/dist/executors/internal/git-cli-runner.d.ts +73 -0
  164. package/dist/executors/internal/git-cli-runner.d.ts.map +1 -0
  165. package/dist/executors/internal/git-cli-runner.js +157 -0
  166. package/dist/executors/internal/git-cli-runner.js.map +1 -0
  167. package/dist/executors/internal/git-cross-test-import-scanner.d.ts +68 -0
  168. package/dist/executors/internal/git-cross-test-import-scanner.d.ts.map +1 -0
  169. package/dist/executors/internal/git-cross-test-import-scanner.js +226 -0
  170. package/dist/executors/internal/git-cross-test-import-scanner.js.map +1 -0
  171. package/dist/executors/internal/git-executor.constants.d.ts +29 -0
  172. package/dist/executors/internal/git-executor.constants.d.ts.map +1 -0
  173. package/dist/executors/internal/git-executor.constants.js +40 -0
  174. package/dist/executors/internal/git-executor.constants.js.map +1 -0
  175. package/dist/executors/internal/git-merge-train-bisect.d.ts +51 -0
  176. package/dist/executors/internal/git-merge-train-bisect.d.ts.map +1 -0
  177. package/dist/executors/internal/git-merge-train-bisect.js +152 -0
  178. package/dist/executors/internal/git-merge-train-bisect.js.map +1 -0
  179. package/dist/executors/internal/git-tool-dispatchers.d.ts +26 -0
  180. package/dist/executors/internal/git-tool-dispatchers.d.ts.map +1 -0
  181. package/dist/executors/internal/git-tool-dispatchers.js +174 -0
  182. package/dist/executors/internal/git-tool-dispatchers.js.map +1 -0
  183. package/dist/executors/internal/git-worktree-acquire-root.d.ts +22 -0
  184. package/dist/executors/internal/git-worktree-acquire-root.d.ts.map +1 -0
  185. package/dist/executors/internal/git-worktree-acquire-root.js +67 -0
  186. package/dist/executors/internal/git-worktree-acquire-root.js.map +1 -0
  187. package/dist/executors/internal/git-worktree-commit-child.d.ts +26 -0
  188. package/dist/executors/internal/git-worktree-commit-child.d.ts.map +1 -0
  189. package/dist/executors/internal/git-worktree-commit-child.js +88 -0
  190. package/dist/executors/internal/git-worktree-commit-child.js.map +1 -0
  191. package/dist/executors/internal/git-worktree-flush-and-prune.d.ts +43 -0
  192. package/dist/executors/internal/git-worktree-flush-and-prune.d.ts.map +1 -0
  193. package/dist/executors/internal/git-worktree-flush-and-prune.js +169 -0
  194. package/dist/executors/internal/git-worktree-flush-and-prune.js.map +1 -0
  195. package/dist/executors/internal/git-worktree-fork-and-release.d.ts +37 -0
  196. package/dist/executors/internal/git-worktree-fork-and-release.d.ts.map +1 -0
  197. package/dist/executors/internal/git-worktree-fork-and-release.js +159 -0
  198. package/dist/executors/internal/git-worktree-fork-and-release.js.map +1 -0
  199. package/dist/executors/internal/git-worktree-materialize-merge.d.ts +51 -0
  200. package/dist/executors/internal/git-worktree-materialize-merge.d.ts.map +1 -0
  201. package/dist/executors/internal/git-worktree-materialize-merge.js +161 -0
  202. package/dist/executors/internal/git-worktree-materialize-merge.js.map +1 -0
  203. package/dist/executors/internal/git-worktree-reattach.d.ts +57 -0
  204. package/dist/executors/internal/git-worktree-reattach.d.ts.map +1 -0
  205. package/dist/executors/internal/git-worktree-reattach.js +324 -0
  206. package/dist/executors/internal/git-worktree-reattach.js.map +1 -0
  207. package/dist/executors/internal/git-worktree-sync-child-and-root.d.ts +26 -0
  208. package/dist/executors/internal/git-worktree-sync-child-and-root.d.ts.map +1 -0
  209. package/dist/executors/internal/git-worktree-sync-child-and-root.js +82 -0
  210. package/dist/executors/internal/git-worktree-sync-child-and-root.js.map +1 -0
  211. package/dist/executors/internal/host-repository-head-state.d.ts +10 -0
  212. package/dist/executors/internal/host-repository-head-state.d.ts.map +1 -0
  213. package/dist/executors/internal/host-repository-head-state.js +2 -0
  214. package/dist/executors/internal/host-repository-head-state.js.map +1 -0
  215. package/dist/executors/internal/merge-train-candidate.d.ts +14 -0
  216. package/dist/executors/internal/merge-train-candidate.d.ts.map +1 -0
  217. package/dist/executors/internal/merge-train-candidate.js +2 -0
  218. package/dist/executors/internal/merge-train-candidate.js.map +1 -0
  219. package/dist/executors/internal/merge-train-chain-entry.d.ts +13 -0
  220. package/dist/executors/internal/merge-train-chain-entry.d.ts.map +1 -0
  221. package/dist/executors/internal/merge-train-chain-entry.js +2 -0
  222. package/dist/executors/internal/merge-train-chain-entry.js.map +1 -0
  223. package/dist/executors/internal/merge-train-result.d.ts +19 -0
  224. package/dist/executors/internal/merge-train-result.d.ts.map +1 -0
  225. package/dist/executors/internal/merge-train-result.js +2 -0
  226. package/dist/executors/internal/merge-train-result.js.map +1 -0
  227. package/dist/executors/internal/merge-train-runner.d.ts +16 -0
  228. package/dist/executors/internal/merge-train-runner.d.ts.map +1 -0
  229. package/dist/executors/internal/merge-train-runner.js +141 -0
  230. package/dist/executors/internal/merge-train-runner.js.map +1 -0
  231. package/dist/executors/internal/merge-tree-materializer-params.d.ts +19 -0
  232. package/dist/executors/internal/merge-tree-materializer-params.d.ts.map +1 -0
  233. package/dist/executors/internal/merge-tree-materializer-params.js +2 -0
  234. package/dist/executors/internal/merge-tree-materializer-params.js.map +1 -0
  235. package/dist/executors/internal/parent-fast-forward.d.ts +47 -0
  236. package/dist/executors/internal/parent-fast-forward.d.ts.map +1 -0
  237. package/dist/executors/internal/parent-fast-forward.js +138 -0
  238. package/dist/executors/internal/parent-fast-forward.js.map +1 -0
  239. package/dist/executors/internal/porcelain-v2-parser.d.ts +49 -0
  240. package/dist/executors/internal/porcelain-v2-parser.d.ts.map +1 -0
  241. package/dist/executors/internal/porcelain-v2-parser.js +165 -0
  242. package/dist/executors/internal/porcelain-v2-parser.js.map +1 -0
  243. package/dist/executors/internal/resolve-effective-base-branch.d.ts +13 -0
  244. package/dist/executors/internal/resolve-effective-base-branch.d.ts.map +1 -0
  245. package/dist/executors/internal/resolve-effective-base-branch.js +38 -0
  246. package/dist/executors/internal/resolve-effective-base-branch.js.map +1 -0
  247. package/dist/executors/internal/squash-rebase-and-push.d.ts +14 -0
  248. package/dist/executors/internal/squash-rebase-and-push.d.ts.map +1 -0
  249. package/dist/executors/internal/squash-rebase-and-push.js +192 -0
  250. package/dist/executors/internal/squash-rebase-and-push.js.map +1 -0
  251. package/dist/executors/internal/staged-checkpoint-tree-result.d.ts +13 -0
  252. package/dist/executors/internal/staged-checkpoint-tree-result.d.ts.map +1 -0
  253. package/dist/executors/internal/staged-checkpoint-tree-result.js +2 -0
  254. package/dist/executors/internal/staged-checkpoint-tree-result.js.map +1 -0
  255. package/dist/executors/internal/stateless-merge-tree-result.d.ts +12 -0
  256. package/dist/executors/internal/stateless-merge-tree-result.d.ts.map +1 -0
  257. package/dist/executors/internal/stateless-merge-tree-result.js +2 -0
  258. package/dist/executors/internal/stateless-merge-tree-result.js.map +1 -0
  259. package/dist/executors/internal/synthesized-working-tree-commit.d.ts +10 -0
  260. package/dist/executors/internal/synthesized-working-tree-commit.d.ts.map +1 -0
  261. package/dist/executors/internal/synthesized-working-tree-commit.js +2 -0
  262. package/dist/executors/internal/synthesized-working-tree-commit.js.map +1 -0
  263. package/dist/executors/internal/worktree-integrity-verdict.d.ts +10 -0
  264. package/dist/executors/internal/worktree-integrity-verdict.d.ts.map +1 -0
  265. package/dist/executors/internal/worktree-integrity-verdict.js +2 -0
  266. package/dist/executors/internal/worktree-integrity-verdict.js.map +1 -0
  267. package/dist/executors/internal/worktree-status-snapshot.d.ts +17 -0
  268. package/dist/executors/internal/worktree-status-snapshot.d.ts.map +1 -0
  269. package/dist/executors/internal/worktree-status-snapshot.js +2 -0
  270. package/dist/executors/internal/worktree-status-snapshot.js.map +1 -0
  271. package/dist/index.d.ts +31 -0
  272. package/dist/index.d.ts.map +1 -0
  273. package/dist/index.js +20 -0
  274. package/dist/index.js.map +1 -0
  275. package/dist/schemas/git-receipts.schema.d.ts +174 -0
  276. package/dist/schemas/git-receipts.schema.d.ts.map +1 -0
  277. package/dist/schemas/git-receipts.schema.js +123 -0
  278. package/dist/schemas/git-receipts.schema.js.map +1 -0
  279. package/package.json +71 -3
@@ -0,0 +1,82 @@
1
+ import { GitSyncReceiptSchema } from '../../schemas/git-receipts.schema.js';
2
+ import { runGitCommand } from './git-cli-runner.js';
3
+ import { gitWorktreeFlushCleanParentChanges } from './git-worktree-flush-and-prune.js';
4
+ import { executeStatelessMergeTree, gitWorktreeMaterializeMerge, synthesizeWorkingTreeCommitOverBase, } from './git-worktree-materialize-merge.js';
5
+ import { resolvePrerequisiteBaseBranch } from './parent-fast-forward.js';
6
+ /**
7
+ * Rebases/merges uncommitted changes in `pausedChild` onto an updated `parent` worktree via `git merge-tree --write-tree`.
8
+ *
9
+ * Preserves dirty edits in `pausedChild` and records any conflicted paths in `pausedChild.unresolvedConflictPaths`.
10
+ *
11
+ * @param {GitWorktreeHandle} parent - Updated parent worktree handle.
12
+ * @param {GitWorktreeHandle} pausedChild - Suspended child worktree handle being synced.
13
+ * @param {readonly string[] | undefined} [excludeGlobs] - Optional glob patterns excluded from staging.
14
+ *
15
+ * @returns {Promise<ReconcileResult<GitSyncReceipt>>} Clean or conflicted synchronization receipt.
16
+ */
17
+ export async function gitWorktreeSyncChild(parent, pausedChild, excludeGlobs) {
18
+ const c0Sha = pausedChild.baseRef;
19
+ const c1Sha = await gitWorktreeFlushCleanParentChanges(parent, excludeGlobs);
20
+ const childSynth = await synthesizeWorkingTreeCommitOverBase(pausedChild, c0Sha, excludeGlobs);
21
+ const mergeOutcome = await executeStatelessMergeTree(pausedChild, c1Sha, childSynth.commitSha);
22
+ await gitWorktreeMaterializeMerge(pausedChild, {
23
+ targetHeadSha: c1Sha,
24
+ mergedTreeSha: mergeOutcome.mergedTreeSha,
25
+ priorTreeSha: childSynth.treeSha,
26
+ conflictedPaths: mergeOutcome.conflictedPaths,
27
+ nextBaseBranch: parent.baseBranch,
28
+ });
29
+ const diffOutput = await runGitCommand({ cwd: pausedChild.worktreePath, args: ['diff-tree', '-r', '--name-only', '-z', c0Sha, c1Sha] });
30
+ const updatedFiles = diffOutput.stdout.split('\0').filter((relPath) => relPath.length > 0);
31
+ const receipt = GitSyncReceiptSchema.parse({ rebasedOntoRef: c1Sha, baseBranch: parent.baseBranch, updatedFiles });
32
+ if (mergeOutcome.clean)
33
+ return { status: 'clean', data: receipt };
34
+ return {
35
+ status: 'conflict',
36
+ conflictedSummary: `syncChild conflict on paths: ${mergeOutcome.conflictedPaths.join(', ')}`,
37
+ data: receipt,
38
+ };
39
+ }
40
+ /**
41
+ * Synchronizes `rootHandle` onto the tip prerequisite receipt in `prerequisiteReceipts` via `git merge-tree --write-tree`.
42
+ *
43
+ * Auto-flushes clean dirty edits on `rootHandle`, resolves stacked `baseBranch`, and materializes the 3-way merge.
44
+ *
45
+ * @param {GitWorktreeHandle} rootHandle - Task root worktree handle.
46
+ * @param {readonly GitScopeReceipt[]} prerequisiteReceipts - Terminal scope receipts of completed prerequisites.
47
+ * @param {readonly string[] | undefined} [excludeGlobs] - Optional glob patterns excluded from staging.
48
+ *
49
+ * @returns {Promise<ReconcileResult<GitSyncReceipt>>} Clean or conflicted synchronization receipt.
50
+ */
51
+ export async function gitWorktreeSyncRoot(rootHandle, prerequisiteReceipts, excludeGlobs) {
52
+ const tipReceipt = prerequisiteReceipts[prerequisiteReceipts.length - 1];
53
+ if (tipReceipt === undefined) {
54
+ return {
55
+ status: 'clean',
56
+ data: GitSyncReceiptSchema.parse({ rebasedOntoRef: rootHandle.baseRef, baseBranch: rootHandle.baseBranch, updatedFiles: [] }),
57
+ };
58
+ }
59
+ const c0Sha = rootHandle.baseRef;
60
+ await gitWorktreeFlushCleanParentChanges(rootHandle, excludeGlobs);
61
+ const resolvedBaseBranch = await resolvePrerequisiteBaseBranch(rootHandle, tipReceipt);
62
+ const rootSynth = await synthesizeWorkingTreeCommitOverBase(rootHandle, c0Sha, excludeGlobs);
63
+ const mergeOutcome = await executeStatelessMergeTree(rootHandle, tipReceipt.headRef, rootSynth.commitSha);
64
+ await gitWorktreeMaterializeMerge(rootHandle, {
65
+ targetHeadSha: tipReceipt.headRef,
66
+ mergedTreeSha: mergeOutcome.mergedTreeSha,
67
+ priorTreeSha: rootSynth.treeSha,
68
+ conflictedPaths: mergeOutcome.conflictedPaths,
69
+ nextBaseBranch: resolvedBaseBranch,
70
+ });
71
+ const diffOutput = await runGitCommand({ cwd: rootHandle.worktreePath, args: ['diff-tree', '-r', '--name-only', '-z', c0Sha, tipReceipt.headRef] });
72
+ const updatedFiles = diffOutput.stdout.split('\0').filter((relPath) => relPath.length > 0);
73
+ const receipt = GitSyncReceiptSchema.parse({ rebasedOntoRef: tipReceipt.headRef, baseBranch: resolvedBaseBranch, updatedFiles });
74
+ if (mergeOutcome.clean)
75
+ return { status: 'clean', data: receipt };
76
+ return {
77
+ status: 'conflict',
78
+ conflictedSummary: `syncRoot conflict on paths: ${mergeOutcome.conflictedPaths.join(', ')}`,
79
+ data: receipt,
80
+ };
81
+ }
82
+ //# sourceMappingURL=git-worktree-sync-child-and-root.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-worktree-sync-child-and-root.js","sourceRoot":"","sources":["../../../src/executors/internal/git-worktree-sync-child-and-root.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Resolved `HEAD` commit SHA and default branch name of a host Git repository.
3
+ */
4
+ export interface HostRepositoryHeadState {
5
+ /** Current `HEAD` commit SHA resolved via `git rev-parse HEAD`. */
6
+ readonly baseRef: string;
7
+ /** Symbolic branch name of `HEAD` or `'main'` when detached. */
8
+ readonly baseBranch: string;
9
+ }
10
+ //# sourceMappingURL=host-repository-head-state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"host-repository-head-state.d.ts","sourceRoot":"","sources":["../../../src/executors/internal/host-repository-head-state.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,mEAAmE;IACnE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,gEAAgE;IAChE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=host-repository-head-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"host-repository-head-state.js","sourceRoot":"","sources":["../../../src/executors/internal/host-repository-head-state.ts"],"names":[],"mappings":""}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Normalized candidate branch descriptor queued for a batch merge-train run.
3
+ *
4
+ * Identifies the candidate's label (branch name or ref), head commit SHA, and base commit SHA.
5
+ */
6
+ export interface MergeTrainCandidate {
7
+ /** Branch name or ref label for diagnostics and result reporting. */
8
+ readonly label: string;
9
+ /** Candidate tip commit SHA to rebase onto the merge train. */
10
+ readonly headSha: string;
11
+ /** Base commit SHA from which the candidate diverged. */
12
+ readonly baseSha: string;
13
+ }
14
+ //# sourceMappingURL=merge-train-candidate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge-train-candidate.d.ts","sourceRoot":"","sources":["../../../src/executors/internal/merge-train-candidate.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IAClC,qEAAqE;IACrE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,+DAA+D;IAC/D,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,yDAAyD;IACzD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=merge-train-candidate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge-train-candidate.js","sourceRoot":"","sources":["../../../src/executors/internal/merge-train-candidate.ts"],"names":[],"mappings":""}
@@ -0,0 +1,13 @@
1
+ import type { MergeTrainCandidate } from './merge-train-candidate.js';
2
+ /**
3
+ * Speculative cumulative rebase chain entry ($R_i$) in a batch merge train.
4
+ *
5
+ * Pairs the original `MergeTrainCandidate` with its cumulatively rebased commit SHA $R_i$.
6
+ */
7
+ export interface MergeTrainChainEntry {
8
+ /** Candidate branch included at this step of the cumulative rebase chain. */
9
+ readonly candidate: MergeTrainCandidate;
10
+ /** Commit SHA of the cumulative rebase tip $R_i$ after applying `candidate`. */
11
+ readonly rebasedSha: string;
12
+ }
13
+ //# sourceMappingURL=merge-train-chain-entry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge-train-chain-entry.d.ts","sourceRoot":"","sources":["../../../src/executors/internal/merge-train-chain-entry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEtE;;;;GAIG;AACH,MAAM,WAAW,oBAAoB;IACnC,6EAA6E;IAC7E,QAAQ,CAAC,SAAS,EAAE,mBAAmB,CAAC;IACxC,gFAAgF;IAChF,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=merge-train-chain-entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge-train-chain-entry.js","sourceRoot":"","sources":["../../../src/executors/internal/merge-train-chain-entry.ts"],"names":[],"mappings":""}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Outcome of executing a cumulative batch merge-train pass (`git.mergeQueue`).
3
+ *
4
+ * Reports the updated `targetBranch` tip commit SHA, landed candidate labels, evicted candidate labels,
5
+ * and total `verifyWith` executions performed.
6
+ */
7
+ export interface MergeTrainResult {
8
+ /** Target upstream branch updated by the merge train. */
9
+ readonly targetBranch: string;
10
+ /** Final fast-forwarded commit SHA on `targetBranch`. */
11
+ readonly headRef: string;
12
+ /** Ordered list of candidate branch labels that passed verification and landed. */
13
+ readonly landedBranches: readonly string[];
14
+ /** Ordered list of offending candidate branch labels isolated and evicted during bisection or conflict. */
15
+ readonly evictedBranches: readonly string[];
16
+ /** Total number of `verifyWith` check executions run across the batch. */
17
+ readonly verificationRuns: number;
18
+ }
19
+ //# sourceMappingURL=merge-train-result.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge-train-result.d.ts","sourceRoot":"","sources":["../../../src/executors/internal/merge-train-result.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,WAAW,gBAAgB;IAC/B,yDAAyD;IACzD,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,yDAAyD;IACzD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,mFAAmF;IACnF,QAAQ,CAAC,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3C,2GAA2G;IAC3G,QAAQ,CAAC,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5C,0EAA0E;IAC1E,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;CACnC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=merge-train-result.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge-train-result.js","sourceRoot":"","sources":["../../../src/executors/internal/merge-train-result.ts"],"names":[],"mappings":""}
@@ -0,0 +1,16 @@
1
+ import type { GitMergeQueueNode, GitWorktreeHandle, StepExecutionContext } from '@paraharness/core';
2
+ import type { MergeTrainCandidate } from './merge-train-candidate.js';
3
+ import type { MergeTrainResult } from './merge-train-result.js';
4
+ /**
5
+ * Runs the iterative cumulative rebase train and binary bisection loop for `git.mergeQueue`.
6
+ *
7
+ * Lands valid candidate prefixes onto `node.targetBranch` and evicts offending candidate branches.
8
+ *
9
+ * @param {GitMergeQueueNode<unknown, unknown>} node - Merge queue step AST node.
10
+ * @param {readonly MergeTrainCandidate[]} candidates - Normalized candidate branches for the batch.
11
+ * @param {StepExecutionContext<GitWorktreeHandle>} ctx - Active step execution context.
12
+ *
13
+ * @returns {Promise<MergeTrainResult>} Completed batch merge-train outcome.
14
+ */
15
+ export declare function executeBatchMergeTrainQueue(node: GitMergeQueueNode<unknown, unknown>, candidates: readonly MergeTrainCandidate[], ctx: StepExecutionContext<GitWorktreeHandle>): Promise<MergeTrainResult>;
16
+ //# sourceMappingURL=merge-train-runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge-train-runner.d.ts","sourceRoot":"","sources":["../../../src/executors/internal/merge-train-runner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EACjB,iBAAiB,EACjB,oBAAoB,EACrB,MAAM,mBAAmB,CAAC;AAO3B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEtE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AA2IhE;;;;;;;;;;GAUG;AACH,wBAAsB,2BAA2B,CAC/C,IAAI,EAAE,iBAAiB,CAAC,OAAO,EAAE,OAAO,CAAC,EACzC,UAAU,EAAE,SAAS,mBAAmB,EAAE,EAC1C,GAAG,EAAE,oBAAoB,CAAC,iBAAiB,CAAC,GAC3C,OAAO,CAAC,gBAAgB,CAAC,CAwC3B"}
@@ -0,0 +1,141 @@
1
+ import { runGitCommand } from './git-cli-runner.js';
2
+ import { buildCumulativeRebaseChain, evaluateWorktreeCheck, gitMergeTrainBisect, } from './git-merge-train-bisect.js';
3
+ /**
4
+ * Fetches `origin` and resolves the current commit SHA of `targetBranch` (preferring `refs/remotes/origin/<targetBranch>`).
5
+ *
6
+ * @param {string} cwd - Worktree directory path.
7
+ * @param {string} targetBranch - Target branch name configured on `GitMergeQueueNode`.
8
+ * @param {GitWorktreeHandle} handle - Active worktree handle providing fallback `baseRef`.
9
+ *
10
+ * @returns {Promise<string>} Resolved initial target branch commit SHA.
11
+ */
12
+ async function resolveMergeTrainTargetSha(cwd, targetBranch, handle) {
13
+ await runGitCommand({ cwd, args: ['fetch', 'origin'], allowNonZeroExit: true });
14
+ const targetLookup = await runGitCommand({
15
+ cwd,
16
+ args: ['rev-parse', '--verify', `refs/remotes/origin/${targetBranch}`],
17
+ allowNonZeroExit: true,
18
+ });
19
+ if (targetLookup.exitCode === 0) {
20
+ return targetLookup.stdout.trim();
21
+ }
22
+ const localBranchLookup = await runGitCommand({
23
+ cwd,
24
+ args: ['rev-parse', targetBranch],
25
+ allowNonZeroExit: true,
26
+ });
27
+ return localBranchLookup.stdout.trim() || handle.baseRef;
28
+ }
29
+ /**
30
+ * Verifies the tip of a cumulative speculative rebase chain `params.chain`, or binary-bisects `params.chain` on failure
31
+ * to land the valid prefix and evict the first offending candidate.
32
+ *
33
+ * @param {VerifyOrBisectMergeTrainChainParams} params - Chain verification and bisection parameters and mutable queue state.
34
+ *
35
+ * @returns {Promise<void>} Resolves once `params` queue state is updated for the completed chain iteration.
36
+ */
37
+ async function verifyOrBisectMergeTrainChain(params) {
38
+ const { node, ctx, chain, conflictedIdx, landedBranches, evictedBranches } = params;
39
+ const cwd = ctx.scopeHandle.worktreePath;
40
+ const tipEntry = chain[chain.length - 1];
41
+ if (tipEntry === undefined) {
42
+ const first = params.queue[0];
43
+ if (first !== undefined)
44
+ evictedBranches.push(first.label);
45
+ params.queue = params.queue.slice(1);
46
+ return;
47
+ }
48
+ await runGitCommand({ cwd, args: ['reset', '--hard', tipEntry.rebasedSha] });
49
+ params.verificationRuns += 1;
50
+ const tipCheck = await evaluateWorktreeCheck(node.verifyWith, ctx);
51
+ if (tipCheck.ok) {
52
+ params.currentTargetSha = tipEntry.rebasedSha;
53
+ for (const entry of chain)
54
+ landedBranches.push(entry.candidate.label);
55
+ const conflictedCandidate = conflictedIdx >= 0 ? params.queue[conflictedIdx] : undefined;
56
+ if (conflictedCandidate !== undefined) {
57
+ evictedBranches.push(conflictedCandidate.label);
58
+ }
59
+ params.queue =
60
+ conflictedIdx >= 0 ? params.queue.slice(conflictedIdx + 1) : [];
61
+ return;
62
+ }
63
+ const [badIdx, bisectRuns] = await gitMergeTrainBisect(chain, node.verifyWith, ctx);
64
+ params.verificationRuns += bisectRuns;
65
+ const priorEntry = badIdx > 0 ? chain[badIdx - 1] : undefined;
66
+ if (priorEntry !== undefined) {
67
+ params.currentTargetSha = priorEntry.rebasedSha;
68
+ }
69
+ for (let j = 0; j < badIdx; j += 1) {
70
+ const prefixEntry = chain[j];
71
+ if (prefixEntry !== undefined)
72
+ landedBranches.push(prefixEntry.candidate.label);
73
+ }
74
+ const badEntry = chain[badIdx];
75
+ if (badEntry !== undefined)
76
+ evictedBranches.push(badEntry.candidate.label);
77
+ params.queue = params.queue.slice(badIdx + 1);
78
+ }
79
+ /**
80
+ * Resets the worktree to `targetSha`, fast-forwards `refs/heads/<targetBranch>`, and pushes to `origin`.
81
+ *
82
+ * @param {string} cwd - Worktree directory path.
83
+ * @param {string} targetBranch - Target branch name configured on `GitMergeQueueNode`.
84
+ * @param {string} targetSha - Final verified commit SHA to fast-forward onto.
85
+ *
86
+ * @returns {Promise<void>} Resolves once the local and remote target branch refs are updated.
87
+ */
88
+ async function fastForwardAndPushMergeTrainTarget(cwd, targetBranch, targetSha) {
89
+ await runGitCommand({ cwd, args: ['reset', '--hard', targetSha] });
90
+ await runGitCommand({
91
+ cwd,
92
+ args: ['update-ref', `refs/heads/${targetBranch}`, targetSha],
93
+ allowNonZeroExit: true,
94
+ });
95
+ await runGitCommand({
96
+ cwd,
97
+ args: ['push', 'origin', `${targetSha}:refs/heads/${targetBranch}`],
98
+ allowNonZeroExit: true,
99
+ });
100
+ }
101
+ /**
102
+ * Runs the iterative cumulative rebase train and binary bisection loop for `git.mergeQueue`.
103
+ *
104
+ * Lands valid candidate prefixes onto `node.targetBranch` and evicts offending candidate branches.
105
+ *
106
+ * @param {GitMergeQueueNode<unknown, unknown>} node - Merge queue step AST node.
107
+ * @param {readonly MergeTrainCandidate[]} candidates - Normalized candidate branches for the batch.
108
+ * @param {StepExecutionContext<GitWorktreeHandle>} ctx - Active step execution context.
109
+ *
110
+ * @returns {Promise<MergeTrainResult>} Completed batch merge-train outcome.
111
+ */
112
+ export async function executeBatchMergeTrainQueue(node, candidates, ctx) {
113
+ const cwd = ctx.scopeHandle.worktreePath;
114
+ const initialTargetSha = await resolveMergeTrainTargetSha(cwd, node.targetBranch, ctx.scopeHandle);
115
+ const state = {
116
+ node,
117
+ ctx,
118
+ chain: [],
119
+ conflictedIdx: -1,
120
+ landedBranches: [],
121
+ evictedBranches: [],
122
+ currentTargetSha: initialTargetSha,
123
+ queue: [...candidates],
124
+ verificationRuns: 0,
125
+ };
126
+ while (state.queue.length > 0) {
127
+ const [chain, conflictedIdx] = await buildCumulativeRebaseChain(cwd, state.currentTargetSha, state.queue);
128
+ state.chain = chain;
129
+ state.conflictedIdx = conflictedIdx;
130
+ await verifyOrBisectMergeTrainChain(state);
131
+ }
132
+ await fastForwardAndPushMergeTrainTarget(cwd, node.targetBranch, state.currentTargetSha);
133
+ return {
134
+ targetBranch: node.targetBranch,
135
+ headRef: state.currentTargetSha,
136
+ landedBranches: state.landedBranches,
137
+ evictedBranches: state.evictedBranches,
138
+ verificationRuns: state.verificationRuns,
139
+ };
140
+ }
141
+ //# sourceMappingURL=merge-train-runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge-train-runner.js","sourceRoot":"","sources":["../../../src/executors/internal/merge-train-runner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Parameters for `materializeInFlightMergeIntoWorktree` and `finalizeMaterializedMergeMetadata`.
3
+ *
4
+ * Carries the target commit SHA ($C_1$ or $C_{\text{prereq}}$), merged tree SHA ($T_{\text{merged}}$),
5
+ * prior working-tree SHA ($T_{\text{child}}$ or $T_{\text{root}}$), conflicted paths, and optional updated `baseBranch`.
6
+ */
7
+ export interface MaterializeInFlightMergeParams {
8
+ /** Target commit SHA onto which `HEAD`, `.git/index`, and `baseRef` advance. */
9
+ readonly targetHeadSha: string;
10
+ /** Top-level tree SHA emitted by `git merge-tree --write-tree`. */
11
+ readonly mergedTreeSha: string;
12
+ /** Prior synthesized tree SHA of the child or root worktree before the merge. */
13
+ readonly priorTreeSha: string;
14
+ /** Repository-relative paths reported as conflicted by `git merge-tree`. */
15
+ readonly conflictedPaths: readonly string[];
16
+ /** Optional updated base branch name (such as a stacked prerequisite branch). */
17
+ readonly nextBaseBranch?: string;
18
+ }
19
+ //# sourceMappingURL=merge-tree-materializer-params.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge-tree-materializer-params.d.ts","sourceRoot":"","sources":["../../../src/executors/internal/merge-tree-materializer-params.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,WAAW,8BAA8B;IAC7C,gFAAgF;IAChF,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,mEAAmE;IACnE,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,iFAAiF;IACjF,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,4EAA4E;IAC5E,QAAQ,CAAC,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5C,iFAAiF;IACjF,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;CAClC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=merge-tree-materializer-params.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge-tree-materializer-params.js","sourceRoot":"","sources":["../../../src/executors/internal/merge-tree-materializer-params.ts"],"names":[],"mappings":""}
@@ -0,0 +1,47 @@
1
+ import type { GitScopeReceipt, GitWorktreeHandle } from '@paraharness/core';
2
+ /**
3
+ * Advances `parent` from `c1Sha` to `cTargetSha` using crash-safe `pendingParentHeadSha` and `git read-tree -u -m`.
4
+ *
5
+ * Resets any colliding paths in `parent.unresolvedConflictPaths` or untracked working tree files to match `c1Sha` first.
6
+ *
7
+ * @param {GitWorktreeHandle} parent - Target parent worktree handle.
8
+ * @param {string} c1Sha - Current `parent.HEAD` commit SHA before advancing.
9
+ * @param {string} cTargetSha - Merged target commit SHA to advance `parent` onto.
10
+ *
11
+ * @returns {Promise<void>} Resolves once `parent` working tree, index, `HEAD`, and `harness-meta.json` are updated.
12
+ */
13
+ export declare function fastForwardParentToTargetCommit(parent: GitWorktreeHandle, c1Sha: string, cTargetSha: string): Promise<void>;
14
+ /**
15
+ * Pins `refs/harness/candidates/<run-id>/<branch-index>` in the host object store when `handle` is a child fork worktree.
16
+ *
17
+ * Extracts `<run-id>` and `<branch-index>` from `<dir>/forks/<runId>/<forkId>` worktree paths.
18
+ *
19
+ * @param {GitWorktreeHandle} handle - Worktree handle being inspected.
20
+ * @param {string} headRef - Synthesized or current commit SHA to pin.
21
+ *
22
+ * @returns {Promise<void>} Resolves once candidate refs are updated.
23
+ */
24
+ export declare function pinCandidateRefIfSpeculativeBranch(handle: GitWorktreeHandle, headRef: string): Promise<void>;
25
+ /**
26
+ * Scans dirty/untracked files and committed diffs (`baseRef..HEAD`) on `handle` for paired conflict markers.
27
+ *
28
+ * Returns all repository-relative file paths containing `<<<<<<<` / `=======` / `>>>>>>>` marker blocks.
29
+ *
30
+ * @param {GitWorktreeHandle} handle - Worktree handle to scan.
31
+ * @param {readonly string[] | undefined} [excludeGlobs] - Optional glob patterns excluded from scanning.
32
+ *
33
+ * @returns {Promise<readonly string[]>} List of file paths containing paired conflict markers.
34
+ */
35
+ export declare function findWorktreeConflictMarkerPaths(handle: GitWorktreeHandle, excludeGlobs?: readonly string[]): Promise<readonly string[]>;
36
+ /**
37
+ * Resolves the stacked-PR `baseBranch` for `rootHandle` when syncing onto `tipReceipt`.
38
+ *
39
+ * Runs `git fetch origin` (ignoring missing remotes) and checks whether `tipReceipt.branchName` is already merged into `origin/main`.
40
+ *
41
+ * @param {GitWorktreeHandle} rootHandle - Root worktree handle being synced.
42
+ * @param {GitScopeReceipt} tipReceipt - Terminal scope receipt of the tip prerequisite run.
43
+ *
44
+ * @returns {Promise<string>} Resolved base branch name (`tipReceipt.branchName` when unmerged, or `'main'`).
45
+ */
46
+ export declare function resolvePrerequisiteBaseBranch(rootHandle: GitWorktreeHandle, tipReceipt: GitScopeReceipt): Promise<string>;
47
+ //# sourceMappingURL=parent-fast-forward.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parent-fast-forward.d.ts","sourceRoot":"","sources":["../../../src/executors/internal/parent-fast-forward.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAW5E;;;;;;;;;;GAUG;AACH,wBAAsB,+BAA+B,CACnD,MAAM,EAAE,iBAAiB,EACzB,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CAiCf;AAED;;;;;;;;;GASG;AACH,wBAAsB,kCAAkC,CACtD,MAAM,EAAE,iBAAiB,EACzB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CAkBf;AAED;;;;;;;;;GASG;AACH,wBAAsB,+BAA+B,CACnD,MAAM,EAAE,iBAAiB,EACzB,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,GAC/B,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC,CAkB5B;AAED;;;;;;;;;GASG;AACH,wBAAsB,6BAA6B,CACjD,UAAU,EAAE,iBAAiB,EAC7B,UAAU,EAAE,eAAe,GAC1B,OAAO,CAAC,MAAM,CAAC,CAYjB"}
@@ -0,0 +1,138 @@
1
+ import { readFile, rm } from 'node:fs/promises';
2
+ import path from 'node:path';
3
+ import { listTreePaths } from './checkpoint-staging-and-integrity.js';
4
+ import { gitCheckpointStatusMap } from './git-checkpoint-status-map.js';
5
+ import { readHarnessMeta, runGitCommand, updateWorktreeHandleInPlace, writeHarnessMeta, } from './git-cli-runner.js';
6
+ import { hasPairedConflictMarkers } from './git-worktree-flush-and-prune.js';
7
+ /**
8
+ * Advances `parent` from `c1Sha` to `cTargetSha` using crash-safe `pendingParentHeadSha` and `git read-tree -u -m`.
9
+ *
10
+ * Resets any colliding paths in `parent.unresolvedConflictPaths` or untracked working tree files to match `c1Sha` first.
11
+ *
12
+ * @param {GitWorktreeHandle} parent - Target parent worktree handle.
13
+ * @param {string} c1Sha - Current `parent.HEAD` commit SHA before advancing.
14
+ * @param {string} cTargetSha - Merged target commit SHA to advance `parent` onto.
15
+ *
16
+ * @returns {Promise<void>} Resolves once `parent` working tree, index, `HEAD`, and `harness-meta.json` are updated.
17
+ */
18
+ export async function fastForwardParentToTargetCommit(parent, c1Sha, cTargetSha) {
19
+ const meta = await readHarnessMeta(parent.gitDirPath);
20
+ const diffRes = await runGitCommand({
21
+ cwd: parent.worktreePath,
22
+ args: ['diff-tree', '-r', '--name-only', '-z', c1Sha, cTargetSha],
23
+ });
24
+ const touchedPaths = diffRes.stdout.split('\0').filter((p) => p.length > 0);
25
+ const pathsToReset = new Set([...touchedPaths, ...Object.keys(meta.unresolvedConflictPaths)]);
26
+ const c1Paths = await listTreePaths(parent.worktreePath, c1Sha);
27
+ for (const relPath of pathsToReset) {
28
+ if (c1Paths.has(relPath)) {
29
+ await runGitCommand({ cwd: parent.worktreePath, args: ['checkout-index', '-f', '--', relPath], allowNonZeroExit: true });
30
+ }
31
+ else {
32
+ await rm(path.join(parent.worktreePath, relPath), { force: true });
33
+ }
34
+ }
35
+ await writeHarnessMeta(parent.gitDirPath, { ...meta, pendingParentHeadSha: cTargetSha });
36
+ await runGitCommand({ cwd: parent.worktreePath, args: ['read-tree', '-u', '-m', c1Sha, cTargetSha] });
37
+ await runGitCommand({ cwd: parent.worktreePath, args: ['update-ref', 'HEAD', cTargetSha, c1Sha] });
38
+ const nextConflicts = {};
39
+ for (const [relPath, digest] of Object.entries(meta.unresolvedConflictPaths)) {
40
+ if (!pathsToReset.has(relPath))
41
+ nextConflicts[relPath] = digest;
42
+ }
43
+ const frozenConflicts = Object.freeze(nextConflicts);
44
+ await writeHarnessMeta(parent.gitDirPath, {
45
+ ...meta,
46
+ pendingParentHeadSha: undefined,
47
+ unresolvedConflictPaths: frozenConflicts,
48
+ });
49
+ updateWorktreeHandleInPlace(parent, {
50
+ headRef: cTargetSha,
51
+ unresolvedConflictPaths: frozenConflicts,
52
+ });
53
+ }
54
+ /**
55
+ * Pins `refs/harness/candidates/<run-id>/<branch-index>` in the host object store when `handle` is a child fork worktree.
56
+ *
57
+ * Extracts `<run-id>` and `<branch-index>` from `<dir>/forks/<runId>/<forkId>` worktree paths.
58
+ *
59
+ * @param {GitWorktreeHandle} handle - Worktree handle being inspected.
60
+ * @param {string} headRef - Synthesized or current commit SHA to pin.
61
+ *
62
+ * @returns {Promise<void>} Resolves once candidate refs are updated.
63
+ */
64
+ export async function pinCandidateRefIfSpeculativeBranch(handle, headRef) {
65
+ const runDir = path.dirname(handle.worktreePath);
66
+ const forksDir = path.dirname(runDir);
67
+ if (path.basename(forksDir) !== 'forks')
68
+ return;
69
+ const runId = path.basename(runDir);
70
+ const forkName = path.basename(handle.worktreePath);
71
+ const numericMatch = /(\d+)$/.exec(forkName);
72
+ if (numericMatch?.[1] !== undefined) {
73
+ await runGitCommand({
74
+ cwd: handle.worktreePath,
75
+ args: ['update-ref', `refs/harness/candidates/${runId}/${numericMatch[1]}`, headRef],
76
+ });
77
+ }
78
+ await runGitCommand({
79
+ cwd: handle.worktreePath,
80
+ args: ['update-ref', `refs/harness/candidates/${runId}/${forkName}`, headRef],
81
+ allowNonZeroExit: true,
82
+ });
83
+ }
84
+ /**
85
+ * Scans dirty/untracked files and committed diffs (`baseRef..HEAD`) on `handle` for paired conflict markers.
86
+ *
87
+ * Returns all repository-relative file paths containing `<<<<<<<` / `=======` / `>>>>>>>` marker blocks.
88
+ *
89
+ * @param {GitWorktreeHandle} handle - Worktree handle to scan.
90
+ * @param {readonly string[] | undefined} [excludeGlobs] - Optional glob patterns excluded from scanning.
91
+ *
92
+ * @returns {Promise<readonly string[]>} List of file paths containing paired conflict markers.
93
+ */
94
+ export async function findWorktreeConflictMarkerPaths(handle, excludeGlobs) {
95
+ const snap = await gitCheckpointStatusMap(handle.worktreePath, { excludeGlobs });
96
+ const diffRes = await runGitCommand({
97
+ cwd: handle.worktreePath,
98
+ args: ['diff', '--name-only', '-z', handle.baseRef, 'HEAD'],
99
+ allowNonZeroExit: true,
100
+ });
101
+ const candidatePaths = new Set([
102
+ ...Object.keys(snap.statusMap),
103
+ ...diffRes.stdout.split('\0').filter((p) => p.length > 0),
104
+ ]);
105
+ const markerPaths = [];
106
+ for (const relPath of candidatePaths) {
107
+ if (snap.statusMap[relPath] === 'DELETED')
108
+ continue;
109
+ const content = await readFile(path.join(handle.worktreePath, relPath), 'utf8').catch(() => '');
110
+ if (hasPairedConflictMarkers(content))
111
+ markerPaths.push(relPath);
112
+ }
113
+ return Object.freeze(markerPaths);
114
+ }
115
+ /**
116
+ * Resolves the stacked-PR `baseBranch` for `rootHandle` when syncing onto `tipReceipt`.
117
+ *
118
+ * Runs `git fetch origin` (ignoring missing remotes) and checks whether `tipReceipt.branchName` is already merged into `origin/main`.
119
+ *
120
+ * @param {GitWorktreeHandle} rootHandle - Root worktree handle being synced.
121
+ * @param {GitScopeReceipt} tipReceipt - Terminal scope receipt of the tip prerequisite run.
122
+ *
123
+ * @returns {Promise<string>} Resolved base branch name (`tipReceipt.branchName` when unmerged, or `'main'`).
124
+ */
125
+ export async function resolvePrerequisiteBaseBranch(rootHandle, tipReceipt) {
126
+ await runGitCommand({ cwd: rootHandle.worktreePath, args: ['fetch', 'origin'], allowNonZeroExit: true });
127
+ const prereqBranch = tipReceipt.branchName;
128
+ if (prereqBranch === undefined || prereqBranch.length === 0) {
129
+ return rootHandle.baseBranch;
130
+ }
131
+ const isAncestor = await runGitCommand({
132
+ cwd: rootHandle.worktreePath,
133
+ args: ['merge-base', '--is-ancestor', tipReceipt.headRef, 'origin/main'],
134
+ allowNonZeroExit: true,
135
+ });
136
+ return isAncestor.exitCode === 0 ? 'main' : prereqBranch;
137
+ }
138
+ //# sourceMappingURL=parent-fast-forward.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parent-fast-forward.js","sourceRoot":"","sources":["../../../src/executors/internal/parent-fast-forward.ts"],"names":[],"mappings":"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"}