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,432 @@
1
+ import {mkdirSync, rmSync} from 'node:fs';
2
+ import {dirname, join} from 'node:path';
3
+ import {git} from './git.js';
4
+ import {ensureMirror, encodeRepoKey} from './repo-mirror.js';
5
+ import {jobWorktreeDoDriver} from './do.js';
6
+ import {
7
+ pushTreelessResult,
8
+ TREELESS_RUNGS,
9
+ } from './advance-treeless-publish.js';
10
+ import {
11
+ performAdvance,
12
+ type AdvanceContext,
13
+ type AdvanceResult,
14
+ type AdvanceExitCode,
15
+ } from './advance.js';
16
+ import {scanMirrorPool} from './mirror-pool-scan.js';
17
+ import {ledgerRead, type LedgerReadStrategy} from './ledger-read.js';
18
+ import {selectPrioritised, type SelectedItem} from './select-priority.js';
19
+ import type {LifecyclePoolGates} from './lifecycle-pools.js';
20
+ import type {Config} from './config.js';
21
+ import type {AdvanceTickRunner, AdvanceMultiResult} from './advance-drivers.js';
22
+
23
+ /**
24
+ * The **ISOLATED advance-tick RUNNER** + its sequential drivers (prd
25
+ * `advance-loop`, task `advance-isolated-one-shot`, US #25/26) — the "isolated
26
+ * one-shot" cell `advance` was missing. It gives `advance` the SAME isolation
27
+ * ergonomic `do --isolated` has: run the advance TICK ({@link performAdvance}) in
28
+ * an ISOLATED worktree off THIS repo's arbiter (resolved from cwd), then integrate
29
+ * + reap — instead of taking over the current checkout in-place.
30
+ *
31
+ * **HONEST SCOPE — what is REUSED vs what is NEW here.** The isolation SUBSTRATE is
32
+ * reused verbatim; the per-item EXECUTION is genuinely new:
33
+ *
34
+ * - REUSED: `resolveArbiterUrlFromCheckout` (`do.ts`, the CLI resolves the
35
+ * arbiter URL from cwd and threads it in here); the hub-mirror + isolation
36
+ * seam (`ensureMirror` + {@link jobWorktreeDoDriver}, which materialises its
37
+ * own job worktree off the arbiter for the build/task rungs + reaps it); and
38
+ * the SCAN→SELECT→REFETCH SKELETON of `performDoRemoteAuto` (`do-remote-auto.ts`).
39
+ * - NEW: the **isolated advance-tick runner** ({@link performAdvanceIsolated}) —
40
+ * the per-item unit that runs `performAdvance` (classify → `advancing` lock →
41
+ * surface/apply/triage/build-orchestrate) inside a working clone off the
42
+ * cwd-resolved arbiter, then reaps it. `do --isolated`'s per-item runner is
43
+ * `performDoRemote` (the DO BUILD/TASK pipeline), which does NOT run the
44
+ * advance tick — so it is NOT reusable as the per-item step; only the loop
45
+ * SKELETON is. This module builds the advance analogue + its driver wiring; it
46
+ * introduces NO new isolation MECHANISM (US #26 stays true).
47
+ *
48
+ * **Why an isolated cwd composes with all five rungs (only the runner is new).**
49
+ * The advance tick threads a `cwd` + `arbiter` + a build/task `doDriver`:
50
+ *
51
+ * - the **build-task / task-spec** rungs ORCHESTRATE `do`/`do spec:` via the
52
+ * `doDriver` seam — we inject {@link jobWorktreeDoDriver} (off the cwd-resolved
53
+ * arbiter), so they build/task ISOLATED in their OWN job worktree (the SAME
54
+ * isolation `do --isolated` gives the build tick) instead of in `process.cwd()`;
55
+ * - the **surface / apply / triage** rungs do tree-less, identity-keyed,
56
+ * ARBITER-resolved CAS writes (the sidecar + `needsAnswers`, the `advancing`
57
+ * borrow, observation→promote new-item creation) — they target the arbiter
58
+ * regardless of which checkout the tick runs in, so they compose with an
59
+ * isolated cwd unchanged. The isolated cwd is a working CLONE of the arbiter
60
+ * (origin = the arbiter), so those rungs commit/CAS against the arbiter exactly
61
+ * as the in-place tick does in the human's participating checkout.
62
+ *
63
+ * That composition is WHY only the per-item runner is new — the rungs need no
64
+ * change, just an isolated cwd to run in.
65
+ */
66
+
67
+ /** The per-item context an isolated advance tick consumes (everything BUT `arg`). */
68
+ export interface IsolatedAdvanceContext extends Omit<AdvanceContext, 'cwd'> {
69
+ /**
70
+ * The arbiter URL the isolated worktree is off — resolved from the CWD's
71
+ * arbiter remote by the CLI (`resolveArbiterUrlFromCheckout`), exactly as
72
+ * `do --isolated` resolves its `remote`. `--remote <url>` supplies a foreign
73
+ * arbiter URL here instead (mirroring `do`: `--remote` wins over `--isolated`).
74
+ */
75
+ remote: string;
76
+ /**
77
+ * The agents' execution area (config `workspacesDir`) — where the hub mirror +
78
+ * the per-item working clone + the build/task job worktrees live. NEVER the
79
+ * human area.
80
+ */
81
+ workspacesDir: string;
82
+ }
83
+
84
+ /** Options for {@link performAdvanceIsolated} — the per-item isolated tick. */
85
+ export interface PerformAdvanceIsolatedOptions extends IsolatedAdvanceContext {
86
+ /** The raw advance arg: bare (= task), `prd:<slug>`, or `obs:<slug>`. */
87
+ arg: string;
88
+ /** The read seam (slug resolution / pool); defaults to {@link ledgerRead}. */
89
+ read?: LedgerReadStrategy;
90
+ /** Environment for child git/agent processes. */
91
+ env?: NodeJS.ProcessEnv;
92
+ /**
93
+ * Override the per-item tick runner (tests inject a stub to assert the cwd is
94
+ * the isolated clone, never the checkout). Defaults to {@link performAdvance}.
95
+ */
96
+ run?: AdvanceTickRunner;
97
+ }
98
+
99
+ const DEFAULT_ARBITER = 'origin';
100
+
101
+ /**
102
+ * Run ONE advance tick ISOLATED off the resolved arbiter — the per-item runner.
103
+ *
104
+ * It materialises a per-item working CLONE of the arbiter under the agents' area
105
+ * (via the shared hub mirror — `ensureMirror` once + a cheap local clone of the
106
+ * bare mirror, refetched so its `main` is current), points the advance tick's cwd
107
+ * at it, threads a {@link jobWorktreeDoDriver} so the build/task rungs isolate in
108
+ * their OWN worktree off the SAME arbiter, runs the tick, then REAPS the clone.
109
+ * The current checkout is NEVER touched (the isolation point), and a failed tick
110
+ * reaps its clone like a failed `do --isolated`.
111
+ */
112
+ export async function performAdvanceIsolated(
113
+ options: PerformAdvanceIsolatedOptions,
114
+ ): Promise<AdvanceResult> {
115
+ const note = options.note ?? (() => {});
116
+ const env = options.env;
117
+ const run = options.run ?? performAdvance;
118
+ const arbiterRemoteName = options.arbiter ?? DEFAULT_ARBITER;
119
+
120
+ // 1. Ensure (create/fetch) the hub mirror for the resolved arbiter URL ONCE — the
121
+ // SAME isolation substrate `do --isolated` / `run` use. The per-item clone is
122
+ // cut from this freshly-fetched bare mirror (a cheap LOCAL clone, never a
123
+ // re-clone of the arbiter), so the tick reads the latest committed `main`.
124
+ let mirror;
125
+ try {
126
+ mirror = ensureMirror({
127
+ url: options.remote,
128
+ workspacesDir: options.workspacesDir,
129
+ env,
130
+ });
131
+ } catch (err) {
132
+ const message = err instanceof Error ? err.message : String(err);
133
+ note(message);
134
+ return {exitCode: 1, outcome: 'usage-error', message};
135
+ }
136
+
137
+ // 2. A per-item working CLONE of the mirror (the tree-less surface/apply/triage
138
+ // rungs' ledger-write cwd — a bare mirror cannot `git mv`/`git commit`). Keyed
139
+ // per ARG so two sequential items get DISTINCT clones (the SAME per-job keying
140
+ // the remote claim clone uses). Its arbiter remote is wired to the REAL
141
+ // arbiter URL so the `advancing` borrow + the observation→promote new-item CAS
142
+ // target the arbiter, exactly as the in-place tick does from the human checkout.
143
+ const argKey = options.arg.replace(/[^a-zA-Z0-9._-]/g, '_');
144
+ const cloneDir = join(
145
+ options.workspacesDir,
146
+ 'advance-cwd',
147
+ `${encodeRepoKey(mirror.url).split('/').join('__')}__${argKey}`,
148
+ );
149
+ rmSync(cloneDir, {recursive: true, force: true});
150
+ mkdirSync(dirname(cloneDir), {recursive: true});
151
+ try {
152
+ git(['clone', '--quiet', mirror.path, cloneDir], dirname(cloneDir), {env});
153
+ // Re-point the clone's arbiter remote at the REAL arbiter URL (a `git clone` of
154
+ // the bare MIRROR leaves `origin` pointing at the mirror). The tree-less rungs'
155
+ // ARBITER-resolved CAS writes (`advancing` borrow, observation->promote) + the
156
+ // ff-push of the result then target the arbiter — so they land there REGARDLESS
157
+ // of which checkout the tick ran in (the property that lets an isolated cwd
158
+ // compose with the surface/apply/triage rungs unchanged). When the configured
159
+ // arbiter remote is NOT `origin`, ADD it alongside the clone's `origin`.
160
+ if (arbiterRemoteName === 'origin') {
161
+ git(['remote', 'set-url', 'origin', mirror.url], cloneDir, {env});
162
+ } else {
163
+ git(['remote', 'add', arbiterRemoteName, mirror.url], cloneDir, {env});
164
+ }
165
+ git(['fetch', '--quiet', arbiterRemoteName], cloneDir, {env});
166
+
167
+ // 3. Run the advance TICK against the isolated clone. The build/task rungs
168
+ // ORCHESTRATE `do` through the INJECTED job-worktree driver (their OWN
169
+ // worktree off the arbiter — the SAME isolation `run`'s build tick gives),
170
+ // NOT in `process.cwd()`. The surface/apply/triage rungs run tree-less in
171
+ // the clone, targeting the arbiter remote wired above.
172
+ const context: AdvanceContext = {
173
+ ...stripIsolatedFields(options),
174
+ cwd: cloneDir,
175
+ arbiter: arbiterRemoteName,
176
+ doDriver: jobWorktreeDoDriver({
177
+ // Off the REAL arbiter URL (NOT the local mirror path) so `performDoRemote`
178
+ // reuses the SAME hub mirror `ensureMirror` already created above (keyed on
179
+ // `mirror.url` = the resolved arbiter URL) + integrates back to the arbiter.
180
+ remote: mirror.url,
181
+ workspacesDir: options.workspacesDir,
182
+ }),
183
+ };
184
+ const result = await run({
185
+ ...context,
186
+ arg: options.arg,
187
+ read: options.read,
188
+ });
189
+
190
+ // A TREE-LESS rung (surface/apply/triage) committed the sidecar / marker
191
+ // LOCALLY in the clone; ff-push it to the arbiter so the result LANDS (a
192
+ // one-shot from a busy checkout would otherwise vanish with the reaped clone).
193
+ // The build/task rungs already pushed via the job-worktree `doDriver`.
194
+ if (
195
+ result.exitCode === 0 &&
196
+ result.rung !== undefined &&
197
+ TREELESS_RUNGS.has(result.rung)
198
+ ) {
199
+ await pushTreelessResult({
200
+ cwd: cloneDir,
201
+ arbiter: arbiterRemoteName,
202
+ // Large liveness ceiling (C2, task `c2-rebase-until-real-on-durable-main-
203
+ // promotions`): a clean re-rebase no longer counts against a small budget;
204
+ // a genuine same-path conflict still stops definitively.
205
+ retries: 1000,
206
+ env,
207
+ note,
208
+ });
209
+ }
210
+ return result;
211
+ } finally {
212
+ // 4. REAP the per-item clone (a disposable working tree, like a failed
213
+ // `do --isolated`'s worktree). The durable artifact is the arbiter; the
214
+ // clone is never the recovery surface.
215
+ rmSync(cloneDir, {recursive: true, force: true});
216
+ }
217
+ }
218
+
219
+ /** Strip the isolated-only fields, leaving exactly the per-item {@link AdvanceContext} base. */
220
+ function stripIsolatedFields(
221
+ options: PerformAdvanceIsolatedOptions,
222
+ ): Omit<AdvanceContext, 'cwd' | 'doDriver'> {
223
+ const {
224
+ remote: _remote,
225
+ workspacesDir: _workspacesDir,
226
+ arg: _arg,
227
+ read: _read,
228
+ env: _env,
229
+ run: _run,
230
+ arbiter: _arbiter,
231
+ ...rest
232
+ } = options;
233
+ void _remote;
234
+ void _workspacesDir;
235
+ void _arg;
236
+ void _read;
237
+ void _env;
238
+ void _run;
239
+ void _arbiter;
240
+ return rest;
241
+ }
242
+
243
+ /** Options shared with every per-item isolated tick run, threaded verbatim. */
244
+ type SharedIsolatedContext = IsolatedAdvanceContext;
245
+
246
+ export interface PerformAdvanceIsolatedMultiOptions extends SharedIsolatedContext {
247
+ /**
248
+ * The resolved (remote) repo config — provides `autoBuild`/`autoTask` (the
249
+ * mirror scan applies them at the SELECTION layer) + `selectionOrder` (the
250
+ * cross-pool order), exactly as the in-place one-shot driver applies them.
251
+ */
252
+ config: Config;
253
+ /**
254
+ * `advance --isolated -n <x>`: how many eligible items to advance, IN SEQUENCE.
255
+ * Auto-pick (no arg, no count) ⇒ 1. SEQUENTIAL — never a parallelism knob
256
+ * (US #25; parallelism is `run` / the CI matrix).
257
+ */
258
+ count?: number;
259
+ /** The read seam (mirror pool); defaults to {@link ledgerRead}. */
260
+ read?: LedgerReadStrategy;
261
+ /** Environment for child git/agent processes. */
262
+ env?: NodeJS.ProcessEnv;
263
+ /** Override the per-item isolated tick runner (tests). Defaults to {@link performAdvanceIsolated}. */
264
+ runIsolated?: (
265
+ options: PerformAdvanceIsolatedOptions,
266
+ ) => Promise<AdvanceResult>;
267
+ /** Override the per-tick runner forwarded to {@link performAdvanceIsolated} (tests). */
268
+ run?: AdvanceTickRunner;
269
+ /** Sink for a non-fatal mirror-config-read warning, forwarded to the scan. */
270
+ warn?: (message: string) => void;
271
+ /**
272
+ * The LIFECYCLE-POOL create-gates forwarded to {@link scanMirrorPool} (triage /
273
+ * surface sub-pools), the SAME gates the in-place auto-pick + the loop driver
274
+ * apply. Omitted ⇒ both off (the apply sub-pool is always-on).
275
+ */
276
+ lifecycleGates?: LifecyclePoolGates;
277
+ }
278
+
279
+ /**
280
+ * Run the `advance --isolated` AUTO-PICK / `-n <x>` form — the advance analogue of
281
+ * `performDoRemoteAuto`, SHARING its scan/select/refetch SKELETON but using the
282
+ * ISOLATED advance-tick runner as the per-item unit:
283
+ *
284
+ * 1. `ensureMirror` ONCE up front (the per-item runner re-`ensureMirror`s the
285
+ * SAME mirror idempotently — a fetch, never a re-clone);
286
+ * 2. {@link scanMirrorPool} over the bare hub mirror's committed `main` (the
287
+ * isolated counterpart of the in-place pool scan, gated per-action);
288
+ * 3. {@link selectPrioritised} (tasks-first / prds-first per `selectionOrder`, bounded by `count`);
289
+ * 4. a SEQUENTIAL loop over the FROZEN selected set (selected ONCE in 2–3, NEVER
290
+ * re-scanned) where each per-item {@link performAdvanceIsolated} re-fetches the
291
+ * SAME mirror, so item N's clone branches off a `main` that contains item N-1's
292
+ * result (FRESHNESS, not re-selection — the SNAPSHOT-ONCE parity with
293
+ * `do --isolated -n`).
294
+ *
295
+ * **`-n` is ALWAYS SEQUENTIAL (US #25)** — selecting N items from the mirror and
296
+ * running them one at a time is a dumb "run the tick N times" loop; parallelism is
297
+ * `run`'s concurrent loop or the CI matrix, NEVER `-n`. **SNAPSHOT-ONCE, NOT
298
+ * dependency-aware:** a `blockedBy` dependent ineligible at scan time is NOT
299
+ * selected and is NOT drained in the same run — IDENTICAL to `do --isolated -n`
300
+ * (dependency-aware scheduling is a SEPARATE cross-verb enhancement,
301
+ * `work/notes/observations/do-autopick-no-dependency-aware-scheduling.md`).
302
+ */
303
+ export async function performAdvanceIsolatedAuto(
304
+ options: PerformAdvanceIsolatedMultiOptions,
305
+ ): Promise<AdvanceMultiResult> {
306
+ const runIsolated = options.runIsolated ?? performAdvanceIsolated;
307
+ const read = options.read ?? ledgerRead;
308
+ const note = options.note ?? (() => {});
309
+ const count = options.count ?? 1;
310
+
311
+ // Ensure the bare hub mirror ONCE up front so the pool scan reads the freshest
312
+ // committed `main`. Each per-item `performAdvanceIsolated` re-ensures the SAME
313
+ // mirror idempotently (a fetch, never a re-clone).
314
+ let mirror;
315
+ try {
316
+ mirror = ensureMirror({
317
+ url: options.remote,
318
+ workspacesDir: options.workspacesDir,
319
+ env: options.env,
320
+ });
321
+ } catch (err) {
322
+ const message = err instanceof Error ? err.message : String(err);
323
+ note(message);
324
+ return {results: [], exitCode: 1, message};
325
+ }
326
+
327
+ // Scan the mirror's committed `main` for the SAME pools the in-place scan
328
+ // enumerates (eligible tasks gated on `autoBuild`, taskable prds gated on
329
+ // `autoTask`, + the lifecycle sub-pools), through the SHARED mirror-pool scan.
330
+ const scan = await scanMirrorPool({
331
+ mirrorPath: mirror.path,
332
+ config: options.config,
333
+ read,
334
+ warn: options.warn,
335
+ env: options.env,
336
+ lifecycleGates: options.lifecycleGates,
337
+ });
338
+
339
+ // Order across the pools per the resolved `selectionOrder` + bound by count —
340
+ // the SAME shared, pure `selectPrioritised` the in-place + `run` drivers use.
341
+ // Selected ONCE here; the loop iterates the FROZEN set (snapshot-once).
342
+ const selected = selectPrioritised({
343
+ report: scan.report,
344
+ caps: {
345
+ maxParallel: Number.MAX_SAFE_INTEGER,
346
+ perRepoMax: Number.MAX_SAFE_INTEGER,
347
+ },
348
+ specs: scan.specs,
349
+ selectionOrder: options.config.selectionOrder,
350
+ lifecycle: scan.lifecycle,
351
+ count,
352
+ });
353
+
354
+ if (selected.length === 0) {
355
+ const message =
356
+ 'Nothing eligible to advance on the remote (no eligible tasks and no ' +
357
+ 'taskable prds under the per-action gates).';
358
+ note(message);
359
+ return {results: [], exitCode: 0, message};
360
+ }
361
+
362
+ const results: AdvanceResult[] = [];
363
+ for (const item of selected) {
364
+ const result = await runIsolated(
365
+ perItemOptions(options, argForSelected(item)),
366
+ );
367
+ results.push(result);
368
+ }
369
+ return aggregate(results);
370
+ }
371
+
372
+ /**
373
+ * Run the EXPLICIT multi-arg form (`advance --isolated <a> <b> …`): the NAMED items
374
+ * in the GIVEN order (no pool/priority — the operator chose them), each through the
375
+ * ISOLATED advance-tick runner, SEQUENTIALLY. No mirror scan is needed (the args
376
+ * are explicit); the per-item tick resolves each bare/`prd:`/`obs:` arg itself.
377
+ */
378
+ export async function performAdvanceIsolatedArgs(
379
+ args: string[],
380
+ options: PerformAdvanceIsolatedMultiOptions,
381
+ ): Promise<AdvanceMultiResult> {
382
+ const runIsolated = options.runIsolated ?? performAdvanceIsolated;
383
+ const results: AdvanceResult[] = [];
384
+ for (const arg of args) {
385
+ const result = await runIsolated(perItemOptions(options, arg));
386
+ results.push(result);
387
+ }
388
+ return aggregate(results);
389
+ }
390
+
391
+ /** The advance arg for a pool-selected item (the SELECTION->ARG dispatch). */
392
+ function argForSelected(item: SelectedItem): string {
393
+ if (item.namespace === 'observation') {
394
+ return `obs:${item.slug}`;
395
+ }
396
+ return item.namespace === 'spec' ? `spec:${item.slug}` : item.slug;
397
+ }
398
+
399
+ /** Build the per-item {@link PerformAdvanceIsolatedOptions} for one arg. */
400
+ function perItemOptions(
401
+ options: PerformAdvanceIsolatedMultiOptions,
402
+ arg: string,
403
+ ): PerformAdvanceIsolatedOptions {
404
+ const {
405
+ config: _config,
406
+ count: _count,
407
+ read,
408
+ env,
409
+ runIsolated: _runIsolated,
410
+ run,
411
+ warn: _warn,
412
+ lifecycleGates: _lifecycleGates,
413
+ ...rest
414
+ } = options;
415
+ void _config;
416
+ void _count;
417
+ void _runIsolated;
418
+ void _warn;
419
+ void _lifecycleGates;
420
+ return {...rest, arg, read, env, run};
421
+ }
422
+
423
+ /** Aggregate per-item results into the multi-item contract (mirrors `do`'s). */
424
+ function aggregate(results: AdvanceResult[]): AdvanceMultiResult {
425
+ const firstFailure = results.find((r) => r.exitCode !== 0);
426
+ const exitCode: AdvanceExitCode = firstFailure ? firstFailure.exitCode : 0;
427
+ const ok = results.filter((r) => r.exitCode === 0).length;
428
+ const message =
429
+ `advanced ${results.length} item${results.length === 1 ? '' : 's'} ` +
430
+ `(${ok} ok, ${results.length - ok} not).`;
431
+ return {results, exitCode, message};
432
+ }