dorfl 0.0.0 → 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 (619) hide show
  1. package/dist/advance-ci-template.d.ts +73 -0
  2. package/dist/advance-ci-template.d.ts.map +1 -0
  3. package/dist/advance-ci-template.js +104 -0
  4. package/dist/advance-ci-template.js.map +1 -0
  5. package/dist/advance-classify.d.ts +132 -0
  6. package/dist/advance-classify.d.ts.map +1 -0
  7. package/dist/advance-classify.js +120 -0
  8. package/dist/advance-classify.js.map +1 -0
  9. package/dist/advance-drivers.d.ts +182 -0
  10. package/dist/advance-drivers.d.ts.map +1 -0
  11. package/dist/advance-drivers.js +231 -0
  12. package/dist/advance-drivers.js.map +1 -0
  13. package/dist/advance-isolated.d.ts +156 -0
  14. package/dist/advance-isolated.d.ts.map +1 -0
  15. package/dist/advance-isolated.js +256 -0
  16. package/dist/advance-isolated.js.map +1 -0
  17. package/dist/advance-lifecycle-template.d.ts +107 -0
  18. package/dist/advance-lifecycle-template.d.ts.map +1 -0
  19. package/dist/advance-lifecycle-template.js +668 -0
  20. package/dist/advance-lifecycle-template.js.map +1 -0
  21. package/dist/advance-loop-driver.d.ts +325 -0
  22. package/dist/advance-loop-driver.d.ts.map +1 -0
  23. package/dist/advance-loop-driver.js +437 -0
  24. package/dist/advance-loop-driver.js.map +1 -0
  25. package/dist/advance-treeless-publish.d.ts +108 -0
  26. package/dist/advance-treeless-publish.d.ts.map +1 -0
  27. package/dist/advance-treeless-publish.js +71 -0
  28. package/dist/advance-treeless-publish.js.map +1 -0
  29. package/dist/advance.d.ts +340 -0
  30. package/dist/advance.d.ts.map +1 -0
  31. package/dist/advance.js +1122 -0
  32. package/dist/advance.js.map +1 -0
  33. package/dist/advancing-lock.d.ts +294 -0
  34. package/dist/advancing-lock.d.ts.map +1 -0
  35. package/dist/advancing-lock.js +594 -0
  36. package/dist/advancing-lock.js.map +1 -0
  37. package/dist/agent-launch.d.ts +79 -0
  38. package/dist/agent-launch.d.ts.map +1 -0
  39. package/dist/agent-launch.js +61 -0
  40. package/dist/agent-launch.js.map +1 -0
  41. package/dist/agent-stop.d.ts +149 -0
  42. package/dist/agent-stop.d.ts.map +1 -0
  43. package/dist/agent-stop.js +307 -0
  44. package/dist/agent-stop.js.map +1 -0
  45. package/dist/apply-decide.d.ts +127 -0
  46. package/dist/apply-decide.d.ts.map +1 -0
  47. package/dist/apply-decide.js +176 -0
  48. package/dist/apply-decide.js.map +1 -0
  49. package/dist/apply-merge-action.d.ts +206 -0
  50. package/dist/apply-merge-action.d.ts.map +1 -0
  51. package/dist/apply-merge-action.js +307 -0
  52. package/dist/apply-merge-action.js.map +1 -0
  53. package/dist/apply-persist.d.ts +174 -0
  54. package/dist/apply-persist.d.ts.map +1 -0
  55. package/dist/apply-persist.js +359 -0
  56. package/dist/apply-persist.js.map +1 -0
  57. package/dist/arbiter.d.ts +120 -0
  58. package/dist/arbiter.d.ts.map +1 -0
  59. package/dist/arbiter.js +255 -0
  60. package/dist/arbiter.js.map +1 -0
  61. package/dist/brand.d.ts +70 -0
  62. package/dist/brand.d.ts.map +1 -0
  63. package/dist/brand.js +84 -0
  64. package/dist/brand.js.map +1 -0
  65. package/dist/buildable-body.d.ts +132 -0
  66. package/dist/buildable-body.d.ts.map +1 -0
  67. package/dist/buildable-body.js +131 -0
  68. package/dist/buildable-body.js.map +1 -0
  69. package/dist/categorise.d.ts +66 -0
  70. package/dist/categorise.d.ts.map +1 -0
  71. package/dist/categorise.js +106 -0
  72. package/dist/categorise.js.map +1 -0
  73. package/dist/claim-cas.d.ts +117 -0
  74. package/dist/claim-cas.d.ts.map +1 -0
  75. package/dist/claim-cas.js +312 -0
  76. package/dist/claim-cas.js.map +1 -0
  77. package/dist/cli-spinner.d.ts +112 -0
  78. package/dist/cli-spinner.d.ts.map +1 -0
  79. package/dist/cli-spinner.js +157 -0
  80. package/dist/cli-spinner.js.map +1 -0
  81. package/dist/cli.d.ts +11 -0
  82. package/dist/cli.d.ts.map +1 -0
  83. package/dist/cli.js +3094 -0
  84. package/dist/cli.js.map +1 -0
  85. package/dist/close-job-template.d.ts +70 -0
  86. package/dist/close-job-template.d.ts.map +1 -0
  87. package/dist/close-job-template.js +180 -0
  88. package/dist/close-job-template.js.map +1 -0
  89. package/dist/close-job.d.ts +95 -0
  90. package/dist/close-job.d.ts.map +1 -0
  91. package/dist/close-job.js +226 -0
  92. package/dist/close-job.js.map +1 -0
  93. package/dist/complete.d.ts +361 -0
  94. package/dist/complete.d.ts.map +1 -0
  95. package/dist/complete.js +885 -0
  96. package/dist/complete.js.map +1 -0
  97. package/dist/concurrency.d.ts +68 -0
  98. package/dist/concurrency.d.ts.map +1 -0
  99. package/dist/concurrency.js +112 -0
  100. package/dist/concurrency.js.map +1 -0
  101. package/dist/config-override.d.ts +76 -0
  102. package/dist/config-override.d.ts.map +1 -0
  103. package/dist/config-override.js +50 -0
  104. package/dist/config-override.js.map +1 -0
  105. package/dist/config.d.ts +668 -0
  106. package/dist/config.d.ts.map +1 -0
  107. package/dist/config.js +241 -0
  108. package/dist/config.js.map +1 -0
  109. package/dist/continue-branch.d.ts +249 -0
  110. package/dist/continue-branch.d.ts.map +1 -0
  111. package/dist/continue-branch.js +389 -0
  112. package/dist/continue-branch.js.map +1 -0
  113. package/dist/cwd-section.d.ts +186 -0
  114. package/dist/cwd-section.d.ts.map +1 -0
  115. package/dist/cwd-section.js +209 -0
  116. package/dist/cwd-section.js.map +1 -0
  117. package/dist/decision-engine.d.ts +170 -0
  118. package/dist/decision-engine.d.ts.map +1 -0
  119. package/dist/decision-engine.js +136 -0
  120. package/dist/decision-engine.js.map +1 -0
  121. package/dist/detect.d.ts +17 -0
  122. package/dist/detect.d.ts.map +1 -0
  123. package/dist/detect.js +118 -0
  124. package/dist/detect.js.map +1 -0
  125. package/dist/do-autopick.d.ts +85 -0
  126. package/dist/do-autopick.d.ts.map +1 -0
  127. package/dist/do-autopick.js +112 -0
  128. package/dist/do-autopick.js.map +1 -0
  129. package/dist/do-config.d.ts +312 -0
  130. package/dist/do-config.d.ts.map +1 -0
  131. package/dist/do-config.js +358 -0
  132. package/dist/do-config.js.map +1 -0
  133. package/dist/do-remote-auto.d.ts +75 -0
  134. package/dist/do-remote-auto.d.ts.map +1 -0
  135. package/dist/do-remote-auto.js +111 -0
  136. package/dist/do-remote-auto.js.map +1 -0
  137. package/dist/do.d.ts +621 -0
  138. package/dist/do.d.ts.map +1 -0
  139. package/dist/do.js +1882 -0
  140. package/dist/do.js.map +1 -0
  141. package/dist/drop-source.d.ts +96 -0
  142. package/dist/drop-source.d.ts.map +1 -0
  143. package/dist/drop-source.js +91 -0
  144. package/dist/drop-source.js.map +1 -0
  145. package/dist/eligibility.d.ts +46 -0
  146. package/dist/eligibility.d.ts.map +1 -0
  147. package/dist/eligibility.js +34 -0
  148. package/dist/eligibility.js.map +1 -0
  149. package/dist/env-config.d.ts +51 -0
  150. package/dist/env-config.d.ts.map +1 -0
  151. package/dist/env-config.js +272 -0
  152. package/dist/env-config.js.map +1 -0
  153. package/dist/failure-cause.d.ts +70 -0
  154. package/dist/failure-cause.d.ts.map +1 -0
  155. package/dist/failure-cause.js +126 -0
  156. package/dist/failure-cause.js.map +1 -0
  157. package/dist/format.d.ts +43 -0
  158. package/dist/format.d.ts.map +1 -0
  159. package/dist/format.js +256 -0
  160. package/dist/format.js.map +1 -0
  161. package/dist/frontmatter.d.ts +215 -0
  162. package/dist/frontmatter.d.ts.map +1 -0
  163. package/dist/frontmatter.js +345 -0
  164. package/dist/frontmatter.js.map +1 -0
  165. package/dist/gate-readiness.d.ts +84 -0
  166. package/dist/gate-readiness.d.ts.map +1 -0
  167. package/dist/gate-readiness.js +103 -0
  168. package/dist/gate-readiness.js.map +1 -0
  169. package/dist/gc.d.ts +165 -0
  170. package/dist/gc.d.ts.map +1 -0
  171. package/dist/gc.js +313 -0
  172. package/dist/gc.js.map +1 -0
  173. package/dist/gh-failure.d.ts +42 -0
  174. package/dist/gh-failure.d.ts.map +1 -0
  175. package/dist/gh-failure.js +49 -0
  176. package/dist/gh-failure.js.map +1 -0
  177. package/dist/git.d.ts +75 -0
  178. package/dist/git.d.ts.map +1 -0
  179. package/dist/git.js +130 -0
  180. package/dist/git.js.map +1 -0
  181. package/dist/github.d.ts +187 -0
  182. package/dist/github.d.ts.map +1 -0
  183. package/dist/github.js +343 -0
  184. package/dist/github.js.map +1 -0
  185. package/dist/harness.d.ts +242 -0
  186. package/dist/harness.d.ts.map +1 -0
  187. package/dist/harness.js +157 -0
  188. package/dist/harness.js.map +1 -0
  189. package/dist/identity.d.ts +167 -0
  190. package/dist/identity.d.ts.map +1 -0
  191. package/dist/identity.js +231 -0
  192. package/dist/identity.js.map +1 -0
  193. package/dist/index.d.ts +147 -0
  194. package/dist/index.d.ts.map +1 -0
  195. package/dist/index.js +76 -0
  196. package/dist/index.js.map +1 -0
  197. package/dist/install-ci-branch-protection.d.ts +147 -0
  198. package/dist/install-ci-branch-protection.d.ts.map +1 -0
  199. package/dist/install-ci-branch-protection.js +166 -0
  200. package/dist/install-ci-branch-protection.js.map +1 -0
  201. package/dist/install-ci-capabilities/advance-lifecycle.d.ts +15 -0
  202. package/dist/install-ci-capabilities/advance-lifecycle.d.ts.map +1 -0
  203. package/dist/install-ci-capabilities/advance-lifecycle.js +28 -0
  204. package/dist/install-ci-capabilities/advance-lifecycle.js.map +1 -0
  205. package/dist/install-ci-capabilities/close-job.d.ts +13 -0
  206. package/dist/install-ci-capabilities/close-job.d.ts.map +1 -0
  207. package/dist/install-ci-capabilities/close-job.js +26 -0
  208. package/dist/install-ci-capabilities/close-job.js.map +1 -0
  209. package/dist/install-ci-capabilities/example-noop.d.ts +16 -0
  210. package/dist/install-ci-capabilities/example-noop.d.ts.map +1 -0
  211. package/dist/install-ci-capabilities/example-noop.js +23 -0
  212. package/dist/install-ci-capabilities/example-noop.js.map +1 -0
  213. package/dist/install-ci-capabilities/intake.d.ts +15 -0
  214. package/dist/install-ci-capabilities/intake.d.ts.map +1 -0
  215. package/dist/install-ci-capabilities/intake.js +28 -0
  216. package/dist/install-ci-capabilities/intake.js.map +1 -0
  217. package/dist/install-ci-capabilities/verify.d.ts +14 -0
  218. package/dist/install-ci-capabilities/verify.d.ts.map +1 -0
  219. package/dist/install-ci-capabilities/verify.js +27 -0
  220. package/dist/install-ci-capabilities/verify.js.map +1 -0
  221. package/dist/install-ci-core.d.ts +446 -0
  222. package/dist/install-ci-core.d.ts.map +1 -0
  223. package/dist/install-ci-core.js +760 -0
  224. package/dist/install-ci-core.js.map +1 -0
  225. package/dist/install-ci-github.d.ts +167 -0
  226. package/dist/install-ci-github.d.ts.map +1 -0
  227. package/dist/install-ci-github.js +315 -0
  228. package/dist/install-ci-github.js.map +1 -0
  229. package/dist/install-ci.d.ts +105 -0
  230. package/dist/install-ci.d.ts.map +1 -0
  231. package/dist/install-ci.js +363 -0
  232. package/dist/install-ci.js.map +1 -0
  233. package/dist/intake-event.d.ts +88 -0
  234. package/dist/intake-event.d.ts.map +1 -0
  235. package/dist/intake-event.js +66 -0
  236. package/dist/intake-event.js.map +1 -0
  237. package/dist/intake-marker.d.ts +95 -0
  238. package/dist/intake-marker.d.ts.map +1 -0
  239. package/dist/intake-marker.js +127 -0
  240. package/dist/intake-marker.js.map +1 -0
  241. package/dist/intake-triage.d.ts +48 -0
  242. package/dist/intake-triage.d.ts.map +1 -0
  243. package/dist/intake-triage.js +95 -0
  244. package/dist/intake-triage.js.map +1 -0
  245. package/dist/intake-trigger-template.d.ts +185 -0
  246. package/dist/intake-trigger-template.d.ts.map +1 -0
  247. package/dist/intake-trigger-template.js +449 -0
  248. package/dist/intake-trigger-template.js.map +1 -0
  249. package/dist/intake.d.ts +569 -0
  250. package/dist/intake.d.ts.map +1 -0
  251. package/dist/intake.js +1628 -0
  252. package/dist/intake.js.map +1 -0
  253. package/dist/integration-core.d.ts +539 -0
  254. package/dist/integration-core.d.ts.map +1 -0
  255. package/dist/integration-core.js +2195 -0
  256. package/dist/integration-core.js.map +1 -0
  257. package/dist/integrator.d.ts +343 -0
  258. package/dist/integrator.d.ts.map +1 -0
  259. package/dist/integrator.js +400 -0
  260. package/dist/integrator.js.map +1 -0
  261. package/dist/isolation.d.ts +219 -0
  262. package/dist/isolation.d.ts.map +1 -0
  263. package/dist/isolation.js +261 -0
  264. package/dist/isolation.js.map +1 -0
  265. package/dist/issue-provider.d.ts +349 -0
  266. package/dist/issue-provider.d.ts.map +1 -0
  267. package/dist/issue-provider.js +360 -0
  268. package/dist/issue-provider.js.map +1 -0
  269. package/dist/item-lock.d.ts +626 -0
  270. package/dist/item-lock.d.ts.map +1 -0
  271. package/dist/item-lock.js +1381 -0
  272. package/dist/item-lock.js.map +1 -0
  273. package/dist/item-path.d.ts +49 -0
  274. package/dist/item-path.d.ts.map +1 -0
  275. package/dist/item-path.js +66 -0
  276. package/dist/item-path.js.map +1 -0
  277. package/dist/ledger-lint.d.ts +129 -0
  278. package/dist/ledger-lint.d.ts.map +1 -0
  279. package/dist/ledger-lint.js +249 -0
  280. package/dist/ledger-lint.js.map +1 -0
  281. package/dist/ledger-read.d.ts +357 -0
  282. package/dist/ledger-read.d.ts.map +1 -0
  283. package/dist/ledger-read.js +442 -0
  284. package/dist/ledger-read.js.map +1 -0
  285. package/dist/ledger-write.d.ts +330 -0
  286. package/dist/ledger-write.d.ts.map +1 -0
  287. package/dist/ledger-write.js +411 -0
  288. package/dist/ledger-write.js.map +1 -0
  289. package/dist/lifecycle-gather.d.ts +30 -0
  290. package/dist/lifecycle-gather.d.ts.map +1 -0
  291. package/dist/lifecycle-gather.js +205 -0
  292. package/dist/lifecycle-gather.js.map +1 -0
  293. package/dist/lifecycle-pools.d.ts +180 -0
  294. package/dist/lifecycle-pools.d.ts.map +1 -0
  295. package/dist/lifecycle-pools.js +78 -0
  296. package/dist/lifecycle-pools.js.map +1 -0
  297. package/dist/merge-question-surfacer.d.ts +166 -0
  298. package/dist/merge-question-surfacer.d.ts.map +1 -0
  299. package/dist/merge-question-surfacer.js +297 -0
  300. package/dist/merge-question-surfacer.js.map +1 -0
  301. package/dist/mint-adr.d.ts +126 -0
  302. package/dist/mint-adr.d.ts.map +1 -0
  303. package/dist/mint-adr.js +257 -0
  304. package/dist/mint-adr.js.map +1 -0
  305. package/dist/mirror-pool-scan.d.ts +125 -0
  306. package/dist/mirror-pool-scan.d.ts.map +1 -0
  307. package/dist/mirror-pool-scan.js +104 -0
  308. package/dist/mirror-pool-scan.js.map +1 -0
  309. package/dist/needs-attention.d.ts +341 -0
  310. package/dist/needs-attention.d.ts.map +1 -0
  311. package/dist/needs-attention.js +900 -0
  312. package/dist/needs-attention.js.map +1 -0
  313. package/dist/orphan-sidecar.d.ts +79 -0
  314. package/dist/orphan-sidecar.d.ts.map +1 -0
  315. package/dist/orphan-sidecar.js +71 -0
  316. package/dist/orphan-sidecar.js.map +1 -0
  317. package/dist/output.d.ts +48 -0
  318. package/dist/output.d.ts.map +1 -0
  319. package/dist/output.js +66 -0
  320. package/dist/output.js.map +1 -0
  321. package/dist/pi-harness.d.ts +179 -0
  322. package/dist/pi-harness.d.ts.map +1 -0
  323. package/dist/pi-harness.js +342 -0
  324. package/dist/pi-harness.js.map +1 -0
  325. package/dist/placement.d.ts +99 -0
  326. package/dist/placement.d.ts.map +1 -0
  327. package/dist/placement.js +67 -0
  328. package/dist/placement.js.map +1 -0
  329. package/dist/prd-to-spec.d.ts +315 -0
  330. package/dist/prd-to-spec.d.ts.map +1 -0
  331. package/dist/prd-to-spec.js +684 -0
  332. package/dist/prd-to-spec.js.map +1 -0
  333. package/dist/prepare.d.ts +121 -0
  334. package/dist/prepare.d.ts.map +1 -0
  335. package/dist/prepare.js +140 -0
  336. package/dist/prepare.js.map +1 -0
  337. package/dist/prompt.d.ts +360 -0
  338. package/dist/prompt.d.ts.map +1 -0
  339. package/dist/prompt.js +499 -0
  340. package/dist/prompt.js.map +1 -0
  341. package/dist/protocol/ADR-FORMAT.md +47 -0
  342. package/dist/protocol/CLAIM-PROTOCOL.md +217 -0
  343. package/dist/protocol/REVIEW-PROTOCOL.md +119 -0
  344. package/dist/protocol/SURFACE-PROTOCOL.md +121 -0
  345. package/dist/protocol/TASKING-PROTOCOL.md +122 -0
  346. package/dist/protocol/WORK-CONTRACT.md +276 -0
  347. package/dist/protocol/spec-template.md +71 -0
  348. package/dist/protocol/task-template.md +65 -0
  349. package/dist/readiness.d.ts +66 -0
  350. package/dist/readiness.d.ts.map +1 -0
  351. package/dist/readiness.js +36 -0
  352. package/dist/readiness.js.map +1 -0
  353. package/dist/reap-branches.d.ts +102 -0
  354. package/dist/reap-branches.d.ts.map +1 -0
  355. package/dist/reap-branches.js +149 -0
  356. package/dist/reap-branches.js.map +1 -0
  357. package/dist/recover-isolated.d.ts +72 -0
  358. package/dist/recover-isolated.d.ts.map +1 -0
  359. package/dist/recover-isolated.js +188 -0
  360. package/dist/recover-isolated.js.map +1 -0
  361. package/dist/registry.d.ts +172 -0
  362. package/dist/registry.d.ts.map +1 -0
  363. package/dist/registry.js +296 -0
  364. package/dist/registry.js.map +1 -0
  365. package/dist/repo-config.d.ts +201 -0
  366. package/dist/repo-config.d.ts.map +1 -0
  367. package/dist/repo-config.js +414 -0
  368. package/dist/repo-config.js.map +1 -0
  369. package/dist/repo-key.d.ts +20 -0
  370. package/dist/repo-key.d.ts.map +1 -0
  371. package/dist/repo-key.js +68 -0
  372. package/dist/repo-key.js.map +1 -0
  373. package/dist/repo-mirror.d.ts +177 -0
  374. package/dist/repo-mirror.d.ts.map +1 -0
  375. package/dist/repo-mirror.js +271 -0
  376. package/dist/repo-mirror.js.map +1 -0
  377. package/dist/retry-backoff.d.ts +90 -0
  378. package/dist/retry-backoff.d.ts.map +1 -0
  379. package/dist/retry-backoff.js +98 -0
  380. package/dist/retry-backoff.js.map +1 -0
  381. package/dist/review-gate.d.ts +173 -0
  382. package/dist/review-gate.d.ts.map +1 -0
  383. package/dist/review-gate.js +261 -0
  384. package/dist/review-gate.js.map +1 -0
  385. package/dist/review-verdict.d.ts +149 -0
  386. package/dist/review-verdict.d.ts.map +1 -0
  387. package/dist/review-verdict.js +332 -0
  388. package/dist/review-verdict.js.map +1 -0
  389. package/dist/run.d.ts +221 -0
  390. package/dist/run.d.ts.map +1 -0
  391. package/dist/run.js +963 -0
  392. package/dist/run.js.map +1 -0
  393. package/dist/scan.d.ts +308 -0
  394. package/dist/scan.d.ts.map +1 -0
  395. package/dist/scan.js +374 -0
  396. package/dist/scan.js.map +1 -0
  397. package/dist/select-order.d.ts +75 -0
  398. package/dist/select-order.d.ts.map +1 -0
  399. package/dist/select-order.js +108 -0
  400. package/dist/select-order.js.map +1 -0
  401. package/dist/select-priority.d.ts +188 -0
  402. package/dist/select-priority.d.ts.map +1 -0
  403. package/dist/select-priority.js +80 -0
  404. package/dist/select-priority.js.map +1 -0
  405. package/dist/select.d.ts +25 -0
  406. package/dist/select.d.ts.map +1 -0
  407. package/dist/select.js +43 -0
  408. package/dist/select.js.map +1 -0
  409. package/dist/session-path.d.ts +36 -0
  410. package/dist/session-path.d.ts.map +1 -0
  411. package/dist/session-path.js +129 -0
  412. package/dist/session-path.js.map +1 -0
  413. package/dist/sidecar-apply.d.ts +83 -0
  414. package/dist/sidecar-apply.d.ts.map +1 -0
  415. package/dist/sidecar-apply.js +111 -0
  416. package/dist/sidecar-apply.js.map +1 -0
  417. package/dist/sidecar.d.ts +245 -0
  418. package/dist/sidecar.d.ts.map +1 -0
  419. package/dist/sidecar.js +481 -0
  420. package/dist/sidecar.js.map +1 -0
  421. package/dist/slug-namespace.d.ts +204 -0
  422. package/dist/slug-namespace.d.ts.map +1 -0
  423. package/dist/slug-namespace.js +229 -0
  424. package/dist/slug-namespace.js.map +1 -0
  425. package/dist/spec-complete.d.ts +44 -0
  426. package/dist/spec-complete.d.ts.map +1 -0
  427. package/dist/spec-complete.js +69 -0
  428. package/dist/spec-complete.js.map +1 -0
  429. package/dist/start.d.ts +97 -0
  430. package/dist/start.d.ts.map +1 -0
  431. package/dist/start.js +633 -0
  432. package/dist/start.js.map +1 -0
  433. package/dist/status.d.ts +199 -0
  434. package/dist/status.d.ts.map +1 -0
  435. package/dist/status.js +228 -0
  436. package/dist/status.js.map +1 -0
  437. package/dist/surface-gate.d.ts +162 -0
  438. package/dist/surface-gate.d.ts.map +1 -0
  439. package/dist/surface-gate.js +206 -0
  440. package/dist/surface-gate.js.map +1 -0
  441. package/dist/surface-persist.d.ts +86 -0
  442. package/dist/surface-persist.d.ts.map +1 -0
  443. package/dist/surface-persist.js +129 -0
  444. package/dist/surface-persist.js.map +1 -0
  445. package/dist/tasker-review-loop.d.ts +249 -0
  446. package/dist/tasker-review-loop.d.ts.map +1 -0
  447. package/dist/tasker-review-loop.js +369 -0
  448. package/dist/tasker-review-loop.js.map +1 -0
  449. package/dist/tasking-eligibility.d.ts +74 -0
  450. package/dist/tasking-eligibility.d.ts.map +1 -0
  451. package/dist/tasking-eligibility.js +52 -0
  452. package/dist/tasking-eligibility.js.map +1 -0
  453. package/dist/tasking-lock.d.ts +111 -0
  454. package/dist/tasking-lock.d.ts.map +1 -0
  455. package/dist/tasking-lock.js +256 -0
  456. package/dist/tasking-lock.js.map +1 -0
  457. package/dist/tasking.d.ts +275 -0
  458. package/dist/tasking.d.ts.map +1 -0
  459. package/dist/tasking.js +952 -0
  460. package/dist/tasking.js.map +1 -0
  461. package/dist/triage-gate.d.ts +127 -0
  462. package/dist/triage-gate.d.ts.map +1 -0
  463. package/dist/triage-gate.js +139 -0
  464. package/dist/triage-gate.js.map +1 -0
  465. package/dist/triage-persist.d.ts +163 -0
  466. package/dist/triage-persist.d.ts.map +1 -0
  467. package/dist/triage-persist.js +387 -0
  468. package/dist/triage-persist.js.map +1 -0
  469. package/dist/verdict-json.d.ts +32 -0
  470. package/dist/verdict-json.d.ts.map +1 -0
  471. package/dist/verdict-json.js +74 -0
  472. package/dist/verdict-json.js.map +1 -0
  473. package/dist/verify-workflow-template.d.ts +60 -0
  474. package/dist/verify-workflow-template.d.ts.map +1 -0
  475. package/dist/verify-workflow-template.js +126 -0
  476. package/dist/verify-workflow-template.js.map +1 -0
  477. package/dist/verify.d.ts +60 -0
  478. package/dist/verify.d.ts.map +1 -0
  479. package/dist/verify.js +62 -0
  480. package/dist/verify.js.map +1 -0
  481. package/dist/watch-session.d.ts +112 -0
  482. package/dist/watch-session.d.ts.map +1 -0
  483. package/dist/watch-session.js +347 -0
  484. package/dist/watch-session.js.map +1 -0
  485. package/dist/work-layout.d.ts +198 -0
  486. package/dist/work-layout.d.ts.map +1 -0
  487. package/dist/work-layout.js +217 -0
  488. package/dist/work-layout.js.map +1 -0
  489. package/dist/work-on.d.ts +154 -0
  490. package/dist/work-on.d.ts.map +1 -0
  491. package/dist/work-on.js +387 -0
  492. package/dist/work-on.js.map +1 -0
  493. package/dist/workspace.d.ts +224 -0
  494. package/dist/workspace.d.ts.map +1 -0
  495. package/dist/workspace.js +325 -0
  496. package/dist/workspace.js.map +1 -0
  497. package/package.json +46 -2
  498. package/src/advance-ci-template.ts +203 -0
  499. package/src/advance-classify.ts +197 -0
  500. package/src/advance-drivers.ts +414 -0
  501. package/src/advance-isolated.ts +432 -0
  502. package/src/advance-lifecycle-template.ts +791 -0
  503. package/src/advance-loop-driver.ts +745 -0
  504. package/src/advance-treeless-publish.ts +177 -0
  505. package/src/advance.ts +1564 -0
  506. package/src/advancing-lock.ts +988 -0
  507. package/src/agent-launch.ts +137 -0
  508. package/src/agent-stop.ts +361 -0
  509. package/src/apply-decide.ts +242 -0
  510. package/src/apply-merge-action.ts +502 -0
  511. package/src/apply-persist.ts +518 -0
  512. package/src/arbiter.ts +372 -0
  513. package/src/brand.ts +111 -0
  514. package/src/buildable-body.ts +196 -0
  515. package/src/categorise.ts +158 -0
  516. package/src/claim-cas.ts +513 -0
  517. package/src/cli-spinner.ts +225 -0
  518. package/src/cli.ts +4369 -0
  519. package/src/close-job-template.ts +236 -0
  520. package/src/close-job.ts +319 -0
  521. package/src/complete.ts +1379 -0
  522. package/src/concurrency.ts +151 -0
  523. package/src/config-override.ts +116 -0
  524. package/src/config.ts +883 -0
  525. package/src/continue-branch.ts +542 -0
  526. package/src/cwd-section.ts +392 -0
  527. package/src/decision-engine.ts +272 -0
  528. package/src/detect.ts +124 -0
  529. package/src/do-autopick.ts +223 -0
  530. package/src/do-config.ts +589 -0
  531. package/src/do-remote-auto.ts +197 -0
  532. package/src/do.ts +2623 -0
  533. package/src/drop-source.ts +194 -0
  534. package/src/eligibility.ts +79 -0
  535. package/src/env-config.ts +305 -0
  536. package/src/failure-cause.ts +142 -0
  537. package/src/format.ts +313 -0
  538. package/src/frontmatter.ts +485 -0
  539. package/src/gate-readiness.ts +147 -0
  540. package/src/gc.ts +510 -0
  541. package/src/gh-failure.ts +53 -0
  542. package/src/git.ts +186 -0
  543. package/src/github.ts +468 -0
  544. package/src/harness.ts +355 -0
  545. package/src/identity.ts +322 -0
  546. package/src/index.ts +785 -0
  547. package/src/install-ci-branch-protection.ts +255 -0
  548. package/src/install-ci-capabilities/advance-lifecycle.ts +34 -0
  549. package/src/install-ci-capabilities/close-job.ts +32 -0
  550. package/src/install-ci-capabilities/example-noop.ts +24 -0
  551. package/src/install-ci-capabilities/intake.ts +34 -0
  552. package/src/install-ci-capabilities/verify.ts +33 -0
  553. package/src/install-ci-core.ts +1088 -0
  554. package/src/install-ci-github.ts +376 -0
  555. package/src/install-ci.ts +552 -0
  556. package/src/intake-event.ts +102 -0
  557. package/src/intake-marker.ts +195 -0
  558. package/src/intake-triage.ts +138 -0
  559. package/src/intake-trigger-template.ts +591 -0
  560. package/src/intake.ts +2445 -0
  561. package/src/integration-core.ts +3065 -0
  562. package/src/integrator.ts +771 -0
  563. package/src/isolation.ts +484 -0
  564. package/src/issue-provider.ts +733 -0
  565. package/src/item-lock.ts +1858 -0
  566. package/src/item-path.ts +75 -0
  567. package/src/ledger-lint.ts +332 -0
  568. package/src/ledger-read.ts +924 -0
  569. package/src/ledger-write.ts +865 -0
  570. package/src/lifecycle-gather.ts +298 -0
  571. package/src/lifecycle-pools.ts +250 -0
  572. package/src/merge-question-surfacer.ts +496 -0
  573. package/src/mint-adr.ts +362 -0
  574. package/src/mirror-pool-scan.ts +240 -0
  575. package/src/needs-attention.ts +1506 -0
  576. package/src/orphan-sidecar.ts +150 -0
  577. package/src/output.ts +89 -0
  578. package/src/pi-harness.ts +403 -0
  579. package/src/placement.ts +131 -0
  580. package/src/prd-to-spec.ts +1023 -0
  581. package/src/prepare.ts +230 -0
  582. package/src/prompt.ts +760 -0
  583. package/src/readiness.ts +98 -0
  584. package/src/reap-branches.ts +278 -0
  585. package/src/recover-isolated.ts +276 -0
  586. package/src/registry.ts +475 -0
  587. package/src/repo-config.ts +550 -0
  588. package/src/repo-key.ts +74 -0
  589. package/src/repo-mirror.ts +367 -0
  590. package/src/retry-backoff.ts +130 -0
  591. package/src/review-gate.ts +389 -0
  592. package/src/review-verdict.ts +422 -0
  593. package/src/run.ts +1430 -0
  594. package/src/scan.ts +611 -0
  595. package/src/select-order.ts +143 -0
  596. package/src/select-priority.ts +266 -0
  597. package/src/select.ts +62 -0
  598. package/src/session-path.ts +153 -0
  599. package/src/sidecar-apply.ts +216 -0
  600. package/src/sidecar.ts +700 -0
  601. package/src/slug-namespace.ts +367 -0
  602. package/src/spec-complete.ts +118 -0
  603. package/src/start.ts +974 -0
  604. package/src/status.ts +441 -0
  605. package/src/surface-gate.ts +337 -0
  606. package/src/surface-persist.ts +241 -0
  607. package/src/tasker-review-loop.ts +671 -0
  608. package/src/tasking-eligibility.ts +114 -0
  609. package/src/tasking-lock.ts +416 -0
  610. package/src/tasking.ts +1438 -0
  611. package/src/triage-gate.ts +248 -0
  612. package/src/triage-persist.ts +570 -0
  613. package/src/verdict-json.ts +73 -0
  614. package/src/verify-workflow-template.ts +159 -0
  615. package/src/verify.ts +123 -0
  616. package/src/watch-session.ts +397 -0
  617. package/src/work-layout.ts +262 -0
  618. package/src/work-on.ts +660 -0
  619. package/src/workspace.ts +502 -0
@@ -0,0 +1,400 @@
1
+ import { git, run } from './git.js';
2
+ import { isAncestor } from './gc.js';
3
+ import { pushProposeBranchWithStaleLeaseRetry } from './continue-branch.js';
4
+ /**
5
+ * The graceful-degradation provider (ADR §6): it opens NO review request (there
6
+ * is no API — e.g. a local `--bare` arbiter) and instead tells the human to open
7
+ * one manually. The branch is already pushed, so the work is safe regardless.
8
+ */
9
+ export class NoneProvider {
10
+ name = 'none';
11
+ async openRequest(input) {
12
+ return {
13
+ opened: false,
14
+ instruction: `Pushed ${input.branch} to ${input.arbiter}. Open a review request ` +
15
+ 'manually to land it on main (no review provider configured).' +
16
+ manualRequestText(input),
17
+ };
18
+ }
19
+ /**
20
+ * No API to post a comment (a local `--bare` arbiter has no review concept), so
21
+ * DEGRADE: surface the review text in the result instead of throwing — the
22
+ * verdict stays in the run output, never lost (ADR §6). The caller treats this
23
+ * as a clean no-op for the PR (nothing was posted).
24
+ */
25
+ postPRComment(input) {
26
+ return {
27
+ posted: false,
28
+ instruction: 'No review provider configured — the review was not posted as a PR ' +
29
+ `comment. The review:\n${input.body}`,
30
+ };
31
+ }
32
+ /**
33
+ * No API to resolve a PR from a branch (a local `--bare` arbiter has no review
34
+ * concept), so DEGRADE exactly like {@link postPRComment}: surface the review
35
+ * text, post nothing, never throw. A clean no-op for the PR.
36
+ */
37
+ postPRCommentOnBranch(input) {
38
+ return {
39
+ posted: false,
40
+ instruction: 'No review provider configured — the review was not posted as a PR ' +
41
+ `comment. The review:\n${input.body}`,
42
+ };
43
+ }
44
+ }
45
+ export class Integrator {
46
+ provider;
47
+ constructor(options = {}) {
48
+ this.provider = options.provider ?? new NoneProvider();
49
+ }
50
+ /**
51
+ * Integrate WITHOUT rebasing (assumes the caller already rebased, or the
52
+ * branch is known up-to-date). `merge` pushes the branch to `main` (plain,
53
+ * non-force push); `propose` pushes the branch under its own ref + asks the
54
+ * provider to request review. NEVER `--force` (and NEVER force-touches main).
55
+ */
56
+ async integrate(input) {
57
+ if (input.mode === 'merge') {
58
+ // Race-1 (claim-vs-integrate): push `${branch}:main` ONCE. On a
59
+ // non-fast-forward rejection (a sibling same-repo claim/integrate advanced
60
+ // `<arbiter>/main` during our push window) report it so the integration-core
61
+ // step-4 tail re-rebases (with its sibling-ledger reconcile) + retries the
62
+ // push. We never rebase here (that would miss the ledger reconcile arms) and
63
+ // never `--force` main.
64
+ const pushed = mergePushOnce(input);
65
+ if (pushed.kind === 'non-fast-forward') {
66
+ // Signal the caller to re-rebase via step-4 and call integrate again.
67
+ return {
68
+ mode: 'merge',
69
+ mergedToMain: false,
70
+ pushedRef: 'main',
71
+ provider: 'none',
72
+ requestOpened: false,
73
+ mergeNonFastForward: true,
74
+ };
75
+ }
76
+ // Capture the SHA that LANDED on `main` — the work branch's tip is exactly
77
+ // what `${branch}:main` pushed (additive `commit?`, the merge-mode twin of
78
+ // propose's `url`). Best-effort: a failed read leaves `commit` absent, so a
79
+ // caller that links it (intake) simply omits the link rather than throwing.
80
+ const commit = resolveBranchTip(input);
81
+ // Part (b): reap the remote head INLINE now the merge has landed. The work
82
+ // is on `main` (we just pushed it there), so the head is provably merged and
83
+ // safe to delete — the exact merge moment, no sweep needed. Idempotent +
84
+ // best-effort: a no-remote-head merge (the common `${branch}:main` push) is a
85
+ // clean no-op. NEVER `--force`. Gated by `deleteMergedHead` so the bare
86
+ // `integrate` callers / tests are unchanged.
87
+ if (input.deleteMergedHead === true) {
88
+ deleteMergedHeadBranch(input);
89
+ }
90
+ return {
91
+ mode: 'merge',
92
+ mergedToMain: true,
93
+ pushedRef: 'main',
94
+ provider: 'none',
95
+ requestOpened: false,
96
+ ...(commit !== undefined ? { commit } : {}),
97
+ };
98
+ }
99
+ // propose: push the branch under its own name (the safety-bearing step),
100
+ // THEN ask the provider to request review. Reconcile with --force-with-lease
101
+ // on the WORK BRANCH ONLY (§11: a work branch is unshared) so a RECOVERY
102
+ // complete — which rebases the kept branch onto fresh `main` (a PLAIN rebase
103
+ // after the per-item-lock cut-over: no transient status lands on a branch, so
104
+ // there is nothing to drop) and so REWRITES the tip vs an already-pushed
105
+ // `work/<slug>` (the bounce now pushes it via the seam) — lands cleanly
106
+ // instead of failing non-fast-forward. The lease guards the CAS; this
107
+ // is NEVER a plain `--force`, and NEVER touches main.
108
+ //
109
+ // STALE-LEASE SURVIVAL + BENIGN ALREADY-LANDED (task `propose-push-
110
+ // survives-stale-lease-on-reaped-work-ref`): route through the propose
111
+ // stale-lease retry helper (the sibling of
112
+ // `pushContinuedBranchWithStaleLeaseRetry`, sharing its `stale info`
113
+ // detection + bounded retry, with the propose-specific addition of the
114
+ // gone-ref + ancestor-of-`<arbiter>/main` = BENIGN already-landed predicate
115
+ // — mirroring `deleteMergedHeadBranch`'s ancestor guard + the leased-delete
116
+ // `already-reaped` precedent). Survives a `stale info` rejection when the
117
+ // arbiter's view of the unshared work ref moved under us (re-leases against
118
+ // the freshly-observed tip); reports `alreadyLanded` (no PR re-open against
119
+ // a vanished ref) when the work already landed via a sibling's merge +
120
+ // reap; SURFACES every non-stale failure (connectivity, protected ref,
121
+ // auth) and a non-provably-landed stale-info-after-cap as a terminal throw.
122
+ // For a first-time propose (no remote ref yet) the helper's create-only
123
+ // empty-expected lease shape (`<branch>:`) accepts the new ref unchanged.
124
+ const proposePush = pushProposeBranchWithStaleLeaseRetry({
125
+ cwd: input.cwd,
126
+ branch: input.branch,
127
+ arbiter: input.arbiter,
128
+ env: input.env,
129
+ });
130
+ if (proposePush.kind === 'already-landed') {
131
+ // BENIGN already-landed: the work is provably on `<arbiter>/main` and the
132
+ // head was reaped. Do NOT call the provider — there is no ref to open a
133
+ // review request against, and asking the provider to open a PR for
134
+ // landed work would be a confusing no-op. Distinct from a real failure:
135
+ // `alreadyLanded: true`, no throw, no PR.
136
+ return {
137
+ mode: 'propose',
138
+ mergedToMain: false,
139
+ pushedRef: input.branch,
140
+ provider: 'none',
141
+ requestOpened: false,
142
+ alreadyLanded: true,
143
+ instruction: `${input.branch}: the work is already on ${input.arbiter}/main ` +
144
+ 'and its remote head was reaped — nothing to propose (clean no-op).',
145
+ };
146
+ }
147
+ // PR-INTENT (`noPR: true`): the branch is now pushed (safe) — deliberately do
148
+ // NOT open a review request (the explicit suppress-PR intent). No warning: the
149
+ // no-PR outcome is intended, not a degrade. The provider is reported as `none`
150
+ // (no request opened), exactly as a push-only propose surfaces.
151
+ if (input.noPR === true) {
152
+ return {
153
+ mode: 'propose',
154
+ mergedToMain: false,
155
+ pushedRef: input.branch,
156
+ provider: 'none',
157
+ requestOpened: false,
158
+ instruction: `Pushed ${input.branch} to ${input.arbiter}. No PR was opened ` +
159
+ '(noPR is set — the suppress-PR intent).',
160
+ };
161
+ }
162
+ const review = await this.provider.openRequest({
163
+ cwd: input.cwd,
164
+ branch: input.branch,
165
+ arbiter: input.arbiter,
166
+ title: input.title,
167
+ body: input.body,
168
+ env: input.env,
169
+ backoff: input.backoff,
170
+ sleep: input.sleep,
171
+ });
172
+ return {
173
+ mode: 'propose',
174
+ mergedToMain: false,
175
+ pushedRef: input.branch,
176
+ provider: this.provider.name,
177
+ requestOpened: review.opened,
178
+ instruction: review.instruction,
179
+ url: review.url,
180
+ };
181
+ }
182
+ /**
183
+ * Rebase-before-integrate (ADR §10): fetch + rebase the branch onto the latest
184
+ * `<arbiter>/main`. Clean → integrate. Conflict → the rebase is already
185
+ * aborted by `rebaseOntoArbiterMain`; we return `needs-attention` (NEVER
186
+ * auto-resolve, NEVER push a half-merged tree).
187
+ */
188
+ async integrateWithRebase(input) {
189
+ const rebase = rebaseOntoArbiterMain({
190
+ cwd: input.cwd,
191
+ arbiter: input.arbiter,
192
+ branch: input.branch,
193
+ env: input.env,
194
+ });
195
+ if (!rebase.clean) {
196
+ return {
197
+ outcome: 'needs-attention',
198
+ reason: `Rebasing ${input.branch} onto ${input.arbiter}/main conflicted; ` +
199
+ 'the rebase was aborted (never auto-resolved). A human must resolve ' +
200
+ 'against the latest main, then re-integrate.',
201
+ };
202
+ }
203
+ return { outcome: 'integrated', integration: await this.integrate(input) };
204
+ }
205
+ }
206
+ /**
207
+ * Deterministically rebase `branch` onto the freshly-fetched `<arbiter>/main`
208
+ * (ADR §10). A clean rebase leaves the branch on top of main. A conflicting
209
+ * rebase is `git rebase --abort`ed (restoring the pre-rebase state) and reported
210
+ * as `conflicted` — we NEVER pick `--ours`/`--theirs` or any heuristic
211
+ * (resolution requires semantic judgement; a wrong-but-compiling merge is the
212
+ * worst outcome). Must be called with `branch` checked out.
213
+ */
214
+ export function rebaseOntoArbiterMain(input) {
215
+ const env = input.env;
216
+ // Fetch the arbiter's `main` into the `<arbiter>/main` remote-tracking ref
217
+ // EXPLICITLY. A job worktree is cut from a bare hub mirror whose `origin`
218
+ // remote has no fetch refspec (so `origin/main` would not otherwise resolve);
219
+ // a normal clone already has it but the explicit refspec is harmless there.
220
+ git([
221
+ 'fetch',
222
+ '--quiet',
223
+ input.arbiter,
224
+ `+refs/heads/main:refs/remotes/${input.arbiter}/main`,
225
+ ], input.cwd, { env });
226
+ // Ensure we are on the branch we intend to rebase.
227
+ git(['checkout', '--quiet', input.branch], input.cwd, { env });
228
+ const rebase = run('git', ['rebase', `${input.arbiter}/main`], input.cwd, {
229
+ env,
230
+ });
231
+ if (rebase.status === 0) {
232
+ return { clean: true, conflicted: false };
233
+ }
234
+ // Conflict (or any non-zero): abort to restore the pre-rebase state. NEVER
235
+ // auto-resolve. `--abort` is best-effort; if there is nothing to abort it is
236
+ // a no-op error we can ignore.
237
+ run('git', ['rebase', '--abort'], input.cwd, { env });
238
+ return { clean: false, conflicted: true };
239
+ }
240
+ /**
241
+ * Push `${branch}:main` (merge mode) ONCE, classifying the outcome for the
242
+ * caller's bounded re-rebase-and-retry loop (Race 1: claim-vs-integrate, task
243
+ * `run-fleet-claim-integrate-and-sibling-rebase-concurrency-safe`). It does NOT
244
+ * rebase itself: the rebase belongs to the integration-core step-4 tail, which
245
+ * ALSO carries the sibling-ledger + divergent-done-move reconciliation arms a bare
246
+ * rebase here would miss. This function's only job is to push and tell the caller
247
+ * whether to LOOP (re-rebase via step-4) or STOP.
248
+ *
249
+ * - `landed` — the push succeeded, OR (under the non-atomic `file://` transport)
250
+ * it reported failure but our tip is ALREADY reachable on `<arbiter>/main`
251
+ * (the push genuinely landed — an IDEMPOTENT no-op; never re-rebase our own
252
+ * already-landed commit, which would self-conflict). The `isAncestor` probe is
253
+ * the SAME merged-vs-unmerged predicate `gc.ts`/`finishStrandedBranch` use.
254
+ * - `non-fast-forward` — a SIBLING advanced `<arbiter>/main` during our push
255
+ * window (a claim CAS commit, or a sibling integrate); the caller must
256
+ * re-fetch + re-run the step-4 rebase (reconciling sibling-ledger divergence)
257
+ * and retry the push. We NEVER `--force` main.
258
+ *
259
+ * Any OTHER push failure (unreachable arbiter, refused ref) THROWS, exactly as a
260
+ * plain `git push` would.
261
+ */
262
+ function mergePushOnce(input) {
263
+ const env = input.env;
264
+ const refspec = `${input.branch}:main`;
265
+ const arbiterRef = `refs/remotes/${input.arbiter}/main`;
266
+ const push = run('git', ['push', input.arbiter, refspec], input.cwd, { env });
267
+ if (push.status === 0) {
268
+ return { kind: 'landed' };
269
+ }
270
+ // Distinguish a CONTENTION rejection (main advanced — recoverable by a step-4
271
+ // re-rebase) from any other push failure (which surfaces as today's throw).
272
+ const combined = `${push.stderr}\n${push.stdout}`;
273
+ const nonFastForward = /non-fast-forward|fetch first|\[rejected\]|failed to push/i.test(combined);
274
+ if (!nonFastForward) {
275
+ throw new Error(`git push ${input.arbiter} ${refspec} failed (exit ${push.status}): ` +
276
+ `${push.stderr.trim() || push.stdout.trim()}`);
277
+ }
278
+ // Re-fetch the arbiter's main and check IDEMPOTENCY first: under `file://` a
279
+ // reported failure can have actually landed. If our tip is already on main, it
280
+ // landed — never re-rebase our own commit onto a main that has it.
281
+ git(['fetch', '--quiet', input.arbiter, `+refs/heads/main:${arbiterRef}`], input.cwd, { env });
282
+ const tip = run('git', ['rev-parse', '--verify', '--quiet', `refs/heads/${input.branch}`], input.cwd, { env }).stdout.trim();
283
+ if (tip !== '' && isAncestor(input.cwd, tip, arbiterRef, env)) {
284
+ return { kind: 'landed' };
285
+ }
286
+ // A genuine sibling main-advance: the caller re-runs the step-4 rebase + retries.
287
+ return { kind: 'non-fast-forward' };
288
+ }
289
+ /**
290
+ * Push a branch to the arbiter. Used by both modes; `merge` targets `main`
291
+ * (plain, never forced), `propose` targets the branch's own ref. The caller may
292
+ * pass extra git args (e.g. `--force-with-lease=<work-branch>` on the propose
293
+ * path, to reconcile a recovery-rewritten WORK branch — §11, unshared, lease-
294
+ * guarded). There is NEVER a plain `--force`, and `main` is NEVER forced; the
295
+ * only leases in the system are this work-branch one + the claim micro-commit's.
296
+ */
297
+ function pushBranch(input, refspec, ...extraArgs) {
298
+ git(['push', input.arbiter, refspec, ...extraArgs], input.cwd, {
299
+ env: input.env,
300
+ });
301
+ }
302
+ /**
303
+ * Reap the remote `work/<slug>` HEAD branch on the arbiter AFTER its work landed
304
+ * on `main` (merge mode, part (b)). The merge push above already put the commits
305
+ * on `main`, so the head is PROVABLY merged — it is the recovery point no longer
306
+ * (its work is on main), exactly the never-delete invariant's release condition.
307
+ * We additionally CONFIRM the head, when it exists, is an ancestor of
308
+ * `<arbiter>/main` before deleting, so a racing un-merged amend is never reaped.
309
+ *
310
+ * BEST-EFFORT + idempotent (soft `run`, never throws): the deletion of a
311
+ * fully-merged ref needs NO force (and we never pass one); a no-remote-head merge
312
+ * (the plain `${branch}:main` push opened none) is a clean no-op; an unreachable
313
+ * arbiter / already-gone ref is tolerated. The integrate's safety rides on the
314
+ * merge push, never on this hygiene step.
315
+ */
316
+ function deleteMergedHeadBranch(input) {
317
+ const env = input.env;
318
+ const arbiter = input.arbiter;
319
+ const branch = input.branch;
320
+ // Does a remote head exist at all? (`ls-remote` exits 0 with empty stdout when
321
+ // absent.) No head ⇒ nothing to reap (the common direct-merge case).
322
+ const ls = run('git', ['ls-remote', '--heads', arbiter, branch], input.cwd, {
323
+ env,
324
+ });
325
+ if (ls.status !== 0 || ls.stdout.trim() === '') {
326
+ return; // unreachable arbiter, or no remote head — nothing to delete.
327
+ }
328
+ // The head exists. Confirm it is an ancestor of <arbiter>/main before deleting
329
+ // (it just merged, so this holds; the guard refuses a racing un-merged amend).
330
+ run('git', [
331
+ 'fetch',
332
+ '--quiet',
333
+ arbiter,
334
+ `+refs/heads/main:refs/remotes/${arbiter}/main`,
335
+ `+refs/heads/${branch}:refs/remotes/${arbiter}/${branch}`,
336
+ ], input.cwd, { env });
337
+ const headSha = parseLsRemoteSha(ls.stdout);
338
+ if (headSha !== undefined) {
339
+ const isMerged = run('git', ['merge-base', '--is-ancestor', headSha, `refs/remotes/${arbiter}/main`], input.cwd, { env });
340
+ if (isMerged.status !== 0) {
341
+ return; // NOT provably merged (a racing un-merged amend) — never reap.
342
+ }
343
+ }
344
+ // Provably merged: WRITE-THROUGH delete — drop the LOCAL tracking ref FIRST
345
+ // (the ref that drives continue-detection), THEN the arbiter head (NEVER
346
+ // `--force`). The asymmetry is the point: an arbiter-delete failure leaves
347
+ // the local store BEHIND (self-healing on next fetch), never AHEAD (a stale
348
+ // `refs/remotes/<arbiter>/work/<slug>` that drives a wrong "continue" — the
349
+ // permanent stale-continue bug today's arbiter-first ordering creates).
350
+ run('git', ['update-ref', '-d', `refs/remotes/${arbiter}/${branch}`], input.cwd, { env });
351
+ run('git', ['push', arbiter, '--delete', branch], input.cwd, { env });
352
+ }
353
+ /** First sha from a `git ls-remote` output line (`<sha>\t<ref>`), or undefined. */
354
+ function parseLsRemoteSha(stdout) {
355
+ const m = /^([0-9a-f]{40})\s/m.exec(stdout.trim());
356
+ return m ? m[1] : undefined;
357
+ }
358
+ /**
359
+ * Resolve the SHA the merge path just pushed to `main` — the work branch's tip
360
+ * (`${branch}:main` pushes exactly that). BEST-EFFORT (soft `run`, never throws):
361
+ * on any failure it returns `undefined`, so the additive {@link
362
+ * IntegrateResult.commit} stays absent rather than breaking the integrate. Used to
363
+ * link the landed commit (intake's completion comment); the integrate's safety
364
+ * rides on the push above, never on this read.
365
+ */
366
+ function resolveBranchTip(input) {
367
+ const res = run('git', ['rev-parse', input.branch], input.cwd, {
368
+ env: input.env,
369
+ });
370
+ if (res.status !== 0) {
371
+ return undefined;
372
+ }
373
+ const sha = res.stdout.trim();
374
+ return sha === '' ? undefined : sha;
375
+ }
376
+ /**
377
+ * Render the runner-synthesised TITLE + BODY into a human's MANUAL review-request
378
+ * instructions (the `none` provider, and the GitHub provider's degraded path),
379
+ * so a human opening the request by hand reuses the SAME title/body the
380
+ * autonomous path would have set. Returns '' when neither is present (today's
381
+ * bare instruction — no regression). Surfaced as a trailing block so the
382
+ * leading instruction line stays clean.
383
+ */
384
+ export function manualRequestText(input) {
385
+ const parts = [];
386
+ if (input.title) {
387
+ parts.push(`\nSuggested title: ${input.title}`);
388
+ }
389
+ if (input.body) {
390
+ parts.push(`\nSuggested body:\n${input.body}`);
391
+ }
392
+ return parts.join('');
393
+ }
394
+ /** True if the arbiter's `main` currently contains `commitish` (work landed). */
395
+ export function arbiterMainContains(cwd, arbiter, commitish, env) {
396
+ run('git', ['fetch', '-q', arbiter], cwd, { env });
397
+ const res = run('git', ['merge-base', '--is-ancestor', commitish, `${arbiter}/main`], cwd, { env });
398
+ return res.status === 0;
399
+ }
400
+ //# sourceMappingURL=integrator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"integrator.js","sourceRoot":"","sources":["../src/integrator.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,GAAG,EAAE,GAAG,EAAC,MAAM,UAAU,CAAC;AAClC,OAAO,EAAC,UAAU,EAAC,MAAM,SAAS,CAAC;AAEnC,OAAO,EAAC,oCAAoC,EAAC,MAAM,sBAAsB,CAAC;AAoK1E;;;;GAIG;AACH,MAAM,OAAO,YAAY;IACf,IAAI,GAAG,MAAM,CAAC;IAEvB,KAAK,CAAC,WAAW,CAAC,KAAuB;QACxC,OAAO;YACN,MAAM,EAAE,KAAK;YACb,WAAW,EACV,UAAU,KAAK,CAAC,MAAM,OAAO,KAAK,CAAC,OAAO,0BAA0B;gBACpE,8DAA8D;gBAC9D,iBAAiB,CAAC,KAAK,CAAC;SACzB,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACH,aAAa,CAAC,KAAyB;QACtC,OAAO;YACN,MAAM,EAAE,KAAK;YACb,WAAW,EACV,oEAAoE;gBACpE,yBAAyB,KAAK,CAAC,IAAI,EAAE;SACtC,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,qBAAqB,CACpB,KAAiC;QAEjC,OAAO;YACN,MAAM,EAAE,KAAK;YACb,WAAW,EACV,oEAAoE;gBACpE,yBAAyB,KAAK,CAAC,IAAI,EAAE;SACtC,CAAC;IACH,CAAC;CACD;AAoHD,MAAM,OAAO,UAAU;IACL,QAAQ,CAAiB;IAE1C,YAAY,UAA6B,EAAE;QAC1C,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,IAAI,YAAY,EAAE,CAAC;IACxD,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,SAAS,CAAC,KAAqB;QACpC,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAC5B,gEAAgE;YAChE,2EAA2E;YAC3E,6EAA6E;YAC7E,2EAA2E;YAC3E,6EAA6E;YAC7E,wBAAwB;YACxB,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;YACpC,IAAI,MAAM,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;gBACxC,sEAAsE;gBACtE,OAAO;oBACN,IAAI,EAAE,OAAO;oBACb,YAAY,EAAE,KAAK;oBACnB,SAAS,EAAE,MAAM;oBACjB,QAAQ,EAAE,MAAM;oBAChB,aAAa,EAAE,KAAK;oBACpB,mBAAmB,EAAE,IAAI;iBACzB,CAAC;YACH,CAAC;YACD,2EAA2E;YAC3E,2EAA2E;YAC3E,4EAA4E;YAC5E,4EAA4E;YAC5E,MAAM,MAAM,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;YACvC,2EAA2E;YAC3E,6EAA6E;YAC7E,yEAAyE;YACzE,8EAA8E;YAC9E,wEAAwE;YACxE,6CAA6C;YAC7C,IAAI,KAAK,CAAC,gBAAgB,KAAK,IAAI,EAAE,CAAC;gBACrC,sBAAsB,CAAC,KAAK,CAAC,CAAC;YAC/B,CAAC;YACD,OAAO;gBACN,IAAI,EAAE,OAAO;gBACb,YAAY,EAAE,IAAI;gBAClB,SAAS,EAAE,MAAM;gBACjB,QAAQ,EAAE,MAAM;gBAChB,aAAa,EAAE,KAAK;gBACpB,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAC,MAAM,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;aACzC,CAAC;QACH,CAAC;QAED,yEAAyE;QACzE,6EAA6E;QAC7E,yEAAyE;QACzE,6EAA6E;QAC7E,8EAA8E;QAC9E,yEAAyE;QACzE,wEAAwE;QACxE,sEAAsE;QACtE,sDAAsD;QACtD,EAAE;QACF,oEAAoE;QACpE,uEAAuE;QACvE,2CAA2C;QAC3C,qEAAqE;QACrE,uEAAuE;QACvE,4EAA4E;QAC5E,4EAA4E;QAC5E,0EAA0E;QAC1E,4EAA4E;QAC5E,4EAA4E;QAC5E,uEAAuE;QACvE,uEAAuE;QACvE,4EAA4E;QAC5E,wEAAwE;QACxE,0EAA0E;QAC1E,MAAM,WAAW,GAAG,oCAAoC,CAAC;YACxD,GAAG,EAAE,KAAK,CAAC,GAAG;YACd,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,GAAG,EAAE,KAAK,CAAC,GAAG;SACd,CAAC,CAAC;QACH,IAAI,WAAW,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;YAC3C,0EAA0E;YAC1E,wEAAwE;YACxE,mEAAmE;YACnE,wEAAwE;YACxE,0CAA0C;YAC1C,OAAO;gBACN,IAAI,EAAE,SAAS;gBACf,YAAY,EAAE,KAAK;gBACnB,SAAS,EAAE,KAAK,CAAC,MAAM;gBACvB,QAAQ,EAAE,MAAM;gBAChB,aAAa,EAAE,KAAK;gBACpB,aAAa,EAAE,IAAI;gBACnB,WAAW,EACV,GAAG,KAAK,CAAC,MAAM,4BAA4B,KAAK,CAAC,OAAO,QAAQ;oBAChE,oEAAoE;aACrE,CAAC;QACH,CAAC;QACD,8EAA8E;QAC9E,+EAA+E;QAC/E,+EAA+E;QAC/E,gEAAgE;QAChE,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;YACzB,OAAO;gBACN,IAAI,EAAE,SAAS;gBACf,YAAY,EAAE,KAAK;gBACnB,SAAS,EAAE,KAAK,CAAC,MAAM;gBACvB,QAAQ,EAAE,MAAM;gBAChB,aAAa,EAAE,KAAK;gBACpB,WAAW,EACV,UAAU,KAAK,CAAC,MAAM,OAAO,KAAK,CAAC,OAAO,qBAAqB;oBAC/D,yCAAyC;aAC1C,CAAC;QACH,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;YAC9C,GAAG,EAAE,KAAK,CAAC,GAAG;YACd,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,GAAG,EAAE,KAAK,CAAC,GAAG;YACd,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,KAAK,EAAE,KAAK,CAAC,KAAK;SAClB,CAAC,CAAC;QACH,OAAO;YACN,IAAI,EAAE,SAAS;YACf,YAAY,EAAE,KAAK;YACnB,SAAS,EAAE,KAAK,CAAC,MAAM;YACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI;YAC5B,aAAa,EAAE,MAAM,CAAC,MAAM;YAC5B,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,GAAG,EAAE,MAAM,CAAC,GAAG;SACf,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,mBAAmB,CACxB,KAAqB;QAErB,MAAM,MAAM,GAAG,qBAAqB,CAAC;YACpC,GAAG,EAAE,KAAK,CAAC,GAAG;YACd,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,GAAG,EAAE,KAAK,CAAC,GAAG;SACd,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YACnB,OAAO;gBACN,OAAO,EAAE,iBAAiB;gBAC1B,MAAM,EACL,YAAY,KAAK,CAAC,MAAM,SAAS,KAAK,CAAC,OAAO,oBAAoB;oBAClE,qEAAqE;oBACrE,6CAA6C;aAC9C,CAAC;QACH,CAAC;QACD,OAAO,EAAC,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAC,CAAC;IAC1E,CAAC;CACD;AAgBD;;;;;;;GAOG;AACH,MAAM,UAAU,qBAAqB,CAAC,KAAkB;IACvD,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC;IACtB,2EAA2E;IAC3E,0EAA0E;IAC1E,8EAA8E;IAC9E,4EAA4E;IAC5E,GAAG,CACF;QACC,OAAO;QACP,SAAS;QACT,KAAK,CAAC,OAAO;QACb,iCAAiC,KAAK,CAAC,OAAO,OAAO;KACrD,EACD,KAAK,CAAC,GAAG,EACT,EAAC,GAAG,EAAC,CACL,CAAC;IACF,mDAAmD;IACnD,GAAG,CAAC,CAAC,UAAU,EAAE,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,GAAG,EAAE,EAAC,GAAG,EAAC,CAAC,CAAC;IAE7D,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,GAAG,KAAK,CAAC,OAAO,OAAO,CAAC,EAAE,KAAK,CAAC,GAAG,EAAE;QACzE,GAAG;KACH,CAAC,CAAC;IACH,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,EAAC,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAC,CAAC;IACzC,CAAC;IACD,2EAA2E;IAC3E,6EAA6E;IAC7E,+BAA+B;IAC/B,GAAG,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAE,KAAK,CAAC,GAAG,EAAE,EAAC,GAAG,EAAC,CAAC,CAAC;IACpD,OAAO,EAAC,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAC,CAAC;AACzC,CAAC;AAKD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,SAAS,aAAa,CAAC,KAAqB;IAC3C,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC;IACtB,MAAM,OAAO,GAAG,GAAG,KAAK,CAAC,MAAM,OAAO,CAAC;IACvC,MAAM,UAAU,GAAG,gBAAgB,KAAK,CAAC,OAAO,OAAO,CAAC;IAExD,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,KAAK,CAAC,GAAG,EAAE,EAAC,GAAG,EAAC,CAAC,CAAC;IAC5E,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,EAAC,IAAI,EAAE,QAAQ,EAAC,CAAC;IACzB,CAAC;IACD,8EAA8E;IAC9E,4EAA4E;IAC5E,MAAM,QAAQ,GAAG,GAAG,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;IAClD,MAAM,cAAc,GACnB,2DAA2D,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC5E,IAAI,CAAC,cAAc,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CACd,YAAY,KAAK,CAAC,OAAO,IAAI,OAAO,iBAAiB,IAAI,CAAC,MAAM,KAAK;YACpE,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAC9C,CAAC;IACH,CAAC;IACD,6EAA6E;IAC7E,+EAA+E;IAC/E,mEAAmE;IACnE,GAAG,CACF,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,OAAO,EAAE,oBAAoB,UAAU,EAAE,CAAC,EACrE,KAAK,CAAC,GAAG,EACT,EAAC,GAAG,EAAC,CACL,CAAC;IACF,MAAM,GAAG,GAAG,GAAG,CACd,KAAK,EACL,CAAC,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,cAAc,KAAK,CAAC,MAAM,EAAE,CAAC,EAClE,KAAK,CAAC,GAAG,EACT,EAAC,GAAG,EAAC,CACL,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IAChB,IAAI,GAAG,KAAK,EAAE,IAAI,UAAU,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,CAAC,EAAE,CAAC;QAC/D,OAAO,EAAC,IAAI,EAAE,QAAQ,EAAC,CAAC;IACzB,CAAC;IACD,kFAAkF;IAClF,OAAO,EAAC,IAAI,EAAE,kBAAkB,EAAC,CAAC;AACnC,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,UAAU,CAClB,KAAqB,EACrB,OAAe,EACf,GAAG,SAAmB;IAEtB,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,SAAS,CAAC,EAAE,KAAK,CAAC,GAAG,EAAE;QAC9D,GAAG,EAAE,KAAK,CAAC,GAAG;KACd,CAAC,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,SAAS,sBAAsB,CAAC,KAAqB;IACpD,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC;IACtB,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;IAC9B,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAC5B,+EAA+E;IAC/E,qEAAqE;IACrE,MAAM,EAAE,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,KAAK,CAAC,GAAG,EAAE;QAC3E,GAAG;KACH,CAAC,CAAC;IACH,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QAChD,OAAO,CAAC,8DAA8D;IACvE,CAAC;IACD,+EAA+E;IAC/E,+EAA+E;IAC/E,GAAG,CACF,KAAK,EACL;QACC,OAAO;QACP,SAAS;QACT,OAAO;QACP,iCAAiC,OAAO,OAAO;QAC/C,eAAe,MAAM,iBAAiB,OAAO,IAAI,MAAM,EAAE;KACzD,EACD,KAAK,CAAC,GAAG,EACT,EAAC,GAAG,EAAC,CACL,CAAC;IACF,MAAM,OAAO,GAAG,gBAAgB,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;IAC5C,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,GAAG,CACnB,KAAK,EACL,CAAC,YAAY,EAAE,eAAe,EAAE,OAAO,EAAE,gBAAgB,OAAO,OAAO,CAAC,EACxE,KAAK,CAAC,GAAG,EACT,EAAC,GAAG,EAAC,CACL,CAAC;QACF,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO,CAAC,+DAA+D;QACxE,CAAC;IACF,CAAC;IACD,4EAA4E;IAC5E,yEAAyE;IACzE,2EAA2E;IAC3E,4EAA4E;IAC5E,4EAA4E;IAC5E,wEAAwE;IACxE,GAAG,CACF,KAAK,EACL,CAAC,YAAY,EAAE,IAAI,EAAE,gBAAgB,OAAO,IAAI,MAAM,EAAE,CAAC,EACzD,KAAK,CAAC,GAAG,EACT,EAAC,GAAG,EAAC,CACL,CAAC;IACF,GAAG,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,KAAK,CAAC,GAAG,EAAE,EAAC,GAAG,EAAC,CAAC,CAAC;AACrE,CAAC;AAED,mFAAmF;AACnF,SAAS,gBAAgB,CAAC,MAAc;IACvC,MAAM,CAAC,GAAG,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IACnD,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC7B,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,gBAAgB,CAAC,KAAqB;IAC9C,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,GAAG,EAAE;QAC9D,GAAG,EAAE,KAAK,CAAC,GAAG;KACd,CAAC,CAAC;IACH,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,SAAS,CAAC;IAClB,CAAC;IACD,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IAC9B,OAAO,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC;AACrC,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAGjC;IACA,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QACjB,KAAK,CAAC,IAAI,CAAC,sBAAsB,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;IACjD,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;QAChB,KAAK,CAAC,IAAI,CAAC,sBAAsB,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IAChD,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACvB,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,mBAAmB,CAClC,GAAW,EACX,OAAe,EACf,SAAiB,EACjB,GAAuB;IAEvB,GAAG,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,EAAC,GAAG,EAAC,CAAC,CAAC;IACjD,MAAM,GAAG,GAAG,GAAG,CACd,KAAK,EACL,CAAC,YAAY,EAAE,eAAe,EAAE,SAAS,EAAE,GAAG,OAAO,OAAO,CAAC,EAC7D,GAAG,EACH,EAAC,GAAG,EAAC,CACL,CAAC;IACF,OAAO,GAAG,CAAC,MAAM,KAAK,CAAC,CAAC;AACzB,CAAC"}
@@ -0,0 +1,219 @@
1
+ import { type Job } from './workspace.js';
2
+ import { type SlugNamespace } from './slug-namespace.js';
3
+ /**
4
+ * The **isolation-strategy seam** (`docs/adr/command-surface-and-journeys.md`
5
+ * §3; substrate ADR §1/§2/§4): one seam, two strategies, selected by whether
6
+ * there is a checkout —
7
+ *
8
+ * - **in-place** — the current checkout (a human's clone, or the CI container)
9
+ * IS the isolation: claim + build + gate + integrate operate directly in the
10
+ * current working tree on its `work/<slug>` branch. NO hub mirror, NO
11
+ * external worktree, NO reap (the human's checkout is left in a defined
12
+ * state, never deleted).
13
+ * - **job-worktree** — materialise a hub mirror + an external job worktree in
14
+ * the agents' area (`workspacesDir`), EXACTLY as `run`'s `createJob` path
15
+ * does (ADR §1/§2), with end-of-job teardown re-applying the §4
16
+ * provably-safe deletion predicate (`reapJob`).
17
+ *
18
+ * The load-bearing design constraint is the **uniform handle** ({@link
19
+ * IsolatedTree}): both strategies expose the SAME fields the post-claim pipeline
20
+ * reads (`dir`/`branch`/`arbiterRemote`/`arbiterUrl`) plus a strategy-appropriate
21
+ * `teardown`, so the shared build→gate→done-move→rebase→integrate→teardown steps
22
+ * run against EITHER strategy without knowing WHERE the tree lives. This removes
23
+ * the `Job`-shape coupling from the pipeline (`run`'s old `runOneItem` read a
24
+ * concrete `Job`).
25
+ *
26
+ * Wiring a COMMAND to the in-place strategy is the `do-in-place` task — this
27
+ * module only provides the seam + both implementors; `run` keeps using the
28
+ * job-worktree strategy (its observable behaviour is byte-identical).
29
+ */
30
+ /**
31
+ * The uniform handle the post-claim pipeline reads from — satisfied IDENTICALLY
32
+ * by both strategies, so the shared steps never depend on a concrete `Job` (and
33
+ * thus never assume a hub mirror / external worktree).
34
+ */
35
+ export interface IsolatedTree {
36
+ /**
37
+ * The working tree the agent + tests run in: the job worktree (job-worktree
38
+ * strategy) or the current checkout (in-place strategy).
39
+ */
40
+ dir: string;
41
+ /** The work branch checked out there (`work/<type>-<slug>`). */
42
+ branch: string;
43
+ /**
44
+ * The git remote NAME, VALID INSIDE `dir`, that tracks the arbiter — the
45
+ * rebase/integrate push target. Job-worktree: `origin` (the bare hub mirror's
46
+ * clone remote). In-place: the checkout's own arbiter remote name.
47
+ */
48
+ arbiterRemote: string;
49
+ /**
50
+ * The arbiter remote URL used for provider auto-detection (a GitHub URL ⇒ the
51
+ * `gh` provider). Job-worktree: the mirror's resolved arbiter URL
52
+ * (`job.mirror.url` today). In-place: the checkout's arbiter remote URL.
53
+ */
54
+ arbiterUrl: string;
55
+ /**
56
+ * True iff this tree CONTINUED a kept arbiter `work/<slug>` branch (a requeue)
57
+ * rather than cutting fresh off main — the SAME continue-detection both
58
+ * onboarding paths use. The prompt assembly injects a CONTINUE block when set
59
+ * (the `agent-prompt-continue-context` task). Absent / false on a fresh cut.
60
+ */
61
+ continued?: boolean;
62
+ /**
63
+ * True iff a CONTINUE rebase onto fresh main CONFLICTED at onboard-time
64
+ * (a requeue kept a `work/<slug>` whose commits did not replay onto the
65
+ * current main; aborted, never auto-resolved). The pipeline routes the item
66
+ * to needs-attention (the §10 path) instead of running the agent. Absent /
67
+ * false on a fresh cut and on a clean continue.
68
+ */
69
+ continueRebaseConflict?: boolean;
70
+ /**
71
+ * Set iff the CONTINUE reconcile push to the arbiter FAILED TERMINALLY at
72
+ * onboard-time (the stale-lease retry cap exhausted, or a non-stale-lease
73
+ * rejection / unreachable arbiter) — the push helper THROWS, caught so the run
74
+ * does NOT crash leaving the task silently in-progress on the arbiter (the
75
+ * stale-lease-strand bug). The pipeline routes the item to needs-attention,
76
+ * the kept work left committed + recoverable on the branch. Absent on a fresh
77
+ * cut, a clean continue that pushed, and a rebase conflict (which sets
78
+ * {@link continueRebaseConflict} instead).
79
+ */
80
+ continuePushFailure?: string;
81
+ /**
82
+ * Tear the isolated tree down per the strategy. Job-worktree: re-apply the §4
83
+ * deletion-safety predicate and `git worktree remove`/prune the worktree ONLY
84
+ * if provably safe (`reapJob`). In-place: a NO-OP — the human's checkout is
85
+ * left in a defined state, NEVER reaped. Always safe to call (e.g. in a
86
+ * `finally`).
87
+ *
88
+ * `opts.reachableOnly` (job-worktree only) drops the clean-tree half of the
89
+ * predicate, keeping the reachable-on-arbiter half: a worktree whose durable
90
+ * branch is provably on the arbiter is reaped EVEN WHEN its tree has incidental
91
+ * churn. This is the FAILURE-path opt-in (`performDoRemote`'s needs-attention
92
+ * return, where the seam has already surfaced + pushed the branch), so a
93
+ * churn-dirty-but-arbiter-safe worktree does not linger to poison the next
94
+ * build. It NEVER reaps work not yet on the arbiter (reachability stands).
95
+ * The in-place teardown ignores it (still a no-op).
96
+ */
97
+ teardown(opts?: {
98
+ reachableOnly?: boolean;
99
+ }): void;
100
+ }
101
+ /** What a strategy needs to prepare an isolated tree for one work item. */
102
+ export interface PrepareInput {
103
+ /** The work slug being processed (→ branch `work/<type>-<slug>`). */
104
+ slug: string;
105
+ /**
106
+ * The item TYPE — `'task'` for a build (intake/`do task:`), `'prd'` for a
107
+ * prd-tasking run (`do prd:`). It NAMESPACES the work branch via
108
+ * {@link workBranchRef} so a same-slug task and prd never collide on the
109
+ * arbiter branch. Defaults to `'task'` (the overwhelmingly-common build
110
+ * path); the prd-tasking path passes `'prd'` explicitly.
111
+ */
112
+ type?: SlugNamespace;
113
+ /**
114
+ * The sha of the claim commit (`claim: <slug>`) just landed on the arbiter,
115
+ * surfaced out of `performClaim`. The in-place FRESH path branches the work
116
+ * branch from THIS exact commit (and HARD-FAILS if it is unreachable from
117
+ * `<arbiter>/main`) — never a stale same-named branch or a not-yet-advanced
118
+ * local main. Absent on a resume/continue or when the caller has no claim
119
+ * commit (the job-worktree strategy ignores it).
120
+ */
121
+ claimCommit?: string;
122
+ /** Environment for child git/agent processes. */
123
+ env?: NodeJS.ProcessEnv;
124
+ }
125
+ /**
126
+ * A way to acquire (and tear down) an isolated working tree on a freshly-fetched
127
+ * main for a slug. The signatures stay SEMANTIC — "prepare an isolated tree;
128
+ * expose a uniform handle; tear it down" — and DO NOT assume WHERE the tree
129
+ * lives, so `do --remote`/`run` (job-worktree) and `do-in-place` (in-place) each
130
+ * select their strategy without the pipeline knowing.
131
+ */
132
+ export interface IsolationStrategy {
133
+ /** Stable strategy name (for diagnostics / records). */
134
+ readonly name: 'in-place' | 'job-worktree';
135
+ /**
136
+ * Prepare an isolated working tree for `slug` on a freshly-fetched main and
137
+ * return the uniform handle. The handle's `teardown` reverses it per strategy.
138
+ */
139
+ prepare(input: PrepareInput): IsolatedTree;
140
+ }
141
+ /**
142
+ * The **job-worktree** strategy — `run`'s EXISTING isolation, extracted behind
143
+ * the seam UNCHANGED. `prepare` ensures the hub mirror + cuts a per-job worktree
144
+ * off the freshly-fetched `<hub>/main` (`createJob`); the handle's `teardown`
145
+ * re-applies the §4 provably-safe deletion predicate (`reapJob`) — reaping the
146
+ * worktree iff its work is clean AND on the arbiter, retaining it otherwise (the
147
+ * never-lose-work signal). The arbiter remote inside the worktree is `origin`
148
+ * (the bare mirror's clone remote), and provider detection keys off the mirror's
149
+ * resolved arbiter URL — byte-identical to today's `run`.
150
+ */
151
+ export declare function jobWorktreeStrategy(options: {
152
+ /** A working repo to resolve the arbiter URL from (with `arbiter`). */
153
+ fromRepo: string;
154
+ /** Remote name in `fromRepo` whose URL to mirror (default `origin`). */
155
+ arbiter?: string;
156
+ /** The execution working area (config `workspacesDir`). */
157
+ workspacesDir: string;
158
+ }): IsolationStrategy;
159
+ /**
160
+ * Build the uniform handle for a job-worktree `Job` — the EXACT fields `run`'s
161
+ * pipeline read off `job` today (`dir`/`branch`/`arbiterRemote`/`mirror.url`)
162
+ * plus the `reapJob` teardown. Exposed so a caller that already created the
163
+ * `Job` (e.g. `run`'s pipeline, mid-extraction) can wrap it without re-creating.
164
+ */
165
+ export declare function jobWorktreeHandle(job: Job, env: NodeJS.ProcessEnv | undefined): IsolatedTree;
166
+ /**
167
+ * The **in-place** strategy — the current checkout (a human's clone, or the CI
168
+ * container) IS the isolation. `prepare` fetches the arbiter and switches the
169
+ * checkout to `work/<slug>` cut from the freshly-fetched `<arbiter>/main` (the
170
+ * SAME "every worktree is cut from a fresh main" guarantee, ADR §6), WITHOUT a
171
+ * hub mirror or external worktree. The handle's `arbiterRemote`/`arbiterUrl` come
172
+ * from the checkout's own arbiter remote; `teardown` is a NO-OP — the checkout is
173
+ * left in a defined state on `work/<slug>`, NEVER reaped (it is the human's tree
174
+ * / the only copy of CI's work).
175
+ *
176
+ * NOTE: this strategy assumes the slug is already CLAIMED (the same contract as
177
+ * the job-worktree strategy, whose caller claims before `prepare`). It does not
178
+ * itself claim — `do-in-place` composes the claim (and `start`/`complete`) around
179
+ * the seam. `prepare` here is the thin "put the checkout on a fresh work branch"
180
+ * step the shared pipeline needs; it is unwired in this task.
181
+ */
182
+ export declare function inPlaceStrategy(options: {
183
+ /** The current checkout to operate in. */
184
+ checkout: string;
185
+ /** Name of the checkout's arbiter git remote. Defaults to `origin`. */
186
+ arbiter?: string;
187
+ }): IsolationStrategy;
188
+ /** How {@link selectIsolationStrategy} chooses between the two strategies. */
189
+ export interface SelectIsolationInput {
190
+ /**
191
+ * The current checkout, when there IS one (the human's clone / CI container).
192
+ * Its presence selects the **in-place** strategy. Absent ⇒ the **job-worktree**
193
+ * strategy (materialise a mirror + worktree in the agents' area).
194
+ */
195
+ checkout?: string;
196
+ /**
197
+ * A working repo to resolve the arbiter URL from for the job-worktree
198
+ * strategy (with `arbiter`). Required when `checkout` is absent.
199
+ */
200
+ fromRepo?: string;
201
+ /** Arbiter remote name (default `origin`), used by either strategy. */
202
+ arbiter?: string;
203
+ /** The execution working area for the job-worktree strategy (`workspacesDir`). */
204
+ workspacesDir?: string;
205
+ }
206
+ /**
207
+ * Select the isolation strategy by **"is there a checkout"** (ADR §3) — NOT a
208
+ * hardcoded path:
209
+ *
210
+ * - `checkout` present ⇒ {@link inPlaceStrategy} (the checkout IS the
211
+ * isolation; `do <slug>` in a checkout, the in-place human path).
212
+ * - `checkout` absent ⇒ {@link jobWorktreeStrategy} (mirror + worktree in the
213
+ * agents' area; `do --remote` / `run`).
214
+ *
215
+ * Both yield the same uniform handle, so the caller's pipeline is identical
216
+ * regardless of which strategy was selected.
217
+ */
218
+ export declare function selectIsolationStrategy(input: SelectIsolationInput): IsolationStrategy;
219
+ //# sourceMappingURL=isolation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isolation.d.ts","sourceRoot":"","sources":["../src/isolation.ts"],"names":[],"mappings":"AACA,OAAO,EAAY,KAAK,GAAG,EAAC,MAAM,gBAAgB,CAAC;AAOnD,OAAO,EAAgB,KAAK,aAAa,EAAC,MAAM,qBAAqB,CAAC;AAEtE;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC5B;;;OAGG;IACH,GAAG,EAAE,MAAM,CAAC;IACZ,gEAAgE;IAChE,MAAM,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,aAAa,EAAE,MAAM,CAAC;IACtB;;;;OAIG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;;;;OAMG;IACH,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC;;;;;;;;;OASG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B;;;;;;;;;;;;;;;OAeG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE;QAAC,aAAa,CAAC,EAAE,OAAO,CAAA;KAAC,GAAG,IAAI,CAAC;CACjD;AAED,2EAA2E;AAC3E,MAAM,WAAW,YAAY;IAC5B,qEAAqE;IACrE,IAAI,EAAE,MAAM,CAAC;IACb;;;;;;OAMG;IACH,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB;;;;;;;OAOG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iDAAiD;IACjD,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CACxB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,iBAAiB;IACjC,wDAAwD;IACxD,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,cAAc,CAAC;IAC3C;;;OAGG;IACH,OAAO,CAAC,KAAK,EAAE,YAAY,GAAG,YAAY,CAAC;CAC3C;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE;IAC5C,uEAAuE;IACvE,QAAQ,EAAE,MAAM,CAAC;IACjB,wEAAwE;IACxE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,2DAA2D;IAC3D,aAAa,EAAE,MAAM,CAAC;CACtB,GAAG,iBAAiB,CAepB;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAChC,GAAG,EAAE,GAAG,EACR,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,SAAS,GAChC,YAAY,CA6Bd;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE;IACxC,0CAA0C;IAC1C,QAAQ,EAAE,MAAM,CAAC;IACjB,uEAAuE;IACvE,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,iBAAiB,CA+IpB;AA4CD,8EAA8E;AAC9E,MAAM,WAAW,oBAAoB;IACpC;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,uEAAuE;IACvE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kFAAkF;IAClF,aAAa,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,uBAAuB,CACtC,KAAK,EAAE,oBAAoB,GACzB,iBAAiB,CAkBnB"}