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,226 @@
1
+ /**
2
+ * The CI CLOSE-JOB driver (prd `runner-in-ci`, capability E; task
3
+ * `install-ci-close-job-workflow`). When work lands on `main`, this resolves which
4
+ * source issue(s) the landed work closes and closes them — but it OWNS none of the
5
+ * machinery it relies on. It is the thin JOB that WIRES three UNCHANGED engine
6
+ * pieces together (the Out-of-Scope fence: do NOT re-build them):
7
+ *
8
+ * - the RESOLUTION — {@link resolveClosingIssue} (`frontmatter.ts`): an artifact
9
+ * uses `issue:` XOR `prd:`; a lone task closes its own `issue:` directly, a
10
+ * fanned task reaches the number via `task.prd: → work/prds/<prd>.md prd
11
+ * issue:`, and `prd:` WINS on a (hand-edited) conflict;
12
+ * - the QUERY — {@link isSpecComplete} (`spec-complete.ts`, task
13
+ * `prd-complete-query`, done): a spec is COMPLETE iff ≥1 `spec:<slug>` task AND
14
+ * all such tasks are in `work/done/`;
15
+ * - the CLOSE — {@link IssueProvider.closeIssue} (`issue-provider.ts`, the atomic
16
+ * comment+close seam intake already uses): NO direct `gh` in this core; any
17
+ * informational comment rides the SAME close call (never the PR seam
18
+ * `postPRComment`).
19
+ *
20
+ * The closure conditions, per artifact kind:
21
+ *
22
+ * - a **lone task** (`issue:`, no `prd:`) that resides in `work/done/` — its PR
23
+ * merged, so its own issue closes (reason `completed`);
24
+ * - a **prd** (`issue:`) — closes ONLY when {@link isSpecComplete} says ALL its
25
+ * `spec:<slug>` tasks are in `work/done/` (reason `completed`).
26
+ *
27
+ * A prd whose query is NOT yet complete is left OPEN (the final fanned task's
28
+ * merge tick closes it). A lone task still outside `work/done/` is skipped. The
29
+ * close DEGRADES (never throws) on a missing/unauthenticated provider, exactly
30
+ * like intake's bounce close — the run reports the real cause and stays exit-0.
31
+ *
32
+ * This is the JOB the close-job WORKFLOW (capability E) invokes via
33
+ * `dorfl close-merged-issues`; the workflow is triggered on a merge to
34
+ * `main` (`push: {branches: [main]}`). The driver itself is provider-pluggable
35
+ * (it takes an {@link IssueProvider}) and reads only the `work/` tree.
36
+ */
37
+ import { readdirSync, readFileSync } from 'node:fs';
38
+ import { basename, join } from 'node:path';
39
+ import { TASK_LIFECYCLE_FOLDERS, SPEC_FOLDERS, workFolderPath, workItemRel, isWorkItemFile, } from './work-layout.js';
40
+ import { parseFrontmatter, resolveClosingIssue } from './frontmatter.js';
41
+ import { isSpecComplete } from './spec-complete.js';
42
+ import { GitHubIssueProvider, } from './issue-provider.js';
43
+ /** The task lifecycle folders a lone-task `issue:` can reside in. */
44
+ const TASK_FOLDERS = TASK_LIFECYCLE_FOLDERS;
45
+ /** The spec folders an `issue:`-bearing spec can reside in. */
46
+ const SPEC_LIFECYCLE_FOLDERS = SPEC_FOLDERS;
47
+ /** List the `.md` filenames in `<repoPath>/work/<folder>/`, sorted; `[]` if absent. */
48
+ function listMarkdown(repoPath, folder) {
49
+ const dir = workFolderPath(repoPath, folder);
50
+ let entries;
51
+ try {
52
+ entries = readdirSync(dir);
53
+ }
54
+ catch {
55
+ return [];
56
+ }
57
+ return entries.filter((name) => isWorkItemFile(name)).sort();
58
+ }
59
+ /**
60
+ * Read a prd's `issue:` number by slug, scanning the prd folders. Returns
61
+ * `undefined` when no prd with that slug carries an `issue:` (a prd with no source
62
+ * issue, or a typo'd `prd:` hop — degrades to "no issue to close", never crashes).
63
+ */
64
+ function specIssueNumber(repoPath, specSlug) {
65
+ for (const folder of SPEC_LIFECYCLE_FOLDERS) {
66
+ for (const file of listMarkdown(repoPath, folder)) {
67
+ const fm = parseFrontmatter(readFileSync(join(repoPath, workItemRel(folder, file)), 'utf8'));
68
+ const slug = fm.slug ?? basename(file, '.md');
69
+ if (slug === specSlug && fm.issue !== undefined) {
70
+ return fm.issue;
71
+ }
72
+ }
73
+ }
74
+ return undefined;
75
+ }
76
+ /**
77
+ * Resolve the DEDUPLICATED set of closure candidates from the `work/` tree, each
78
+ * via the UNCHANGED {@link resolveClosingIssue}:
79
+ *
80
+ * - every prd carrying `issue:` (in `work/prds/ready/` or `work/prds/tasked/`) is a
81
+ * prd-kind candidate keyed on its own `prd:` query;
82
+ * - every LONE task (`issue:` and NO `prd:`) is an `issue`-kind candidate.
83
+ *
84
+ * A fanned task carries `prd:` (NOT its own `issue:`), so it reaches the number
85
+ * through its prd's candidate, never as its own — the issue number lives ONLY on
86
+ * the prd. Deduplicated by issue number: a prd enumerated once even though many
87
+ * tasks point at it. Prd candidates are listed before lone-task candidates, each
88
+ * group slug-sorted, for a deterministic log.
89
+ */
90
+ function resolveCandidates(repoPath) {
91
+ const seen = new Set();
92
+ const specCandidates = [];
93
+ const taskCandidates = [];
94
+ // Spec candidates: a spec's `issue:` closes when ITS query is complete.
95
+ for (const folder of SPEC_LIFECYCLE_FOLDERS) {
96
+ for (const file of listMarkdown(repoPath, folder)) {
97
+ const fm = parseFrontmatter(readFileSync(join(repoPath, workItemRel(folder, file)), 'utf8'));
98
+ const slug = fm.slug ?? basename(file, '.md');
99
+ const closing = resolveClosingIssue(fm);
100
+ // A prd's own closing link is its `issue:` (a prd has no `prd:`); on the
101
+ // hand-edit conflict `prd:` wins via resolveClosingIssue, so only a true
102
+ // `issue:`-bearing prd becomes a candidate here.
103
+ if (closing?.via === 'issue' && !seen.has(closing.issue)) {
104
+ seen.add(closing.issue);
105
+ specCandidates.push({ issueNumber: closing.issue, via: 'spec', slug });
106
+ }
107
+ }
108
+ }
109
+ // Lone-task candidates: a task with `issue:` and NO `prd:` closes its OWN
110
+ // issue directly when it lands in work/done/.
111
+ for (const folder of TASK_FOLDERS) {
112
+ for (const file of listMarkdown(repoPath, folder)) {
113
+ const fm = parseFrontmatter(readFileSync(join(repoPath, workItemRel(folder, file)), 'utf8'));
114
+ const slug = fm.slug ?? basename(file, '.md');
115
+ const closing = resolveClosingIssue(fm);
116
+ // `resolveClosingIssue` returns `via: 'issue'` ONLY when there is no `prd:`
117
+ // (prd wins on conflict), so a fanned task never lands here — it reaches
118
+ // its issue through the prd candidate above.
119
+ if (closing?.via === 'issue' && !seen.has(closing.issue)) {
120
+ seen.add(closing.issue);
121
+ taskCandidates.push({ issueNumber: closing.issue, via: 'issue', slug });
122
+ }
123
+ }
124
+ }
125
+ specCandidates.sort((a, b) => a.slug.localeCompare(b.slug));
126
+ taskCandidates.sort((a, b) => a.slug.localeCompare(b.slug));
127
+ return [...specCandidates, ...taskCandidates];
128
+ }
129
+ /** True iff the lone task with this slug resides in `work/done/`. */
130
+ function loneTaskLanded(repoPath, taskSlug) {
131
+ for (const file of listMarkdown(repoPath, 'done')) {
132
+ const fm = parseFrontmatter(readFileSync(join(repoPath, workItemRel('done', file)), 'utf8'));
133
+ const slug = fm.slug ?? basename(file, '.md');
134
+ if (slug === taskSlug) {
135
+ return true;
136
+ }
137
+ }
138
+ return false;
139
+ }
140
+ /** The closing comment posted (atomically, on the close call) for each kind. */
141
+ function closeComment(via, slug) {
142
+ return via === 'spec'
143
+ ? `Closed by dorfl: every task of spec \`${slug}\` has landed in \`work/done/\`.`
144
+ : `Closed by dorfl: the task \`${slug}\` has landed in \`work/done/\`.`;
145
+ }
146
+ /**
147
+ * Run the close-job over a repo's `work/` tree: resolve the closure candidates,
148
+ * apply the per-kind closure condition (a landed lone task; a prd whose
149
+ * {@link isSpecComplete} query holds), and close the qualifying issues through the
150
+ * {@link IssueProvider.closeIssue} seam (reason `completed`, an informational
151
+ * comment riding the SAME atomic close). REUSES the unchanged resolution + query +
152
+ * close — it re-implements NONE of them. NEVER throws: a degraded provider close
153
+ * is reported as `close-failed`, not a crash (the terminal CI tick stays exit-0).
154
+ */
155
+ export async function runCloseJob(options) {
156
+ const { repoPath, issueProvider, env } = options;
157
+ const candidates = [];
158
+ const closed = [];
159
+ const completedReason = 'completed';
160
+ for (const cand of resolveCandidates(repoPath)) {
161
+ // The closure CONDITION per kind — the only place this job decides; the
162
+ // computation of "complete" / "landed" is the UNCHANGED engine query.
163
+ let shouldClose;
164
+ let notReady;
165
+ if (cand.via === 'spec') {
166
+ shouldClose = isSpecComplete({ repoPath, slug: cand.slug }).complete;
167
+ notReady = 'not-complete';
168
+ }
169
+ else {
170
+ shouldClose = loneTaskLanded(repoPath, cand.slug);
171
+ notReady = 'not-landed';
172
+ }
173
+ if (!shouldClose) {
174
+ candidates.push({
175
+ issueNumber: cand.issueNumber,
176
+ via: cand.via,
177
+ slug: cand.slug,
178
+ decision: notReady,
179
+ });
180
+ continue;
181
+ }
182
+ // CLOSE via the provider seam (NO direct `gh`): comment + reason + close in
183
+ // ONE atomic call, exactly the seam intake's bounce uses.
184
+ const result = await issueProvider.closeIssue({
185
+ cwd: repoPath,
186
+ issueNumber: cand.issueNumber,
187
+ comment: closeComment(cand.via, cand.slug),
188
+ reason: completedReason,
189
+ env,
190
+ });
191
+ if (result.closed) {
192
+ closed.push(cand.issueNumber);
193
+ candidates.push({
194
+ issueNumber: cand.issueNumber,
195
+ via: cand.via,
196
+ slug: cand.slug,
197
+ decision: 'closed',
198
+ });
199
+ }
200
+ else {
201
+ candidates.push({
202
+ issueNumber: cand.issueNumber,
203
+ via: cand.via,
204
+ slug: cand.slug,
205
+ decision: 'close-failed',
206
+ reason: result.reason ?? result.instruction,
207
+ });
208
+ }
209
+ }
210
+ return { candidates, closed };
211
+ }
212
+ /**
213
+ * The CLI entry the close-job WORKFLOW invokes (`dorfl
214
+ * close-merged-issues`): construct the GitHub issue provider and run the
215
+ * close-job over the checkout's `work/` tree. Provider-pluggable via
216
+ * {@link runCloseJob}; this wrapper only picks the default (GitHub) adapter.
217
+ */
218
+ export async function performCloseMergedIssues(options) {
219
+ const issueProvider = new GitHubIssueProvider({ ghBin: options.ghBin });
220
+ return runCloseJob({
221
+ repoPath: options.repoPath,
222
+ issueProvider,
223
+ env: options.env,
224
+ });
225
+ }
226
+ //# sourceMappingURL=close-job.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"close-job.js","sourceRoot":"","sources":["../src/close-job.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,361 @@
1
+ import type { VerifyConfig } from './verify.js';
2
+ import type { ReviewGate } from './review-gate.js';
3
+ import { synthesiseProposeTitle, composeProposeBody, PR_TITLE_MAX } from './integration-core.js';
4
+ import type { ReviewProvider } from './integrator.js';
5
+ import type { IntegrationMode } from './config.js';
6
+ export { synthesiseProposeTitle, composeProposeBody, PR_TITLE_MAX };
7
+ /**
8
+ * `dorfl complete [<slug>] [--skip-verify] [--type <t>] [--message <s>]
9
+ * [--arbiter <remote>]` — the human "finish this" command that runs the same
10
+ * back-half the autonomous runner runs: gate → mark done → commit → integrate.
11
+ *
12
+ * It runs on a `work/<slug>` branch (slug inferred from the branch if omitted).
13
+ * The build agent leaves its work UNCOMMITTED (it does no git), so `complete`
14
+ * `git add -A`s the agent's work AND the done-move into ONE atomic commit. This
15
+ * is the same finish/integration logic `run-once`/`watch` reuse; here it is
16
+ * human-driven and so allows a `--skip-verify` escape hatch the autonomous
17
+ * runner never uses (ADR §8).
18
+ *
19
+ * The item's SOURCE folder is normally `work/tasks/ready/` (the pool — claim
20
+ * leaves the body there, task
21
+ * `cutover-claim-body-stays-and-complete-sources-from-backlog`). A RUNNER-OWNED
22
+ * RECOVERY of a SPURIOUSLY-stuck item (env-polluted gate, transient flake,
23
+ * since-fixed cause) sources from the SAME pool location: the per-item-lock
24
+ * cutover (`cutover-needs-attention-becomes-lock-stuck-recovery-surface`)
25
+ * retired the `work/needs-attention/` folder — stuck is the lock `state: stuck`
26
+ * and the body stays in `tasks/ready/` while claimed, so a recovery `complete`
27
+ * is structurally a normal build. The gate is RE-RUN and authoritative (only a
28
+ * GREEN re-gate completes; a still-red item stays stuck on the lock).
29
+ * `--skip-verify` stays the only, human-only, loud override.
30
+ *
31
+ * The integration step is split by mode (config `integration`, ADR §6):
32
+ * merge — push the rebased branch to `<arbiter>/main`, then sync the LOCAL
33
+ * clone to that new main (the push is authoritative; the local sync
34
+ * is the ergonomic finish so the user ends on an up-to-date main).
35
+ * propose — push the `work/<slug>` branch (the safety-bearing step) and report
36
+ * the next step. Full provider-driven PR/MR creation lands with the
37
+ * integration seam; until then `complete` pushes + tells the human.
38
+ *
39
+ * In BOTH modes `complete` lands the human back on local `main` by default
40
+ * ("finish, ready for the next thing") — but the move differs because the work's
41
+ * location differs: `merge` switches to `main` AND fast-forwards it to the just-
42
+ * pushed `<arbiter>/main` (the work landed there); `propose` ONLY `git switch
43
+ * main` (arbiter main has not moved, so there is nothing to ff). `--no-switch`
44
+ * opts out in either mode (stay on `work/<slug>` to keep iterating).
45
+ *
46
+ * After landing on `main`, the LOCAL `work/<slug>` branch is deleted iff its work
47
+ * is provably on the arbiter (the SAME predicate as worktree deletion, ADR §4,
48
+ * mode-agnostic): its tip is an ancestor of `<arbiter>/main` (merged) OR
49
+ * `<arbiter>/work/<slug>` exists with its tip == the local tip (pushed & up-to-
50
+ * date). Otherwise the branch is KEPT (unmerged / unpushed / a diverged un-pushed
51
+ * amend = not safe). The REMOTE branch is NEVER deleted (a propose PR is built
52
+ * from it). `--no-switch` keeps the branch too.
53
+ *
54
+ * Before integrating, the work branch is rebased onto the latest `<arbiter>/main`
55
+ * (ADR §10): a clean rebase continues; a conflicting rebase is `--abort`ed and
56
+ * surfaced as needs-attention — `complete` NEVER auto-resolves. It NEVER
57
+ * `--force`es to main.
58
+ *
59
+ * Exit codes:
60
+ * 0 completed (done-move + commit + integrate succeeded)
61
+ * 1 usage/environment error, or a refusal (gate failed, nothing to commit,
62
+ * not on a work branch, rebase conflict needs the human)
63
+ *
64
+ * On the two FAILURE paths the human can't paper over — a red gate (without
65
+ * `--skip-verify`) and a rebase conflict (ADR §10) — `complete` no longer leaves
66
+ * the item dangling. Instead it routes the item through the shared
67
+ * `needs-attention` mechanism (ADR §12): record the reason on the per-item lock
68
+ * entry (`state: stuck`, post-cutover task
69
+ * `cutover-needs-attention-becomes-lock-stuck-recovery-surface`) so the stuck
70
+ * item is surfaced by `status` and returnable to `backlog/`. The success and
71
+ * `--skip-verify` paths are unchanged. The exit code stays 1 (the work did NOT
72
+ * complete); the outcome still names WHY (gate-failed / rebase-conflict) and
73
+ * `routedToNeedsAttention` records that the lock amend happened.
74
+ */
75
+ export type CompleteOutcome = 'completed' | 'already-integrated' | 'prepare-failed' | 'gate-failed' | 'review-blocked' | 'review-unparseable' | 'rebase-conflict' | 'invariant-violation' | 'strand-surfaced' | 'surface-unmoved' | 'refused' | 'usage-error';
76
+ export interface CompleteOptions {
77
+ /** The slug to complete. If omitted, inferred from a `work/<slug>` branch. */
78
+ slug?: string;
79
+ /** The working clone/checkout the work branch lives in. */
80
+ cwd: string;
81
+ /** Name of the arbiter git remote. Defaults to `origin`. */
82
+ arbiter?: string;
83
+ /** Integration mode: `propose` (default) or `merge`. */
84
+ integration?: IntegrationMode;
85
+ /**
86
+ * **The explicit `--merge` override** for the untrusted-origin build-propose rule
87
+ * (task `untrusted-origin-forces-build-propose`). `true` iff the operator
88
+ * EXPLICITLY typed `--merge` on this invocation (vs `merge` resolved from
89
+ * config). Forwarded to {@link performIntegration}'s `explicitMerge`: an explicit
90
+ * `--merge` OVERRIDES the untrusted-origin build-propose rule (the operator is
91
+ * present; CLI always wins). Unset on the autonomous path ⇒ an untrusted-origin
92
+ * task reliably forces `propose`.
93
+ */
94
+ explicitMerge?: boolean;
95
+ /**
96
+ * Override the pre-flight DIVERGENCE guard (`--ignore-diverged-main`, mirroring
97
+ * `--ignore-not-ready`): proceed even when local `main` is ahead of
98
+ * `<arbiter>/main` (has unpushed commits). MERGE MODE ONLY (only merge mode ff's
99
+ * local `main`). When overridden and the divergence persists, the now-NON-FATAL
100
+ * {@link syncLocalMain} reports it honestly (work on the arbiter; local `main`
101
+ * left to rebase). Loud, never the default.
102
+ */
103
+ ignoreDivergedMain?: boolean;
104
+ /**
105
+ * Leave the human ON the `work/<slug>` branch (and KEEP it) in either mode,
106
+ * instead of switching back to `main` + deleting the provably-landed branch.
107
+ * For "I'll keep iterating on this branch" (e.g. addressing review feedback).
108
+ */
109
+ noSwitch?: boolean;
110
+ /** The declared per-repo ENV-PREP step (string | list), run ONCE before the
111
+ * first `verify` to make the env ready. Unset ⇒ a no-op (NO default install). */
112
+ prepare?: VerifyConfig;
113
+ /** The declared per-repo gate (string | list). Unset ⇒ the default command. */
114
+ verify?: VerifyConfig;
115
+ /**
116
+ * Run the acceptance gate (`prepare` then `verify`) against the REBASED tip
117
+ * in a CLEAN throwaway worktree (the tree that integrates) when `true` (the
118
+ * default), rather than the current checkout (the pre-rebase tree) when
119
+ * `false`. `complete` is a SINGLE-JOB path, so this is the resolved flag
120
+ * passed UNCONDITIONALLY (no `run`-fleet downgrade). Forwarded verbatim to
121
+ * {@link performIntegration}.
122
+ */
123
+ freshWorktreeGate?: boolean;
124
+ /**
125
+ * **The cross-job merge-serialiser CAS-retry cap** (config `mergeRetries`, prd
126
+ * `land-time-reverify-and-parallel-merge-ceiling` Story 5 / Applied Answer q1
127
+ * (a)). Threaded verbatim into {@link performIntegration} as `mergeRetries` so
128
+ * the resolved per-repo value controls how many re-rebase-and-retry attempts
129
+ * the merge-mode `${branch}:main` push makes before a contender bounces to
130
+ * needs-attention. Resolved ONCE per `performComplete` call — the same
131
+ * per-item resolution as `freshWorktreeGate` / `reviewMaxRounds`.
132
+ */
133
+ mergeRetries?: number;
134
+ /** Skip the acceptance gate (human-only escape hatch; never used unattended). */
135
+ skipVerify?: boolean;
136
+ /**
137
+ * **`--allow-backlog`** (prd
138
+ * `do-allow-backlog-drive-staged-tasks-without-promotion`): TREAT a
139
+ * `tasks/backlog/`-resident body (staging) as a VALID build source, so a
140
+ * staged task driven in place done-moves `tasks/backlog/ → tasks/done/`
141
+ * directly. GATED on the explicit flag: WITHOUT it, a body resting in
142
+ * `tasks/backlog/` is NOT a sanctioned completion position (a corrupt/wip
143
+ * strand) and `complete` still REFUSES honestly — only the deliberate drive
144
+ * promotes from staging. Default off ⇒ today's refusal-on-staging behaviour.
145
+ * Threaded only by the `do … --allow-backlog` task-build path; no autonomous
146
+ * caller sets it.
147
+ */
148
+ allowBacklog?: boolean;
149
+ /**
150
+ * **Gate 2 — the PR/code review gate** (GATES prd `work/prds/tasked/review.md`). When
151
+ * `true`, after the green `verify` and BEFORE the done-move, run the `review`
152
+ * SKILL as a FRESH-CONTEXT agent (its own harness launch) and route its verdict:
153
+ * `approve` → proceed to done-move/commit/integrate; `block` → route to
154
+ * needs-attention (NEVER merge). `verify` is the non-skippable floor; review is
155
+ * a JUDGEMENT gate ON TOP (ADR §8), never a replacement. Default OFF.
156
+ */
157
+ review?: boolean;
158
+ /**
159
+ * The model the REVIEW agent runs on (de-correlation from the builder). Flows
160
+ * to the review-agent launch through the EXISTING harness seam
161
+ * (`LaunchInput.model` / `substituteModel`). Unset ⇒ no forced review model.
162
+ */
163
+ reviewModel?: string;
164
+ /**
165
+ * Bound the revise↔review loop (Gate 2). On exhaustion the gate ERRORS OUT and
166
+ * forces needs-attention (never silently merges or loops). Defaults to 2.
167
+ */
168
+ reviewMaxRounds?: number;
169
+ /**
170
+ * The review-gate SEAM (injectable, like `do`'s `dorfl`): a fresh-context
171
+ * review that returns a parsed `{verdict, findings}`. Tests inject a canned
172
+ * verdict (no real model); production wires the harness-backed gate
173
+ * (`harnessReviewGate`). Required when `review` is on (a missing gate with
174
+ * `review` on is a usage error — the floor must not be silently skipped).
175
+ */
176
+ reviewGate?: ReviewGate;
177
+ /**
178
+ * `--watch`: tail the Gate-2 REVIEW agent's pi session `.jsonl` live, the SAME
179
+ * way `do --watch` tails the build agent's (task `watch-review-session`).
180
+ * Threaded into the `reviewGate` invocation below so the production gate
181
+ * (`harnessReviewGate`) routes its launch through the shared
182
+ * `launchWithOptionalWatch` helper. OFF (the default) ⇒ the review path is
183
+ * byte-for-byte unchanged (sync launch, no tailer). Observability only — it
184
+ * never changes the verdict/routing.
185
+ */
186
+ watch?: boolean;
187
+ /** Where the tailed review lines are written (defaults to stderr). */
188
+ watchSink?: (line: string) => void;
189
+ /**
190
+ * The HOST-ONLY sessions root the review session FILE is generated under
191
+ * (resolved `config.sessionsDir`). Threaded to the review-agent launch so its
192
+ * (distinct `<slug>-review`) session lands under the same root as the build's.
193
+ */
194
+ sessionsDir?: string;
195
+ /** Conventional-commit type for the completion commit. Defaults to `feat`. */
196
+ type?: string;
197
+ /** Commit summary. Defaults to the task `title` minus a leading `slug — `. */
198
+ message?: string;
199
+ /**
200
+ * Optional review-request BODY (propose mode) — the PR/MR DESCRIPTION, DISTINCT
201
+ * from {@link message} (which is the COMMIT summary). Advisory prose that gates
202
+ * nothing. The autonomous `do` path passes the build agent's final summary
203
+ * (`LaunchResult.output`); a human `complete --propose` may pass one via a NEW
204
+ * `--body` flag (NOT `--message`). The runner scaffolds a deterministic header
205
+ * (a pointer to `work/done/<slug>.md`) above it. Absent ⇒ today's `gh pr create
206
+ * --fill` empty/commit-derived body (no regression). Ignored in `merge` mode.
207
+ */
208
+ body?: string;
209
+ /** Optional injectable PR opener (e.g. `gh pr create`); used in `propose` mode. */
210
+ openPr?: (opts: {
211
+ cwd: string;
212
+ branch: string;
213
+ env?: NodeJS.ProcessEnv;
214
+ }) => void;
215
+ /**
216
+ * Optional FULLY-FORMED review provider INSTANCE used VERBATIM (the SAME seam
217
+ * `run` exposes via `RunOptions.provider`; forwarded to `performIntegration` as
218
+ * `providerInstance`). Tests/embeddings inject a stubbed `GitHubProvider` (a
219
+ * custom `gh` path) to drive the full propose pipeline OFFLINE without a real
220
+ * GitHub arbiter. This is the resolved provider OBJECT — NOT a config override
221
+ * (there is none; the provider is purely arbiter-derived). Unset ⇒ the core
222
+ * selects the provider from the arbiter URL as normal.
223
+ */
224
+ providerInstance?: ReviewProvider;
225
+ /**
226
+ * **The PR-INTENT axis** (config `noPR`, ADR §6). When `true` on the propose
227
+ * path, push the branch but SKIP the review request (the explicit suppress-PR
228
+ * intent, re-homing the old `provider: none` use). NOT a provider choice — the
229
+ * provider is purely arbiter-derived. Threaded verbatim into
230
+ * {@link performIntegration}. Ignored in `merge` mode and when `openPr` is
231
+ * injected. Unset/false ⇒ propose opens the PR via the arbiter-derived provider.
232
+ */
233
+ noPR?: boolean;
234
+ /**
235
+ * Surface a needs-attention bounce ON THE ARBITER (the AUTONOMOUS variant of
236
+ * the failure path). When set, the two FAILURE routings (`gate-failed` /
237
+ * `rebase-conflict`) pass this arbiter remote into the ledger write seam's
238
+ * `applyNeedsAttentionTransition`, which (mode M) cherry-picks the move-only
239
+ * commit onto the arbiter's `main` — making the stuck state observable to
240
+ * `scan`/`status`/another machine. This is exactly what `run`'s `runOneItem`
241
+ * does (it passes `arbiter: job.arbiterRemote`).
242
+ *
243
+ * Unset (the default) keeps `complete`'s HUMAN behaviour: route LOCALLY only
244
+ * (no on-`main` surfacing) — a human is right there, so no cross-machine
245
+ * surfacing is needed. The unattended `do` worker (the CI command) sets this
246
+ * so a stuck CI run is NOT invisible.
247
+ */
248
+ surfaceArbiter?: string;
249
+ /** Environment for child git/provider processes (the identity-scoped env). */
250
+ env?: NodeJS.ProcessEnv;
251
+ /**
252
+ * Environment for the REVIEW-AGENT launch (Gate 2) — the AMBIENT env, never the
253
+ * identity-scoped {@link env} (an agent must not act as the bot). Threaded to
254
+ * {@link performIntegration}'s `agentEnv`. Unset ⇒ falls back to {@link env}
255
+ * (byte-for-byte unchanged for non-identity callers, e.g. the human `complete`).
256
+ */
257
+ agentEnv?: NodeJS.ProcessEnv;
258
+ /** Sink for human-readable progress notes. */
259
+ note?: (message: string) => void;
260
+ /**
261
+ * Sink for a pre-formatted block printed VERBATIM (no `>> ` prefix), used for
262
+ * the visually-distinct propose-mode next-step block so its blank lines and
263
+ * heading stand out cleanly. Defaults to `note` when not supplied.
264
+ */
265
+ noteBlock?: (message: string) => void;
266
+ /**
267
+ * Emit ANSI color in the (cosmetic) propose-mode next-step block. Defaults
268
+ * to the TTY/`NO_COLOR` rule against `process.stdout`; injectable so tests
269
+ * can simulate a TTY (color) vs. a pipe / `NO_COLOR` (plain) without a real
270
+ * terminal. Color-only — it changes no gate/done-move/commit/integrate logic.
271
+ */
272
+ color?: boolean;
273
+ }
274
+ export interface CompleteResult {
275
+ exitCode: 0 | 1;
276
+ outcome: CompleteOutcome;
277
+ /**
278
+ * True iff a FAILURE outcome (gate-failed / rebase-conflict) was routed to
279
+ * `work/needs-attention/` via the shared mechanism (ADR §12), rather than left
280
+ * dangling. Undefined/false on the success, `--skip-verify`, refused, and
281
+ * usage-error paths (none of which move the item to needs-attention).
282
+ */
283
+ routedToNeedsAttention?: boolean;
284
+ /** The work branch that was completed, when one was resolved. */
285
+ branch?: string;
286
+ /** The completion commit message that was authored, on success. */
287
+ commitMessage?: string;
288
+ /** True when the work landed on the arbiter's `main` (merge mode). */
289
+ mergedToMain?: boolean;
290
+ /**
291
+ * Merge mode only: whether the LOCAL `main` was fast-forwarded to the
292
+ * just-pushed `<arbiter>/main` (the ergonomic courtesy AFTER the authoritative
293
+ * push). `true` on the normal ff path; `false` when local `main` had DIVERGED
294
+ * and the ff could not apply — a NON-FATAL skip (the arbiter push already
295
+ * defined success, so `outcome` stays `completed` / exit 0; the operator is told
296
+ * to `git rebase` to sync). Undefined outside merge mode / `--no-switch`.
297
+ */
298
+ localMainSynced?: boolean;
299
+ /** The branch HEAD ended on after completing (`main`, or the work branch). */
300
+ switchedTo?: string;
301
+ /** True iff the local `work/<slug>` branch was deleted (provably on arbiter). */
302
+ deletedLocalBranch?: boolean;
303
+ /**
304
+ * The review-request URL (e.g. a GitHub PR) opened in `propose` mode, when a
305
+ * provider opened one and reported it (ADR §6). Absent in merge mode and on
306
+ * the push-only / degraded path.
307
+ */
308
+ prUrl?: string;
309
+ /** Human-readable summary of the terminal condition. */
310
+ message: string;
311
+ }
312
+ /**
313
+ * Resolve the integration mode the human asked for ON THIS invocation from the
314
+ * mutually-exclusive `--merge` / `--propose` flags. Returns the explicit mode,
315
+ * or `undefined` when neither flag was given (per-repo > global > default then
316
+ * decides). Throws when BOTH are given (they are mutually exclusive). This is
317
+ * the TOP of the complete-time precedence chain (flag > per-repo > global >
318
+ * default); the autonomous runner uses no flag and so resolves the same
319
+ * underlying order.
320
+ */
321
+ export declare function integrationFromFlags(flags: {
322
+ merge?: boolean;
323
+ propose?: boolean;
324
+ }): IntegrationMode | undefined;
325
+ /**
326
+ * Run the complete ritual. Never throws for the expected gate-failed /
327
+ * rebase-conflict / refused cases — those are returned with exit 1 and a
328
+ * specific outcome. Usage/environment problems also surface as exit 1.
329
+ */
330
+ export declare function performComplete(options: CompleteOptions): Promise<CompleteResult>;
331
+ /**
332
+ * Sync the local `main` to the just-pushed `<arbiter>/main`: switch to main and
333
+ * fast-forward it. We fetch the arbiter's main (we just pushed our rebased work
334
+ * there) then `merge --ff-only` so the user lands on an up-to-date local main
335
+ * without merge noise.
336
+ *
337
+ * The ff is a COURTESY, NOT the safety-bearing step — the authoritative push to
338
+ * `<arbiter>/main` already defined `complete`'s success. So the ff is NON-FATAL:
339
+ * if local `main` has DIVERGED (unpushed commits the arbiter lacks) the ff cannot
340
+ * apply; rather than throw (which would make `complete` exit non-zero even though
341
+ * the merge ALREADY LANDED on the arbiter), we print a clear "rebase to sync"
342
+ * message and return `false` (the caller records `localMainSynced: false` and
343
+ * keeps `outcome: completed` / exit 0). Returns `true` on a normal ff.
344
+ *
345
+ * Only the diverged / ff-cannot-apply case is softened — the `fetch` and `switch`
346
+ * stay `gitHard` (a genuinely different failure is NOT masked, per the task).
347
+ * Exported for direct testing of the softened-vs-fatal boundary in isolation.
348
+ */
349
+ export declare function syncLocalMain(cwd: string, arbiter: string, env: NodeJS.ProcessEnv | undefined, note: (m: string) => void): Promise<boolean>;
350
+ /**
351
+ * The provably-safe predicate (ADR §4), mode-agnostic, applied to a LOCAL
352
+ * `branch` in `cwd`: true iff its tip is an ancestor of `<arbiter>/main` (merged)
353
+ * OR `<arbiter>/<branch>` exists with its tip == the local tip (pushed &
354
+ * up-to-date). False when the local branch is absent, or its work is unmerged /
355
+ * unpushed / a diverged un-pushed amend (remote tip != local tip). A `git fetch`
356
+ * refreshes the remote-tracking refs; an unreachable arbiter reads as not-
357
+ * provable → false (the safe direction). Exported for direct testing of the
358
+ * kept-vs-deleted decision in isolation.
359
+ */
360
+ export declare function isLocalBranchProvablyOnArbiter(cwd: string, arbiter: string, branch: string, env: NodeJS.ProcessEnv | undefined): Promise<boolean>;
361
+ //# sourceMappingURL=complete.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"complete.d.ts","sourceRoot":"","sources":["../src/complete.ts"],"names":[],"mappings":"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"}