dorfl 0.0.0 → 0.1.1

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 +3100 -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 +208 -0
  162. package/dist/frontmatter.d.ts.map +1 -0
  163. package/dist/frontmatter.js +344 -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 +329 -0
  330. package/dist/prd-to-spec.d.ts.map +1 -0
  331. package/dist/prd-to-spec.js +706 -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 +363 -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 +951 -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 +4379 -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 +477 -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 +1059 -0
  581. package/src/prepare.ts +230 -0
  582. package/src/prompt.ts +763 -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 +1437 -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,197 @@
1
+ /**
2
+ * The pure `advance` TICK classifier (prd `advance-loop`, task
3
+ * `advance-tick-classifier`) — the substrate-agnostic, read-only seam BOTH the
4
+ * one-shot driver and the loop (`run`) driver wrap. Mirrors the existing pure
5
+ * `categorise.ts` / `eligibility.ts` seams: NO model, NO lock, NO file mutation
6
+ * — it returns WHICH rung on WHICH item from EXACTLY two signals plus the item
7
+ * type, and nothing executes here (the rung EXECUTION is later tasks).
8
+ *
9
+ * The two signals (and ONLY these two):
10
+ * 1. the item's `needsAnswers` flag (from `frontmatter.ts`); and
11
+ * 2. the sidecar's ANSWERED-STATE (from the `advance-sidecar-contract`
12
+ * keystone: {@link allAnswered} / {@link pendingEntries} over the entries).
13
+ *
14
+ * The per-item state machine (the deterministic trigger — two signals only):
15
+ *
16
+ * needsAnswers: true?
17
+ * ├─ NO → ANALYSE (state-appropriate rung: build a ready task / task a ready
18
+ * │ prd / triage an untriaged observation). Analysis MAY advance, OR
19
+ * │ SURFACE questions.
20
+ * └─ YES → sidecar exists?
21
+ * ├─ NO → ANALYSE (first pass: generate questions → write the sidecar)
22
+ * │ [transitional — surfacing normally writes the sidecar atomically]
23
+ * └─ YES → all entries answered?
24
+ * ├─ YES → ANALYSE: apply the answers + advance.
25
+ * └─ NO → NO-OP (awaiting human).
26
+ *
27
+ * Two invariants this classifier (and the downstream that executes the rung)
28
+ * MUST preserve:
29
+ * 1. `needsAnswers:false ⟺ NO active sidecar` (clear-flag and delete-sidecar are
30
+ * the SAME atomic step — enforced in `advance-sidecar-contract`'s
31
+ * `applyAtomic`, asserted HERE at the classifier boundary). A
32
+ * contradictory input (one set without the other) is the only state the
33
+ * classifier REFUSES to classify into an ANALYSE/NO-OP rung — it returns the
34
+ * explicit `invariant-violation` kind so a caller can route it rather than
35
+ * silently mis-advance.
36
+ * 2. A PENDING (not-all-answered) sidecar makes the tick a clean NO-OP (so a
37
+ * `run` daemon never spins hot re-surfacing the same question). A SUBSET of
38
+ * answered entries is still pending ⇒ SKIP (NO-OP).
39
+ *
40
+ * "ANALYSE" is NOT "always advance" — surface-and-pause is itself a rung, so the
41
+ * ANALYSE branch resolves to the per-TYPE rung the executor will run (the cells
42
+ * of the prd's "Per-item-type transitions" table): `build-task` (task),
43
+ * `task-spec` (spec), `triage-observation` (observation) when there are no open
44
+ * questions; `surface` (first-pass question generation) when `needsAnswers` but
45
+ * no sidecar yet; `apply` when all entries are answered.
46
+ */
47
+
48
+ import type {SidecarModel, SidecarType} from './sidecar.js';
49
+ import {allAnswered} from './sidecar.js';
50
+
51
+ /**
52
+ * One TICK input: an item's TYPE + its two classification signals. `needsAnswers`
53
+ * is the item-body flag (`undefined`/`false` ⇒ not gated; `true` ⇒ gated). The
54
+ * `sidecar` is the parsed ACTIVE sidecar model when one exists, else `undefined`
55
+ * — the classifier reads its answered-state via the keystone's derived helpers,
56
+ * never a third state store.
57
+ */
58
+ export interface TickItem {
59
+ /** The item type — the state machine is per-TYPE (task / prd / observation). */
60
+ type: SidecarType;
61
+ /** Autonomy axis 2 (DISCOVERED): `true` ⇒ open questions block autonomous work. */
62
+ needsAnswers: boolean | undefined;
63
+ /** The parsed ACTIVE sidecar, or `undefined` when none exists. */
64
+ sidecar: SidecarModel | undefined;
65
+ }
66
+
67
+ /**
68
+ * The CLASSIFIED rung kinds (a discriminated union NAMING the rung WITHOUT
69
+ * executing it). The ANALYSE rungs split per-type; `surface`/`apply` are
70
+ * type-agnostic transitions; `no-op` is the calm-at-rest result; and
71
+ * `invariant-violation` is the explicit refusal an inconsistent input yields.
72
+ */
73
+ export type TickRungKind =
74
+ // --- ANALYSE rungs (no open questions; advance one lifecycle rung) ---
75
+ /** A ready task → build it (later: invoke the `do <slug>` machinery). */
76
+ | 'build-task'
77
+ /** A ready spec → task it (later: invoke the `do spec:<slug>` machinery). */
78
+ | 'task-spec'
79
+ /** An untriaged observation → triage it (auto-disposition or surface a question). */
80
+ | 'triage-observation'
81
+ // --- Transitional ANALYSE rungs (driven by the two signals) ---
82
+ /** `needsAnswers` but NO sidecar yet → first-pass question generation. */
83
+ | 'surface'
84
+ /** A sidecar with EVERY entry answered → apply the answers + advance. */
85
+ | 'apply'
86
+ // --- Calm-at-rest ---
87
+ /** Nothing to do: a PENDING sidecar (awaiting human) or nothing eligible. */
88
+ | 'no-op'
89
+ // --- The refused state ---
90
+ /** The `needsAnswers:false ⟺ no active sidecar` invariant is broken. */
91
+ | 'invariant-violation';
92
+
93
+ /**
94
+ * The classifier's verdict: the rung kind, the item type it was classified for,
95
+ * and a short machine-stable `reason` tag for the NO-OP / refusal cases (so a
96
+ * caller — or a test — can distinguish "pending sidecar" from "nothing eligible"
97
+ * without re-deriving the signals).
98
+ */
99
+ export interface TickClassification {
100
+ kind: TickRungKind;
101
+ type: SidecarType;
102
+ /**
103
+ * A machine-stable tag explaining a `no-op` / `invariant-violation`:
104
+ * - `pending-sidecar` — an active sidecar still has unanswered entries.
105
+ * - `needsAnswers-without-sidecar` — `needsAnswers:true` but no sidecar AND
106
+ * this should have surfaced (kept for completeness; `surface` covers the
107
+ * normal first pass, so this only appears on the refusal path below).
108
+ * - `sidecar-without-needsAnswers` — a sidecar exists but `needsAnswers` is
109
+ * not `true` (invariant 1 broken — the flag and the sidecar disagree).
110
+ * `undefined` for the ANALYSE rungs and `apply`/`surface`.
111
+ */
112
+ reason?:
113
+ | 'pending-sidecar'
114
+ | 'needsAnswers-without-sidecar'
115
+ | 'sidecar-without-needsAnswers';
116
+ }
117
+
118
+ /** The per-TYPE ANALYSE rung when there are no open questions (the no-gate path). */
119
+ const ANALYSE_RUNG_FOR_TYPE: Record<SidecarType, TickRungKind> = {
120
+ task: 'build-task',
121
+ // A `spec` analyses through the `task-spec` rung (spec IS the parent-spec
122
+ // artifact tasked into build tasks).
123
+ spec: 'task-spec',
124
+ observation: 'triage-observation',
125
+ };
126
+
127
+ /**
128
+ * Classify ONE tick PURELY from the item's two signals + its type — read-only,
129
+ * no model, no lock, no file mutation. Returns the classified rung the executor
130
+ * will later run (or `no-op` / `invariant-violation`). The decision tree is the
131
+ * prd's per-item state machine, with invariant 1 asserted at the boundary:
132
+ *
133
+ * - `needsAnswers` NOT true:
134
+ * - a sidecar present ⇒ INVARIANT 1 BROKEN (`sidecar-without-needsAnswers`)
135
+ * → `invariant-violation`. (`needsAnswers:false ⟺ no active sidecar`.)
136
+ * - no sidecar ⇒ ANALYSE: the per-type rung (`build-task` / `task-spec` /
137
+ * `triage-observation`).
138
+ * - `needsAnswers` true:
139
+ * - NO sidecar ⇒ `surface` (first-pass question generation — transitional).
140
+ * - a PENDING sidecar (a subset/none answered) ⇒ `no-op` (`pending-sidecar`)
141
+ * — the clean NO-OP that keeps a `run` daemon from spinning hot; a SUBSET
142
+ * of answered entries SKIPS here too.
143
+ * - an ALL-ANSWERED sidecar ⇒ `apply` (apply the answers + advance; the
144
+ * executor may append new Qs and re-pause, or resolve fully).
145
+ */
146
+ export function classifyTick(item: TickItem): TickClassification {
147
+ const {type, needsAnswers, sidecar} = item;
148
+ const gated = needsAnswers === true;
149
+
150
+ if (!gated) {
151
+ // Invariant 1: `needsAnswers:false ⟺ no active sidecar`. A sidecar present
152
+ // here means the flag and the sidecar DISAGREE — refuse rather than
153
+ // silently advance past an open question the flag forgot to declare.
154
+ if (sidecar !== undefined) {
155
+ return {
156
+ kind: 'invariant-violation',
157
+ type,
158
+ reason: 'sidecar-without-needsAnswers',
159
+ };
160
+ }
161
+ // ANALYSE: the per-type lifecycle rung (read-only classification only).
162
+ return {kind: ANALYSE_RUNG_FOR_TYPE[type], type};
163
+ }
164
+
165
+ // `needsAnswers` is true.
166
+ if (sidecar === undefined) {
167
+ // First pass: no sidecar yet → surface the questions (write it). This is the
168
+ // transitional cell — surfacing normally writes the sidecar atomically, so a
169
+ // gated item without a sidecar is the moment to generate questions.
170
+ return {kind: 'surface', type};
171
+ }
172
+
173
+ // A sidecar exists: the two signals AGREE (invariant 1 holds). The answered-
174
+ // state — derived from the ENTRIES, never the frontmatter mirror — decides.
175
+ if (allAnswered(sidecar)) {
176
+ // Every entry answered → apply + advance (the executor may re-pause).
177
+ return {kind: 'apply', type};
178
+ }
179
+
180
+ // A PENDING sidecar (a SUBSET answered, or none) ⇒ clean NO-OP. This is the
181
+ // invariant-2 cell: the loop never thrashes on a half-answered item; it idles
182
+ // until the human answers the rest (equivalent to `pendingEntries.length > 0`).
183
+ return {kind: 'no-op', type, reason: 'pending-sidecar'};
184
+ }
185
+
186
+ /**
187
+ * Is this classified rung a CLASSIFIED-NO-OP (the calm-at-rest result)? A small
188
+ * predicate the loop/convergence tests use to assert "the candidate pool is
189
+ * STABLE" — a `no-op` OR an `invariant-violation` is NOT an advanceable rung. The
190
+ * ANALYSE rungs + `surface` + `apply` ARE advanceable.
191
+ */
192
+ export function isAdvanceable(classification: TickClassification): boolean {
193
+ return (
194
+ classification.kind !== 'no-op' &&
195
+ classification.kind !== 'invariant-violation'
196
+ );
197
+ }
@@ -0,0 +1,414 @@
1
+ import {
2
+ performAdvance,
3
+ type AdvanceContext,
4
+ type AdvanceResult,
5
+ type AdvanceExitCode,
6
+ type AdvanceOutcome,
7
+ } from './advance.js';
8
+ import {
9
+ pushTreelessResult,
10
+ TREELESS_RUNGS,
11
+ } from './advance-treeless-publish.js';
12
+ import {scanRepoPaths} from './scan.js';
13
+ import {ledgerRead, type LedgerReadStrategy} from './ledger-read.js';
14
+ import {
15
+ selectPrioritised,
16
+ taskableSpecs,
17
+ type SpecCandidate,
18
+ type SelectedItem,
19
+ } from './select-priority.js';
20
+ import {gatherLifecycleInPlace} from './lifecycle-gather.js';
21
+ import type {LifecyclePoolGates} from './lifecycle-pools.js';
22
+ import type {Config} from './config.js';
23
+ import type {ConfigOverrideMap} from './config-override.js';
24
+
25
+ /**
26
+ * The **`advance` one-shot DRIVER** (prd `advance-loop`, task
27
+ * `advance-drivers-and-gates`, US #2/7/23/25/26) — the SEQUENTIAL driver that
28
+ * WRAPS the substrate-agnostic advance TICK ({@link performAdvance}) over named
29
+ * item(s) or the bare eligible-SET form. It is the in-place counterpart of
30
+ * `do-autopick`'s {@link performDoAuto}/{@link performDoArgs}: it SELECTS +
31
+ * ORDERS items and runs the EXISTING tick per item, SEQUENTIALLY.
32
+ *
33
+ * **One substrate-agnostic TICK, two drivers (US #7).** The tick (classify →
34
+ * lock → execute, already built in {@link performAdvance}) is the shared
35
+ * contract. The TWO drivers wrap it:
36
+ *
37
+ * - the **one-shot driver** (this module) — human `advance`-style or a CI
38
+ * invocation: runs the tick over named item(s) / the eligible set
39
+ * SEQUENTIALLY (`advance` is sequential, exactly like `do`);
40
+ * - the **loop driver** (`run`, `run.ts`) — loops the tick over the eligible
41
+ * set with genuine parallelism, each item lock-guarded by the `advancing`
42
+ * borrow (already in {@link performAdvance}). `run` ≡ CI (same tick, different
43
+ * substrate); NO new execution model is introduced.
44
+ *
45
+ * **`-n x` is ALWAYS SEQUENTIAL (US #25)** — a dumb "run the tick N times" loop,
46
+ * for BOTH `do -n` ({@link performDoAuto}) and `advance -n` (here). Parallelism is
47
+ * NEVER a property of `-n`; it comes only from `run` (the concurrent loop) or the
48
+ * CI matrix.
49
+ *
50
+ * **The FLAT per-action gate family (US #23)** falls out of the SELECTION layer,
51
+ * exactly as it does for `do`: the eligible-pool scan only SURFACES a build item
52
+ * when `autoBuild` is on and a task-a-prd item when `autoTask` is on (the gate
53
+ * is a policy on the autonomous-SELECTION step, NOT on the explicit verb a human
54
+ * typed — an explicitly-NAMED `advance <slug>` builds regardless, mirroring
55
+ * `do <task>` vs `autoBuild`). SURFACE + APPLY are ALWAYS allowed — they run
56
+ * through the tick on any named item and are never pool-gated, so a repo with
57
+ * EVERY flag off still gets the QUESTION LOOP (surface + apply) but no autonomous
58
+ * build/task in the bare/`-n` selection ("question loop with zero autonomy").
59
+ * The triage rung's ask-vs-auto distinction (`observationTriage`) is read inside
60
+ * the tick; its SELECTION-layer `off` gate drops the observation pool here.
61
+ *
62
+ * **Isolation + chaining FALL OUT (US #26):** this driver builds NO new isolation
63
+ * or chaining machinery — it threads the SAME `AdvanceContext` the tick already
64
+ * consumes (which orchestrates `do`/`do prd:` through the isolation-strategy seam
65
+ * and rebase-before-integrate); a chain conflict routes to needs-attention as
66
+ * today, inside the orchestrated `do`.
67
+ */
68
+
69
+ /** The single-`advance` tick runner this driver drives per selected item. */
70
+ export type AdvanceTickRunner = (
71
+ options: AdvanceTickOptions,
72
+ ) => Promise<AdvanceResult>;
73
+
74
+ /** The per-item tick options: the run context + the one resolved arg. */
75
+ export interface AdvanceTickOptions extends AdvanceContext {
76
+ arg: string;
77
+ read?: LedgerReadStrategy;
78
+ }
79
+
80
+ /** Options shared with every per-item tick run, threaded verbatim. */
81
+ type SharedAdvanceContext = AdvanceContext;
82
+
83
+ export interface PerformAdvanceMultiOptions extends SharedAdvanceContext {
84
+ /**
85
+ * The resolved repo config — provides `autoBuild` (the build gate for the
86
+ * task pool), `autoTask` (the task-a-prd gate for the prd pool), and
87
+ * `selectionOrder` (the configurable cross-pool order). The per-action gate
88
+ * family is APPLIED HERE, at the selection layer (the policy-on-autonomous-
89
+ * selection point).
90
+ */
91
+ config: Config;
92
+ /**
93
+ * The per-machine {@link ConfigOverrideMap}. Threaded into the in-place pool
94
+ * scan (`scanRepoPaths`) so the per-machine override applies to advance
95
+ * autopick eligibility — WITHOUT it the committed `.dorfl.json` silently
96
+ * beats the override on this path (the in-place advance autopick mirror of the
97
+ * `do` autopick defect).
98
+ */
99
+ override?: ConfigOverrideMap;
100
+ /**
101
+ * `advance -n <x>`: how many eligible items to advance, IN SEQUENCE. Bare
102
+ * `advance` (no arg, no count) ⇒ 1. SEQUENTIAL — never a parallelism knob
103
+ * (US #25; parallelism is `run` or the CI matrix).
104
+ */
105
+ count?: number;
106
+ /** Override the single-tick runner (tests inject a stub). Defaults to {@link performAdvance}. */
107
+ run?: AdvanceTickRunner;
108
+ /** Override the read seam (prd pool); defaults to the active {@link ledgerRead}. */
109
+ read?: LedgerReadStrategy;
110
+ /**
111
+ * The LIFECYCLE-POOL create-gates (task `advance-autopick-lifecycle-pools`),
112
+ * the internal hook the gate tasks (`observation-triage-tri-state-gate` /
113
+ * `surface-blockers-gate`) will wire to the `observationTriage` /
114
+ * `surfaceBlockers` config read. INTERIM, born OFF: omitted ⇒ BOTH create-gates
115
+ * OFF, so the triage + surface sub-pools contribute NOTHING and a bare/`-n`
116
+ * `advance` auto-triages / auto-surfaces nothing (it changes no repo's
117
+ * behaviour). The apply sub-pool is NOT gated (consume is always-on), so an
118
+ * answered sidecar applies regardless. Tests FORCE the create-gates on through
119
+ * this same hook to exercise the triage/surface paths.
120
+ */
121
+ lifecycleGates?: LifecyclePoolGates;
122
+ }
123
+
124
+ /** The aggregate result of a multi-item `advance` invocation. */
125
+ export interface AdvanceMultiResult {
126
+ /** Each per-item {@link AdvanceResult}, in the order they ran. */
127
+ results: AdvanceResult[];
128
+ /**
129
+ * The process exit code for the whole invocation: 0 iff EVERY item that ran
130
+ * succeeded (or there was nothing eligible — an empty bare `advance` is not a
131
+ * failure); otherwise the first non-zero per-item exit code (the worst outcome
132
+ * surfaces). Mirrors `do`'s multi-item exit contract.
133
+ */
134
+ exitCode: AdvanceExitCode;
135
+ /** Human-readable summary (printed by the CLI). */
136
+ message: string;
137
+ }
138
+
139
+ /**
140
+ * The task-pool caps for an in-place `advance` selection. `advance` (one-shot) is
141
+ * per-repo + SEQUENTIAL, so the REAL bound is the requested `count`. We cap the
142
+ * task pool at "all eligible" and let {@link selectPrioritised}'s `count` trim
143
+ * across both pools — identical to `do-autopick`'s {@link performDoAuto}.
144
+ */
145
+ const ALL_ELIGIBLE = Number.MAX_SAFE_INTEGER;
146
+
147
+ /**
148
+ * Run the BARE / `-n <x>` form: build the two ELIGIBLE pools for `cwd` (eligible
149
+ * TASKS gated by `autoBuild`, taskable prds gated by `autoTask`), order them
150
+ * (plus the lifecycle pools) per the resolved `selectionOrder` with `apply`
151
+ * pinned first, take `count` (default 1), and run the EXISTING advance tick per
152
+ * selected item, SEQUENTIALLY. The pools are the EXACT
153
+ * `do-autopick` pools (the SAME `scoreItems`/`taskableSpecs` predicates), so the
154
+ * per-action gate family is honoured by construction.
155
+ *
156
+ * The bare/`-n` selection draws ONLY from the autonomous pools (eligible tasks +
157
+ * taskable prds); SURFACE + APPLY of a gated item are reached by NAMING the item
158
+ * ({@link performAdvanceArgs}) — they are always-allowed and not pool-gated, so the
159
+ * bare form with every flag off correctly selects NOTHING (zero autonomy) while a
160
+ * named `advance <slug>` still surfaces/applies.
161
+ */
162
+ export async function performAdvanceAuto(
163
+ options: PerformAdvanceMultiOptions,
164
+ ): Promise<AdvanceMultiResult> {
165
+ const run = options.run ?? performAdvance;
166
+ const read = options.read ?? ledgerRead;
167
+ const note = options.note ?? (() => {});
168
+ const cwd = options.cwd;
169
+ const count = options.count ?? 1;
170
+
171
+ // Pool 1 — eligible TASKS via the EXISTING scan/select path. `scoreItems`
172
+ // inside `scanRepoPaths` gates eligibility on `autoBuild` (the build gate), so
173
+ // with `autoBuild` off NO task is selected — the build rung is never reached
174
+ // by the bare/`-n` selection.
175
+ const report = scanRepoPaths(
176
+ [cwd],
177
+ options.config,
178
+ new Set(),
179
+ options.override,
180
+ );
181
+
182
+ // Pool 2 — TASKABLE prds filtered by `autoslice-gate`'s predicate (gated on
183
+ // `autoTask`). With `autoTask` off NO prd is selected — the task rung is
184
+ // never reached by the bare/`-n` selection.
185
+ const pool = read.resolveSpecPool({repoPath: cwd});
186
+ const specCandidates: SpecCandidate[] = pool.specs.map((spec) => ({
187
+ repoPath: cwd,
188
+ slug: spec.slug,
189
+ humanOnly: spec.humanOnly,
190
+ needsAnswers: spec.needsAnswers,
191
+ taskedAfter: spec.taskedAfter,
192
+ }));
193
+ const eligibleSpecs = taskableSpecs({
194
+ candidates: specCandidates,
195
+ taskedSlugs: pool.taskedSlugs,
196
+ autoTask: options.config.autoTask,
197
+ });
198
+
199
+ // Pools 3 + 4 — the LIFECYCLE pools (untriaged observations + `needsAnswers`-
200
+ // blocked tasks/prds + answered-sidecar items), built CALLER-SIDE (here, the
201
+ // `advance` caller) through the SHARED enumeration unit and passed in — NOT baked
202
+ // into `selectPrioritised` (so `do` is provably unchanged). The create-gates
203
+ // default OFF (interim hardcoded-off): triage + surface contribute nothing; the
204
+ // apply sub-pool is always-on (consume), so an answered sidecar still applies.
205
+ const lifecycle = gatherLifecycleInPlace({
206
+ repoPath: cwd,
207
+ read,
208
+ gates: options.lifecycleGates,
209
+ });
210
+
211
+ // Order across the (up to) FIVE pools per the resolved `selectionOrder` (apply
212
+ // pinned first) + bound by count — the SAME shared, pure `selectPrioritised` the
213
+ // `do` auto-pick driver uses (which passes NO lifecycle pools, so it is unchanged).
214
+ const selected = selectPrioritised({
215
+ report,
216
+ caps: {maxParallel: ALL_ELIGIBLE, perRepoMax: ALL_ELIGIBLE},
217
+ specs: eligibleSpecs,
218
+ selectionOrder: options.config.selectionOrder,
219
+ lifecycle,
220
+ count,
221
+ });
222
+
223
+ if (selected.length === 0) {
224
+ // With every gate off this is the "zero autonomy" case: nothing autonomous to
225
+ // select. The question loop (surface/apply) is reached by NAMING an item, not
226
+ // the bare form — so this is calm-at-rest, NOT a failure.
227
+ const message =
228
+ 'Nothing eligible to advance (no eligible tasks and no taskable prds ' +
229
+ 'under the per-action gates; name an item to surface/apply its questions).';
230
+ note(message);
231
+ return {results: [], exitCode: 0, message};
232
+ }
233
+
234
+ return runSelectedInSequence(selected, options, run);
235
+ }
236
+
237
+ /**
238
+ * Run the EXPLICIT multi-arg form (`advance <a> <b> …`): the named items in the
239
+ * GIVEN order (no pool/priority — the operator chose them). Each arg is run
240
+ * through the existing advance tick, which itself resolves bare/`task:`/`prd:`/
241
+ * `obs:` (so a named prd drives the task rung, an `obs:` the triage rung, a
242
+ * collision errors), SEQUENTIALLY. A NAMED item is the always-allowed path — its
243
+ * surface/apply rung runs regardless of the per-action gates.
244
+ */
245
+ export async function performAdvanceArgs(
246
+ args: string[],
247
+ options: PerformAdvanceMultiOptions,
248
+ ): Promise<AdvanceMultiResult> {
249
+ const run = options.run ?? performAdvance;
250
+ const selected: SelectedItem[] = args.map((arg) => ({
251
+ repoPath: options.cwd,
252
+ slug: arg,
253
+ // The arg is passed VERBATIM to the tick (it does its own slug resolution
254
+ // across task/prd/observation); the namespace is irrelevant for explicit args.
255
+ namespace: 'task' as const,
256
+ }));
257
+ return runSelectedInSequence(selected, options, run, {verbatimArg: true});
258
+ }
259
+
260
+ /**
261
+ * Run a list of selected items through the existing advance tick, SEQUENTIALLY
262
+ * (US #25 — `-n` is always sequential), threading the shared context to each. For
263
+ * the pool path the arg encodes the namespace (`prd:<slug>` for a selected prd,
264
+ * bare slug for a task); for the explicit-arg path the caller's raw arg is passed
265
+ * verbatim. Each tick is INDEPENDENTLY `advancing`-lock-guarded inside
266
+ * {@link performAdvance} — sequential here means one item at a time, never a
267
+ * parallelism knob.
268
+ */
269
+ async function runSelectedInSequence(
270
+ selected: SelectedItem[],
271
+ options: PerformAdvanceMultiOptions,
272
+ run: AdvanceTickRunner,
273
+ mode: {verbatimArg?: boolean} = {},
274
+ ): Promise<AdvanceMultiResult> {
275
+ const shared = sharedAdvanceContext(options);
276
+ const results: AdvanceResult[] = [];
277
+ for (const item of selected) {
278
+ const arg = mode.verbatimArg ? item.slug : argForSelectedItem(item);
279
+ const result = await runAdvanceTickWithTreelessPublish(
280
+ {...shared, arg, read: options.read},
281
+ run,
282
+ );
283
+ results.push(result);
284
+ }
285
+
286
+ const firstFailure = results.find((r) => r.exitCode !== 0);
287
+ const exitCode: AdvanceExitCode = firstFailure ? firstFailure.exitCode : 0;
288
+ const ok = results.filter((r) => r.exitCode === 0).length;
289
+ const message =
290
+ `advanced ${results.length} item${results.length === 1 ? '' : 's'} ` +
291
+ `(${ok} ok, ${results.length - ok} not).`;
292
+ return {results, exitCode, message};
293
+ }
294
+
295
+ /**
296
+ * Run ONE in-place advance tick + ff-push a tree-less rung's result to the
297
+ * arbiter — task `advance-in-place-publishes-treeless-results`. Wraps the
298
+ * substrate-agnostic tick ({@link AdvanceTickRunner}) with the shared
299
+ * {@link pushTreelessResult} so a surfaced sidecar / `triaged:` marker /
300
+ * applied-answer commit committed LOCALLY in the in-place cwd LANDS on the
301
+ * arbiter's `main` (today the in-place tick commits locally and the work is lost
302
+ * on an ephemeral CI runner). Mirrors the `--isolated` one-shot + `run` loop
303
+ * driver call sites byte-for-byte:
304
+ *
305
+ * - gates PURELY on `result.exitCode === 0 && TREELESS_RUNGS.has(result.rung)
306
+ * && context.arbiter !== undefined` — the SAME gate the existing drivers
307
+ * use, no cleverer guard (a build/task rung integrates through the
308
+ * `doDriver` band; a no-arbiter laptop checkout already sits on the real
309
+ * `main`);
310
+ * - reuses `pushTreelessResult` VERBATIM (its bounded re-fetch+rebase retry is
311
+ * LOAD-BEARING for a sequential `-n` batch that integrates a build/task rung
312
+ * mid-batch and then runs a later tree-less rung whose `HEAD:main` push is
313
+ * non-fast-forward by construction);
314
+ * - NEVER `--force`. A push that keeps failing (or a genuine rebase conflict)
315
+ * is REPORTED via the `note` sink and does NOT crash the tick — the work
316
+ * stays committed in the cwd for the next pass / a human.
317
+ *
318
+ * Used by BOTH in-place entry points: {@link runSelectedInSequence} (the
319
+ * multi-item `-n` / auto-pick / multi-arg path) AND the CLI single-named-item
320
+ * path (which calls {@link performAdvance} directly, bypassing the sequence
321
+ * runner — the easy-to-miss site).
322
+ *
323
+ * The promote-apply edge mirrors the existing drivers without a special case: an
324
+ * `apply` rung whose agentic verdict mints an artifact (`mint-task`/`mint-prd`)
325
+ * runs `promoteObservation`'s OWN arbiter CAS and commits NOTHING tree-less, so the
326
+ * ff-push here is a harmless no-op (a `HEAD` with nothing new) — it does NOT
327
+ * double-publish nor clobber the promote CAS.
328
+ */
329
+ export async function runAdvanceTickWithTreelessPublish(
330
+ options: AdvanceTickOptions,
331
+ run: AdvanceTickRunner,
332
+ ): Promise<AdvanceResult> {
333
+ const result = await run(options);
334
+ if (
335
+ result.exitCode === 0 &&
336
+ result.rung !== undefined &&
337
+ TREELESS_RUNGS.has(result.rung) &&
338
+ options.arbiter !== undefined
339
+ ) {
340
+ await pushTreelessResult({
341
+ cwd: options.cwd,
342
+ arbiter: options.arbiter,
343
+ // Large liveness ceiling — see `pushTreelessResult`'s C2 docs (task
344
+ // `c2-rebase-until-real-on-durable-main-promotions`). A clean re-rebase
345
+ // no longer counts against a small budget; a genuine conflict (slug gone
346
+ // from its source folder on the new `main`) still stops definitively.
347
+ retries: 1000,
348
+ env: undefined,
349
+ note: options.note ?? (() => {}),
350
+ });
351
+ }
352
+ return result;
353
+ }
354
+
355
+ /**
356
+ * The advance TICK arg for a pool-selected item — the SELECTION->ARG dispatch
357
+ * (task `advance-autopick-lifecycle-pools`, F-NAMESPACE). The `namespace`
358
+ * discriminator the selection carried maps to the tick arg the tick then
359
+ * classifies into the right rung:
360
+ * - `observation` → `obs:<slug>` (the triage rung; bare would resolve to a
361
+ * task, so the `obs:` prefix is required);
362
+ * - `spec` → `spec:<slug>` (a taskable spec's task rung, OR a `needsAnswers` spec
363
+ * the tick surfaces/applies);
364
+ * - `task` → bare `<slug>` (an eligible task's build rung, OR a `needsAnswers`
365
+ * task the tick surfaces/applies).
366
+ * The tick re-classifies each arg, so a `needsAnswers`-blocked task/prd reaches
367
+ * surface/apply and an untriaged observation reaches triage — the classifier +
368
+ * rung bodies are unchanged; only this selection->arg mapping is new.
369
+ */
370
+ function argForSelectedItem(item: SelectedItem): string {
371
+ if (item.namespace === 'observation') {
372
+ return `obs:${item.slug}`;
373
+ }
374
+ if (item.namespace === 'spec') {
375
+ return `spec:${item.slug}`;
376
+ }
377
+ return item.slug;
378
+ }
379
+
380
+ /** Strip the multi-only fields, leaving exactly the per-item {@link AdvanceContext}. */
381
+ function sharedAdvanceContext(
382
+ options: PerformAdvanceMultiOptions,
383
+ ): SharedAdvanceContext {
384
+ const {
385
+ config: _config,
386
+ count: _count,
387
+ run: _run,
388
+ read: _read,
389
+ lifecycleGates: _lifecycleGates,
390
+ ...rest
391
+ } = options;
392
+ void _config;
393
+ void _count;
394
+ void _run;
395
+ void _read;
396
+ void _lifecycleGates;
397
+ return rest;
398
+ }
399
+
400
+ /**
401
+ * Is this aggregate result a CALM-AT-REST (US #31 convergence) one — every item
402
+ * that ran was a NO-OP (a pending sidecar idling) AND nothing failed? The
403
+ * convergence/drain tests use this to assert the loop IDLES when there are no
404
+ * answers (no thrash) and DRAINS monotonically as answers arrive. A pool of
405
+ * pending-sidecar items advances NOTHING (every tick a clean no-op); as the human
406
+ * answers, the answered items flip to `apply` and the no-op count shrinks.
407
+ */
408
+ export function isCalmAtRest(result: AdvanceMultiResult): boolean {
409
+ return (
410
+ result.exitCode === 0 && result.results.every((r) => r.outcome === 'no-op')
411
+ );
412
+ }
413
+
414
+ export type {AdvanceOutcome};