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,626 @@
1
+ import { type SidecarType } from './sidecar.js';
2
+ /**
3
+ * The **unified item-lock module** (prd `ledger-status-per-item-lock-refs`, ADR
4
+ * `ledger-status-on-per-item-lock-refs`). The runner's ONE lock primitive: ONE
5
+ * lock per item, on a PER-ITEM hidden ref `refs/dorfl/lock/<entry>`,
6
+ * acquired by an ATOMIC create-only push and released by DELETING the ref, with a
7
+ * two-axis (`action` × `state`) entry. It collapses the old transient status
8
+ * folders (`in-progress`, `needs-attention`, `tasking`, `advancing`) into ONE
9
+ * lock keyed by item identity; `in-progress` = lock held active for `implement`,
10
+ * `needs-attention` = lock held `stuck`.
11
+ *
12
+ * It GENERALISES the green tracer that proved the dangerous core end-to-end on a
13
+ * bare `file://` arbiter (the tracer is now this file). The one production
14
+ * difference from the tracer is the IDENTITY SEAM: callers pass a NAMESPACED item
15
+ * identity (`task:<slug>` / `prd:<slug>` / `observation:<slug>` / `obs:<slug>`,
16
+ * or a bare `<slug>` = task), and this module derives the type-encoded lock
17
+ * `<entry>` (`<type>-<slug>`) through {@link resolveSidecarIdentity} — the SAME
18
+ * single source of truth the sidecar (`work/questions/<type>-<slug>.md`) and the
19
+ * work branch (`work/<type>-<slug>`) already use. There is deliberately NO second
20
+ * identity scheme: a task, a prd,
21
+ * and an observation that share a slug get DISTINCT lock refs, and the SAME item
22
+ * under different actions shares ONE ref (so implement / task / advance on one
23
+ * item are mutually exclusive by construction).
24
+ *
25
+ * It is NOT yet wired into claim/task/advance — those are separate, dependent
26
+ * tasks — and deliberately does NOT touch `main`.
27
+ *
28
+ * WHY a per-item ref (not a marker on `main` or a tree on one shared ref):
29
+ * - **No false contention, no retry.** The ONLY writer that can contend on item
30
+ * X's lock is another writer FOR X — a GENUINE conflict the loser SHOULD lose.
31
+ * Two writers for DIFFERENT items touch DIFFERENT refs and never serialise. So
32
+ * acquire needs NO refetch-retry budget (contrast the shared-`main` CAS, which
33
+ * falsely-contends under parallelism and exhausts its retry cap → exit 3).
34
+ * - **Self-cleaning, no storage growth.** Acquire CREATES the ref; release
35
+ * DELETES it (not "empties" it), so the live ref set = currently-held items
36
+ * only. The lock commit is PARENTLESS (no `main` parent), so on ref-delete it
37
+ * is immediately unreachable and reclaimed by normal git gc — and the lock ref
38
+ * is fully decoupled from `main`'s object graph.
39
+ * - **Branch-inheritance impossible.** Nothing is in `main`'s tree, so a work
40
+ * branch cut from `main` inherits no lock state.
41
+ * - **Provider-agnostic.** A ref is a ref: the create-only / delete pushes work
42
+ * identically on a `--bare file://` arbiter and a real remote.
43
+ *
44
+ * ATOMICITY is the `--force-with-lease=<ref>:` (EMPTY expected) create-only push:
45
+ * the arbiter accepts it ONLY if the ref is still absent; a racer who lost finds
46
+ * the ref present and is rejected. No nonce gymnastics are needed here (unlike the
47
+ * shared-`main` CAS) because the ref NAME is the identity — two acquires for the
48
+ * same item race the SAME ref, and ref-level create-only is itself the mutex.
49
+ */
50
+ /** The ref namespace for per-item locks. HIDDEN (not `refs/heads/*`): invisible
51
+ * in the GitHub UI, not swept by branch automation, not fetched by a default
52
+ * clone. Deletion = "all locks released" (recoverable; work is on the work
53
+ * branches + `main`). */
54
+ export declare const LOCK_REF_PREFIX = "refs/dorfl/lock";
55
+ /**
56
+ * The single IDENTITY SEAM for the lock: derive the type-encoded lock `<entry>`
57
+ * (`<type>-<slug>`) from a NAMESPACED item identity, through the shared
58
+ * {@link resolveSidecarIdentity} resolver (the single source of truth, which the
59
+ * sidecar filename + the advancing-lock marker also key onto). Accepts the same
60
+ * forms as that resolver: `task:<slug>` / `prd:<slug>` / `observation:<slug>` /
61
+ * `obs:<slug>`, or a bare `<slug>` (= task). Acquire/release/read ALL key
62
+ * through THIS function, so there is one — and only one — addressing scheme.
63
+ */
64
+ export declare function lockEntryFor(item: string): string;
65
+ /** The lock ref for a type-encoded `<entry>` (`<type>-<slug>`). */
66
+ export declare function itemLockRef(entry: string): string;
67
+ /** WHAT holds the lock — the three mutually-exclusive actions over one item. */
68
+ export type LockAction = 'implement' | 'task' | 'advance';
69
+ /** Health of the hold: `active` (in-progress) or `stuck` (needs-attention). */
70
+ export type LockState = 'active' | 'stuck';
71
+ /**
72
+ * The two-axis lock entry. `action` and `state` are INDEPENDENT axes (so
73
+ * "advanced-and-stuck" and "building-and-stuck" are both representable, which a
74
+ * single action-field could not do). `reason` is present IFF `state === 'stuck'`.
75
+ *
76
+ * Since the lock entry is the SOLE stuck record (task
77
+ * `cutover-needs-attention-becomes-lock-stuck-recovery-surface`, decision i+: the
78
+ * `needs-attention/` folder is retired), `reason` is the FULL bounce prose (it may
79
+ * span multiple lines — a red-gate excerpt, a rebase-conflict report, an agent's
80
+ * ambiguity note), and `questions` carries any agent-surfaced questions for the
81
+ * human. Both ride in the lock blob BODY (not a single frontmatter field) so they
82
+ * round-trip richly, in a shape a future advance-surface rung (the
83
+ * surface-stuck-locks-as-questions direction captured in
84
+ * `work/notes/observations/needs-attention-may-have-no-human-visible-outcome-after-lock-cutover-surface-as-questions-2026-06-21.md`)
85
+ * can render into a `work/questions/` sidecar. `questions` is present (non-empty) only
86
+ * for a stuck entry that recorded them.
87
+ */
88
+ export interface LockEntry {
89
+ entry: string;
90
+ action: LockAction;
91
+ state: LockState;
92
+ holder: string;
93
+ since: string;
94
+ reason?: string;
95
+ questions?: string[];
96
+ }
97
+ /** Outcome of an acquire attempt. `acquired` = we hold it; `lost` = someone else
98
+ * does (a genuine same-item conflict). `error` = environment/usage. */
99
+ export type AcquireOutcome = 'acquired' | 'lost' | 'error';
100
+ export type ReleaseOutcome = 'released' | 'not-held' | 'error';
101
+ export interface AcquireResult {
102
+ outcome: AcquireOutcome;
103
+ /** The type-encoded lock entry (`<type>-<slug>`) the acquire keyed onto. */
104
+ entry: string;
105
+ ref: string;
106
+ message: string;
107
+ }
108
+ export interface ReleaseResult {
109
+ outcome: ReleaseOutcome;
110
+ /** The type-encoded lock entry (`<type>-<slug>`) the release keyed onto. */
111
+ entry: string;
112
+ ref: string;
113
+ message: string;
114
+ }
115
+ /**
116
+ * Outcome of an AMEND-style transition (mark-stuck / resume / requeue) — the
117
+ * lock-entry STATE MACHINE's interior moves (prd `ledger-status-per-item-lock-refs`,
118
+ * the C8 lock-entry state machine in the design trail). Each is a single CAS on the
119
+ * held ref (no retry loop), so the verdict is definitive:
120
+ * - `transitioned` — we won the CAS; the entry now holds the target `(action, state)`.
121
+ * - `not-held` — there is no entry to transition (the move's precondition is
122
+ * "a held entry in the right state"; absent ⇒ illegal here).
123
+ * - `wrong-state` — an entry exists but in the wrong `state` for this move
124
+ * (e.g. resume on an `active` entry, mark-stuck on a `stuck` one).
125
+ * An ILLEGAL transition, rejected, not coerced.
126
+ * - `lost` — the leased CAS was rejected because a CONCURRENT writer changed
127
+ * the ref between our read and our push (a genuine same-item race).
128
+ * - `error` — environment/usage (missing item, missing reason for mark-stuck, …).
129
+ */
130
+ export type TransitionOutcome = 'transitioned' | 'not-held' | 'wrong-state' | 'lost' | 'error';
131
+ export interface TransitionResult {
132
+ outcome: TransitionOutcome;
133
+ /** The type-encoded lock entry (`<type>-<slug>`) the transition keyed onto. */
134
+ entry: string;
135
+ ref: string;
136
+ message: string;
137
+ /** The lock entry AFTER a successful `transitioned` (absent for requeue's removal). */
138
+ lock?: LockEntry;
139
+ }
140
+ /**
141
+ * Serialise a lock entry to the ref's blob body (markdown frontmatter, like the
142
+ * advancing marker, so it round-trips and is previewable). The two-axis state
143
+ * (`entry`/`action`/`state`/`holder`/`since`) lives in the frontmatter; a stuck
144
+ * entry's FULL reason prose + any surfaced questions live in the BODY (under
145
+ * `## Reason` / `## Questions`) so they round-trip RICHLY (multi-line reason,
146
+ * bulleted questions) — the lock entry is the SOLE stuck record now, in a shape a
147
+ * future advance-surface rung can render. {@link parseLockEntry} is the exact
148
+ * inverse.
149
+ */
150
+ export declare function serialiseLockEntry(e: LockEntry): string;
151
+ export interface AcquireOptions {
152
+ /**
153
+ * The NAMESPACED item identity to lock (`task:<slug>` / `prd:<slug>` /
154
+ * `observation:<slug>` / `obs:<slug>`, or a bare `<slug>` = task). Resolved to
155
+ * the type-encoded lock `<entry>` through {@link lockEntryFor}.
156
+ */
157
+ item: string;
158
+ action: LockAction;
159
+ cwd: string;
160
+ arbiter?: string;
161
+ holder?: string;
162
+ env?: NodeJS.ProcessEnv;
163
+ }
164
+ /**
165
+ * Acquire the per-item lock atomically: build a parentless lock commit and push it
166
+ * to `refs/dorfl/lock/<entry>` with `--force-with-lease=<ref>:` (the EMPTY
167
+ * expected value = create-only). The arbiter accepts ONLY if the ref is still
168
+ * absent. A racer who lost finds the ref present → its lease fails → `lost`. No
169
+ * retry loop: a rejection here is a GENUINE same-item conflict, not false
170
+ * contention.
171
+ */
172
+ export declare function acquireItemLock(opts: AcquireOptions): Promise<AcquireResult>;
173
+ export interface ReleaseOptions {
174
+ /** The NAMESPACED item identity (same forms as {@link AcquireOptions.item}). */
175
+ item: string;
176
+ cwd: string;
177
+ arbiter?: string;
178
+ env?: NodeJS.ProcessEnv;
179
+ }
180
+ /**
181
+ * Release the per-item lock by DELETING the ref (`git push <arbiter>
182
+ * :refs/dorfl/lock/<entry>`). Deleting (not emptying) is what makes the
183
+ * lock set self-cleaning: a released item has NO ref, and its parentless commit
184
+ * becomes unreachable for gc. Idempotent: deleting an absent ref is `not-held`.
185
+ */
186
+ export declare function releaseItemLock(opts: ReleaseOptions): Promise<ReleaseResult>;
187
+ /** Outcome of a GUARDED release ({@link releaseHeldItemLock}): the caller HELD the
188
+ * lock, so an absent ref is NOT benign — it is `vanished` (the ref was deleted
189
+ * under us, an abort signal). */
190
+ export type ReleaseHeldOutcome = 'released' | 'vanished' | 'error';
191
+ export interface ReleaseHeldResult {
192
+ outcome: ReleaseHeldOutcome;
193
+ /** The type-encoded lock entry (`<type>-<slug>`) the release keyed onto. */
194
+ entry: string;
195
+ ref: string;
196
+ message: string;
197
+ }
198
+ /**
199
+ * GUARDED release for a runner that KNOWS it acquired and HELD the lock (prd
200
+ * `ledger-status-per-item-lock-refs` US #13): unlike {@link releaseItemLock} —
201
+ * whose `not-held` is a BENIGN idempotent case the complete/tasking/needs-attention
202
+ * callers tolerate (the body may predate the lock, or a crash-recovery may have
203
+ * already cleared it) — here the absence of OUR ref is an ABORT SIGNAL. A held
204
+ * runner whose own lock VANISHED mid-build (someone `release-lock`-ed it, or a
205
+ * `gc`/recovery cleared it) must DETECT it on release and route to
206
+ * needs-attention rather than silently "clean-release" a lock it no longer holds:
207
+ * the work it just did was NOT protected by the exclusion it thought it had.
208
+ *
209
+ * So this maps {@link releaseItemLock}'s `not-held` to a DISTINCT `vanished`
210
+ * outcome the caller branches on (abort / needs-attention), while a genuine
211
+ * `released` is the happy path and `error` stays `error`. It is otherwise the
212
+ * SAME leased delete (no second mechanism): a clean `released` deletes the ref we
213
+ * held. Use this ONLY where the caller provably HELD the lock (the in-flight
214
+ * runner's own release); the tolerant idempotent callers keep using
215
+ * {@link releaseItemLock}.
216
+ */
217
+ export declare function releaseHeldItemLock(opts: ReleaseOptions): Promise<ReleaseHeldResult>;
218
+ /** Verdict of the SHARED leased delete {@link leasedDeleteLockRef}: `deleted` (the
219
+ * ref was removed), `lost` (a concurrent change moved the ref between the read and
220
+ * the delete — the lease was REJECTED, never `--force`d), or `error`. */
221
+ export type LeasedDeleteOutcome = 'deleted' | 'lost' | 'error';
222
+ export interface MarkStuckOptions {
223
+ /** The NAMESPACED item identity (same forms as {@link AcquireOptions.item}). */
224
+ item: string;
225
+ /** The needs-attention prose. REQUIRED — a `stuck` entry always carries a reason. */
226
+ reason: string;
227
+ /**
228
+ * Any agent-surfaced QUESTIONS for the human, recorded on the stuck entry's
229
+ * body (the lock is the SOLE stuck record now). Optional; empty/absent ⇒ no
230
+ * questions block. A future advance-surface rung renders these into a
231
+ * `work/questions/` sidecar.
232
+ */
233
+ questions?: string[];
234
+ cwd: string;
235
+ arbiter?: string;
236
+ env?: NodeJS.ProcessEnv;
237
+ }
238
+ /**
239
+ * mark-stuck (transition 2): `[action, active] -> [action, stuck] + reason`. The
240
+ * runner bounces (red gate, agent failure, decomposition-unclear). A leased CAS
241
+ * amend of the SAME entry's `state` + `reason`, keeping `action`/`holder`/`since`.
242
+ * It is the source of the needs-attention SURFACE (now read from the lock ref,
243
+ * not a `work/needs-attention/` folder).
244
+ *
245
+ * PRECONDITIONS (the state machine + invariants):
246
+ * - the entry must be HELD and `active` (`not-held` / `wrong-state` otherwise) —
247
+ * stuck is reachable only FROM active, never from absent or already-stuck.
248
+ * - `reason` must be non-empty (the `reason` PRESENT iff `state: stuck` invariant).
249
+ */
250
+ export declare function markStuckItemLock(opts: MarkStuckOptions): Promise<TransitionResult>;
251
+ export interface ResumeOptions {
252
+ /** The NAMESPACED item identity (same forms as {@link AcquireOptions.item}). */
253
+ item: string;
254
+ cwd: string;
255
+ arbiter?: string;
256
+ /** Optionally reassign the holder on resume (a human/continue picks it up). */
257
+ holder?: string;
258
+ env?: NodeJS.ProcessEnv;
259
+ }
260
+ /**
261
+ * resume (transition 3): `[action, stuck] -> [action, active]`. A human (or a
262
+ * `continue`) picks the stuck item up: amend `state` back to `active` and CLEAR
263
+ * `reason` (the `reason` iff `stuck` invariant — an active entry never carries a
264
+ * stuck reason). Keeps the same `action`; `holder` may be reassigned. The
265
+ * lock-entry analogue of the old `needs-attention -> in-progress` folder move.
266
+ *
267
+ * PRECONDITION: the entry must be HELD and `stuck` (`not-held` / `wrong-state`
268
+ * otherwise) — active is reachable from stuck only, not from absent.
269
+ */
270
+ export declare function resumeItemLock(opts: ResumeOptions): Promise<TransitionResult>;
271
+ /**
272
+ * requeue (transition 4): `[action, stuck] -> (absent)`. Give up on a STUCK hold
273
+ * and return the item to the pool by REMOVING the entry. The body never moved
274
+ * (Amendment 5 — it is already resting in `backlog/` on `main`), so requeue is
275
+ * purely "release the lock"; the kept `work/<slug>` branch remains for recovery.
276
+ *
277
+ * Distinct from {@link releaseItemLock} (transition 6, abort from ACTIVE): requeue
278
+ * is the GUARDED give-up from `stuck` only, so it rejects (`wrong-state`) an
279
+ * `active` entry — abandoning an in-flight active hold goes through `release`, not
280
+ * `requeue`. The removal itself is a leased delete (a concurrent change ⇒ `lost`).
281
+ */
282
+ export declare function requeueItemLock(opts: ReleaseOptions): Promise<TransitionResult>;
283
+ /**
284
+ * Read the current lock entry for an item from the arbiter (the `status`/`scan`
285
+ * read path): fetch the lock refs, read `lock.md` from the ref's tree. Returns
286
+ * `undefined` when the item is not locked.
287
+ */
288
+ export declare function readItemLock(opts: ReleaseOptions): Promise<LockEntry | undefined>;
289
+ /**
290
+ * The DURABLE-`main` terminal record paths for an item, by its type — the
291
+ * authoritative resting records the cross-substrate reconciliation reads. An
292
+ * item is TERMINAL on `main` iff ANY of these paths exists on `<arbiter>/main`.
293
+ * The won't-proceed terminal is PER-REGIME (the slug-collision correctness fix:
294
+ * a dropped task and a dropped prd sharing a slug used to collide on one
295
+ * bare-slug `work/dropped/<slug>.md`):
296
+ * - a TASK: `work/tasks/done/<slug>.md` (completed) OR
297
+ * `work/tasks/cancelled/<slug>.md` (the task regime's won't-proceed terminal).
298
+ * - a PRD: `work/prds/tasked/<slug>.md` (tasked) OR `work/prds/dropped/<slug>.md`
299
+ * (the prd regime's won't-proceed terminal).
300
+ * - an OBSERVATION: NONE. A note has no durable terminal folder — it leaves by
301
+ * deletion (its absence, not a terminal record, is the end state). A promoted
302
+ * observation becomes a NEW task/prd with its own ref.
303
+ */
304
+ export declare function terminalMainPaths(type: SidecarType, slug: string): string[];
305
+ /** The outcome of a cross-substrate reconciliation of one item's lock against
306
+ * the authoritative `main` durable record (prd `ledger-status-per-item-lock-refs`
307
+ * US #9/#10; ADR `ledger-status-on-per-item-lock-refs`). */
308
+ export type ReconcileOutcome = 'cleared-stale' | 'kept-stuck' | 'kept-in-flight' | 'no-lock' | 'error';
309
+ export interface ReconcileResult {
310
+ outcome: ReconcileOutcome;
311
+ /** The type-encoded lock entry (`<type>-<slug>`) reconciled. */
312
+ entry: string;
313
+ ref: string;
314
+ /** Whether `<arbiter>/main` shows the item terminal (per {@link terminalMainPaths}:
315
+ * a task at `tasks/done`/`tasks/cancelled`, a prd at `prds/tasked`/`prds/dropped`). */
316
+ terminalOnMain: boolean;
317
+ message: string;
318
+ }
319
+ /**
320
+ * Reconcile ONE item's per-item lock against the AUTHORITATIVE `main` durable
321
+ * record — the heart of complete's cross-substrate crash-safety (prd
322
+ * `ledger-status-per-item-lock-refs` US #9/#10; ADR
323
+ * `ledger-status-on-per-item-lock-refs`; the design trail's Amendment 6).
324
+ *
325
+ * complete's order is hold lock → land the DURABLE `main` move FIRST → release
326
+ * the lock SECOND. A crash BETWEEN the move and the release leaves a
327
+ * terminal-on-`main` item (a completed/cancelled task or a tasked/dropped prd,
328
+ * per {@link terminalMainPaths}) with a STILL-HELD lock — a stale lock with no
329
+ * in-flight work behind it. This is the recovery that converges it.
330
+ *
331
+ * THE RECOVERY RULE (the `main` record is authoritative over a stale lock):
332
+ * - `main` is TERMINAL + the held lock is `active` → the item is RESTED, the
333
+ * lock is STALE (the crash was after the move) → CLEAR it (`cleared-stale`).
334
+ * - `main` is TERMINAL + the held lock is `stuck` → KEEP it (`kept-stuck`).
335
+ * `done` + `stuck` may legitimately CO-EXIST (a rebase-conflict bounce of a
336
+ * just-completed item — US #10). The stuck lock wins the human's attention;
337
+ * the `main` record wins dependency resolution. NOT corruption, never cleared
338
+ * here (a human resolves it via `resume`/`requeue`/`release-lock`).
339
+ * - `main` is NOT terminal + a lock is held → the NORMAL in-flight
340
+ * state (`kept-in-flight`); the lock is doing its job, leave it.
341
+ * - no lock at all → `no-lock` (at rest).
342
+ *
343
+ * Best-effort + idempotent: it NEVER throws (a fetch/read fault degrades to
344
+ * `error`, leaving the lock untouched — the safe direction), and re-running it
345
+ * on an already-reconciled item is a clean `no-lock`. The clear is the SAME
346
+ * leased delete {@link releaseItemLock} uses, so it cannot race off a concurrent
347
+ * change.
348
+ *
349
+ * BROADENED CONTRACT (leased-delete-rejection arm, task
350
+ * `reaper-no-lock-outcome-benign-not-lost`, promote-slice follow-up
351
+ * `reconcile-item-lock-broadened-contract-audit`, review 2026-06-20): when the
352
+ * SHARED leased delete is REJECTED (the arbiter ref moved between our read and
353
+ * our write) this function performs an EXTRA `git ls-remote <arbiter> <ref>`
354
+ * round-trip to distinguish the two rejection sub-cases, and applies to ALL
355
+ * callers — NOT only the reaper:
356
+ * - REMOTE REF IS EMPTY (a concurrent reaper / release-lock / requeue cleared
357
+ * the SAME stale lock first): the desired end state — benign. This function
358
+ * ALSO `git update-ref -d`s the LOCAL stale tracking ref as a SIDE-EFFECT
359
+ * (so a subsequent read in this clone sees the correct deleted state; a
360
+ * non-pruning fetch would otherwise leave a dangling local ref), then
361
+ * returns `no-lock`. Note the outcome-shape change: this rejection USED TO
362
+ * surface as `error` — it now surfaces as `no-lock` for EVERY caller. A
363
+ * caller that keys recovery / surfacing off `error` on this arm must be
364
+ * audited (see the follow-up task's `## Decisions` block).
365
+ * - REMOTE REF STILL EXISTS AT A DIFFERENT SHA (a genuine concurrent mutation
366
+ * — e.g. a racer just marked it `stuck`): back off rather than force —
367
+ * `error`.
368
+ * Because the function name reads "reconcile" (read-style), the local
369
+ * `update-ref -d` is a deliberate SIDE-EFFECT on the local clone's refs — it
370
+ * only fires on this specific rejection arm and is otherwise invisible.
371
+ */
372
+ export declare function reconcileItemLockAgainstMain(opts: ReleaseOptions): Promise<ReconcileResult>;
373
+ /**
374
+ * The READ-ONLY classifier behind {@link reconcileItemLockAgainstMain}: it derives
375
+ * the SAME {@link ReconcileOutcome} verdict, but NEVER mutates the arbiter — it
376
+ * does NOT clear a stale-active lock, it only REPORTS that the lock IS
377
+ * reconcilable. This is what the `gc --ledger` stuck-lock report keys off (the
378
+ * forward-pointer's wiring): per the no-auto-sweep ADR rule, the plain report
379
+ * surfaces a stale-active lock as `cleared-stale`-eligible WITHOUT clearing it —
380
+ * a human still asserts the clear via `release-lock` (or runs complete's recovery,
381
+ * which DOES clear via {@link reconcileItemLockAgainstMain}). The classification
382
+ * is identical so the report and the recovery never disagree about WHAT a lock is;
383
+ * only the ACTION differs (report vs clear).
384
+ *
385
+ * A `cleared-stale` outcome here therefore means "would be cleared by recovery /
386
+ * `release-lock`" (the lock is terminal-on-`main` + `active` = stale), NOT that
387
+ * anything was cleared. Best-effort + never throws (a fetch/read fault degrades to
388
+ * `error`).
389
+ */
390
+ export declare function classifyItemLockAgainstMain(opts: ReleaseOptions): Promise<ReconcileResult>;
391
+ /** One lingering lock in the `gc --ledger` stuck-lock REPORT: the held entry plus
392
+ * the read-only cross-substrate {@link ReconcileOutcome} classification of it
393
+ * against the authoritative `main` durable record (held/stuck vs stale-active over
394
+ * a terminal item). Reported, NEVER cleared by the report itself. */
395
+ export interface LockReportEntry {
396
+ /** The full held lock entry (action × state + holder/since/reason). */
397
+ lock: LockEntry;
398
+ /** The lock ref (`refs/dorfl/lock/<entry>`). */
399
+ ref: string;
400
+ /**
401
+ * The READ-ONLY {@link classifyItemLockAgainstMain} verdict:
402
+ * - `kept-in-flight` — a normal in-flight hold (not terminal on `main`).
403
+ * - `kept-stuck` — terminal on `main` + `stuck` (the `done`+`stuck`
404
+ * co-existence; wins the human's attention, never cleared here).
405
+ * - `cleared-stale` — terminal on `main` + `active` = a STALE lock the report
406
+ * names as reconcilable; a human clears it via `release-lock` (NOT
407
+ * auto-cleared by the report — no auto-sweep).
408
+ * - `error` — a per-item classification fault (kept verbatim).
409
+ */
410
+ reconcile: ReconcileOutcome;
411
+ }
412
+ /** The `gc --ledger` stuck/orphaned-lock REPORT (prd
413
+ * `ledger-status-per-item-lock-refs` US #14): every lingering per-item lock on the
414
+ * arbiter, each classified read-only against `main`. An EMPTY list = no locks held
415
+ * (an absent ref namespace reads as `[]`, the recoverable "all locks released"
416
+ * state — US #12). The report NEVER clears anything. */
417
+ export interface ItemLockReport {
418
+ locks: LockReportEntry[];
419
+ }
420
+ /**
421
+ * Build the `gc --ledger` stuck/orphaned-lock REPORT (prd
422
+ * `ledger-status-per-item-lock-refs` US #12/#13/#14; ADR
423
+ * `ledger-status-on-per-item-lock-refs`): enumerate every per-item lock currently
424
+ * held on the arbiter ({@link listItemLockEntries} — held active + stuck, with
425
+ * holder/since/reason) and classify EACH read-only against the authoritative
426
+ * `main` durable record via {@link classifyItemLockAgainstMain} (the wiring the
427
+ * `complete-lock-then-durable-main-move-crash-safe` task's
428
+ * `reconcileItemLockAgainstMain` had no production caller for). This is the
429
+ * generalisation of the (now-retired) advancing-marker report from advancing-only
430
+ * to the UNIFIED lock (the `gc --ledger` stuck-lock report).
431
+ *
432
+ * It is a REPORT, never a sweep: it CLEARS nothing (no liveness heartbeat, no
433
+ * auto-sweep — the same trust model as the advancing report; a human asserts a
434
+ * lock is dead via `release-lock`). A stale-active lock over a terminal-on-`main`
435
+ * item is surfaced as `cleared-stale`-eligible ("reconcilable") but left in place.
436
+ *
437
+ * Best-effort + degrades safely: an absent lock-ref namespace ⇒ an EMPTY report
438
+ * ({@link listItemLockEntries} returns `[]`) — so a deleted lock ref reads as "all
439
+ * locks released" (recoverable; work is safe on the `work/<slug>` branches +
440
+ * `main`).
441
+ */
442
+ export declare function reportItemLocks(cwd: string, arbiter?: string, env?: NodeJS.ProcessEnv): Promise<ItemLockReport>;
443
+ /**
444
+ * Format the `gc --ledger` stuck/orphaned-lock REPORT for the terminal: one block
445
+ * per lingering lock (entry, action/state, holder, since, the stuck `reason`, the
446
+ * read-only `main`-reconciliation note, and a copy-pasteable `release-lock`
447
+ * hint). An EMPTY report yields NO lines (a clean lock set is silent here, like
448
+ * the duplicate-slug surface). It REPORTS only — the matching wording makes the
449
+ * no-auto-sweep contract explicit (a human asserts a lock is dead).
450
+ */
451
+ /**
452
+ * Does the `gc --ledger` lock report contain a lock that NEEDS HUMAN ATTENTION
453
+ * (prd US#14/#21; ADR `ledger-status-on-per-item-lock-refs`: this surface is the
454
+ * STUCK / crash-orphaned lock, NOT every held one)? TRUE iff some lock is
455
+ * `kept-stuck` (terminal-on-`main` + stuck) or `cleared-stale`-eligible
456
+ * (terminal-on-`main` + a stale active orphan). A `kept-in-flight` (active,
457
+ * non-terminal) lock is the NORMAL in-flight state of a healthy concurrent build
458
+ * (read by `status` as healthy) and does NOT count — so a routine `gc --ledger`
459
+ * health check whose only locks are healthy in-flight holds exits 0. This is the
460
+ * fail-loud EXIT predicate for the gc lock surface (the report itself still lists
461
+ * every held lock, in-flight ones informationally).
462
+ */
463
+ export declare function itemLockReportNeedsAttention(report: ItemLockReport): boolean;
464
+ export declare function formatItemLockReport(report: ItemLockReport): string[];
465
+ /** Per-lock outcome of the human-invoked {@link reapStaleItemLocks} SWEEP:
466
+ * - `reaped` — a `cleared-stale` lock (terminal-on-main + active) cleared
467
+ * via the SHARED leased delete.
468
+ * - `already-reaped` — BENIGN: the lock was already gone by the time the sweep
469
+ * re-read the ref (`no-lock`) — another reaper / a
470
+ * `release-lock` / a `requeue` got there first; the ref is
471
+ * at the desired end state. NOT `lost` and does NOT count
472
+ * as needs-attention (see the exit-code contract recorded
473
+ * in this task's done record).
474
+ * - `kept-stuck` — left untouched (terminal + stuck — human attention; US #10).
475
+ * - `kept-in-flight` — left untouched (active, non-terminal — a healthy build).
476
+ * - `lost` — a `cleared-stale` candidate whose leased delete was REJECTED
477
+ * (the ref changed concurrently to a DIFFERENT value);
478
+ * REPORTED, never `--force`d.
479
+ * - `error` — a per-item classification/clear fault (left untouched). */
480
+ export type ReapOutcome = 'reaped' | 'already-reaped' | 'kept-stuck' | 'kept-in-flight' | 'lost' | 'error';
481
+ /** One lock's disposition in the {@link ReapReport}. */
482
+ export interface ReapEntry {
483
+ /** The full lock entry as the report saw it (action × state + holder/since). */
484
+ lock: LockEntry;
485
+ /** The lock ref (`refs/dorfl/lock/<entry>`). */
486
+ ref: string;
487
+ /** What the sweep DID with this lock. */
488
+ outcome: ReapOutcome;
489
+ /** A human-readable note (the clear message, or why it was kept). */
490
+ message: string;
491
+ }
492
+ /** The result of {@link reapStaleItemLocks}: every held lock with what the sweep
493
+ * did to it, plus convenience counts. A lock NEEDS HUMAN ATTENTION after the sweep
494
+ * iff it is `kept-stuck` or `lost` (a `cleared-stale` whose leased delete lost the
495
+ * race); a `kept-in-flight` is the normal healthy state and does NOT. */
496
+ export interface ReapReport {
497
+ entries: ReapEntry[];
498
+ reaped: number;
499
+ /** BENIGN already-reaped count: the sweep found the ref already gone (`no-lock`)
500
+ * — another reaper / release-lock / requeue cleared it first. The desired end
501
+ * state; NOT `lost`, does NOT contribute to needs-attention / a non-zero exit. */
502
+ alreadyReaped: number;
503
+ kept: number;
504
+ lost: number;
505
+ }
506
+ /**
507
+ * The OPT-IN `gc --ledger --reap-stale-locks` SWEEP (prd
508
+ * `ledger-status-per-item-lock-refs` US #14): a human asserting "clear the dead
509
+ * TERMINAL locks now", so one command sweeps every orphaned terminal lock instead
510
+ * of N hand-run `release-lock`s. It is the WRITE twin of {@link reportItemLocks}
511
+ * (the default report-only surface): it enumerates the SAME held locks, classifies
512
+ * each read-only, and for EXACTLY the `cleared-stale` class (terminal-on-`main` +
513
+ * `active` = stranded) performs the SHARED leased delete via
514
+ * {@link reconcileItemLockAgainstMain} (the recovery's clear, re-checked fresh per
515
+ * item) — there is NO parallel clear mechanism.
516
+ *
517
+ * SCOPE FENCE (the trust model the default preserves):
518
+ * - it clears ONLY `cleared-stale`. A `kept-stuck` (terminal + stuck — human
519
+ * attention) and a `kept-in-flight` (active + non-terminal — a healthy build)
520
+ * are NEVER reaped, even here. Because each clear goes through
521
+ * {@link reconcileItemLockAgainstMain}, which RE-reads + RE-classifies before
522
+ * deleting, a lock that turned stuck/in-flight between the report and the sweep
523
+ * is still safe (reconcile returns `kept-*`, not a delete).
524
+ * - the clear is a LEASED delete: a concurrent change to the ref makes it REJECT
525
+ * (`lost`), reported — never a blind `--force`.
526
+ *
527
+ * The DEFAULT `gc --ledger` (no flag) never calls this: it stays report-only,
528
+ * fail-loud, delete-nothing. This is gated behind the explicit `--reap-stale-locks`
529
+ * flag (a human authorising the clear), exactly as `release-lock`'s trust model.
530
+ */
531
+ export declare function reapStaleItemLocks(cwd: string, arbiter?: string, env?: NodeJS.ProcessEnv): Promise<ReapReport>;
532
+ /**
533
+ * Does a {@link reapStaleItemLocks} sweep leave a lock that STILL needs human
534
+ * attention? TRUE iff some entry is `kept-stuck` (a stuck lock the reaper rightly
535
+ * left) or `lost`/`error` (a `cleared-stale` whose leased delete lost the race, or
536
+ * an unresolvable fault). A `reaped` (successfully cleared) or a `kept-in-flight`
537
+ * (healthy build) lock does NOT count — so a sweep that cleared every stale lock
538
+ * and left only healthy in-flight holds exits 0. This is the post-sweep analogue of
539
+ * {@link itemLockReportNeedsAttention}.
540
+ */
541
+ export declare function reapReportNeedsAttention(report: ReapReport): boolean;
542
+ /**
543
+ * Format the `gc --ledger --reap-stale-locks` sweep for the terminal: a header
544
+ * line with the reaped/kept counts, then one line per lock (what was reaped vs
545
+ * kept vs lost). An EMPTY sweep (no locks held) yields NO lines (silent, like the
546
+ * report). The wording keeps the no-blind-force contract explicit.
547
+ */
548
+ export declare function formatReapReport(report: ReapReport): string[];
549
+ /**
550
+ * Convert a type-encoded lock `<entry>` (`<type>-<slug>`) back into the namespaced
551
+ * item form (`<namespace>:<slug>`) that {@link lockEntryFor} /
552
+ * {@link resolveSidecarIdentity} accept — so the report's suggested `release-lock`
553
+ * command is copy-pasteable and the classifier can re-key off the SAME identity.
554
+ * Unknown prefixes fall back to the raw entry (still copyable). The inverse of
555
+ * {@link lockEntryFor} for the three known namespaces.
556
+ */
557
+ export declare function itemFromLockEntry(entry: string): string;
558
+ /** List the entries (`<type>-<slug>`) currently locked on the arbiter (the
559
+ * stuck-lock report / `status` read path). */
560
+ export declare function listItemLocks(cwd: string, arbiter?: string, env?: NodeJS.ProcessEnv): Promise<string[]>;
561
+ /**
562
+ * Read the FULL lock entries currently held on the arbiter — the `status`/`scan`
563
+ * in-flight read path (prd `ledger-status-per-item-lock-refs` US #8; task
564
+ * `needs-attention-as-stuck-lock-state`). One fetch of the lock refs, then read
565
+ * each held entry's `lock.md` blob, returning the parsed {@link LockEntry} for
566
+ * every ref (so a caller can surface `active` (in-progress) and `stuck`
567
+ * (needs-attention) holds + their reasons WITHOUT N fetches). Sorted by `entry`.
568
+ * Best-effort: a fetch/read fault yields an EMPTY list, so the read-only
569
+ * `status`/`scan` views degrade to "no in-flight locks" rather than erroring
570
+ * (parity with {@link heldTaskSlugs}).
571
+ */
572
+ export declare function listItemLockEntries(cwd: string, arbiter?: string, env?: NodeJS.ProcessEnv): Promise<LockEntry[]>;
573
+ /**
574
+ * List the TASK slugs currently lock-held on the arbiter — the held-slug set the
575
+ * `ready/` pool readers SUBTRACT (prd `ledger-status-per-item-lock-refs` US #15;
576
+ * task `claim-acquires-unified-lock-no-body-move`). Enumerates {@link listItemLocks}
577
+ * and keeps only the `task-<slug>` entries (a prd/observation lock does not gate
578
+ * the TASK pool), mapping each to its bare `<slug>`.
579
+ *
580
+ * LOAD-BEARING since the lock cut-over: the claim NO LONGER moves the body to
581
+ * `in-progress/` (it stays in the pool on `main`; the held lock IS the claim), so
582
+ * this held-slug set is the ONLY signal that keeps a claimed / in-flight item out
583
+ * of the eligible pool, NOT the redundant subtraction it was while the body-move
584
+ * still removed claimed items.
585
+ *
586
+ * GRACEFUL (fail-OPEN) by design — this is the SURFACE reader: a fetch fault
587
+ * yields an EMPTY set so the read-only `status`/`scan` views degrade to "no
588
+ * in-flight locks" rather than erroring. That is WRONG for SELECTION (an empty set
589
+ * on a read FAULT lets a continuously-held in-flight item leak back into the
590
+ * eligible pool → re-claimed → empty diff → spurious `stuck`). The SELECTION path
591
+ * must instead use {@link heldTaskSlugsStrict}, which THROWS on a read fault so
592
+ * the caller can fail CLOSED (refuse to enumerate an untrusted pool) rather than
593
+ * subtract nothing. This graceful variant delegates to the strict one and only
594
+ * swallows the fault.
595
+ */
596
+ export declare function heldTaskSlugs(cwd: string, arbiter?: string, env?: NodeJS.ProcessEnv): Promise<Set<string>>;
597
+ /**
598
+ * STRICT (fail-CLOSED) twin of {@link heldTaskSlugs} for the SELECTION path: read
599
+ * the held TASK slugs from the arbiter and THROW on any read fault (offline / dead
600
+ * arbiter / unreadable lock refs) instead of degrading to an empty set. The
601
+ * held-lock set lives ONLY on the arbiter and is the LOAD-BEARING signal that
602
+ * keeps a claimed / in-flight item out of the eligible pool, so a SELECTION read
603
+ * that cannot reach the arbiter must NOT pretend "no locks held" — it must fail so
604
+ * the caller refuses to enumerate a pool it cannot trust (the
605
+ * `scan-cwd-selection-pool-read-local-skips-held-lock-subtraction-offline-must-fail`
606
+ * decision: offline selection FAILS, there is no `--local` fallback). The
607
+ * read-only surface keeps the graceful {@link heldTaskSlugs}.
608
+ */
609
+ export declare function heldTaskSlugsStrict(cwd: string, arbiter?: string, env?: NodeJS.ProcessEnv): Promise<Set<string>>;
610
+ /**
611
+ * Parse a serialised lock entry body back into a {@link LockEntry} — the exact
612
+ * inverse of {@link serialiseLockEntry}. Reads the two-axis state from the
613
+ * frontmatter and, for a stuck entry, the FULL reason prose + any questions from
614
+ * the body (`## Reason` / `## Questions`). Tolerates a LEGACY entry whose reason
615
+ * lived in a one-line frontmatter `reason:` field (the pre-cutover shape) so a
616
+ * lock written by an older binary still reads.
617
+ */
618
+ export declare function parseLockEntry(body: string): LockEntry | undefined;
619
+ /**
620
+ * Advisory holder id: git user.name, else $USER, else a uuid fragment. Exported
621
+ * as {@link resolveLockHolder} so callers (e.g. claim's stale-lock self-heal) can
622
+ * resolve THE SAME holder string the lock would stamp, to compare against a held
623
+ * entry's `holder` without duplicating the resolution order.
624
+ */
625
+ export declare function resolveLockHolder(cwd: string, env?: NodeJS.ProcessEnv): Promise<string>;
626
+ //# sourceMappingURL=item-lock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"item-lock.d.ts","sourceRoot":"","sources":["../src/item-lock.ts"],"names":[],"mappings":"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"}