dorfl 0.0.0 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (619) hide show
  1. package/dist/advance-ci-template.d.ts +73 -0
  2. package/dist/advance-ci-template.d.ts.map +1 -0
  3. package/dist/advance-ci-template.js +104 -0
  4. package/dist/advance-ci-template.js.map +1 -0
  5. package/dist/advance-classify.d.ts +132 -0
  6. package/dist/advance-classify.d.ts.map +1 -0
  7. package/dist/advance-classify.js +120 -0
  8. package/dist/advance-classify.js.map +1 -0
  9. package/dist/advance-drivers.d.ts +182 -0
  10. package/dist/advance-drivers.d.ts.map +1 -0
  11. package/dist/advance-drivers.js +231 -0
  12. package/dist/advance-drivers.js.map +1 -0
  13. package/dist/advance-isolated.d.ts +156 -0
  14. package/dist/advance-isolated.d.ts.map +1 -0
  15. package/dist/advance-isolated.js +256 -0
  16. package/dist/advance-isolated.js.map +1 -0
  17. package/dist/advance-lifecycle-template.d.ts +107 -0
  18. package/dist/advance-lifecycle-template.d.ts.map +1 -0
  19. package/dist/advance-lifecycle-template.js +668 -0
  20. package/dist/advance-lifecycle-template.js.map +1 -0
  21. package/dist/advance-loop-driver.d.ts +325 -0
  22. package/dist/advance-loop-driver.d.ts.map +1 -0
  23. package/dist/advance-loop-driver.js +437 -0
  24. package/dist/advance-loop-driver.js.map +1 -0
  25. package/dist/advance-treeless-publish.d.ts +108 -0
  26. package/dist/advance-treeless-publish.d.ts.map +1 -0
  27. package/dist/advance-treeless-publish.js +71 -0
  28. package/dist/advance-treeless-publish.js.map +1 -0
  29. package/dist/advance.d.ts +340 -0
  30. package/dist/advance.d.ts.map +1 -0
  31. package/dist/advance.js +1122 -0
  32. package/dist/advance.js.map +1 -0
  33. package/dist/advancing-lock.d.ts +294 -0
  34. package/dist/advancing-lock.d.ts.map +1 -0
  35. package/dist/advancing-lock.js +594 -0
  36. package/dist/advancing-lock.js.map +1 -0
  37. package/dist/agent-launch.d.ts +79 -0
  38. package/dist/agent-launch.d.ts.map +1 -0
  39. package/dist/agent-launch.js +61 -0
  40. package/dist/agent-launch.js.map +1 -0
  41. package/dist/agent-stop.d.ts +149 -0
  42. package/dist/agent-stop.d.ts.map +1 -0
  43. package/dist/agent-stop.js +307 -0
  44. package/dist/agent-stop.js.map +1 -0
  45. package/dist/apply-decide.d.ts +127 -0
  46. package/dist/apply-decide.d.ts.map +1 -0
  47. package/dist/apply-decide.js +176 -0
  48. package/dist/apply-decide.js.map +1 -0
  49. package/dist/apply-merge-action.d.ts +206 -0
  50. package/dist/apply-merge-action.d.ts.map +1 -0
  51. package/dist/apply-merge-action.js +307 -0
  52. package/dist/apply-merge-action.js.map +1 -0
  53. package/dist/apply-persist.d.ts +174 -0
  54. package/dist/apply-persist.d.ts.map +1 -0
  55. package/dist/apply-persist.js +359 -0
  56. package/dist/apply-persist.js.map +1 -0
  57. package/dist/arbiter.d.ts +120 -0
  58. package/dist/arbiter.d.ts.map +1 -0
  59. package/dist/arbiter.js +255 -0
  60. package/dist/arbiter.js.map +1 -0
  61. package/dist/brand.d.ts +70 -0
  62. package/dist/brand.d.ts.map +1 -0
  63. package/dist/brand.js +84 -0
  64. package/dist/brand.js.map +1 -0
  65. package/dist/buildable-body.d.ts +132 -0
  66. package/dist/buildable-body.d.ts.map +1 -0
  67. package/dist/buildable-body.js +131 -0
  68. package/dist/buildable-body.js.map +1 -0
  69. package/dist/categorise.d.ts +66 -0
  70. package/dist/categorise.d.ts.map +1 -0
  71. package/dist/categorise.js +106 -0
  72. package/dist/categorise.js.map +1 -0
  73. package/dist/claim-cas.d.ts +117 -0
  74. package/dist/claim-cas.d.ts.map +1 -0
  75. package/dist/claim-cas.js +312 -0
  76. package/dist/claim-cas.js.map +1 -0
  77. package/dist/cli-spinner.d.ts +112 -0
  78. package/dist/cli-spinner.d.ts.map +1 -0
  79. package/dist/cli-spinner.js +157 -0
  80. package/dist/cli-spinner.js.map +1 -0
  81. package/dist/cli.d.ts +11 -0
  82. package/dist/cli.d.ts.map +1 -0
  83. package/dist/cli.js +3094 -0
  84. package/dist/cli.js.map +1 -0
  85. package/dist/close-job-template.d.ts +70 -0
  86. package/dist/close-job-template.d.ts.map +1 -0
  87. package/dist/close-job-template.js +180 -0
  88. package/dist/close-job-template.js.map +1 -0
  89. package/dist/close-job.d.ts +95 -0
  90. package/dist/close-job.d.ts.map +1 -0
  91. package/dist/close-job.js +226 -0
  92. package/dist/close-job.js.map +1 -0
  93. package/dist/complete.d.ts +361 -0
  94. package/dist/complete.d.ts.map +1 -0
  95. package/dist/complete.js +885 -0
  96. package/dist/complete.js.map +1 -0
  97. package/dist/concurrency.d.ts +68 -0
  98. package/dist/concurrency.d.ts.map +1 -0
  99. package/dist/concurrency.js +112 -0
  100. package/dist/concurrency.js.map +1 -0
  101. package/dist/config-override.d.ts +76 -0
  102. package/dist/config-override.d.ts.map +1 -0
  103. package/dist/config-override.js +50 -0
  104. package/dist/config-override.js.map +1 -0
  105. package/dist/config.d.ts +668 -0
  106. package/dist/config.d.ts.map +1 -0
  107. package/dist/config.js +241 -0
  108. package/dist/config.js.map +1 -0
  109. package/dist/continue-branch.d.ts +249 -0
  110. package/dist/continue-branch.d.ts.map +1 -0
  111. package/dist/continue-branch.js +389 -0
  112. package/dist/continue-branch.js.map +1 -0
  113. package/dist/cwd-section.d.ts +186 -0
  114. package/dist/cwd-section.d.ts.map +1 -0
  115. package/dist/cwd-section.js +209 -0
  116. package/dist/cwd-section.js.map +1 -0
  117. package/dist/decision-engine.d.ts +170 -0
  118. package/dist/decision-engine.d.ts.map +1 -0
  119. package/dist/decision-engine.js +136 -0
  120. package/dist/decision-engine.js.map +1 -0
  121. package/dist/detect.d.ts +17 -0
  122. package/dist/detect.d.ts.map +1 -0
  123. package/dist/detect.js +118 -0
  124. package/dist/detect.js.map +1 -0
  125. package/dist/do-autopick.d.ts +85 -0
  126. package/dist/do-autopick.d.ts.map +1 -0
  127. package/dist/do-autopick.js +112 -0
  128. package/dist/do-autopick.js.map +1 -0
  129. package/dist/do-config.d.ts +312 -0
  130. package/dist/do-config.d.ts.map +1 -0
  131. package/dist/do-config.js +358 -0
  132. package/dist/do-config.js.map +1 -0
  133. package/dist/do-remote-auto.d.ts +75 -0
  134. package/dist/do-remote-auto.d.ts.map +1 -0
  135. package/dist/do-remote-auto.js +111 -0
  136. package/dist/do-remote-auto.js.map +1 -0
  137. package/dist/do.d.ts +621 -0
  138. package/dist/do.d.ts.map +1 -0
  139. package/dist/do.js +1882 -0
  140. package/dist/do.js.map +1 -0
  141. package/dist/drop-source.d.ts +96 -0
  142. package/dist/drop-source.d.ts.map +1 -0
  143. package/dist/drop-source.js +91 -0
  144. package/dist/drop-source.js.map +1 -0
  145. package/dist/eligibility.d.ts +46 -0
  146. package/dist/eligibility.d.ts.map +1 -0
  147. package/dist/eligibility.js +34 -0
  148. package/dist/eligibility.js.map +1 -0
  149. package/dist/env-config.d.ts +51 -0
  150. package/dist/env-config.d.ts.map +1 -0
  151. package/dist/env-config.js +272 -0
  152. package/dist/env-config.js.map +1 -0
  153. package/dist/failure-cause.d.ts +70 -0
  154. package/dist/failure-cause.d.ts.map +1 -0
  155. package/dist/failure-cause.js +126 -0
  156. package/dist/failure-cause.js.map +1 -0
  157. package/dist/format.d.ts +43 -0
  158. package/dist/format.d.ts.map +1 -0
  159. package/dist/format.js +256 -0
  160. package/dist/format.js.map +1 -0
  161. package/dist/frontmatter.d.ts +215 -0
  162. package/dist/frontmatter.d.ts.map +1 -0
  163. package/dist/frontmatter.js +345 -0
  164. package/dist/frontmatter.js.map +1 -0
  165. package/dist/gate-readiness.d.ts +84 -0
  166. package/dist/gate-readiness.d.ts.map +1 -0
  167. package/dist/gate-readiness.js +103 -0
  168. package/dist/gate-readiness.js.map +1 -0
  169. package/dist/gc.d.ts +165 -0
  170. package/dist/gc.d.ts.map +1 -0
  171. package/dist/gc.js +313 -0
  172. package/dist/gc.js.map +1 -0
  173. package/dist/gh-failure.d.ts +42 -0
  174. package/dist/gh-failure.d.ts.map +1 -0
  175. package/dist/gh-failure.js +49 -0
  176. package/dist/gh-failure.js.map +1 -0
  177. package/dist/git.d.ts +75 -0
  178. package/dist/git.d.ts.map +1 -0
  179. package/dist/git.js +130 -0
  180. package/dist/git.js.map +1 -0
  181. package/dist/github.d.ts +187 -0
  182. package/dist/github.d.ts.map +1 -0
  183. package/dist/github.js +343 -0
  184. package/dist/github.js.map +1 -0
  185. package/dist/harness.d.ts +242 -0
  186. package/dist/harness.d.ts.map +1 -0
  187. package/dist/harness.js +157 -0
  188. package/dist/harness.js.map +1 -0
  189. package/dist/identity.d.ts +167 -0
  190. package/dist/identity.d.ts.map +1 -0
  191. package/dist/identity.js +231 -0
  192. package/dist/identity.js.map +1 -0
  193. package/dist/index.d.ts +147 -0
  194. package/dist/index.d.ts.map +1 -0
  195. package/dist/index.js +76 -0
  196. package/dist/index.js.map +1 -0
  197. package/dist/install-ci-branch-protection.d.ts +147 -0
  198. package/dist/install-ci-branch-protection.d.ts.map +1 -0
  199. package/dist/install-ci-branch-protection.js +166 -0
  200. package/dist/install-ci-branch-protection.js.map +1 -0
  201. package/dist/install-ci-capabilities/advance-lifecycle.d.ts +15 -0
  202. package/dist/install-ci-capabilities/advance-lifecycle.d.ts.map +1 -0
  203. package/dist/install-ci-capabilities/advance-lifecycle.js +28 -0
  204. package/dist/install-ci-capabilities/advance-lifecycle.js.map +1 -0
  205. package/dist/install-ci-capabilities/close-job.d.ts +13 -0
  206. package/dist/install-ci-capabilities/close-job.d.ts.map +1 -0
  207. package/dist/install-ci-capabilities/close-job.js +26 -0
  208. package/dist/install-ci-capabilities/close-job.js.map +1 -0
  209. package/dist/install-ci-capabilities/example-noop.d.ts +16 -0
  210. package/dist/install-ci-capabilities/example-noop.d.ts.map +1 -0
  211. package/dist/install-ci-capabilities/example-noop.js +23 -0
  212. package/dist/install-ci-capabilities/example-noop.js.map +1 -0
  213. package/dist/install-ci-capabilities/intake.d.ts +15 -0
  214. package/dist/install-ci-capabilities/intake.d.ts.map +1 -0
  215. package/dist/install-ci-capabilities/intake.js +28 -0
  216. package/dist/install-ci-capabilities/intake.js.map +1 -0
  217. package/dist/install-ci-capabilities/verify.d.ts +14 -0
  218. package/dist/install-ci-capabilities/verify.d.ts.map +1 -0
  219. package/dist/install-ci-capabilities/verify.js +27 -0
  220. package/dist/install-ci-capabilities/verify.js.map +1 -0
  221. package/dist/install-ci-core.d.ts +446 -0
  222. package/dist/install-ci-core.d.ts.map +1 -0
  223. package/dist/install-ci-core.js +760 -0
  224. package/dist/install-ci-core.js.map +1 -0
  225. package/dist/install-ci-github.d.ts +167 -0
  226. package/dist/install-ci-github.d.ts.map +1 -0
  227. package/dist/install-ci-github.js +315 -0
  228. package/dist/install-ci-github.js.map +1 -0
  229. package/dist/install-ci.d.ts +105 -0
  230. package/dist/install-ci.d.ts.map +1 -0
  231. package/dist/install-ci.js +363 -0
  232. package/dist/install-ci.js.map +1 -0
  233. package/dist/intake-event.d.ts +88 -0
  234. package/dist/intake-event.d.ts.map +1 -0
  235. package/dist/intake-event.js +66 -0
  236. package/dist/intake-event.js.map +1 -0
  237. package/dist/intake-marker.d.ts +95 -0
  238. package/dist/intake-marker.d.ts.map +1 -0
  239. package/dist/intake-marker.js +127 -0
  240. package/dist/intake-marker.js.map +1 -0
  241. package/dist/intake-triage.d.ts +48 -0
  242. package/dist/intake-triage.d.ts.map +1 -0
  243. package/dist/intake-triage.js +95 -0
  244. package/dist/intake-triage.js.map +1 -0
  245. package/dist/intake-trigger-template.d.ts +185 -0
  246. package/dist/intake-trigger-template.d.ts.map +1 -0
  247. package/dist/intake-trigger-template.js +449 -0
  248. package/dist/intake-trigger-template.js.map +1 -0
  249. package/dist/intake.d.ts +569 -0
  250. package/dist/intake.d.ts.map +1 -0
  251. package/dist/intake.js +1628 -0
  252. package/dist/intake.js.map +1 -0
  253. package/dist/integration-core.d.ts +539 -0
  254. package/dist/integration-core.d.ts.map +1 -0
  255. package/dist/integration-core.js +2195 -0
  256. package/dist/integration-core.js.map +1 -0
  257. package/dist/integrator.d.ts +343 -0
  258. package/dist/integrator.d.ts.map +1 -0
  259. package/dist/integrator.js +400 -0
  260. package/dist/integrator.js.map +1 -0
  261. package/dist/isolation.d.ts +219 -0
  262. package/dist/isolation.d.ts.map +1 -0
  263. package/dist/isolation.js +261 -0
  264. package/dist/isolation.js.map +1 -0
  265. package/dist/issue-provider.d.ts +349 -0
  266. package/dist/issue-provider.d.ts.map +1 -0
  267. package/dist/issue-provider.js +360 -0
  268. package/dist/issue-provider.js.map +1 -0
  269. package/dist/item-lock.d.ts +626 -0
  270. package/dist/item-lock.d.ts.map +1 -0
  271. package/dist/item-lock.js +1381 -0
  272. package/dist/item-lock.js.map +1 -0
  273. package/dist/item-path.d.ts +49 -0
  274. package/dist/item-path.d.ts.map +1 -0
  275. package/dist/item-path.js +66 -0
  276. package/dist/item-path.js.map +1 -0
  277. package/dist/ledger-lint.d.ts +129 -0
  278. package/dist/ledger-lint.d.ts.map +1 -0
  279. package/dist/ledger-lint.js +249 -0
  280. package/dist/ledger-lint.js.map +1 -0
  281. package/dist/ledger-read.d.ts +357 -0
  282. package/dist/ledger-read.d.ts.map +1 -0
  283. package/dist/ledger-read.js +442 -0
  284. package/dist/ledger-read.js.map +1 -0
  285. package/dist/ledger-write.d.ts +330 -0
  286. package/dist/ledger-write.d.ts.map +1 -0
  287. package/dist/ledger-write.js +411 -0
  288. package/dist/ledger-write.js.map +1 -0
  289. package/dist/lifecycle-gather.d.ts +30 -0
  290. package/dist/lifecycle-gather.d.ts.map +1 -0
  291. package/dist/lifecycle-gather.js +205 -0
  292. package/dist/lifecycle-gather.js.map +1 -0
  293. package/dist/lifecycle-pools.d.ts +180 -0
  294. package/dist/lifecycle-pools.d.ts.map +1 -0
  295. package/dist/lifecycle-pools.js +78 -0
  296. package/dist/lifecycle-pools.js.map +1 -0
  297. package/dist/merge-question-surfacer.d.ts +166 -0
  298. package/dist/merge-question-surfacer.d.ts.map +1 -0
  299. package/dist/merge-question-surfacer.js +297 -0
  300. package/dist/merge-question-surfacer.js.map +1 -0
  301. package/dist/mint-adr.d.ts +126 -0
  302. package/dist/mint-adr.d.ts.map +1 -0
  303. package/dist/mint-adr.js +257 -0
  304. package/dist/mint-adr.js.map +1 -0
  305. package/dist/mirror-pool-scan.d.ts +125 -0
  306. package/dist/mirror-pool-scan.d.ts.map +1 -0
  307. package/dist/mirror-pool-scan.js +104 -0
  308. package/dist/mirror-pool-scan.js.map +1 -0
  309. package/dist/needs-attention.d.ts +341 -0
  310. package/dist/needs-attention.d.ts.map +1 -0
  311. package/dist/needs-attention.js +900 -0
  312. package/dist/needs-attention.js.map +1 -0
  313. package/dist/orphan-sidecar.d.ts +79 -0
  314. package/dist/orphan-sidecar.d.ts.map +1 -0
  315. package/dist/orphan-sidecar.js +71 -0
  316. package/dist/orphan-sidecar.js.map +1 -0
  317. package/dist/output.d.ts +48 -0
  318. package/dist/output.d.ts.map +1 -0
  319. package/dist/output.js +66 -0
  320. package/dist/output.js.map +1 -0
  321. package/dist/pi-harness.d.ts +179 -0
  322. package/dist/pi-harness.d.ts.map +1 -0
  323. package/dist/pi-harness.js +342 -0
  324. package/dist/pi-harness.js.map +1 -0
  325. package/dist/placement.d.ts +99 -0
  326. package/dist/placement.d.ts.map +1 -0
  327. package/dist/placement.js +67 -0
  328. package/dist/placement.js.map +1 -0
  329. package/dist/prd-to-spec.d.ts +315 -0
  330. package/dist/prd-to-spec.d.ts.map +1 -0
  331. package/dist/prd-to-spec.js +684 -0
  332. package/dist/prd-to-spec.js.map +1 -0
  333. package/dist/prepare.d.ts +121 -0
  334. package/dist/prepare.d.ts.map +1 -0
  335. package/dist/prepare.js +140 -0
  336. package/dist/prepare.js.map +1 -0
  337. package/dist/prompt.d.ts +360 -0
  338. package/dist/prompt.d.ts.map +1 -0
  339. package/dist/prompt.js +499 -0
  340. package/dist/prompt.js.map +1 -0
  341. package/dist/protocol/ADR-FORMAT.md +47 -0
  342. package/dist/protocol/CLAIM-PROTOCOL.md +217 -0
  343. package/dist/protocol/REVIEW-PROTOCOL.md +119 -0
  344. package/dist/protocol/SURFACE-PROTOCOL.md +121 -0
  345. package/dist/protocol/TASKING-PROTOCOL.md +122 -0
  346. package/dist/protocol/WORK-CONTRACT.md +276 -0
  347. package/dist/protocol/spec-template.md +71 -0
  348. package/dist/protocol/task-template.md +65 -0
  349. package/dist/readiness.d.ts +66 -0
  350. package/dist/readiness.d.ts.map +1 -0
  351. package/dist/readiness.js +36 -0
  352. package/dist/readiness.js.map +1 -0
  353. package/dist/reap-branches.d.ts +102 -0
  354. package/dist/reap-branches.d.ts.map +1 -0
  355. package/dist/reap-branches.js +149 -0
  356. package/dist/reap-branches.js.map +1 -0
  357. package/dist/recover-isolated.d.ts +72 -0
  358. package/dist/recover-isolated.d.ts.map +1 -0
  359. package/dist/recover-isolated.js +188 -0
  360. package/dist/recover-isolated.js.map +1 -0
  361. package/dist/registry.d.ts +172 -0
  362. package/dist/registry.d.ts.map +1 -0
  363. package/dist/registry.js +296 -0
  364. package/dist/registry.js.map +1 -0
  365. package/dist/repo-config.d.ts +201 -0
  366. package/dist/repo-config.d.ts.map +1 -0
  367. package/dist/repo-config.js +414 -0
  368. package/dist/repo-config.js.map +1 -0
  369. package/dist/repo-key.d.ts +20 -0
  370. package/dist/repo-key.d.ts.map +1 -0
  371. package/dist/repo-key.js +68 -0
  372. package/dist/repo-key.js.map +1 -0
  373. package/dist/repo-mirror.d.ts +177 -0
  374. package/dist/repo-mirror.d.ts.map +1 -0
  375. package/dist/repo-mirror.js +271 -0
  376. package/dist/repo-mirror.js.map +1 -0
  377. package/dist/retry-backoff.d.ts +90 -0
  378. package/dist/retry-backoff.d.ts.map +1 -0
  379. package/dist/retry-backoff.js +98 -0
  380. package/dist/retry-backoff.js.map +1 -0
  381. package/dist/review-gate.d.ts +173 -0
  382. package/dist/review-gate.d.ts.map +1 -0
  383. package/dist/review-gate.js +261 -0
  384. package/dist/review-gate.js.map +1 -0
  385. package/dist/review-verdict.d.ts +149 -0
  386. package/dist/review-verdict.d.ts.map +1 -0
  387. package/dist/review-verdict.js +332 -0
  388. package/dist/review-verdict.js.map +1 -0
  389. package/dist/run.d.ts +221 -0
  390. package/dist/run.d.ts.map +1 -0
  391. package/dist/run.js +963 -0
  392. package/dist/run.js.map +1 -0
  393. package/dist/scan.d.ts +308 -0
  394. package/dist/scan.d.ts.map +1 -0
  395. package/dist/scan.js +374 -0
  396. package/dist/scan.js.map +1 -0
  397. package/dist/select-order.d.ts +75 -0
  398. package/dist/select-order.d.ts.map +1 -0
  399. package/dist/select-order.js +108 -0
  400. package/dist/select-order.js.map +1 -0
  401. package/dist/select-priority.d.ts +188 -0
  402. package/dist/select-priority.d.ts.map +1 -0
  403. package/dist/select-priority.js +80 -0
  404. package/dist/select-priority.js.map +1 -0
  405. package/dist/select.d.ts +25 -0
  406. package/dist/select.d.ts.map +1 -0
  407. package/dist/select.js +43 -0
  408. package/dist/select.js.map +1 -0
  409. package/dist/session-path.d.ts +36 -0
  410. package/dist/session-path.d.ts.map +1 -0
  411. package/dist/session-path.js +129 -0
  412. package/dist/session-path.js.map +1 -0
  413. package/dist/sidecar-apply.d.ts +83 -0
  414. package/dist/sidecar-apply.d.ts.map +1 -0
  415. package/dist/sidecar-apply.js +111 -0
  416. package/dist/sidecar-apply.js.map +1 -0
  417. package/dist/sidecar.d.ts +245 -0
  418. package/dist/sidecar.d.ts.map +1 -0
  419. package/dist/sidecar.js +481 -0
  420. package/dist/sidecar.js.map +1 -0
  421. package/dist/slug-namespace.d.ts +204 -0
  422. package/dist/slug-namespace.d.ts.map +1 -0
  423. package/dist/slug-namespace.js +229 -0
  424. package/dist/slug-namespace.js.map +1 -0
  425. package/dist/spec-complete.d.ts +44 -0
  426. package/dist/spec-complete.d.ts.map +1 -0
  427. package/dist/spec-complete.js +69 -0
  428. package/dist/spec-complete.js.map +1 -0
  429. package/dist/start.d.ts +97 -0
  430. package/dist/start.d.ts.map +1 -0
  431. package/dist/start.js +633 -0
  432. package/dist/start.js.map +1 -0
  433. package/dist/status.d.ts +199 -0
  434. package/dist/status.d.ts.map +1 -0
  435. package/dist/status.js +228 -0
  436. package/dist/status.js.map +1 -0
  437. package/dist/surface-gate.d.ts +162 -0
  438. package/dist/surface-gate.d.ts.map +1 -0
  439. package/dist/surface-gate.js +206 -0
  440. package/dist/surface-gate.js.map +1 -0
  441. package/dist/surface-persist.d.ts +86 -0
  442. package/dist/surface-persist.d.ts.map +1 -0
  443. package/dist/surface-persist.js +129 -0
  444. package/dist/surface-persist.js.map +1 -0
  445. package/dist/tasker-review-loop.d.ts +249 -0
  446. package/dist/tasker-review-loop.d.ts.map +1 -0
  447. package/dist/tasker-review-loop.js +369 -0
  448. package/dist/tasker-review-loop.js.map +1 -0
  449. package/dist/tasking-eligibility.d.ts +74 -0
  450. package/dist/tasking-eligibility.d.ts.map +1 -0
  451. package/dist/tasking-eligibility.js +52 -0
  452. package/dist/tasking-eligibility.js.map +1 -0
  453. package/dist/tasking-lock.d.ts +111 -0
  454. package/dist/tasking-lock.d.ts.map +1 -0
  455. package/dist/tasking-lock.js +256 -0
  456. package/dist/tasking-lock.js.map +1 -0
  457. package/dist/tasking.d.ts +275 -0
  458. package/dist/tasking.d.ts.map +1 -0
  459. package/dist/tasking.js +952 -0
  460. package/dist/tasking.js.map +1 -0
  461. package/dist/triage-gate.d.ts +127 -0
  462. package/dist/triage-gate.d.ts.map +1 -0
  463. package/dist/triage-gate.js +139 -0
  464. package/dist/triage-gate.js.map +1 -0
  465. package/dist/triage-persist.d.ts +163 -0
  466. package/dist/triage-persist.d.ts.map +1 -0
  467. package/dist/triage-persist.js +387 -0
  468. package/dist/triage-persist.js.map +1 -0
  469. package/dist/verdict-json.d.ts +32 -0
  470. package/dist/verdict-json.d.ts.map +1 -0
  471. package/dist/verdict-json.js +74 -0
  472. package/dist/verdict-json.js.map +1 -0
  473. package/dist/verify-workflow-template.d.ts +60 -0
  474. package/dist/verify-workflow-template.d.ts.map +1 -0
  475. package/dist/verify-workflow-template.js +126 -0
  476. package/dist/verify-workflow-template.js.map +1 -0
  477. package/dist/verify.d.ts +60 -0
  478. package/dist/verify.d.ts.map +1 -0
  479. package/dist/verify.js +62 -0
  480. package/dist/verify.js.map +1 -0
  481. package/dist/watch-session.d.ts +112 -0
  482. package/dist/watch-session.d.ts.map +1 -0
  483. package/dist/watch-session.js +347 -0
  484. package/dist/watch-session.js.map +1 -0
  485. package/dist/work-layout.d.ts +198 -0
  486. package/dist/work-layout.d.ts.map +1 -0
  487. package/dist/work-layout.js +217 -0
  488. package/dist/work-layout.js.map +1 -0
  489. package/dist/work-on.d.ts +154 -0
  490. package/dist/work-on.d.ts.map +1 -0
  491. package/dist/work-on.js +387 -0
  492. package/dist/work-on.js.map +1 -0
  493. package/dist/workspace.d.ts +224 -0
  494. package/dist/workspace.d.ts.map +1 -0
  495. package/dist/workspace.js +325 -0
  496. package/dist/workspace.js.map +1 -0
  497. package/package.json +46 -2
  498. package/src/advance-ci-template.ts +203 -0
  499. package/src/advance-classify.ts +197 -0
  500. package/src/advance-drivers.ts +414 -0
  501. package/src/advance-isolated.ts +432 -0
  502. package/src/advance-lifecycle-template.ts +791 -0
  503. package/src/advance-loop-driver.ts +745 -0
  504. package/src/advance-treeless-publish.ts +177 -0
  505. package/src/advance.ts +1564 -0
  506. package/src/advancing-lock.ts +988 -0
  507. package/src/agent-launch.ts +137 -0
  508. package/src/agent-stop.ts +361 -0
  509. package/src/apply-decide.ts +242 -0
  510. package/src/apply-merge-action.ts +502 -0
  511. package/src/apply-persist.ts +518 -0
  512. package/src/arbiter.ts +372 -0
  513. package/src/brand.ts +111 -0
  514. package/src/buildable-body.ts +196 -0
  515. package/src/categorise.ts +158 -0
  516. package/src/claim-cas.ts +513 -0
  517. package/src/cli-spinner.ts +225 -0
  518. package/src/cli.ts +4369 -0
  519. package/src/close-job-template.ts +236 -0
  520. package/src/close-job.ts +319 -0
  521. package/src/complete.ts +1379 -0
  522. package/src/concurrency.ts +151 -0
  523. package/src/config-override.ts +116 -0
  524. package/src/config.ts +883 -0
  525. package/src/continue-branch.ts +542 -0
  526. package/src/cwd-section.ts +392 -0
  527. package/src/decision-engine.ts +272 -0
  528. package/src/detect.ts +124 -0
  529. package/src/do-autopick.ts +223 -0
  530. package/src/do-config.ts +589 -0
  531. package/src/do-remote-auto.ts +197 -0
  532. package/src/do.ts +2623 -0
  533. package/src/drop-source.ts +194 -0
  534. package/src/eligibility.ts +79 -0
  535. package/src/env-config.ts +305 -0
  536. package/src/failure-cause.ts +142 -0
  537. package/src/format.ts +313 -0
  538. package/src/frontmatter.ts +485 -0
  539. package/src/gate-readiness.ts +147 -0
  540. package/src/gc.ts +510 -0
  541. package/src/gh-failure.ts +53 -0
  542. package/src/git.ts +186 -0
  543. package/src/github.ts +468 -0
  544. package/src/harness.ts +355 -0
  545. package/src/identity.ts +322 -0
  546. package/src/index.ts +785 -0
  547. package/src/install-ci-branch-protection.ts +255 -0
  548. package/src/install-ci-capabilities/advance-lifecycle.ts +34 -0
  549. package/src/install-ci-capabilities/close-job.ts +32 -0
  550. package/src/install-ci-capabilities/example-noop.ts +24 -0
  551. package/src/install-ci-capabilities/intake.ts +34 -0
  552. package/src/install-ci-capabilities/verify.ts +33 -0
  553. package/src/install-ci-core.ts +1088 -0
  554. package/src/install-ci-github.ts +376 -0
  555. package/src/install-ci.ts +552 -0
  556. package/src/intake-event.ts +102 -0
  557. package/src/intake-marker.ts +195 -0
  558. package/src/intake-triage.ts +138 -0
  559. package/src/intake-trigger-template.ts +591 -0
  560. package/src/intake.ts +2445 -0
  561. package/src/integration-core.ts +3065 -0
  562. package/src/integrator.ts +771 -0
  563. package/src/isolation.ts +484 -0
  564. package/src/issue-provider.ts +733 -0
  565. package/src/item-lock.ts +1858 -0
  566. package/src/item-path.ts +75 -0
  567. package/src/ledger-lint.ts +332 -0
  568. package/src/ledger-read.ts +924 -0
  569. package/src/ledger-write.ts +865 -0
  570. package/src/lifecycle-gather.ts +298 -0
  571. package/src/lifecycle-pools.ts +250 -0
  572. package/src/merge-question-surfacer.ts +496 -0
  573. package/src/mint-adr.ts +362 -0
  574. package/src/mirror-pool-scan.ts +240 -0
  575. package/src/needs-attention.ts +1506 -0
  576. package/src/orphan-sidecar.ts +150 -0
  577. package/src/output.ts +89 -0
  578. package/src/pi-harness.ts +403 -0
  579. package/src/placement.ts +131 -0
  580. package/src/prd-to-spec.ts +1023 -0
  581. package/src/prepare.ts +230 -0
  582. package/src/prompt.ts +760 -0
  583. package/src/readiness.ts +98 -0
  584. package/src/reap-branches.ts +278 -0
  585. package/src/recover-isolated.ts +276 -0
  586. package/src/registry.ts +475 -0
  587. package/src/repo-config.ts +550 -0
  588. package/src/repo-key.ts +74 -0
  589. package/src/repo-mirror.ts +367 -0
  590. package/src/retry-backoff.ts +130 -0
  591. package/src/review-gate.ts +389 -0
  592. package/src/review-verdict.ts +422 -0
  593. package/src/run.ts +1430 -0
  594. package/src/scan.ts +611 -0
  595. package/src/select-order.ts +143 -0
  596. package/src/select-priority.ts +266 -0
  597. package/src/select.ts +62 -0
  598. package/src/session-path.ts +153 -0
  599. package/src/sidecar-apply.ts +216 -0
  600. package/src/sidecar.ts +700 -0
  601. package/src/slug-namespace.ts +367 -0
  602. package/src/spec-complete.ts +118 -0
  603. package/src/start.ts +974 -0
  604. package/src/status.ts +441 -0
  605. package/src/surface-gate.ts +337 -0
  606. package/src/surface-persist.ts +241 -0
  607. package/src/tasker-review-loop.ts +671 -0
  608. package/src/tasking-eligibility.ts +114 -0
  609. package/src/tasking-lock.ts +416 -0
  610. package/src/tasking.ts +1438 -0
  611. package/src/triage-gate.ts +248 -0
  612. package/src/triage-persist.ts +570 -0
  613. package/src/verdict-json.ts +73 -0
  614. package/src/verify-workflow-template.ts +159 -0
  615. package/src/verify.ts +123 -0
  616. package/src/watch-session.ts +397 -0
  617. package/src/work-layout.ts +262 -0
  618. package/src/work-on.ts +660 -0
  619. package/src/workspace.ts +502 -0
@@ -0,0 +1,142 @@
1
+ /**
2
+ * **The failure-CAUSE classifier** (task `failure-cause-classification-model-vs-
3
+ * git-vs-agent`).
4
+ *
5
+ * When a claimed item routes to `work/needs-attention/`, the runner records WHY.
6
+ * Historically several DIFFERENT causes collapsed into one undifferentiated label
7
+ * ("agent failed"), even though the CAUSE drives the RECOVERY:
8
+ *
9
+ * - **transient-infra** → retry the SAME work (the work is fine: a model
10
+ * endpoint outage the harness surfaced AFTER its own retries, or a git/
11
+ * provider outage).
12
+ * - **config-error** → fix the WIRING, not the task (a thrown CORE wiring/
13
+ * config error, e.g. `review` on with no `reviewGate` configured).
14
+ * - **agent-failed** (the conservative generic) → a human/agent must FIX
15
+ * something the agent did (ran but produced bad/empty output), OR the cause is
16
+ * simply UNKNOWN — the safe default that never forces a wrong specific label.
17
+ *
18
+ * This module classifies ONLY the axis that was previously lumped under
19
+ * "agent-failed". The OTHER existing terminal causes already have precise names
20
+ * and are NOT re-classified here — a red acceptance gate stays `gate-failed`, a
21
+ * rebase abort stays `rebase-conflict`, a deliberate STOP stays `agent-stopped`,
22
+ * a Gate-2 block stays `review-blocked`. This is the CAUSE axis ON TOP of those
23
+ * (see CONTEXT.md's *failure cause* glossary entry — the single source of truth).
24
+ *
25
+ * The classification is BEST-EFFORT + CONSERVATIVE: an unrecognised cause stays
26
+ * the generic `agent-failed`. The new precision is ADDED only where the cause is
27
+ * knowable from the surfaced error/detail; it never forces a wrong label.
28
+ *
29
+ * **`do` and `run` classify the SAME error the SAME way** by both routing their
30
+ * thrown-core-error / failed-agent detail through THIS one function — closing the
31
+ * cross-path divergence recorded in
32
+ * `work/notes/observations/run-thrown-core-error-labeled-agent-failed.md` (the SAME
33
+ * thrown core error used to read as `usage-error` in `do` but `agent-failed` in
34
+ * `run`).
35
+ *
36
+ * SCOPE FENCE: model-endpoint RETRIES are the HARNESS's job (pi retries its own
37
+ * API ~3–4×). This module does NOT add retries — it only CLASSIFIES what the
38
+ * harness SURFACES once its retries are exhausted (so a post-retry model outage
39
+ * reads as `transient-infra`, distinct from the agent producing bad output).
40
+ */
41
+
42
+ /**
43
+ * The CAUSE of a stuck item, the axis ON TOP of the existing terminal outcomes.
44
+ * Only the values this module decides between are listed — the genuinely-NEW
45
+ * `transient-infra` / `config-error` plus the conservative generic `agent-failed`
46
+ * (the existing name, reused as the safe default). The other terminal causes
47
+ * (`gate-failed`, `rebase-conflict`, `agent-stopped`, `review-blocked`) are NOT
48
+ * produced here; they keep their own precise outcome names at their own sites.
49
+ */
50
+ export type FailureCause =
51
+ | 'transient-infra' // a harness-surfaced model/connection outage (post-retry), or a git/provider outage — RETRY the same work
52
+ | 'config-error' // a thrown CORE wiring/config error (e.g. review on, no reviewGate) — fix the WIRING
53
+ | 'agent-failed'; // the conservative generic: the agent ran but produced bad/empty output, OR the cause is UNKNOWN
54
+
55
+ /**
56
+ * The signature of a thrown CORE wiring/config error this module recognises. The
57
+ * core throws a plain `Error` for `review` on with no `reviewGate` wired (the
58
+ * canonical config-error; see `integration-core.ts`), whose message contains
59
+ * "wiring bug". We match on that stable phrase rather than the error CLASS so the
60
+ * classification survives the message crossing the plain-`Error` boundary the
61
+ * catch sites hand us (they only have `err.message`).
62
+ */
63
+ const CONFIG_ERROR_SIGNATURES = [
64
+ /wiring bug/i,
65
+ /no review gate is configured/i,
66
+ ];
67
+
68
+ /**
69
+ * Substrings that mark a TRANSIENT-INFRA failure: a model endpoint / connection
70
+ * outage the harness surfaced AFTER exhausting its own retries, or a git/provider
71
+ * outage. Best-effort lexical signals (the harness/git only hand us a message
72
+ * string) — deliberately conservative: anything not matched stays `agent-failed`.
73
+ */
74
+ const TRANSIENT_INFRA_SIGNATURES = [
75
+ // A Gate-2 review verdict the runner could not PARSE (malformed JSON from the
76
+ // review agent, common on large diffs + weaker models). This is `transient-infra`,
77
+ // NOT `agent-failed`/`config-error`: the WORK is fine and the wiring is fine; the
78
+ // STOCHASTIC gate output misbehaved, so re-running the SAME work is the natural
79
+ // recovery (and the parser's repair pass + the tightened contract make a re-run far
80
+ // more likely to parse). Matches both `parseReviewVerdict` throw phrasings ("review
81
+ // verdict was not valid JSON" and "produced no parseable {verdict, findings}") and
82
+ // the core's "verdict could not be parsed" wrapper.
83
+ /review verdict was not valid JSON/i,
84
+ /verdict could not be parsed/i,
85
+ /no parseable \{verdict/i,
86
+ /\bECONN(?:REFUSED|RESET|ABORTED)\b/i,
87
+ /\bETIMEDOUT\b/i,
88
+ /\bENOTFOUND\b/i,
89
+ /\bEAI_AGAIN\b/i,
90
+ /connection (?:error|refused|reset|timed out|failed)/i,
91
+ /network (?:error|is unreachable|timeout)/i,
92
+ /\b(?:could not|unable to) (?:connect|reach)\b/i,
93
+ /\btimed? ?out\b/i,
94
+ /\b(?:overloaded|service unavailable|temporarily unavailable)\b/i,
95
+ /\b(?:429|500|502|503|504)\b/,
96
+ /model (?:endpoint )?(?:offline|unavailable|overloaded)/i,
97
+ /(?:after|exhausted) .{0,40}retr(?:y|ies)/i,
98
+ /rate.?limit/i,
99
+ ];
100
+
101
+ /**
102
+ * Classify a failure CAUSE from the surfaced error/detail text, best-effort +
103
+ * conservative (an unrecognised cause stays `agent-failed`).
104
+ *
105
+ * Order matters: a thrown CORE config/wiring error is checked FIRST (it is the
106
+ * most specific + the cross-path divergence this task closes), then the
107
+ * transient-infra signals, else the generic default.
108
+ *
109
+ * Used by BOTH `do` and `run` at their failure-routing sites so the SAME error
110
+ * yields the SAME cause regardless of path.
111
+ */
112
+ export function classifyFailureCause(detail: string | undefined): FailureCause {
113
+ const text = (detail ?? '').trim();
114
+ if (text === '') {
115
+ return 'agent-failed';
116
+ }
117
+ if (CONFIG_ERROR_SIGNATURES.some((re) => re.test(text))) {
118
+ return 'config-error';
119
+ }
120
+ if (TRANSIENT_INFRA_SIGNATURES.some((re) => re.test(text))) {
121
+ return 'transient-infra';
122
+ }
123
+ return 'agent-failed';
124
+ }
125
+
126
+ /**
127
+ * A short, human-readable label for a cause, used to PREFIX the recorded
128
+ * needs-attention reason so an operator (or an autonomous triage loop) reads the
129
+ * cause WITHOUT a second naming scheme. The generic `agent-failed` gets the
130
+ * historical "agent failed:" prefix so existing reason prose / tests are
131
+ * unchanged; only the NEW causes carry a distinct, legible prefix.
132
+ */
133
+ export function failureCauseLabel(cause: FailureCause): string {
134
+ switch (cause) {
135
+ case 'transient-infra':
136
+ return 'transient infra';
137
+ case 'config-error':
138
+ return 'config error';
139
+ case 'agent-failed':
140
+ return 'agent failed';
141
+ }
142
+ }
package/src/format.ts ADDED
@@ -0,0 +1,313 @@
1
+ import type {ScanReport, ScannedItem} from './scan.js';
2
+ import type {CwdSection} from './cwd-section.js';
3
+ import type {LockEntry} from './item-lock.js';
4
+ import {formatDuplicateWarnings} from './ledger-lint.js';
5
+ import {
6
+ categoriseItems,
7
+ summariseGroups,
8
+ CATEGORY_ORDER,
9
+ CATEGORY_LABELS,
10
+ type CategorisedItem,
11
+ type CategorisedGroups,
12
+ } from './categorise.js';
13
+
14
+ /**
15
+ * Human label for the two autonomy axes. `humanOnly` is reported first when both
16
+ * are set, so the REASON an agent is gated is always visible and distinct from
17
+ * `needsAnswers`.
18
+ */
19
+ export function gateLabel(
20
+ humanOnly: boolean | undefined,
21
+ needsAnswers?: boolean | undefined,
22
+ ): string {
23
+ if (humanOnly === true) {
24
+ return 'human-only';
25
+ }
26
+ if (needsAnswers === true) {
27
+ return 'needs-answers';
28
+ }
29
+ return 'undeclared';
30
+ }
31
+
32
+ /** A short description of the `blockedBy` readiness for one item. */
33
+ function readinessLabel(item: ScannedItem): string {
34
+ if (item.blockedBy.length === 0) {
35
+ return 'deps: satisfied (none)';
36
+ }
37
+ if (item.eligibility.blockedBy.satisfied) {
38
+ return `deps: satisfied (${item.blockedBy.join(', ')})`;
39
+ }
40
+ return `deps: waiting on ${item.eligibility.blockedBy.missing.join(', ')}`;
41
+ }
42
+
43
+ /** Ready items get a filled marker, blocked ones an open one. */
44
+ function readinessMarker(entry: CategorisedItem): string {
45
+ return entry.ready ? '*' : 'o';
46
+ }
47
+
48
+ function formatItem(entry: CategorisedItem): string {
49
+ return ` ${readinessMarker(entry)} ${entry.item.slug} ${readinessLabel(entry.item)}`;
50
+ }
51
+
52
+ /** Render one repo's three labelled groups; empty groups show `(none)`. */
53
+ function formatRepo(path: string, groups: CategorisedGroups): string[] {
54
+ const lines: string[] = [];
55
+ lines.push(` ${path}`);
56
+ lines.push('');
57
+ for (const category of CATEGORY_ORDER) {
58
+ lines.push(` ${CATEGORY_LABELS[category]}:`);
59
+ const entries = groups[category];
60
+ if (entries.length === 0) {
61
+ lines.push(' (none)');
62
+ } else {
63
+ for (const entry of entries) {
64
+ lines.push(formatItem(entry));
65
+ }
66
+ }
67
+ }
68
+ lines.push('');
69
+ return lines;
70
+ }
71
+
72
+ function pluralRepos(n: number): string {
73
+ return n === 1 ? 'repo' : 'repos';
74
+ }
75
+
76
+ function pluralItems(n: number): string {
77
+ return n === 1 ? 'item' : 'items';
78
+ }
79
+
80
+ /**
81
+ * The divergence-vs-arbiter line for the cwd-local section, using the
82
+ * `main-divergence-guard` framing: local `main` AHEAD of `<arbiter>/main` means
83
+ * UNPUSHED commits (the local working tree is more authoritative than the
84
+ * arbiter for those); BEHIND means the arbiter has commits the local tree lacks.
85
+ * When the fetch failed it says so (the divergence reflects last-known).
86
+ */
87
+ function cwdDivergenceLine(
88
+ arbiter: NonNullable<CwdSection['arbiter']>,
89
+ ): string {
90
+ const freshness = arbiter.fetched
91
+ ? 'fetched just now'
92
+ : 'FETCH FAILED — last-known (offline)';
93
+ const {ahead, behind, remote} = arbiter;
94
+ if (ahead === 0 && behind === 0) {
95
+ return ` in sync with ${remote}/main (${freshness}).`;
96
+ }
97
+ const parts: string[] = [];
98
+ if (ahead > 0) {
99
+ parts.push(`${ahead} commit${ahead === 1 ? '' : 's'} ahead (unpushed)`);
100
+ }
101
+ if (behind > 0) {
102
+ parts.push(`${behind} commit${behind === 1 ? '' : 's'} behind`);
103
+ }
104
+ return ` local main is ${parts.join(', ')} vs ${remote}/main (${freshness}).`;
105
+ }
106
+
107
+ /**
108
+ * Render the CWD-LOCAL section of `scan`/`status` (the `scan-status-read-cwd-repo`
109
+ * task): a DISTINCT, separately-counted block for the CURRENT repo, read from
110
+ * the LOCAL WORKING TREE (NOT the registry's bare mirror ref). Returns `[]` when
111
+ * the cwd does NOT participate (no local section). The section LABELS its source
112
+ * + freshness, shows the divergence-vs-arbiter (`main-divergence-guard` framing),
113
+ * and — when the cwd participates but is NOT registered — teaches
114
+ * self-registration instead of the dead-end "No participating repos found".
115
+ *
116
+ * The counts here are the cwd's OWN (never merged into the registry total — the
117
+ * consistency rule): the two reads have different freshness + storage models.
118
+ */
119
+ /**
120
+ * Render ONE held per-item lock entry (action × state + reason/questions) as
121
+ * indented lines, the SHARED renderer for the in-flight lock surface on BOTH the
122
+ * registry view (`formatStatus`) and the cwd section (`formatCwdSection`), so the
123
+ * two substrates present a held/stuck item identically (NOT a forked renderer). An
124
+ * `active` hold reads as `in-progress`; a `stuck` hold as `needs-attention` and
125
+ * carries its (possibly multi-line) reason + any surfaced questions.
126
+ */
127
+ export function formatLockEntryLines(
128
+ entry: LockEntry,
129
+ indent: string,
130
+ ): string[] {
131
+ const lines: string[] = [];
132
+ const view = entry.state === 'stuck' ? 'needs-attention' : 'in-progress';
133
+ lines.push(
134
+ `${indent}${entry.entry} (${entry.action}/${entry.state} = ${view})`,
135
+ );
136
+ if (entry.state === 'stuck') {
137
+ const reason =
138
+ entry.reason && entry.reason !== ''
139
+ ? entry.reason
140
+ : '(no reason recorded)';
141
+ const reasonLines = reason.split('\n');
142
+ lines.push(`${indent} reason: ${reasonLines[0]}`);
143
+ for (const extra of reasonLines.slice(1)) {
144
+ lines.push(`${indent} ${extra}`);
145
+ }
146
+ if (entry.questions && entry.questions.length > 0) {
147
+ lines.push(`${indent} questions:`);
148
+ for (const q of entry.questions) {
149
+ lines.push(`${indent} - ${q}`);
150
+ }
151
+ }
152
+ }
153
+ return lines;
154
+ }
155
+
156
+ export function formatCwdSection(section: CwdSection): string[] {
157
+ if (!section.participating || section.repo === undefined) {
158
+ return [];
159
+ }
160
+ const lines: string[] = [];
161
+ const dedup = section.alsoRegistered === true ? ' (also registered)' : '';
162
+ lines.push('This repo (local working tree):');
163
+ lines.push(` ${section.path}${dedup}`);
164
+ lines.push(
165
+ ' source: local working tree (may be ahead of / behind the arbiter) — ' +
166
+ 'distinct from the registry view below (arbiter main, fetched).',
167
+ );
168
+
169
+ // Fetch-first divergence-vs-arbiter (or a no-arbiter note).
170
+ if (section.arbiter !== undefined) {
171
+ lines.push(cwdDivergenceLine(section.arbiter));
172
+ } else {
173
+ lines.push(
174
+ ' no arbiter remote configured — divergence vs arbiter unknown.',
175
+ );
176
+ }
177
+
178
+ const total = section.totalItems ?? 0;
179
+ // Self-registration hint when the cwd participates but is NOT registered.
180
+ if (section.alsoRegistered !== true) {
181
+ lines.push('');
182
+ lines.push(
183
+ ` This repo participates (${total} backlog ${pluralItems(total)}) but is ` +
184
+ 'NOT registered — `run`/`scan` across machines won’t see it until ' +
185
+ '`dorfl remote add . --local` (or `remote add <its-url>`).',
186
+ );
187
+ }
188
+
189
+ // The cwd's grouped backlog — the SAME who-can-take-it grouping the registry
190
+ // view uses, but read from the working tree and counted SEPARATELY.
191
+ const groups = categoriseItems(section.repo.items);
192
+ lines.push('');
193
+ for (const category of CATEGORY_ORDER) {
194
+ lines.push(` ${CATEGORY_LABELS[category]}:`);
195
+ const entries = groups[category];
196
+ if (entries.length === 0) {
197
+ lines.push(' (none)');
198
+ } else {
199
+ for (const entry of entries) {
200
+ lines.push(formatItem(entry));
201
+ }
202
+ }
203
+ }
204
+
205
+ // The PER-ITEM LOCK in-flight SURFACE for the cwd (prd
206
+ // `ledger-status-per-item-lock-refs` US #8): held (`active` = in-progress) and
207
+ // `stuck` (= needs-attention) lock entries + their reasons. This is what keeps a
208
+ // held/stuck cwd item from vanishing: the held-slug subtraction removes it from
209
+ // the buckets above, so without THIS block it would be invisible (the regression
210
+ // this fixes). Symmetric with the registry view's `In-flight locks` block (same
211
+ // `refs/dorfl/lock/*` source, same primitive); rendered HERE inside the cwd
212
+ // section so it stays the cwd's OWN, separately-counted surface. Empty ⇒ no
213
+ // block (a calm repo adds no lines).
214
+ const lockHeld = section.repo.lockHeld ?? [];
215
+ if (lockHeld.length > 0) {
216
+ lines.push('');
217
+ lines.push(' In progress / stuck (lock held — refs/dorfl/lock/*):');
218
+ for (const entry of lockHeld) {
219
+ lines.push(...formatLockEntryLines(entry, ' '));
220
+ }
221
+ }
222
+ lines.push('');
223
+ lines.push(
224
+ ` Local total: ${total} ${pluralItems(total)} ` +
225
+ `(${section.totalEligible ?? 0} eligible) — this repo only, NOT merged with ` +
226
+ 'the registry total below.',
227
+ );
228
+ return lines;
229
+ }
230
+
231
+ /**
232
+ * Render the cross-repo queue as a human decision dashboard: under each repo,
233
+ * every backlog item is grouped by who-can-take-it (Agent-claimable now /
234
+ * Human-only / Blocked), with empty groups shown as `(none)`. Within a group,
235
+ * ready (deps-satisfied) items sort above blocked ones.
236
+ *
237
+ * The set of groups shown is INDEPENDENT of `autoBuild`; only the eligibility
238
+ * *verdict* line reflects the policy (`report.totalEligible` counts an
239
+ * agent-claimable item only when `autoBuild` is on).
240
+ */
241
+ export function formatReport(report: ScanReport, cwd?: CwdSection): string {
242
+ const lines: string[] = [];
243
+
244
+ // The cwd-local section (the `scan-status-read-cwd-repo` task): a DISTINCT,
245
+ // separately-counted block for the CURRENT repo, ABOVE the registry view.
246
+ const cwdLines = cwd !== undefined ? formatCwdSection(cwd) : [];
247
+ if (cwdLines.length > 0) {
248
+ lines.push(...cwdLines);
249
+ lines.push('');
250
+ }
251
+
252
+ // De-dup: when the cwd is ALSO registered, drop its registry row (shown once,
253
+ // above, marked "(also registered)") so the same repo never appears twice.
254
+ const registryRepos =
255
+ cwd?.alsoRegistered === true && cwd.registeredMirrorPath !== undefined
256
+ ? report.repos.filter((r) => r.path !== cwd.registeredMirrorPath)
257
+ : report.repos;
258
+
259
+ if (registryRepos.length === 0) {
260
+ // If the cwd participates we already rendered its local section above (no
261
+ // dead-end). Otherwise keep the existing empty-state.
262
+ if (cwdLines.length === 0) {
263
+ lines.push('No participating repos found.');
264
+ lines.push(
265
+ '(A repo participates iff its work/ tree has lifecycle content in any ' +
266
+ 'pool: tasks/ready, tasks/backlog, prds/proposed, prds/ready, ' +
267
+ 'notes/observations, or questions.)',
268
+ );
269
+ } else {
270
+ lines.push(
271
+ 'Registered repos: (none) — nothing registered in the registry yet.',
272
+ );
273
+ }
274
+ return lines.join('\n').replace(/\n+$/, '');
275
+ }
276
+
277
+ lines.push('Registered repos (registry — arbiter main, fetched):');
278
+ lines.push('');
279
+ const allGroups: CategorisedGroups[] = [];
280
+ for (const repo of registryRepos) {
281
+ const groups = categoriseItems(repo.items);
282
+ allGroups.push(groups);
283
+ lines.push(...formatRepo(repo.path, groups));
284
+ // The one-slug-one-folder LINT (prd `ledger-integrity` story 3): WARN LOUDLY
285
+ // when any slug in this repo's ledger resides in >1 status folder (a corrupt
286
+ // ledger — never a silent pass). Clean ledgers add no lines.
287
+ const warnings = formatDuplicateWarnings(repo.ledgerDuplicates ?? []);
288
+ if (warnings.length > 0) {
289
+ lines.push(...warnings.map((w) => ` ${w}`));
290
+ lines.push('');
291
+ }
292
+ }
293
+
294
+ const s = summariseGroups(allGroups);
295
+ const repoCount = registryRepos.length;
296
+ const registryItems = registryRepos.reduce((n, r) => n + r.items.length, 0);
297
+ const registryEligible = registryRepos.reduce(
298
+ (n, r) => n + r.items.filter((i) => i.eligibility.eligible).length,
299
+ 0,
300
+ );
301
+ lines.push(
302
+ `Registry summary: ${registryItems} item(s) across ${repoCount} ${pluralRepos(repoCount)} — ` +
303
+ `${s.agentClaimable} agent-claimable, ${s.humanOnly} human-only, ` +
304
+ `${s.needsAnswers} needs-answers, ${s.blocked} blocked ` +
305
+ `(${s.ready} ready).`,
306
+ );
307
+ lines.push(
308
+ `Runner verdict: ${registryEligible}/${registryItems} item(s) eligible now ` +
309
+ `(under the current --auto-build policy).`,
310
+ );
311
+
312
+ return lines.join('\n');
313
+ }