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,195 @@
1
+ import {brand} from './brand.js';
2
+ import type {IssueComment} from './issue-provider.js';
3
+
4
+ /**
5
+ * **The intake MARKER** (task `intake-self-awareness-resumption-tracking`, prd
6
+ * `issue-intake` US #2/#10): the ONE primitive the deterministic pre-decision
7
+ * TRIAGE GATE is built on. A machine-readable HIDDEN HTML comment intake stamps on
8
+ * EVERY comment it posts, recording a neutral FACT about what intake did:
9
+ *
10
+ * - `<!-- dorfl:intake kind=ask seen=412,418 -->`
11
+ * - `<!-- dorfl:intake kind=bounced seen=503 -->`
12
+ * - `<!-- dorfl:intake kind=created slug=<slug> seen=601,602 -->`
13
+ *
14
+ * (Namespace `${brand.base}:intake` is built from {@link brand} exactly like
15
+ * `PROCESSING_LOCK_LABEL`, so a rebrand updates it automatically.)
16
+ *
17
+ * It is the SOLE recovery signal — no sidecar, no cursor, no bot-identity. Intake
18
+ * recognises ITS OWN comments by the marker alone (provider-portable, survives
19
+ * posting under a human's token). Hidden HTML comments render as NOTHING on GitHub
20
+ * but are present in the raw markdown each comment's `body` carries — so the triage
21
+ * parses the marker straight out of {@link IssueComment.body}.
22
+ *
23
+ * What the marker records (DECIDED 2026-06-10):
24
+ *
25
+ * - **`kind`** \u2014 a NEUTRAL fact (`ask` / `bounced` / `created`). Whether a kind is
26
+ * TERMINAL is the TRIAGE's interpretation, NEVER data in the marker (no `terminal`
27
+ * field): if a kind's terminal-ness ever changes that is a triage change and old
28
+ * markers stay valid.
29
+ * - **`slug`** \u2014 present only on `kind=created` (which task/prd intake produced).
30
+ * - **`seen=<id>,\u2026`** \u2014 the per-run DELTA of HUMAN comment ids intake READ this run
31
+ * (EXCLUDING intake's own marker-comments AND any human id already in a prior
32
+ * marker's `seen=`). Ids, not a count, because a count cannot distinguish "a new
33
+ * comment appeared" from "an old one was deleted"; ids do both via set arithmetic.
34
+ * The full `seenSet` is the UNION of every marker's `seen=` (the CHAIN model).
35
+ *
36
+ * The grammar is SHARED so the dependent completion-comment task just stamps a
37
+ * `created` marker via {@link stampIntakeMarker}, which the triage's
38
+ * `already-terminal` branch then consumes.
39
+ */
40
+
41
+ /** The neutral KIND a marker records \u2014 a fact about what intake did (NOT terminal-ness). */
42
+ export type IntakeMarkerKind = 'ask' | 'bounced' | 'created';
43
+
44
+ /** A parsed intake marker \u2014 `kind` + the human ids it `seen=` + an optional `slug`. */
45
+ export interface IntakeMarker {
46
+ /** What intake did (a neutral fact; the TRIAGE owns terminal-ness, not this). */
47
+ kind: IntakeMarkerKind;
48
+ /** The HUMAN comment ids intake READ this run (the per-run delta; may be empty). */
49
+ seen: string[];
50
+ /** The created task/prd slug \u2014 present only on `kind=created`. */
51
+ slug?: string;
52
+ }
53
+
54
+ /** The marker's brand-derived namespace token (today `dorfl:intake`). */
55
+ const MARKER_NS = `${brand.base}:intake`;
56
+
57
+ /**
58
+ * Matches ONE intake marker anywhere in a comment body (the hidden HTML comment).
59
+ * Captures the inner attribute run (everything after the namespace, before `-->`)
60
+ * so {@link parseIntakeMarker} can pull `kind` / `slug` / `seen` out of it. Global
61
+ * so a body that (pathologically) carries more than one is fully scanned, though
62
+ * intake stamps exactly one per comment.
63
+ */
64
+ const MARKER_RE = new RegExp(
65
+ `<!--\\s*${escapeRegExp(MARKER_NS)}\\s+([^>]*?)\\s*-->`,
66
+ 'g',
67
+ );
68
+
69
+ /**
70
+ * STAMP the intake marker onto a comment body intake is about to post (the SHARED
71
+ * producer for ALL of ask / bounced / created). Appends the hidden HTML comment
72
+ * AFTER the human-readable text, separated by a blank line, so the rendered comment
73
+ * is just the text (the marker is invisible) yet the raw markdown carries the
74
+ * marker for the triage to recover.
75
+ *
76
+ * `seen` is the per-run DELTA of human comment ids (computed by
77
+ * {@link computeSeenDelta}); it is emitted even when empty (`seen=`) so the grammar
78
+ * is uniform and the parser never has to special-case its absence. `slug` is
79
+ * emitted only for `kind=created`.
80
+ */
81
+ export function stampIntakeMarker(
82
+ body: string,
83
+ marker: {kind: IntakeMarkerKind; seen: string[]; slug?: string},
84
+ ): string {
85
+ const parts = [`kind=${marker.kind}`];
86
+ if (
87
+ marker.kind === 'created' &&
88
+ marker.slug !== undefined &&
89
+ marker.slug !== ''
90
+ ) {
91
+ parts.push(`slug=${marker.slug}`);
92
+ }
93
+ parts.push(`seen=${marker.seen.join(',')}`);
94
+ const tag = `<!-- ${MARKER_NS} ${parts.join(' ')} -->`;
95
+ const text = body.replace(/\s+$/, '');
96
+ return text === '' ? tag : `${text}\n\n${tag}`;
97
+ }
98
+
99
+ /**
100
+ * Parse the FIRST intake marker out of a comment body (the SHARED consumer). Returns
101
+ * `undefined` when the body carries no intake marker \u2014 i.e. it is a HUMAN comment
102
+ * (the triage ranges its unseen-check over exactly these). A malformed marker (no
103
+ * `kind`, or an unknown `kind`) is treated as ABSENT rather than throwing: an
104
+ * unparseable hidden comment must never make the triage crash or misclassify a
105
+ * human comment as intake's.
106
+ */
107
+ export function parseIntakeMarker(body: string): IntakeMarker | undefined {
108
+ MARKER_RE.lastIndex = 0;
109
+ const match = MARKER_RE.exec(body);
110
+ if (match === null) {
111
+ return undefined;
112
+ }
113
+ const attrs = match[1];
114
+ const kind = readAttr(attrs, 'kind');
115
+ if (kind !== 'ask' && kind !== 'bounced' && kind !== 'created') {
116
+ return undefined;
117
+ }
118
+ const slug = readAttr(attrs, 'slug');
119
+ const seenRaw = readAttr(attrs, 'seen');
120
+ const seen =
121
+ seenRaw === undefined || seenRaw === ''
122
+ ? []
123
+ : seenRaw.split(',').filter((id) => id !== '');
124
+ return {
125
+ kind,
126
+ seen,
127
+ ...(slug !== undefined && slug !== '' ? {slug} : {}),
128
+ };
129
+ }
130
+
131
+ /** True iff the comment carries an intake marker \u2014 i.e. it is INTAKE's OWN comment. */
132
+ export function isIntakeComment(comment: IssueComment): boolean {
133
+ return parseIntakeMarker(comment.body) !== undefined;
134
+ }
135
+
136
+ /**
137
+ * Compute the per-run `seen=` DELTA for a marker intake is about to stamp: the ids
138
+ * of the HUMAN comments in the thread as intake READ it, EXCLUDING (a) intake's own
139
+ * marker-comments (identified by carrying a marker) and (b) any human id ALREADY
140
+ * recorded in a prior intake marker's `seen=` (the chain model keeps each marker's
141
+ * `seen=` a bounded per-run delta; the union reconstructs the whole). Order follows
142
+ * `listComments`' oldest-first; ids with no value (a provider that omitted one) are
143
+ * dropped \u2014 the triage only reasons over ids it actually has.
144
+ */
145
+ export function computeSeenDelta(comments: IssueComment[]): string[] {
146
+ const already = seenSetFrom(comments);
147
+ const delta: string[] = [];
148
+ for (const comment of comments) {
149
+ if (isIntakeComment(comment)) {
150
+ continue; // intake's own marker-comment \u2014 NEVER recorded in `seen=`.
151
+ }
152
+ const id = comment.id;
153
+ if (id === undefined || id === '') {
154
+ continue;
155
+ }
156
+ if (already.has(id) || delta.includes(id)) {
157
+ continue;
158
+ }
159
+ delta.push(id);
160
+ }
161
+ return delta;
162
+ }
163
+
164
+ /**
165
+ * Build the full `seenSet` for the TRIAGE: the UNION of every intake marker's
166
+ * `seen=` id-list in the thread (the chain model \u2014 each marker stores a per-run
167
+ * delta, the union reconstructs the complete set of human comments intake has EVER
168
+ * read). Ranges over intake's OWN comments (the ones carrying a marker); a human
169
+ * comment never carries a `seen=`.
170
+ */
171
+ export function seenSetFrom(comments: IssueComment[]): Set<string> {
172
+ const set = new Set<string>();
173
+ for (const comment of comments) {
174
+ const marker = parseIntakeMarker(comment.body);
175
+ if (marker === undefined) {
176
+ continue;
177
+ }
178
+ for (const id of marker.seen) {
179
+ set.add(id);
180
+ }
181
+ }
182
+ return set;
183
+ }
184
+
185
+ /** Read a `key=value` attribute out of a marker's inner attribute run. */
186
+ function readAttr(attrs: string, key: string): string | undefined {
187
+ const re = new RegExp(`(?:^|\\s)${escapeRegExp(key)}=([^\\s]*)`);
188
+ const match = re.exec(attrs);
189
+ return match === null ? undefined : match[1];
190
+ }
191
+
192
+ /** Escape a literal for embedding in a RegExp (the brand base + attribute keys). */
193
+ function escapeRegExp(literal: string): string {
194
+ return literal.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
195
+ }
@@ -0,0 +1,138 @@
1
+ import type {IssueComment} from './issue-provider.js';
2
+ import {
3
+ parseIntakeMarker,
4
+ seenSetFrom,
5
+ type IntakeMarkerKind,
6
+ } from './intake-marker.js';
7
+
8
+ /**
9
+ * **The intake TRIAGE GATE** (task `intake-self-awareness-resumption-tracking`, prd
10
+ * `issue-intake` US #2/#10): a DETERMINISTIC pre-decision gate that runs UNDER the
11
+ * processing lock, BEFORE the decision prompt, deciding whether intake should run
12
+ * the prompt at all. Built ENTIRELY on the thread MARKER (no sidecar, no cursor, no
13
+ * bot-identity), it makes intake skip when it has the last word or the issue is
14
+ * already terminal, and run the prompt ONLY on genuine new human input \u2014 which is
15
+ * also the COMPLETE fix for the self-trigger hazard (intake's own freshly-posted
16
+ * comment carries a marker, so it is excluded from the human-comment check by
17
+ * construction).
18
+ *
19
+ * The TERMINAL/non-terminal split lives HERE, never in the marker: `ask` is
20
+ * non-terminal, `bounced`/`created` are terminal. Re-classifying a kind later is a
21
+ * change to {@link TERMINAL_KINDS} only \u2014 old markers stay valid.
22
+ *
23
+ * This is PURE logic over the stubbed thread (no seam, no git, no `gh`), the same
24
+ * discipline `intake-event.ts` / `failure-cause.ts` keep.
25
+ */
26
+
27
+ /** The kinds the TRIAGE treats as TERMINAL (the issue was already transformed). */
28
+ const TERMINAL_KINDS: ReadonlySet<IntakeMarkerKind> = new Set<IntakeMarkerKind>(
29
+ ['bounced', 'created'],
30
+ );
31
+
32
+ /**
33
+ * The TRIAGE outcome. `proceed` runs the prompt (optionally carrying enrichment
34
+ * flags for the prompt); `no-new-input` / `already-terminal` are SKIPS (siblings of
35
+ * `locked` \u2014 "ran, deliberately did nothing", both exit 0, observable by CI + a
36
+ * human).
37
+ */
38
+ export type IntakeTriageDecision =
39
+ | {
40
+ action: 'proceed';
41
+ /**
42
+ * Enrichment for the prompt on the PROCEED path. `predatingIds` are HUMAN
43
+ * comment ids that RACED IN (read-then-someone-commented-then-posted) \u2014 they
44
+ * PRE-DATE intake's last turn, so the prompt treats them as context for a
45
+ * PRIOR state, not necessarily a fresh answer. `deletedSeenCount` is the count
46
+ * of previously-SEEN human comments that have since been DELETED (computed
47
+ * ONLY on this raced proceed path \u2014 deletion is enrichment, never a wake
48
+ * trigger), flagged so the prompt does not assume its prior premises still
49
+ * hold. Both are absent/zero on the ordinary fresh/mid-ask proceed.
50
+ */
51
+ predatingIds: string[];
52
+ deletedSeenCount: number;
53
+ }
54
+ | {action: 'skip'; outcome: 'no-new-input' | 'already-terminal'};
55
+
56
+ /**
57
+ * Run the TRIAGE over the issue's full comment thread (oldest-first, as
58
+ * `listComments` returns it). The canonical branches (prd `issue-intake`):
59
+ *
60
+ * 1. **Last comment is INTAKE's** (carries a marker). Build `seenSet` = the UNION of
61
+ * every intake marker's `seen=` id-list, then:
62
+ * - **PRIMARY** \u2014 is there an UNSEEN HUMAN comment (one WITHOUT a marker whose id
63
+ * is NOT in `seenSet`)? \u2192 PROCEED. The raced comment(s) are flagged as
64
+ * PRE-DATING intake's last turn. ALSO compute `seenSet \u2212 currentHumanThreadIds`;
65
+ * a non-empty difference means a previously-seen human comment was DELETED \u2014
66
+ * flagged (count only) so the prompt reassesses. (Deletion is ENRICHMENT on this
67
+ * proceed path only, NEVER a standalone wake trigger.)
68
+ * - **otherwise** (every human comment is in `seenSet`) \u2192 SKIP `no-new-input`. No
69
+ * deletion hunt here \u2014 a deletion with no new comment is not a turn worth waking
70
+ * for. This is what makes intake SELF-TRIGGERING a no-op by construction.
71
+ * 2. **Last comment is someone ELSE's** (no marker on the last comment):
72
+ * - the thread already contains a TERMINAL marker (`bounced`/`created`) \u2192 SKIP
73
+ * `already-terminal` (the issue was already transformed).
74
+ * - otherwise (no terminal marker \u2014 fresh issue, or mid-`ask` loop) \u2192 PROCEED.
75
+ * 3. **Empty thread** \u2192 PROCEED (a fresh issue with no comments).
76
+ */
77
+ export function triageIntake(comments: IssueComment[]): IntakeTriageDecision {
78
+ if (comments.length === 0) {
79
+ // A fresh issue with no thread \u2014 there is genuine new material (the body).
80
+ return {action: 'proceed', predatingIds: [], deletedSeenCount: 0};
81
+ }
82
+
83
+ const last = comments[comments.length - 1];
84
+ const lastIsIntake = parseIntakeMarker(last.body) !== undefined;
85
+
86
+ if (lastIsIntake) {
87
+ // BRANCH 1 \u2014 intake has the last word. Did a human comment race in unseen?
88
+ const seenSet = seenSetFrom(comments);
89
+ const humanComments = comments.filter(
90
+ (c) => parseIntakeMarker(c.body) === undefined,
91
+ );
92
+ const currentHumanIds = new Set(
93
+ humanComments
94
+ .map((c) => c.id)
95
+ .filter((id): id is string => id !== undefined && id !== ''),
96
+ );
97
+ // PRIMARY: HUMAN comments (markerless) whose id is NOT in seenSet \u2014 raced in.
98
+ const predatingIds = humanComments
99
+ .map((c) => c.id)
100
+ .filter(
101
+ (id): id is string => id !== undefined && id !== '' && !seenSet.has(id),
102
+ );
103
+ if (predatingIds.length > 0) {
104
+ // PROCEED on the raced comment(s). DELETION ENRICHMENT (only here): a
105
+ // previously-seen human id no longer present in the thread was deleted.
106
+ let deletedSeenCount = 0;
107
+ for (const id of seenSet) {
108
+ if (!currentHumanIds.has(id)) {
109
+ deletedSeenCount += 1;
110
+ }
111
+ }
112
+ return {action: 'proceed', predatingIds, deletedSeenCount};
113
+ }
114
+ // Every human comment is in seenSet \u2014 intake has the last word and saw
115
+ // everything. SKIP (no deletion hunt: a bare deletion is not a wake trigger).
116
+ return {action: 'skip', outcome: 'no-new-input'};
117
+ }
118
+
119
+ // BRANCH 2 \u2014 the last comment is a human's. A terminal marker earlier in the
120
+ // thread means the issue was already transformed; a later human comment does not
121
+ // re-open it (a future feature may; for now, skip).
122
+ if (hasTerminalMarker(comments)) {
123
+ return {action: 'skip', outcome: 'already-terminal'};
124
+ }
125
+ // Fresh issue, or a human reply mid-`ask` loop \u2014 PROCEED to the decision.
126
+ return {action: 'proceed', predatingIds: [], deletedSeenCount: 0};
127
+ }
128
+
129
+ /** True iff any comment in the thread carries a TERMINAL intake marker. */
130
+ function hasTerminalMarker(comments: IssueComment[]): boolean {
131
+ for (const comment of comments) {
132
+ const marker = parseIntakeMarker(comment.body);
133
+ if (marker !== undefined && TERMINAL_KINDS.has(marker.kind)) {
134
+ return true;
135
+ }
136
+ }
137
+ return false;
138
+ }