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
package/dist/scan.js ADDED
@@ -0,0 +1,374 @@
1
+ import { resolveEligibility } from './eligibility.js';
2
+ import { ledgerRead, } from './ledger-read.js';
3
+ import { listMirrors } from './registry.js';
4
+ import { fetchMirrorMainOrWarn, resolveRepoConfigFromMirror, } from './repo-mirror.js';
5
+ import { resolveRepoConfig } from './repo-config.js';
6
+ import { taskableSpecs } from './select-priority.js';
7
+ import { lintLocalLedger, lintRefLedger, } from './ledger-lint.js';
8
+ import { gatherLifecycleInPlace, gatherLifecycleMirror, } from './lifecycle-gather.js';
9
+ import { heldTaskSlugs, listItemLockEntries, } from './item-lock.js';
10
+ /**
11
+ * The CREATE-side lifecycle gates for the propose-matrix lifecycle pool, derived
12
+ * from a repo's resolved config. Maps the config's question-surfacing gate family
13
+ * onto the boolean {@link LifecyclePoolGates} `buildLifecyclePools` takes:
14
+ *
15
+ * - `observationTriage !== 'off'` ⇒ `triage` ON (BOTH `ask` and `auto` enumerate
16
+ * triage candidates into the matrix identically; the ask/auto distinction is a
17
+ * DISPOSITION concern enforced LATER by the triage rung itself, not by whether
18
+ * a leg exists — the matrix only decides "is there a leg at all?").
19
+ * - `surfaceBlockers` ⇒ `surface` ON.
20
+ *
21
+ * `apply` is NOT a gate (CONSUME is always-on; `buildLifecyclePools` enumerates
22
+ * answered sidecars regardless), so a committed answer always applies even with
23
+ * both create-gates calm — the same create-vs-consume invariant the autopick
24
+ * drivers honour (ADR `ci-config-policy-and-gate-family` §4). Reused on BOTH the
25
+ * mirror (`scan`) and in-place (`scanRepoPaths`) substrates so the propose matrix
26
+ * agrees with the `advance -n` / `run` selection.
27
+ */
28
+ export function lifecycleGatesFrom(config) {
29
+ return {
30
+ triage: config.observationTriage !== 'off',
31
+ surface: config.surfaceBlockers === true,
32
+ surfaceStaging: config.surfaceStaging === true,
33
+ };
34
+ }
35
+ /**
36
+ * Collect the set of slugs present in a repo's `work/done/`. Used to resolve
37
+ * `blockedBy` (per-repo only). Falls back to the filename when an item has no
38
+ * `slug` frontmatter. Resolves THROUGH the read seam's local-tree method
39
+ * ({@link ledgerRead}) — the single insertion point for the `work/` state read.
40
+ */
41
+ export function readDoneSlugs(repoPath) {
42
+ return ledgerRead.resolveLocalState({ repoPath }).doneSlugs;
43
+ }
44
+ /**
45
+ * Read and parse every `work/tasks/ready/*.md` (the agent POOL) for a repo, sorted
46
+ * by slug. Resolves THROUGH the read seam's local-tree method
47
+ * ({@link ledgerRead}).
48
+ */
49
+ export function readReadyItems(repoPath) {
50
+ return ledgerRead.resolveLocalState({ repoPath }).ready;
51
+ }
52
+ /**
53
+ * Resolve a per-repo `ScannedItem[]` from an already-resolved `work/` state +
54
+ * the repo's `autoBuild` policy. The shared core of BOTH the registry scan
55
+ * (mirror-ref state) and the working-tree scan (`run`/in-place) — neither learns
56
+ * how the `work/` state was read; they just hand it here. Exported so the
57
+ * MIRROR-SIDE pool scan (`mirror-pool-scan.ts`) scores the bare-mirror task pool
58
+ * through the EXACT same eligibility path as in-place (`do-autopick`), not a fork.
59
+ */
60
+ /**
61
+ * Score a prd pool down to its TASKABLE subset, then label every prd with
62
+ * `eligibility.eligible` (true ⇔ taskable). REUSES {@link taskableSpecs} —
63
+ * the SAME `autoslice-gate` predicate the mirror-side `scanMirrorPool` + the
64
+ * in-place `do-autopick` pool already run — so what is taskable does not
65
+ * fork between the autopick paths and the propose-matrix `scan --json` pool.
66
+ * The `autoTask` gate BINDS through that predicate; a config-less repo with
67
+ * `autoTask` off yields an all-`eligible:false` pool (no `spec:` legs).
68
+ */
69
+ export function scoreSpecs(repoPath, pool, autoTask) {
70
+ const taskable = new Set(taskableSpecs({
71
+ candidates: pool.specs.map((p) => ({
72
+ repoPath,
73
+ slug: p.slug,
74
+ humanOnly: p.humanOnly,
75
+ needsAnswers: p.needsAnswers,
76
+ taskedAfter: p.taskedAfter,
77
+ })),
78
+ taskedSlugs: pool.taskedSlugs,
79
+ autoTask,
80
+ }).map((p) => p.slug));
81
+ return pool.specs.map((p) => ({
82
+ slug: p.slug,
83
+ eligibility: { eligible: taskable.has(p.slug) },
84
+ }));
85
+ }
86
+ /**
87
+ * Project the shared {@link buildLifecyclePools} result (via `gatherLifecycle*`)
88
+ * onto the `scan --json` {@link ScannedLifecycle} shape: triage items keep only
89
+ * their `slug` (the `obs:` prefix is fixed in the matrix `jq`), surface/apply keep
90
+ * `{namespace, slug}` so the `jq` projects the right `task:`/`spec:` prefix. NOT a
91
+ * re-enumeration — a pure shape map over the already-gated pools.
92
+ *
93
+ * The pool items' `namespace` is the wider {@link SelectedNamespace}. SURFACE by
94
+ * construction only carries `'task'`/`'prd'` (an observation with no sidecar is a
95
+ * `triage` candidate, never `surface`), so it narrows + drops any non-task/prd
96
+ * defensively. APPLY additionally admits `'observation'` (an answered observation
97
+ * sidecar → apply), and it MUST be kept so the matrix `jq` emits its
98
+ * `observation:<slug>` apply leg — narrowing it away here is exactly what stranded
99
+ * answered observations (present in neither `triage` nor `apply`). Any OTHER
100
+ * namespace is still dropped defensively.
101
+ */
102
+ export function toScannedLifecycle(pools) {
103
+ const BLOCKED_NAMESPACES = new Set(['task', 'spec', 'observation']);
104
+ // SURFACE stays task/spec-only; APPLY additionally keeps an answered observation.
105
+ const asBlocked = (items, allowObservation) => items
106
+ .filter((i) => i.namespace === 'task' ||
107
+ i.namespace === 'spec' ||
108
+ (allowObservation && i.namespace === 'observation'))
109
+ .filter((i) => BLOCKED_NAMESPACES.has(i.namespace))
110
+ .map((i) => ({
111
+ namespace: i.namespace,
112
+ slug: i.slug,
113
+ }));
114
+ return {
115
+ triage: pools.triage.map((t) => ({ slug: t.slug })),
116
+ surface: asBlocked(pools.surface, false),
117
+ apply: asBlocked(pools.apply, true),
118
+ };
119
+ }
120
+ export function scoreItems(state, autoBuild, counts, heldSlugs = new Set()) {
121
+ // HELD-SLUG SUBTRACTION (prd `ledger-status-per-item-lock-refs` US #15; task
122
+ // `claim-acquires-unified-lock-no-body-move`): exclude any pool slug whose
123
+ // per-item lock is currently held — the eligible pool is "in `tasks/ready/` on
124
+ // `main` AND no lock held".
125
+ //
126
+ // LOAD-BEARING since the lock cut-over: the claim NO LONGER moves the body to
127
+ // `in-progress/` (it stays at `tasks/ready/` on `main`, the held lock IS the
128
+ // claim), so this subtraction is the ONLY thing keeping a claimed / in-flight
129
+ // item out of the eligible pool, NOT the redundant belt-and-suspenders it was
130
+ // while the body-move still removed claimed items. An ACTIVE (in-progress) lock
131
+ // is a legitimate, primary claim signal here.
132
+ //
133
+ // FAIL-OPEN CAVEAT (known defect; selection should fail CLOSED): the held set
134
+ // is gathered by the CALLER and is EMPTY when the lock read is
135
+ // unavailable/offline, so a READ FAULT currently degrades to "subtract nothing"
136
+ // and an in-flight item can leak back into the pool (re-claimed → empty diff →
137
+ // spurious `stuck`). Now that the subtraction is load-bearing this is wrong for
138
+ // SELECTION: a failed lock read must not re-make a held item eligible. See the
139
+ // observation/task on fail-closed lock-read for selection.
140
+ return state.ready
141
+ .filter((item) => !heldSlugs.has(item.slug))
142
+ .map((item) => {
143
+ const eligibility = resolveEligibility({
144
+ humanOnly: item.humanOnly,
145
+ needsAnswers: item.needsAnswers,
146
+ blockedBy: item.blockedBy,
147
+ doneSlugs: state.doneSlugs,
148
+ autoBuild,
149
+ });
150
+ counts.totalItems++;
151
+ if (eligibility.eligible) {
152
+ counts.totalEligible++;
153
+ }
154
+ return { ...item, eligibility };
155
+ });
156
+ }
157
+ /**
158
+ * Read-only end-to-end scan over the REGISTRY (ADR §1): enumerate the registered
159
+ * hub mirrors under `<workspacesDir>/repos/`, **fetch each mirror's `main` first**
160
+ * (ADR §5/§6 — the remote is the source of truth in the registry model), then read
161
+ * each one's full `work/` lifecycle from its BARE `main` ref through the read
162
+ * seam's mirror method (mirrors have no working tree — `resolveLocalState`'s
163
+ * `readdirSync` cannot read them), and resolve eligibility per item (autonomy
164
+ * gate + per-repo `blockedBy`). Claims and runs nothing.
165
+ *
166
+ * **Fetch-first, never fatal:** the old "scan is always offline" invariant is
167
+ * RETIRED (it was the roots-local model); `scan` now refreshes each mirror's
168
+ * `main` before reading. A failed fetch (offline, dead arbiter) is NOT an error —
169
+ * it WARNS via `warn` and falls back to that mirror's last-known `main`, so the
170
+ * queue still reports (its freshness = the last successful fetch). This does NOT
171
+ * change the ledger read STRATEGY (`claim-ledger-vs-protected-main.md`): the
172
+ * offline read of `<mirror>/main:work/...` stays the single strategy — `scan`
173
+ * merely ensures that ref is fresh before reading it.
174
+ *
175
+ * Discovery is the registered hub-mirror set, NOT a config `roots` walk (there is
176
+ * no `roots`/`remotes` field). `scan`/`status` share the {@link listMirrors}
177
+ * primitive; the per-repo `work/` read goes through the seam's mirror-ref method.
178
+ *
179
+ * The autonomy gate's `autoBuild` policy is resolved PER REPO. NOTE: a bare
180
+ * mirror has no checked-out `.dorfl.json`, so the per-repo file cannot be
181
+ * read from it — the global/env-resolved policy applies (the per-repo override is
182
+ * a working-checkout concern, served by {@link scanRepoPaths}).
183
+ */
184
+ export async function scan(config, options = {}) {
185
+ const mirrors = listMirrors({
186
+ workspacesDir: config.workspacesDir,
187
+ env: options.env,
188
+ });
189
+ const repos = [];
190
+ const counts = { totalItems: 0, totalEligible: 0 };
191
+ for (const mirror of mirrors) {
192
+ // Fetch-first (ADR §5/§6): refresh this mirror's `main` so the read below
193
+ // sees the remote truth. Never fatal — a failed fetch WARNS and falls back to
194
+ // the mirror's last-known `main` (the read strategy is unchanged).
195
+ fetchMirrorMainOrWarn({
196
+ mirrorPath: mirror.path,
197
+ warn: options.warn,
198
+ env: options.env,
199
+ });
200
+ // Read the full `work/` lifecycle from the mirror's bare `main` ref through
201
+ // the read seam (git ls-tree/show; NOT a working-tree read).
202
+ const state = await ledgerRead.resolveMirrorState({
203
+ mirrorPath: mirror.path,
204
+ env: options.env,
205
+ });
206
+ const autoBuild = resolveRepoConfig({
207
+ repoPath: mirror.path,
208
+ global: config,
209
+ override: options.override,
210
+ }).config.autoBuild;
211
+ // Held-slug subtraction: a bare hub mirror's arbiter is its `origin`. Reads
212
+ // the lock refs from the mirror's origin; non-fatal (empty set on any fault),
213
+ // so the read-only scan degrades gracefully exactly as its config reads do.
214
+ const heldSlugs = await heldTaskSlugs(mirror.path, 'origin', options.env);
215
+ // The PER-ITEM LOCK in-flight view (prd US #8; task
216
+ // `needs-attention-as-stuck-lock-state`): ADDITIONALLY read the full held
217
+ // lock entries (action × state + reason) from the mirror's lock refs, so the
218
+ // scan surfaces held (in-progress) + stuck (needs-attention) items. Read from
219
+ // the mirror's `origin` (the SAME handle the held-slug subtraction uses);
220
+ // best-effort (empty list on any fault), so the read-only scan degrades
221
+ // gracefully. This is a SURFACE only — eligibility/selection stay offline on
222
+ // `main` (the subtraction above), not gated on this view.
223
+ const lockHeld = await listItemLockEntries(mirror.path, 'origin', options.env);
224
+ // Spec pool — the TASKABLE-PRD companion of the task pool above
225
+ // (`ci-propose-matrix-must-enumerate-sliceable-prds-not-only-slices`). Resolve
226
+ // `autoTask` PER REPO from the mirror's COMMITTED `.dorfl.json`
227
+ // (exactly as the mirror-side pool scan does — NOT forked); a read fault is
228
+ // non-fatal (warn + global fall-back), since `scan` is read-only and must
229
+ // degrade gracefully (ADR §5/§6).
230
+ let repoAutoTask = config.autoTask;
231
+ try {
232
+ repoAutoTask = resolveRepoConfigFromMirror({
233
+ mirrorPath: mirror.path,
234
+ global: config,
235
+ env: options.env,
236
+ override: options.override,
237
+ }).autoTask;
238
+ }
239
+ catch (err) {
240
+ const reason = err instanceof Error ? err.message : String(err);
241
+ options.warn?.(`could not read the target repo's config from ${mirror.path}/main; ` +
242
+ `resolving autoTask from global + default. ${reason}`);
243
+ }
244
+ const specPool = await ledgerRead.resolveMirrorSpecPool({
245
+ mirrorPath: mirror.path,
246
+ env: options.env,
247
+ });
248
+ const specs = scoreSpecs(mirror.path, specPool, repoAutoTask);
249
+ // The per-repo LIFECYCLE pool (`ci-propose-matrix-enumerates-lifecycle-items`),
250
+ // gated by this mirror's question-surfacing config (resolved from its committed
251
+ // `.dorfl.json`, with the same non-fatal global fall-back as `autoTask`
252
+ // above) and computed by REUSING `gatherLifecycleMirror` → `buildLifecyclePools`
253
+ // (NOT a forked predicate), so it AGREES with the `run` selection.
254
+ let repoLifecycleConfig = {
255
+ observationTriage: config.observationTriage,
256
+ surfaceBlockers: config.surfaceBlockers,
257
+ surfaceStaging: config.surfaceStaging,
258
+ };
259
+ try {
260
+ const resolved = resolveRepoConfigFromMirror({
261
+ mirrorPath: mirror.path,
262
+ global: config,
263
+ env: options.env,
264
+ override: options.override,
265
+ });
266
+ repoLifecycleConfig = {
267
+ observationTriage: resolved.observationTriage,
268
+ surfaceBlockers: resolved.surfaceBlockers,
269
+ surfaceStaging: resolved.surfaceStaging,
270
+ };
271
+ }
272
+ catch {
273
+ // Non-fatal: a config read fault already WARNED on the `autoTask` read
274
+ // above; fall back to the global-resolved gates (scan is read-only and must
275
+ // degrade gracefully, ADR §5/§6).
276
+ }
277
+ const lifecycle = toScannedLifecycle(await gatherLifecycleMirror({
278
+ mirrorPath: mirror.path,
279
+ gates: lifecycleGatesFrom(repoLifecycleConfig),
280
+ env: options.env,
281
+ }));
282
+ // The one-slug-one-folder LINT (prd story 3): derive any slug residing in >1
283
+ // status folder from the mirror's committed `main` tree (the SAME `ls-tree`
284
+ // read the seam uses), so a corrupt ledger is surfaced LOUDLY by the formatter.
285
+ const ledgerDuplicates = lintRefLedger('main', mirror.path, options.env);
286
+ repos.push({
287
+ path: mirror.path,
288
+ items: scoreItems(state, autoBuild, counts, heldSlugs),
289
+ specs,
290
+ lifecycle,
291
+ ledgerDuplicates,
292
+ lockHeld,
293
+ });
294
+ }
295
+ return {
296
+ repos,
297
+ totalItems: counts.totalItems,
298
+ totalEligible: counts.totalEligible,
299
+ };
300
+ }
301
+ /**
302
+ * Read-only scan over an EXPLICIT set of working checkouts, used by the in-place
303
+ * worker paths (`run`) that operate on a real checkout rather than the registry's
304
+ * bare mirrors. This is a working-TREE read (it has nothing to fetch — the
305
+ * checkout IS the local state); the fetch-first contract (ADR §5/§6) applies to
306
+ * the REGISTRY `scan` above, which refreshes each bare mirror before reading.
307
+ * Reads each repo's `work/` via the read seam's local-tree method and honours its
308
+ * per-repo `.dorfl.json` `autoBuild`. The registry `scan` above is the
309
+ * mirror-ref counterpart; this is its working-tree sibling.
310
+ */
311
+ export function scanRepoPaths(repoPaths, config,
312
+ /**
313
+ * The HELD-SLUG set to SUBTRACT from each repo's pool (`tasks/ready/`) (prd
314
+ * `ledger-status-per-item-lock-refs` US #15). This is a WORKING-TREE, OFFLINE
315
+ * scan (it has no arbiter handle to fetch the lock refs from — that is the
316
+ * registry `scan`'s job), so the held set is supplied by the in-place CALLER
317
+ * (which knows its arbiter) and DEFAULTS to empty: with the body still moving to
318
+ * `in-progress/` on claim the subtraction is redundant-but-harmless, so omitting
319
+ * it preserves the offline read while keeping the seam in place for task #9.
320
+ */
321
+ heldSlugs = new Set(),
322
+ /**
323
+ * The per-machine {@link ConfigOverrideMap} — threaded into the per-repo
324
+ * resolution so the override applies to the in-place scan path too. Default:
325
+ * empty (no override).
326
+ */
327
+ override) {
328
+ const repos = [];
329
+ const counts = { totalItems: 0, totalEligible: 0 };
330
+ for (const path of repoPaths) {
331
+ const state = ledgerRead.resolveLocalState({ repoPath: path });
332
+ const resolved = resolveRepoConfig({
333
+ repoPath: path,
334
+ global: config,
335
+ override,
336
+ }).config;
337
+ // Spec pool — the TASKABLE-PRD companion of the task pool. Resolve
338
+ // `autoTask` PER REPO from the working-tree `.dorfl.json` (the same
339
+ // way `autoBuild` is resolved); `taskableSpecs` (the SAME `autoslice-gate`
340
+ // predicate the autopick paths run) decides what is taskable — no forked
341
+ // predicate. This is what makes the propose-mode CI matrix enumerate `spec:`
342
+ // legs (see `ci-propose-matrix-must-enumerate-sliceable-prds-not-only-slices`).
343
+ const specPool = ledgerRead.resolveSpecPool({ repoPath: path });
344
+ const specs = scoreSpecs(path, specPool, resolved.autoTask);
345
+ // The per-repo LIFECYCLE pool (`ci-propose-matrix-enumerates-lifecycle-items`),
346
+ // gated by this working tree's `observationTriage` / `surfaceBlockers` (resolved
347
+ // the same way as `autoBuild`/`autoTask`) and computed by REUSING
348
+ // `gatherLifecycleInPlace` → `buildLifecyclePools` (NOT a forked predicate). CI
349
+ // runs IN-PLACE, so this is the surface the propose matrix reads.
350
+ const lifecycle = toScannedLifecycle(gatherLifecycleInPlace({
351
+ repoPath: path,
352
+ gates: lifecycleGatesFrom({
353
+ observationTriage: resolved.observationTriage,
354
+ surfaceBlockers: resolved.surfaceBlockers,
355
+ surfaceStaging: resolved.surfaceStaging,
356
+ }),
357
+ }));
358
+ // The one-slug-one-folder LINT over THIS working tree's `work/` ledger.
359
+ const ledgerDuplicates = lintLocalLedger(path);
360
+ repos.push({
361
+ path,
362
+ items: scoreItems(state, resolved.autoBuild, counts, heldSlugs),
363
+ specs,
364
+ lifecycle,
365
+ ledgerDuplicates,
366
+ });
367
+ }
368
+ return {
369
+ repos,
370
+ totalItems: counts.totalItems,
371
+ totalEligible: counts.totalEligible,
372
+ };
373
+ }
374
+ //# sourceMappingURL=scan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scan.js","sourceRoot":"","sources":["../src/scan.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,75 @@
1
+ /**
2
+ * The pure SELECTION-ORDER resolver: turn the per-repo `selectionOrder` config
3
+ * value (a PRESET keyword OR an explicit pool-name list) into the canonical
4
+ * ordered list of the FOUR orderable pools, which {@link selectPrioritised}
5
+ * interleaves AFTER the always-first `apply` pool.
6
+ *
7
+ * Two load-bearing rules (ADR `ci-config-policy-and-gate-family`, selection-order
8
+ * section; task `advance-selection-order-config`):
9
+ *
10
+ * 1. **`apply` is PINNED FIRST and is NOT nameable here.** Consuming a human's
11
+ * committed answer is highest-value, cheap (no model), and someone is waiting
12
+ * — deprioritizing it is never a real want (consume-always-wins). So this
13
+ * resolver ranks ONLY the other four; naming `apply` in `selectionOrder` is a
14
+ * LOUD usage error (it signals a misunderstanding — `apply` cannot be reordered).
15
+ * 2. **The value is a PRESET STRING or an explicit ORDER LIST** (the preset is
16
+ * sugar over a list; the canonical form is the list). A single recognized
17
+ * preset keyword EXPANDS to its list; ANYTHING else is parsed as an explicit
18
+ * pool-name list, validating each name. An unknown pool name OR an unknown
19
+ * single keyword FAILS LOUDLY naming the offending value.
20
+ *
21
+ * Pure: no I/O, no config read. The callers resolve `config.selectionOrder`
22
+ * through this, then hand the ordered list to {@link selectPrioritised}.
23
+ */
24
+ /**
25
+ * The four ORDERABLE pools (the ones `selectionOrder` ranks). `apply` is
26
+ * deliberately ABSENT — it is pinned first and not configurable, so it is not a
27
+ * member of this union and naming it is a usage error.
28
+ *
29
+ * - `build` — build an eligible task;
30
+ * - `task` — task a taskable prd;
31
+ * - `surface` — render a `needsAnswers` blocker into an answerable sidecar;
32
+ * - `triage` — triage an untriaged observation.
33
+ */
34
+ export type SelectionPool = 'build' | 'task' | 'surface' | 'triage';
35
+ /** The orderable pools, in their canonical "drain" order (the default). */
36
+ export declare const SELECTION_POOLS: readonly SelectionPool[];
37
+ /**
38
+ * The recognized PRESET keywords, each sugar over an explicit pool-order list:
39
+ *
40
+ * - `drain` (the DEFAULT) — drain ready work, then create, then ask:
41
+ * `[build, task, surface, triage]`. Reproduces today's drain-first
42
+ * "drain before create" default (`build` before `task`).
43
+ * - `groom` — ask/groom first, build later: `[surface, triage, build, task]`.
44
+ *
45
+ * Kept deliberately SMALL (the minimize-head-space stance): a third preset earns
46
+ * its place only when a real need appears.
47
+ */
48
+ export declare const SELECTION_ORDER_PRESETS: Record<string, readonly SelectionPool[]>;
49
+ /** The default `selectionOrder` value when unset (the `drain` preset). */
50
+ export declare const DEFAULT_SELECTION_ORDER = "drain";
51
+ /**
52
+ * The config value a user writes for `selectionOrder`: a preset keyword (or a
53
+ * single explicit pool name) as a STRING, or an explicit ordered LIST of pool
54
+ * names (the env `'list'` coercion always yields the list form).
55
+ */
56
+ export type SelectionOrderConfig = string | string[];
57
+ /**
58
+ * Resolve a `selectionOrder` config value into the canonical ordered list of the
59
+ * four orderable pools. A single recognized preset keyword expands to its list;
60
+ * anything else is treated as an explicit pool-name list (each name validated).
61
+ *
62
+ * FAILS LOUDLY (throws) on:
63
+ * - an unknown SINGLE keyword (not a preset AND not a pool name);
64
+ * - an unknown pool name anywhere in an explicit list;
65
+ * - naming `apply` (it is pinned first, not orderable);
66
+ * - an empty order (no pools named);
67
+ * - a duplicate pool name in an explicit list.
68
+ *
69
+ * The list form is taken VERBATIM (no implicit padding of omitted pools — a list
70
+ * names exactly the orderable pools the user wants, in order; an omitted pool is
71
+ * simply ranked nowhere, which only matters if that pool is present, see the gate
72
+ * orthogonality note in {@link selectPrioritised}).
73
+ */
74
+ export declare function resolveSelectionOrder(value: SelectionOrderConfig): SelectionPool[];
75
+ //# sourceMappingURL=select-order.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"select-order.d.ts","sourceRoot":"","sources":["../src/select-order.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH;;;;;;;;;GASG;AACH,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,CAAC;AAEpE,2EAA2E;AAC3E,eAAO,MAAM,eAAe,EAAE,SAAS,aAAa,EAKnD,CAAC;AAEF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,uBAAuB,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,aAAa,EAAE,CAI3E,CAAC;AAEH,0EAA0E;AAC1E,eAAO,MAAM,uBAAuB,UAAU,CAAC;AAE/C;;;;GAIG;AACH,MAAM,MAAM,oBAAoB,GAAG,MAAM,GAAG,MAAM,EAAE,CAAC;AAKrD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,qBAAqB,CACpC,KAAK,EAAE,oBAAoB,GACzB,aAAa,EAAE,CAiDjB"}
@@ -0,0 +1,108 @@
1
+ /**
2
+ * The pure SELECTION-ORDER resolver: turn the per-repo `selectionOrder` config
3
+ * value (a PRESET keyword OR an explicit pool-name list) into the canonical
4
+ * ordered list of the FOUR orderable pools, which {@link selectPrioritised}
5
+ * interleaves AFTER the always-first `apply` pool.
6
+ *
7
+ * Two load-bearing rules (ADR `ci-config-policy-and-gate-family`, selection-order
8
+ * section; task `advance-selection-order-config`):
9
+ *
10
+ * 1. **`apply` is PINNED FIRST and is NOT nameable here.** Consuming a human's
11
+ * committed answer is highest-value, cheap (no model), and someone is waiting
12
+ * — deprioritizing it is never a real want (consume-always-wins). So this
13
+ * resolver ranks ONLY the other four; naming `apply` in `selectionOrder` is a
14
+ * LOUD usage error (it signals a misunderstanding — `apply` cannot be reordered).
15
+ * 2. **The value is a PRESET STRING or an explicit ORDER LIST** (the preset is
16
+ * sugar over a list; the canonical form is the list). A single recognized
17
+ * preset keyword EXPANDS to its list; ANYTHING else is parsed as an explicit
18
+ * pool-name list, validating each name. An unknown pool name OR an unknown
19
+ * single keyword FAILS LOUDLY naming the offending value.
20
+ *
21
+ * Pure: no I/O, no config read. The callers resolve `config.selectionOrder`
22
+ * through this, then hand the ordered list to {@link selectPrioritised}.
23
+ */
24
+ /** The orderable pools, in their canonical "drain" order (the default). */
25
+ export const SELECTION_POOLS = [
26
+ 'build',
27
+ 'task',
28
+ 'surface',
29
+ 'triage',
30
+ ];
31
+ /**
32
+ * The recognized PRESET keywords, each sugar over an explicit pool-order list:
33
+ *
34
+ * - `drain` (the DEFAULT) — drain ready work, then create, then ask:
35
+ * `[build, task, surface, triage]`. Reproduces today's drain-first
36
+ * "drain before create" default (`build` before `task`).
37
+ * - `groom` — ask/groom first, build later: `[surface, triage, build, task]`.
38
+ *
39
+ * Kept deliberately SMALL (the minimize-head-space stance): a third preset earns
40
+ * its place only when a real need appears.
41
+ */
42
+ export const SELECTION_ORDER_PRESETS = {
43
+ drain: ['build', 'task', 'surface', 'triage'],
44
+ groom: ['surface', 'triage', 'build', 'task'],
45
+ };
46
+ /** The default `selectionOrder` value when unset (the `drain` preset). */
47
+ export const DEFAULT_SELECTION_ORDER = 'drain';
48
+ const POOL_SET = new Set(SELECTION_POOLS);
49
+ const PRESET_NAMES = Object.keys(SELECTION_ORDER_PRESETS);
50
+ /**
51
+ * Resolve a `selectionOrder` config value into the canonical ordered list of the
52
+ * four orderable pools. A single recognized preset keyword expands to its list;
53
+ * anything else is treated as an explicit pool-name list (each name validated).
54
+ *
55
+ * FAILS LOUDLY (throws) on:
56
+ * - an unknown SINGLE keyword (not a preset AND not a pool name);
57
+ * - an unknown pool name anywhere in an explicit list;
58
+ * - naming `apply` (it is pinned first, not orderable);
59
+ * - an empty order (no pools named);
60
+ * - a duplicate pool name in an explicit list.
61
+ *
62
+ * The list form is taken VERBATIM (no implicit padding of omitted pools — a list
63
+ * names exactly the orderable pools the user wants, in order; an omitted pool is
64
+ * simply ranked nowhere, which only matters if that pool is present, see the gate
65
+ * orthogonality note in {@link selectPrioritised}).
66
+ */
67
+ export function resolveSelectionOrder(value) {
68
+ // Normalise to a list of trimmed, non-empty tokens. A bare string is one token
69
+ // (so `'drain'` and `['drain']` resolve identically — the env single-keyword
70
+ // case); a list is its trimmed entries.
71
+ const tokens = (typeof value === 'string' ? [value] : value)
72
+ .map((t) => t.trim())
73
+ .filter((t) => t !== '');
74
+ // A SINGLE token that is a recognized preset keyword expands to its list. This
75
+ // is the ONLY place a preset is honoured: a preset keyword mixed into a
76
+ // multi-element list is NOT a pool name and so fails loudly below.
77
+ if (tokens.length === 1 && tokens[0] in SELECTION_ORDER_PRESETS) {
78
+ return [...SELECTION_ORDER_PRESETS[tokens[0]]];
79
+ }
80
+ if (tokens.length === 0) {
81
+ throw new Error(`Invalid selectionOrder: empty. Expected a preset ` +
82
+ `(${PRESET_NAMES.join(' / ')}) or an explicit pool-order list ` +
83
+ `(${SELECTION_POOLS.join(', ')}).`);
84
+ }
85
+ // Otherwise an EXPLICIT pool-name list: validate each name is a known orderable
86
+ // pool, failing loudly on `apply` (pinned, not orderable) or any unknown name.
87
+ const seen = new Set();
88
+ const order = [];
89
+ for (const token of tokens) {
90
+ if (token === 'apply') {
91
+ throw new Error(`Invalid selectionOrder: 'apply' is pinned FIRST and is not ` +
92
+ `orderable — remove it. selectionOrder ranks only: ` +
93
+ `${SELECTION_POOLS.join(', ')}.`);
94
+ }
95
+ if (!POOL_SET.has(token)) {
96
+ throw new Error(`Invalid selectionOrder: unknown pool '${token}'. Expected a preset ` +
97
+ `(${PRESET_NAMES.join(' / ')}) or pool names from: ` +
98
+ `${SELECTION_POOLS.join(', ')}.`);
99
+ }
100
+ if (seen.has(token)) {
101
+ throw new Error(`Invalid selectionOrder: duplicate pool '${token}'.`);
102
+ }
103
+ seen.add(token);
104
+ order.push(token);
105
+ }
106
+ return order;
107
+ }
108
+ //# sourceMappingURL=select-order.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"select-order.js","sourceRoot":"","sources":["../src/select-order.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAcH,2EAA2E;AAC3E,MAAM,CAAC,MAAM,eAAe,GAA6B;IACxD,OAAO;IACP,MAAM;IACN,SAAS;IACT,QAAQ;CACR,CAAC;AAEF;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,uBAAuB,GACnC;IACC,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,CAAC;IAC7C,KAAK,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC;CAC7C,CAAC;AAEH,0EAA0E;AAC1E,MAAM,CAAC,MAAM,uBAAuB,GAAG,OAAO,CAAC;AAS/C,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAS,eAAe,CAAC,CAAC;AAClD,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;AAE1D;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,qBAAqB,CACpC,KAA2B;IAE3B,+EAA+E;IAC/E,6EAA6E;IAC7E,wCAAwC;IACxC,MAAM,MAAM,GAAG,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;SAC1D,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SACpB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;IAE1B,+EAA+E;IAC/E,wEAAwE;IACxE,mEAAmE;IACnE,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,uBAAuB,EAAE,CAAC;QACjE,OAAO,CAAC,GAAG,uBAAuB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAChD,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CACd,mDAAmD;YAClD,IAAI,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,mCAAmC;YAC/D,IAAI,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CACnC,CAAC;IACH,CAAC;IAED,gFAAgF;IAChF,+EAA+E;IAC/E,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,KAAK,GAAoB,EAAE,CAAC;IAClC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC5B,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CACd,6DAA6D;gBAC5D,oDAAoD;gBACpD,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CACjC,CAAC;QACH,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CACd,yCAAyC,KAAK,uBAAuB;gBACpE,IAAI,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,wBAAwB;gBACpD,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CACjC,CAAC;QACH,CAAC;QACD,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,2CAA2C,KAAK,IAAI,CAAC,CAAC;QACvE,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAChB,KAAK,CAAC,IAAI,CAAC,KAAsB,CAAC,CAAC;IACpC,CAAC;IACD,OAAO,KAAK,CAAC;AACd,CAAC"}