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,261 @@
1
+ import { git } from './git.js';
2
+ import { createJob } from './workspace.js';
3
+ import { reapJob } from './gc.js';
4
+ import { branchAheadOfArbiter, rebaseContinuedBranchOntoMain, pushContinuedBranchWithStaleLeaseRetry, } from './continue-branch.js';
5
+ import { workBranchRef } from './slug-namespace.js';
6
+ /**
7
+ * The **job-worktree** strategy — `run`'s EXISTING isolation, extracted behind
8
+ * the seam UNCHANGED. `prepare` ensures the hub mirror + cuts a per-job worktree
9
+ * off the freshly-fetched `<hub>/main` (`createJob`); the handle's `teardown`
10
+ * re-applies the §4 provably-safe deletion predicate (`reapJob`) — reaping the
11
+ * worktree iff its work is clean AND on the arbiter, retaining it otherwise (the
12
+ * never-lose-work signal). The arbiter remote inside the worktree is `origin`
13
+ * (the bare mirror's clone remote), and provider detection keys off the mirror's
14
+ * resolved arbiter URL — byte-identical to today's `run`.
15
+ */
16
+ export function jobWorktreeStrategy(options) {
17
+ return {
18
+ name: 'job-worktree',
19
+ prepare({ slug, type, env }) {
20
+ const job = createJob({
21
+ fromRepo: options.fromRepo,
22
+ arbiter: options.arbiter,
23
+ slug,
24
+ type: type ?? 'task',
25
+ workspacesDir: options.workspacesDir,
26
+ env,
27
+ });
28
+ return jobWorktreeHandle(job, env);
29
+ },
30
+ };
31
+ }
32
+ /**
33
+ * Build the uniform handle for a job-worktree `Job` — the EXACT fields `run`'s
34
+ * pipeline read off `job` today (`dir`/`branch`/`arbiterRemote`/`mirror.url`)
35
+ * plus the `reapJob` teardown. Exposed so a caller that already created the
36
+ * `Job` (e.g. `run`'s pipeline, mid-extraction) can wrap it without re-creating.
37
+ */
38
+ export function jobWorktreeHandle(job, env) {
39
+ return {
40
+ dir: job.dir,
41
+ branch: job.branch,
42
+ arbiterRemote: job.arbiterRemote,
43
+ arbiterUrl: job.mirror.url,
44
+ continued: job.continued,
45
+ continueRebaseConflict: job.continueRebaseConflict,
46
+ continuePushFailure: job.continuePushFailure,
47
+ teardown(opts) {
48
+ // Auto-reap at end-of-job (ADR §4): re-apply the provably-safe deletion
49
+ // predicate and remove the worktree ONLY if it holds (clean tree AND the
50
+ // branch tip reachable on the arbiter). NEVER `--force` here.
51
+ //
52
+ // `reachableOnly` (the FAILURE-path opt-in) drops the clean-tree half but
53
+ // KEEPS reachability: a churn-dirty worktree whose durable branch is on
54
+ // the arbiter is reaped (it would otherwise linger and poison the next
55
+ // build's fetch); a worktree whose work is NOT yet on the arbiter is still
56
+ // retained (never lose work).
57
+ reapJob({
58
+ dir: job.dir,
59
+ branch: job.branch,
60
+ mirrorPath: job.mirror.path,
61
+ arbiter: job.arbiterRemote,
62
+ reachableOnly: opts?.reachableOnly === true,
63
+ env,
64
+ });
65
+ },
66
+ };
67
+ }
68
+ /**
69
+ * The **in-place** strategy — the current checkout (a human's clone, or the CI
70
+ * container) IS the isolation. `prepare` fetches the arbiter and switches the
71
+ * checkout to `work/<slug>` cut from the freshly-fetched `<arbiter>/main` (the
72
+ * SAME "every worktree is cut from a fresh main" guarantee, ADR §6), WITHOUT a
73
+ * hub mirror or external worktree. The handle's `arbiterRemote`/`arbiterUrl` come
74
+ * from the checkout's own arbiter remote; `teardown` is a NO-OP — the checkout is
75
+ * left in a defined state on `work/<slug>`, NEVER reaped (it is the human's tree
76
+ * / the only copy of CI's work).
77
+ *
78
+ * NOTE: this strategy assumes the slug is already CLAIMED (the same contract as
79
+ * the job-worktree strategy, whose caller claims before `prepare`). It does not
80
+ * itself claim — `do-in-place` composes the claim (and `start`/`complete`) around
81
+ * the seam. `prepare` here is the thin "put the checkout on a fresh work branch"
82
+ * step the shared pipeline needs; it is unwired in this task.
83
+ */
84
+ export function inPlaceStrategy(options) {
85
+ const arbiter = options.arbiter ?? 'origin';
86
+ const checkout = options.checkout;
87
+ return {
88
+ name: 'in-place',
89
+ prepare({ slug, type, claimCommit, env }) {
90
+ const branch = workBranchRef(type ?? 'task', slug);
91
+ const arbiterUrl = git(['remote', 'get-url', arbiter], checkout, {
92
+ env,
93
+ }).trim();
94
+ git(['fetch', '--quiet', arbiter], checkout, { env });
95
+ // CONTINUE-detection (shared with the job-worktree path, ADR §14 keystone):
96
+ // does the arbiter have a `work/<slug>` ref AHEAD of main (a requeue kept
97
+ // it)? In a normal clone the refs are the remote-tracking
98
+ // `<arbiter>/work/<slug>` and `<arbiter>/main`.
99
+ let continued = false;
100
+ let continueRebaseConflict = false;
101
+ let continuePushFailure;
102
+ // ARBITER-AUTHORITATIVE continue-detection: `ls-remote` the arbiter so a
103
+ // STALE local remote-tracking ref (a plain `git fetch` does NOT prune
104
+ // unless `fetch.prune` is set) pointing at a branch the arbiter no longer
105
+ // has cannot resurrect a deleted branch as a "continue".
106
+ if (branchAheadOfArbiter({
107
+ cwd: checkout,
108
+ arbiterRemote: arbiter,
109
+ branch,
110
+ branchRef: `${arbiter}/${branch}`,
111
+ mainRef: `${arbiter}/main`,
112
+ env,
113
+ })) {
114
+ continued = true;
115
+ // The arbiter `work/<slug>` tip the fetch above brought down, READ BEFORE
116
+ // the onboard rebase rewrites the local branch — the value the
117
+ // --force-with-lease push expects the arbiter to still hold. In a normal
118
+ // clone this lives in the remote-tracking ref `<arbiter>/<branch>` (the
119
+ // rebase below rewrites only the LOCAL `<branch>`, so the tracking ref keeps
120
+ // the pre-rebase arbiter sha). Captured here, threaded into the stale-lease
121
+ // retry below so a requeue-continue that churns the ref after our fetch is
122
+ // re-leased against the freshly-fetched tip rather than stranding the work.
123
+ const expectedRemoteTip = git(['rev-parse', `${arbiter}/${branch}`], checkout, { env }).trim();
124
+ // CONTINUE: land on the kept arbiter tip (force-reset a stale local copy
125
+ // so we continue the SAME single branch), then REBASE onto fresh main at
126
+ // onboard-time (ADR §10: rebase, not merge). A CLEAN rebase updates the
127
+ // already-pushed tip with --force-with-lease on the WORK branch ONLY
128
+ // (a requeued item is unshared) — NEVER --force, NEVER to main (§11),
129
+ // SURVIVING a stale-lease ("stale info") rejection by re-fetching +
130
+ // re-rebasing + retrying (the SAME helper `workspace.ts` uses). A
131
+ // CONFLICT is aborted (never auto-resolved) + flagged for the caller to
132
+ // route to needs-attention.
133
+ git(['switch', '--quiet', '-C', branch, `${arbiter}/${branch}`], checkout, { env });
134
+ const rebase = rebaseContinuedBranchOntoMain(checkout, `${arbiter}/main`, env);
135
+ if (rebase.kind === 'conflict') {
136
+ continueRebaseConflict = true;
137
+ }
138
+ else {
139
+ // The helper THROWS on a terminal failure (the stale-lease retry cap, or
140
+ // a non-stale-lease rejection / unreachable arbiter). CATCH it and flag
141
+ // `continuePushFailure` so the caller routes the item to needs-attention
142
+ // — the kept work stays committed + recoverable — rather than crashing
143
+ // the run and stranding it silently in-progress (the stale-lease bug).
144
+ try {
145
+ const pushed = pushContinuedBranchWithStaleLeaseRetry({
146
+ cwd: checkout,
147
+ branch,
148
+ arbiter,
149
+ mainRef: `${arbiter}/main`,
150
+ expectedRemoteTip,
151
+ env,
152
+ });
153
+ if (pushed.kind === 'conflict') {
154
+ continueRebaseConflict = true;
155
+ }
156
+ }
157
+ catch (err) {
158
+ continuePushFailure =
159
+ err instanceof Error ? err.message : String(err);
160
+ }
161
+ }
162
+ }
163
+ else {
164
+ // FRESH: put the checkout on the namespaced work branch cut from the
165
+ // EXACT claim commit (the defensive onboarding guard). When a
166
+ // `claimCommit` is threaded in (the normal `do` build path), assert it is
167
+ // reachable from the freshly-fetched `<arbiter>/main` and force-RESET the
168
+ // branch onto it with `-C` — so a stale same-named local branch (e.g. one
169
+ // `intake` left behind, or a prior re-run) is RE-POINTED at the claim
170
+ // commit, NEVER silently reused on a pre-claim base (the "nothing to
171
+ // complete" defect). Mirrors the CONTINUE path's `-C`. A missing /
172
+ // unreachable claim commit FAILS LOUDLY — never a silent stale-base build.
173
+ if (claimCommit !== undefined) {
174
+ assertClaimCommitReachable(checkout, claimCommit, `${arbiter}/main`, env);
175
+ git(['switch', '--quiet', '-C', branch, claimCommit], checkout, {
176
+ env,
177
+ });
178
+ }
179
+ else {
180
+ // No claim commit (a bare resume / re-run with no claim in hand): cut
181
+ // off the freshly-fetched `<arbiter>/main`; plain-switch a pre-existing
182
+ // local branch.
183
+ const created = gitSoftSwitch(['switch', '--quiet', '-c', branch, `${arbiter}/main`], checkout, env);
184
+ if (!created) {
185
+ git(['switch', '--quiet', branch], checkout, { env });
186
+ }
187
+ }
188
+ }
189
+ return {
190
+ dir: checkout,
191
+ branch,
192
+ arbiterRemote: arbiter,
193
+ arbiterUrl,
194
+ continued,
195
+ continueRebaseConflict,
196
+ continuePushFailure,
197
+ // NO-OP teardown: the checkout is the human's / CI's tree — left on
198
+ // `work/<slug>` in a defined state, NEVER reaped (ADR §2/§4). The
199
+ // human's `complete` (or the runner) owns the branch lifecycle.
200
+ // `reachableOnly` is irrelevant here (nothing is ever reaped in-place).
201
+ teardown() { },
202
+ };
203
+ },
204
+ };
205
+ }
206
+ /**
207
+ * Assert the claim commit is reachable from `<arbiter>/main` (an ancestor),
208
+ * throwing a CLEAR error if not — the LOUD-failure guard the FRESH onboarding
209
+ * path uses before force-resetting the work branch onto the claim commit. A
210
+ * not-yet-fetched or rolled-back arbiter main that does NOT reach the claim must
211
+ * fail fast here, never silently build on a stale base.
212
+ */
213
+ function assertClaimCommitReachable(checkout, claimCommit, mainRef, env) {
214
+ const reachable = gitSoftSwitch(['merge-base', '--is-ancestor', claimCommit, mainRef], checkout, env);
215
+ if (!reachable) {
216
+ throw new Error(`onboarding '${claimCommit}' failed: the claim commit is not reachable ` +
217
+ `from ${mainRef} (the claim push did not land, or local ${mainRef} is ` +
218
+ 'stale). Refusing to build on a stale base — re-fetch the arbiter and ' +
219
+ 'retry, or `requeue` the item.');
220
+ }
221
+ }
222
+ /** Try a git switch; return true on success, false on non-zero (no throw). */
223
+ function gitSoftSwitch(args, cwd, env) {
224
+ try {
225
+ git(args, cwd, { env });
226
+ return true;
227
+ }
228
+ catch {
229
+ return false;
230
+ }
231
+ }
232
+ /**
233
+ * Select the isolation strategy by **"is there a checkout"** (ADR §3) — NOT a
234
+ * hardcoded path:
235
+ *
236
+ * - `checkout` present ⇒ {@link inPlaceStrategy} (the checkout IS the
237
+ * isolation; `do <slug>` in a checkout, the in-place human path).
238
+ * - `checkout` absent ⇒ {@link jobWorktreeStrategy} (mirror + worktree in the
239
+ * agents' area; `do --remote` / `run`).
240
+ *
241
+ * Both yield the same uniform handle, so the caller's pipeline is identical
242
+ * regardless of which strategy was selected.
243
+ */
244
+ export function selectIsolationStrategy(input) {
245
+ if (input.checkout !== undefined) {
246
+ return inPlaceStrategy({
247
+ checkout: input.checkout,
248
+ arbiter: input.arbiter,
249
+ });
250
+ }
251
+ if (input.fromRepo === undefined || input.workspacesDir === undefined) {
252
+ throw new Error('selectIsolationStrategy: the job-worktree strategy (no checkout) ' +
253
+ 'requires both `fromRepo` and `workspacesDir`.');
254
+ }
255
+ return jobWorktreeStrategy({
256
+ fromRepo: input.fromRepo,
257
+ arbiter: input.arbiter,
258
+ workspacesDir: input.workspacesDir,
259
+ });
260
+ }
261
+ //# sourceMappingURL=isolation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isolation.js","sourceRoot":"","sources":["../src/isolation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,349 @@
1
+ /**
2
+ * The single provider-native PROCESSING LOCK label (task `intake-processing-lock`,
3
+ * prd `issue-intake` US #10): a TRANSIENT concurrency mutex — added on start (the
4
+ * winner only), removed on finish — that serialises two concurrent `intake` runs on
5
+ * the SAME issue. It is namespaced under the brand (`dorfl:processing`) so it
6
+ * cannot collide with a user's own labels. It carries NO `work/` state — it is NOT a
7
+ * label STATE-MACHINE (ADR §12) and NOT a `work/`-file CAS; it is ONE transient lock
8
+ * label and nothing more.
9
+ */
10
+ export declare const PROCESSING_LOCK_LABEL: string;
11
+ /**
12
+ * The **issue seam** (prd `issue-intake`, task `intake-tracer-slice-outcome`):
13
+ * the provider-pluggable surface `intake <N>` reads an issue + its comment thread
14
+ * through, and posts a clarifying comment back onto. It is the SIBLING of the
15
+ * review-request `ReviewProvider` (`integrator.ts` / `github.ts`): both name a
16
+ * GitHub-backed surface behind a seam, and both keep the CORE free of any `gh`
17
+ * import — ONLY the adapter shells out (the same discipline `github.ts` documents).
18
+ *
19
+ * The READ methods (`getIssue`, `listComments`) + the issue comment
20
+ * (`postIssueComment`) landed with the keystone task; the LABEL ops
21
+ * (`addLabel`/`removeLabel`/`getLabels` — the transient `processing` LOCK, task
22
+ * `intake-processing-lock`) extend it. `closeIssue` (task
23
+ * `intake-closes-issue-on-bounce`) is the ATOMIC close used on a BOUNCE — a
24
+ * terminal outcome, so intake closes the issue directly (comment + `not planned`
25
+ * + close in ONE call). It is ALSO the method CI's future close-job uses for the
26
+ * task/prd path; only the BOUNCE close is intake's.
27
+ *
28
+ * The label ops are a TRANSIENT CONCURRENCY MUTEX carrying NO `work/` state — ONE
29
+ * lock label, added-on-start / removed-on-finish. They are NOT a label
30
+ * STATE-MACHINE (ADR §12 forbids modelling `work/` lifecycle in labels) and NOT a
31
+ * `work/`-file CAS (the contended thing is the ISSUE; the output slug is unknown
32
+ * pre-run). A provider with no label concept DEGRADES to best-effort (it reports
33
+ * `supported: false` / `applied: false` and the run proceeds WITHOUT the lock).
34
+ *
35
+ * Why `postIssueComment` is a DISTINCT method from `ReviewProvider.postPRComment`
36
+ * (renamed from `postComment` in this same task): the PR-comment surface is keyed
37
+ * by the PR **url**; the issue-comment surface is keyed by the issue **number**. In
38
+ * GitHub the two comment id spaces happen to coincide, but another provider may not
39
+ * share them — so they are nominally distinct seams with distinct input types
40
+ * ({@link PostIssueCommentInput} carries `issueNumber`, NOT a `url`).
41
+ *
42
+ * Tests STUB `gh` via the injectable `ghBin` (the SAME mechanism the PR-provider
43
+ * tests use) — no network, no real GitHub.
44
+ */
45
+ /** A GitHub issue's durable fields the decision prompt reads. */
46
+ export interface Issue {
47
+ /** The issue number (`#N`). */
48
+ number: number;
49
+ /** The issue title. */
50
+ title: string;
51
+ /** The issue body (markdown), possibly empty. */
52
+ body: string;
53
+ /** The issue author's login (e.g. `octocat`), when the provider reports one. */
54
+ author?: string;
55
+ /** `open` / `closed` — the provider's state string, lower-cased. */
56
+ state?: string;
57
+ }
58
+ /** One comment on the issue thread (oldest-first, as `listComments` returns them). */
59
+ export interface IssueComment {
60
+ /**
61
+ * The provider's comment id (`gh issue view --json comments` reports it). Surfaced
62
+ * for the intake TRIAGE GATE (task `intake-self-awareness-resumption-tracking`):
63
+ * the triage is id-set membership + list position only — it records which comment
64
+ * ids intake READ (the marker's `seen=<id>,…`) and detects raced-in / deleted
65
+ * comments by id arithmetic. ADDITIVE (no existing reader breaks); NO `createdAt`
66
+ * is added — nothing reads a timestamp (ordering is `listComments`' oldest-first).
67
+ */
68
+ id?: string;
69
+ /** The comment author's login, when reported. */
70
+ author?: string;
71
+ /** The comment body (markdown). */
72
+ body: string;
73
+ }
74
+ export interface GetIssueInput {
75
+ cwd: string;
76
+ /** The issue number to read (`intake <N>`). */
77
+ issueNumber: number;
78
+ env?: NodeJS.ProcessEnv;
79
+ }
80
+ export interface ListCommentsInput {
81
+ cwd: string;
82
+ issueNumber: number;
83
+ env?: NodeJS.ProcessEnv;
84
+ }
85
+ export interface PostIssueCommentInput {
86
+ cwd: string;
87
+ /**
88
+ * The issue number to comment ON — the issue-comment surface's KEY. This is the
89
+ * whole reason {@link IssueProvider.postIssueComment} is a sibling of (not a
90
+ * reuse of) `ReviewProvider.postPRComment`, which is keyed by the PR `url`.
91
+ */
92
+ issueNumber: number;
93
+ /** The comment body (markdown). */
94
+ body: string;
95
+ env?: NodeJS.ProcessEnv;
96
+ }
97
+ export interface PostIssueCommentResult {
98
+ /** True iff a comment was actually posted (a real, authenticated provider). */
99
+ posted: boolean;
100
+ /** Human-readable confirmation / fallback (the text on degrade). */
101
+ instruction: string;
102
+ }
103
+ /**
104
+ * The close-reason GitHub renders distinct from a "completed" close. `gh issue
105
+ * close --reason` accepts `completed | not planned | duplicate`; a BOUNCE is
106
+ * precisely `not planned` (the asks are unrelated and must be re-filed). The
107
+ * INTERFACE carries it provider-neutrally — a non-GitHub adapter maps or ignores
108
+ * it (the seam stays provider-pluggable; `reason` is a GitHub-ism on the wire).
109
+ */
110
+ export type IssueCloseReason = 'completed' | 'not planned' | 'duplicate';
111
+ export interface CloseIssueInput {
112
+ cwd: string;
113
+ /** The issue number to close (`gh issue close <N>`). */
114
+ issueNumber: number;
115
+ /**
116
+ * An OPTIONAL closing comment posted IN THE SAME atomic operation as the close
117
+ * (`gh issue close --comment <body>`). Carrying it on the close call (not a
118
+ * separate `postIssueComment` then close) removes the comment-posted-but-close-
119
+ * failed window — the whole point of the atomic close.
120
+ */
121
+ comment?: string;
122
+ /** An OPTIONAL close reason (`gh issue close --reason "not planned"`). */
123
+ reason?: IssueCloseReason;
124
+ env?: NodeJS.ProcessEnv;
125
+ }
126
+ export interface CloseIssueResult {
127
+ /** True iff the issue was actually closed (a real, authenticated provider). */
128
+ closed: boolean;
129
+ /**
130
+ * The REAL underlying failure detail when `closed` is false — the actual `gh`
131
+ * stderr via {@link ghFailureReason}, NOT a hard-coded "unavailable or
132
+ * unauthenticated" guess (that misattribution bug was fixed in `mutateLabel`;
133
+ * do not propagate it). Absent on success.
134
+ */
135
+ reason?: string;
136
+ /** Human-readable confirmation / fallback (the text on degrade). */
137
+ instruction: string;
138
+ }
139
+ export interface LabelInput {
140
+ cwd: string;
141
+ /** The issue number to label / read labels FROM. */
142
+ issueNumber: number;
143
+ env?: NodeJS.ProcessEnv;
144
+ }
145
+ export interface AddLabelInput extends LabelInput {
146
+ /** The single label to add (e.g. the `processing` lock). */
147
+ label: string;
148
+ }
149
+ export interface RemoveLabelInput extends LabelInput {
150
+ /** The single label to remove (e.g. the `processing` lock). */
151
+ label: string;
152
+ }
153
+ /**
154
+ * The OUTCOME of a label MUTATION (`addLabel` / `removeLabel`). The lock ops are a
155
+ * CONCURRENCY mutex, so the caller must distinguish THREE genuinely-different
156
+ * results — collapsing them (the original bug) sent a maintainer hunting an auth
157
+ * problem that did not exist, and made a real lock-failure proceed lock-less:
158
+ *
159
+ * - **`applied`** — the provider made the change on the real surface (the winner
160
+ * acquired / released the lock label).
161
+ * - **`unsupported`** — the provider has NO label concept at all (a non-GitHub
162
+ * provider without labels). The lock LEGITIMATELY degrades to best-effort here
163
+ * (the spec's provider-pluggability): there is simply nothing to lock on.
164
+ * - **`failed`** — the provider DOES support labels but the op failed for a REAL
165
+ * reason (a missing/unauthenticated `gh`, a permissions error, an unexpected
166
+ * `gh` failure). This is NOT a legitimate degrade: the lock is meaningful but
167
+ * could not be taken, so the caller must FAIL / back off rather than silently
168
+ * proceed lock-less (maintainer decision — see {@link LabelResult.reason}).
169
+ *
170
+ * NEVER throws — the seam reports the outcome (the caller decides fail-vs-degrade),
171
+ * the same never-crash discipline the comment poster / PR provider keep (ADR §6).
172
+ */
173
+ export type LabelOutcome = 'applied' | 'unsupported' | 'failed';
174
+ export interface LabelResult {
175
+ /** Which of the three outcomes occurred (the caller routes fail-vs-degrade on this). */
176
+ outcome: LabelOutcome;
177
+ /**
178
+ * True iff the label change was actually applied on the provider surface
179
+ * (`outcome === 'applied'`). Retained as a convenience for the acquire/release
180
+ * sites; the THREE-way `outcome` is the load-bearing discriminator.
181
+ */
182
+ applied: boolean;
183
+ /**
184
+ * The REAL underlying failure detail when `outcome === 'failed'` — the actual
185
+ * `gh` stderr (e.g. `'dorfl:processing' not found`), NOT a hard-coded
186
+ * "unavailable or unauthenticated" guess. Surfaced so the cause is diagnosable.
187
+ * Absent for `applied` / `unsupported`.
188
+ */
189
+ reason?: string;
190
+ /** Human-readable confirmation / degrade-or-failure reason. */
191
+ instruction: string;
192
+ }
193
+ /**
194
+ * The result of READING an issue's labels — the lock READ that decides acquire vs
195
+ * back-off. Like {@link LabelResult} it distinguishes the SAME three outcomes so
196
+ * the caller never confuses a genuinely-unsupported provider (legitimate degrade)
197
+ * with a real read FAILURE on a label-supporting provider (must NOT silently
198
+ * proceed lock-less):
199
+ *
200
+ * - **`ok`** — the labels were read (`labels` carries them; possibly empty).
201
+ * - **`unsupported`** — the provider has NO label concept (legitimate degrade).
202
+ * - **`failed`** — a label-supporting provider could not be read (e.g. `gh`
203
+ * missing/unauthenticated): the lock STATE is unknown, so the caller must FAIL
204
+ * rather than guess "no lock held".
205
+ */
206
+ export type GetLabelsOutcome = 'ok' | 'unsupported' | 'failed';
207
+ export interface GetLabelsResult {
208
+ /** Which of the three outcomes occurred (the caller routes fail-vs-degrade on this). */
209
+ outcome: GetLabelsOutcome;
210
+ /**
211
+ * False iff the provider has no label surface at all (`outcome === 'unsupported'`)
212
+ * — retained for back-compat; the three-way `outcome` is load-bearing. A `failed`
213
+ * read is ALSO `supported: false` historically, but `outcome` separates them.
214
+ */
215
+ supported: boolean;
216
+ /** The labels currently on the issue (empty when none / unsupported / failed). */
217
+ labels: string[];
218
+ /**
219
+ * The REAL underlying failure detail when `outcome === 'failed'` — the actual
220
+ * `gh` stderr, NOT a hard-coded "unavailable or unauthenticated" guess.
221
+ */
222
+ reason?: string;
223
+ /** Human-readable confirmation / degrade-or-failure reason. */
224
+ instruction: string;
225
+ }
226
+ /**
227
+ * The issue seam (provider-pluggable; GitHub via `gh` first). The CORE depends on
228
+ * THIS interface only; the concrete `gh` shelling-out lives entirely in
229
+ * {@link GitHubIssueProvider}. A non-GitHub provider can follow the same shape.
230
+ */
231
+ export interface IssueProvider {
232
+ /** Stable provider name stamped into diagnostics (`github`, …). */
233
+ readonly name: string;
234
+ /** Read the issue (number/title/body/author/state). */
235
+ getIssue(input: GetIssueInput): Promise<Issue>;
236
+ /** Read the issue's comment thread, oldest-first. */
237
+ listComments(input: ListCommentsInput): Promise<IssueComment[]>;
238
+ /** Post a clarifying comment on the issue (keyed by the issue NUMBER). */
239
+ postIssueComment(input: PostIssueCommentInput): Promise<PostIssueCommentResult>;
240
+ /**
241
+ * Read the issue's current labels — the lock READ that decides acquire vs
242
+ * back-off. NEVER throws; returns a three-way {@link GetLabelsResult}: `ok`
243
+ * (labels read), `unsupported` (no label concept → legitimate degrade), or
244
+ * `failed` (a label-supporting provider could not be read → the caller FAILS
245
+ * rather than guessing the lock is free).
246
+ */
247
+ getLabels(input: LabelInput): Promise<GetLabelsResult>;
248
+ /**
249
+ * ADD a single label (acquire the `processing` lock — the winner only). The
250
+ * RUNNER calls this; the agent stays label-free. NEVER throws — it returns a
251
+ * three-way {@link LabelResult} (`applied` / `unsupported` / `failed`) so the
252
+ * caller can FAIL on a real lock-acquire failure (e.g. `gh` unauthenticated)
253
+ * rather than silently proceed lock-less. On a label-supporting provider where
254
+ * the lock label does not exist yet (a fresh repo), it CREATES the label first
255
+ * so the lock works from the first run, then adds it.
256
+ */
257
+ addLabel(input: AddLabelInput): Promise<LabelResult>;
258
+ /**
259
+ * REMOVE a single label (release the `processing` lock on finish — success OR
260
+ * handled failure). The RUNNER calls this; the agent stays label-free. NEVER
261
+ * throws; returns the three-way {@link LabelResult} like {@link addLabel}.
262
+ */
263
+ removeLabel(input: RemoveLabelInput): Promise<LabelResult>;
264
+ /**
265
+ * CLOSE an issue, OPTIONALLY posting a closing comment and setting a close
266
+ * reason IN THE SAME atomic operation (`gh issue close <N> [--comment <body>]
267
+ * [--reason "not planned"]`). Used on a BOUNCE (terminal: comment + `not
268
+ * planned` + close in ONE call — no post-then-close partial-failure window) and,
269
+ * later, by CI's task/prd close-job. The RUNNER calls this; the agent stays
270
+ * seam-free. NEVER throws — a missing/unauthenticated `gh` DEGRADES, surfacing
271
+ * the REAL `gh` stderr via {@link CloseIssueResult.reason} (NOT a hard-coded
272
+ * guess), so the terminal outcome is unchanged and the cause stays diagnosable.
273
+ */
274
+ closeIssue(input: CloseIssueInput): Promise<CloseIssueResult>;
275
+ }
276
+ export interface GitHubIssueProviderOptions {
277
+ /**
278
+ * The `gh` CLI binary (default `gh` on `PATH`). Tests inject a stub script so
279
+ * the seam is exercised without a real model / network / GitHub — the SAME test
280
+ * seam the {@link GitHubProvider} (review-request) uses.
281
+ */
282
+ ghBin?: string;
283
+ }
284
+ /**
285
+ * The GitHub issue provider: reads an issue + thread, posts a comment, and (on a
286
+ * BOUNCE) atomically closes the issue by shelling out to the `gh` CLI (`gh issue
287
+ * view` / `gh issue comment` / `gh issue close --comment --reason` / `gh issue
288
+ * edit` for labels). It is the ONLY place in the issue-seam stack that invokes
289
+ * `gh` — the core never
290
+ * imports it (the same boundary `github.ts` keeps for the review-request seam).
291
+ *
292
+ * The READ methods THROW on a `gh` failure (a missing/unauthenticated `gh`, or an
293
+ * unknown issue): `intake` cannot decide without the issue, so a read failure is a
294
+ * hard, surfaced error (unlike the review-request `openRequest`, whose work is
295
+ * already safely pushed and so degrades). `postIssueComment` is advisory and
296
+ * DEGRADES (never throws), like the PR-comment poster.
297
+ */
298
+ export declare class GitHubIssueProvider implements IssueProvider {
299
+ readonly name = "github";
300
+ private readonly ghBin;
301
+ constructor(options?: GitHubIssueProviderOptions);
302
+ getIssue(input: GetIssueInput): Promise<Issue>;
303
+ listComments(input: ListCommentsInput): Promise<IssueComment[]>;
304
+ postIssueComment(input: PostIssueCommentInput): Promise<PostIssueCommentResult>;
305
+ closeIssue(input: CloseIssueInput): Promise<CloseIssueResult>;
306
+ getLabels(input: LabelInput): Promise<GetLabelsResult>;
307
+ addLabel(input: AddLabelInput): Promise<LabelResult>;
308
+ removeLabel(input: RemoveLabelInput): Promise<LabelResult>;
309
+ /**
310
+ * Shared `gh issue edit <N> --add-label|--remove-label <label>` runner for the
311
+ * label MUTATIONS (the lock acquire/release). NEVER throws — it reports a
312
+ * three-way {@link LabelResult} so the CALLER decides fail-vs-degrade (the lock
313
+ * acquire-site FAILS on `failed`; only a genuinely-unsupported provider degrades).
314
+ *
315
+ * On `--add-label` against a fresh repo where the lock label does NOT exist yet,
316
+ * `gh` exits non-zero with `'<label>' not found`. We CREATE the label (`gh label
317
+ * create`) and RETRY the add, so the lock works from the very first `intake` run
318
+ * (a fresh repo is lockable without a manual `gh label create`). Label creation
319
+ * is idempotent-enough for our purpose: a concurrent create loses harmlessly
320
+ * (the retry add then succeeds against the now-existing label).
321
+ */
322
+ private mutateLabel;
323
+ /**
324
+ * Create the lock label (`gh label create <label>`) so a fresh repo is lockable
325
+ * from the first run. Returns a three-way result rather than a bare boolean so the
326
+ * caller can surface the CREATE's REAL cause (the original bug threw the stderr
327
+ * away, leaving `mutateLabel` to report the fresh-repo SYMPTOM `'<label>' not
328
+ * found` even on a permission-denied create):
329
+ *
330
+ * - **`{ok: true}`** — the label now exists (created here, or it already existed —
331
+ * `gh` reports `already exists`, which we treat as success).
332
+ * - **`{ok: false}`** (no `reason`) — `gh` is MISSING (binary absent): degrade to
333
+ * the caller's existing missing-`gh` handling (the never-hard-fail posture).
334
+ * - **`{ok: false, reason}`** — the create FAILED for a real reason (e.g. no
335
+ * permission): the caller surfaces `reason` (the create's REAL `gh` stderr).
336
+ *
337
+ * NEVER throws.
338
+ */
339
+ private createLabel;
340
+ /**
341
+ * Run `gh <args>` in `cwd`, returning the result, or `undefined` when `gh`
342
+ * cannot even be spawned (binary missing). Mirrors {@link GitHubProvider}'s
343
+ * `runGh` (the spawn-error catch keeps a missing `gh` a clean failure).
344
+ */
345
+ private runGh;
346
+ /** Parse a `gh --json` read, THROWING a clear error on any failure. */
347
+ private parseJson;
348
+ }
349
+ //# sourceMappingURL=issue-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"issue-provider.d.ts","sourceRoot":"","sources":["../src/issue-provider.ts"],"names":[],"mappings":"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"}