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,389 @@
1
+ import {NullHarness, substituteModel, type Harness} from './harness.js';
2
+ import {launchWithOptionalWatch} from './agent-launch.js';
3
+ import {boundaryLine} from './watch-session.js';
4
+ import {
5
+ parseReviewVerdict,
6
+ ReviewParseError,
7
+ reviewDisciplinePrompt,
8
+ verdictContractPrompt,
9
+ type ReviewFinding,
10
+ type ReviewVerdict,
11
+ } from './review-verdict.js';
12
+
13
+ export {
14
+ parseReviewVerdict,
15
+ ReviewParseError,
16
+ type ReviewFinding,
17
+ type ReviewVerdict,
18
+ } from './review-verdict.js';
19
+
20
+ /**
21
+ * **Gate 2 — the PR/code review gate** (GATES prd `work/prds/tasked/review.md`), the
22
+ * JUDGEMENT layer that rides ON TOP of the deterministic `verify` floor (ADR §8).
23
+ *
24
+ * After the green `verify` and BEFORE the done-move, `complete`/`do` invoke the
25
+ * `review` SKILL (`skills/review/SKILL.md`) as a **fresh-context** agent — its
26
+ * OWN harness launch, never the builder's session — to read the diff against the
27
+ * task it claims and EMIT a verdict. The verdict is then ROUTED by the caller
28
+ * (`complete.ts`): `approve` → done-move/commit/integrate; `block` → the SAME
29
+ * `needs-attention` machinery the red gate uses (never a merge).
30
+ *
31
+ * This module is the SEAM (the {@link ReviewGate} function type) + its
32
+ * production harness-backed implementation ({@link harnessReviewGate}). The seam
33
+ * is injectable exactly like `do`'s `dorfl`: tests stub a canned
34
+ * `approve`/`block` verdict (no real model); production launches the review agent
35
+ * through the EXISTING harness seam ({@link Harness}/`LaunchInput`), routing the
36
+ * `reviewModel` override through `LaunchInput.model` / {@link substituteModel} —
37
+ * NOT a new model/launch mechanism (the §13 model-routing intent).
38
+ *
39
+ * Determinism boundary (ADR §8), explicit: review is a JUDGEMENT gate, never a
40
+ * replacement for `verify`. `verify` stays the non-skippable model-free floor;
41
+ * review runs ON TOP, only when `review` resolves on.
42
+ */
43
+
44
+ /** What the review gate needs to launch a fresh-context review of one task. */
45
+ export interface ReviewGateInput {
46
+ /** The slug under review (the task the diff claims to deliver). */
47
+ slug: string;
48
+ /** The working clone/checkout the gate runs in (the prepared work branch). */
49
+ cwd: string;
50
+ /**
51
+ * The model the REVIEW agent runs on (`reviewModel`, de-correlated from the
52
+ * builder). `undefined` ⇒ no forced model (the harness's own default). Flows
53
+ * to the launch through `LaunchInput.model` / {@link substituteModel}.
54
+ */
55
+ reviewModel?: string;
56
+ /** Which review ROUND this is (1-based), for the revise↔review loop bound. */
57
+ round: number;
58
+ /**
59
+ * `--watch`: tail the REVIEW agent's pi session `.jsonl` live, the SAME way the
60
+ * build agent's is tailed (task `watch-review-session`). Threaded in from the
61
+ * caller's `CompleteOptions`/`DoOptions` so the production gate
62
+ * ({@link harnessReviewGate}) can route its launch through the shared
63
+ * {@link launchWithOptionalWatch} helper. OFF (the default) ⇒ the gate does a
64
+ * plain sync `launch`, byte-identical to before. A pure observer — it never
65
+ * changes the verdict.
66
+ */
67
+ watch?: boolean;
68
+ /** Where the tailed review lines are written (defaults to stderr). */
69
+ watchSink?: (line: string) => void;
70
+ /** Emit ANSI colour in the tailed review lines (the caller's TTY decision). */
71
+ color?: boolean;
72
+ /**
73
+ * The HOST-ONLY sessions root the review session FILE is generated under
74
+ * (resolved `config.sessionsDir`). `undefined` ⇒ pi's per-cwd default. Same
75
+ * bridge the build launch uses; the review launch passes a DISTINCT session id
76
+ * (`<slug>-review`) under it so its session never collides with the build's.
77
+ */
78
+ sessionsDir?: string;
79
+ /** Environment for the review-agent launch. */
80
+ env?: NodeJS.ProcessEnv;
81
+ }
82
+
83
+ /**
84
+ * The review-gate SEAM: run a fresh-context review of the slug's diff and return
85
+ * a parsed verdict. Injected by tests (a canned verdict, no real model);
86
+ * production uses {@link harnessReviewGate}. Mirrors `do`'s `DoDorfl`
87
+ * injectable-seam shape so the gate wiring is testable as pure logic.
88
+ */
89
+ export type ReviewGate = (input: ReviewGateInput) => Promise<ReviewVerdict>;
90
+
91
+ /**
92
+ * Render the review-agent PROMPT: instruct a fresh-context agent to apply the
93
+ * **review discipline** (`work/protocol/REVIEW-PROTOCOL.md`) to the code
94
+ * changes on this work branch against the task that specified them, and to
95
+ * EMIT a single unified `ReviewVerdict` JSON object (so
96
+ * {@link parseReviewVerdict} can read it). The discipline body (the lenses +
97
+ * the destination check) lives in `REVIEW-PROTOCOL.md` — NOT inlined here —
98
+ * and the JSON-emitted-shape contract comes from
99
+ * {@link verdictContractPrompt}, the ONE shared helper called by all four
100
+ * review-prompt builders (task `review-protocol-doc-and-shared-machinery`).
101
+ *
102
+ * This builder owns ONLY the PER-BUILDER framing: who you are (Gate 2 — PR/code
103
+ * review), what you are reviewing (code-vs-its-task, the diff on this work
104
+ * branch), and which optional verdict channels to fill (the `review` prose for
105
+ * the in-core PR-comment poster; an in-scope DECISION ratification hunt; a
106
+ * conceptual-coherence check). The shared discipline body and the verdict
107
+ * contract are NOT duplicated here.
108
+ */
109
+ export function buildReviewPrompt(slug: string): string {
110
+ return [
111
+ `You are a FRESH-CONTEXT reviewer (Gate 2 — PR/code review). Review the`,
112
+ `code changes on this work branch AGAINST the task that specified them`,
113
+ `(work/in-progress/${slug}.md or work/done/${slug}.md) and its source prd.`,
114
+ ``,
115
+ reviewDisciplinePrompt(),
116
+ ``,
117
+ `The acceptance gate (Gate 1 — build + tests + format) has ALREADY passed`,
118
+ `and is GREEN before you run (review runs only on a green gate), so ASSUME`,
119
+ `it is green and do NOT re-run build/tests/format — that is settled. You may`,
120
+ `still READ and reason about the tests for coverage/judgement; just do not`,
121
+ `re-execute the suite. Spend your budget on JUDGEMENT.`,
122
+ `Do NOT edit any files, run no git — you EMIT a verdict only.`,
123
+ ``,
124
+ `ALSO HUNT for IN-SCOPE DECISIONS THE TASK DID NOT SPECIFY — a non-obvious`,
125
+ `design choice the agent made on its own while building: a CROSS-TASK`,
126
+ `INTERACTION (a choice affecting another command/flag/task's behaviour), a new`,
127
+ `ERROR/REFUSAL, or a user-visible DEFAULT. The agent SHOULD have recorded these`,
128
+ `in a "## Decisions" block in its PR description — START from that block (ratify`,
129
+ `each entry) AND hunt for any it MISSED. Flag EACH such decision as a finding`,
130
+ `for the human to RATIFY — "non-blocking" by DEFAULT (the build proceeds; the`,
131
+ `human ratifies or reverses), escalating to "blocking" ONLY if the decision looks`,
132
+ `WRONG or is genuinely load-bearing-and-hard-to-reverse. An un-recorded in-scope`,
133
+ `decision is NOT itself a block — it is a ratification finding.`,
134
+ ``,
135
+ `ALSO CHECK CONCEPTUAL COHERENCE — does this diff fit the system's existing`,
136
+ `LANGUAGE? For each concept / flag / config key / status / verb it introduces or`,
137
+ `touches: (a) is the term used CONSISTENTLY with how it is already defined`,
138
+ `elsewhere (CONTEXT.md glossary + the ADRs + the code), not silently re-meaning`,
139
+ `an existing word or meaning two things in two places? (b) is the concept at the`,
140
+ `RIGHT LAYER (e.g. a policy gate on the autonomous-SELECTION step vs the explicit`,
141
+ `VERB someone typed)? (c) does it DUPLICATE/overlap an existing concept it should`,
142
+ `reuse or rename instead of forking? A mechanism that is correct in isolation but`,
143
+ `INCOHERENT against the system's language is a defect — BLOCK if it re-means or`,
144
+ `forks a load-bearing concept or sits at the wrong layer; otherwise flag it as a`,
145
+ `coherence finding.`,
146
+ ``,
147
+ verdictContractPrompt(),
148
+ ``,
149
+ `Fill the "review" field: a human-readable REVIEW that gets posted as a`,
150
+ `comment on the PR — write it FOR a human landing there, NOT as scratch`,
151
+ `thinking. LEAD with the verdict ("Approved" or "Blocked") and then give the`,
152
+ `lenses' reasoning and the destination check ("merged as written, do we reach`,
153
+ `the task/prd goal?"). Write it deliberately; do NOT narrate your process`,
154
+ `("Let me check…"). Keep it TIGHT: aim for a few short sentences and DO NOT`,
155
+ `exceed ~1500 characters — a long, multi-paragraph field is exactly what`,
156
+ `corrupts the JSON on large diffs; say less, not more. It is plain text inside`,
157
+ `the JSON string (escape any newline as \\n; better, keep it to ONE line). Do`,
158
+ `NOT fill "edits"/"edit"/`,
159
+ `"questions"/"uncertainTasks"/"decompositionUnclear" — those channels are`,
160
+ `for other review callers (the tasker loop / the lone-task review), not this`,
161
+ `code-review gate.`,
162
+ ].join('\n');
163
+ }
164
+
165
+ /** What a harness-backed review gate needs to launch the review agent. */
166
+ export interface HarnessReviewGateOptions {
167
+ /** The harness seam used to launch the fresh-context review agent. */
168
+ harness?: Harness;
169
+ /** The agent command the null/shell adapter shells out to (`{model}`-aware). */
170
+ agentCmd?: string;
171
+ /**
172
+ * Read the review agent's textual output for parsing. The harness now surfaces
173
+ * the agent's final assistant message in `LaunchResult.output` (task
174
+ * `harness-agent-output`, Option C) — the ANSWER channel, distinct from
175
+ * `detail` (the failure/`stderr` channel). Production reads `launched.output`;
176
+ * tests inject `readOutput` to stub a canned verdict string. The reader is
177
+ * passed the launch's `output` and returns the text to parse.
178
+ */
179
+ readOutput?: (output: string | undefined) => string;
180
+ }
181
+
182
+ /**
183
+ * The PRODUCTION review gate: launch the `review` SKILL as a fresh-context agent
184
+ * through the EXISTING harness seam, routing the `reviewModel` override via
185
+ * `LaunchInput.model` (the §13 model-routing intent — NOT a new mechanism), then
186
+ * parse the emitted `{verdict, findings}`.
187
+ *
188
+ * It is a SEPARATE harness launch (fresh context = not the builder's session) in
189
+ * the same checkout `cwd` (the prepared, gated work branch). The launch is fed
190
+ * {@link buildReviewPrompt}; the model flows through `LaunchInput.model`, which
191
+ * each adapter injects natively (pi: `--model`; null/shell: the `{model}`
192
+ * placeholder via {@link substituteModel}). auth/keys stay the harness's job.
193
+ */
194
+ export function harnessReviewGate(
195
+ options: HarnessReviewGateOptions = {},
196
+ ): ReviewGate {
197
+ const harness = options.harness ?? new NullHarness();
198
+ const readOutput = options.readOutput ?? ((output) => output ?? '');
199
+ return async (input: ReviewGateInput): Promise<ReviewVerdict> => {
200
+ // When watching, print the build→review BOUNDARY banner so the human knows
201
+ // the build stream ended and the review stream is beginning (reuses the watch
202
+ // formatting; task `watch-review-session`). A pure observability line.
203
+ if (input.watch === true) {
204
+ const sink =
205
+ input.watchSink ??
206
+ ((line: string) => process.stderr.write(`${line}\n`));
207
+ sink(
208
+ boundaryLine(
209
+ `review gate — reviewing ${input.slug}…`,
210
+ input.color ?? false,
211
+ ),
212
+ );
213
+ }
214
+ // The SAME shared launch helper the BUILD launch uses (task
215
+ // `watch-review-session`) — NOT a copy of the watch block. When `watch` is on
216
+ // (pi harness), it tails the review session `.jsonl` live; OFF, it does a
217
+ // plain sync `launch`, byte-identical to before. The review uses a DISTINCT
218
+ // session id (`<slug>-review`) so it never collides with the build session.
219
+ const launched = await launchWithOptionalWatch({
220
+ harness,
221
+ dir: input.cwd,
222
+ slug: input.slug,
223
+ command: options.agentCmd ?? '',
224
+ prompt: buildReviewPrompt(input.slug),
225
+ // The reviewModel override rides the EXISTING model-routing seam.
226
+ model: input.reviewModel,
227
+ sessionId: `${input.slug}-review`,
228
+ sessionsDir: input.sessionsDir,
229
+ watch: input.watch,
230
+ watchSink: input.watchSink,
231
+ color: input.color,
232
+ env: input.env,
233
+ });
234
+ if (!launched.ok) {
235
+ throw new ReviewParseError(
236
+ `review agent launch failed${launched.detail ? `: ${launched.detail}` : ''}`,
237
+ );
238
+ }
239
+ // Read the verdict from the agent's ANSWER channel (`output`), NOT `detail`
240
+ // (which is empty on success). An empty/absent output → parseReviewVerdict
241
+ // throws ReviewParseError → needs-attention (never a silent approve).
242
+ return parseReviewVerdict(readOutput(launched.output));
243
+ };
244
+ }
245
+
246
+ /**
247
+ * Render the TASK-SET acceptance-gate PROMPT — the task-path mirror of
248
+ * {@link buildReviewPrompt} (task `slice-acceptance-gate`). Instead of
249
+ * reviewing a code diff against ONE task, this instructs a FRESH-CONTEXT
250
+ * agent to review the WHOLE candidate SET of tasks produced for prd `slug`,
251
+ * using the **review discipline**'s SET-OF-TASKS lens (coherence / dependency
252
+ * graph / gaps + overlap / "if every task is built exactly as written, do we
253
+ * reach the system the prd describes, and is each task
254
+ * correct-if-implemented?"). It emits the SAME unified `ReviewVerdict` shape
255
+ * so {@link parseReviewVerdict} reads it identically.
256
+ *
257
+ * This is a TERMINAL, ONE-SHOT accept/reject gate (it runs BEFORE the task
258
+ * set integrates) — NOT the tasker IMPROVER loop (`tasker-review-loop.ts`),
259
+ * which EDITS tasks between passes. This prompt explicitly forbids editing.
260
+ *
261
+ * Per-builder framing only — the discipline body lives in
262
+ * `work/protocol/REVIEW-PROTOCOL.md`; the JSON shape comes from
263
+ * {@link verdictContractPrompt}.
264
+ */
265
+ export function buildTaskAcceptancePrompt(slug: string): string {
266
+ return [
267
+ `You are a FRESH-CONTEXT reviewer (the task-SET ACCEPTANCE GATE). Review`,
268
+ `the candidate tasks this tasking run produced for the prd "${slug}" — the`,
269
+ `new/changed candidate task files on this work branch — AGAINST their source`,
270
+ `prd (work/prds/ready/${slug}.md — the held prd stays in prds/ready/ while it is being`,
271
+ `tasked).`,
272
+ ``,
273
+ reviewDisciplinePrompt(),
274
+ ``,
275
+ `Review the WHOLE SET as a SET, not each task in isolation. The set-level`,
276
+ `framings the review discipline names:`,
277
+ ` - COHERENCE — do the tasks speak the prd's (and the system's) language`,
278
+ ` consistently; no task re-means or forks a concept another task/the prd`,
279
+ ` already owns?`,
280
+ ` - DEPENDENCY GRAPH — is the \`blockedBy\`/ordering graph sound (acyclic, the`,
281
+ ` keystone first, each task's stated blockers really land its premise)?`,
282
+ ` - GAPS + OVERLAP — does the set COVER the prd with no missing piece, and`,
283
+ ` without two tasks doing the same work or fighting over the same seam?`,
284
+ ` - CORRECT-IF-IMPLEMENTED — if EVERY task is built EXACTLY as written, do we`,
285
+ ` reach the system the prd describes, and is each task individually`,
286
+ ` correct-if-implemented (no task that compiles but builds the wrong thing)?`,
287
+ ``,
288
+ `This is a TERMINAL one-shot accept/reject gate: do NOT edit any task, do NOT`,
289
+ `run git — you EMIT a verdict only (the tasker improver loop, a SEPARATE`,
290
+ `concept, is what edits tasks; this gate does not).`,
291
+ ``,
292
+ verdictContractPrompt(),
293
+ ``,
294
+ `Fill the "review" field: a human-readable REVIEW of the SET — write it FOR a`,
295
+ `human deciding whether to land these tasks. LEAD with the verdict`,
296
+ `("Approved" or "Blocked") and then give the lenses' reasoning and the`,
297
+ `destination check. Do NOT fill the improver-loop channels ("edits",`,
298
+ `"uncertainTasks", "decompositionUnclear") — this is a terminal gate, not the`,
299
+ `loop.`,
300
+ ].join('\n');
301
+ }
302
+
303
+ /**
304
+ * The PRODUCTION task-SET acceptance gate (task `slice-acceptance-gate`): the
305
+ * task-path mirror of {@link harnessReviewGate}. It launches the `review` SKILL
306
+ * as a fresh-context agent through the SAME harness seam, routing the
307
+ * `reviewModel` override via `LaunchInput.model`, then parses the emitted
308
+ * `{verdict, findings}` — IDENTICAL machinery to the build gate, differing ONLY
309
+ * in the PROMPT ({@link buildTaskAcceptancePrompt}, a task-SET review) and in
310
+ * being driven ONE-SHOT by the caller (the tasking path passes
311
+ * `reviewMaxRounds: 1`).
312
+ *
313
+ * Reuses the `ReviewGate` seam type verbatim so `performIntegration`'s review
314
+ * block runs it with no shape change. The review uses a DISTINCT session id
315
+ * (`<slug>-task-acceptance`) so it never collides with the build review session
316
+ * OR the tasker improver loop's review session. NAME: `harnessTaskAcceptanceGate`
317
+ * (the ACCEPTANCE gate), DISTINCT from `tasker-review-loop.ts`'s
318
+ * `harnessTaskReviewGate` (the IMPROVER loop seam, which EDITS tasks) — the two
319
+ * are non-overlapping concepts (gate = terminal pass/fail; loop = review→edit).
320
+ */
321
+ export function harnessTaskAcceptanceGate(
322
+ options: HarnessReviewGateOptions = {},
323
+ ): ReviewGate {
324
+ const harness = options.harness ?? new NullHarness();
325
+ const readOutput = options.readOutput ?? ((output) => output ?? '');
326
+ return async (input: ReviewGateInput): Promise<ReviewVerdict> => {
327
+ if (input.watch === true) {
328
+ const sink =
329
+ input.watchSink ??
330
+ ((line: string) => process.stderr.write(`${line}\n`));
331
+ sink(
332
+ boundaryLine(
333
+ `task acceptance gate — reviewing ${input.slug}…`,
334
+ input.color ?? false,
335
+ ),
336
+ );
337
+ }
338
+ const launched = await launchWithOptionalWatch({
339
+ harness,
340
+ dir: input.cwd,
341
+ slug: input.slug,
342
+ command: options.agentCmd ?? '',
343
+ prompt: buildTaskAcceptancePrompt(input.slug),
344
+ model: input.reviewModel,
345
+ sessionId: `${input.slug}-task-acceptance`,
346
+ sessionsDir: input.sessionsDir,
347
+ watch: input.watch,
348
+ watchSink: input.watchSink,
349
+ color: input.color,
350
+ env: input.env,
351
+ });
352
+ if (!launched.ok) {
353
+ throw new ReviewParseError(
354
+ `task acceptance gate launch failed${launched.detail ? `: ${launched.detail}` : ''}`,
355
+ );
356
+ }
357
+ return parseReviewVerdict(readOutput(launched.output));
358
+ };
359
+ }
360
+
361
+ /**
362
+ * Format a review's BLOCKING findings into a needs-attention reason string —
363
+ * recorded in the item body when the gate routes a `block` (the SAME body-prose
364
+ * mechanism the red gate's reason uses; WORK-CONTRACT rule 3). Non-blocking
365
+ * findings are omitted from the reason (they do not block). On exhaustion of
366
+ * `reviewMaxRounds`, {@link reviewRoundsExhaustedReason} is used instead.
367
+ */
368
+ export function formatBlockReason(verdict: ReviewVerdict): string {
369
+ const blocking = verdict.findings.filter((f) => f.severity === 'blocking');
370
+ const lines = (blocking.length > 0 ? blocking : verdict.findings).map((f) => {
371
+ const ctx = f.context ? ` (${f.context})` : '';
372
+ return `- ${f.question}${ctx}`;
373
+ });
374
+ const head = 'PR/code review (Gate 2) blocked this work:';
375
+ return lines.length > 0 ? `${head}\n${lines.join('\n')}` : head;
376
+ }
377
+
378
+ /**
379
+ * The needs-attention reason when Gate 2 does not reach a UNANIMOUS approve —
380
+ * either a round returned a (terminal) block, or not all `reviewMaxRounds` rounds
381
+ * corroborated the approve.
382
+ */
383
+ export function reviewRoundsExhaustedReason(maxRounds: number): string {
384
+ return (
385
+ `PR/code review (Gate 2) did not reach a unanimous approve across ` +
386
+ `reviewMaxRounds=${maxRounds} round(s) (a block is terminal and is never ` +
387
+ `re-rolled); forcing needs-attention (never silently merged or looped).`
388
+ );
389
+ }