dorfl 0.14.2 → 0.15.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 (418) hide show
  1. package/dist/advance-ci-template.d.ts +17 -16
  2. package/dist/advance-ci-template.d.ts.map +1 -1
  3. package/dist/advance-ci-template.js +42 -53
  4. package/dist/advance-ci-template.js.map +1 -1
  5. package/dist/advance-drivers.d.ts +8 -0
  6. package/dist/advance-drivers.d.ts.map +1 -1
  7. package/dist/advance-drivers.js +28 -4
  8. package/dist/advance-drivers.js.map +1 -1
  9. package/dist/advance-isolated.d.ts.map +1 -1
  10. package/dist/advance-isolated.js +3 -2
  11. package/dist/advance-isolated.js.map +1 -1
  12. package/dist/advance-lifecycle-template.d.ts +41 -40
  13. package/dist/advance-lifecycle-template.d.ts.map +1 -1
  14. package/dist/advance-lifecycle-template.js +309 -489
  15. package/dist/advance-lifecycle-template.js.map +1 -1
  16. package/dist/advance-loop-driver.d.ts.map +1 -1
  17. package/dist/advance-loop-driver.js +3 -2
  18. package/dist/advance-loop-driver.js.map +1 -1
  19. package/dist/advance-treeless-publish.d.ts +31 -0
  20. package/dist/advance-treeless-publish.d.ts.map +1 -1
  21. package/dist/advance-treeless-publish.js +40 -0
  22. package/dist/advance-treeless-publish.js.map +1 -1
  23. package/dist/advance.d.ts +63 -3
  24. package/dist/advance.d.ts.map +1 -1
  25. package/dist/advance.js +80 -12
  26. package/dist/advance.js.map +1 -1
  27. package/dist/advancing-lock.d.ts +9 -0
  28. package/dist/advancing-lock.d.ts.map +1 -1
  29. package/dist/advancing-lock.js +21 -1
  30. package/dist/advancing-lock.js.map +1 -1
  31. package/dist/agent-env.d.ts +61 -0
  32. package/dist/agent-env.d.ts.map +1 -0
  33. package/dist/agent-env.js +144 -0
  34. package/dist/agent-env.js.map +1 -0
  35. package/dist/agent-stop.d.ts +35 -0
  36. package/dist/agent-stop.d.ts.map +1 -1
  37. package/dist/agent-stop.js +62 -0
  38. package/dist/agent-stop.js.map +1 -1
  39. package/dist/apply-merge-action.d.ts +76 -34
  40. package/dist/apply-merge-action.d.ts.map +1 -1
  41. package/dist/apply-merge-action.js +339 -129
  42. package/dist/apply-merge-action.js.map +1 -1
  43. package/dist/apply-stuck-action.js +2 -2
  44. package/dist/apply-stuck-action.js.map +1 -1
  45. package/dist/ci-agent-result.d.ts +151 -0
  46. package/dist/ci-agent-result.d.ts.map +1 -0
  47. package/dist/ci-agent-result.js +314 -0
  48. package/dist/ci-agent-result.js.map +1 -0
  49. package/dist/ci-handoff-apply.d.ts +162 -0
  50. package/dist/ci-handoff-apply.d.ts.map +1 -0
  51. package/dist/ci-handoff-apply.js +497 -0
  52. package/dist/ci-handoff-apply.js.map +1 -0
  53. package/dist/ci-handoff-format.d.ts +369 -0
  54. package/dist/ci-handoff-format.d.ts.map +1 -0
  55. package/dist/ci-handoff-format.js +646 -0
  56. package/dist/ci-handoff-format.js.map +1 -0
  57. package/dist/ci-handoff-lfs.d.ts +146 -0
  58. package/dist/ci-handoff-lfs.d.ts.map +1 -0
  59. package/dist/ci-handoff-lfs.js +397 -0
  60. package/dist/ci-handoff-lfs.js.map +1 -0
  61. package/dist/ci-handoff.d.ts +99 -0
  62. package/dist/ci-handoff.d.ts.map +1 -0
  63. package/dist/ci-handoff.js +277 -0
  64. package/dist/ci-handoff.js.map +1 -0
  65. package/dist/ci-lock-outputs.d.ts +93 -0
  66. package/dist/ci-lock-outputs.d.ts.map +1 -0
  67. package/dist/ci-lock-outputs.js +223 -0
  68. package/dist/ci-lock-outputs.js.map +1 -0
  69. package/dist/ci-phase-build.d.ts +178 -0
  70. package/dist/ci-phase-build.d.ts.map +1 -0
  71. package/dist/ci-phase-build.js +989 -0
  72. package/dist/ci-phase-build.js.map +1 -0
  73. package/dist/ci-phase-driver.d.ts +247 -0
  74. package/dist/ci-phase-driver.d.ts.map +1 -0
  75. package/dist/ci-phase-driver.js +370 -0
  76. package/dist/ci-phase-driver.js.map +1 -0
  77. package/dist/ci-phase-intake.d.ts +172 -0
  78. package/dist/ci-phase-intake.d.ts.map +1 -0
  79. package/dist/ci-phase-intake.js +555 -0
  80. package/dist/ci-phase-intake.js.map +1 -0
  81. package/dist/ci-phase-tasking.d.ts +205 -0
  82. package/dist/ci-phase-tasking.d.ts.map +1 -0
  83. package/dist/ci-phase-tasking.js +906 -0
  84. package/dist/ci-phase-tasking.js.map +1 -0
  85. package/dist/ci-phase-treeless.d.ts +224 -0
  86. package/dist/ci-phase-treeless.d.ts.map +1 -0
  87. package/dist/ci-phase-treeless.js +1482 -0
  88. package/dist/ci-phase-treeless.js.map +1 -0
  89. package/dist/ci-read-token.d.ts +47 -0
  90. package/dist/ci-read-token.d.ts.map +1 -0
  91. package/dist/ci-read-token.js +80 -0
  92. package/dist/ci-read-token.js.map +1 -0
  93. package/dist/cli.d.ts.map +1 -1
  94. package/dist/cli.js +447 -22
  95. package/dist/cli.js.map +1 -1
  96. package/dist/close-job-template.d.ts +10 -1
  97. package/dist/close-job-template.d.ts.map +1 -1
  98. package/dist/close-job-template.js +46 -14
  99. package/dist/close-job-template.js.map +1 -1
  100. package/dist/close-job.d.ts +20 -5
  101. package/dist/close-job.d.ts.map +1 -1
  102. package/dist/close-job.js +65 -12
  103. package/dist/close-job.js.map +1 -1
  104. package/dist/complete.d.ts.map +1 -1
  105. package/dist/complete.js +20 -1
  106. package/dist/complete.js.map +1 -1
  107. package/dist/config.d.ts +41 -44
  108. package/dist/config.d.ts.map +1 -1
  109. package/dist/config.js +2 -4
  110. package/dist/config.js.map +1 -1
  111. package/dist/continue-branch.d.ts +63 -15
  112. package/dist/continue-branch.d.ts.map +1 -1
  113. package/dist/continue-branch.js +75 -8
  114. package/dist/continue-branch.js.map +1 -1
  115. package/dist/crashed-run-save.d.ts +73 -0
  116. package/dist/crashed-run-save.d.ts.map +1 -0
  117. package/dist/crashed-run-save.js +86 -0
  118. package/dist/crashed-run-save.js.map +1 -0
  119. package/dist/cwd-section.d.ts.map +1 -1
  120. package/dist/cwd-section.js +10 -2
  121. package/dist/cwd-section.js.map +1 -1
  122. package/dist/decision-engine.d.ts +10 -0
  123. package/dist/decision-engine.d.ts.map +1 -1
  124. package/dist/decision-engine.js.map +1 -1
  125. package/dist/do-config.d.ts +2 -24
  126. package/dist/do-config.d.ts.map +1 -1
  127. package/dist/do-config.js +1 -33
  128. package/dist/do-config.js.map +1 -1
  129. package/dist/do.d.ts +149 -1
  130. package/dist/do.d.ts.map +1 -1
  131. package/dist/do.js +115 -25
  132. package/dist/do.js.map +1 -1
  133. package/dist/dorfl-item-template.d.ts +98 -0
  134. package/dist/dorfl-item-template.d.ts.map +1 -0
  135. package/dist/dorfl-item-template.js +504 -0
  136. package/dist/dorfl-item-template.js.map +1 -0
  137. package/dist/env-config.d.ts.map +1 -1
  138. package/dist/env-config.js +7 -5
  139. package/dist/env-config.js.map +1 -1
  140. package/dist/frontmatter.d.ts +52 -0
  141. package/dist/frontmatter.d.ts.map +1 -1
  142. package/dist/frontmatter.js +136 -2
  143. package/dist/frontmatter.js.map +1 -1
  144. package/dist/gc.d.ts +13 -0
  145. package/dist/gc.d.ts.map +1 -1
  146. package/dist/gc.js +16 -2
  147. package/dist/gc.js.map +1 -1
  148. package/dist/git.d.ts +18 -1
  149. package/dist/git.d.ts.map +1 -1
  150. package/dist/git.js +70 -5
  151. package/dist/git.js.map +1 -1
  152. package/dist/harness.d.ts +44 -5
  153. package/dist/harness.d.ts.map +1 -1
  154. package/dist/harness.js +24 -1
  155. package/dist/harness.js.map +1 -1
  156. package/dist/index.d.ts +11 -4
  157. package/dist/index.d.ts.map +1 -1
  158. package/dist/index.js +7 -3
  159. package/dist/index.js.map +1 -1
  160. package/dist/install-ci-action-pins.d.ts +123 -0
  161. package/dist/install-ci-action-pins.d.ts.map +1 -0
  162. package/dist/install-ci-action-pins.js +190 -0
  163. package/dist/install-ci-action-pins.js.map +1 -0
  164. package/dist/install-ci-actions-pr-creation.d.ts +70 -0
  165. package/dist/install-ci-actions-pr-creation.d.ts.map +1 -0
  166. package/dist/install-ci-actions-pr-creation.js +106 -0
  167. package/dist/install-ci-actions-pr-creation.js.map +1 -0
  168. package/dist/install-ci-capabilities/dorfl-item.d.ts +12 -0
  169. package/dist/install-ci-capabilities/dorfl-item.d.ts.map +1 -0
  170. package/dist/install-ci-capabilities/dorfl-item.js +26 -0
  171. package/dist/install-ci-capabilities/dorfl-item.js.map +1 -0
  172. package/dist/install-ci-core.d.ts +155 -37
  173. package/dist/install-ci-core.d.ts.map +1 -1
  174. package/dist/install-ci-core.js +304 -200
  175. package/dist/install-ci-core.js.map +1 -1
  176. package/dist/install-ci-github.d.ts +47 -2
  177. package/dist/install-ci-github.d.ts.map +1 -1
  178. package/dist/install-ci-github.js +113 -1
  179. package/dist/install-ci-github.js.map +1 -1
  180. package/dist/install-ci.d.ts +25 -6
  181. package/dist/install-ci.d.ts.map +1 -1
  182. package/dist/install-ci.js +72 -36
  183. package/dist/install-ci.js.map +1 -1
  184. package/dist/intake-marker.d.ts +6 -1
  185. package/dist/intake-marker.d.ts.map +1 -1
  186. package/dist/intake-marker.js.map +1 -1
  187. package/dist/intake-triage.d.ts.map +1 -1
  188. package/dist/intake-triage.js +6 -2
  189. package/dist/intake-triage.js.map +1 -1
  190. package/dist/intake-trigger-template.d.ts +31 -25
  191. package/dist/intake-trigger-template.d.ts.map +1 -1
  192. package/dist/intake-trigger-template.js +107 -292
  193. package/dist/intake-trigger-template.js.map +1 -1
  194. package/dist/intake.d.ts +186 -4
  195. package/dist/intake.d.ts.map +1 -1
  196. package/dist/intake.js +533 -416
  197. package/dist/intake.js.map +1 -1
  198. package/dist/integration-core.d.ts +154 -1
  199. package/dist/integration-core.d.ts.map +1 -1
  200. package/dist/integration-core.js +759 -486
  201. package/dist/integration-core.js.map +1 -1
  202. package/dist/integrator.d.ts +12 -0
  203. package/dist/integrator.d.ts.map +1 -1
  204. package/dist/integrator.js +21 -0
  205. package/dist/integrator.js.map +1 -1
  206. package/dist/isolation.d.ts +12 -2
  207. package/dist/isolation.d.ts.map +1 -1
  208. package/dist/isolation.js +19 -8
  209. package/dist/isolation.js.map +1 -1
  210. package/dist/item-lock.d.ts +93 -11
  211. package/dist/item-lock.d.ts.map +1 -1
  212. package/dist/item-lock.js +233 -65
  213. package/dist/item-lock.js.map +1 -1
  214. package/dist/land-question-residue.d.ts +58 -0
  215. package/dist/land-question-residue.d.ts.map +1 -0
  216. package/dist/land-question-residue.js +95 -0
  217. package/dist/land-question-residue.js.map +1 -0
  218. package/dist/lifecycle-gather.d.ts +16 -0
  219. package/dist/lifecycle-gather.d.ts.map +1 -1
  220. package/dist/lifecycle-gather.js +54 -6
  221. package/dist/lifecycle-gather.js.map +1 -1
  222. package/dist/merge-answer.d.ts +41 -0
  223. package/dist/merge-answer.d.ts.map +1 -0
  224. package/dist/merge-answer.js +60 -0
  225. package/dist/merge-answer.js.map +1 -0
  226. package/dist/merge-question-surfacer.d.ts +105 -30
  227. package/dist/merge-question-surfacer.d.ts.map +1 -1
  228. package/dist/merge-question-surfacer.js +202 -91
  229. package/dist/merge-question-surfacer.js.map +1 -1
  230. package/dist/merge-question-tick.d.ts +64 -0
  231. package/dist/merge-question-tick.d.ts.map +1 -0
  232. package/dist/merge-question-tick.js +96 -0
  233. package/dist/merge-question-tick.js.map +1 -0
  234. package/dist/mint-adr.d.ts.map +1 -1
  235. package/dist/mint-adr.js +20 -2
  236. package/dist/mint-adr.js.map +1 -1
  237. package/dist/needs-attention.d.ts +72 -2
  238. package/dist/needs-attention.d.ts.map +1 -1
  239. package/dist/needs-attention.js +275 -38
  240. package/dist/needs-attention.js.map +1 -1
  241. package/dist/phase-recorder.d.ts +168 -0
  242. package/dist/phase-recorder.d.ts.map +1 -0
  243. package/dist/phase-recorder.js +218 -0
  244. package/dist/phase-recorder.js.map +1 -0
  245. package/dist/phase.d.ts +94 -0
  246. package/dist/phase.d.ts.map +1 -0
  247. package/dist/phase.js +148 -0
  248. package/dist/phase.js.map +1 -0
  249. package/dist/pi-harness.d.ts.map +1 -1
  250. package/dist/pi-harness.js +19 -6
  251. package/dist/pi-harness.js.map +1 -1
  252. package/dist/prepare.d.ts.map +1 -1
  253. package/dist/prepare.js +4 -0
  254. package/dist/prepare.js.map +1 -1
  255. package/dist/prompt.d.ts +4 -0
  256. package/dist/prompt.d.ts.map +1 -1
  257. package/dist/prompt.js +48 -1
  258. package/dist/prompt.js.map +1 -1
  259. package/dist/protocol/CLAIM-PROTOCOL.md +3 -1
  260. package/dist/protocol/WORK-CONTRACT.md +1 -1
  261. package/dist/reap-branches.d.ts +48 -0
  262. package/dist/reap-branches.d.ts.map +1 -1
  263. package/dist/reap-branches.js +64 -0
  264. package/dist/reap-branches.js.map +1 -1
  265. package/dist/ref-write.d.ts +198 -0
  266. package/dist/ref-write.d.ts.map +1 -0
  267. package/dist/ref-write.js +79 -0
  268. package/dist/ref-write.js.map +1 -0
  269. package/dist/repo-config.js +8 -8
  270. package/dist/repo-config.js.map +1 -1
  271. package/dist/repo-mirror.d.ts +36 -0
  272. package/dist/repo-mirror.d.ts.map +1 -1
  273. package/dist/repo-mirror.js +91 -1
  274. package/dist/repo-mirror.js.map +1 -1
  275. package/dist/review-verdict.d.ts +1 -1
  276. package/dist/review-verdict.js +1 -1
  277. package/dist/run.d.ts +7 -1
  278. package/dist/run.d.ts.map +1 -1
  279. package/dist/run.js +28 -4
  280. package/dist/run.js.map +1 -1
  281. package/dist/scan.d.ts +19 -1
  282. package/dist/scan.d.ts.map +1 -1
  283. package/dist/scan.js +21 -8
  284. package/dist/scan.js.map +1 -1
  285. package/dist/sidecar.d.ts +14 -0
  286. package/dist/sidecar.d.ts.map +1 -1
  287. package/dist/sidecar.js +21 -0
  288. package/dist/sidecar.js.map +1 -1
  289. package/dist/single-job-warning.d.ts +63 -0
  290. package/dist/single-job-warning.d.ts.map +1 -0
  291. package/dist/single-job-warning.js +110 -0
  292. package/dist/single-job-warning.js.map +1 -0
  293. package/dist/skills/setup/protocol/CLAIM-PROTOCOL.md +3 -1
  294. package/dist/skills/setup/protocol/WORK-CONTRACT.md +1 -1
  295. package/dist/spec-complete.d.ts +13 -6
  296. package/dist/spec-complete.d.ts.map +1 -1
  297. package/dist/spec-complete.js +23 -11
  298. package/dist/spec-complete.js.map +1 -1
  299. package/dist/start.d.ts.map +1 -1
  300. package/dist/start.js +47 -14
  301. package/dist/start.js.map +1 -1
  302. package/dist/status.d.ts +12 -0
  303. package/dist/status.d.ts.map +1 -1
  304. package/dist/status.js +11 -3
  305. package/dist/status.js.map +1 -1
  306. package/dist/tasking.d.ts +246 -1
  307. package/dist/tasking.d.ts.map +1 -1
  308. package/dist/tasking.js +452 -358
  309. package/dist/tasking.js.map +1 -1
  310. package/dist/triage-persist.d.ts.map +1 -1
  311. package/dist/triage-persist.js +21 -2
  312. package/dist/triage-persist.js.map +1 -1
  313. package/dist/verify-workflow-template.d.ts.map +1 -1
  314. package/dist/verify-workflow-template.js +8 -4
  315. package/dist/verify-workflow-template.js.map +1 -1
  316. package/dist/verify.d.ts.map +1 -1
  317. package/dist/verify.js +4 -0
  318. package/dist/verify.js.map +1 -1
  319. package/dist/watch-session.d.ts +42 -13
  320. package/dist/watch-session.d.ts.map +1 -1
  321. package/dist/watch-session.js +52 -23
  322. package/dist/watch-session.js.map +1 -1
  323. package/dist/work-layout.d.ts +10 -4
  324. package/dist/work-layout.d.ts.map +1 -1
  325. package/dist/work-layout.js +11 -3
  326. package/dist/work-layout.js.map +1 -1
  327. package/dist/workspace.d.ts +65 -4
  328. package/dist/workspace.d.ts.map +1 -1
  329. package/dist/workspace.js +159 -11
  330. package/dist/workspace.js.map +1 -1
  331. package/package.json +1 -1
  332. package/src/advance-ci-template.ts +80 -81
  333. package/src/advance-drivers.ts +45 -6
  334. package/src/advance-isolated.ts +3 -5
  335. package/src/advance-lifecycle-template.ts +375 -538
  336. package/src/advance-loop-driver.ts +3 -5
  337. package/src/advance-treeless-publish.ts +61 -0
  338. package/src/advance.ts +145 -15
  339. package/src/advancing-lock.ts +36 -1
  340. package/src/agent-env.ts +174 -0
  341. package/src/agent-stop.ts +81 -0
  342. package/src/apply-merge-action.ts +401 -154
  343. package/src/apply-stuck-action.ts +2 -2
  344. package/src/ci-agent-result.ts +421 -0
  345. package/src/ci-handoff-apply.ts +737 -0
  346. package/src/ci-handoff-format.ts +926 -0
  347. package/src/ci-handoff-lfs.ts +519 -0
  348. package/src/ci-handoff.ts +392 -0
  349. package/src/ci-lock-outputs.ts +273 -0
  350. package/src/ci-phase-build.ts +1328 -0
  351. package/src/ci-phase-driver.ts +548 -0
  352. package/src/ci-phase-intake.ts +861 -0
  353. package/src/ci-phase-tasking.ts +1255 -0
  354. package/src/ci-phase-treeless.ts +2028 -0
  355. package/src/ci-read-token.ts +90 -0
  356. package/src/cli.ts +591 -29
  357. package/src/close-job-template.ts +52 -15
  358. package/src/close-job.ts +77 -12
  359. package/src/complete.ts +19 -1
  360. package/src/config.ts +43 -48
  361. package/src/continue-branch.ts +121 -16
  362. package/src/crashed-run-save.ts +162 -0
  363. package/src/cwd-section.ts +10 -0
  364. package/src/decision-engine.ts +10 -0
  365. package/src/do-config.ts +2 -57
  366. package/src/do.ts +170 -28
  367. package/src/dorfl-item-template.ts +556 -0
  368. package/src/env-config.ts +7 -5
  369. package/src/frontmatter.ts +155 -2
  370. package/src/gc.ts +27 -2
  371. package/src/git.ts +83 -5
  372. package/src/harness.ts +58 -6
  373. package/src/index.ts +50 -1
  374. package/src/install-ci-action-pins.ts +209 -0
  375. package/src/install-ci-actions-pr-creation.ts +186 -0
  376. package/src/install-ci-capabilities/dorfl-item.ts +33 -0
  377. package/src/install-ci-core.ts +388 -233
  378. package/src/install-ci-github.ts +149 -1
  379. package/src/install-ci.ts +83 -37
  380. package/src/intake-marker.ts +6 -1
  381. package/src/intake-triage.ts +7 -3
  382. package/src/intake-trigger-template.ts +126 -327
  383. package/src/intake.ts +725 -544
  384. package/src/integration-core.ts +975 -523
  385. package/src/integrator.ts +28 -0
  386. package/src/isolation.ts +29 -10
  387. package/src/item-lock.ts +308 -92
  388. package/src/land-question-residue.ts +122 -0
  389. package/src/lifecycle-gather.ts +82 -10
  390. package/src/merge-answer.ts +82 -0
  391. package/src/merge-question-surfacer.ts +320 -112
  392. package/src/merge-question-tick.ts +182 -0
  393. package/src/mint-adr.ts +28 -2
  394. package/src/needs-attention.ts +350 -42
  395. package/src/phase-recorder.ts +350 -0
  396. package/src/phase.ts +177 -0
  397. package/src/pi-harness.ts +25 -5
  398. package/src/prepare.ts +4 -0
  399. package/src/prompt.ts +68 -1
  400. package/src/reap-branches.ts +107 -0
  401. package/src/ref-write.ts +324 -0
  402. package/src/repo-config.ts +8 -8
  403. package/src/repo-mirror.ts +107 -1
  404. package/src/review-verdict.ts +1 -1
  405. package/src/run.ts +47 -6
  406. package/src/scan.ts +37 -7
  407. package/src/sidecar.ts +36 -0
  408. package/src/single-job-warning.ts +135 -0
  409. package/src/spec-complete.ts +36 -14
  410. package/src/start.ts +55 -16
  411. package/src/status.ts +29 -3
  412. package/src/tasking.ts +593 -378
  413. package/src/triage-persist.ts +24 -2
  414. package/src/verify-workflow-template.ts +8 -4
  415. package/src/verify.ts +4 -0
  416. package/src/watch-session.ts +86 -28
  417. package/src/work-layout.ts +11 -3
  418. package/src/workspace.ts +210 -14
package/src/start.ts CHANGED
@@ -5,8 +5,10 @@ import type {SurfaceToNeedsAttentionResult} from './needs-attention.js';
5
5
  import {
6
6
  branchAheadOfArbiter,
7
7
  rebaseContinuedBranchOntoMain,
8
- pushContinuedBranchWithStaleLeaseRetry,
8
+ continueRebaseSentence,
9
+ type ContinueRebaseFailure,
9
10
  } from './continue-branch.js';
11
+ import {refWrite} from './ref-write.js';
10
12
  import {runAsync, type RunResult} from './git.js';
11
13
  import {workFolderRel} from './work-layout.js';
12
14
  import {workBranchRef, parseWorkBranchRef} from './slug-namespace.js';
@@ -368,7 +370,14 @@ async function startFromBacklog(params: {
368
370
  // includes the claim).
369
371
  const switched = await switchToWorkBranch({slug, arbiter, cwd, env, note});
370
372
  if (switched.rebaseConflict) {
371
- return continueConflictResult({slug, arbiter, cwd, env, note});
373
+ return continueConflictResult({
374
+ slug,
375
+ arbiter,
376
+ cwd,
377
+ failure: switched.rebaseFailure,
378
+ env,
379
+ note,
380
+ });
372
381
  }
373
382
  if (switched.pushFailure !== undefined) {
374
383
  return continuePushFailureResult({
@@ -396,6 +405,7 @@ async function continueConflictResult(params: {
396
405
  slug: string;
397
406
  arbiter: string;
398
407
  cwd: string;
408
+ failure: ContinueRebaseFailure | undefined;
399
409
  env: NodeJS.ProcessEnv | undefined;
400
410
  note: (m: string) => void;
401
411
  }): Promise<StartResult> {
@@ -405,7 +415,8 @@ async function continueConflictResult(params: {
405
415
  }
406
416
  const message =
407
417
  `Could not continue '${params.slug}': the kept work branch did not rebase ` +
408
- `cleanly onto ${params.arbiter}/main; marked stuck on its per-item lock ` +
418
+ `cleanly onto ${params.arbiter}/main ` +
419
+ `(${continueRebaseSentence(workBranchRef('task', params.slug), params.failure)}); marked stuck on its per-item lock ` +
409
420
  '(surfaced by status). Resolve against the latest main, or `requeue --reset` ' +
410
421
  'to discard and start fresh.';
411
422
  return {
@@ -479,7 +490,14 @@ async function startFromNeedsAttention(params: {
479
490
 
480
491
  const switched = await switchToWorkBranch({slug, arbiter, cwd, env, note});
481
492
  if (switched.rebaseConflict) {
482
- return continueConflictResult({slug, arbiter, cwd, env, note});
493
+ return continueConflictResult({
494
+ slug,
495
+ arbiter,
496
+ cwd,
497
+ failure: switched.rebaseFailure,
498
+ env,
499
+ note,
500
+ });
483
501
  }
484
502
  if (switched.pushFailure !== undefined) {
485
503
  return continuePushFailureResult({
@@ -531,7 +549,14 @@ async function startFromInProgress(params: {
531
549
 
532
550
  const switched = await switchToWorkBranch({slug, arbiter, cwd, env, note});
533
551
  if (switched.rebaseConflict) {
534
- return continueConflictResult({slug, arbiter, cwd, env, note});
552
+ return continueConflictResult({
553
+ slug,
554
+ arbiter,
555
+ cwd,
556
+ failure: switched.rebaseFailure,
557
+ env,
558
+ note,
559
+ });
535
560
  }
536
561
  if (switched.pushFailure !== undefined) {
537
562
  return continuePushFailureResult({
@@ -557,10 +582,13 @@ interface SwitchResult {
557
582
  /** True iff we CONTINUED from a kept arbiter `work/<slug>` (not a fresh cut). */
558
583
  continued: boolean;
559
584
  /**
560
- * True iff a CONTINUE rebase onto fresh main CONFLICTED (and was aborted,
561
- * never auto-resolved). The caller routes the item to needs-attention (§10).
585
+ * True iff a CONTINUE rebase onto fresh main did not apply (a conflict or any
586
+ * other rebase failure; aborted, never auto-resolved). The caller routes the
587
+ * item to needs-attention (§10), naming {@link rebaseFailure}.
562
588
  */
563
589
  rebaseConflict: boolean;
590
+ /** Why the continue rebase did not apply (set exactly when {@link rebaseConflict} is). */
591
+ rebaseFailure?: ContinueRebaseFailure;
564
592
  /**
565
593
  * Set iff the CONTINUE reconcile push to the arbiter FAILED TERMINALLY (the
566
594
  * stale-lease retry cap was exhausted, or a non-connectivity rejection such as
@@ -673,8 +701,13 @@ async function continueFromKeptBranch(params: {
673
701
  // REBASE onto the freshly-fetched main at onboard-time (§10: rebase, not
674
702
  // merge) so the agent builds on a CURRENT base. Conflict → aborted + reported.
675
703
  const rebase = rebaseContinuedBranchOntoMain(cwd, `${arbiter}/main`, env);
676
- if (rebase.kind === 'conflict') {
677
- return {branch, continued: true, rebaseConflict: true};
704
+ if (rebase.kind !== 'clean') {
705
+ return {
706
+ branch,
707
+ continued: true,
708
+ rebaseConflict: true,
709
+ rebaseFailure: rebase,
710
+ };
678
711
  }
679
712
 
680
713
  // The arbiter `work/<slug>` tip the fetch above brought down, READ AFTER the
@@ -702,7 +735,7 @@ async function continueFromKeptBranch(params: {
702
735
  // needs-attention rather than leaving the committed kept work silently
703
736
  // in-progress.
704
737
  try {
705
- const pushed = pushContinuedBranchWithStaleLeaseRetry({
738
+ const pushed = refWrite.pushContinuedBranch({
706
739
  cwd,
707
740
  branch,
708
741
  arbiter,
@@ -711,8 +744,13 @@ async function continueFromKeptBranch(params: {
711
744
  env,
712
745
  note,
713
746
  });
714
- if (pushed.kind === 'conflict') {
715
- return {branch, continued: true, rebaseConflict: true};
747
+ if (pushed.kind !== 'pushed') {
748
+ return {
749
+ branch,
750
+ continued: true,
751
+ rebaseConflict: true,
752
+ rebaseFailure: pushed,
753
+ };
716
754
  }
717
755
  } catch (err) {
718
756
  const message = err instanceof Error ? err.message : String(err);
@@ -737,7 +775,7 @@ async function continueFromKeptBranch(params: {
737
775
  }
738
776
 
739
777
  /**
740
- * Discriminate the THROW from {@link pushContinuedBranchWithStaleLeaseRetry} at
778
+ * Discriminate the THROW from `pushContinuedBranchWithStaleLeaseRetry` (via `refWrite.pushContinuedBranch`) at
741
779
  * the `start` continue-push site: is it a TOLERATED offline/unreachable-arbiter
742
780
  * outage (the existing best-effort case — `complete` pushes later), or a REAL
743
781
  * terminal failure that must SURFACE (the stale-lease retry cap exhausted, or a
@@ -807,13 +845,14 @@ async function routeContinueConflict(params: {
807
845
  slug: string;
808
846
  arbiter: string;
809
847
  cwd: string;
848
+ failure: ContinueRebaseFailure | undefined;
810
849
  env: NodeJS.ProcessEnv | undefined;
811
850
  note: (m: string) => void;
812
851
  }): Promise<SurfaceToNeedsAttentionResult> {
813
- const {slug, arbiter, cwd, env, note} = params;
852
+ const {slug, arbiter, cwd, failure, env, note} = params;
814
853
  const reason =
815
- `continuing the kept ${arbiter}/${workBranchRef('task', slug)}: rebase onto ` +
816
- `${arbiter}/main conflicted (aborted, never auto-resolved) — run ` +
854
+ `continuing the kept ${arbiter}/${workBranchRef('task', slug)}: ` +
855
+ `${continueRebaseSentence(workBranchRef('task', slug), failure)} — run ` +
817
856
  '`requeue --reconcile` to non-destructively re-sync the mirror and retry ' +
818
857
  'the rebase (keeps the work). Last resort: `requeue --reset` ' +
819
858
  'DESTRUCTIVELY discards the branch and starts fresh.';
package/src/status.ts CHANGED
@@ -4,7 +4,7 @@ import {resolveHarness, type Harness} from './harness.js';
4
4
  // harness registry so `resolveHarness` dispatches pi jobs' liveness to it.
5
5
  import './pi-harness.js';
6
6
  import {type JobState} from './workspace.js';
7
- import {fetchMirrorMainOrWarn} from './repo-mirror.js';
7
+ import {createMirrorRefresher, mirrorInReconcileScope} from './repo-mirror.js';
8
8
  import {formatArbiterStatus, type ArbiterStatusReport} from './arbiter.js';
9
9
  import {
10
10
  listItemLockEntries,
@@ -204,6 +204,18 @@ export interface StatusOptions {
204
204
  * "drain them now" lever.
205
205
  */
206
206
  reconcileLocks?: boolean;
207
+ /**
208
+ * ARBITER SCOPE of the {@link StatusOptions.reconcileLocks} write (task
209
+ * `reconcile-locks-stays-within-the-current-arbiter`, mirroring `gc`'s
210
+ * arbiter-scoped default). When set, ONLY the registered mirror whose arbiter
211
+ * hub key ({@link encodeRepoKey} of its `origin` URL) equals this key has its
212
+ * stale locks RELEASED; every other mirror is merely classified and REPORTED,
213
+ * exactly as without `reconcileLocks`, so a drain run from repo A never reaches
214
+ * repo B's arbiter. `undefined` reconciles EVERY mirror: the CLI passes it
215
+ * undefined only behind the explicit `--all-arbiters`, never by default.
216
+ * Ignored when `reconcileLocks` is not `true`.
217
+ */
218
+ reconcileArbiterKey?: string;
207
219
  /**
208
220
  * Sink for the fetch-first fall-back warning (ADR §5/§6): when a mirror's `main`
209
221
  * cannot be fetched, `status` warns through this and reads that mirror's
@@ -265,11 +277,17 @@ export async function status(options: StatusOptions): Promise<StatusReport> {
265
277
  const lockHeld: RepoLockEntries[] = [];
266
278
  const staleLocks: RepoStaleLocks[] = [];
267
279
  const ledgerDuplicates: RepoLedgerDuplicates[] = [];
280
+ // Dead LOCAL arbiters are summarised on one line after the loop (see
281
+ // `createMirrorRefresher`), not warned once per mirror.
282
+ const refresher = createMirrorRefresher({
283
+ warn: options.warn,
284
+ env: options.env,
285
+ });
268
286
  for (const mirrorPath of options.mirrorPaths ?? []) {
269
287
  // Fetch-first (ADR §5/§6): refresh this mirror's `main` so the duplicate lint
270
288
  // reflects the remote truth. Never fatal — a failed fetch WARNS and falls back
271
289
  // to the mirror's last-known `main`.
272
- fetchMirrorMainOrWarn({mirrorPath, warn: options.warn, env: options.env});
290
+ refresher.refresh(mirrorPath);
273
291
  // CLASSIFY the mirror's held locks against its `main` (fix for the propose-path
274
292
  // lock leak; observation
275
293
  // `every-completed-task-leaves-its-lock-ref-reporting-in-progress`). A
@@ -294,7 +312,14 @@ export async function status(options: StatusOptions): Promise<StatusReport> {
294
312
  const MIRROR_MAIN = {mainRef: 'main'};
295
313
  let staleEntries: string[] = [];
296
314
  let entries: LockEntry[];
297
- if (options.reconcileLocks === true) {
315
+ if (
316
+ options.reconcileLocks === true &&
317
+ mirrorInReconcileScope(
318
+ mirrorPath,
319
+ options.reconcileArbiterKey,
320
+ options.env,
321
+ )
322
+ ) {
298
323
  const reconciled = await reconcileTerminalItemLocks(
299
324
  mirrorPath,
300
325
  'origin',
@@ -350,6 +375,7 @@ export async function status(options: StatusOptions): Promise<StatusReport> {
350
375
  ledgerDuplicates.push({repoPath: mirrorPath, duplicates: dups});
351
376
  }
352
377
  }
378
+ refresher.flush();
353
379
  lockHeld.sort((a, b) => a.repoPath.localeCompare(b.repoPath));
354
380
  staleLocks.sort((a, b) => a.repoPath.localeCompare(b.repoPath));
355
381
  ledgerDuplicates.sort((a, b) => a.repoPath.localeCompare(b.repoPath));