dorfl 0.0.0 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (619) hide show
  1. package/dist/advance-ci-template.d.ts +73 -0
  2. package/dist/advance-ci-template.d.ts.map +1 -0
  3. package/dist/advance-ci-template.js +104 -0
  4. package/dist/advance-ci-template.js.map +1 -0
  5. package/dist/advance-classify.d.ts +132 -0
  6. package/dist/advance-classify.d.ts.map +1 -0
  7. package/dist/advance-classify.js +120 -0
  8. package/dist/advance-classify.js.map +1 -0
  9. package/dist/advance-drivers.d.ts +182 -0
  10. package/dist/advance-drivers.d.ts.map +1 -0
  11. package/dist/advance-drivers.js +231 -0
  12. package/dist/advance-drivers.js.map +1 -0
  13. package/dist/advance-isolated.d.ts +156 -0
  14. package/dist/advance-isolated.d.ts.map +1 -0
  15. package/dist/advance-isolated.js +256 -0
  16. package/dist/advance-isolated.js.map +1 -0
  17. package/dist/advance-lifecycle-template.d.ts +107 -0
  18. package/dist/advance-lifecycle-template.d.ts.map +1 -0
  19. package/dist/advance-lifecycle-template.js +668 -0
  20. package/dist/advance-lifecycle-template.js.map +1 -0
  21. package/dist/advance-loop-driver.d.ts +325 -0
  22. package/dist/advance-loop-driver.d.ts.map +1 -0
  23. package/dist/advance-loop-driver.js +437 -0
  24. package/dist/advance-loop-driver.js.map +1 -0
  25. package/dist/advance-treeless-publish.d.ts +108 -0
  26. package/dist/advance-treeless-publish.d.ts.map +1 -0
  27. package/dist/advance-treeless-publish.js +71 -0
  28. package/dist/advance-treeless-publish.js.map +1 -0
  29. package/dist/advance.d.ts +340 -0
  30. package/dist/advance.d.ts.map +1 -0
  31. package/dist/advance.js +1122 -0
  32. package/dist/advance.js.map +1 -0
  33. package/dist/advancing-lock.d.ts +294 -0
  34. package/dist/advancing-lock.d.ts.map +1 -0
  35. package/dist/advancing-lock.js +594 -0
  36. package/dist/advancing-lock.js.map +1 -0
  37. package/dist/agent-launch.d.ts +79 -0
  38. package/dist/agent-launch.d.ts.map +1 -0
  39. package/dist/agent-launch.js +61 -0
  40. package/dist/agent-launch.js.map +1 -0
  41. package/dist/agent-stop.d.ts +149 -0
  42. package/dist/agent-stop.d.ts.map +1 -0
  43. package/dist/agent-stop.js +307 -0
  44. package/dist/agent-stop.js.map +1 -0
  45. package/dist/apply-decide.d.ts +127 -0
  46. package/dist/apply-decide.d.ts.map +1 -0
  47. package/dist/apply-decide.js +176 -0
  48. package/dist/apply-decide.js.map +1 -0
  49. package/dist/apply-merge-action.d.ts +206 -0
  50. package/dist/apply-merge-action.d.ts.map +1 -0
  51. package/dist/apply-merge-action.js +307 -0
  52. package/dist/apply-merge-action.js.map +1 -0
  53. package/dist/apply-persist.d.ts +174 -0
  54. package/dist/apply-persist.d.ts.map +1 -0
  55. package/dist/apply-persist.js +359 -0
  56. package/dist/apply-persist.js.map +1 -0
  57. package/dist/arbiter.d.ts +120 -0
  58. package/dist/arbiter.d.ts.map +1 -0
  59. package/dist/arbiter.js +255 -0
  60. package/dist/arbiter.js.map +1 -0
  61. package/dist/brand.d.ts +70 -0
  62. package/dist/brand.d.ts.map +1 -0
  63. package/dist/brand.js +84 -0
  64. package/dist/brand.js.map +1 -0
  65. package/dist/buildable-body.d.ts +132 -0
  66. package/dist/buildable-body.d.ts.map +1 -0
  67. package/dist/buildable-body.js +131 -0
  68. package/dist/buildable-body.js.map +1 -0
  69. package/dist/categorise.d.ts +66 -0
  70. package/dist/categorise.d.ts.map +1 -0
  71. package/dist/categorise.js +106 -0
  72. package/dist/categorise.js.map +1 -0
  73. package/dist/claim-cas.d.ts +117 -0
  74. package/dist/claim-cas.d.ts.map +1 -0
  75. package/dist/claim-cas.js +312 -0
  76. package/dist/claim-cas.js.map +1 -0
  77. package/dist/cli-spinner.d.ts +112 -0
  78. package/dist/cli-spinner.d.ts.map +1 -0
  79. package/dist/cli-spinner.js +157 -0
  80. package/dist/cli-spinner.js.map +1 -0
  81. package/dist/cli.d.ts +11 -0
  82. package/dist/cli.d.ts.map +1 -0
  83. package/dist/cli.js +3094 -0
  84. package/dist/cli.js.map +1 -0
  85. package/dist/close-job-template.d.ts +70 -0
  86. package/dist/close-job-template.d.ts.map +1 -0
  87. package/dist/close-job-template.js +180 -0
  88. package/dist/close-job-template.js.map +1 -0
  89. package/dist/close-job.d.ts +95 -0
  90. package/dist/close-job.d.ts.map +1 -0
  91. package/dist/close-job.js +226 -0
  92. package/dist/close-job.js.map +1 -0
  93. package/dist/complete.d.ts +361 -0
  94. package/dist/complete.d.ts.map +1 -0
  95. package/dist/complete.js +885 -0
  96. package/dist/complete.js.map +1 -0
  97. package/dist/concurrency.d.ts +68 -0
  98. package/dist/concurrency.d.ts.map +1 -0
  99. package/dist/concurrency.js +112 -0
  100. package/dist/concurrency.js.map +1 -0
  101. package/dist/config-override.d.ts +76 -0
  102. package/dist/config-override.d.ts.map +1 -0
  103. package/dist/config-override.js +50 -0
  104. package/dist/config-override.js.map +1 -0
  105. package/dist/config.d.ts +668 -0
  106. package/dist/config.d.ts.map +1 -0
  107. package/dist/config.js +241 -0
  108. package/dist/config.js.map +1 -0
  109. package/dist/continue-branch.d.ts +249 -0
  110. package/dist/continue-branch.d.ts.map +1 -0
  111. package/dist/continue-branch.js +389 -0
  112. package/dist/continue-branch.js.map +1 -0
  113. package/dist/cwd-section.d.ts +186 -0
  114. package/dist/cwd-section.d.ts.map +1 -0
  115. package/dist/cwd-section.js +209 -0
  116. package/dist/cwd-section.js.map +1 -0
  117. package/dist/decision-engine.d.ts +170 -0
  118. package/dist/decision-engine.d.ts.map +1 -0
  119. package/dist/decision-engine.js +136 -0
  120. package/dist/decision-engine.js.map +1 -0
  121. package/dist/detect.d.ts +17 -0
  122. package/dist/detect.d.ts.map +1 -0
  123. package/dist/detect.js +118 -0
  124. package/dist/detect.js.map +1 -0
  125. package/dist/do-autopick.d.ts +85 -0
  126. package/dist/do-autopick.d.ts.map +1 -0
  127. package/dist/do-autopick.js +112 -0
  128. package/dist/do-autopick.js.map +1 -0
  129. package/dist/do-config.d.ts +312 -0
  130. package/dist/do-config.d.ts.map +1 -0
  131. package/dist/do-config.js +358 -0
  132. package/dist/do-config.js.map +1 -0
  133. package/dist/do-remote-auto.d.ts +75 -0
  134. package/dist/do-remote-auto.d.ts.map +1 -0
  135. package/dist/do-remote-auto.js +111 -0
  136. package/dist/do-remote-auto.js.map +1 -0
  137. package/dist/do.d.ts +621 -0
  138. package/dist/do.d.ts.map +1 -0
  139. package/dist/do.js +1882 -0
  140. package/dist/do.js.map +1 -0
  141. package/dist/drop-source.d.ts +96 -0
  142. package/dist/drop-source.d.ts.map +1 -0
  143. package/dist/drop-source.js +91 -0
  144. package/dist/drop-source.js.map +1 -0
  145. package/dist/eligibility.d.ts +46 -0
  146. package/dist/eligibility.d.ts.map +1 -0
  147. package/dist/eligibility.js +34 -0
  148. package/dist/eligibility.js.map +1 -0
  149. package/dist/env-config.d.ts +51 -0
  150. package/dist/env-config.d.ts.map +1 -0
  151. package/dist/env-config.js +272 -0
  152. package/dist/env-config.js.map +1 -0
  153. package/dist/failure-cause.d.ts +70 -0
  154. package/dist/failure-cause.d.ts.map +1 -0
  155. package/dist/failure-cause.js +126 -0
  156. package/dist/failure-cause.js.map +1 -0
  157. package/dist/format.d.ts +43 -0
  158. package/dist/format.d.ts.map +1 -0
  159. package/dist/format.js +256 -0
  160. package/dist/format.js.map +1 -0
  161. package/dist/frontmatter.d.ts +215 -0
  162. package/dist/frontmatter.d.ts.map +1 -0
  163. package/dist/frontmatter.js +345 -0
  164. package/dist/frontmatter.js.map +1 -0
  165. package/dist/gate-readiness.d.ts +84 -0
  166. package/dist/gate-readiness.d.ts.map +1 -0
  167. package/dist/gate-readiness.js +103 -0
  168. package/dist/gate-readiness.js.map +1 -0
  169. package/dist/gc.d.ts +165 -0
  170. package/dist/gc.d.ts.map +1 -0
  171. package/dist/gc.js +313 -0
  172. package/dist/gc.js.map +1 -0
  173. package/dist/gh-failure.d.ts +42 -0
  174. package/dist/gh-failure.d.ts.map +1 -0
  175. package/dist/gh-failure.js +49 -0
  176. package/dist/gh-failure.js.map +1 -0
  177. package/dist/git.d.ts +75 -0
  178. package/dist/git.d.ts.map +1 -0
  179. package/dist/git.js +130 -0
  180. package/dist/git.js.map +1 -0
  181. package/dist/github.d.ts +187 -0
  182. package/dist/github.d.ts.map +1 -0
  183. package/dist/github.js +343 -0
  184. package/dist/github.js.map +1 -0
  185. package/dist/harness.d.ts +242 -0
  186. package/dist/harness.d.ts.map +1 -0
  187. package/dist/harness.js +157 -0
  188. package/dist/harness.js.map +1 -0
  189. package/dist/identity.d.ts +167 -0
  190. package/dist/identity.d.ts.map +1 -0
  191. package/dist/identity.js +231 -0
  192. package/dist/identity.js.map +1 -0
  193. package/dist/index.d.ts +147 -0
  194. package/dist/index.d.ts.map +1 -0
  195. package/dist/index.js +76 -0
  196. package/dist/index.js.map +1 -0
  197. package/dist/install-ci-branch-protection.d.ts +147 -0
  198. package/dist/install-ci-branch-protection.d.ts.map +1 -0
  199. package/dist/install-ci-branch-protection.js +166 -0
  200. package/dist/install-ci-branch-protection.js.map +1 -0
  201. package/dist/install-ci-capabilities/advance-lifecycle.d.ts +15 -0
  202. package/dist/install-ci-capabilities/advance-lifecycle.d.ts.map +1 -0
  203. package/dist/install-ci-capabilities/advance-lifecycle.js +28 -0
  204. package/dist/install-ci-capabilities/advance-lifecycle.js.map +1 -0
  205. package/dist/install-ci-capabilities/close-job.d.ts +13 -0
  206. package/dist/install-ci-capabilities/close-job.d.ts.map +1 -0
  207. package/dist/install-ci-capabilities/close-job.js +26 -0
  208. package/dist/install-ci-capabilities/close-job.js.map +1 -0
  209. package/dist/install-ci-capabilities/example-noop.d.ts +16 -0
  210. package/dist/install-ci-capabilities/example-noop.d.ts.map +1 -0
  211. package/dist/install-ci-capabilities/example-noop.js +23 -0
  212. package/dist/install-ci-capabilities/example-noop.js.map +1 -0
  213. package/dist/install-ci-capabilities/intake.d.ts +15 -0
  214. package/dist/install-ci-capabilities/intake.d.ts.map +1 -0
  215. package/dist/install-ci-capabilities/intake.js +28 -0
  216. package/dist/install-ci-capabilities/intake.js.map +1 -0
  217. package/dist/install-ci-capabilities/verify.d.ts +14 -0
  218. package/dist/install-ci-capabilities/verify.d.ts.map +1 -0
  219. package/dist/install-ci-capabilities/verify.js +27 -0
  220. package/dist/install-ci-capabilities/verify.js.map +1 -0
  221. package/dist/install-ci-core.d.ts +446 -0
  222. package/dist/install-ci-core.d.ts.map +1 -0
  223. package/dist/install-ci-core.js +760 -0
  224. package/dist/install-ci-core.js.map +1 -0
  225. package/dist/install-ci-github.d.ts +167 -0
  226. package/dist/install-ci-github.d.ts.map +1 -0
  227. package/dist/install-ci-github.js +315 -0
  228. package/dist/install-ci-github.js.map +1 -0
  229. package/dist/install-ci.d.ts +105 -0
  230. package/dist/install-ci.d.ts.map +1 -0
  231. package/dist/install-ci.js +363 -0
  232. package/dist/install-ci.js.map +1 -0
  233. package/dist/intake-event.d.ts +88 -0
  234. package/dist/intake-event.d.ts.map +1 -0
  235. package/dist/intake-event.js +66 -0
  236. package/dist/intake-event.js.map +1 -0
  237. package/dist/intake-marker.d.ts +95 -0
  238. package/dist/intake-marker.d.ts.map +1 -0
  239. package/dist/intake-marker.js +127 -0
  240. package/dist/intake-marker.js.map +1 -0
  241. package/dist/intake-triage.d.ts +48 -0
  242. package/dist/intake-triage.d.ts.map +1 -0
  243. package/dist/intake-triage.js +95 -0
  244. package/dist/intake-triage.js.map +1 -0
  245. package/dist/intake-trigger-template.d.ts +185 -0
  246. package/dist/intake-trigger-template.d.ts.map +1 -0
  247. package/dist/intake-trigger-template.js +449 -0
  248. package/dist/intake-trigger-template.js.map +1 -0
  249. package/dist/intake.d.ts +569 -0
  250. package/dist/intake.d.ts.map +1 -0
  251. package/dist/intake.js +1628 -0
  252. package/dist/intake.js.map +1 -0
  253. package/dist/integration-core.d.ts +539 -0
  254. package/dist/integration-core.d.ts.map +1 -0
  255. package/dist/integration-core.js +2195 -0
  256. package/dist/integration-core.js.map +1 -0
  257. package/dist/integrator.d.ts +343 -0
  258. package/dist/integrator.d.ts.map +1 -0
  259. package/dist/integrator.js +400 -0
  260. package/dist/integrator.js.map +1 -0
  261. package/dist/isolation.d.ts +219 -0
  262. package/dist/isolation.d.ts.map +1 -0
  263. package/dist/isolation.js +261 -0
  264. package/dist/isolation.js.map +1 -0
  265. package/dist/issue-provider.d.ts +349 -0
  266. package/dist/issue-provider.d.ts.map +1 -0
  267. package/dist/issue-provider.js +360 -0
  268. package/dist/issue-provider.js.map +1 -0
  269. package/dist/item-lock.d.ts +626 -0
  270. package/dist/item-lock.d.ts.map +1 -0
  271. package/dist/item-lock.js +1381 -0
  272. package/dist/item-lock.js.map +1 -0
  273. package/dist/item-path.d.ts +49 -0
  274. package/dist/item-path.d.ts.map +1 -0
  275. package/dist/item-path.js +66 -0
  276. package/dist/item-path.js.map +1 -0
  277. package/dist/ledger-lint.d.ts +129 -0
  278. package/dist/ledger-lint.d.ts.map +1 -0
  279. package/dist/ledger-lint.js +249 -0
  280. package/dist/ledger-lint.js.map +1 -0
  281. package/dist/ledger-read.d.ts +357 -0
  282. package/dist/ledger-read.d.ts.map +1 -0
  283. package/dist/ledger-read.js +442 -0
  284. package/dist/ledger-read.js.map +1 -0
  285. package/dist/ledger-write.d.ts +330 -0
  286. package/dist/ledger-write.d.ts.map +1 -0
  287. package/dist/ledger-write.js +411 -0
  288. package/dist/ledger-write.js.map +1 -0
  289. package/dist/lifecycle-gather.d.ts +30 -0
  290. package/dist/lifecycle-gather.d.ts.map +1 -0
  291. package/dist/lifecycle-gather.js +205 -0
  292. package/dist/lifecycle-gather.js.map +1 -0
  293. package/dist/lifecycle-pools.d.ts +180 -0
  294. package/dist/lifecycle-pools.d.ts.map +1 -0
  295. package/dist/lifecycle-pools.js +78 -0
  296. package/dist/lifecycle-pools.js.map +1 -0
  297. package/dist/merge-question-surfacer.d.ts +166 -0
  298. package/dist/merge-question-surfacer.d.ts.map +1 -0
  299. package/dist/merge-question-surfacer.js +297 -0
  300. package/dist/merge-question-surfacer.js.map +1 -0
  301. package/dist/mint-adr.d.ts +126 -0
  302. package/dist/mint-adr.d.ts.map +1 -0
  303. package/dist/mint-adr.js +257 -0
  304. package/dist/mint-adr.js.map +1 -0
  305. package/dist/mirror-pool-scan.d.ts +125 -0
  306. package/dist/mirror-pool-scan.d.ts.map +1 -0
  307. package/dist/mirror-pool-scan.js +104 -0
  308. package/dist/mirror-pool-scan.js.map +1 -0
  309. package/dist/needs-attention.d.ts +341 -0
  310. package/dist/needs-attention.d.ts.map +1 -0
  311. package/dist/needs-attention.js +900 -0
  312. package/dist/needs-attention.js.map +1 -0
  313. package/dist/orphan-sidecar.d.ts +79 -0
  314. package/dist/orphan-sidecar.d.ts.map +1 -0
  315. package/dist/orphan-sidecar.js +71 -0
  316. package/dist/orphan-sidecar.js.map +1 -0
  317. package/dist/output.d.ts +48 -0
  318. package/dist/output.d.ts.map +1 -0
  319. package/dist/output.js +66 -0
  320. package/dist/output.js.map +1 -0
  321. package/dist/pi-harness.d.ts +179 -0
  322. package/dist/pi-harness.d.ts.map +1 -0
  323. package/dist/pi-harness.js +342 -0
  324. package/dist/pi-harness.js.map +1 -0
  325. package/dist/placement.d.ts +99 -0
  326. package/dist/placement.d.ts.map +1 -0
  327. package/dist/placement.js +67 -0
  328. package/dist/placement.js.map +1 -0
  329. package/dist/prd-to-spec.d.ts +315 -0
  330. package/dist/prd-to-spec.d.ts.map +1 -0
  331. package/dist/prd-to-spec.js +684 -0
  332. package/dist/prd-to-spec.js.map +1 -0
  333. package/dist/prepare.d.ts +121 -0
  334. package/dist/prepare.d.ts.map +1 -0
  335. package/dist/prepare.js +140 -0
  336. package/dist/prepare.js.map +1 -0
  337. package/dist/prompt.d.ts +360 -0
  338. package/dist/prompt.d.ts.map +1 -0
  339. package/dist/prompt.js +499 -0
  340. package/dist/prompt.js.map +1 -0
  341. package/dist/protocol/ADR-FORMAT.md +47 -0
  342. package/dist/protocol/CLAIM-PROTOCOL.md +217 -0
  343. package/dist/protocol/REVIEW-PROTOCOL.md +119 -0
  344. package/dist/protocol/SURFACE-PROTOCOL.md +121 -0
  345. package/dist/protocol/TASKING-PROTOCOL.md +122 -0
  346. package/dist/protocol/WORK-CONTRACT.md +276 -0
  347. package/dist/protocol/spec-template.md +71 -0
  348. package/dist/protocol/task-template.md +65 -0
  349. package/dist/readiness.d.ts +66 -0
  350. package/dist/readiness.d.ts.map +1 -0
  351. package/dist/readiness.js +36 -0
  352. package/dist/readiness.js.map +1 -0
  353. package/dist/reap-branches.d.ts +102 -0
  354. package/dist/reap-branches.d.ts.map +1 -0
  355. package/dist/reap-branches.js +149 -0
  356. package/dist/reap-branches.js.map +1 -0
  357. package/dist/recover-isolated.d.ts +72 -0
  358. package/dist/recover-isolated.d.ts.map +1 -0
  359. package/dist/recover-isolated.js +188 -0
  360. package/dist/recover-isolated.js.map +1 -0
  361. package/dist/registry.d.ts +172 -0
  362. package/dist/registry.d.ts.map +1 -0
  363. package/dist/registry.js +296 -0
  364. package/dist/registry.js.map +1 -0
  365. package/dist/repo-config.d.ts +201 -0
  366. package/dist/repo-config.d.ts.map +1 -0
  367. package/dist/repo-config.js +414 -0
  368. package/dist/repo-config.js.map +1 -0
  369. package/dist/repo-key.d.ts +20 -0
  370. package/dist/repo-key.d.ts.map +1 -0
  371. package/dist/repo-key.js +68 -0
  372. package/dist/repo-key.js.map +1 -0
  373. package/dist/repo-mirror.d.ts +177 -0
  374. package/dist/repo-mirror.d.ts.map +1 -0
  375. package/dist/repo-mirror.js +271 -0
  376. package/dist/repo-mirror.js.map +1 -0
  377. package/dist/retry-backoff.d.ts +90 -0
  378. package/dist/retry-backoff.d.ts.map +1 -0
  379. package/dist/retry-backoff.js +98 -0
  380. package/dist/retry-backoff.js.map +1 -0
  381. package/dist/review-gate.d.ts +173 -0
  382. package/dist/review-gate.d.ts.map +1 -0
  383. package/dist/review-gate.js +261 -0
  384. package/dist/review-gate.js.map +1 -0
  385. package/dist/review-verdict.d.ts +149 -0
  386. package/dist/review-verdict.d.ts.map +1 -0
  387. package/dist/review-verdict.js +332 -0
  388. package/dist/review-verdict.js.map +1 -0
  389. package/dist/run.d.ts +221 -0
  390. package/dist/run.d.ts.map +1 -0
  391. package/dist/run.js +963 -0
  392. package/dist/run.js.map +1 -0
  393. package/dist/scan.d.ts +308 -0
  394. package/dist/scan.d.ts.map +1 -0
  395. package/dist/scan.js +374 -0
  396. package/dist/scan.js.map +1 -0
  397. package/dist/select-order.d.ts +75 -0
  398. package/dist/select-order.d.ts.map +1 -0
  399. package/dist/select-order.js +108 -0
  400. package/dist/select-order.js.map +1 -0
  401. package/dist/select-priority.d.ts +188 -0
  402. package/dist/select-priority.d.ts.map +1 -0
  403. package/dist/select-priority.js +80 -0
  404. package/dist/select-priority.js.map +1 -0
  405. package/dist/select.d.ts +25 -0
  406. package/dist/select.d.ts.map +1 -0
  407. package/dist/select.js +43 -0
  408. package/dist/select.js.map +1 -0
  409. package/dist/session-path.d.ts +36 -0
  410. package/dist/session-path.d.ts.map +1 -0
  411. package/dist/session-path.js +129 -0
  412. package/dist/session-path.js.map +1 -0
  413. package/dist/sidecar-apply.d.ts +83 -0
  414. package/dist/sidecar-apply.d.ts.map +1 -0
  415. package/dist/sidecar-apply.js +111 -0
  416. package/dist/sidecar-apply.js.map +1 -0
  417. package/dist/sidecar.d.ts +245 -0
  418. package/dist/sidecar.d.ts.map +1 -0
  419. package/dist/sidecar.js +481 -0
  420. package/dist/sidecar.js.map +1 -0
  421. package/dist/slug-namespace.d.ts +204 -0
  422. package/dist/slug-namespace.d.ts.map +1 -0
  423. package/dist/slug-namespace.js +229 -0
  424. package/dist/slug-namespace.js.map +1 -0
  425. package/dist/spec-complete.d.ts +44 -0
  426. package/dist/spec-complete.d.ts.map +1 -0
  427. package/dist/spec-complete.js +69 -0
  428. package/dist/spec-complete.js.map +1 -0
  429. package/dist/start.d.ts +97 -0
  430. package/dist/start.d.ts.map +1 -0
  431. package/dist/start.js +633 -0
  432. package/dist/start.js.map +1 -0
  433. package/dist/status.d.ts +199 -0
  434. package/dist/status.d.ts.map +1 -0
  435. package/dist/status.js +228 -0
  436. package/dist/status.js.map +1 -0
  437. package/dist/surface-gate.d.ts +162 -0
  438. package/dist/surface-gate.d.ts.map +1 -0
  439. package/dist/surface-gate.js +206 -0
  440. package/dist/surface-gate.js.map +1 -0
  441. package/dist/surface-persist.d.ts +86 -0
  442. package/dist/surface-persist.d.ts.map +1 -0
  443. package/dist/surface-persist.js +129 -0
  444. package/dist/surface-persist.js.map +1 -0
  445. package/dist/tasker-review-loop.d.ts +249 -0
  446. package/dist/tasker-review-loop.d.ts.map +1 -0
  447. package/dist/tasker-review-loop.js +369 -0
  448. package/dist/tasker-review-loop.js.map +1 -0
  449. package/dist/tasking-eligibility.d.ts +74 -0
  450. package/dist/tasking-eligibility.d.ts.map +1 -0
  451. package/dist/tasking-eligibility.js +52 -0
  452. package/dist/tasking-eligibility.js.map +1 -0
  453. package/dist/tasking-lock.d.ts +111 -0
  454. package/dist/tasking-lock.d.ts.map +1 -0
  455. package/dist/tasking-lock.js +256 -0
  456. package/dist/tasking-lock.js.map +1 -0
  457. package/dist/tasking.d.ts +275 -0
  458. package/dist/tasking.d.ts.map +1 -0
  459. package/dist/tasking.js +952 -0
  460. package/dist/tasking.js.map +1 -0
  461. package/dist/triage-gate.d.ts +127 -0
  462. package/dist/triage-gate.d.ts.map +1 -0
  463. package/dist/triage-gate.js +139 -0
  464. package/dist/triage-gate.js.map +1 -0
  465. package/dist/triage-persist.d.ts +163 -0
  466. package/dist/triage-persist.d.ts.map +1 -0
  467. package/dist/triage-persist.js +387 -0
  468. package/dist/triage-persist.js.map +1 -0
  469. package/dist/verdict-json.d.ts +32 -0
  470. package/dist/verdict-json.d.ts.map +1 -0
  471. package/dist/verdict-json.js +74 -0
  472. package/dist/verdict-json.js.map +1 -0
  473. package/dist/verify-workflow-template.d.ts +60 -0
  474. package/dist/verify-workflow-template.d.ts.map +1 -0
  475. package/dist/verify-workflow-template.js +126 -0
  476. package/dist/verify-workflow-template.js.map +1 -0
  477. package/dist/verify.d.ts +60 -0
  478. package/dist/verify.d.ts.map +1 -0
  479. package/dist/verify.js +62 -0
  480. package/dist/verify.js.map +1 -0
  481. package/dist/watch-session.d.ts +112 -0
  482. package/dist/watch-session.d.ts.map +1 -0
  483. package/dist/watch-session.js +347 -0
  484. package/dist/watch-session.js.map +1 -0
  485. package/dist/work-layout.d.ts +198 -0
  486. package/dist/work-layout.d.ts.map +1 -0
  487. package/dist/work-layout.js +217 -0
  488. package/dist/work-layout.js.map +1 -0
  489. package/dist/work-on.d.ts +154 -0
  490. package/dist/work-on.d.ts.map +1 -0
  491. package/dist/work-on.js +387 -0
  492. package/dist/work-on.js.map +1 -0
  493. package/dist/workspace.d.ts +224 -0
  494. package/dist/workspace.d.ts.map +1 -0
  495. package/dist/workspace.js +325 -0
  496. package/dist/workspace.js.map +1 -0
  497. package/package.json +46 -2
  498. package/src/advance-ci-template.ts +203 -0
  499. package/src/advance-classify.ts +197 -0
  500. package/src/advance-drivers.ts +414 -0
  501. package/src/advance-isolated.ts +432 -0
  502. package/src/advance-lifecycle-template.ts +791 -0
  503. package/src/advance-loop-driver.ts +745 -0
  504. package/src/advance-treeless-publish.ts +177 -0
  505. package/src/advance.ts +1564 -0
  506. package/src/advancing-lock.ts +988 -0
  507. package/src/agent-launch.ts +137 -0
  508. package/src/agent-stop.ts +361 -0
  509. package/src/apply-decide.ts +242 -0
  510. package/src/apply-merge-action.ts +502 -0
  511. package/src/apply-persist.ts +518 -0
  512. package/src/arbiter.ts +372 -0
  513. package/src/brand.ts +111 -0
  514. package/src/buildable-body.ts +196 -0
  515. package/src/categorise.ts +158 -0
  516. package/src/claim-cas.ts +513 -0
  517. package/src/cli-spinner.ts +225 -0
  518. package/src/cli.ts +4369 -0
  519. package/src/close-job-template.ts +236 -0
  520. package/src/close-job.ts +319 -0
  521. package/src/complete.ts +1379 -0
  522. package/src/concurrency.ts +151 -0
  523. package/src/config-override.ts +116 -0
  524. package/src/config.ts +883 -0
  525. package/src/continue-branch.ts +542 -0
  526. package/src/cwd-section.ts +392 -0
  527. package/src/decision-engine.ts +272 -0
  528. package/src/detect.ts +124 -0
  529. package/src/do-autopick.ts +223 -0
  530. package/src/do-config.ts +589 -0
  531. package/src/do-remote-auto.ts +197 -0
  532. package/src/do.ts +2623 -0
  533. package/src/drop-source.ts +194 -0
  534. package/src/eligibility.ts +79 -0
  535. package/src/env-config.ts +305 -0
  536. package/src/failure-cause.ts +142 -0
  537. package/src/format.ts +313 -0
  538. package/src/frontmatter.ts +485 -0
  539. package/src/gate-readiness.ts +147 -0
  540. package/src/gc.ts +510 -0
  541. package/src/gh-failure.ts +53 -0
  542. package/src/git.ts +186 -0
  543. package/src/github.ts +468 -0
  544. package/src/harness.ts +355 -0
  545. package/src/identity.ts +322 -0
  546. package/src/index.ts +785 -0
  547. package/src/install-ci-branch-protection.ts +255 -0
  548. package/src/install-ci-capabilities/advance-lifecycle.ts +34 -0
  549. package/src/install-ci-capabilities/close-job.ts +32 -0
  550. package/src/install-ci-capabilities/example-noop.ts +24 -0
  551. package/src/install-ci-capabilities/intake.ts +34 -0
  552. package/src/install-ci-capabilities/verify.ts +33 -0
  553. package/src/install-ci-core.ts +1088 -0
  554. package/src/install-ci-github.ts +376 -0
  555. package/src/install-ci.ts +552 -0
  556. package/src/intake-event.ts +102 -0
  557. package/src/intake-marker.ts +195 -0
  558. package/src/intake-triage.ts +138 -0
  559. package/src/intake-trigger-template.ts +591 -0
  560. package/src/intake.ts +2445 -0
  561. package/src/integration-core.ts +3065 -0
  562. package/src/integrator.ts +771 -0
  563. package/src/isolation.ts +484 -0
  564. package/src/issue-provider.ts +733 -0
  565. package/src/item-lock.ts +1858 -0
  566. package/src/item-path.ts +75 -0
  567. package/src/ledger-lint.ts +332 -0
  568. package/src/ledger-read.ts +924 -0
  569. package/src/ledger-write.ts +865 -0
  570. package/src/lifecycle-gather.ts +298 -0
  571. package/src/lifecycle-pools.ts +250 -0
  572. package/src/merge-question-surfacer.ts +496 -0
  573. package/src/mint-adr.ts +362 -0
  574. package/src/mirror-pool-scan.ts +240 -0
  575. package/src/needs-attention.ts +1506 -0
  576. package/src/orphan-sidecar.ts +150 -0
  577. package/src/output.ts +89 -0
  578. package/src/pi-harness.ts +403 -0
  579. package/src/placement.ts +131 -0
  580. package/src/prd-to-spec.ts +1023 -0
  581. package/src/prepare.ts +230 -0
  582. package/src/prompt.ts +760 -0
  583. package/src/readiness.ts +98 -0
  584. package/src/reap-branches.ts +278 -0
  585. package/src/recover-isolated.ts +276 -0
  586. package/src/registry.ts +475 -0
  587. package/src/repo-config.ts +550 -0
  588. package/src/repo-key.ts +74 -0
  589. package/src/repo-mirror.ts +367 -0
  590. package/src/retry-backoff.ts +130 -0
  591. package/src/review-gate.ts +389 -0
  592. package/src/review-verdict.ts +422 -0
  593. package/src/run.ts +1430 -0
  594. package/src/scan.ts +611 -0
  595. package/src/select-order.ts +143 -0
  596. package/src/select-priority.ts +266 -0
  597. package/src/select.ts +62 -0
  598. package/src/session-path.ts +153 -0
  599. package/src/sidecar-apply.ts +216 -0
  600. package/src/sidecar.ts +700 -0
  601. package/src/slug-namespace.ts +367 -0
  602. package/src/spec-complete.ts +118 -0
  603. package/src/start.ts +974 -0
  604. package/src/status.ts +441 -0
  605. package/src/surface-gate.ts +337 -0
  606. package/src/surface-persist.ts +241 -0
  607. package/src/tasker-review-loop.ts +671 -0
  608. package/src/tasking-eligibility.ts +114 -0
  609. package/src/tasking-lock.ts +416 -0
  610. package/src/tasking.ts +1438 -0
  611. package/src/triage-gate.ts +248 -0
  612. package/src/triage-persist.ts +570 -0
  613. package/src/verdict-json.ts +73 -0
  614. package/src/verify-workflow-template.ts +159 -0
  615. package/src/verify.ts +123 -0
  616. package/src/watch-session.ts +397 -0
  617. package/src/work-layout.ts +262 -0
  618. package/src/work-on.ts +660 -0
  619. package/src/workspace.ts +502 -0
package/dist/prompt.js ADDED
@@ -0,0 +1,499 @@
1
+ /**
2
+ * Builds the prompt the runner hands to `agentCmd`: a small CONSTANT wrapper
3
+ * (only the `<slug>` / source-prd path vary) around the claimed task's own
4
+ * `## Prompt` section. This is dual-use — the SAME assembly the autonomous
5
+ * runner feeds `agentCmd` and the human `dorfl prompt [<slug>]` command.
6
+ *
7
+ * The wrapper is NOT hardcoded here: it is read VERBATIM from the work-contract
8
+ * (`skills/setup/protocol/CLAIM-PROTOCOL.md` → "The prompt handed to the work agent"),
9
+ * so the emitted text can never silently diverge from the canonical contract.
10
+ * We only substitute the per-task placeholders (`<slug>`, `<prd>`).
11
+ *
12
+ * The wrapper draws the git boundary IN-BAND — the spawned agent does NO git ops
13
+ * on the repo (no commit/push, no moving `work/` files); the RUNNER owns every
14
+ * git-state transition (claim, done-move, work commit, integration). We state
15
+ * this in the prompt rather than relying on the host's global agent config (an
16
+ * `AGENTS.md`), because the runner is portable and cannot assume any host rule
17
+ * exists. See CLAIM-PROTOCOL.md → "The prompt handed to the work agent".
18
+ */
19
+ import { existsSync, readFileSync } from 'node:fs';
20
+ import { dirname, resolve } from 'node:path';
21
+ import { fileURLToPath } from 'node:url';
22
+ import { parseFrontmatter } from './frontmatter.js';
23
+ import { WORK_ROOT, workFolderName, workItemPath, workFolderRel, } from './work-layout.js';
24
+ import { run } from './git.js';
25
+ import { branchAheadOf } from './continue-branch.js';
26
+ import { isAncestor } from './gc.js';
27
+ import { extractReason } from './needs-attention.js';
28
+ /**
29
+ * Extract the body of the `## Prompt` section from a task's markdown. Returns
30
+ * the section text with the heading removed, leading `>` blockquote markers
31
+ * stripped, trimmed; or `undefined` when the task has no `## Prompt` heading.
32
+ */
33
+ export function extractPromptSection(content) {
34
+ const normalized = content.replace(/\r\n/g, '\n');
35
+ const lines = normalized.split('\n');
36
+ let start = -1;
37
+ let headingLevel = 0;
38
+ for (let i = 0; i < lines.length; i++) {
39
+ const match = /^(#{1,6})\s+(.*)$/.exec(lines[i]);
40
+ if (match && match[2].trim().toLowerCase() === 'prompt') {
41
+ start = i + 1;
42
+ headingLevel = match[1].length;
43
+ break;
44
+ }
45
+ }
46
+ if (start === -1) {
47
+ return undefined;
48
+ }
49
+ // Collect until the next heading of the same or higher level (fewer/equal #).
50
+ const body = [];
51
+ for (let i = start; i < lines.length; i++) {
52
+ const heading = /^(#{1,6})\s+/.exec(lines[i]);
53
+ if (heading && heading[1].length <= headingLevel) {
54
+ break;
55
+ }
56
+ body.push(lines[i]);
57
+ }
58
+ // Strip a single leading blockquote marker (`> ` or `>`) from each line.
59
+ const unquoted = body.map((line) => line.replace(/^>\s?/, ''));
60
+ const text = unquoted.join('\n').trim();
61
+ return text === '' ? undefined : text;
62
+ }
63
+ /**
64
+ * Locate one of the runtime-read protocol docs (`CLAIM-PROTOCOL.md`,
65
+ * `REVIEW-PROTOCOL.md`, …) the runner reads at RUNTIME. Resolution order,
66
+ * highest authority first:
67
+ *
68
+ * 1. `override` — explicit, for tests / unusual layouts (short-circuits).
69
+ * 2. `<cwd>/work/protocol/<name>` — the TARGET repo's adopted copy. `setup`
70
+ * copies the protocol docs verbatim into every repo's `work/protocol/`
71
+ * (ADR `methodology-and-skills.md` §5, the `work/protocol/` propagation),
72
+ * so a set-up repo carries the protocol VERSION it adopted; that copy
73
+ * wins.
74
+ * 3. `dist/protocol/<name>` — a copy VENDORED inside this package (by the
75
+ * `vendor-protocol` build step). The published-CLI fallback: an installed
76
+ * CLI has no sibling `skills/` tree, and the target repo may not be set
77
+ * up yet (no `work/protocol/`), so the package ships its own copy of the
78
+ * SET of runtime-read protocol docs.
79
+ * 4. the legacy monorepo-relative `skills/setup/protocol/<name>` walk —
80
+ * DEV-only, kept LAST (it only resolves inside this dev monorepo; an
81
+ * installed CLI's walks escape into the consumer's filesystem → ENOENT,
82
+ * which is why it cannot be the primary source).
83
+ *
84
+ * `cwd` is the target repo root (threaded from `renderPrompt`/`do`/`run`/the
85
+ * `render-prompt` CLI). When omitted, the target-repo step is simply skipped.
86
+ * `name` is the doc's BASENAME (e.g. `'CLAIM-PROTOCOL.md'`).
87
+ */
88
+ export function resolveProtocolDoc(name, cwd, override) {
89
+ if (override) {
90
+ return override;
91
+ }
92
+ const here = dirname(fileURLToPath(import.meta.url));
93
+ // here = .../packages/dorfl/{src,dist}.
94
+ const candidates = [];
95
+ // 2. The target repo's adopted copy (authoritative when present).
96
+ if (cwd) {
97
+ candidates.push(resolve(cwd, WORK_ROOT, workFolderName('protocol'), name));
98
+ }
99
+ // 3. The copy vendored inside this package (published-CLI fallback). From
100
+ // `src/` (tsx) `dist/` is a sibling; from `dist/` it is the dir itself.
101
+ candidates.push(resolve(here, '..', 'dist', 'protocol', name), resolve(here, 'protocol', name));
102
+ // 4. The legacy monorepo-relative `skills/setup/protocol/` walks — DEV-only,
103
+ // LAST. The docs are OWNED by the `setup` skill (`skills/setup/protocol/`).
104
+ candidates.push(resolve(here, '..', '..', '..', 'skills', 'setup', 'protocol', name), resolve(here, '..', '..', '..', '..', 'skills', 'setup', 'protocol', name));
105
+ for (const candidate of candidates) {
106
+ if (existsSync(candidate)) {
107
+ return candidate;
108
+ }
109
+ }
110
+ return candidates[0];
111
+ }
112
+ /**
113
+ * Pull the canonical wrapper TEMPLATE out of CLAIM-PROTOCOL.md: the first fenced
114
+ * code block following the "The prompt handed to the work agent" heading. The
115
+ * returned text still contains the `<slug>` / `<prd>` placeholders verbatim — it
116
+ * is the single source of truth for the wrapper.
117
+ */
118
+ export function extractCanonicalWrapperTemplate(protocol) {
119
+ const normalized = protocol.replace(/\r\n/g, '\n');
120
+ const lines = normalized.split('\n');
121
+ // Find the "prompt handed to the work agent" heading (any level).
122
+ let headingIndex = -1;
123
+ for (let i = 0; i < lines.length; i++) {
124
+ const match = /^#{1,6}\s+(.*)$/.exec(lines[i]);
125
+ if (match && /prompt handed to the work agent/i.test(match[1])) {
126
+ headingIndex = i;
127
+ break;
128
+ }
129
+ }
130
+ if (headingIndex === -1) {
131
+ throw new Error('CLAIM-PROTOCOL.md: could not find the "prompt handed to the work agent" section');
132
+ }
133
+ // Find the opening fence of the first code block after the heading.
134
+ let open = -1;
135
+ for (let i = headingIndex + 1; i < lines.length; i++) {
136
+ if (/^```/.test(lines[i])) {
137
+ open = i;
138
+ break;
139
+ }
140
+ // A new heading before any fence means the wrapper block is missing.
141
+ if (/^#{1,6}\s+/.test(lines[i])) {
142
+ break;
143
+ }
144
+ }
145
+ if (open === -1) {
146
+ throw new Error('CLAIM-PROTOCOL.md: no fenced wrapper block under the work-agent-prompt section');
147
+ }
148
+ let close = -1;
149
+ for (let i = open + 1; i < lines.length; i++) {
150
+ if (/^```/.test(lines[i])) {
151
+ close = i;
152
+ break;
153
+ }
154
+ }
155
+ if (close === -1) {
156
+ throw new Error('CLAIM-PROTOCOL.md: unterminated wrapper code block');
157
+ }
158
+ return lines
159
+ .slice(open + 1, close)
160
+ .join('\n')
161
+ .trim();
162
+ }
163
+ /**
164
+ * The single-pass extractor-post-step for the `promptGuidance` NUDGE namespace.
165
+ * Resolves every `<!-- if promptGuidance.<member> --> … <!-- else --> … <!-- /if -->`
166
+ * conditional fragment in the canonical wrapper template ("Option A" — single
167
+ * wrapper, conditional fragments — see the ADR + this task's recorded decision):
168
+ * when the named nudge member resolves TRUE the IF-branch text is kept and the
169
+ * markers + ELSE-branch are stripped; when FALSE the ELSE-branch text is kept
170
+ * and the markers + IF-branch are stripped. The markers' own lines (and the
171
+ * newlines that terminate them) are consumed too, so the OFF-path output is
172
+ * BYTE-IDENTICAL to the pre-marker template — the guard the prompt-assembly
173
+ * byte-identity test pins.
174
+ *
175
+ * Pure string transform; runs AFTER `extractCanonicalWrapperTemplate` (a pure
176
+ * verbatim extractor stays a pure verbatim extractor) and BEFORE the
177
+ * `<slug>`/`<prd>` substitution.
178
+ */
179
+ export function applyPromptGuidance(template, nudges = {}) {
180
+ const values = {
181
+ testFirst: nudges.testFirst === true,
182
+ };
183
+ return template.replace(/<!-- if promptGuidance\.(\w+) -->\n([\s\S]*?)\n<!-- else -->\n([\s\S]*?)\n<!-- \/if -->/g, (_match, member, ifBranch, elseBranch) => {
184
+ const on = values[member] === true;
185
+ return on ? ifBranch : elseBranch;
186
+ });
187
+ }
188
+ /**
189
+ * The constant wrapper, parameterised only by the task slug, its source prd
190
+ * slug, and (optionally) the resolved {@link PromptGuidance} nudges. Read
191
+ * verbatim from the work-contract and substituted — never a divergent hardcoded
192
+ * copy. `prd` may be `undefined` when the task has no `prd:` field. When
193
+ * `promptGuidance` is omitted (or every member resolves false) the output is
194
+ * BYTE-IDENTICAL to today's wrapper (the ELSE-branch of every conditional is
195
+ * the historic text).
196
+ */
197
+ export function wrapper(slug, prd, options = {}) {
198
+ const protocolPath = resolveProtocolDoc('CLAIM-PROTOCOL.md', options.cwd, options.protocolPath);
199
+ const protocol = readFileSync(protocolPath, 'utf8');
200
+ const template = extractCanonicalWrapperTemplate(protocol);
201
+ const resolved = applyPromptGuidance(template, options.promptGuidance);
202
+ return resolved.replace(/<slug>/g, slug).replace(/<prd>/g, prd ?? '<prd>');
203
+ }
204
+ /** The heading prefix the requeue handoff notes are appended under. */
205
+ const REQUEUE_HEADING_PREFIX = '## Requeue';
206
+ /**
207
+ * Extract the accumulated requeue handoff notes from an item's BODY: the prose
208
+ * under each `## Requeue YYYY-MM-DD` heading (append-only; written by
209
+ * `requeue -m "<note>"` in `needs-attention.ts`). Returns one trimmed string per
210
+ * section in file order (oldest first, newest last); `[]` when none are present.
211
+ */
212
+ export function extractRequeueNotes(content) {
213
+ const normalized = content.replace(/\r\n/g, '\n');
214
+ const lines = normalized.split('\n');
215
+ const notes = [];
216
+ for (let i = 0; i < lines.length; i++) {
217
+ if (!lines[i].startsWith(REQUEUE_HEADING_PREFIX)) {
218
+ continue;
219
+ }
220
+ // Collect the prose under this heading until the next `## ` heading or EOF.
221
+ const collected = [];
222
+ for (let j = i + 1; j < lines.length; j++) {
223
+ if (/^##\s/.test(lines[j])) {
224
+ break;
225
+ }
226
+ collected.push(lines[j]);
227
+ }
228
+ const note = collected.join('\n').trim();
229
+ if (note !== '') {
230
+ notes.push(note);
231
+ }
232
+ }
233
+ return notes;
234
+ }
235
+ /**
236
+ * Resolve the CONTINUE context for `slug`, runner-side, REUSING the SAME
237
+ * continue-detection the `requeue-continue-and-reset` claim/start path uses
238
+ * ({@link branchAheadOf}) — never a parallel re-derivation. Returns a
239
+ * {@link ContinueContext} iff the arbiter holds a `work/<slug>` ref AHEAD of
240
+ * main (the prior attempt's kept work); otherwise `undefined` (fresh-start: the
241
+ * common case, a first attempt or a `requeue --reset` that deleted the branch).
242
+ *
243
+ * The reason + handoff note(s) are read from the item BODY (the ledger file the
244
+ * caller already resolved), so they survive the requeue → tasks-ready (the pool) → claim gap
245
+ * and cross machines. The ref names match the two onboarding paths:
246
+ * - in-place clone: branchRef=`<arbiter>/work/<slug>`, mainRef=`<arbiter>/main`
247
+ * - bare hub mirror: branchRef=`work/<slug>`, mainRef=`main`
248
+ */
249
+ export function resolveContinueContext(options) {
250
+ if (!branchAheadOf(options.cwd, options.branchRef, options.mainRef, options.env)) {
251
+ return undefined;
252
+ }
253
+ return {
254
+ arbiter: options.arbiter,
255
+ // Strip any `<arbiter>/` remote prefix off the ref to recover the bare
256
+ // `work/<type>-<slug>` branch name the prose points at.
257
+ branch: stripRemotePrefix(options.branchRef, options.arbiter),
258
+ reason: extractReason(options.content),
259
+ requeueNotes: extractRequeueNotes(options.content),
260
+ };
261
+ }
262
+ /**
263
+ * Recover the bare `work/<type>-<slug>` branch from a resolved ref: drop a
264
+ * leading `<arbiter>/` (the in-place remote-tracking form `<arbiter>/work/...`);
265
+ * the bare hub-mirror form (`work/...`) is returned as-is.
266
+ */
267
+ function stripRemotePrefix(branchRef, arbiter) {
268
+ const prefix = `${arbiter}/`;
269
+ return branchRef.startsWith(prefix)
270
+ ? branchRef.slice(prefix.length)
271
+ : branchRef;
272
+ }
273
+ /**
274
+ * Build the CONTINUE block injected ahead of the task prompt in continue-mode.
275
+ * Pure text: a "you are continuing" framing + a pointer to review the prior diff
276
+ * vs `<arbiter>/main` + the needs-attention reason + the requeue handoff note(s)
277
+ * (read from the item body). Never emitted in fresh-start mode.
278
+ */
279
+ export function buildContinueBlock(slug, ctx) {
280
+ const lines = [];
281
+ lines.push('## You are CONTINUING prior work on this task');
282
+ lines.push('');
283
+ lines.push(`This is NOT a fresh start. A prior attempt at '${slug}' was requeued, and ` +
284
+ `you have landed on its \`${ctx.branch}\` branch — it ALREADY carries that ` +
285
+ 'work. Before you implement anything, REVIEW what the prior attempt did ' +
286
+ `(\`git diff ${ctx.arbiter}/main...${ctx.branch}\`) and BUILD ON what is ` +
287
+ 'good — do NOT blindly restart or undo it.');
288
+ if (ctx.reason.trim() !== '') {
289
+ lines.push('');
290
+ lines.push('### Why the prior attempt stalled (needs-attention reason)');
291
+ lines.push('');
292
+ lines.push(ctx.reason.trim());
293
+ }
294
+ if (ctx.requeueNotes.length > 0) {
295
+ lines.push('');
296
+ lines.push('### Handoff note(s) from the requeue');
297
+ lines.push('');
298
+ for (const note of ctx.requeueNotes) {
299
+ lines.push(note.trim());
300
+ lines.push('');
301
+ }
302
+ }
303
+ return lines.join('\n').trim();
304
+ }
305
+ /**
306
+ * Build the full prompt: the canonical wrapper for `slug` (with its source prd
307
+ * substituted) followed by the task's own `## Prompt` body, appended verbatim.
308
+ *
309
+ * In CONTINUE-mode (a {@link ContinueContext} is supplied), a CONTINUE block is
310
+ * injected between the wrapper and the task prompt — telling the agent it is
311
+ * continuing, where to find the prior diff, why it stalled, and the human's
312
+ * handoff note(s). In FRESH-START mode (no context, the common case) the output
313
+ * is BYTE-IDENTICAL to the canonical wrapper + task prompt — no CONTINUE block.
314
+ */
315
+ export function buildAgentPrompt(slug, prd, taskPrompt, options = {}) {
316
+ const head = wrapper(slug, prd, options);
317
+ if (options.continueContext) {
318
+ const block = buildContinueBlock(slug, options.continueContext);
319
+ return `${head}\n\n${block}\n\n${taskPrompt}\n`;
320
+ }
321
+ return `${head}\n\n${taskPrompt}\n`;
322
+ }
323
+ /** Raised for usage/environment problems (no slug, no task file, no prompt). */
324
+ export class PromptError extends Error {
325
+ }
326
+ /**
327
+ * True iff the work-branch tip (`gate.branchRef`) is genuinely STRANDED: it
328
+ * resolves to a commit that is NOT reachable on the arbiter main
329
+ * (`gate.mainRef`). REUSES {@link isAncestor} (`gc.ts`) — the one reachability
330
+ * predicate — never a second one. When the branch ref does not resolve (no prior
331
+ * attempt's branch on the arbiter) the task is NOT treated as a stranded
332
+ * continue (false → `done/` stays unreachable, the safe direction). Read-only.
333
+ */
334
+ function isStrandedDoneTip(gate) {
335
+ const tip = run('git', ['rev-parse', '--verify', '--quiet', `${gate.branchRef}^{commit}`], gate.cwd, { env: gate.env }).stdout.trim();
336
+ if (tip === '') {
337
+ return false; // no work-branch tip on the arbiter → not a stranded continue
338
+ }
339
+ // STRANDED ⇔ the tip is NOT an ancestor of the arbiter main (not integrated).
340
+ // REACHABLE (an ancestor) ⇒ COMPLETE ⇒ do NOT re-onboard.
341
+ return !isAncestor(gate.cwd, tip, gate.mainRef, gate.env);
342
+ }
343
+ /**
344
+ * Resolve a task's file: prefer `work/in-progress/<slug>.md`, fall back to
345
+ * `work/tasks/ready/<slug>.md` (the pool). Returns the parsed prd + extracted
346
+ * `## Prompt` body. Throws {@link PromptError} when neither file exists or it has
347
+ * no prompt body.
348
+ *
349
+ * On a CONTINUE (a {@link ContinueResolutionGate} is supplied), `work/done/` is
350
+ * added to the resolution AFTER `in-progress`/`tasks-ready` — but ONLY when the
351
+ * gate proves the work-branch tip is STRANDED (committed-but-not-on-the-arbiter).
352
+ * A genuinely-COMPLETE `done/` task (tip reachable on `<arbiter>/main`) is NEVER
353
+ * resolved, so onboard cannot resurrect a finished task (defect 3 / story 5).
354
+ * The `in-progress`/`tasks-ready` resolution is UNCHANGED in every case; `done/`
355
+ * is
356
+ * the only addition, and it is gated. With no gate (a fresh claim) the behaviour
357
+ * is byte-identical to the original `['in-progress','tasks-ready']`-only resolution.
358
+ *
359
+ * `--allow-backlog` (prd `do-allow-backlog-drive-staged-tasks-without-promotion`):
360
+ * when {@link ResolveTaskOptions.allowBacklog} is set, `tasks-backlog` (the staging
361
+ * folder) is appended at the LOWEST priority — after `tasks-ready`, so a slug
362
+ * present in BOTH the pool and staging resolves to the READY copy (the same-slug
363
+ * precedence the prd's decision 5 fixes). Default off ⇒ byte-identical to today
364
+ * (no autonomous path sets it; staging stays unreachable to `run`/auto-pick).
365
+ */
366
+ export function resolveTask(cwd, slug, continueGate, options) {
367
+ const order = ['in-progress', 'tasks-ready'];
368
+ // `--allow-backlog`: append `tasks-backlog` at LOWEST priority (after
369
+ // `tasks-ready`), so the READY copy wins a same-slug tie and a staged task is
370
+ // only reachable behind the explicit flag. Default off ⇒ unchanged.
371
+ if (options?.allowBacklog === true) {
372
+ order.push('tasks-backlog');
373
+ }
374
+ // `done/` is appended ONLY on a continue whose work-branch tip is STRANDED —
375
+ // the tip-vs-arbiter gate (NEVER folder name alone). A complete task (tip on
376
+ // the arbiter) leaves the order untouched, so onboard never re-runs it.
377
+ if (continueGate && isStrandedDoneTip(continueGate)) {
378
+ order.push('done');
379
+ }
380
+ for (const folder of order) {
381
+ const path = workItemPath(cwd, folder, slug);
382
+ if (!existsSync(path)) {
383
+ continue;
384
+ }
385
+ const content = readFileSync(path, 'utf8');
386
+ const taskPrompt = extractPromptSection(content);
387
+ if (taskPrompt === undefined) {
388
+ throw new PromptError(`task '${slug}' (${workFolderRel(folder)}/${slug}.md) has no '## Prompt' section`);
389
+ }
390
+ const fm = parseFrontmatter(content);
391
+ // MIGRATE step (prd `prd-to-spec-vocabulary-cutover-and-migration-command`):
392
+ // read the parent-spec pointer off the new `fm.spec` field (populated beside
393
+ // `fm.prd` by the expand task). The `ResolvedTask.prd` field name is left
394
+ // unchanged (a struct-field rename is out of this batch's scope).
395
+ return { slug, path, folder, prd: fm.spec, taskPrompt };
396
+ }
397
+ const searched = order.map((f) => `${workFolderRel(f)}/`).join(', ');
398
+ throw new PromptError(`no task '${slug}' found in ${searched}`);
399
+ }
400
+ /** If HEAD is a `work/<slug>` branch, return `<slug>`; else `''`. */
401
+ export function inferSlugFromBranch(cwd, env) {
402
+ const sym = run('git', ['symbolic-ref', '--quiet', '--short', 'HEAD'], cwd, { env });
403
+ if (sym.status !== 0) {
404
+ return '';
405
+ }
406
+ const match = /^work\/(.+)$/.exec(sym.stdout.trim());
407
+ return match ? match[1] : '';
408
+ }
409
+ /**
410
+ * The full `dorfl prompt [<slug>]` rendering: resolve the slug (explicit,
411
+ * else inferred from a `work/<slug>` branch), resolve its task file
412
+ * (in-progress over `tasks-ready`, the pool), and assemble the canonical wrapper
413
+ * + the task's
414
+ * `## Prompt`. Pure with respect to the repo (read-only) — the caller writes the
415
+ * result to stdout.
416
+ */
417
+ /**
418
+ * Resolve the EFFECTIVE `promptGuidance` for an item by walking the precedence
419
+ * chain (highest → lowest): the per-task frontmatter override, the per-prd
420
+ * frontmatter override (only when the task carries a `prd:`), then the
421
+ * already-resolved repo policy. Each nudge member resolves independently — a
422
+ * task's `promptGuidance.testFirst` override never bleeds into a sibling
423
+ * member — mirroring the `humanOnly`/`autoBuild` per-item override shape.
424
+ *
425
+ * A task may carry the override even when it has NO `prd:` (a self-contained
426
+ * chore), by symmetry with `humanOnly` at the item level; `specFrontmatter`
427
+ * is then simply absent and the chain reads task ⇒ repo.
428
+ */
429
+ export function resolveItemPromptGuidance(repoResolved, taskFrontmatter, specFrontmatter) {
430
+ const taskTestFirst = taskFrontmatter?.promptGuidance.testFirst;
431
+ const specTestFirst = specFrontmatter?.promptGuidance.testFirst;
432
+ return {
433
+ testFirst: taskTestFirst ?? specTestFirst ?? repoResolved.testFirst,
434
+ };
435
+ }
436
+ /**
437
+ * Locate a prd's file on disk: prefer `work/prds/ready/<slug>.md` (the
438
+ * auto-slice pool), then fall back to `work/prds/tasked/<slug>.md` (tasked,
439
+ * resting). Returns `undefined` when neither exists — the caller treats that
440
+ * as "no prd-level override available" and the precedence chain falls
441
+ * through to the repo policy (a missing prd is NOT an error at this seam;
442
+ * the per-item override is OPTIONAL by design).
443
+ */
444
+ export function findSpecPath(cwd, specSlug) {
445
+ const candidates = [
446
+ workItemPath(cwd, 'specs-ready', specSlug),
447
+ workItemPath(cwd, 'specs-tasked', specSlug),
448
+ ];
449
+ for (const path of candidates) {
450
+ if (existsSync(path)) {
451
+ return path;
452
+ }
453
+ }
454
+ return undefined;
455
+ }
456
+ /**
457
+ * The convenience seam every caller of {@link buildAgentPrompt} reuses to
458
+ * resolve the per-item override: load the task frontmatter from its file +
459
+ * (when the task carries `prd:`) the prd frontmatter, then walk
460
+ * {@link resolveItemPromptGuidance}. Pure-ish (reads at most two files);
461
+ * returns the repo policy verbatim when neither item layer overrides anything.
462
+ */
463
+ export function resolvePromptGuidanceForItem(options) {
464
+ const taskFm = parseFrontmatter(options.taskContent);
465
+ let specFm;
466
+ // MIGRATE step (prd `prd-to-spec-vocabulary-cutover-and-migration-command`):
467
+ // read the parent-spec pointer off `fm.spec` (populated beside `fm.prd`).
468
+ if (taskFm.spec !== undefined) {
469
+ const specPath = findSpecPath(options.cwd, taskFm.spec);
470
+ if (specPath !== undefined) {
471
+ specFm = parseFrontmatter(readFileSync(specPath, 'utf8'));
472
+ }
473
+ }
474
+ return resolveItemPromptGuidance(options.repoResolved, taskFm, specFm);
475
+ }
476
+ export function renderPrompt(options) {
477
+ const slug = options.slug || inferSlugFromBranch(options.cwd, options.env);
478
+ if (!slug) {
479
+ throw new PromptError('missing <slug> and the current branch is not a work/<slug> branch. ' +
480
+ 'usage: dorfl prompt [<slug>]');
481
+ }
482
+ const task = resolveTask(options.cwd, slug);
483
+ // Per-item override layer: a task or prd may pin `promptGuidance.testFirst`
484
+ // in its frontmatter, superseding the resolved repo policy for THIS item.
485
+ // We ALWAYS walk the resolver (even when no repo policy was threaded), so a
486
+ // task can opt IN to the strengthened nudge even on a repo whose default is
487
+ // off (and vice-versa) — the per-item override is the escape hatch.
488
+ const resolvedGuidance = resolvePromptGuidanceForItem({
489
+ cwd: options.cwd,
490
+ repoResolved: { testFirst: options.promptGuidance?.testFirst === true },
491
+ taskContent: readFileSync(task.path, 'utf8'),
492
+ });
493
+ return buildAgentPrompt(task.slug, task.prd, task.taskPrompt, {
494
+ protocolPath: options.protocolPath,
495
+ cwd: options.cwd,
496
+ promptGuidance: resolvedGuidance,
497
+ });
498
+ }
499
+ //# sourceMappingURL=prompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../src/prompt.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ # ADR Format
2
+
3
+ ADRs live in `docs/adr/` and use sequential numbering: `0001-slug.md`, `0002-slug.md`, etc.
4
+
5
+ Create the `docs/adr/` directory lazily — only when the first ADR is needed.
6
+
7
+ ## Template
8
+
9
+ ```md
10
+ # {Short title of the decision}
11
+
12
+ {1-3 sentences: what's the context, what did we decide, and why.}
13
+ ```
14
+
15
+ That's it. An ADR can be a single paragraph. The value is in recording _that_ a decision was made and _why_ — not in filling out sections.
16
+
17
+ ## Optional sections
18
+
19
+ Only include these when they add genuine value. Most ADRs won't need them.
20
+
21
+ - **Status** frontmatter (`proposed | accepted | deprecated | superseded by ADR-NNNN`) — useful when decisions are revisited
22
+ - **Considered Options** — only when the rejected alternatives are worth remembering
23
+ - **Consequences** — only when non-obvious downstream effects need to be called out
24
+
25
+ ## Numbering
26
+
27
+ Scan `docs/adr/` for the highest existing number and increment by one.
28
+
29
+ ## When to offer an ADR
30
+
31
+ All three of these must be true:
32
+
33
+ 1. **Hard to reverse** — the cost of changing your mind later is meaningful
34
+ 2. **Surprising without context** — a future reader will look at the code and wonder "why on earth did they do it this way?"
35
+ 3. **The result of a real trade-off** — there were genuine alternatives and you picked one for specific reasons
36
+
37
+ If a decision is easy to reverse, skip it — you'll just reverse it. If it's not surprising, nobody will wonder why. If there was no real alternative, there's nothing to record beyond "we did the obvious thing."
38
+
39
+ ### What qualifies
40
+
41
+ - **Architectural shape.** "We're using a monorepo." "The write model is event-sourced, the read model is projected into Postgres."
42
+ - **Integration patterns between contexts.** "Ordering and Billing communicate via domain events, not synchronous HTTP."
43
+ - **Technology choices that carry lock-in.** Database, message bus, auth provider, deployment target. Not every library — just the ones that would take a quarter to swap out.
44
+ - **Boundary and scope decisions.** "Customer data is owned by the Customer context; other contexts reference it by ID only." The explicit no-s are as valuable as the yes-s.
45
+ - **Deliberate deviations from the obvious path.** "We're using manual SQL instead of an ORM because X." Anything where a reasonable reader would assume the opposite. These stop the next engineer from "fixing" something that was deliberate.
46
+ - **Constraints not visible in the code.** "We can't use AWS because of compliance requirements." "Response times must be under 200ms because of the partner API contract."
47
+ - **Rejected alternatives when the rejection is non-obvious.** If you considered GraphQL and picked REST for subtle reasons, record it — otherwise someone will suggest GraphQL again in six months.