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,484 @@
1
+ import {git} from './git.js';
2
+ import {createJob, type Job} from './workspace.js';
3
+ import {reapJob} from './gc.js';
4
+ import {
5
+ branchAheadOfArbiter,
6
+ rebaseContinuedBranchOntoMain,
7
+ pushContinuedBranchWithStaleLeaseRetry,
8
+ } from './continue-branch.js';
9
+ import {workBranchRef, type SlugNamespace} from './slug-namespace.js';
10
+
11
+ /**
12
+ * The **isolation-strategy seam** (`docs/adr/command-surface-and-journeys.md`
13
+ * §3; substrate ADR §1/§2/§4): one seam, two strategies, selected by whether
14
+ * there is a checkout —
15
+ *
16
+ * - **in-place** — the current checkout (a human's clone, or the CI container)
17
+ * IS the isolation: claim + build + gate + integrate operate directly in the
18
+ * current working tree on its `work/<slug>` branch. NO hub mirror, NO
19
+ * external worktree, NO reap (the human's checkout is left in a defined
20
+ * state, never deleted).
21
+ * - **job-worktree** — materialise a hub mirror + an external job worktree in
22
+ * the agents' area (`workspacesDir`), EXACTLY as `run`'s `createJob` path
23
+ * does (ADR §1/§2), with end-of-job teardown re-applying the §4
24
+ * provably-safe deletion predicate (`reapJob`).
25
+ *
26
+ * The load-bearing design constraint is the **uniform handle** ({@link
27
+ * IsolatedTree}): both strategies expose the SAME fields the post-claim pipeline
28
+ * reads (`dir`/`branch`/`arbiterRemote`/`arbiterUrl`) plus a strategy-appropriate
29
+ * `teardown`, so the shared build→gate→done-move→rebase→integrate→teardown steps
30
+ * run against EITHER strategy without knowing WHERE the tree lives. This removes
31
+ * the `Job`-shape coupling from the pipeline (`run`'s old `runOneItem` read a
32
+ * concrete `Job`).
33
+ *
34
+ * Wiring a COMMAND to the in-place strategy is the `do-in-place` task — this
35
+ * module only provides the seam + both implementors; `run` keeps using the
36
+ * job-worktree strategy (its observable behaviour is byte-identical).
37
+ */
38
+
39
+ /**
40
+ * The uniform handle the post-claim pipeline reads from — satisfied IDENTICALLY
41
+ * by both strategies, so the shared steps never depend on a concrete `Job` (and
42
+ * thus never assume a hub mirror / external worktree).
43
+ */
44
+ export interface IsolatedTree {
45
+ /**
46
+ * The working tree the agent + tests run in: the job worktree (job-worktree
47
+ * strategy) or the current checkout (in-place strategy).
48
+ */
49
+ dir: string;
50
+ /** The work branch checked out there (`work/<type>-<slug>`). */
51
+ branch: string;
52
+ /**
53
+ * The git remote NAME, VALID INSIDE `dir`, that tracks the arbiter — the
54
+ * rebase/integrate push target. Job-worktree: `origin` (the bare hub mirror's
55
+ * clone remote). In-place: the checkout's own arbiter remote name.
56
+ */
57
+ arbiterRemote: string;
58
+ /**
59
+ * The arbiter remote URL used for provider auto-detection (a GitHub URL ⇒ the
60
+ * `gh` provider). Job-worktree: the mirror's resolved arbiter URL
61
+ * (`job.mirror.url` today). In-place: the checkout's arbiter remote URL.
62
+ */
63
+ arbiterUrl: string;
64
+ /**
65
+ * True iff this tree CONTINUED a kept arbiter `work/<slug>` branch (a requeue)
66
+ * rather than cutting fresh off main — the SAME continue-detection both
67
+ * onboarding paths use. The prompt assembly injects a CONTINUE block when set
68
+ * (the `agent-prompt-continue-context` task). Absent / false on a fresh cut.
69
+ */
70
+ continued?: boolean;
71
+ /**
72
+ * True iff a CONTINUE rebase onto fresh main CONFLICTED at onboard-time
73
+ * (a requeue kept a `work/<slug>` whose commits did not replay onto the
74
+ * current main; aborted, never auto-resolved). The pipeline routes the item
75
+ * to needs-attention (the §10 path) instead of running the agent. Absent /
76
+ * false on a fresh cut and on a clean continue.
77
+ */
78
+ continueRebaseConflict?: boolean;
79
+ /**
80
+ * Set iff the CONTINUE reconcile push to the arbiter FAILED TERMINALLY at
81
+ * onboard-time (the stale-lease retry cap exhausted, or a non-stale-lease
82
+ * rejection / unreachable arbiter) — the push helper THROWS, caught so the run
83
+ * does NOT crash leaving the task silently in-progress on the arbiter (the
84
+ * stale-lease-strand bug). The pipeline routes the item to needs-attention,
85
+ * the kept work left committed + recoverable on the branch. Absent on a fresh
86
+ * cut, a clean continue that pushed, and a rebase conflict (which sets
87
+ * {@link continueRebaseConflict} instead).
88
+ */
89
+ continuePushFailure?: string;
90
+ /**
91
+ * Tear the isolated tree down per the strategy. Job-worktree: re-apply the §4
92
+ * deletion-safety predicate and `git worktree remove`/prune the worktree ONLY
93
+ * if provably safe (`reapJob`). In-place: a NO-OP — the human's checkout is
94
+ * left in a defined state, NEVER reaped. Always safe to call (e.g. in a
95
+ * `finally`).
96
+ *
97
+ * `opts.reachableOnly` (job-worktree only) drops the clean-tree half of the
98
+ * predicate, keeping the reachable-on-arbiter half: a worktree whose durable
99
+ * branch is provably on the arbiter is reaped EVEN WHEN its tree has incidental
100
+ * churn. This is the FAILURE-path opt-in (`performDoRemote`'s needs-attention
101
+ * return, where the seam has already surfaced + pushed the branch), so a
102
+ * churn-dirty-but-arbiter-safe worktree does not linger to poison the next
103
+ * build. It NEVER reaps work not yet on the arbiter (reachability stands).
104
+ * The in-place teardown ignores it (still a no-op).
105
+ */
106
+ teardown(opts?: {reachableOnly?: boolean}): void;
107
+ }
108
+
109
+ /** What a strategy needs to prepare an isolated tree for one work item. */
110
+ export interface PrepareInput {
111
+ /** The work slug being processed (→ branch `work/<type>-<slug>`). */
112
+ slug: string;
113
+ /**
114
+ * The item TYPE — `'task'` for a build (intake/`do task:`), `'prd'` for a
115
+ * prd-tasking run (`do prd:`). It NAMESPACES the work branch via
116
+ * {@link workBranchRef} so a same-slug task and prd never collide on the
117
+ * arbiter branch. Defaults to `'task'` (the overwhelmingly-common build
118
+ * path); the prd-tasking path passes `'prd'` explicitly.
119
+ */
120
+ type?: SlugNamespace;
121
+ /**
122
+ * The sha of the claim commit (`claim: <slug>`) just landed on the arbiter,
123
+ * surfaced out of `performClaim`. The in-place FRESH path branches the work
124
+ * branch from THIS exact commit (and HARD-FAILS if it is unreachable from
125
+ * `<arbiter>/main`) — never a stale same-named branch or a not-yet-advanced
126
+ * local main. Absent on a resume/continue or when the caller has no claim
127
+ * commit (the job-worktree strategy ignores it).
128
+ */
129
+ claimCommit?: string;
130
+ /** Environment for child git/agent processes. */
131
+ env?: NodeJS.ProcessEnv;
132
+ }
133
+
134
+ /**
135
+ * A way to acquire (and tear down) an isolated working tree on a freshly-fetched
136
+ * main for a slug. The signatures stay SEMANTIC — "prepare an isolated tree;
137
+ * expose a uniform handle; tear it down" — and DO NOT assume WHERE the tree
138
+ * lives, so `do --remote`/`run` (job-worktree) and `do-in-place` (in-place) each
139
+ * select their strategy without the pipeline knowing.
140
+ */
141
+ export interface IsolationStrategy {
142
+ /** Stable strategy name (for diagnostics / records). */
143
+ readonly name: 'in-place' | 'job-worktree';
144
+ /**
145
+ * Prepare an isolated working tree for `slug` on a freshly-fetched main and
146
+ * return the uniform handle. The handle's `teardown` reverses it per strategy.
147
+ */
148
+ prepare(input: PrepareInput): IsolatedTree;
149
+ }
150
+
151
+ /**
152
+ * The **job-worktree** strategy — `run`'s EXISTING isolation, extracted behind
153
+ * the seam UNCHANGED. `prepare` ensures the hub mirror + cuts a per-job worktree
154
+ * off the freshly-fetched `<hub>/main` (`createJob`); the handle's `teardown`
155
+ * re-applies the §4 provably-safe deletion predicate (`reapJob`) — reaping the
156
+ * worktree iff its work is clean AND on the arbiter, retaining it otherwise (the
157
+ * never-lose-work signal). The arbiter remote inside the worktree is `origin`
158
+ * (the bare mirror's clone remote), and provider detection keys off the mirror's
159
+ * resolved arbiter URL — byte-identical to today's `run`.
160
+ */
161
+ export function jobWorktreeStrategy(options: {
162
+ /** A working repo to resolve the arbiter URL from (with `arbiter`). */
163
+ fromRepo: string;
164
+ /** Remote name in `fromRepo` whose URL to mirror (default `origin`). */
165
+ arbiter?: string;
166
+ /** The execution working area (config `workspacesDir`). */
167
+ workspacesDir: string;
168
+ }): IsolationStrategy {
169
+ return {
170
+ name: 'job-worktree',
171
+ prepare({slug, type, env}): IsolatedTree {
172
+ const job: Job = createJob({
173
+ fromRepo: options.fromRepo,
174
+ arbiter: options.arbiter,
175
+ slug,
176
+ type: type ?? 'task',
177
+ workspacesDir: options.workspacesDir,
178
+ env,
179
+ });
180
+ return jobWorktreeHandle(job, env);
181
+ },
182
+ };
183
+ }
184
+
185
+ /**
186
+ * Build the uniform handle for a job-worktree `Job` — the EXACT fields `run`'s
187
+ * pipeline read off `job` today (`dir`/`branch`/`arbiterRemote`/`mirror.url`)
188
+ * plus the `reapJob` teardown. Exposed so a caller that already created the
189
+ * `Job` (e.g. `run`'s pipeline, mid-extraction) can wrap it without re-creating.
190
+ */
191
+ export function jobWorktreeHandle(
192
+ job: Job,
193
+ env: NodeJS.ProcessEnv | undefined,
194
+ ): IsolatedTree {
195
+ return {
196
+ dir: job.dir,
197
+ branch: job.branch,
198
+ arbiterRemote: job.arbiterRemote,
199
+ arbiterUrl: job.mirror.url,
200
+ continued: job.continued,
201
+ continueRebaseConflict: job.continueRebaseConflict,
202
+ continuePushFailure: job.continuePushFailure,
203
+ teardown(opts?: {reachableOnly?: boolean}): void {
204
+ // Auto-reap at end-of-job (ADR §4): re-apply the provably-safe deletion
205
+ // predicate and remove the worktree ONLY if it holds (clean tree AND the
206
+ // branch tip reachable on the arbiter). NEVER `--force` here.
207
+ //
208
+ // `reachableOnly` (the FAILURE-path opt-in) drops the clean-tree half but
209
+ // KEEPS reachability: a churn-dirty worktree whose durable branch is on
210
+ // the arbiter is reaped (it would otherwise linger and poison the next
211
+ // build's fetch); a worktree whose work is NOT yet on the arbiter is still
212
+ // retained (never lose work).
213
+ reapJob({
214
+ dir: job.dir,
215
+ branch: job.branch,
216
+ mirrorPath: job.mirror.path,
217
+ arbiter: job.arbiterRemote,
218
+ reachableOnly: opts?.reachableOnly === true,
219
+ env,
220
+ });
221
+ },
222
+ };
223
+ }
224
+
225
+ /**
226
+ * The **in-place** strategy — the current checkout (a human's clone, or the CI
227
+ * container) IS the isolation. `prepare` fetches the arbiter and switches the
228
+ * checkout to `work/<slug>` cut from the freshly-fetched `<arbiter>/main` (the
229
+ * SAME "every worktree is cut from a fresh main" guarantee, ADR §6), WITHOUT a
230
+ * hub mirror or external worktree. The handle's `arbiterRemote`/`arbiterUrl` come
231
+ * from the checkout's own arbiter remote; `teardown` is a NO-OP — the checkout is
232
+ * left in a defined state on `work/<slug>`, NEVER reaped (it is the human's tree
233
+ * / the only copy of CI's work).
234
+ *
235
+ * NOTE: this strategy assumes the slug is already CLAIMED (the same contract as
236
+ * the job-worktree strategy, whose caller claims before `prepare`). It does not
237
+ * itself claim — `do-in-place` composes the claim (and `start`/`complete`) around
238
+ * the seam. `prepare` here is the thin "put the checkout on a fresh work branch"
239
+ * step the shared pipeline needs; it is unwired in this task.
240
+ */
241
+ export function inPlaceStrategy(options: {
242
+ /** The current checkout to operate in. */
243
+ checkout: string;
244
+ /** Name of the checkout's arbiter git remote. Defaults to `origin`. */
245
+ arbiter?: string;
246
+ }): IsolationStrategy {
247
+ const arbiter = options.arbiter ?? 'origin';
248
+ const checkout = options.checkout;
249
+ return {
250
+ name: 'in-place',
251
+ prepare({slug, type, claimCommit, env}): IsolatedTree {
252
+ const branch = workBranchRef(type ?? 'task', slug);
253
+ const arbiterUrl = git(['remote', 'get-url', arbiter], checkout, {
254
+ env,
255
+ }).trim();
256
+
257
+ git(['fetch', '--quiet', arbiter], checkout, {env});
258
+
259
+ // CONTINUE-detection (shared with the job-worktree path, ADR §14 keystone):
260
+ // does the arbiter have a `work/<slug>` ref AHEAD of main (a requeue kept
261
+ // it)? In a normal clone the refs are the remote-tracking
262
+ // `<arbiter>/work/<slug>` and `<arbiter>/main`.
263
+ let continued = false;
264
+ let continueRebaseConflict = false;
265
+ let continuePushFailure: string | undefined;
266
+ // ARBITER-AUTHORITATIVE continue-detection: `ls-remote` the arbiter so a
267
+ // STALE local remote-tracking ref (a plain `git fetch` does NOT prune
268
+ // unless `fetch.prune` is set) pointing at a branch the arbiter no longer
269
+ // has cannot resurrect a deleted branch as a "continue".
270
+ if (
271
+ branchAheadOfArbiter({
272
+ cwd: checkout,
273
+ arbiterRemote: arbiter,
274
+ branch,
275
+ branchRef: `${arbiter}/${branch}`,
276
+ mainRef: `${arbiter}/main`,
277
+ env,
278
+ })
279
+ ) {
280
+ continued = true;
281
+ // The arbiter `work/<slug>` tip the fetch above brought down, READ BEFORE
282
+ // the onboard rebase rewrites the local branch — the value the
283
+ // --force-with-lease push expects the arbiter to still hold. In a normal
284
+ // clone this lives in the remote-tracking ref `<arbiter>/<branch>` (the
285
+ // rebase below rewrites only the LOCAL `<branch>`, so the tracking ref keeps
286
+ // the pre-rebase arbiter sha). Captured here, threaded into the stale-lease
287
+ // retry below so a requeue-continue that churns the ref after our fetch is
288
+ // re-leased against the freshly-fetched tip rather than stranding the work.
289
+ const expectedRemoteTip = git(
290
+ ['rev-parse', `${arbiter}/${branch}`],
291
+ checkout,
292
+ {env},
293
+ ).trim();
294
+ // CONTINUE: land on the kept arbiter tip (force-reset a stale local copy
295
+ // so we continue the SAME single branch), then REBASE onto fresh main at
296
+ // onboard-time (ADR §10: rebase, not merge). A CLEAN rebase updates the
297
+ // already-pushed tip with --force-with-lease on the WORK branch ONLY
298
+ // (a requeued item is unshared) — NEVER --force, NEVER to main (§11),
299
+ // SURVIVING a stale-lease ("stale info") rejection by re-fetching +
300
+ // re-rebasing + retrying (the SAME helper `workspace.ts` uses). A
301
+ // CONFLICT is aborted (never auto-resolved) + flagged for the caller to
302
+ // route to needs-attention.
303
+ git(
304
+ ['switch', '--quiet', '-C', branch, `${arbiter}/${branch}`],
305
+ checkout,
306
+ {env},
307
+ );
308
+ const rebase = rebaseContinuedBranchOntoMain(
309
+ checkout,
310
+ `${arbiter}/main`,
311
+ env,
312
+ );
313
+ if (rebase.kind === 'conflict') {
314
+ continueRebaseConflict = true;
315
+ } else {
316
+ // The helper THROWS on a terminal failure (the stale-lease retry cap, or
317
+ // a non-stale-lease rejection / unreachable arbiter). CATCH it and flag
318
+ // `continuePushFailure` so the caller routes the item to needs-attention
319
+ // — the kept work stays committed + recoverable — rather than crashing
320
+ // the run and stranding it silently in-progress (the stale-lease bug).
321
+ try {
322
+ const pushed = pushContinuedBranchWithStaleLeaseRetry({
323
+ cwd: checkout,
324
+ branch,
325
+ arbiter,
326
+ mainRef: `${arbiter}/main`,
327
+ expectedRemoteTip,
328
+ env,
329
+ });
330
+ if (pushed.kind === 'conflict') {
331
+ continueRebaseConflict = true;
332
+ }
333
+ } catch (err) {
334
+ continuePushFailure =
335
+ err instanceof Error ? err.message : String(err);
336
+ }
337
+ }
338
+ } else {
339
+ // FRESH: put the checkout on the namespaced work branch cut from the
340
+ // EXACT claim commit (the defensive onboarding guard). When a
341
+ // `claimCommit` is threaded in (the normal `do` build path), assert it is
342
+ // reachable from the freshly-fetched `<arbiter>/main` and force-RESET the
343
+ // branch onto it with `-C` — so a stale same-named local branch (e.g. one
344
+ // `intake` left behind, or a prior re-run) is RE-POINTED at the claim
345
+ // commit, NEVER silently reused on a pre-claim base (the "nothing to
346
+ // complete" defect). Mirrors the CONTINUE path's `-C`. A missing /
347
+ // unreachable claim commit FAILS LOUDLY — never a silent stale-base build.
348
+ if (claimCommit !== undefined) {
349
+ assertClaimCommitReachable(
350
+ checkout,
351
+ claimCommit,
352
+ `${arbiter}/main`,
353
+ env,
354
+ );
355
+ git(['switch', '--quiet', '-C', branch, claimCommit], checkout, {
356
+ env,
357
+ });
358
+ } else {
359
+ // No claim commit (a bare resume / re-run with no claim in hand): cut
360
+ // off the freshly-fetched `<arbiter>/main`; plain-switch a pre-existing
361
+ // local branch.
362
+ const created = gitSoftSwitch(
363
+ ['switch', '--quiet', '-c', branch, `${arbiter}/main`],
364
+ checkout,
365
+ env,
366
+ );
367
+ if (!created) {
368
+ git(['switch', '--quiet', branch], checkout, {env});
369
+ }
370
+ }
371
+ }
372
+
373
+ return {
374
+ dir: checkout,
375
+ branch,
376
+ arbiterRemote: arbiter,
377
+ arbiterUrl,
378
+ continued,
379
+ continueRebaseConflict,
380
+ continuePushFailure,
381
+ // NO-OP teardown: the checkout is the human's / CI's tree — left on
382
+ // `work/<slug>` in a defined state, NEVER reaped (ADR §2/§4). The
383
+ // human's `complete` (or the runner) owns the branch lifecycle.
384
+ // `reachableOnly` is irrelevant here (nothing is ever reaped in-place).
385
+ teardown(): void {},
386
+ };
387
+ },
388
+ };
389
+ }
390
+
391
+ /**
392
+ * Assert the claim commit is reachable from `<arbiter>/main` (an ancestor),
393
+ * throwing a CLEAR error if not — the LOUD-failure guard the FRESH onboarding
394
+ * path uses before force-resetting the work branch onto the claim commit. A
395
+ * not-yet-fetched or rolled-back arbiter main that does NOT reach the claim must
396
+ * fail fast here, never silently build on a stale base.
397
+ */
398
+ function assertClaimCommitReachable(
399
+ checkout: string,
400
+ claimCommit: string,
401
+ mainRef: string,
402
+ env: NodeJS.ProcessEnv | undefined,
403
+ ): void {
404
+ const reachable = gitSoftSwitch(
405
+ ['merge-base', '--is-ancestor', claimCommit, mainRef],
406
+ checkout,
407
+ env,
408
+ );
409
+ if (!reachable) {
410
+ throw new Error(
411
+ `onboarding '${claimCommit}' failed: the claim commit is not reachable ` +
412
+ `from ${mainRef} (the claim push did not land, or local ${mainRef} is ` +
413
+ 'stale). Refusing to build on a stale base — re-fetch the arbiter and ' +
414
+ 'retry, or `requeue` the item.',
415
+ );
416
+ }
417
+ }
418
+
419
+ /** Try a git switch; return true on success, false on non-zero (no throw). */
420
+ function gitSoftSwitch(
421
+ args: string[],
422
+ cwd: string,
423
+ env: NodeJS.ProcessEnv | undefined,
424
+ ): boolean {
425
+ try {
426
+ git(args, cwd, {env});
427
+ return true;
428
+ } catch {
429
+ return false;
430
+ }
431
+ }
432
+
433
+ /** How {@link selectIsolationStrategy} chooses between the two strategies. */
434
+ export interface SelectIsolationInput {
435
+ /**
436
+ * The current checkout, when there IS one (the human's clone / CI container).
437
+ * Its presence selects the **in-place** strategy. Absent ⇒ the **job-worktree**
438
+ * strategy (materialise a mirror + worktree in the agents' area).
439
+ */
440
+ checkout?: string;
441
+ /**
442
+ * A working repo to resolve the arbiter URL from for the job-worktree
443
+ * strategy (with `arbiter`). Required when `checkout` is absent.
444
+ */
445
+ fromRepo?: string;
446
+ /** Arbiter remote name (default `origin`), used by either strategy. */
447
+ arbiter?: string;
448
+ /** The execution working area for the job-worktree strategy (`workspacesDir`). */
449
+ workspacesDir?: string;
450
+ }
451
+
452
+ /**
453
+ * Select the isolation strategy by **"is there a checkout"** (ADR §3) — NOT a
454
+ * hardcoded path:
455
+ *
456
+ * - `checkout` present ⇒ {@link inPlaceStrategy} (the checkout IS the
457
+ * isolation; `do <slug>` in a checkout, the in-place human path).
458
+ * - `checkout` absent ⇒ {@link jobWorktreeStrategy} (mirror + worktree in the
459
+ * agents' area; `do --remote` / `run`).
460
+ *
461
+ * Both yield the same uniform handle, so the caller's pipeline is identical
462
+ * regardless of which strategy was selected.
463
+ */
464
+ export function selectIsolationStrategy(
465
+ input: SelectIsolationInput,
466
+ ): IsolationStrategy {
467
+ if (input.checkout !== undefined) {
468
+ return inPlaceStrategy({
469
+ checkout: input.checkout,
470
+ arbiter: input.arbiter,
471
+ });
472
+ }
473
+ if (input.fromRepo === undefined || input.workspacesDir === undefined) {
474
+ throw new Error(
475
+ 'selectIsolationStrategy: the job-worktree strategy (no checkout) ' +
476
+ 'requires both `fromRepo` and `workspacesDir`.',
477
+ );
478
+ }
479
+ return jobWorktreeStrategy({
480
+ fromRepo: input.fromRepo,
481
+ arbiter: input.arbiter,
482
+ workspacesDir: input.workspacesDir,
483
+ });
484
+ }