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,255 @@
1
+ import { existsSync, mkdirSync, readdirSync } from 'node:fs';
2
+ import { dirname, join } from 'node:path';
3
+ import { git, run } from './git.js';
4
+ import { encodeRepoKey } from './repo-mirror.js';
5
+ /**
6
+ * The **arbiter management** primitive (ADR §7 in
7
+ * `docs/adr/execution-substrate-decisions.md`): provision and inspect a local
8
+ * `--bare` arbiter — the offline source of truth the claim/integration
9
+ * protocols serialize on (`scripts/CLAIM-PROTOCOL.md`).
10
+ *
11
+ * An arbiter is **precious DATA**, not state or cache: it is the very thing the
12
+ * deletion-safety predicate (ADR §4) proves everything else safe *against*. So:
13
+ *
14
+ * - It is provisioned under a visible `~/git/` (config `arbitersDir`),
15
+ * hierarchical (`<host>/<org>/<name>.git`), reusing the workspace repo→key
16
+ * encoding (`.`→`-` per segment) — NEVER under `~/.dorfl/`, whose
17
+ * `gc`/cleanup could nuke the only copy.
18
+ * - It is created `git clone --bare`. A non-bare repo with `main` checked out
19
+ * CANNOT be an arbiter: it rejects pushes to `main` (CLAIM-PROTOCOL), which
20
+ * would silently break every claim. `init` refuses that unsafe case; `status`
21
+ * flags it.
22
+ *
23
+ * This module only **provisions/locates** the arbiter (`arbiterInit` from an
24
+ * existing working repo, `arbiterStatus`). It does NOT claim, run, or fetch —
25
+ * those consume what this provides. It reuses the `repo-mirror` repo→key
26
+ * encoding (it does NOT duplicate it).
27
+ */
28
+ /** The conventional default name for the arbiter remote in a working repo. */
29
+ export const DEFAULT_ARBITER_REMOTE = 'arbiter';
30
+ /**
31
+ * The on-disk location of the local bare arbiter for `url`:
32
+ * `<arbitersDir>/<host>/<org>/<name>.git` (hierarchical, reusing the
33
+ * `repo-mirror` repo→key encoding, with a `.git` suffix). Lives under
34
+ * `arbitersDir` (default `~/git`), NEVER `~/.dorfl` (ADR §7).
35
+ */
36
+ export function arbiterPath(arbitersDir, url) {
37
+ return join(arbitersDir, `${encodeRepoKey(url)}.git`);
38
+ }
39
+ /** Raised when `init` cannot safely provision/locate an arbiter. */
40
+ export class ArbiterError extends Error {
41
+ }
42
+ /**
43
+ * Provision (or locate) a local bare arbiter from a working repo and wire the
44
+ * repo's `<remote>` to it. Idempotent: an existing arbiter is detected and NOT
45
+ * clobbered (it is only re-pointed by the remote, never re-cloned). Refuses the
46
+ * unsafe case where the target is a non-bare repo with `main` checked out (which
47
+ * would reject claim pushes — CLAIM-PROTOCOL).
48
+ *
49
+ * The default path is hierarchical under `arbitersDir` (`~/git`), NEVER under
50
+ * `~/.dorfl` (ADR §7) — overridable via `at`.
51
+ */
52
+ export function arbiterInit(options) {
53
+ const env = options.env;
54
+ const note = options.note ?? (() => { });
55
+ const repo = options.repo ?? options.cwd ?? process.cwd();
56
+ const remote = options.remote ?? DEFAULT_ARBITER_REMOTE;
57
+ if (run('git', ['rev-parse', '--git-dir'], repo, { env }).status !== 0) {
58
+ throw new ArbiterError(`not inside a git repository: ${repo}`);
59
+ }
60
+ // Resolve the destination path: explicit --at, else the hierarchical default
61
+ // under arbitersDir keyed off the repo's canonical file:// URL.
62
+ const repoUrl = `file://${repo}`;
63
+ const path = options.at ?? arbiterPath(arbitersDir(options), repoUrl);
64
+ const url = `file://${path}`;
65
+ // Idempotent: an existing git repo at the path is detected, validated as bare,
66
+ // and NEVER clobbered (no re-clone). We only ensure the remote is wired.
67
+ if (pathHoldsGitRepo(path)) {
68
+ assertBare(path, env);
69
+ note(`arbiter already exists at ${path} (not re-cloning) — ensuring remote.`);
70
+ wireRemote(repo, remote, url, env);
71
+ return {
72
+ path,
73
+ url,
74
+ remote,
75
+ created: false,
76
+ alreadyExisted: true,
77
+ bare: true,
78
+ };
79
+ }
80
+ // Refuse the unsafe case: --at points at an EXISTING non-bare repo (e.g. one
81
+ // with main checked out). Using it as the arbiter rejects claim pushes to
82
+ // main (CLAIM-PROTOCOL) — a silent, claim-breaking footgun.
83
+ if (existsSync(path) && pathLooksLikeWorkingTree(path)) {
84
+ assertBare(path, env); // throws with the clear non-bare message
85
+ }
86
+ // Provision: a bare clone of the working repo (its objects + main seed it).
87
+ mkdirSync(dirname(path), { recursive: true });
88
+ git(['clone', '--quiet', '--bare', repo, path], dirname(path), { env });
89
+ note(`provisioned bare arbiter at ${path}`);
90
+ // Wire the repo's <remote> to the new arbiter.
91
+ wireRemote(repo, remote, url, env);
92
+ return { path, url, remote, created: true, alreadyExisted: false, bare: true };
93
+ }
94
+ /**
95
+ * Read-only report of the current repo's arbiter: which remote it is, its
96
+ * URL/path, whether it exists and is bare, and whether `main` is reachable. It
97
+ * MUTATES NOTHING (no fetch, no checkout) — it reads the local remote config and
98
+ * inspects the arbiter repo in place. Flags the unsafe non-bare-with-main case
99
+ * (ADR §7 / CLAIM-PROTOCOL).
100
+ */
101
+ export function arbiterStatus(options) {
102
+ const env = options.env;
103
+ const cwd = options.cwd ?? process.cwd();
104
+ const remote = options.remote ?? DEFAULT_ARBITER_REMOTE;
105
+ const urlResult = run('git', ['remote', 'get-url', remote], cwd, { env });
106
+ if (urlResult.status !== 0) {
107
+ return {
108
+ remote,
109
+ configured: false,
110
+ exists: false,
111
+ bare: false,
112
+ mainReachable: false,
113
+ unsafe: false,
114
+ };
115
+ }
116
+ const url = urlResult.stdout.trim();
117
+ const path = localPathFromUrl(url);
118
+ // Only a local path can be inspected in place; a remote URL (github, ssh) is
119
+ // reported as configured but its bare-ness/reachability is not probed here.
120
+ if (path === undefined) {
121
+ return {
122
+ remote,
123
+ configured: true,
124
+ url,
125
+ exists: false,
126
+ bare: false,
127
+ mainReachable: false,
128
+ unsafe: false,
129
+ };
130
+ }
131
+ const exists = pathHoldsGitRepo(path);
132
+ if (!exists) {
133
+ return {
134
+ remote,
135
+ configured: true,
136
+ url,
137
+ path,
138
+ exists: false,
139
+ bare: false,
140
+ mainReachable: false,
141
+ unsafe: false,
142
+ };
143
+ }
144
+ const bare = isBareRepo(path, env);
145
+ const mainReachable = run('git', ['rev-parse', '--verify', 'main'], path, {
146
+ env,
147
+ }).status === 0;
148
+ return {
149
+ remote,
150
+ configured: true,
151
+ url,
152
+ path,
153
+ exists: true,
154
+ bare,
155
+ mainReachable,
156
+ // Unsafe = it exists but is NOT bare (a working tree with main checked out
157
+ // rejects claim pushes to main — CLAIM-PROTOCOL).
158
+ unsafe: !bare,
159
+ };
160
+ }
161
+ /** Render an `arbiter status` report for the terminal. */
162
+ export function formatArbiterStatus(report) {
163
+ const lines = [];
164
+ if (!report.configured) {
165
+ lines.push(`Arbiter: no '${report.remote}' remote configured in this repo.`);
166
+ lines.push(` Run \`dorfl arbiter init --remote ${report.remote}\` to provision one,`);
167
+ lines.push(' or set it manually with `git remote add`.');
168
+ return lines.join('\n');
169
+ }
170
+ lines.push(`Arbiter remote: ${report.remote}`);
171
+ lines.push(` URL: ${report.url ?? '(unknown)'}`);
172
+ if (report.path !== undefined) {
173
+ lines.push(` path: ${report.path}`);
174
+ }
175
+ lines.push(` exists: ${report.exists ? 'yes' : 'no'}`);
176
+ if (report.exists) {
177
+ lines.push(` bare: ${report.bare ? 'yes' : 'no'}`);
178
+ lines.push(` main: ${report.mainReachable ? 'reachable' : 'NOT reachable'}`);
179
+ }
180
+ if (report.unsafe) {
181
+ lines.push('');
182
+ lines.push(' !! UNSAFE: the arbiter is a non-bare repo (a working tree). A non-bare');
183
+ lines.push(' repo with `main` checked out REJECTS claim pushes to main');
184
+ lines.push(' (CLAIM-PROTOCOL). Re-provision a bare arbiter with `arbiter init`.');
185
+ }
186
+ else if (report.exists && !report.mainReachable) {
187
+ lines.push('');
188
+ lines.push(' !! main is not reachable on the arbiter (empty or wrong repo?).');
189
+ }
190
+ return lines.join('\n');
191
+ }
192
+ /** Resolve the arbiters dir from options, defaulting to `~/git`. */
193
+ function arbitersDir(options) {
194
+ if (options.arbitersDir && options.arbitersDir.trim() !== '') {
195
+ return options.arbitersDir;
196
+ }
197
+ throw new ArbiterError('arbiterInit requires `at` or `arbitersDir` (the CLI passes the resolved config).');
198
+ }
199
+ /** Add the remote if absent, else set its URL (idempotent wiring). */
200
+ function wireRemote(repo, remote, url, env) {
201
+ const existing = run('git', ['remote', 'get-url', remote], repo, { env });
202
+ if (existing.status === 0) {
203
+ git(['remote', 'set-url', remote, url], repo, { env });
204
+ }
205
+ else {
206
+ git(['remote', 'add', remote, url], repo, { env });
207
+ }
208
+ }
209
+ /** Throw a clear error if the repo at `path` is not bare (the unsafe case). */
210
+ function assertBare(path, env) {
211
+ if (!isBareRepo(path, env)) {
212
+ throw new ArbiterError(`refusing: the arbiter at ${path} is a NON-BARE repo (a working tree). ` +
213
+ 'A non-bare repo with `main` checked out rejects claim pushes to main ' +
214
+ '(CLAIM-PROTOCOL) — it cannot serve as an arbiter. Provision a bare ' +
215
+ 'arbiter (git clone --bare) at a clean location instead.');
216
+ }
217
+ }
218
+ /** True iff `path` is (or contains) an initialised git repository. */
219
+ function pathHoldsGitRepo(path) {
220
+ if (!existsSync(path)) {
221
+ return false;
222
+ }
223
+ // A bare repo IS a git dir; a non-bare repo has a `.git` entry. Either way,
224
+ // `git rev-parse --git-dir` succeeds when run inside it.
225
+ return run('git', ['rev-parse', '--git-dir'], path).status === 0;
226
+ }
227
+ /** True iff `path` exists and looks like a non-empty directory (a candidate repo). */
228
+ function pathLooksLikeWorkingTree(path) {
229
+ try {
230
+ return readdirSync(path).length > 0;
231
+ }
232
+ catch {
233
+ return false;
234
+ }
235
+ }
236
+ /** True iff the git repo at `path` is bare. */
237
+ function isBareRepo(path, env) {
238
+ const result = run('git', ['rev-parse', '--is-bare-repository'], path, { env });
239
+ return result.status === 0 && result.stdout.trim() === 'true';
240
+ }
241
+ /**
242
+ * The local filesystem path a remote URL refers to, or `undefined` for a true
243
+ * remote (github/ssh/https). Handles `file://...` and a plain absolute path.
244
+ */
245
+ function localPathFromUrl(url) {
246
+ const trimmed = url.trim();
247
+ if (trimmed.startsWith('file://')) {
248
+ return trimmed.slice('file://'.length);
249
+ }
250
+ if (trimmed.startsWith('/')) {
251
+ return trimmed;
252
+ }
253
+ return undefined;
254
+ }
255
+ //# sourceMappingURL=arbiter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"arbiter.js","sourceRoot":"","sources":["../src/arbiter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * The **brand / protocol identity** single source of truth (ADR-class load-
3
+ * bearing strings).
4
+ *
5
+ * dorfl's name leaks into a handful of strings that are a CONTRACT with
6
+ * the user, the filesystem, and CI — and that BREAK SILENTLY if they drift out
7
+ * of sync on a rename:
8
+ *
9
+ * - the `DORFL_` env-var prefix (a missed one is read as "unset" — the
10
+ * worst kind of failure: silent);
11
+ * - the `.dorfl.json` per-repo config filename;
12
+ * - the `~/.dorfl/` workspaces-dir default + the `dorfl` config
13
+ * dir name;
14
+ * - the `.dorfl-job.json` per-job record filename;
15
+ * - the `dorfl` binary / package name where referenced FROM CODE.
16
+ *
17
+ * This module derives EVERY one of those from a SINGLE base string ({@link BASE})
18
+ * using the same case transforms the `change-name` tool understands
19
+ * (https://github.com/wighawag/change-name — camelCase/constantCase/paramCase/…).
20
+ * Renaming the project later is then ONE edit here, not a scattered (and
21
+ * silently-breakable) find/replace across the codebase.
22
+ *
23
+ * SCOPE: only the PROTOCOL surface (where a miss BREAKS things). The ~600
24
+ * cosmetic doc/prose mentions of "dorfl" (ADRs, prds, CONTEXT.md, tasks,
25
+ * comments) are NOT indirected through this module — they should read as the real
26
+ * name and are handled at actual rebrand time by `change-name` (multi-case-aware
27
+ * recursive rename of file names + contents). The two are complementary: this
28
+ * centralizes the breakable protocol surface; `change-name` covers the cosmetic
29
+ * bulk. Likewise `package.json`'s `name`/`bin` are NOT indirected through a
30
+ * runtime constant (that is also `change-name`'s job) — {@link Brand.bin} merely
31
+ * exposes the SAME derived value for the code sites that reference the binary.
32
+ */
33
+ /**
34
+ * The ONE base identity string, in `paramCase` (the natural form of the binary
35
+ * name). Change THIS and every derived protocol form below flips in lockstep.
36
+ */
37
+ export declare const BASE = "dorfl";
38
+ /** `dorfl` (lowercase words joined by `-`). */
39
+ export declare function paramCase(input: string): string;
40
+ /** `DORFL` (uppercase words joined by `_`). */
41
+ export declare function constantCase(input: string): string;
42
+ /**
43
+ * The derived brand surface. Every field is computed from {@link BASE}; none is
44
+ * an independent literal, so they can never drift apart.
45
+ */
46
+ export interface Brand {
47
+ /** The base identity string (paramCase): `dorfl`. */
48
+ readonly base: string;
49
+ /** The shared env-var prefix: `constantCase(base) + '_'` ⇒ `DORFL_`. */
50
+ readonly envPrefix: string;
51
+ /** The per-repo config filename: `.{paramCase(base)}.json` ⇒ `.dorfl.json`. */
52
+ readonly repoConfigFilename: string;
53
+ /** The workspaces-dir name (a dotfile dir): `.{paramCase(base)}` ⇒ `.dorfl`. */
54
+ readonly workdirName: string;
55
+ /** The per-job record filename: `.{paramCase(base)}-job.json` ⇒ `.dorfl-job.json`. */
56
+ readonly jobRecordFilename: string;
57
+ /** The config-dir name (under `~/.config/`): `paramCase(base)` ⇒ `dorfl`. */
58
+ readonly configDirName: string;
59
+ /** The binary / package name (paramCase): `dorfl`. */
60
+ readonly bin: string;
61
+ }
62
+ /** Derive the full {@link Brand} surface from one base string. */
63
+ export declare function deriveBrand(base: string): Brand;
64
+ /**
65
+ * The live brand surface for THIS project, derived from {@link BASE}. Import the
66
+ * fields you need (e.g. `brand.envPrefix`, `brand.workdirName`) instead of
67
+ * hardcoding the literal — that is the whole point of this module.
68
+ */
69
+ export declare const brand: Brand;
70
+ //# sourceMappingURL=brand.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brand.d.ts","sourceRoot":"","sources":["../src/brand.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH;;;GAGG;AACH,eAAO,MAAM,IAAI,UAAU,CAAC;AAqB5B,+CAA+C;AAC/C,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED,+CAA+C;AAC/C,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIlD;AAED;;;GAGG;AACH,MAAM,WAAW,KAAK;IACrB,qDAAqD;IACrD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,wEAAwE;IACxE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,+EAA+E;IAC/E,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,gFAAgF;IAChF,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,sFAAsF;IACtF,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,6EAA6E;IAC7E,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,sDAAsD;IACtD,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACrB;AAED,kEAAkE;AAClE,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,CAW/C;AAED;;;;GAIG;AACH,eAAO,MAAM,KAAK,EAAE,KAAyB,CAAC"}
package/dist/brand.js ADDED
@@ -0,0 +1,84 @@
1
+ /**
2
+ * The **brand / protocol identity** single source of truth (ADR-class load-
3
+ * bearing strings).
4
+ *
5
+ * dorfl's name leaks into a handful of strings that are a CONTRACT with
6
+ * the user, the filesystem, and CI — and that BREAK SILENTLY if they drift out
7
+ * of sync on a rename:
8
+ *
9
+ * - the `DORFL_` env-var prefix (a missed one is read as "unset" — the
10
+ * worst kind of failure: silent);
11
+ * - the `.dorfl.json` per-repo config filename;
12
+ * - the `~/.dorfl/` workspaces-dir default + the `dorfl` config
13
+ * dir name;
14
+ * - the `.dorfl-job.json` per-job record filename;
15
+ * - the `dorfl` binary / package name where referenced FROM CODE.
16
+ *
17
+ * This module derives EVERY one of those from a SINGLE base string ({@link BASE})
18
+ * using the same case transforms the `change-name` tool understands
19
+ * (https://github.com/wighawag/change-name — camelCase/constantCase/paramCase/…).
20
+ * Renaming the project later is then ONE edit here, not a scattered (and
21
+ * silently-breakable) find/replace across the codebase.
22
+ *
23
+ * SCOPE: only the PROTOCOL surface (where a miss BREAKS things). The ~600
24
+ * cosmetic doc/prose mentions of "dorfl" (ADRs, prds, CONTEXT.md, tasks,
25
+ * comments) are NOT indirected through this module — they should read as the real
26
+ * name and are handled at actual rebrand time by `change-name` (multi-case-aware
27
+ * recursive rename of file names + contents). The two are complementary: this
28
+ * centralizes the breakable protocol surface; `change-name` covers the cosmetic
29
+ * bulk. Likewise `package.json`'s `name`/`bin` are NOT indirected through a
30
+ * runtime constant (that is also `change-name`'s job) — {@link Brand.bin} merely
31
+ * exposes the SAME derived value for the code sites that reference the binary.
32
+ */
33
+ /**
34
+ * The ONE base identity string, in `paramCase` (the natural form of the binary
35
+ * name). Change THIS and every derived protocol form below flips in lockstep.
36
+ */
37
+ export const BASE = 'dorfl';
38
+ // --- Case transforms (the subset of `change-name`'s vocabulary we derive from).
39
+ //
40
+ // Implemented locally (no runtime dependency) but NAMED for the `change-name`
41
+ // conventions so the mapping is obvious at rebrand time. Each splits the input
42
+ // into lowercase words, then re-joins per the target case. The base is already
43
+ // `paramCase`, but we go through `words()` so a future base in any case still
44
+ // derives correctly.
45
+ /** Split an identifier (any case) into its lowercase words. */
46
+ function words(input) {
47
+ return input
48
+ .replace(/([a-z0-9])([A-Z])/g, '$1 $2') // camelCase / PascalCase boundary
49
+ .replace(/[-_\s.]+/g, ' ') // param/snake/dot/space separators
50
+ .trim()
51
+ .toLowerCase()
52
+ .split(/\s+/)
53
+ .filter((w) => w !== '');
54
+ }
55
+ /** `dorfl` (lowercase words joined by `-`). */
56
+ export function paramCase(input) {
57
+ return words(input).join('-');
58
+ }
59
+ /** `DORFL` (uppercase words joined by `_`). */
60
+ export function constantCase(input) {
61
+ return words(input)
62
+ .map((w) => w.toUpperCase())
63
+ .join('_');
64
+ }
65
+ /** Derive the full {@link Brand} surface from one base string. */
66
+ export function deriveBrand(base) {
67
+ const param = paramCase(base);
68
+ return {
69
+ base,
70
+ envPrefix: constantCase(base) + '_',
71
+ repoConfigFilename: `.${param}.json`,
72
+ workdirName: `.${param}`,
73
+ jobRecordFilename: `.${param}-job.json`,
74
+ configDirName: param,
75
+ bin: param,
76
+ };
77
+ }
78
+ /**
79
+ * The live brand surface for THIS project, derived from {@link BASE}. Import the
80
+ * fields you need (e.g. `brand.envPrefix`, `brand.workdirName`) instead of
81
+ * hardcoding the literal — that is the whole point of this module.
82
+ */
83
+ export const brand = deriveBrand(BASE);
84
+ //# sourceMappingURL=brand.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brand.js","sourceRoot":"","sources":["../src/brand.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG,OAAO,CAAC;AAE5B,iFAAiF;AACjF,EAAE;AACF,8EAA8E;AAC9E,+EAA+E;AAC/E,+EAA+E;AAC/E,8EAA8E;AAC9E,qBAAqB;AAErB,+DAA+D;AAC/D,SAAS,KAAK,CAAC,KAAa;IAC3B,OAAO,KAAK;SACV,OAAO,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC,kCAAkC;SACzE,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,mCAAmC;SAC7D,IAAI,EAAE;SACN,WAAW,EAAE;SACb,KAAK,CAAC,KAAK,CAAC;SACZ,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AAC3B,CAAC;AAED,+CAA+C;AAC/C,MAAM,UAAU,SAAS,CAAC,KAAa;IACtC,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/B,CAAC;AAED,+CAA+C;AAC/C,MAAM,UAAU,YAAY,CAAC,KAAa;IACzC,OAAO,KAAK,CAAC,KAAK,CAAC;SACjB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;SAC3B,IAAI,CAAC,GAAG,CAAC,CAAC;AACb,CAAC;AAuBD,kEAAkE;AAClE,MAAM,UAAU,WAAW,CAAC,IAAY;IACvC,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC9B,OAAO;QACN,IAAI;QACJ,SAAS,EAAE,YAAY,CAAC,IAAI,CAAC,GAAG,GAAG;QACnC,kBAAkB,EAAE,IAAI,KAAK,OAAO;QACpC,WAAW,EAAE,IAAI,KAAK,EAAE;QACxB,iBAAiB,EAAE,IAAI,KAAK,WAAW;QACvC,aAAa,EAAE,KAAK;QACpB,GAAG,EAAE,KAAK;KACV,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,KAAK,GAAU,WAAW,CAAC,IAAI,CAAC,CAAC"}
@@ -0,0 +1,132 @@
1
+ /**
2
+ * The SINGLE owner of the buildable-task (and PRD-body) markdown SECTION SCHEMA
3
+ * (prd `centralize-buildable-task-renderer-shared-by-intake-and-promotion`, US
4
+ * #1/#4/#7). dorfl has TWO independent producers of a buildable task/PRD body —
5
+ * `intake.ts` (`renderBacklogTask`/`renderSpec`, a wrapper+fallback) and
6
+ * `triage-persist.ts` (`buildPromotedBody`, a structured renderer) — and until
7
+ * this module they each HAND-ROLLED the `## What to build` / `## Acceptance
8
+ * criteria` / `## Open questions` / `## Prompt` skeleton, so the schema could (and
9
+ * did) DRIFT apart silently (the promptless-promotion stuck-lock bug, see the
10
+ * origin observation
11
+ * `advance-promotion-builds-promptless-task-that-self-claims-stuck-2026-06-25`).
12
+ *
13
+ * This module renders only the BODY (the markdown AFTER the frontmatter fence) —
14
+ * the part both producers actually share. Each producer keeps its OWN frontmatter
15
+ * writer (intake stamps `issue:`/`originTrust:`; promotion stamps `needsAnswers:`/
16
+ * `blockedBy:`) and its OWN writer/integration mode (intake's branch+PR front
17
+ * door; promotion's triage-local CAS create) — only the section skeleton is
18
+ * centralized here.
19
+ *
20
+ * The two producers are ASYMMETRIC, and that asymmetry is expressed by the
21
+ * renderer's inputs rather than by two divergent bodies:
22
+ *
23
+ * - intake's DEFAULT-SCAFFOLD skeleton (used ONLY when the intake agent drafted
24
+ * no body) is `## What to build` + `## Acceptance criteria` + a thin default
25
+ * `## Prompt`. Reproduced by passing all three.
26
+ * - promotion's structured body is `## What to build` (the mechanism prose) +
27
+ * optional `## Open questions` + a `## Prompt` seeded (blockquoted) from the
28
+ * mechanism prose, and NO `## Acceptance criteria`. Reproduced by omitting
29
+ * `acceptanceCriteria` and passing the open-questions block + the seed prose.
30
+ *
31
+ * Symmetrically, {@link renderSpecBody} owns the FULL PRD section schema both PRD
32
+ * producers need: intake's default PRD scaffold is `## Problem Statement` +
33
+ * `## Solution` + `## User Stories` (reproduced by passing all three), while
34
+ * promotion's structured PRD body is `## Problem Statement` + optional
35
+ * `## Open questions` (reproduced by omitting `solution`/`userStories`). Each
36
+ * optional section is emitted only when its input is non-empty.
37
+ *
38
+ * `## Prompt` is TASK-ONLY: a PRD is not dispatched by `do`/`run`, so a PRD body
39
+ * carries none (the symmetric reason the task body MUST carry one — the consumer
40
+ * `extractPromptSection`/`resolveTask` in `prompt.ts` throws "has no '## Prompt'
41
+ * section" at dispatch time without it). {@link renderTaskBody} always emits a
42
+ * `## Prompt`; {@link renderSpecBody} never does.
43
+ *
44
+ * NOTE (extract-only): this module is a PURE ADDITION. Neither producer is rewired
45
+ * here — that is the two follow-on tasks (kept file-orthogonal so each proves its
46
+ * own output is byte-for-byte preserved). This task lands the renderer + its
47
+ * golden-shape test ONLY.
48
+ */
49
+ export interface RenderTaskBodyInput {
50
+ /**
51
+ * The `## What to build` prose. For intake's default scaffold this is the task
52
+ * title; for promotion it is the observation's mechanism/fix prose. When empty,
53
+ * a placeholder keeps the section non-empty.
54
+ */
55
+ whatToBuild: string;
56
+ /**
57
+ * The `## Acceptance criteria` block (markdown, e.g. a `- [ ]` checklist).
58
+ * OMIT it (or pass empty) to drop the section entirely — promotion's structured
59
+ * body carries no acceptance section, intake's default scaffold does.
60
+ */
61
+ acceptanceCriteria?: string;
62
+ /**
63
+ * The `## Open questions` block (markdown). OMIT it (or pass empty) to drop the
64
+ * section — intake's default scaffold has none, a promoted observation carries
65
+ * its transcribed open questions here.
66
+ */
67
+ openQuestions?: string;
68
+ /**
69
+ * The `## Prompt` body, supplied UNQUOTED — the renderer blockquotes it (the
70
+ * `> `-prefixed shape `extractPromptSection` strips back off). This is the
71
+ * task-only dispatchability section; it is ALWAYS emitted (a placeholder seeds
72
+ * it when empty) so a rendered task never fails the missing-`## Prompt` guard.
73
+ */
74
+ prompt: string;
75
+ }
76
+ /**
77
+ * Render a buildable TASK body (the markdown AFTER the frontmatter fence). Emits,
78
+ * in order: `## What to build`, `## Acceptance criteria` (only when given),
79
+ * `## Open questions` (only when given), and ALWAYS `## Prompt` (blockquoted).
80
+ *
81
+ * The output passes `extractPromptSection`/`resolveTask` without the
82
+ * "has no '## Prompt' section" throw, because `## Prompt` is unconditional and
83
+ * never empty. The caller wraps this body with its own frontmatter.
84
+ *
85
+ * FENCE↔HEADING BOUNDARY: this renderer starts at its first heading with NO
86
+ * leading blank line — the caller's frontmatter serializer owns the single blank
87
+ * line between the closing `---` fence and this first heading (ratified in
88
+ * `docs/adr/frontmatter-owns-fence-to-heading-blank-line.md`). Do NOT add a
89
+ * leading blank here; that would reintroduce the fence-spacing drift class.
90
+ */
91
+ export declare function renderTaskBody(input: RenderTaskBodyInput): string;
92
+ export interface RenderSpecBodyInput {
93
+ /**
94
+ * The `## Problem Statement` prose. For intake's default scaffold this is the
95
+ * issue-transform line; for promotion it is the observation's mechanism prose.
96
+ * When empty, a placeholder keeps the section non-empty.
97
+ */
98
+ problemStatement: string;
99
+ /**
100
+ * The `## Solution` prose (markdown). OMIT it (or pass empty) to drop the
101
+ * section — promotion's structured PRD body carries no Solution section, intake's
102
+ * default PRD scaffold does.
103
+ */
104
+ solution?: string;
105
+ /**
106
+ * The `## User Stories` block (markdown, e.g. a numbered list). OMIT it (or pass
107
+ * empty) to drop the section — promotion's structured PRD body carries no User
108
+ * Stories section, intake's default PRD scaffold does.
109
+ */
110
+ userStories?: string;
111
+ /**
112
+ * The `## Open questions` block (markdown). OMIT it (or pass empty) to drop the
113
+ * section. A PRD carries NO `## Prompt` (it is not dispatched).
114
+ */
115
+ openQuestions?: string;
116
+ }
117
+ /**
118
+ * Render a PRD body (the markdown AFTER the frontmatter fence). Emits, in the
119
+ * canonical order, `## Problem Statement`, then `## Solution`, `## User Stories`,
120
+ * and `## Open questions` (each only when its input is given), and NEVER a
121
+ * `## Prompt` — a PRD is a north-star doc, not a dispatchable task. The symmetric twin of
122
+ * {@link renderTaskBody}, owning the FULL SPEC section schema both producers need
123
+ * (intake's default scaffold supplies Problem Statement + Solution + User Stories;
124
+ * promotion's structured body supplies Problem Statement + optional Open
125
+ * questions) so the two artifact shapes cannot drift apart.
126
+ *
127
+ * FENCE↔HEADING BOUNDARY: same convention as {@link renderTaskBody} — no leading
128
+ * blank; the frontmatter serializer owns the `\n\n` after the closing `---` fence
129
+ * (see `docs/adr/frontmatter-owns-fence-to-heading-blank-line.md`).
130
+ */
131
+ export declare function renderSpecBody(input: RenderSpecBodyInput): string;
132
+ //# sourceMappingURL=buildable-body.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buildable-body.d.ts","sourceRoot":"","sources":["../src/buildable-body.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AAUH,MAAM,WAAW,mBAAmB;IACnC;;;;OAIG;IACH,WAAW,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;;OAKG;IACH,MAAM,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG,MAAM,CA2BjE;AAED,MAAM,WAAW,mBAAmB;IACnC;;;;OAIG;IACH,gBAAgB,EAAE,MAAM,CAAC;IACzB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG,MAAM,CA0BjE"}