@paraharness/git 0.0.0-stage → 0.2.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 +14 -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 +42 -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 +60 -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 +16 -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 +72 -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 +38 -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 +14 -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 +42 -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 +142 -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,161 @@
1
+ import { randomUUID } from 'node:crypto';
2
+ import { rm } from 'node:fs/promises';
3
+ import path from 'node:path';
4
+ import { listTreePaths } from './checkpoint-staging-and-integrity.js';
5
+ import { computePathModeAndSha256 } from './file-digest-and-globs.js';
6
+ import { gitCheckpointStatusMap } from './git-checkpoint-status-map.js';
7
+ import { readHarnessMeta, runGitCommand, updateWorktreeHandleInPlace, writeHarnessMeta, } from './git-cli-runner.js';
8
+ /**
9
+ * Synthesizes a temporary Git tree and commit object over `parentCommitSha` without mutating `<gitdir>/index` or `HEAD`.
10
+ *
11
+ * Stages all dirty tracked and untracked files from `gitCheckpointStatusMap` into a temporary index file.
12
+ *
13
+ * @param {GitWorktreeHandle} handle - Worktree handle whose working state should be synthesized.
14
+ * @param {string} parentCommitSha - Parent commit SHA (`-p`) for `git commit-tree`.
15
+ * @param {readonly string[] | undefined} [excludeGlobs] - Optional glob patterns excluded from staging.
16
+ *
17
+ * @returns {Promise<SynthesizedWorkingTreeCommit>} Synthesized tree SHA and commit SHA.
18
+ */
19
+ export async function synthesizeWorkingTreeCommitOverBase(handle, parentCommitSha, excludeGlobs) {
20
+ const headSha = (await runGitCommand({ cwd: handle.worktreePath, args: ['rev-parse', 'HEAD'] })).stdout.trim();
21
+ const snap = await gitCheckpointStatusMap(handle.worktreePath, { excludeGlobs });
22
+ const tmpIndex = path.join(handle.gitDirPath, `harness-synth-idx.${process.pid}.${randomUUID()}`);
23
+ const toAdd = [];
24
+ const toRemove = [];
25
+ for (const [relPath, digest] of Object.entries(snap.statusMap)) {
26
+ if (digest === 'DELETED')
27
+ toRemove.push(relPath);
28
+ else
29
+ toAdd.push(relPath);
30
+ }
31
+ try {
32
+ await runGitCommand({ cwd: handle.worktreePath, args: ['read-tree', headSha], env: { GIT_INDEX_FILE: tmpIndex } });
33
+ if (toRemove.length > 0) {
34
+ await runGitCommand({ cwd: handle.worktreePath, args: ['update-index', '--force-remove', '-z', '--stdin'], env: { GIT_INDEX_FILE: tmpIndex }, stdin: `${toRemove.join('\0')}\0` });
35
+ }
36
+ if (toAdd.length > 0) {
37
+ await runGitCommand({ cwd: handle.worktreePath, args: ['update-index', '--add', '-z', '--stdin'], env: { GIT_INDEX_FILE: tmpIndex }, stdin: `${toAdd.join('\0')}\0` });
38
+ }
39
+ const treeSha = (await runGitCommand({ cwd: handle.worktreePath, args: ['write-tree'], env: { GIT_INDEX_FILE: tmpIndex } })).stdout.trim();
40
+ const commitSha = (await runGitCommand({ cwd: handle.worktreePath, args: ['commit-tree', treeSha, '-p', parentCommitSha, '-m', 'harness: synthesized worktree state'] })).stdout.trim();
41
+ return Object.freeze({ treeSha, commitSha });
42
+ }
43
+ finally {
44
+ await rm(tmpIndex, { force: true });
45
+ }
46
+ }
47
+ /**
48
+ * Executes a stateless 3-way `git merge-tree --write-tree -z` between `targetCommitSha` and `sourceCommitSha` over `baseRef`.
49
+ *
50
+ * Synthesizes `targetPrime` with `baseRef` as its sole immediate parent so Git 2.38+ always uses `baseRef` as the merge base.
51
+ *
52
+ * @param {GitWorktreeHandle} handle - Worktree handle providing `worktreePath` and `baseRef`.
53
+ * @param {string} targetCommitSha - Target commit SHA ($C_1$ or $C_{\text{prereq}}$).
54
+ * @param {string} sourceCommitSha - Source commit SHA ($C_{\text{child}}$ or $C_{\text{root}}$) parented on `handle.baseRef`.
55
+ *
56
+ * @returns {Promise<StatelessMergeTreeResult>} Merge tree result.
57
+ */
58
+ export async function executeStatelessMergeTree(handle, targetCommitSha, sourceCommitSha) {
59
+ const targetTree = (await runGitCommand({ cwd: handle.worktreePath, args: ['rev-parse', `${targetCommitSha}^{tree}`] })).stdout.trim();
60
+ const targetPrime = (await runGitCommand({ cwd: handle.worktreePath, args: ['commit-tree', targetTree, '-p', handle.baseRef, '-m', 'harness: merge-tree target'] })).stdout.trim();
61
+ const mergeOutput = await runGitCommand({
62
+ cwd: handle.worktreePath,
63
+ args: ['merge-tree', '--write-tree', '-z', targetPrime, sourceCommitSha],
64
+ allowNonZeroExit: true,
65
+ });
66
+ const parts = mergeOutput.stdout.split('\0');
67
+ const mergedTreeSha = (parts[0] ?? '').split(/\r?\n/)[0]?.trim() ?? '';
68
+ if (mergeOutput.exitCode === 0) {
69
+ return Object.freeze({ clean: true, mergedTreeSha, conflictedPaths: Object.freeze([]) });
70
+ }
71
+ const conflictSet = new Set();
72
+ for (let i = 1; i < parts.length; i += 1) {
73
+ const token = parts[i] ?? '';
74
+ if (token.length === 0)
75
+ break;
76
+ const tabIdx = token.indexOf('\t');
77
+ if (tabIdx !== -1)
78
+ conflictSet.add(token.slice(tabIdx + 1));
79
+ }
80
+ return Object.freeze({ clean: false, mergedTreeSha, conflictedPaths: Object.freeze([...conflictSet]) });
81
+ }
82
+ /**
83
+ * Atomically materializes `inFlightMerge` into `handle`'s working tree and updates `HEAD`, `.git/index`, and `baseRef`.
84
+ *
85
+ * Persists `inFlightMerge` in `<gitdir>/harness-meta.json` before modifying files, checks out `mergedTreeSha`, unlinks removed paths, and records conflict digests.
86
+ *
87
+ * @param {GitWorktreeHandle} handle - Target worktree handle to materialize into.
88
+ * @param {MaterializeInFlightMergeParams} mergeParams - Merge materialization parameters.
89
+ *
90
+ * @returns {Promise<Readonly<Record<string, string>>>} Frozen map of conflicted paths to their materialized `${mode}:${sha256}` digests.
91
+ */
92
+ export async function gitWorktreeMaterializeMerge(handle, mergeParams) {
93
+ const meta = await readHarnessMeta(handle.gitDirPath);
94
+ const placeholderConflicts = {};
95
+ for (const relPath of mergeParams.conflictedPaths)
96
+ placeholderConflicts[relPath] = 'PENDING';
97
+ await writeHarnessMeta(handle.gitDirPath, {
98
+ ...meta,
99
+ inFlightMerge: {
100
+ targetHeadSha: mergeParams.targetHeadSha,
101
+ mergedTreeSha: mergeParams.mergedTreeSha,
102
+ priorTreeSha: mergeParams.priorTreeSha,
103
+ unresolvedConflictPaths: placeholderConflicts,
104
+ },
105
+ });
106
+ const basePaths = await listTreePaths(handle.worktreePath, handle.baseRef);
107
+ const priorPaths = await listTreePaths(handle.worktreePath, mergeParams.priorTreeSha);
108
+ const mergedPaths = await listTreePaths(handle.worktreePath, mergeParams.mergedTreeSha);
109
+ const tmpIndex = path.join(handle.gitDirPath, `harness-merge-idx.${process.pid}.${randomUUID()}`);
110
+ try {
111
+ await runGitCommand({ cwd: handle.worktreePath, args: ['read-tree', mergeParams.mergedTreeSha], env: { GIT_INDEX_FILE: tmpIndex } });
112
+ await runGitCommand({ cwd: handle.worktreePath, args: ['checkout-index', '-f', '-a'], env: { GIT_INDEX_FILE: tmpIndex } });
113
+ }
114
+ finally {
115
+ await rm(tmpIndex, { force: true });
116
+ }
117
+ for (const oldPath of new Set([...basePaths, ...priorPaths])) {
118
+ if (!mergedPaths.has(oldPath))
119
+ await rm(path.join(handle.worktreePath, oldPath), { force: true });
120
+ }
121
+ return finalizeMaterializedMergeMetadata(handle, mergeParams);
122
+ }
123
+ /**
124
+ * Completes `gitWorktreeMaterializeMerge` by updating `HEAD`, live `.git/index`, `baseRef`, and `unresolvedConflictPaths`.
125
+ *
126
+ * Computes post-checkout `${mode}:${sha256}` digests for `conflictedPaths` and clears `inFlightMerge` in `harness-meta.json`.
127
+ *
128
+ * @param {GitWorktreeHandle} handle - Target worktree handle.
129
+ * @param {MaterializeInFlightMergeParams} mergeParams - Finalization parameters.
130
+ *
131
+ * @returns {Promise<Readonly<Record<string, string>>>} Frozen map of unresolved conflict paths to materialized digests.
132
+ */
133
+ export async function finalizeMaterializedMergeMetadata(handle, mergeParams) {
134
+ await runGitCommand({ cwd: handle.worktreePath, args: ['update-ref', '--no-deref', 'HEAD', mergeParams.targetHeadSha] });
135
+ await runGitCommand({ cwd: handle.worktreePath, args: ['read-tree', mergeParams.targetHeadSha] });
136
+ const conflictDigests = {};
137
+ for (const relPath of mergeParams.conflictedPaths) {
138
+ const rawDigest = await computePathModeAndSha256(path.join(handle.worktreePath, relPath));
139
+ conflictDigests[relPath] = rawDigest === 'DELETED' ? 'MISSING' : rawDigest;
140
+ }
141
+ const frozenConflicts = Object.freeze(conflictDigests);
142
+ const meta = await readHarnessMeta(handle.gitDirPath);
143
+ const nextBaseBranch = mergeParams.nextBaseBranch ?? meta.baseBranch;
144
+ await writeHarnessMeta(handle.gitDirPath, {
145
+ baseRef: mergeParams.targetHeadSha,
146
+ baseBranch: nextBaseBranch,
147
+ branchName: meta.branchName,
148
+ unresolvedConflictPaths: frozenConflicts,
149
+ pendingParentHeadSha: undefined,
150
+ inFlightMerge: undefined,
151
+ inFlightCommitAndPush: meta.inFlightCommitAndPush,
152
+ });
153
+ updateWorktreeHandleInPlace(handle, {
154
+ baseRef: mergeParams.targetHeadSha,
155
+ baseBranch: nextBaseBranch,
156
+ headRef: mergeParams.targetHeadSha,
157
+ unresolvedConflictPaths: frozenConflicts,
158
+ });
159
+ return frozenConflicts;
160
+ }
161
+ //# sourceMappingURL=git-worktree-materialize-merge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-worktree-materialize-merge.js","sourceRoot":"","sources":["../../../src/executors/internal/git-worktree-materialize-merge.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ import type { GitCowWorktreeNode, GitWorktreeHandle } from '@paraharness/core';
2
+ /**
3
+ * Parameters for reattaching or recreating a child fork worktree during crash recovery.
4
+ */
5
+ export interface ReattachChildWorktreeParams {
6
+ /** Worktree scope AST node configuration. */
7
+ readonly node: GitCowWorktreeNode;
8
+ /** Reattached parent worktree handle. */
9
+ readonly parent: GitWorktreeHandle;
10
+ /** Unique child fork or branch identifier. */
11
+ readonly forkId: string;
12
+ /** Optional serialized checkpoint fallback when the directory is missing. */
13
+ readonly checkpoint?: string;
14
+ }
15
+ /**
16
+ * Merges `node.excludeFromCloneGlobs` and `node.checkpointPolicy?.excludeGlobs` into an effective checkpoint policy.
17
+ *
18
+ * Precomputes the combined exclusion globs so checkpoint serialization, diffing, and restoration share one policy.
19
+ *
20
+ * @param {Pick<GitCowWorktreeNode, 'excludeFromCloneGlobs' | 'checkpointPolicy'>} node - Passive worktree scope AST configuration node.
21
+ *
22
+ * @returns {GitCowWorktreeNode['checkpointPolicy']} Effective checkpoint policy with merged `excludeGlobs`.
23
+ */
24
+ export declare function resolveEffectiveCheckpointPolicy(node: Pick<GitCowWorktreeNode, 'excludeFromCloneGlobs' | 'checkpointPolicy'>): GitCowWorktreeNode['checkpointPolicy'];
25
+ /**
26
+ * Completes or rolls back any interrupted atomic metadata state (`pendingParentHeadSha`, `inFlightMerge`, `inFlightCommitAndPush`).
27
+ *
28
+ * Preserves intact working-tree edits across process reboots when no in-flight atomic transition was interrupted.
29
+ *
30
+ * @param {string} worktreePath - Absolute path to the existing worktree directory on disk.
31
+ *
32
+ * @returns {Promise<GitWorktreeHandle>} Rebound and recovered `GitWorktreeHandle`.
33
+ */
34
+ export declare function recoverInFlightWorktreeState(worktreePath: string): Promise<GitWorktreeHandle>;
35
+ /**
36
+ * Rebinds an existing Task Root Worktree at `<dir>/roots/<runId>` or recreates it from `checkpoint` if missing.
37
+ *
38
+ * Completes interrupted `pendingParentHeadSha` or `inFlightMerge` transitions and rolls back `inFlightCommitAndPush`.
39
+ *
40
+ * @param {GitCowWorktreeNode} node - Worktree scope AST node configuration.
41
+ * @param {string} runId - Unique flow run identifier.
42
+ * @param {string} [checkpoint] - Optional serialized checkpoint fallback when the directory is missing.
43
+ *
44
+ * @returns {Promise<GitWorktreeHandle>} Reattached root `GitWorktreeHandle`.
45
+ */
46
+ export declare function gitWorktreeReattachRoot(node: GitCowWorktreeNode, runId: string, checkpoint?: string): Promise<GitWorktreeHandle>;
47
+ /**
48
+ * Rebinds an existing child fork worktree at `<dir>/forks/<runId>/<forkId>` or recreates it from `checkpoint` if missing.
49
+ *
50
+ * Completes any interrupted `inFlightMerge` materialization and preserves uncommitted child edits across reboots.
51
+ *
52
+ * @param {ReattachChildWorktreeParams} params - Child worktree reattachment parameters.
53
+ *
54
+ * @returns {Promise<GitWorktreeHandle>} Reattached child `GitWorktreeHandle`.
55
+ */
56
+ export declare function gitWorktreeReattachChild(params: ReattachChildWorktreeParams): Promise<GitWorktreeHandle>;
57
+ //# sourceMappingURL=git-worktree-reattach.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-worktree-reattach.d.ts","sourceRoot":"","sources":["../../../src/executors/internal/git-worktree-reattach.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAe/E;;GAEG;AACH,MAAM,WAAW,2BAA2B;IAC1C,6CAA6C;IAC7C,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC;IAClC,yCAAyC;IACzC,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;IACnC,8CAA8C;IAC9C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,6EAA6E;IAC7E,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAgCD;;;;;;;;GAQG;AACH,wBAAgB,gCAAgC,CAC9C,IAAI,EAAE,IAAI,CAAC,kBAAkB,EAAE,uBAAuB,GAAG,kBAAkB,CAAC,GAC3E,kBAAkB,CAAC,kBAAkB,CAAC,CAexC;AAsCD;;;;;;;;GAQG;AACH,wBAAsB,4BAA4B,CAChD,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,iBAAiB,CAAC,CAkD5B;AAoFD;;;;;;;;;;GAUG;AACH,wBAAsB,uBAAuB,CAC3C,IAAI,EAAE,kBAAkB,EACxB,KAAK,EAAE,MAAM,EACb,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,iBAAiB,CAAC,CAmB5B;AAuFD;;;;;;;;GAQG;AACH,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,2BAA2B,GAClC,OAAO,CAAC,iBAAiB,CAAC,CAuB5B"}
@@ -0,0 +1,324 @@
1
+ import { lstat, mkdir } from 'node:fs/promises';
2
+ import path from 'node:path';
3
+ import { cloneNodeModulesTree, hydrateWorktreeDependencies, } from './cow-worktree-hydrator.js';
4
+ import { gitCheckpointRestore } from './git-checkpoint-restore.js';
5
+ import { readHarnessMeta, runGitCommand, withHostWorktreeLock, writeHarnessMeta, } from './git-cli-runner.js';
6
+ import { gitWorktreeMaterializeMerge } from './git-worktree-materialize-merge.js';
7
+ /**
8
+ * Merges `node.excludeFromCloneGlobs` and `node.checkpointPolicy?.excludeGlobs` into an effective checkpoint policy.
9
+ *
10
+ * Precomputes the combined exclusion globs so checkpoint serialization, diffing, and restoration share one policy.
11
+ *
12
+ * @param {Pick<GitCowWorktreeNode, 'excludeFromCloneGlobs' | 'checkpointPolicy'>} node - Passive worktree scope AST configuration node.
13
+ *
14
+ * @returns {GitCowWorktreeNode['checkpointPolicy']} Effective checkpoint policy with merged `excludeGlobs`.
15
+ */
16
+ export function resolveEffectiveCheckpointPolicy(node) {
17
+ const cloneGlobs = node.excludeFromCloneGlobs ?? [];
18
+ const policyGlobs = node.checkpointPolicy?.excludeGlobs ?? [];
19
+ if (cloneGlobs.length === 0 && node.checkpointPolicy === undefined) {
20
+ return undefined;
21
+ }
22
+ const mergedGlobs = Object.freeze([
23
+ ...new Set([...cloneGlobs, ...policyGlobs]),
24
+ ]);
25
+ return Object.freeze({
26
+ partitionMap: node.checkpointPolicy?.partitionMap,
27
+ excludeGlobs: mergedGlobs,
28
+ maxUntrackedFileSizeBytes: node.checkpointPolicy?.maxUntrackedFileSizeBytes,
29
+ });
30
+ }
31
+ /**
32
+ * Rolls back an interrupted `inFlightCommitAndPush` transition on `worktreePath` to `preStepHeadSha` and `preStepBaseRef`.
33
+ *
34
+ * Aborts any in-progress rebase, resets `HEAD` to `preStepHeadSha`, and clears `inFlightCommitAndPush` in `harness-meta.json`.
35
+ *
36
+ * @param {string} worktreePath - Absolute path to the worktree directory.
37
+ * @param {string} gitDirPath - Absolute path to the worktree's `<gitdir>`.
38
+ * @param {HarnessMetaRecord} meta - Current metadata record containing `inFlightCommitAndPush`.
39
+ *
40
+ * @returns {Promise<HarnessMetaRecord>} Updated `HarnessMetaRecord` with `inFlightCommitAndPush` cleared.
41
+ */
42
+ async function rollbackInFlightCommitAndPush(worktreePath, gitDirPath, meta) {
43
+ const commitState = meta.inFlightCommitAndPush;
44
+ if (commitState === undefined)
45
+ return meta;
46
+ await runGitCommand({
47
+ cwd: worktreePath,
48
+ args: ['rebase', '--abort'],
49
+ allowNonZeroExit: true,
50
+ });
51
+ await runGitCommand({
52
+ cwd: worktreePath,
53
+ args: ['reset', '--hard', commitState.preStepHeadSha],
54
+ });
55
+ const updatedMeta = {
56
+ ...meta,
57
+ baseRef: commitState.preStepBaseRef,
58
+ inFlightCommitAndPush: undefined,
59
+ };
60
+ await writeHarnessMeta(gitDirPath, updatedMeta);
61
+ return updatedMeta;
62
+ }
63
+ /**
64
+ * Completes or rolls back any interrupted atomic metadata state (`pendingParentHeadSha`, `inFlightMerge`, `inFlightCommitAndPush`).
65
+ *
66
+ * Preserves intact working-tree edits across process reboots when no in-flight atomic transition was interrupted.
67
+ *
68
+ * @param {string} worktreePath - Absolute path to the existing worktree directory on disk.
69
+ *
70
+ * @returns {Promise<GitWorktreeHandle>} Rebound and recovered `GitWorktreeHandle`.
71
+ */
72
+ export async function recoverInFlightWorktreeState(worktreePath) {
73
+ const gitDirResult = await runGitCommand({
74
+ cwd: worktreePath,
75
+ args: ['rev-parse', '--git-dir'],
76
+ });
77
+ const gitDirPath = path.resolve(worktreePath, gitDirResult.stdout.trim());
78
+ let meta = await readHarnessMeta(gitDirPath);
79
+ if (meta.pendingParentHeadSha !== undefined) {
80
+ await runGitCommand({
81
+ cwd: worktreePath,
82
+ args: ['update-ref', 'HEAD', meta.pendingParentHeadSha],
83
+ });
84
+ meta = { ...meta, pendingParentHeadSha: undefined };
85
+ await writeHarnessMeta(gitDirPath, meta);
86
+ }
87
+ if (meta.inFlightMerge !== undefined) {
88
+ const mergeState = meta.inFlightMerge;
89
+ const tempHandle = {
90
+ worktreePath,
91
+ gitDirPath,
92
+ baseRef: meta.baseRef,
93
+ baseBranch: meta.baseBranch,
94
+ branchName: meta.branchName,
95
+ headRef: meta.baseRef,
96
+ unresolvedConflictPaths: meta.unresolvedConflictPaths,
97
+ };
98
+ await gitWorktreeMaterializeMerge(tempHandle, {
99
+ targetHeadSha: mergeState.targetHeadSha,
100
+ mergedTreeSha: mergeState.mergedTreeSha,
101
+ priorTreeSha: mergeState.priorTreeSha,
102
+ conflictedPaths: Object.keys(mergeState.unresolvedConflictPaths),
103
+ });
104
+ meta = await readHarnessMeta(gitDirPath);
105
+ }
106
+ if (meta.inFlightCommitAndPush !== undefined) {
107
+ meta = await rollbackInFlightCommitAndPush(worktreePath, gitDirPath, meta);
108
+ }
109
+ const headResult = await runGitCommand({
110
+ cwd: worktreePath,
111
+ args: ['rev-parse', 'HEAD'],
112
+ });
113
+ return {
114
+ worktreePath,
115
+ gitDirPath,
116
+ baseRef: meta.baseRef,
117
+ baseBranch: meta.baseBranch,
118
+ branchName: meta.branchName,
119
+ headRef: headResult.stdout.trim(),
120
+ unresolvedConflictPaths: meta.unresolvedConflictPaths,
121
+ };
122
+ }
123
+ /**
124
+ * Recreates a missing Task Root Worktree at `params.worktreePath` from a pinned completed ref or host `HEAD`,
125
+ * hydrates `node_modules`, and restores `params.checkpoint` when provided.
126
+ *
127
+ * @param {RecreateMissingRootWorktreeParams} params - Root worktree recreation parameters.
128
+ *
129
+ * @returns {Promise<GitWorktreeHandle>} Newly recreated root `GitWorktreeHandle`.
130
+ */
131
+ async function recreateMissingRootWorktree(params) {
132
+ const { node, repoPath, safeRunId, worktreePath, checkpoint } = params;
133
+ await mkdir(path.dirname(worktreePath), { recursive: true });
134
+ const baseRef = await withHostWorktreeLock(repoPath, async () => {
135
+ await runGitCommand({
136
+ cwd: repoPath,
137
+ args: ['worktree', 'prune'],
138
+ allowNonZeroExit: true,
139
+ });
140
+ const pinnedResult = await runGitCommand({
141
+ cwd: repoPath,
142
+ args: [
143
+ 'rev-parse',
144
+ '--verify',
145
+ `refs/harness/completed/roots/${safeRunId}`,
146
+ ],
147
+ allowNonZeroExit: true,
148
+ });
149
+ const fallbackHeadResult = await runGitCommand({
150
+ cwd: repoPath,
151
+ args: ['rev-parse', 'HEAD'],
152
+ });
153
+ const resolvedBaseRef = pinnedResult.exitCode === 0 && pinnedResult.stdout.trim().length > 0
154
+ ? pinnedResult.stdout.trim()
155
+ : fallbackHeadResult.stdout.trim();
156
+ await runGitCommand({
157
+ cwd: repoPath,
158
+ args: [
159
+ 'worktree',
160
+ 'add',
161
+ '--detach',
162
+ '--force',
163
+ worktreePath,
164
+ resolvedBaseRef,
165
+ ],
166
+ });
167
+ return resolvedBaseRef;
168
+ });
169
+ const gitDirResult = await runGitCommand({
170
+ cwd: worktreePath,
171
+ args: ['rev-parse', '--git-dir'],
172
+ });
173
+ const gitDirPath = path.resolve(worktreePath, gitDirResult.stdout.trim());
174
+ await hydrateWorktreeDependencies(node, repoPath, worktreePath);
175
+ const emptyConflicts = Object.freeze({});
176
+ await writeHarnessMeta(gitDirPath, {
177
+ baseRef,
178
+ baseBranch: 'main',
179
+ unresolvedConflictPaths: emptyConflicts,
180
+ });
181
+ const handle = {
182
+ worktreePath,
183
+ gitDirPath,
184
+ baseRef,
185
+ baseBranch: 'main',
186
+ headRef: baseRef,
187
+ unresolvedConflictPaths: emptyConflicts,
188
+ };
189
+ if (checkpoint !== undefined) {
190
+ await gitCheckpointRestore(handle, checkpoint, resolveEffectiveCheckpointPolicy(node));
191
+ }
192
+ return handle;
193
+ }
194
+ /**
195
+ * Rebinds an existing Task Root Worktree at `<dir>/roots/<runId>` or recreates it from `checkpoint` if missing.
196
+ *
197
+ * Completes interrupted `pendingParentHeadSha` or `inFlightMerge` transitions and rolls back `inFlightCommitAndPush`.
198
+ *
199
+ * @param {GitCowWorktreeNode} node - Worktree scope AST node configuration.
200
+ * @param {string} runId - Unique flow run identifier.
201
+ * @param {string} [checkpoint] - Optional serialized checkpoint fallback when the directory is missing.
202
+ *
203
+ * @returns {Promise<GitWorktreeHandle>} Reattached root `GitWorktreeHandle`.
204
+ */
205
+ export async function gitWorktreeReattachRoot(node, runId, checkpoint) {
206
+ const repoPath = path.resolve(node.repo);
207
+ const baseDir = path.isAbsolute(node.dir)
208
+ ? node.dir
209
+ : path.resolve(repoPath, node.dir);
210
+ const safeRunId = runId.replace(/[^a-zA-Z0-9._-]/g, '_');
211
+ const worktreePath = path.join(baseDir, 'roots', safeRunId);
212
+ const exists = await lstat(worktreePath).then(() => true, () => false);
213
+ if (exists)
214
+ return recoverInFlightWorktreeState(worktreePath);
215
+ return recreateMissingRootWorktree({
216
+ node,
217
+ repoPath,
218
+ safeRunId,
219
+ worktreePath,
220
+ checkpoint,
221
+ });
222
+ }
223
+ /**
224
+ * Recreates a missing child fork worktree at `recreateParams.worktreePath` from a pinned completed ref or `parent`,
225
+ * clones `node_modules`, and restores `recreateParams.params.checkpoint` when provided.
226
+ *
227
+ * @param {RecreateMissingChildWorktreeParams} recreateParams - Child worktree recreation parameters.
228
+ *
229
+ * @returns {Promise<GitWorktreeHandle>} Newly recreated child `GitWorktreeHandle`.
230
+ */
231
+ async function recreateMissingChildWorktree(recreateParams) {
232
+ const { params, runId, safeForkId, worktreePath } = recreateParams;
233
+ const { node, parent, checkpoint } = params;
234
+ await mkdir(path.dirname(worktreePath), { recursive: true });
235
+ const baseRef = await withHostWorktreeLock(parent.worktreePath, async () => {
236
+ await runGitCommand({
237
+ cwd: parent.worktreePath,
238
+ args: ['worktree', 'prune'],
239
+ allowNonZeroExit: true,
240
+ });
241
+ const pinnedResult = await runGitCommand({
242
+ cwd: parent.worktreePath,
243
+ args: [
244
+ 'rev-parse',
245
+ '--verify',
246
+ `refs/harness/completed/forks/${runId}/${safeForkId}`,
247
+ ],
248
+ allowNonZeroExit: true,
249
+ });
250
+ const resolvedBaseRef = pinnedResult.exitCode === 0 && pinnedResult.stdout.trim().length > 0
251
+ ? pinnedResult.stdout.trim()
252
+ : (parent.headRef ?? parent.baseRef);
253
+ await runGitCommand({
254
+ cwd: parent.worktreePath,
255
+ args: [
256
+ 'worktree',
257
+ 'add',
258
+ '--detach',
259
+ '--force',
260
+ worktreePath,
261
+ resolvedBaseRef,
262
+ ],
263
+ });
264
+ return resolvedBaseRef;
265
+ });
266
+ const gitDirResult = await runGitCommand({
267
+ cwd: worktreePath,
268
+ args: ['rev-parse', '--git-dir'],
269
+ });
270
+ const gitDirPath = path.resolve(worktreePath, gitDirResult.stdout.trim());
271
+ await cloneNodeModulesTree(parent.worktreePath, worktreePath, node.excludeFromCloneGlobs);
272
+ const emptyConflicts = Object.freeze({});
273
+ await writeHarnessMeta(gitDirPath, {
274
+ baseRef,
275
+ baseBranch: parent.baseBranch,
276
+ branchName: parent.branchName,
277
+ unresolvedConflictPaths: emptyConflicts,
278
+ });
279
+ const handle = {
280
+ worktreePath,
281
+ gitDirPath,
282
+ baseRef,
283
+ baseBranch: parent.baseBranch,
284
+ branchName: parent.branchName,
285
+ headRef: baseRef,
286
+ unresolvedConflictPaths: emptyConflicts,
287
+ };
288
+ if (checkpoint !== undefined) {
289
+ await gitCheckpointRestore(handle, checkpoint, resolveEffectiveCheckpointPolicy(node));
290
+ }
291
+ return handle;
292
+ }
293
+ /**
294
+ * Rebinds an existing child fork worktree at `<dir>/forks/<runId>/<forkId>` or recreates it from `checkpoint` if missing.
295
+ *
296
+ * Completes any interrupted `inFlightMerge` materialization and preserves uncommitted child edits across reboots.
297
+ *
298
+ * @param {ReattachChildWorktreeParams} params - Child worktree reattachment parameters.
299
+ *
300
+ * @returns {Promise<GitWorktreeHandle>} Reattached child `GitWorktreeHandle`.
301
+ */
302
+ export async function gitWorktreeReattachChild(params) {
303
+ const { parent, forkId } = params;
304
+ const parentDir = path.dirname(parent.worktreePath);
305
+ const isParentRoot = path.basename(parentDir) === 'roots';
306
+ const runId = isParentRoot
307
+ ? path.basename(parent.worktreePath)
308
+ : path.basename(parentDir);
309
+ const baseDir = isParentRoot
310
+ ? path.dirname(parentDir)
311
+ : path.dirname(path.dirname(parentDir));
312
+ const safeForkId = forkId.replace(/[^a-zA-Z0-9._-]/g, '_');
313
+ const worktreePath = path.join(baseDir, 'forks', runId, safeForkId);
314
+ const exists = await lstat(worktreePath).then(() => true, () => false);
315
+ if (exists)
316
+ return recoverInFlightWorktreeState(worktreePath);
317
+ return recreateMissingChildWorktree({
318
+ params,
319
+ runId,
320
+ safeForkId,
321
+ worktreePath,
322
+ });
323
+ }
324
+ //# sourceMappingURL=git-worktree-reattach.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-worktree-reattach.js","sourceRoot":"","sources":["../../../src/executors/internal/git-worktree-reattach.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import type { GitScopeReceipt, GitSyncReceipt, GitWorktreeHandle, ReconcileResult } from '@paraharness/core';
2
+ /**
3
+ * Rebases/merges uncommitted changes in `pausedChild` onto an updated `parent` worktree via `git merge-tree --write-tree`.
4
+ *
5
+ * Preserves dirty edits in `pausedChild` and records any conflicted paths in `pausedChild.unresolvedConflictPaths`.
6
+ *
7
+ * @param {GitWorktreeHandle} parent - Updated parent worktree handle.
8
+ * @param {GitWorktreeHandle} pausedChild - Suspended child worktree handle being synced.
9
+ * @param {readonly string[] | undefined} [excludeGlobs] - Optional glob patterns excluded from staging.
10
+ *
11
+ * @returns {Promise<ReconcileResult<GitSyncReceipt>>} Clean or conflicted synchronization receipt.
12
+ */
13
+ export declare function gitWorktreeSyncChild(parent: GitWorktreeHandle, pausedChild: GitWorktreeHandle, excludeGlobs?: readonly string[]): Promise<ReconcileResult<GitSyncReceipt>>;
14
+ /**
15
+ * Synchronizes `rootHandle` onto the tip prerequisite receipt in `prerequisiteReceipts` via `git merge-tree --write-tree`.
16
+ *
17
+ * Auto-flushes clean dirty edits on `rootHandle`, resolves stacked `baseBranch`, and materializes the 3-way merge.
18
+ *
19
+ * @param {GitWorktreeHandle} rootHandle - Task root worktree handle.
20
+ * @param {readonly GitScopeReceipt[]} prerequisiteReceipts - Terminal scope receipts of completed prerequisites.
21
+ * @param {readonly string[] | undefined} [excludeGlobs] - Optional glob patterns excluded from staging.
22
+ *
23
+ * @returns {Promise<ReconcileResult<GitSyncReceipt>>} Clean or conflicted synchronization receipt.
24
+ */
25
+ export declare function gitWorktreeSyncRoot(rootHandle: GitWorktreeHandle, prerequisiteReceipts: readonly GitScopeReceipt[], excludeGlobs?: readonly string[]): Promise<ReconcileResult<GitSyncReceipt>>;
26
+ //# sourceMappingURL=git-worktree-sync-child-and-root.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-worktree-sync-child-and-root.d.ts","sourceRoot":"","sources":["../../../src/executors/internal/git-worktree-sync-child-and-root.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,eAAe,EAChB,MAAM,mBAAmB,CAAC;AAW3B;;;;;;;;;;GAUG;AACH,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,iBAAiB,EACzB,WAAW,EAAE,iBAAiB,EAC9B,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,GAC/B,OAAO,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC,CAqB1C;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,mBAAmB,CACvC,UAAU,EAAE,iBAAiB,EAC7B,oBAAoB,EAAE,SAAS,eAAe,EAAE,EAChD,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,GAC/B,OAAO,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC,CA6B1C"}