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,231 @@
1
+ import { performAdvance, } from './advance.js';
2
+ import { pushTreelessResult, TREELESS_RUNGS, } from './advance-treeless-publish.js';
3
+ import { scanRepoPaths } from './scan.js';
4
+ import { ledgerRead } from './ledger-read.js';
5
+ import { selectPrioritised, taskableSpecs, } from './select-priority.js';
6
+ import { gatherLifecycleInPlace } from './lifecycle-gather.js';
7
+ /**
8
+ * The task-pool caps for an in-place `advance` selection. `advance` (one-shot) is
9
+ * per-repo + SEQUENTIAL, so the REAL bound is the requested `count`. We cap the
10
+ * task pool at "all eligible" and let {@link selectPrioritised}'s `count` trim
11
+ * across both pools — identical to `do-autopick`'s {@link performDoAuto}.
12
+ */
13
+ const ALL_ELIGIBLE = Number.MAX_SAFE_INTEGER;
14
+ /**
15
+ * Run the BARE / `-n <x>` form: build the two ELIGIBLE pools for `cwd` (eligible
16
+ * TASKS gated by `autoBuild`, taskable prds gated by `autoTask`), order them
17
+ * (plus the lifecycle pools) per the resolved `selectionOrder` with `apply`
18
+ * pinned first, take `count` (default 1), and run the EXISTING advance tick per
19
+ * selected item, SEQUENTIALLY. The pools are the EXACT
20
+ * `do-autopick` pools (the SAME `scoreItems`/`taskableSpecs` predicates), so the
21
+ * per-action gate family is honoured by construction.
22
+ *
23
+ * The bare/`-n` selection draws ONLY from the autonomous pools (eligible tasks +
24
+ * taskable prds); SURFACE + APPLY of a gated item are reached by NAMING the item
25
+ * ({@link performAdvanceArgs}) — they are always-allowed and not pool-gated, so the
26
+ * bare form with every flag off correctly selects NOTHING (zero autonomy) while a
27
+ * named `advance <slug>` still surfaces/applies.
28
+ */
29
+ export async function performAdvanceAuto(options) {
30
+ const run = options.run ?? performAdvance;
31
+ const read = options.read ?? ledgerRead;
32
+ const note = options.note ?? (() => { });
33
+ const cwd = options.cwd;
34
+ const count = options.count ?? 1;
35
+ // Pool 1 — eligible TASKS via the EXISTING scan/select path. `scoreItems`
36
+ // inside `scanRepoPaths` gates eligibility on `autoBuild` (the build gate), so
37
+ // with `autoBuild` off NO task is selected — the build rung is never reached
38
+ // by the bare/`-n` selection.
39
+ const report = scanRepoPaths([cwd], options.config, new Set(), options.override);
40
+ // Pool 2 — TASKABLE prds filtered by `autoslice-gate`'s predicate (gated on
41
+ // `autoTask`). With `autoTask` off NO prd is selected — the task rung is
42
+ // never reached by the bare/`-n` selection.
43
+ const pool = read.resolveSpecPool({ repoPath: cwd });
44
+ const specCandidates = pool.specs.map((spec) => ({
45
+ repoPath: cwd,
46
+ slug: spec.slug,
47
+ humanOnly: spec.humanOnly,
48
+ needsAnswers: spec.needsAnswers,
49
+ taskedAfter: spec.taskedAfter,
50
+ }));
51
+ const eligibleSpecs = taskableSpecs({
52
+ candidates: specCandidates,
53
+ taskedSlugs: pool.taskedSlugs,
54
+ autoTask: options.config.autoTask,
55
+ });
56
+ // Pools 3 + 4 — the LIFECYCLE pools (untriaged observations + `needsAnswers`-
57
+ // blocked tasks/prds + answered-sidecar items), built CALLER-SIDE (here, the
58
+ // `advance` caller) through the SHARED enumeration unit and passed in — NOT baked
59
+ // into `selectPrioritised` (so `do` is provably unchanged). The create-gates
60
+ // default OFF (interim hardcoded-off): triage + surface contribute nothing; the
61
+ // apply sub-pool is always-on (consume), so an answered sidecar still applies.
62
+ const lifecycle = gatherLifecycleInPlace({
63
+ repoPath: cwd,
64
+ read,
65
+ gates: options.lifecycleGates,
66
+ });
67
+ // Order across the (up to) FIVE pools per the resolved `selectionOrder` (apply
68
+ // pinned first) + bound by count — the SAME shared, pure `selectPrioritised` the
69
+ // `do` auto-pick driver uses (which passes NO lifecycle pools, so it is unchanged).
70
+ const selected = selectPrioritised({
71
+ report,
72
+ caps: { maxParallel: ALL_ELIGIBLE, perRepoMax: ALL_ELIGIBLE },
73
+ specs: eligibleSpecs,
74
+ selectionOrder: options.config.selectionOrder,
75
+ lifecycle,
76
+ count,
77
+ });
78
+ if (selected.length === 0) {
79
+ // With every gate off this is the "zero autonomy" case: nothing autonomous to
80
+ // select. The question loop (surface/apply) is reached by NAMING an item, not
81
+ // the bare form — so this is calm-at-rest, NOT a failure.
82
+ const message = 'Nothing eligible to advance (no eligible tasks and no taskable prds ' +
83
+ 'under the per-action gates; name an item to surface/apply its questions).';
84
+ note(message);
85
+ return { results: [], exitCode: 0, message };
86
+ }
87
+ return runSelectedInSequence(selected, options, run);
88
+ }
89
+ /**
90
+ * Run the EXPLICIT multi-arg form (`advance <a> <b> …`): the named items in the
91
+ * GIVEN order (no pool/priority — the operator chose them). Each arg is run
92
+ * through the existing advance tick, which itself resolves bare/`task:`/`prd:`/
93
+ * `obs:` (so a named prd drives the task rung, an `obs:` the triage rung, a
94
+ * collision errors), SEQUENTIALLY. A NAMED item is the always-allowed path — its
95
+ * surface/apply rung runs regardless of the per-action gates.
96
+ */
97
+ export async function performAdvanceArgs(args, options) {
98
+ const run = options.run ?? performAdvance;
99
+ const selected = args.map((arg) => ({
100
+ repoPath: options.cwd,
101
+ slug: arg,
102
+ // The arg is passed VERBATIM to the tick (it does its own slug resolution
103
+ // across task/prd/observation); the namespace is irrelevant for explicit args.
104
+ namespace: 'task',
105
+ }));
106
+ return runSelectedInSequence(selected, options, run, { verbatimArg: true });
107
+ }
108
+ /**
109
+ * Run a list of selected items through the existing advance tick, SEQUENTIALLY
110
+ * (US #25 — `-n` is always sequential), threading the shared context to each. For
111
+ * the pool path the arg encodes the namespace (`prd:<slug>` for a selected prd,
112
+ * bare slug for a task); for the explicit-arg path the caller's raw arg is passed
113
+ * verbatim. Each tick is INDEPENDENTLY `advancing`-lock-guarded inside
114
+ * {@link performAdvance} — sequential here means one item at a time, never a
115
+ * parallelism knob.
116
+ */
117
+ async function runSelectedInSequence(selected, options, run, mode = {}) {
118
+ const shared = sharedAdvanceContext(options);
119
+ const results = [];
120
+ for (const item of selected) {
121
+ const arg = mode.verbatimArg ? item.slug : argForSelectedItem(item);
122
+ const result = await runAdvanceTickWithTreelessPublish({ ...shared, arg, read: options.read }, run);
123
+ results.push(result);
124
+ }
125
+ const firstFailure = results.find((r) => r.exitCode !== 0);
126
+ const exitCode = firstFailure ? firstFailure.exitCode : 0;
127
+ const ok = results.filter((r) => r.exitCode === 0).length;
128
+ const message = `advanced ${results.length} item${results.length === 1 ? '' : 's'} ` +
129
+ `(${ok} ok, ${results.length - ok} not).`;
130
+ return { results, exitCode, message };
131
+ }
132
+ /**
133
+ * Run ONE in-place advance tick + ff-push a tree-less rung's result to the
134
+ * arbiter — task `advance-in-place-publishes-treeless-results`. Wraps the
135
+ * substrate-agnostic tick ({@link AdvanceTickRunner}) with the shared
136
+ * {@link pushTreelessResult} so a surfaced sidecar / `triaged:` marker /
137
+ * applied-answer commit committed LOCALLY in the in-place cwd LANDS on the
138
+ * arbiter's `main` (today the in-place tick commits locally and the work is lost
139
+ * on an ephemeral CI runner). Mirrors the `--isolated` one-shot + `run` loop
140
+ * driver call sites byte-for-byte:
141
+ *
142
+ * - gates PURELY on `result.exitCode === 0 && TREELESS_RUNGS.has(result.rung)
143
+ * && context.arbiter !== undefined` — the SAME gate the existing drivers
144
+ * use, no cleverer guard (a build/task rung integrates through the
145
+ * `doDriver` band; a no-arbiter laptop checkout already sits on the real
146
+ * `main`);
147
+ * - reuses `pushTreelessResult` VERBATIM (its bounded re-fetch+rebase retry is
148
+ * LOAD-BEARING for a sequential `-n` batch that integrates a build/task rung
149
+ * mid-batch and then runs a later tree-less rung whose `HEAD:main` push is
150
+ * non-fast-forward by construction);
151
+ * - NEVER `--force`. A push that keeps failing (or a genuine rebase conflict)
152
+ * is REPORTED via the `note` sink and does NOT crash the tick — the work
153
+ * stays committed in the cwd for the next pass / a human.
154
+ *
155
+ * Used by BOTH in-place entry points: {@link runSelectedInSequence} (the
156
+ * multi-item `-n` / auto-pick / multi-arg path) AND the CLI single-named-item
157
+ * path (which calls {@link performAdvance} directly, bypassing the sequence
158
+ * runner — the easy-to-miss site).
159
+ *
160
+ * The promote-apply edge mirrors the existing drivers without a special case: an
161
+ * `apply` rung whose agentic verdict mints an artifact (`mint-task`/`mint-prd`)
162
+ * runs `promoteObservation`'s OWN arbiter CAS and commits NOTHING tree-less, so the
163
+ * ff-push here is a harmless no-op (a `HEAD` with nothing new) — it does NOT
164
+ * double-publish nor clobber the promote CAS.
165
+ */
166
+ export async function runAdvanceTickWithTreelessPublish(options, run) {
167
+ const result = await run(options);
168
+ if (result.exitCode === 0 &&
169
+ result.rung !== undefined &&
170
+ TREELESS_RUNGS.has(result.rung) &&
171
+ options.arbiter !== undefined) {
172
+ await pushTreelessResult({
173
+ cwd: options.cwd,
174
+ arbiter: options.arbiter,
175
+ // Large liveness ceiling — see `pushTreelessResult`'s C2 docs (task
176
+ // `c2-rebase-until-real-on-durable-main-promotions`). A clean re-rebase
177
+ // no longer counts against a small budget; a genuine conflict (slug gone
178
+ // from its source folder on the new `main`) still stops definitively.
179
+ retries: 1000,
180
+ env: undefined,
181
+ note: options.note ?? (() => { }),
182
+ });
183
+ }
184
+ return result;
185
+ }
186
+ /**
187
+ * The advance TICK arg for a pool-selected item — the SELECTION->ARG dispatch
188
+ * (task `advance-autopick-lifecycle-pools`, F-NAMESPACE). The `namespace`
189
+ * discriminator the selection carried maps to the tick arg the tick then
190
+ * classifies into the right rung:
191
+ * - `observation` → `obs:<slug>` (the triage rung; bare would resolve to a
192
+ * task, so the `obs:` prefix is required);
193
+ * - `spec` → `spec:<slug>` (a taskable spec's task rung, OR a `needsAnswers` spec
194
+ * the tick surfaces/applies);
195
+ * - `task` → bare `<slug>` (an eligible task's build rung, OR a `needsAnswers`
196
+ * task the tick surfaces/applies).
197
+ * The tick re-classifies each arg, so a `needsAnswers`-blocked task/prd reaches
198
+ * surface/apply and an untriaged observation reaches triage — the classifier +
199
+ * rung bodies are unchanged; only this selection->arg mapping is new.
200
+ */
201
+ function argForSelectedItem(item) {
202
+ if (item.namespace === 'observation') {
203
+ return `obs:${item.slug}`;
204
+ }
205
+ if (item.namespace === 'spec') {
206
+ return `spec:${item.slug}`;
207
+ }
208
+ return item.slug;
209
+ }
210
+ /** Strip the multi-only fields, leaving exactly the per-item {@link AdvanceContext}. */
211
+ function sharedAdvanceContext(options) {
212
+ const { config: _config, count: _count, run: _run, read: _read, lifecycleGates: _lifecycleGates, ...rest } = options;
213
+ void _config;
214
+ void _count;
215
+ void _run;
216
+ void _read;
217
+ void _lifecycleGates;
218
+ return rest;
219
+ }
220
+ /**
221
+ * Is this aggregate result a CALM-AT-REST (US #31 convergence) one — every item
222
+ * that ran was a NO-OP (a pending sidecar idling) AND nothing failed? The
223
+ * convergence/drain tests use this to assert the loop IDLES when there are no
224
+ * answers (no thrash) and DRAINS monotonically as answers arrive. A pool of
225
+ * pending-sidecar items advances NOTHING (every tick a clean no-op); as the human
226
+ * answers, the answered items flip to `apply` and the no-op count shrinks.
227
+ */
228
+ export function isCalmAtRest(result) {
229
+ return (result.exitCode === 0 && result.results.every((r) => r.outcome === 'no-op'));
230
+ }
231
+ //# sourceMappingURL=advance-drivers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"advance-drivers.js","sourceRoot":"","sources":["../src/advance-drivers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,156 @@
1
+ import { type AdvanceContext, type AdvanceResult } from './advance.js';
2
+ import { type LedgerReadStrategy } from './ledger-read.js';
3
+ import type { LifecyclePoolGates } from './lifecycle-pools.js';
4
+ import type { Config } from './config.js';
5
+ import type { AdvanceTickRunner, AdvanceMultiResult } from './advance-drivers.js';
6
+ /**
7
+ * The **ISOLATED advance-tick RUNNER** + its sequential drivers (prd
8
+ * `advance-loop`, task `advance-isolated-one-shot`, US #25/26) — the "isolated
9
+ * one-shot" cell `advance` was missing. It gives `advance` the SAME isolation
10
+ * ergonomic `do --isolated` has: run the advance TICK ({@link performAdvance}) in
11
+ * an ISOLATED worktree off THIS repo's arbiter (resolved from cwd), then integrate
12
+ * + reap — instead of taking over the current checkout in-place.
13
+ *
14
+ * **HONEST SCOPE — what is REUSED vs what is NEW here.** The isolation SUBSTRATE is
15
+ * reused verbatim; the per-item EXECUTION is genuinely new:
16
+ *
17
+ * - REUSED: `resolveArbiterUrlFromCheckout` (`do.ts`, the CLI resolves the
18
+ * arbiter URL from cwd and threads it in here); the hub-mirror + isolation
19
+ * seam (`ensureMirror` + {@link jobWorktreeDoDriver}, which materialises its
20
+ * own job worktree off the arbiter for the build/task rungs + reaps it); and
21
+ * the SCAN→SELECT→REFETCH SKELETON of `performDoRemoteAuto` (`do-remote-auto.ts`).
22
+ * - NEW: the **isolated advance-tick runner** ({@link performAdvanceIsolated}) —
23
+ * the per-item unit that runs `performAdvance` (classify → `advancing` lock →
24
+ * surface/apply/triage/build-orchestrate) inside a working clone off the
25
+ * cwd-resolved arbiter, then reaps it. `do --isolated`'s per-item runner is
26
+ * `performDoRemote` (the DO BUILD/TASK pipeline), which does NOT run the
27
+ * advance tick — so it is NOT reusable as the per-item step; only the loop
28
+ * SKELETON is. This module builds the advance analogue + its driver wiring; it
29
+ * introduces NO new isolation MECHANISM (US #26 stays true).
30
+ *
31
+ * **Why an isolated cwd composes with all five rungs (only the runner is new).**
32
+ * The advance tick threads a `cwd` + `arbiter` + a build/task `doDriver`:
33
+ *
34
+ * - the **build-task / task-spec** rungs ORCHESTRATE `do`/`do spec:` via the
35
+ * `doDriver` seam — we inject {@link jobWorktreeDoDriver} (off the cwd-resolved
36
+ * arbiter), so they build/task ISOLATED in their OWN job worktree (the SAME
37
+ * isolation `do --isolated` gives the build tick) instead of in `process.cwd()`;
38
+ * - the **surface / apply / triage** rungs do tree-less, identity-keyed,
39
+ * ARBITER-resolved CAS writes (the sidecar + `needsAnswers`, the `advancing`
40
+ * borrow, observation→promote new-item creation) — they target the arbiter
41
+ * regardless of which checkout the tick runs in, so they compose with an
42
+ * isolated cwd unchanged. The isolated cwd is a working CLONE of the arbiter
43
+ * (origin = the arbiter), so those rungs commit/CAS against the arbiter exactly
44
+ * as the in-place tick does in the human's participating checkout.
45
+ *
46
+ * That composition is WHY only the per-item runner is new — the rungs need no
47
+ * change, just an isolated cwd to run in.
48
+ */
49
+ /** The per-item context an isolated advance tick consumes (everything BUT `arg`). */
50
+ export interface IsolatedAdvanceContext extends Omit<AdvanceContext, 'cwd'> {
51
+ /**
52
+ * The arbiter URL the isolated worktree is off — resolved from the CWD's
53
+ * arbiter remote by the CLI (`resolveArbiterUrlFromCheckout`), exactly as
54
+ * `do --isolated` resolves its `remote`. `--remote <url>` supplies a foreign
55
+ * arbiter URL here instead (mirroring `do`: `--remote` wins over `--isolated`).
56
+ */
57
+ remote: string;
58
+ /**
59
+ * The agents' execution area (config `workspacesDir`) — where the hub mirror +
60
+ * the per-item working clone + the build/task job worktrees live. NEVER the
61
+ * human area.
62
+ */
63
+ workspacesDir: string;
64
+ }
65
+ /** Options for {@link performAdvanceIsolated} — the per-item isolated tick. */
66
+ export interface PerformAdvanceIsolatedOptions extends IsolatedAdvanceContext {
67
+ /** The raw advance arg: bare (= task), `prd:<slug>`, or `obs:<slug>`. */
68
+ arg: string;
69
+ /** The read seam (slug resolution / pool); defaults to {@link ledgerRead}. */
70
+ read?: LedgerReadStrategy;
71
+ /** Environment for child git/agent processes. */
72
+ env?: NodeJS.ProcessEnv;
73
+ /**
74
+ * Override the per-item tick runner (tests inject a stub to assert the cwd is
75
+ * the isolated clone, never the checkout). Defaults to {@link performAdvance}.
76
+ */
77
+ run?: AdvanceTickRunner;
78
+ }
79
+ /**
80
+ * Run ONE advance tick ISOLATED off the resolved arbiter — the per-item runner.
81
+ *
82
+ * It materialises a per-item working CLONE of the arbiter under the agents' area
83
+ * (via the shared hub mirror — `ensureMirror` once + a cheap local clone of the
84
+ * bare mirror, refetched so its `main` is current), points the advance tick's cwd
85
+ * at it, threads a {@link jobWorktreeDoDriver} so the build/task rungs isolate in
86
+ * their OWN worktree off the SAME arbiter, runs the tick, then REAPS the clone.
87
+ * The current checkout is NEVER touched (the isolation point), and a failed tick
88
+ * reaps its clone like a failed `do --isolated`.
89
+ */
90
+ export declare function performAdvanceIsolated(options: PerformAdvanceIsolatedOptions): Promise<AdvanceResult>;
91
+ /** Options shared with every per-item isolated tick run, threaded verbatim. */
92
+ type SharedIsolatedContext = IsolatedAdvanceContext;
93
+ export interface PerformAdvanceIsolatedMultiOptions extends SharedIsolatedContext {
94
+ /**
95
+ * The resolved (remote) repo config — provides `autoBuild`/`autoTask` (the
96
+ * mirror scan applies them at the SELECTION layer) + `selectionOrder` (the
97
+ * cross-pool order), exactly as the in-place one-shot driver applies them.
98
+ */
99
+ config: Config;
100
+ /**
101
+ * `advance --isolated -n <x>`: how many eligible items to advance, IN SEQUENCE.
102
+ * Auto-pick (no arg, no count) ⇒ 1. SEQUENTIAL — never a parallelism knob
103
+ * (US #25; parallelism is `run` / the CI matrix).
104
+ */
105
+ count?: number;
106
+ /** The read seam (mirror pool); defaults to {@link ledgerRead}. */
107
+ read?: LedgerReadStrategy;
108
+ /** Environment for child git/agent processes. */
109
+ env?: NodeJS.ProcessEnv;
110
+ /** Override the per-item isolated tick runner (tests). Defaults to {@link performAdvanceIsolated}. */
111
+ runIsolated?: (options: PerformAdvanceIsolatedOptions) => Promise<AdvanceResult>;
112
+ /** Override the per-tick runner forwarded to {@link performAdvanceIsolated} (tests). */
113
+ run?: AdvanceTickRunner;
114
+ /** Sink for a non-fatal mirror-config-read warning, forwarded to the scan. */
115
+ warn?: (message: string) => void;
116
+ /**
117
+ * The LIFECYCLE-POOL create-gates forwarded to {@link scanMirrorPool} (triage /
118
+ * surface sub-pools), the SAME gates the in-place auto-pick + the loop driver
119
+ * apply. Omitted ⇒ both off (the apply sub-pool is always-on).
120
+ */
121
+ lifecycleGates?: LifecyclePoolGates;
122
+ }
123
+ /**
124
+ * Run the `advance --isolated` AUTO-PICK / `-n <x>` form — the advance analogue of
125
+ * `performDoRemoteAuto`, SHARING its scan/select/refetch SKELETON but using the
126
+ * ISOLATED advance-tick runner as the per-item unit:
127
+ *
128
+ * 1. `ensureMirror` ONCE up front (the per-item runner re-`ensureMirror`s the
129
+ * SAME mirror idempotently — a fetch, never a re-clone);
130
+ * 2. {@link scanMirrorPool} over the bare hub mirror's committed `main` (the
131
+ * isolated counterpart of the in-place pool scan, gated per-action);
132
+ * 3. {@link selectPrioritised} (tasks-first / prds-first per `selectionOrder`, bounded by `count`);
133
+ * 4. a SEQUENTIAL loop over the FROZEN selected set (selected ONCE in 2–3, NEVER
134
+ * re-scanned) where each per-item {@link performAdvanceIsolated} re-fetches the
135
+ * SAME mirror, so item N's clone branches off a `main` that contains item N-1's
136
+ * result (FRESHNESS, not re-selection — the SNAPSHOT-ONCE parity with
137
+ * `do --isolated -n`).
138
+ *
139
+ * **`-n` is ALWAYS SEQUENTIAL (US #25)** — selecting N items from the mirror and
140
+ * running them one at a time is a dumb "run the tick N times" loop; parallelism is
141
+ * `run`'s concurrent loop or the CI matrix, NEVER `-n`. **SNAPSHOT-ONCE, NOT
142
+ * dependency-aware:** a `blockedBy` dependent ineligible at scan time is NOT
143
+ * selected and is NOT drained in the same run — IDENTICAL to `do --isolated -n`
144
+ * (dependency-aware scheduling is a SEPARATE cross-verb enhancement,
145
+ * `work/notes/observations/do-autopick-no-dependency-aware-scheduling.md`).
146
+ */
147
+ export declare function performAdvanceIsolatedAuto(options: PerformAdvanceIsolatedMultiOptions): Promise<AdvanceMultiResult>;
148
+ /**
149
+ * Run the EXPLICIT multi-arg form (`advance --isolated <a> <b> …`): the NAMED items
150
+ * in the GIVEN order (no pool/priority — the operator chose them), each through the
151
+ * ISOLATED advance-tick runner, SEQUENTIALLY. No mirror scan is needed (the args
152
+ * are explicit); the per-item tick resolves each bare/`prd:`/`obs:` arg itself.
153
+ */
154
+ export declare function performAdvanceIsolatedArgs(args: string[], options: PerformAdvanceIsolatedMultiOptions): Promise<AdvanceMultiResult>;
155
+ export {};
156
+ //# sourceMappingURL=advance-isolated.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"advance-isolated.d.ts","sourceRoot":"","sources":["../src/advance-isolated.ts"],"names":[],"mappings":"AASA,OAAO,EAEN,KAAK,cAAc,EACnB,KAAK,aAAa,EAElB,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAa,KAAK,kBAAkB,EAAC,MAAM,kBAAkB,CAAC;AAErE,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,sBAAsB,CAAC;AAC7D,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,aAAa,CAAC;AACxC,OAAO,KAAK,EAAC,iBAAiB,EAAE,kBAAkB,EAAC,MAAM,sBAAsB,CAAC;AAEhF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AAEH,qFAAqF;AACrF,MAAM,WAAW,sBAAuB,SAAQ,IAAI,CAAC,cAAc,EAAE,KAAK,CAAC;IAC1E;;;;;OAKG;IACH,MAAM,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,aAAa,EAAE,MAAM,CAAC;CACtB;AAED,+EAA+E;AAC/E,MAAM,WAAW,6BAA8B,SAAQ,sBAAsB;IAC5E,yEAAyE;IACzE,GAAG,EAAE,MAAM,CAAC;IACZ,8EAA8E;IAC9E,IAAI,CAAC,EAAE,kBAAkB,CAAC;IAC1B,iDAAiD;IACjD,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB;;;OAGG;IACH,GAAG,CAAC,EAAE,iBAAiB,CAAC;CACxB;AAID;;;;;;;;;;GAUG;AACH,wBAAsB,sBAAsB,CAC3C,OAAO,EAAE,6BAA6B,GACpC,OAAO,CAAC,aAAa,CAAC,CAuGxB;AA0BD,+EAA+E;AAC/E,KAAK,qBAAqB,GAAG,sBAAsB,CAAC;AAEpD,MAAM,WAAW,kCAAmC,SAAQ,qBAAqB;IAChF;;;;OAIG;IACH,MAAM,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mEAAmE;IACnE,IAAI,CAAC,EAAE,kBAAkB,CAAC;IAC1B,iDAAiD;IACjD,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,sGAAsG;IACtG,WAAW,CAAC,EAAE,CACb,OAAO,EAAE,6BAA6B,KAClC,OAAO,CAAC,aAAa,CAAC,CAAC;IAC5B,wFAAwF;IACxF,GAAG,CAAC,EAAE,iBAAiB,CAAC;IACxB,8EAA8E;IAC9E,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC;;;;OAIG;IACH,cAAc,CAAC,EAAE,kBAAkB,CAAC;CACpC;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAsB,0BAA0B,CAC/C,OAAO,EAAE,kCAAkC,GACzC,OAAO,CAAC,kBAAkB,CAAC,CAiE7B;AAED;;;;;GAKG;AACH,wBAAsB,0BAA0B,CAC/C,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,EAAE,kCAAkC,GACzC,OAAO,CAAC,kBAAkB,CAAC,CAQ7B"}
@@ -0,0 +1,256 @@
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 { pushTreelessResult, TREELESS_RUNGS, } from './advance-treeless-publish.js';
7
+ import { performAdvance, } from './advance.js';
8
+ import { scanMirrorPool } from './mirror-pool-scan.js';
9
+ import { ledgerRead } from './ledger-read.js';
10
+ import { selectPrioritised } from './select-priority.js';
11
+ const DEFAULT_ARBITER = 'origin';
12
+ /**
13
+ * Run ONE advance tick ISOLATED off the resolved arbiter — the per-item runner.
14
+ *
15
+ * It materialises a per-item working CLONE of the arbiter under the agents' area
16
+ * (via the shared hub mirror — `ensureMirror` once + a cheap local clone of the
17
+ * bare mirror, refetched so its `main` is current), points the advance tick's cwd
18
+ * at it, threads a {@link jobWorktreeDoDriver} so the build/task rungs isolate in
19
+ * their OWN worktree off the SAME arbiter, runs the tick, then REAPS the clone.
20
+ * The current checkout is NEVER touched (the isolation point), and a failed tick
21
+ * reaps its clone like a failed `do --isolated`.
22
+ */
23
+ export async function performAdvanceIsolated(options) {
24
+ const note = options.note ?? (() => { });
25
+ const env = options.env;
26
+ const run = options.run ?? performAdvance;
27
+ const arbiterRemoteName = options.arbiter ?? DEFAULT_ARBITER;
28
+ // 1. Ensure (create/fetch) the hub mirror for the resolved arbiter URL ONCE — the
29
+ // SAME isolation substrate `do --isolated` / `run` use. The per-item clone is
30
+ // cut from this freshly-fetched bare mirror (a cheap LOCAL clone, never a
31
+ // re-clone of the arbiter), so the tick reads the latest committed `main`.
32
+ let mirror;
33
+ try {
34
+ mirror = ensureMirror({
35
+ url: options.remote,
36
+ workspacesDir: options.workspacesDir,
37
+ env,
38
+ });
39
+ }
40
+ catch (err) {
41
+ const message = err instanceof Error ? err.message : String(err);
42
+ note(message);
43
+ return { exitCode: 1, outcome: 'usage-error', message };
44
+ }
45
+ // 2. A per-item working CLONE of the mirror (the tree-less surface/apply/triage
46
+ // rungs' ledger-write cwd — a bare mirror cannot `git mv`/`git commit`). Keyed
47
+ // per ARG so two sequential items get DISTINCT clones (the SAME per-job keying
48
+ // the remote claim clone uses). Its arbiter remote is wired to the REAL
49
+ // arbiter URL so the `advancing` borrow + the observation→promote new-item CAS
50
+ // target the arbiter, exactly as the in-place tick does from the human checkout.
51
+ const argKey = options.arg.replace(/[^a-zA-Z0-9._-]/g, '_');
52
+ const cloneDir = join(options.workspacesDir, 'advance-cwd', `${encodeRepoKey(mirror.url).split('/').join('__')}__${argKey}`);
53
+ rmSync(cloneDir, { recursive: true, force: true });
54
+ mkdirSync(dirname(cloneDir), { recursive: true });
55
+ try {
56
+ git(['clone', '--quiet', mirror.path, cloneDir], dirname(cloneDir), { env });
57
+ // Re-point the clone's arbiter remote at the REAL arbiter URL (a `git clone` of
58
+ // the bare MIRROR leaves `origin` pointing at the mirror). The tree-less rungs'
59
+ // ARBITER-resolved CAS writes (`advancing` borrow, observation->promote) + the
60
+ // ff-push of the result then target the arbiter — so they land there REGARDLESS
61
+ // of which checkout the tick ran in (the property that lets an isolated cwd
62
+ // compose with the surface/apply/triage rungs unchanged). When the configured
63
+ // arbiter remote is NOT `origin`, ADD it alongside the clone's `origin`.
64
+ if (arbiterRemoteName === 'origin') {
65
+ git(['remote', 'set-url', 'origin', mirror.url], cloneDir, { env });
66
+ }
67
+ else {
68
+ git(['remote', 'add', arbiterRemoteName, mirror.url], cloneDir, { env });
69
+ }
70
+ git(['fetch', '--quiet', arbiterRemoteName], cloneDir, { env });
71
+ // 3. Run the advance TICK against the isolated clone. The build/task rungs
72
+ // ORCHESTRATE `do` through the INJECTED job-worktree driver (their OWN
73
+ // worktree off the arbiter — the SAME isolation `run`'s build tick gives),
74
+ // NOT in `process.cwd()`. The surface/apply/triage rungs run tree-less in
75
+ // the clone, targeting the arbiter remote wired above.
76
+ const context = {
77
+ ...stripIsolatedFields(options),
78
+ cwd: cloneDir,
79
+ arbiter: arbiterRemoteName,
80
+ doDriver: jobWorktreeDoDriver({
81
+ // Off the REAL arbiter URL (NOT the local mirror path) so `performDoRemote`
82
+ // reuses the SAME hub mirror `ensureMirror` already created above (keyed on
83
+ // `mirror.url` = the resolved arbiter URL) + integrates back to the arbiter.
84
+ remote: mirror.url,
85
+ workspacesDir: options.workspacesDir,
86
+ }),
87
+ };
88
+ const result = await run({
89
+ ...context,
90
+ arg: options.arg,
91
+ read: options.read,
92
+ });
93
+ // A TREE-LESS rung (surface/apply/triage) committed the sidecar / marker
94
+ // LOCALLY in the clone; ff-push it to the arbiter so the result LANDS (a
95
+ // one-shot from a busy checkout would otherwise vanish with the reaped clone).
96
+ // The build/task rungs already pushed via the job-worktree `doDriver`.
97
+ if (result.exitCode === 0 &&
98
+ result.rung !== undefined &&
99
+ TREELESS_RUNGS.has(result.rung)) {
100
+ await pushTreelessResult({
101
+ cwd: cloneDir,
102
+ arbiter: arbiterRemoteName,
103
+ // Large liveness ceiling (C2, task `c2-rebase-until-real-on-durable-main-
104
+ // promotions`): a clean re-rebase no longer counts against a small budget;
105
+ // a genuine same-path conflict still stops definitively.
106
+ retries: 1000,
107
+ env,
108
+ note,
109
+ });
110
+ }
111
+ return result;
112
+ }
113
+ finally {
114
+ // 4. REAP the per-item clone (a disposable working tree, like a failed
115
+ // `do --isolated`'s worktree). The durable artifact is the arbiter; the
116
+ // clone is never the recovery surface.
117
+ rmSync(cloneDir, { recursive: true, force: true });
118
+ }
119
+ }
120
+ /** Strip the isolated-only fields, leaving exactly the per-item {@link AdvanceContext} base. */
121
+ function stripIsolatedFields(options) {
122
+ const { remote: _remote, workspacesDir: _workspacesDir, arg: _arg, read: _read, env: _env, run: _run, arbiter: _arbiter, ...rest } = options;
123
+ void _remote;
124
+ void _workspacesDir;
125
+ void _arg;
126
+ void _read;
127
+ void _env;
128
+ void _run;
129
+ void _arbiter;
130
+ return rest;
131
+ }
132
+ /**
133
+ * Run the `advance --isolated` AUTO-PICK / `-n <x>` form — the advance analogue of
134
+ * `performDoRemoteAuto`, SHARING its scan/select/refetch SKELETON but using the
135
+ * ISOLATED advance-tick runner as the per-item unit:
136
+ *
137
+ * 1. `ensureMirror` ONCE up front (the per-item runner re-`ensureMirror`s the
138
+ * SAME mirror idempotently — a fetch, never a re-clone);
139
+ * 2. {@link scanMirrorPool} over the bare hub mirror's committed `main` (the
140
+ * isolated counterpart of the in-place pool scan, gated per-action);
141
+ * 3. {@link selectPrioritised} (tasks-first / prds-first per `selectionOrder`, bounded by `count`);
142
+ * 4. a SEQUENTIAL loop over the FROZEN selected set (selected ONCE in 2–3, NEVER
143
+ * re-scanned) where each per-item {@link performAdvanceIsolated} re-fetches the
144
+ * SAME mirror, so item N's clone branches off a `main` that contains item N-1's
145
+ * result (FRESHNESS, not re-selection — the SNAPSHOT-ONCE parity with
146
+ * `do --isolated -n`).
147
+ *
148
+ * **`-n` is ALWAYS SEQUENTIAL (US #25)** — selecting N items from the mirror and
149
+ * running them one at a time is a dumb "run the tick N times" loop; parallelism is
150
+ * `run`'s concurrent loop or the CI matrix, NEVER `-n`. **SNAPSHOT-ONCE, NOT
151
+ * dependency-aware:** a `blockedBy` dependent ineligible at scan time is NOT
152
+ * selected and is NOT drained in the same run — IDENTICAL to `do --isolated -n`
153
+ * (dependency-aware scheduling is a SEPARATE cross-verb enhancement,
154
+ * `work/notes/observations/do-autopick-no-dependency-aware-scheduling.md`).
155
+ */
156
+ export async function performAdvanceIsolatedAuto(options) {
157
+ const runIsolated = options.runIsolated ?? performAdvanceIsolated;
158
+ const read = options.read ?? ledgerRead;
159
+ const note = options.note ?? (() => { });
160
+ const count = options.count ?? 1;
161
+ // Ensure the bare hub mirror ONCE up front so the pool scan reads the freshest
162
+ // committed `main`. Each per-item `performAdvanceIsolated` re-ensures the SAME
163
+ // mirror idempotently (a fetch, never a re-clone).
164
+ let mirror;
165
+ try {
166
+ mirror = ensureMirror({
167
+ url: options.remote,
168
+ workspacesDir: options.workspacesDir,
169
+ env: options.env,
170
+ });
171
+ }
172
+ catch (err) {
173
+ const message = err instanceof Error ? err.message : String(err);
174
+ note(message);
175
+ return { results: [], exitCode: 1, message };
176
+ }
177
+ // Scan the mirror's committed `main` for the SAME pools the in-place scan
178
+ // enumerates (eligible tasks gated on `autoBuild`, taskable prds gated on
179
+ // `autoTask`, + the lifecycle sub-pools), through the SHARED mirror-pool scan.
180
+ const scan = await scanMirrorPool({
181
+ mirrorPath: mirror.path,
182
+ config: options.config,
183
+ read,
184
+ warn: options.warn,
185
+ env: options.env,
186
+ lifecycleGates: options.lifecycleGates,
187
+ });
188
+ // Order across the pools per the resolved `selectionOrder` + bound by count —
189
+ // the SAME shared, pure `selectPrioritised` the in-place + `run` drivers use.
190
+ // Selected ONCE here; the loop iterates the FROZEN set (snapshot-once).
191
+ const selected = selectPrioritised({
192
+ report: scan.report,
193
+ caps: {
194
+ maxParallel: Number.MAX_SAFE_INTEGER,
195
+ perRepoMax: Number.MAX_SAFE_INTEGER,
196
+ },
197
+ specs: scan.specs,
198
+ selectionOrder: options.config.selectionOrder,
199
+ lifecycle: scan.lifecycle,
200
+ count,
201
+ });
202
+ if (selected.length === 0) {
203
+ const message = 'Nothing eligible to advance on the remote (no eligible tasks and no ' +
204
+ 'taskable prds under the per-action gates).';
205
+ note(message);
206
+ return { results: [], exitCode: 0, message };
207
+ }
208
+ const results = [];
209
+ for (const item of selected) {
210
+ const result = await runIsolated(perItemOptions(options, argForSelected(item)));
211
+ results.push(result);
212
+ }
213
+ return aggregate(results);
214
+ }
215
+ /**
216
+ * Run the EXPLICIT multi-arg form (`advance --isolated <a> <b> …`): the NAMED items
217
+ * in the GIVEN order (no pool/priority — the operator chose them), each through the
218
+ * ISOLATED advance-tick runner, SEQUENTIALLY. No mirror scan is needed (the args
219
+ * are explicit); the per-item tick resolves each bare/`prd:`/`obs:` arg itself.
220
+ */
221
+ export async function performAdvanceIsolatedArgs(args, options) {
222
+ const runIsolated = options.runIsolated ?? performAdvanceIsolated;
223
+ const results = [];
224
+ for (const arg of args) {
225
+ const result = await runIsolated(perItemOptions(options, arg));
226
+ results.push(result);
227
+ }
228
+ return aggregate(results);
229
+ }
230
+ /** The advance arg for a pool-selected item (the SELECTION->ARG dispatch). */
231
+ function argForSelected(item) {
232
+ if (item.namespace === 'observation') {
233
+ return `obs:${item.slug}`;
234
+ }
235
+ return item.namespace === 'spec' ? `spec:${item.slug}` : item.slug;
236
+ }
237
+ /** Build the per-item {@link PerformAdvanceIsolatedOptions} for one arg. */
238
+ function perItemOptions(options, arg) {
239
+ const { config: _config, count: _count, read, env, runIsolated: _runIsolated, run, warn: _warn, lifecycleGates: _lifecycleGates, ...rest } = options;
240
+ void _config;
241
+ void _count;
242
+ void _runIsolated;
243
+ void _warn;
244
+ void _lifecycleGates;
245
+ return { ...rest, arg, read, env, run };
246
+ }
247
+ /** Aggregate per-item results into the multi-item contract (mirrors `do`'s). */
248
+ function aggregate(results) {
249
+ const firstFailure = results.find((r) => r.exitCode !== 0);
250
+ const exitCode = firstFailure ? firstFailure.exitCode : 0;
251
+ const ok = results.filter((r) => r.exitCode === 0).length;
252
+ const message = `advanced ${results.length} item${results.length === 1 ? '' : 's'} ` +
253
+ `(${ok} ok, ${results.length - ok} not).`;
254
+ return { results, exitCode, message };
255
+ }
256
+ //# sourceMappingURL=advance-isolated.js.map