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,668 @@
1
+ import { type Identity } from './identity.js';
2
+ import { type SelectionOrderConfig } from './select-order.js';
3
+ /**
4
+ * How a completed item is integrated back to the arbiter's `main`. `merge` lands
5
+ * it directly on `main` (ff/rebase + push); `propose` pushes a branch + requests
6
+ * review. (`propose` is provider-neutral; the old `pr` name was GitHub jargon.
7
+ * See ADR §6.)
8
+ */
9
+ export type IntegrationMode = 'propose' | 'merge';
10
+ /**
11
+ * **Per-repo TASK-PLACEMENT default** (prd
12
+ * `staging-pool-position-gate-and-trust-model`, task
13
+ * `runner-deterministic-slice-placement-policy-and-precedence`, governing ADR
14
+ * `placement-is-runner-deterministic-humanonly-is-agent-judgement`). Which
15
+ * folder the runner lands the tasker's emitted task files in BY DEFAULT —
16
+ * `'pre-backlog'` (staging — durable + readable but NOT in the agent-eligible
17
+ * POOL; a runner/human promotion is needed to make an item claimable; the on-disk
18
+ * folder for this value is `work/tasks/backlog/`) or `'ready'` (the agent-eligible
19
+ * POOL — the trusted fast-path landing, on-disk `work/tasks/ready/`). The pool
20
+ * value was renamed `'backlog'` → `'todo'` → `'ready'` (ADR
21
+ * `rename-task-pool-folder-todo-to-ready`, a CLEAN BREAK matching the on-disk
22
+ * folder `tasks/ready/` and the spec-side `'ready'` pool spelling). The runner-deterministic
23
+ * placement RESOLVER (`src/placement.ts`) layers on top: `explicit operator flag
24
+ * > untrusted-origin ⇒ pre-backlog > tasksLandIn default > built-in
25
+ * (pre-backlog)`. An untrusted-origin tasker output is FORCED to staging even in
26
+ * a `'ready'` repo (the positional analogue of the existing
27
+ * `untrusted-origin-forces-build-propose` rule).
28
+ */
29
+ export type TasksLandIn = 'pre-backlog' | 'ready';
30
+ /**
31
+ * **Per-repo PRD-PLACEMENT default** (prd
32
+ * `staging-pool-position-gate-and-trust-model`, task
33
+ * `pre-prd-staging-pool-split-and-untrusted-prd-placement`, governing ADR
34
+ * `placement-is-runner-deterministic-humanonly-is-agent-judgement`). Which
35
+ * folder the runner lands `intake`-authored prd files in BY DEFAULT —
36
+ * `'pre-proposed'` (staging — durable + readable but NOT in the auto-tasking
37
+ * POOL; a runner/human promotion is needed to make the prd auto-taskable; the
38
+ * on-disk folder for this value is `work/prds/proposed/`) or `'ready'` (the
39
+ * auto-tasking POOL — the trusted fast-path landing, on-disk
40
+ * `work/prds/ready/`). The same runner-deterministic placement RESOLVER
41
+ * (`src/placement.ts`) layers on top:
42
+ * `explicit operator flag > untrusted-origin ⇒ pre-proposed > specsLandIn
43
+ * default > built-in (pre-proposed)`. An untrusted-origin intake spec is FORCED
44
+ * to staging even in a `'ready'` repo (the positional analogue of the existing
45
+ * `untrusted-origin-forces-build-propose` rule). The PRD twin of
46
+ * {@link TasksLandIn}; the SAME shape, the SAME precedence chain. The value
47
+ * spellings mirror the live prd folders (`prds/proposed/` staging,
48
+ * `prds/ready/` pool), exactly as {@link TasksLandIn} mirrors the task folders.
49
+ */
50
+ export type SpecsLandIn = 'pre-proposed' | 'ready';
51
+ /**
52
+ * The observation-triage gate (ADR `ci-config-policy-and-gate-family` §2): a
53
+ * 3-state ENUM governing the observation INBOX (raw captured signal). It REPLACES
54
+ * the old `autoTriage` boolean, whose name read like "is triage on?" but only
55
+ * gated the auto-DISPOSITION exception (the resolved naming trap). The three
56
+ * states say what they gate:
57
+ * - `off` (default): the triage rung is dropped from the auto-pick SELECTION —
58
+ * observations are left untouched (the NEW state the boolean could not
59
+ * express, "leave my observations alone entirely");
60
+ * - `ask`: the observation pool IS selected; surface a promote/keep/delete
61
+ * question for every untriaged observation (the old `autoTriage:false`);
62
+ * - `auto`: the observation pool is selected; auto-dispose ONLY the no-question
63
+ * cases (exact-duplicate ⇒ recommend delete; unambiguous map) and surface a
64
+ * question for the rest (the old `autoTriage:true`). It still NEVER
65
+ * auto-deletes a non-duplicate or auto-promotes a judgement call.
66
+ */
67
+ export type ObservationTriage = 'off' | 'ask' | 'auto';
68
+ /**
69
+ * **The `mergeQuestions` gate axis** — the 3-state member of the question-
70
+ * surfacing gate family that governs the MERGE-QUESTION surfacer (prd
71
+ * `land-time-reverify-and-parallel-merge-ceiling` Story 17 / task
72
+ * `merge-questions-gate-axis`). MIRRORS `observationTriage`'s shape
73
+ * (`off | ask | auto`) but is a SEPARATE axis — "should this built work merge?"
74
+ * is materially more consequential than "is this observation worth promoting?",
75
+ * so a merge-question must NEVER ride `observationTriage` and must NOT default
76
+ * `off` (a silently-dropped merge-question means finished, pushed work never
77
+ * lands). The states:
78
+ * - `off` ⇒ the merge-question surfacer is not invoked (only correct for a
79
+ * repo that lands by some other means);
80
+ * - `ask` (DEFAULT) ⇒ the surfacer enumerates unmerged `work/*` branches +
81
+ * emits a merge-question sidecar; a human's plain `merge | hold | drop`
82
+ * answer is required before the land. The conservative default that honours
83
+ * propose semantics and never silently drops pushed work;
84
+ * - `auto` ⇒ the runner self-supplies the `merge` answer without surfacing
85
+ * and lands through the SAME deterministic answer-driven runner-action
86
+ * dispatch + apply-time re-verify (the merge-mode-like fast path). Does NOT
87
+ * invoke the agentic decider — a merge-land is never an agent decision.
88
+ * Resolved through the SAME precedence chain as the other gates (flag > env >
89
+ * per-repo > global > default `ask`). The exact name + default + shape were
90
+ * answered in this task's Applied answers 2026-06-26 (q1/q2/q3) + PRD sidecar
91
+ * Q3.
92
+ */
93
+ export type MergeQuestions = 'off' | 'ask' | 'auto';
94
+ /**
95
+ * Which harness adapter (ADR §5) launches a job's agent and reports its
96
+ * liveness: `null` (shell out to `agentCmd`) or `pi` (the pi CLI). Selected via
97
+ * the `harness` config field; defaults to `null`.
98
+ */
99
+ export type HarnessAdapter = 'null' | 'pi';
100
+ /**
101
+ * The `propose`-mode review-request provider (ADR §6): `github` (`gh pr
102
+ * create`) or `none` (push-only). This names which provider the ARBITER URL
103
+ * RESOLVES to (`selectProvider`) — it is NOT a config OVERRIDE axis (there is
104
+ * none; the provider is purely arbiter-derived: a GitHub remote ⇒ `github`, else
105
+ * `none`). Whether `gh` can actually open the PR is the identity's
106
+ * `providers.github` / ambient `gh` auth; whether to open a PR at all is the
107
+ * separate `noPR` intent. `merge` mode is provider-agnostic and ignores all of
108
+ * this.
109
+ */
110
+ export type ReviewProviderName = 'none' | 'github';
111
+ /**
112
+ * The per-repo acceptance gate: a single shell command, or an ordered list of
113
+ * commands run in sequence (all must pass). See `verify.ts` / ADR §8.
114
+ */
115
+ export type VerifyConfig = string | string[];
116
+ /**
117
+ * **The `promptGuidance` NAMESPACE** — per-repo prompt-text NUDGES the runner
118
+ * folds into the worker's in-band prompt (`prompt.ts` + `CLAIM-PROTOCOL.md`).
119
+ * Categorically SEPARATE from the gate family (`verify`/`autoBuild`/`humanOnly`):
120
+ * a nudge changes the agent's DISPOSITION, never the acceptance bar (the `verify`
121
+ * gate is still the sole pass/fail). The namespace name is deliberate — it
122
+ * signals "guidance, not guarantee" — and is shaped to grow (`testFirst` is just
123
+ * the first member; later siblings, e.g. `preferSmallDiffs`, land here too).
124
+ */
125
+ export interface PromptGuidance {
126
+ /**
127
+ * Strengthen the wrapper's existing soft "TDD where the task asks for it"
128
+ * line into an explicit TEST-FIRST nudge ("at the agreed seam, write the
129
+ * failing test BEFORE the production code; this is guidance, not a gate —
130
+ * the `verify` step still decides pass/fail"). The strengthened text lives
131
+ * in `CLAIM-PROTOCOL.md` (the single source of truth), gated by the
132
+ * `<!-- if promptGuidance.testFirst --> … <!-- else --> … <!-- /if -->`
133
+ * conditional-fragment convention the extractor in `prompt.ts` honours.
134
+ * Default `false` (omitted ⇒ false); the worker prompt is byte-identical
135
+ * to today when this is off. Resolved like the gate family: flag > env
136
+ * (`DORFL_PROMPT_GUIDANCE_TEST_FIRST`) > per-repo > global >
137
+ * default (`false`). NEVER an enforced acceptance criterion.
138
+ */
139
+ testFirst: boolean;
140
+ }
141
+ /**
142
+ * Resolve the `promptGuidance` namespace down to its concrete boolean fields
143
+ * with the documented defaults applied — so callers can read
144
+ * `resolvePromptGuidance(cfg).testFirst` without re-checking the namespace's
145
+ * presence (a per-repo file may legitimately omit `promptGuidance` entirely,
146
+ * or supply only a subset). Mirrors the gate family's defaults-resolved
147
+ * convention.
148
+ */
149
+ export declare function resolvePromptGuidance(cfg: Config): PromptGuidance;
150
+ /**
151
+ * Resolved runner configuration. There is NO `roots`/`remotes` field: discovery
152
+ * is the registered hub-mirror set under `<workspacesDir>/repos/` (the registry,
153
+ * ADR `command-surface-and-journeys` §1), NOT a config roots walk. `scan` reads
154
+ * the eligibility fields per repo; `run --once` additionally consumes the
155
+ * execution fields (maxParallel, perRepoMax, defaultArbiter, integration,
156
+ * agentCmd).
157
+ */
158
+ export interface Config {
159
+ /**
160
+ * Per-repo policy: may agents auto-BUILD *undeclared* (not `humanOnly`) tasks
161
+ * in this repo? `false` (default, strict) ⇒ agents claim nothing automatically;
162
+ * `true` ⇒ agents may claim any task that is not `humanOnly: true`. Resolved
163
+ * like `integration`: flag (`--auto-build`/`--no-auto-build`) > `DORFL_AUTO_BUILD`
164
+ * env > per-repo > global > default. The build member of the per-action gate family
165
+ * (`autoBuild`/`autoTask` + the question-surfacing gates `observationTriage`/
166
+ * `surfaceBlockers`).
167
+ */
168
+ autoBuild: boolean;
169
+ /**
170
+ * **The `promptGuidance` NUDGE namespace** (see {@link PromptGuidance}). A
171
+ * NUDGE modifies the worker's IN-BAND PROMPT text (`prompt.ts` + the
172
+ * `CLAIM-PROTOCOL.md` wrapper); it is CATEGORICALLY SEPARATE from the gate
173
+ * family (`verify`/`autoBuild`/`humanOnly`) — guidance, never guarantee. The
174
+ * `verify` gate's semantics are unaffected regardless of any value here.
175
+ * Resolution mirrors the gate family per-member: flag > env > per-repo >
176
+ * global > default. Defaults to `{testFirst: false}` (worker prompt is
177
+ * byte-identical to today when every member is off). Designed to grow:
178
+ * later sibling nudges (e.g. `preferSmallDiffs`) land as new members.
179
+ */
180
+ promptGuidance: PromptGuidance;
181
+ /**
182
+ * Per-repo policy: may an agent auto-task *undeclared* (not `humanOnly`,
183
+ * no open questions) prds in this repo? `false` (default, strict, human-first)
184
+ * ⇒ a human must drive every prd's tasking; `true` ⇒ an agent may auto-task
185
+ * any prd that is not `humanOnly: true` and has no `needsAnswers`. Resolved like
186
+ * `autoBuild`: flag > `DORFL_AUTO_TASK` env > per-repo > global >
187
+ * default. The two-axis tasking gate (`work/prds/auto-task.md`), one level up
188
+ * from the build gate's `autoBuild`.
189
+ */
190
+ autoTask: boolean;
191
+ /**
192
+ * Per-repo policy governing the OBSERVATION INBOX (raw captured signal) — the
193
+ * 3-state member of the question-surfacing gate family (its sibling is
194
+ * `surfaceBlockers`, which governs DECLARED blocked work; the two are orthogonal
195
+ * peers, ADR `ci-config-policy-and-gate-family` §2). It REPLACES the old
196
+ * `autoTriage` boolean (cleanly, no alias — this repo has no external users yet,
197
+ * decided 2026-06-12). `off` (default) ⇒ the triage pool is dropped from the
198
+ * auto-pick SELECTION (observations untouched); `ask` ⇒ surface a
199
+ * promote/keep/delete question for every untriaged observation; `auto` ⇒
200
+ * auto-dispose ONLY the no-question cases (duplicate ⇒ recommend delete /
201
+ * unambiguous map) and surface a question for the rest (still NEVER auto-deletes
202
+ * a non-duplicate or auto-promotes). Resolved like `integration`/`autoBuild`:
203
+ * flag (`--observation-triage`) > `DORFL_OBSERVATION_TRIAGE` env >
204
+ * per-repo > global > default `off`. Gates the CREATE phase only; APPLY (consume
205
+ * a committed answer) stays ALWAYS allowed.
206
+ */
207
+ observationTriage: ObservationTriage;
208
+ /**
209
+ * Per-repo policy governing the MERGE-QUESTION SURFACER — the 3-state member
210
+ * of the question-surfacing gate family (prd
211
+ * `land-time-reverify-and-parallel-merge-ceiling` Story 17 / task
212
+ * `merge-questions-gate-axis`). MIRRORS `observationTriage`'s SHAPE
213
+ * (`off | ask | auto`) but is a SEPARATE axis with a DIFFERENT default —
214
+ * `observationTriage` defaults `off` (a dropped observation is safely
215
+ * ignorable), `mergeQuestions` defaults `ask` (a dropped merge-question means
216
+ * pushed work never lands). `off` ⇒ the surfacer is NOT invoked (only for a
217
+ * repo that lands by some other means); `ask` (default) ⇒ the surfacer
218
+ * enumerates unmerged `work/*` branches and emits a merge-question sidecar a
219
+ * human answers; `auto` ⇒ the runner self-supplies the `merge` answer without
220
+ * surfacing and lands via the SAME deterministic answer-driven runner-action
221
+ * dispatch + apply-time re-verify (the merge-mode-like fast path; NOT the
222
+ * agentic decider). Resolved like `observationTriage`/`integration`: flag
223
+ * (`--merge-questions`) > `DORFL_MERGE_QUESTIONS` env > per-repo > global >
224
+ * default `ask`. Gates the SURFACE phase of the merge-question loop only;
225
+ * APPLY (consume a committed merge-answer) stays ALWAYS allowed (the
226
+ * create-vs-consume invariant the gate family obeys, ADR
227
+ * `ci-config-policy-and-gate-family` §4).
228
+ */
229
+ mergeQuestions: MergeQuestions;
230
+ /**
231
+ * Per-repo policy governing DECLARED blocked work — the BOOLEAN member of the
232
+ * question-surfacing gate family (its orthogonal PEER is `observationTriage`,
233
+ * which governs the raw observation INBOX; ADR `ci-config-policy-and-gate-family`
234
+ * §2). It gates whether a task/prd carrying `needsAnswers: true` is rendered
235
+ * into an answerable question sidecar (`on`) or left silently blocked in the
236
+ * backlog (`off`). `false` (default, calm) ⇒ the `needsAnswers`-blocked pool is
237
+ * dropped from the auto-pick SELECTION, so a bare `advance` does NOT proactively
238
+ * surface a declared blocker; `true` ⇒ the blocked pool IS enumerated and
239
+ * `advance`'s surface rung renders the declared blocker into a sidecar the human
240
+ * can answer + unblock in-repo. This is a DIFFERENT job from `observationTriage`:
241
+ * it is about committed work items, not the raw inbox (so
242
+ * `observationTriage: ask|auto` + `surfaceBlockers: off` — "groom my inbox, leave
243
+ * my blocked work alone" — is expressible). Resolved like `autoBuild`: flag
244
+ * (`--surface-blockers`/`--no-surface-blockers`) > `DORFL_SURFACE_BLOCKERS`
245
+ * env > per-repo > global > default `false`. Gates the CREATE (surface) phase
246
+ * only; APPLY (consume a committed answer) stays ALWAYS allowed, and
247
+ * `needs-attention` (a stuck build) is a SEPARATE always-on mechanism this gate
248
+ * does NOT touch.
249
+ */
250
+ surfaceBlockers: boolean;
251
+ /**
252
+ * Per-repo policy governing whether SURFACING (the question-minting polarity)
253
+ * inspects STAGING in addition to the agent pool — the BOOLEAN gate-family
254
+ * member added by prd `staging-surface-and-apply-promote-safety` (F2). The
255
+ * BUILD polarity is UNCHANGED in either mode: staging items stay non-claimable,
256
+ * the trust model is untouched. `true` (default) ⇒ the SURFACE candidate set
257
+ * draws from STAGING (`tasks/backlog/`, `prds/proposed/`) PLUS the pool, so
258
+ * a `needsAnswers` task/prd in staging surfaces its questions BEFORE a human
259
+ * promotes it (you promote an already-clarified item, not blind and then get
260
+ * asked after); `false` ⇒ the legacy POOL-ONLY behaviour (staging is not
261
+ * inspected for questions). Resolved like `surfaceBlockers`/`autoBuild`:
262
+ * flag > `DORFL_SURFACE_STAGING` env > per-repo > global > default
263
+ * `true`. Surfacing is read-only-ish (writes a question sidecar; touches only
264
+ * the item's per-item lock), so widening it into staging does NOT loosen the
265
+ * BUILD trust gate — it only stops the surface polarity from being
266
+ * gratuitously trust-gated identically to it.
267
+ */
268
+ surfaceStaging: boolean;
269
+ /**
270
+ * Per-repo SELECTION ORDER across the four ORDERABLE auto-pick pools (`build` =
271
+ * eligible tasks, `task` = taskable prds, `surface` = `needsAnswers`
272
+ * blockers, `triage` = untriaged observations). `apply` (consume a committed
273
+ * answer) is PINNED FIRST and is NOT orderable (consume-always-wins). The value
274
+ * is EITHER a PRESET keyword (`drain` (default) ⇒ `[build, task, surface,
275
+ * triage]`, drain ready work then create then ask; `groom` ⇒ `[surface, triage,
276
+ * build, task]`) OR an explicit ordered pool-name list (the env comma form
277
+ * `build,task,surface,triage`); the preset is sugar over the list. It only
278
+ * REORDERS pools; the gates decide what is PRESENT (a gated-off pool named in
279
+ * the order is a no-op). SUBSUMES the old `prdsFirst` boolean: `drain`
280
+ * reproduces its default, `[task, build, ...]` reproduces `prdsFirst: true`.
281
+ * Resolved per-repo like `autoBuild`/`autoTask`: flag
282
+ * (`--selection-order`) > `DORFL_SELECTION_ORDER` env (the `'list'`
283
+ * coercion) > per-repo > global > default (`drain`). An unknown name/keyword
284
+ * FAILS LOUDLY (`select-order.ts` `resolveSelectionOrder`).
285
+ */
286
+ selectionOrder: SelectionOrderConfig;
287
+ /** Global cap on how many items the runner claims+runs in one tick. */
288
+ maxParallel: number;
289
+ /** Per-repo cap on concurrent claims (≤ maxParallel in effect). */
290
+ perRepoMax: number;
291
+ /** Name of the git remote that serializes claims (the arbiter). */
292
+ defaultArbiter: string;
293
+ /**
294
+ * The execution working area: bare hub mirrors (`<dir>/repos/<key>.git`) and
295
+ * job worktrees (`<dir>/work/<work-id>/`). STATE, not cache (ADR §3) — lives
296
+ * under a single visible `~/.dorfl/`, NEVER `~/.cache`. Overridable so
297
+ * tests (and unusual setups) can relocate it.
298
+ */
299
+ workspacesDir: string;
300
+ /**
301
+ * Where local `--bare` arbiters (offline source of truth) are provisioned:
302
+ * `<dir>/<host>/<org>/<name>.git` (hierarchical, reusing the repo→key
303
+ * encoding). Arbiters are precious DATA, not state/cache (ADR §7): they live
304
+ * under a visible `~/git/` and MUST NEVER be placed under `~/.dorfl/`
305
+ * (a `gc`/cleanup mishap could nuke the only copy). Overridable so tests can
306
+ * relocate it.
307
+ */
308
+ arbitersDir: string;
309
+ /**
310
+ * Where the HUMAN `work-on` command checks out its parallel worktrees:
311
+ * `<dir>/<key>/<slug>/` on branch `work/<slug>`. This is a **human-only**,
312
+ * editor-facing area — deliberately NOT under `~/.dorfl/` (the agents'
313
+ * execution state, ADR §3), so a `work-on` worktree never carries the human's
314
+ * secrets into an agent context. It is intentionally OPTIONAL with **no silent
315
+ * default**: `work-on` prompts for it on first use and saves it here (offering a
316
+ * sensible suggestion that does NOT share a prefix with the user's code dirs, so
317
+ * shell tab-completion never collides). `undefined` ⇒ not yet configured.
318
+ */
319
+ humanWorktreesDir?: string;
320
+ /** Integration mode for completed items: `propose` (default) or `merge`. */
321
+ integration: IntegrationMode;
322
+ /**
323
+ * **Per-TRANSITION override for the prd→tasks (TASKING) transition only.** When
324
+ * set, the tasking transition (a `do prd:<slug>` run: emit `work/tasks/backlog/*.md` +
325
+ * the `work/prds/ready/ → work/prds/tasked/` lifecycle move) integrates with THIS
326
+ * mode instead of the flat {@link integration}; the task-BUILD transition is
327
+ * unaffected (it always reads {@link integration}). UNSET (the default) ⇒ tasking
328
+ * falls back to {@link integration} — byte-for-byte today's behaviour for any repo
329
+ * that does not set it. The maintainer's target is `integration: 'propose'` +
330
+ * `taskingIntegration: 'merge'`: task a prd straight onto `main` (the task FILES
331
+ * land, no PR) but build each task as a reviewable PR. Resolved per-repo like
332
+ * {@link integration}: flag (`--merge`/`--propose`) > env
333
+ * (`DORFL_TASKING_INTEGRATION`) > per-repo > global > (fall back to)
334
+ * `integration` > default `propose`. DISTINCT from intake's per-EMITTED-TYPE
335
+ * `{task, prd}` resolver (front door, author-trust-resolved): this is a
336
+ * per-LIFECYCLE-TRANSITION knob, inside the trust boundary, operator/config-only.
337
+ */
338
+ taskingIntegration?: IntegrationMode;
339
+ /**
340
+ * **Per-repo DEFAULT landing for the TASKER's emitted tasks** (prd
341
+ * `staging-pool-position-gate-and-trust-model` US #5, task
342
+ * `runner-deterministic-slice-placement-policy-and-precedence`). Resolved
343
+ * per-repo EXACTLY like {@link taskingIntegration} (flag `--tasks-land-in`
344
+ * > env `DORFL_TASKS_LAND_IN` > per-repo > global > built-in
345
+ * `'pre-backlog'`). The tasking path reads it and passes it as the
346
+ * CONFIGURED-DEFAULT rung into the shared placement resolver
347
+ * (`src/placement.ts`); the resolver overlays an EXPLICIT operator flag
348
+ * (top) and the UNTRUSTED-ORIGIN force (staging) on top, in that order. The
349
+ * tasker NEVER sets placement itself. Prd US #6 / the governing ADR: the
350
+ * runner OWNS placement from unforgeable inputs; the agent cannot
351
+ * influence it.
352
+ */
353
+ tasksLandIn: TasksLandIn;
354
+ /**
355
+ * **Per-repo DEFAULT landing for `intake`-authored spec files** (spec
356
+ * `staging-pool-position-gate-and-trust-model` US #2/#5/#6/#12). The SPEC twin
357
+ * of {@link tasksLandIn}: resolved per-repo EXACTLY like it (flag
358
+ * `--specs-land-in` > env `DORFL_SPECS_LAND_IN` > per-repo > global >
359
+ * built-in `'pre-proposed'`). `intake`'s spec dispatch reads it and passes it as
360
+ * the CONFIGURED-DEFAULT rung into the shared placement resolver
361
+ * (`src/placement.ts`); the resolver overlays an EXPLICIT operator flag
362
+ * (top) and the UNTRUSTED-ORIGIN force (staging) on top, in that order.
363
+ * `intake` NEVER sets placement itself. Spec US #6 / the governing ADR: the
364
+ * runner OWNS placement from unforgeable inputs; the agent cannot
365
+ * influence it. KEY-LEVEL SYMMETRY with `tasksLandIn` — one resolver, two
366
+ * lifecycles, one precedence change touches ONE place.
367
+ *
368
+ * The sole spec-placement key after the prd → spec HARD CUTOVER (spec
369
+ * `prd-to-spec-vocabulary-cutover-and-migration-command`): the legacy
370
+ * `prdsLandIn` config key + `--prds-land-in` flag are GONE (clean break).
371
+ */
372
+ specsLandIn: SpecsLandIn;
373
+ /**
374
+ * **The PR-INTENT axis** (ADR §6): on the `propose` path, do NOT open a review
375
+ * request even on a GitHub arbiter with auth — push the branch (the
376
+ * safety-bearing recovery point) but SKIP `openRequest`. `true` ⇒ deliberately
377
+ * no PR (the explicit, no-warning "suppress the PR" intent that re-homes the old
378
+ * `provider: none` use); `false`/unset (default) ⇒ "I want a PR", so propose
379
+ * opens it via the arbiter-derived provider as normal. This is NOT a provider
380
+ * choice — `selectProvider` stays purely arbiter-derived; `noPR` is an intent
381
+ * LAYERED on top. Its honest-failure twin: when `noPR` is unset + propose + a
382
+ * GitHub arbiter but a `gh` auth PROBE says `gh` cannot open a PR, the run FAILS
383
+ * UP FRONT (a pre-flight guard) instead of silently degrading. `merge` mode
384
+ * ignores it (it never opens a PR). Resolved per-repo like `review`: flag
385
+ * (`--no-pr`) > env > per-repo > global > default `false`.
386
+ */
387
+ noPR: boolean;
388
+ /**
389
+ * The command the runner shells out to for one task. The runner appends the
390
+ * built prompt on stdin; the command does NO git ops on the repo (the runner
391
+ * owns those). Empty string ⇒ no agent configured (run will refuse). Consumed
392
+ * by the **null** harness adapter (it shells out to this verbatim); the **pi**
393
+ * adapter ignores it (it invokes the pi CLI directly — see `harness`).
394
+ */
395
+ agentCmd: string;
396
+ /**
397
+ * The model a job's agent runs on (harness-agnostic ROUTING intent, ADR §13).
398
+ * dorfl decides WHICH model; it never touches auth/keys (those stay the
399
+ * harness's job). Optional with NO default so "unset" is meaningful: unset ⇒
400
+ * dorfl forces no model (the harness's own default / a model baked into
401
+ * `agentCmd` is used untouched). Carried through the harness seam
402
+ * (`LaunchInput.model`); the ADAPTER decides HOW it reaches its tool — the pi
403
+ * adapter passes `--model <model>` natively, the null/shell adapter substitutes
404
+ * a `{model}` placeholder in `agentCmd`. Resolved per-repo like `integration`:
405
+ * flag (`--model`) > env > per-repo > global > default (unset).
406
+ */
407
+ model?: string;
408
+ /**
409
+ * Which harness adapter launches + reports liveness for a job's agent (the
410
+ * harness seam, ADR §5): `null` (default — shells out to `agentCmd`,
411
+ * PID-only liveness) or `pi` (invokes the pi CLI with the work-agent prompt;
412
+ * liveness from PID + the pi session dir/log, never mtime). pi specifics stay
413
+ * behind the adapter; the core only sees the `Harness` interface.
414
+ */
415
+ harness?: HarnessAdapter;
416
+ /**
417
+ * The pi CLI binary the `pi` harness invokes (default `pi` on `PATH`).
418
+ * Overridable so an operator can pin a path; tests stub it. Ignored unless
419
+ * `harness` is `pi`.
420
+ */
421
+ piBin?: string;
422
+ /**
423
+ * The ROOT folder under which the runner generates a job's pi session FILE —
424
+ * the adapter passes `--session <sessionsDir>/<unique-id>.jsonl` (a literal
425
+ * file path pi creates + writes; never `--session-dir`). A **HOST-ONLY machine
426
+ * path** (same class as `piBin`/`workspacesDir`): resolved flag (`--sessions-
427
+ * dir`) > env (`DORFL_SESSIONS_DIR`) > global > default — there is NO
428
+ * per-repo layer (a committed repo file must not redirect where the host writes
429
+ * session logs), so it is in `REPO_REJECTED_KEYS`. Optional with a DYNAMIC
430
+ * default (NOT a `DEFAULT_CONFIG` entry): unset ⇒ the path generator derives
431
+ * pi's default per-cwd sessions folder at launch from the job cwd (a direct
432
+ * child of `~/.pi/agent/sessions/`, so the dashboard's non-recursive `listAll`
433
+ * scans it). Set ⇒ any folder (e.g. a dedicated `run` fleet folder).
434
+ */
435
+ sessionsDir?: string;
436
+ /**
437
+ * The per-repo ENV-PREP step (install deps, fetch submodules, run codegen) —
438
+ * the SIBLING of `verify`, NOT part of it. `prepare` makes a freshly-
439
+ * materialised worktree's environment READY; `verify` checks the tree is
440
+ * GREEN. The runner sequences `prepare` THEN `verify`: `prepare` runs ONCE,
441
+ * before the FIRST `verify`, on a worktree that needs deps but does not have
442
+ * them (a fresh job worktree off the hub mirror). Install MUST NOT be baked
443
+ * into `verify` — that would make `verify` stop being a pure, cheaply-re-
444
+ * runnable acceptance check and make every gate run pay the install cost.
445
+ * `prepare` is where install belongs. A deterministic shell command (or an
446
+ * ordered list, all must pass); no model in the loop. Same shape and the SAME
447
+ * resolution/precedence as `verify` (flag > env > per-repo > global > default).
448
+ * The ONE difference from `verify`: unset (omitted) ⇒ NO prepare step (a
449
+ * no-op) — there is NO default install (a repo with no deps needs none; we
450
+ * never invent a default that would run `pnpm install` in a repo that has no
451
+ * lockfile). See `prepare.ts`.
452
+ */
453
+ prepare?: VerifyConfig;
454
+ /**
455
+ * The per-repo acceptance gate run by `dorfl verify` (a deterministic
456
+ * shell command, or an ordered list of commands). NOT per-task and NOT model-
457
+ * interpreted — it is declared, auditable config (ADR §8). Unset (omitted) ⇒
458
+ * a sensible `pnpm -r build && test && format:check` default; the field is
459
+ * intentionally optional so "unset" is distinguishable from "empty". Install
460
+ * must NOT be baked into `verify` — env-prep belongs in the sibling `prepare`
461
+ * field, which the runner runs ONCE before the first `verify` on a fresh
462
+ * worktree (the prepare=env-ready / verify=tree-green split).
463
+ */
464
+ verify?: VerifyConfig;
465
+ /**
466
+ * **Gate 2 — the PR/code review gate** (GATES prd `work/prds/tasked/review.md`): run the
467
+ * `review` SKILL as a fresh-context judgement gate ON TOP of the deterministic
468
+ * `verify` floor, AFTER `verify` passes and BEFORE the done-move, on the
469
+ * `do`/`complete` path. Default **OFF** (it puts a model on the merge path —
470
+ * opt-in, ADR §8). Resolved per-repo like `integration`: flag
471
+ * (`--review`/`--no-review`) > env > per-repo > global > default false.
472
+ * `verify` is never replaced — review is layered, never a substitute.
473
+ */
474
+ review: boolean;
475
+ /**
476
+ * The model the REVIEW agent runs on (de-correlation from the builder's
477
+ * `model`). Optional with NO default so "unset" means "no forced review model"
478
+ * (the harness's own default). Carried to the review-agent launch through the
479
+ * EXISTING harness seam (`LaunchInput.model` / `substituteModel`) — NOT a new
480
+ * mechanism. Resolved like `model`: flag (`--review-model`) > env > per-repo >
481
+ * global > default (unset). Distinct from the builder's `model`.
482
+ */
483
+ reviewModel?: string;
484
+ /**
485
+ * How many CORROBORATING review rounds Gate 2 runs on the SAME tip. Semantics are
486
+ * UNANIMOUS-APPROVAL, not retry-until-pass: the gate approves ONLY if EVERY round
487
+ * approves, and a `block` is TERMINAL (it short-circuits the loop and is never
488
+ * re-rolled — re-reviewing an unchanged tip after a block would just be a
489
+ * stochastic dice re-roll that could launder a real reject into a pass). So a
490
+ * value > 1 makes a FALSE APPROVE harder to slip through (each extra round is a
491
+ * veto), it does NOT give blocked work a second chance. A non-approve forces
492
+ * `needs-attention/` (never silently merges or loops), per the maintainer
493
+ * decision. Default a small N (2): two independent approvals required. (A future
494
+ * builder-REVISE step that MUTATES the tree between rounds is the only thing that
495
+ * should make a block retryable, because it changes the artifact under review; it
496
+ * is not implemented yet.) Resolved like `integration`: flag
497
+ * (`--review-max-rounds`) > env > per-repo > global > default.
498
+ */
499
+ reviewMaxRounds: number;
500
+ /**
501
+ * **The tasker IMPROVER loop on/off toggle** (`--tasker-loop` /
502
+ * `--no-tasker-loop`). On the `do prd:<slug>` tasking path the improver loop is
503
+ * the task path's quality engine (auto-tasking has no `verify` floor), so it is
504
+ * ON by default; setting this false gates wiring the loop seam (the candidate
505
+ * tasks land as-is). Resolved per-repo like `integration`: flag
506
+ * (`--tasker-loop`/`--no-tasker-loop`) > env > per-repo > global > default (on).
507
+ * DISTINCT from the acceptance gate's `review` toggle.
508
+ */
509
+ taskerLoop: boolean;
510
+ /**
511
+ * **The tasker IMPROVER loop's convergence cap** (`slicer-review-edit-loop`,
512
+ * GATES prd `work/prds/tasked/review.md` RESOLVED DESIGN — Shape 2 / insertion point
513
+ * A). On the `do prd:<slug>` tasking path, AFTER the agent produces candidate
514
+ * tasks the loop runs the `review` SKILL, APPLIES its edits, and re-reviews
515
+ * until a pass finds no NEW blocking issue (the natural terminator).
516
+ * `taskerLoopMax` is the HARD CAP on the in-context review passes (N) so the
517
+ * loop can never run forever; on hitting it WITH unresolved blockers the loop
518
+ * REJECTS via the needsAnswers / needs-attention sink. It lives on the LOOP,
519
+ * never on a gate (the orphaned `reviewMaxRounds` belongs to the Gate-2 path —
520
+ * separate cleanup). A cheap default (3). Resolved per-repo like `integration`:
521
+ * flag (`--tasker-loop-max`) > env > per-repo > global > default. Distinct from
522
+ * Gate-2's `reviewMaxRounds`.
523
+ */
524
+ taskerLoopMax: number;
525
+ /**
526
+ * The model the tasker IMPROVER loop's review agent runs on (de-correlation
527
+ * from the tasker). Optional with NO default so "unset" means "no forced model"
528
+ * (the harness's own default). Carried to the review-agent launch through the
529
+ * EXISTING harness seam (`LaunchInput.model` / `substituteModel`). Resolved like
530
+ * `model`: flag (`--tasker-loop-model`) > env > per-repo > global > default
531
+ * (unset). DISTINCT from the acceptance gate's `reviewModel` (build
532
+ * `--review-model`).
533
+ */
534
+ taskerLoopModel?: string;
535
+ /**
536
+ * **The fresh-worktree acceptance-gate toggle** (`--fresh-worktree-gate` /
537
+ * `--no-fresh-worktree-gate`). When ON (the default), the acceptance gate
538
+ * (`prepare` then `verify`) runs in a CLEAN throwaway worktree cut from the
539
+ * work branch REBASED onto the latest `<arbiter>/main` — i.e. the exact tree
540
+ * the arbiter will integrate — rather than the agent's pre-rebase working
541
+ * checkout. So a green gate provably describes the merged artifact: a
542
+ * gitignored/uncommitted file the checkout has but the committed/pushed tree
543
+ * does NOT cannot leak into a falsely-green gate, and a change introduced only
544
+ * by the integration rebase IS gated. When OFF (`freshWorktreeGate: false` /
545
+ * `--no-fresh-worktree-gate`), `verify` runs in the agent's build worktree
546
+ * exactly as before (the PRE-rebase gate) — the opt-out for when the per-gate
547
+ * install cost is too high. The throwaway gate worktree is fresh (no deps), so
548
+ * `prepare` runs in it before `verify` (the per-gate install cost the opt-out
549
+ * exists for). Modelled EXACTLY on `taskerLoop`: a POSITIVE boolean, default
550
+ * ON, `--no-` negation. Resolved per-repo like `integration`: flag
551
+ * (`--fresh-worktree-gate`/`--no-fresh-worktree-gate`) > env > per-repo >
552
+ * global > default (on). DISTINCT from `review`/`taskerLoop` (a separate
553
+ * concern: WHICH tree the gate runs against, not whether a review runs).
554
+ *
555
+ * The shared gate→integrate band (`performIntegration`) simply HONOURS the
556
+ * boolean it is handed (caller-agnostic). The `run` FLEET caller passes
557
+ * `(resolvedFlag && perRepoMax === 1)` so the fresh gate is used only when
558
+ * same-repo concurrency is OFF (two pre-existing run-fleet races would
559
+ * otherwise fire at `perRepoMax > 1`; they are their own task). Single-job
560
+ * callers (`do` in-place / `--isolated` / `--remote` / `complete`) pass the
561
+ * resolved flag UNCONDITIONALLY.
562
+ */
563
+ freshWorktreeGate: boolean;
564
+ /**
565
+ * **The cross-job merge serialiser's CAS-retry cap** — the git-alone FLOOR of the
566
+ * land-time cross-job queue (prd `land-time-reverify-and-parallel-merge-ceiling`,
567
+ * Story 5 + Applied Answer q1 (a)). The merge-mode `${branch}:main` push retries
568
+ * a non-fast-forward rejection by re-rebasing onto the moved `<arbiter>/main` and
569
+ * pushing again, up to this cap; only after exhaustion does a loser bounce to
570
+ * needs-attention. The in-process `integrateLock` only serialises sibling
571
+ * INTEGRATES in ONE process; across separate CI jobs the CAS loop IS the queue,
572
+ * and this cap is what determines how wide a matrix burst converges before any
573
+ * spurious bounce. A wide-matrix CI raises it; the default stays modest. Race-1
574
+ * safety is unchanged (a lost CAS costs only a re-rebase + re-gate retry, never a
575
+ * `--force`, never a both-land-broken) — scaling the cap only changes WHEN a
576
+ * genuinely-stuck loser gives up. Resolved per-repo like `freshWorktreeGate`:
577
+ * flag (`--merge-retries`) > env (`DORFL_MERGE_RETRIES`) > per-repo > global >
578
+ * default. The default matches `integration-core.ts`'s built-in fallback (1000 —
579
+ * the C2 rebase-until-real-conflict liveness ceiling, not a small Race-1 budget),
580
+ * so resolving it through this layer is byte-for-byte today's behaviour when no
581
+ * source sets it. Forwarded into `performIntegration`'s `mergeRetries` (resolved
582
+ * ONCE per `performIntegration` call, fixed across that call's CAS-retry loop —
583
+ * the same per-item resolution `freshWorktreeGate` / `review` use).
584
+ */
585
+ mergeRetries: number;
586
+ /**
587
+ * **Per-repo OPT-IN strictness layered on the OQ6 stale-approval default**
588
+ * (prd `land-time-reverify-and-parallel-merge-ceiling`, sidecar OQ6 / task
589
+ * `strict-merge-approval-gate`). Controls how the apply rung treats a prior
590
+ * merge-answer when the merge-base CHANGED between the human's answer and
591
+ * the apply step. The default (`false`) honours the prior answer and lands
592
+ * when the rebased tip re-verifies GREEN — a green re-verify is trusted as
593
+ * sufficient (the cheap fast-path). `true` re-surfaces the merge-question
594
+ * (clears the answer back to no-answer and re-authors the question on
595
+ * `main`/runner under the `advancing` lock — no branch-side mutation)
596
+ * instead of auto-landing on a merge-base change, even on a green re-verify
597
+ * — the host-agnostic analogue of GitHub's "dismiss stale approvals when
598
+ * the base changes". Story #16's RED-re-verify refusal is UNCHANGED and
599
+ * independent of this flag.
600
+ *
601
+ * This module ONLY resolves the boolean; the re-surface vs. land branch
602
+ * lives in `apply-rung-merge-disposition`'s consumer. Resolved per-repo
603
+ * through the SAME gate-family precedence chain as the sibling gates
604
+ * (flag `--strict-merge-approval` > env `DORFL_STRICT_MERGE_APPROVAL` >
605
+ * per-repo > global > default `false`). DOES NOT alter `mergeQuestions` /
606
+ * `observationTriage` default or shape — a SEPARATE, independent axis.
607
+ */
608
+ strictMergeApproval: boolean;
609
+ /**
610
+ * The optional runner **identity** (a bot): run the runner's git + provider
611
+ * operations as a configured entity via process-scoped env overrides, without
612
+ * mutating the user's global git/`gh` config (see `identity.ts`). HOST-ONLY
613
+ * (it carries secrets and is per-machine) ⇒ rejected in a per-repo file
614
+ * (`REPO_REJECTED_KEYS`); it lives only in the global config. Optional with NO
615
+ * default: unset ⇒ fully ambient (today's behaviour, byte-for-byte) — the CI
616
+ * path relies on `actions/checkout`'s ambient HTTPS+`GITHUB_TOKEN`. When set,
617
+ * `auth` is mandatory and validated at load time ({@link validateIdentity}).
618
+ */
619
+ identity?: Identity;
620
+ }
621
+ /** A partial config, e.g. loaded from a JSON file or built from CLI flags. */
622
+ export type PartialConfig = Partial<Config>;
623
+ /**
624
+ * The DEPRECATED config/env keys: present in an OLD config keeps working but is
625
+ * IGNORED with a one-line warning (never a hard error), so an existing setup is
626
+ * not broken by a removal. Each maps to the human-facing replacement hint. Mirrors
627
+ * the `allowAgents`→`autoBuild` removal-with-warning precedent.
628
+ *
629
+ * `provider` (the review-request provider OVERRIDE + `--provider` flag) was
630
+ * removed: the provider is purely ARBITER-derived now (a GitHub remote ⇒ the
631
+ * GitHub provider, else `none`), so an override could only contradict the arbiter.
632
+ * The legitimate `provider: none` use ("suppress the PR") is re-homed to the
633
+ * `noPR` intent axis.
634
+ */
635
+ export declare const DEPRECATED_CONFIG_KEYS: Readonly<Record<string, string>>;
636
+ /**
637
+ * Warn (once per offending key) for any DEPRECATED key present in a parsed config
638
+ * object, then DELETE it from the object so it never lingers in the resolved
639
+ * config. A stale key is IGNORED, not an error — an existing config keeps working.
640
+ * For `provider`, the warning points specifically at the `noPR` replacement when
641
+ * the stale value was the old `none` ("suppress the PR") use.
642
+ */
643
+ export declare function warnDeprecatedConfigKeys(parsed: Record<string, unknown>, source: string, warn?: (message: string) => void): void;
644
+ /**
645
+ * Built-in defaults. Chosen so that zero-config is useful: stay strict about the
646
+ * autonomy gate (agents claim nothing unless a repo opts in via `autoBuild`).
647
+ * Discovery has no default `roots` — it is the registered hub-mirror set (empty
648
+ * until `remote add`/`remote find` registers a target).
649
+ */
650
+ export declare const DEFAULT_CONFIG: Config;
651
+ /** The conventional config location (`~/.config/dorfl/config.json`). */
652
+ export declare function defaultConfigPath(): string;
653
+ /** Merge a partial config over the built-in defaults; arrays are replaced. */
654
+ export declare function mergeConfig(overrides: PartialConfig): Config;
655
+ /**
656
+ * Persist `config` to `path` as pretty JSON (creating the parent dir). Used by
657
+ * `work-on` to SAVE the prompted `humanWorktreesDir` on first use so the human is
658
+ * never asked again. Only the keys present in `config` are written — we round-trip
659
+ * whatever the loader produced (defaults + file + the new key), which keeps the
660
+ * on-disk file explicit and stable.
661
+ */
662
+ export declare function saveConfig(config: PartialConfig, path: string): void;
663
+ /**
664
+ * Load config from `path`, merged over defaults. A missing file is not an error
665
+ * (defaults make the tool work out of the box); invalid JSON is.
666
+ */
667
+ export declare function loadConfig(path?: string): Config;
668
+ //# sourceMappingURL=config.d.ts.map