dorfl 0.1.2 → 0.2.1

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 (364) hide show
  1. package/dist/advance-drivers.d.ts +1 -1
  2. package/dist/advance-drivers.d.ts.map +1 -1
  3. package/dist/advance-drivers.js +15 -3
  4. package/dist/advance-drivers.js.map +1 -1
  5. package/dist/advance-lifecycle-template.d.ts.map +1 -1
  6. package/dist/advance-lifecycle-template.js +76 -4
  7. package/dist/advance-lifecycle-template.js.map +1 -1
  8. package/dist/advance-treeless-publish.d.ts +23 -0
  9. package/dist/advance-treeless-publish.d.ts.map +1 -1
  10. package/dist/advance-treeless-publish.js +41 -0
  11. package/dist/advance-treeless-publish.js.map +1 -1
  12. package/dist/advance.d.ts +59 -7
  13. package/dist/advance.d.ts.map +1 -1
  14. package/dist/advance.js +389 -82
  15. package/dist/advance.js.map +1 -1
  16. package/dist/advancing-lock.d.ts +30 -2
  17. package/dist/advancing-lock.d.ts.map +1 -1
  18. package/dist/advancing-lock.js +50 -0
  19. package/dist/advancing-lock.js.map +1 -1
  20. package/dist/agent-launch.d.ts +12 -0
  21. package/dist/agent-launch.d.ts.map +1 -1
  22. package/dist/agent-launch.js +22 -12
  23. package/dist/agent-launch.js.map +1 -1
  24. package/dist/agent-stop.d.ts +40 -2
  25. package/dist/agent-stop.d.ts.map +1 -1
  26. package/dist/agent-stop.js +30 -2
  27. package/dist/agent-stop.js.map +1 -1
  28. package/dist/apply-decide.d.ts +17 -3
  29. package/dist/apply-decide.d.ts.map +1 -1
  30. package/dist/apply-decide.js +36 -7
  31. package/dist/apply-decide.js.map +1 -1
  32. package/dist/apply-merge-action.d.ts +17 -5
  33. package/dist/apply-merge-action.d.ts.map +1 -1
  34. package/dist/apply-merge-action.js +43 -8
  35. package/dist/apply-merge-action.js.map +1 -1
  36. package/dist/apply-persist.d.ts +57 -26
  37. package/dist/apply-persist.d.ts.map +1 -1
  38. package/dist/apply-persist.js +166 -37
  39. package/dist/apply-persist.js.map +1 -1
  40. package/dist/apply-stuck-action.d.ts +151 -0
  41. package/dist/apply-stuck-action.d.ts.map +1 -0
  42. package/dist/apply-stuck-action.js +125 -0
  43. package/dist/apply-stuck-action.js.map +1 -0
  44. package/dist/brand.d.ts +12 -1
  45. package/dist/brand.d.ts.map +1 -1
  46. package/dist/brand.js +2 -1
  47. package/dist/brand.js.map +1 -1
  48. package/dist/cli-spinner.d.ts +1 -1
  49. package/dist/cli-spinner.js +1 -1
  50. package/dist/cli.d.ts +10 -0
  51. package/dist/cli.d.ts.map +1 -1
  52. package/dist/cli.js +320 -63
  53. package/dist/cli.js.map +1 -1
  54. package/dist/close-job-template.js +1 -1
  55. package/dist/complete.d.ts +6 -3
  56. package/dist/complete.d.ts.map +1 -1
  57. package/dist/complete.js +91 -37
  58. package/dist/complete.js.map +1 -1
  59. package/dist/config.d.ts +55 -9
  60. package/dist/config.d.ts.map +1 -1
  61. package/dist/config.js +56 -4
  62. package/dist/config.js.map +1 -1
  63. package/dist/continue-branch.d.ts.map +1 -1
  64. package/dist/continue-branch.js +22 -0
  65. package/dist/continue-branch.js.map +1 -1
  66. package/dist/decision-engine.d.ts +38 -10
  67. package/dist/decision-engine.d.ts.map +1 -1
  68. package/dist/decision-engine.js +10 -6
  69. package/dist/decision-engine.js.map +1 -1
  70. package/dist/do-autopick.d.ts.map +1 -1
  71. package/dist/do-autopick.js +11 -1
  72. package/dist/do-autopick.js.map +1 -1
  73. package/dist/do-config.d.ts +1 -1
  74. package/dist/do.d.ts +49 -56
  75. package/dist/do.d.ts.map +1 -1
  76. package/dist/do.js +419 -30
  77. package/dist/do.js.map +1 -1
  78. package/dist/env-config.d.ts.map +1 -1
  79. package/dist/env-config.js +12 -4
  80. package/dist/env-config.js.map +1 -1
  81. package/dist/failure-cause.d.ts +3 -2
  82. package/dist/failure-cause.d.ts.map +1 -1
  83. package/dist/failure-cause.js +28 -1
  84. package/dist/failure-cause.js.map +1 -1
  85. package/dist/format.d.ts +6 -6
  86. package/dist/format.d.ts.map +1 -1
  87. package/dist/format.js +10 -27
  88. package/dist/format.js.map +1 -1
  89. package/dist/frontmatter.d.ts +16 -4
  90. package/dist/frontmatter.d.ts.map +1 -1
  91. package/dist/frontmatter.js +27 -1
  92. package/dist/frontmatter.js.map +1 -1
  93. package/dist/gc.d.ts +65 -6
  94. package/dist/gc.d.ts.map +1 -1
  95. package/dist/gc.js +126 -9
  96. package/dist/gc.js.map +1 -1
  97. package/dist/github.d.ts +14 -0
  98. package/dist/github.d.ts.map +1 -1
  99. package/dist/github.js +73 -0
  100. package/dist/github.js.map +1 -1
  101. package/dist/harness.d.ts +25 -0
  102. package/dist/harness.d.ts.map +1 -1
  103. package/dist/harness.js.map +1 -1
  104. package/dist/index.d.ts +4 -1
  105. package/dist/index.d.ts.map +1 -1
  106. package/dist/index.js +2 -1
  107. package/dist/index.js.map +1 -1
  108. package/dist/install-ci-branch-protection.d.ts +132 -38
  109. package/dist/install-ci-branch-protection.d.ts.map +1 -1
  110. package/dist/install-ci-branch-protection.js +190 -48
  111. package/dist/install-ci-branch-protection.js.map +1 -1
  112. package/dist/install-ci-core.d.ts +21 -1
  113. package/dist/install-ci-core.d.ts.map +1 -1
  114. package/dist/install-ci-core.js +10 -3
  115. package/dist/install-ci-core.js.map +1 -1
  116. package/dist/install-ci-github.d.ts +32 -0
  117. package/dist/install-ci-github.d.ts.map +1 -1
  118. package/dist/install-ci-github.js +73 -0
  119. package/dist/install-ci-github.js.map +1 -1
  120. package/dist/install-skills.d.ts +123 -0
  121. package/dist/install-skills.d.ts.map +1 -0
  122. package/dist/install-skills.js +100 -0
  123. package/dist/install-skills.js.map +1 -0
  124. package/dist/intake-trigger-template.js +1 -1
  125. package/dist/intake.d.ts +17 -4
  126. package/dist/intake.d.ts.map +1 -1
  127. package/dist/intake.js +23 -7
  128. package/dist/intake.js.map +1 -1
  129. package/dist/integration-core.d.ts +10 -7
  130. package/dist/integration-core.d.ts.map +1 -1
  131. package/dist/integration-core.js +174 -60
  132. package/dist/integration-core.js.map +1 -1
  133. package/dist/integrator.d.ts +1 -1
  134. package/dist/integrator.d.ts.map +1 -1
  135. package/dist/integrator.js +19 -3
  136. package/dist/integrator.js.map +1 -1
  137. package/dist/isolation.d.ts +2 -2
  138. package/dist/isolation.d.ts.map +1 -1
  139. package/dist/isolation.js +9 -0
  140. package/dist/isolation.js.map +1 -1
  141. package/dist/item-lock.d.ts +196 -129
  142. package/dist/item-lock.d.ts.map +1 -1
  143. package/dist/item-lock.js +329 -254
  144. package/dist/item-lock.js.map +1 -1
  145. package/dist/ledger-write.d.ts +31 -26
  146. package/dist/ledger-write.d.ts.map +1 -1
  147. package/dist/ledger-write.js +100 -122
  148. package/dist/ledger-write.js.map +1 -1
  149. package/dist/lifecycle-gather.d.ts +17 -0
  150. package/dist/lifecycle-gather.d.ts.map +1 -1
  151. package/dist/lifecycle-gather.js +7 -1
  152. package/dist/lifecycle-gather.js.map +1 -1
  153. package/dist/lifecycle-pools.d.ts +40 -3
  154. package/dist/lifecycle-pools.d.ts.map +1 -1
  155. package/dist/lifecycle-pools.js +26 -6
  156. package/dist/lifecycle-pools.js.map +1 -1
  157. package/dist/merge-question-surfacer.d.ts +15 -1
  158. package/dist/merge-question-surfacer.d.ts.map +1 -1
  159. package/dist/merge-question-surfacer.js +18 -3
  160. package/dist/merge-question-surfacer.js.map +1 -1
  161. package/dist/migrate-stuck-locks.d.ts +129 -0
  162. package/dist/migrate-stuck-locks.d.ts.map +1 -0
  163. package/dist/migrate-stuck-locks.js +355 -0
  164. package/dist/migrate-stuck-locks.js.map +1 -0
  165. package/dist/needs-attention.d.ts +293 -16
  166. package/dist/needs-attention.d.ts.map +1 -1
  167. package/dist/needs-attention.js +532 -57
  168. package/dist/needs-attention.js.map +1 -1
  169. package/dist/orphan-sidecar.d.ts +8 -4
  170. package/dist/orphan-sidecar.d.ts.map +1 -1
  171. package/dist/orphan-sidecar.js +35 -2
  172. package/dist/orphan-sidecar.js.map +1 -1
  173. package/dist/pi-harness.d.ts +16 -0
  174. package/dist/pi-harness.d.ts.map +1 -1
  175. package/dist/pi-harness.js +82 -2
  176. package/dist/pi-harness.js.map +1 -1
  177. package/dist/placement.d.ts +3 -3
  178. package/dist/placement.js +1 -1
  179. package/dist/prd-to-spec.d.ts.map +1 -1
  180. package/dist/prd-to-spec.js +9 -5
  181. package/dist/prd-to-spec.js.map +1 -1
  182. package/dist/protocol/CLAIM-PROTOCOL.md +17 -10
  183. package/dist/protocol/REVIEW-PROTOCOL.md +4 -1
  184. package/dist/protocol/SURFACE-PROTOCOL.md +16 -2
  185. package/dist/protocol/TASKING-PROTOCOL.md +3 -1
  186. package/dist/protocol/WORK-CONTRACT.md +22 -18
  187. package/dist/protocol/task-template.md +1 -1
  188. package/dist/reap-branches.d.ts +12 -9
  189. package/dist/reap-branches.d.ts.map +1 -1
  190. package/dist/reap-branches.js +25 -7
  191. package/dist/reap-branches.js.map +1 -1
  192. package/dist/recover-isolated.d.ts +12 -0
  193. package/dist/recover-isolated.d.ts.map +1 -1
  194. package/dist/recover-isolated.js +5 -0
  195. package/dist/recover-isolated.js.map +1 -1
  196. package/dist/repo-config.d.ts +23 -2
  197. package/dist/repo-config.d.ts.map +1 -1
  198. package/dist/repo-config.js +53 -7
  199. package/dist/repo-config.js.map +1 -1
  200. package/dist/repo-mirror.d.ts.map +1 -1
  201. package/dist/repo-mirror.js +18 -2
  202. package/dist/repo-mirror.js.map +1 -1
  203. package/dist/review-verdict.js +1 -1
  204. package/dist/review-verdict.js.map +1 -1
  205. package/dist/run.d.ts +1 -1
  206. package/dist/run.d.ts.map +1 -1
  207. package/dist/run.js +54 -19
  208. package/dist/run.js.map +1 -1
  209. package/dist/scan.d.ts +17 -8
  210. package/dist/scan.d.ts.map +1 -1
  211. package/dist/scan.js +22 -8
  212. package/dist/scan.js.map +1 -1
  213. package/dist/select-priority.d.ts +2 -2
  214. package/dist/select-priority.js +1 -1
  215. package/dist/select-priority.js.map +1 -1
  216. package/dist/sidecar-apply.js +1 -1
  217. package/dist/sidecar-apply.js.map +1 -1
  218. package/dist/sidecar.d.ts +45 -10
  219. package/dist/sidecar.d.ts.map +1 -1
  220. package/dist/sidecar.js +82 -2
  221. package/dist/sidecar.js.map +1 -1
  222. package/dist/skills/answer-questions/SKILL.md +89 -0
  223. package/dist/skills/capture-signal/SKILL.md +52 -0
  224. package/dist/skills/convert-from-prd-to-spec/SKILL.md +90 -0
  225. package/dist/skills/drive-tasks/SKILL.md +218 -0
  226. package/dist/skills/from-idea/SKILL.md +83 -0
  227. package/dist/skills/merge-prs/SKILL.md +70 -0
  228. package/dist/skills/orchestrate/SKILL.md +101 -0
  229. package/dist/skills/promote/SKILL.md +35 -0
  230. package/dist/skills/review/SKILL.md +16 -0
  231. package/dist/skills/setup/SKILL.md +258 -0
  232. package/dist/skills/setup/protocol/ADR-FORMAT.md +47 -0
  233. package/dist/skills/setup/protocol/CLAIM-PROTOCOL.md +224 -0
  234. package/dist/skills/setup/protocol/REVIEW-PROTOCOL.md +122 -0
  235. package/dist/skills/setup/protocol/SURFACE-PROTOCOL.md +135 -0
  236. package/dist/skills/setup/protocol/TASKING-PROTOCOL.md +124 -0
  237. package/dist/skills/setup/protocol/WORK-CONTRACT.md +280 -0
  238. package/dist/skills/setup/protocol/spec-template.md +71 -0
  239. package/dist/skills/setup/protocol/task-template.md +65 -0
  240. package/dist/skills/surface-questions/SKILL.md +16 -0
  241. package/dist/skills/to-spec/SKILL.md +34 -0
  242. package/dist/skills/to-task/SKILL.md +19 -0
  243. package/dist/skills/triage-observations/SKILL.md +78 -0
  244. package/dist/skills/work/SKILL.md +51 -0
  245. package/dist/slug-namespace.d.ts +5 -5
  246. package/dist/slug-namespace.js +5 -5
  247. package/dist/slug-namespace.js.map +1 -1
  248. package/dist/spec-complete.d.ts.map +1 -1
  249. package/dist/spec-complete.js +2 -3
  250. package/dist/spec-complete.js.map +1 -1
  251. package/dist/start.d.ts.map +1 -1
  252. package/dist/start.js +51 -57
  253. package/dist/start.js.map +1 -1
  254. package/dist/surface-gate.d.ts.map +1 -1
  255. package/dist/surface-gate.js +10 -3
  256. package/dist/surface-gate.js.map +1 -1
  257. package/dist/surface-persist.js +1 -1
  258. package/dist/surface-persist.js.map +1 -1
  259. package/dist/tasker-review-loop.d.ts +4 -3
  260. package/dist/tasker-review-loop.d.ts.map +1 -1
  261. package/dist/tasker-review-loop.js.map +1 -1
  262. package/dist/tasking-lock.d.ts +2 -2
  263. package/dist/tasking-lock.d.ts.map +1 -1
  264. package/dist/tasking-lock.js +53 -32
  265. package/dist/tasking-lock.js.map +1 -1
  266. package/dist/tasking.d.ts +40 -6
  267. package/dist/tasking.d.ts.map +1 -1
  268. package/dist/tasking.js +224 -12
  269. package/dist/tasking.js.map +1 -1
  270. package/dist/triage-persist.d.ts +10 -6
  271. package/dist/triage-persist.d.ts.map +1 -1
  272. package/dist/triage-persist.js +34 -4
  273. package/dist/triage-persist.js.map +1 -1
  274. package/dist/vendor/incur/agents.d.ts +58 -0
  275. package/dist/vendor/incur/agents.d.ts.map +1 -0
  276. package/dist/vendor/incur/agents.js +343 -0
  277. package/dist/vendor/incur/agents.js.map +1 -0
  278. package/dist/verify-workflow-template.js +1 -1
  279. package/dist/watch-session.d.ts +11 -3
  280. package/dist/watch-session.d.ts.map +1 -1
  281. package/dist/watch-session.js +94 -7
  282. package/dist/watch-session.js.map +1 -1
  283. package/dist/work-layout.d.ts +7 -3
  284. package/dist/work-layout.d.ts.map +1 -1
  285. package/dist/work-layout.js +6 -3
  286. package/dist/work-layout.js.map +1 -1
  287. package/dist/workspace.d.ts +1 -1
  288. package/package.json +2 -2
  289. package/src/advance-drivers.ts +16 -3
  290. package/src/advance-lifecycle-template.ts +89 -4
  291. package/src/advance-treeless-publish.ts +45 -0
  292. package/src/advance.ts +467 -87
  293. package/src/advancing-lock.ts +96 -1
  294. package/src/agent-launch.ts +37 -12
  295. package/src/agent-stop.ts +60 -2
  296. package/src/apply-decide.ts +36 -7
  297. package/src/apply-merge-action.ts +45 -7
  298. package/src/apply-persist.ts +228 -54
  299. package/src/apply-stuck-action.ts +260 -0
  300. package/src/brand.ts +14 -2
  301. package/src/cli-spinner.ts +1 -1
  302. package/src/cli.ts +401 -70
  303. package/src/close-job-template.ts +1 -1
  304. package/src/complete.ts +110 -52
  305. package/src/config.ts +107 -13
  306. package/src/continue-branch.ts +22 -0
  307. package/src/decision-engine.ts +55 -17
  308. package/src/do-autopick.ts +12 -1
  309. package/src/do-config.ts +1 -1
  310. package/src/do.ts +511 -38
  311. package/src/env-config.ts +12 -4
  312. package/src/failure-cause.ts +30 -1
  313. package/src/format.ts +10 -30
  314. package/src/frontmatter.ts +35 -5
  315. package/src/gc.ts +172 -9
  316. package/src/github.ts +78 -0
  317. package/src/harness.ts +25 -0
  318. package/src/index.ts +10 -0
  319. package/src/install-ci-branch-protection.ts +282 -57
  320. package/src/install-ci-core.ts +30 -3
  321. package/src/install-ci-github.ts +86 -0
  322. package/src/install-skills.ts +166 -0
  323. package/src/intake-trigger-template.ts +1 -1
  324. package/src/intake.ts +46 -11
  325. package/src/integration-core.ts +199 -65
  326. package/src/integrator.ts +22 -9
  327. package/src/isolation.ts +11 -2
  328. package/src/item-lock.ts +485 -341
  329. package/src/ledger-write.ts +135 -150
  330. package/src/lifecycle-gather.ts +29 -6
  331. package/src/lifecycle-pools.ts +67 -9
  332. package/src/merge-question-surfacer.ts +28 -4
  333. package/src/migrate-stuck-locks.ts +451 -0
  334. package/src/needs-attention.ts +857 -84
  335. package/src/orphan-sidecar.ts +47 -6
  336. package/src/pi-harness.ts +82 -2
  337. package/src/placement.ts +3 -3
  338. package/src/prd-to-spec.ts +13 -5
  339. package/src/reap-branches.ts +38 -14
  340. package/src/recover-isolated.ts +17 -0
  341. package/src/repo-config.ts +55 -6
  342. package/src/repo-mirror.ts +23 -1
  343. package/src/review-verdict.ts +1 -1
  344. package/src/run.ts +64 -18
  345. package/src/scan.ts +22 -8
  346. package/src/select-priority.ts +3 -3
  347. package/src/sidecar-apply.ts +1 -1
  348. package/src/sidecar.ts +138 -11
  349. package/src/slug-namespace.ts +7 -7
  350. package/src/spec-complete.ts +2 -3
  351. package/src/start.ts +53 -59
  352. package/src/surface-gate.ts +10 -3
  353. package/src/surface-persist.ts +1 -1
  354. package/src/tasker-review-loop.ts +4 -3
  355. package/src/tasking-lock.ts +52 -36
  356. package/src/tasking.ts +261 -17
  357. package/src/triage-persist.ts +56 -12
  358. package/src/vendor/incur/LICENSE +21 -0
  359. package/src/vendor/incur/README.md +19 -0
  360. package/src/vendor/incur/agents.ts +392 -0
  361. package/src/verify-workflow-template.ts +1 -1
  362. package/src/watch-session.ts +102 -7
  363. package/src/work-layout.ts +6 -3
  364. package/src/workspace.ts +1 -1
@@ -64,26 +64,40 @@ export declare const LOCK_REF_PREFIX = "refs/dorfl/lock";
64
64
  export declare function lockEntryFor(item: string): string;
65
65
  /** The lock ref for a type-encoded `<entry>` (`<type>-<slug>`). */
66
66
  export declare function itemLockRef(entry: string): string;
67
+ /**
68
+ * The character class a LITERAL lock-entry name must match to be addressable
69
+ * through `release-lock --entry <literal>` (task
70
+ * `release-lock-entry-escape-hatch-and-literal-entry-reporting`): a NON-EMPTY run
71
+ * of `[A-Za-z0-9._-]` — the SAME shape the minting side produces (`<type>-<slug>`,
72
+ * and the pre-cutover `slice-<slug>` / `prd-<slug>` entries it must be able to
73
+ * name). It deliberately EXCLUDES `/` and whitespace so a literal can never escape
74
+ * the `refs/dorfl/lock/` namespace (a `/` would address a different ref path; a
75
+ * space would break the push refspec). This is the ONLY validation the `--entry`
76
+ * escape hatch performs before the git operation — the entry name is taken
77
+ * literally otherwise, bypassing the namespace mapping the item-form path uses.
78
+ */
79
+ export declare function isValidLockEntryName(entry: string): boolean;
67
80
  /** WHAT holds the lock — the three mutually-exclusive actions over one item. */
68
81
  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
82
  /**
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.
83
+ * Health of the hold. Post-CONTRACT step (task `retire-stuck-lock-state`, spec
84
+ * `surface-stuck-as-questions-and-retire-stuck-lock-state`) this collapses to a
85
+ * single value: `active` = the in-flight hold. The formerly-second value
86
+ * `stuck` (needs-attention) is RETIRED — a bounce now SURFACES a question
87
+ * sidecar + `needsAnswers:true` on `<arbiter>/main` and RELEASES the lock, so a
88
+ * parked item is a `needsAnswers:true` pool item on `main`, NEVER a `stuck`
89
+ * lock. The `state` field is kept (single-value) so serialised entries continue
90
+ * to round-trip and downstream readers still see a stable shape. The `reason`
91
+ * and `questions` fields that USED to ride on a `stuck` entry are gone — that
92
+ * prose lives on the surfaced sidecar on `main`, not on the lock entry.
93
+ */
94
+ export type LockState = 'active';
95
+ /**
96
+ * The lock entry: `action` × `state` (the state axis is now degenerate — see
97
+ * {@link LockState}) plus the holder/since stamps. Post-CONTRACT step (task
98
+ * `retire-stuck-lock-state`) it carries NO `reason`/`questions` — the sole
99
+ * parked-item mechanism is the surfaced `needsAnswers:true` sidecar on
100
+ * `<arbiter>/main`.
87
101
  */
88
102
  export interface LockEntry {
89
103
  entry: string;
@@ -91,8 +105,6 @@ export interface LockEntry {
91
105
  state: LockState;
92
106
  holder: string;
93
107
  since: string;
94
- reason?: string;
95
- questions?: string[];
96
108
  }
97
109
  /** Outcome of an acquire attempt. `acquired` = we hold it; `lost` = someone else
98
110
  * does (a genuine same-item conflict). `error` = environment/usage. */
@@ -113,21 +125,20 @@ export interface ReleaseResult {
113
125
  message: string;
114
126
  }
115
127
  /**
116
- * Outcome of an AMEND-style transition (mark-stuck / resume / requeue) — the
117
- * lock-entry STATE MACHINE's interior moves (spec `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, …).
128
+ * Outcome of an AMEND-style transition (resume-crash-orphan / requeue) — the
129
+ * lock-entry STATE MACHINE's interior moves. Post-CONTRACT step (task
130
+ * `retire-stuck-lock-state`) the `mark-stuck` transition + the `wrong-state`
131
+ * verdict are retired with the `stuck` state itself.
132
+ * - `transitioned` — we won the CAS; the entry is now at the target state
133
+ * (or removed, for requeue).
134
+ * - `not-held` — there is no entry to transition (the move's precondition
135
+ * is a held entry; absent illegal here).
136
+ * - `lost` — the leased CAS was rejected because a CONCURRENT writer
137
+ * changed the ref between our read and our push (a genuine
138
+ * same-item race).
139
+ * - `error` — environment/usage (missing item, ).
129
140
  */
130
- export type TransitionOutcome = 'transitioned' | 'not-held' | 'wrong-state' | 'lost' | 'error';
141
+ export type TransitionOutcome = 'transitioned' | 'not-held' | 'lost' | 'error';
131
142
  export interface TransitionResult {
132
143
  outcome: TransitionOutcome;
133
144
  /** The type-encoded lock entry (`<type>-<slug>`) the transition keyed onto. */
@@ -139,13 +150,11 @@ export interface TransitionResult {
139
150
  }
140
151
  /**
141
152
  * 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.
153
+ * advancing marker, so it round-trips and is previewable). Post-CONTRACT step
154
+ * (task `retire-stuck-lock-state`) the body carries ONLY the identity block
155
+ * no `## Reason` / `## Questions` sections, because the retired `stuck` state
156
+ * was the only state that populated them. {@link parseLockEntry} is the inverse
157
+ * and tolerates a legacy body with those headings by ignoring them.
149
158
  */
150
159
  export declare function serialiseLockEntry(e: LockEntry): string;
151
160
  export interface AcquireOptions {
@@ -184,6 +193,40 @@ export interface ReleaseOptions {
184
193
  * becomes unreachable for gc. Idempotent: deleting an absent ref is `not-held`.
185
194
  */
186
195
  export declare function releaseItemLock(opts: ReleaseOptions): Promise<ReleaseResult>;
196
+ export interface ReleaseLiteralOptions {
197
+ /**
198
+ * The LITERAL lock-entry name (`<type>-<slug>`, or a pre-cutover
199
+ * `slice-<slug>` / `prd-<slug>`) to release VERBATIM — taken as-is, bypassing
200
+ * the namespace mapping {@link lockEntryFor} applies. MUST pass
201
+ * {@link isValidLockEntryName}.
202
+ */
203
+ entry: string;
204
+ cwd: string;
205
+ arbiter?: string;
206
+ env?: NodeJS.ProcessEnv;
207
+ }
208
+ /**
209
+ * The `release-lock --entry <literal>` ESCAPE HATCH (task
210
+ * `release-lock-entry-escape-hatch-and-literal-entry-reporting`): release a lock
211
+ * whose `<entry>` name is NOT derivable from any CURRENT item-form — a lock minted
212
+ * BEFORE the slice→task / `prd-to-spec` vocabulary cutover (`slice-<slug>`,
213
+ * `prd-<slug>`), which the item-form path can no longer name because there is no
214
+ * item-form that produces those entries anymore.
215
+ *
216
+ * It takes the `<entry>` LITERALLY (bypassing {@link lockEntryFor} /
217
+ * {@link resolveSidecarIdentity}, the namespace mapping the item-form path uses)
218
+ * and targets `refs/dorfl/lock/<entry>` directly, then reuses the SAME entry-keyed
219
+ * leased-delete core {@link releaseItemLock} uses ({@link releaseLockEntry}) — the
220
+ * SAME lock-lease acquisition, push, absent-is-success no-op, exit codes, and
221
+ * mirror handling. There is NO second delete path.
222
+ *
223
+ * The trust model is UNCHANGED: a human still asserts the lock is dead by NAMING
224
+ * it; the only thing `--entry` drops is the assumption that the entry name is
225
+ * derivable from a current item-form. Rejects (`error`) an `<entry>` that fails
226
+ * {@link isValidLockEntryName} BEFORE any git operation, so a literal can never
227
+ * escape the `refs/dorfl/lock/` namespace.
228
+ */
229
+ export declare function releaseLiteralLockEntry(opts: ReleaseLiteralOptions): Promise<ReleaseResult>;
187
230
  /** Outcome of a GUARDED release ({@link releaseHeldItemLock}): the caller HELD the
188
231
  * lock, so an absent ref is NOT benign — it is `vanished` (the ref was deleted
189
232
  * under us, an abort signal). */
@@ -219,34 +262,25 @@ export declare function releaseHeldItemLock(opts: ReleaseOptions): Promise<Relea
219
262
  * ref was removed), `lost` (a concurrent change moved the ref between the read and
220
263
  * the delete — the lease was REJECTED, never `--force`d), or `error`. */
221
264
  export type LeasedDeleteOutcome = 'deleted' | 'lost' | 'error';
265
+ /**
266
+ * COMPATIBILITY SHIM (post `retire-stuck-lock-state`): the `stuck` lock STATE
267
+ * is retired — there is no `active → stuck` amend to perform any more, and no
268
+ * live path calls this. It is kept exported as a NO-OP that returns success
269
+ * (`transitioned` when a held entry is present, `not-held` otherwise) so
270
+ * downstream test suites that USED to seed a "stuck" scenario via this
271
+ * primitive continue to build. A shim'd `stuck` lock does NOT actually flip
272
+ * state; the lock stays `active` (which is the only admitted state) and any
273
+ * assertion that keys off `state === 'stuck'` is now vacuously false — the
274
+ * point of the migration.
275
+ */
222
276
  export interface MarkStuckOptions {
223
- /** The NAMESPACED item identity (same forms as {@link AcquireOptions.item}). */
224
277
  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
- */
278
+ reason?: string;
233
279
  questions?: string[];
234
280
  cwd: string;
235
281
  arbiter?: string;
236
282
  env?: NodeJS.ProcessEnv;
237
283
  }
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
284
  export declare function markStuckItemLock(opts: MarkStuckOptions): Promise<TransitionResult>;
251
285
  export interface ResumeOptions {
252
286
  /** The NAMESPACED item identity (same forms as {@link AcquireOptions.item}). */
@@ -258,26 +292,29 @@ export interface ResumeOptions {
258
292
  env?: NodeJS.ProcessEnv;
259
293
  }
260
294
  /**
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.
295
+ * resume (crash-orphan recovery only, post `retire-stuck-lock-state`): with the
296
+ * `stuck` lock state retired, the ONLY thing to "resume" is the crash-window
297
+ * orphan the ordered bounce transition (surface-FIRST-release-SECOND) leaves
298
+ * when the surface lands on `<arbiter>/main` but the release never runs. If the
299
+ * held lock is `active` AND the item is SURFACED on `<arbiter>/main`
300
+ * (`needsAnswers:true` + sidecar) AND not terminal, `main` is authoritative:
301
+ * clear the ref via the SHARED leased delete (never `--force`) so the lock
302
+ * converges rather than dangling forever. Every OTHER combination is a no-op
303
+ * from this verb's perspective: an in-flight active hold that is NOT surfaced
304
+ * is a healthy build (`wrong-state` — nothing to resume); no lock is
305
+ * `not-held`. There is no `stuck → active` transition anymore: a parked item
306
+ * is a `needsAnswers:true` pool item on `main`, drained by answering the
307
+ * sidecar (via the apply rung), not by "resuming" a lock.
269
308
  */
270
309
  export declare function resumeItemLock(opts: ResumeOptions): Promise<TransitionResult>;
271
310
  /**
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`).
311
+ * requeue: give up on a held lock and return the item to the pool by REMOVING
312
+ * the entry. Post-CONTRACT step (task `retire-stuck-lock-state`) there is NO
313
+ * `stuck` state to guard against the held lock is always `active`, so
314
+ * requeue works on any held entry (a leased delete; a concurrent change ⇒
315
+ * `lost`). The body never moved (it rests in the pool on `main`), so requeue
316
+ * is purely "release the lock"; the kept `work/<slug>` branch remains for
317
+ * recovery.
281
318
  */
282
319
  export declare function requeueItemLock(opts: ReleaseOptions): Promise<TransitionResult>;
283
320
  /**
@@ -304,8 +341,13 @@ export declare function readItemLock(opts: ReleaseOptions): Promise<LockEntry |
304
341
  export declare function terminalMainPaths(type: SidecarType, slug: string): string[];
305
342
  /** The outcome of a cross-substrate reconciliation of one item's lock against
306
343
  * the authoritative `main` durable record (spec `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';
344
+ * US #9/#10; ADR `ledger-status-on-per-item-lock-refs`). Post-CONTRACT step
345
+ * (task `retire-stuck-lock-state`) the two `stuck`-flavoured outcomes
346
+ * (`cleared-stuck-terminal`, `kept-stuck`) are gone with the state itself; a
347
+ * parked item is now a `needsAnswers:true` pool item on `main`, so the
348
+ * `cleared-stale` verdict now ALSO covers the crash-window orphan (active +
349
+ * surfaced-on-main). */
350
+ export type ReconcileOutcome = 'cleared-stale' | 'kept-in-flight' | 'no-lock' | 'error';
309
351
  export interface ReconcileResult {
310
352
  outcome: ReconcileOutcome;
311
353
  /** The type-encoded lock entry (`<type>-<slug>`) reconciled. */
@@ -328,17 +370,23 @@ export interface ReconcileResult {
328
370
  * per {@link terminalMainPaths}) with a STILL-HELD lock — a stale lock with no
329
371
  * in-flight work behind it. This is the recovery that converges it.
330
372
  *
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
373
+ * THE RECOVERY RULE (the `main` record is authoritative over an ORPHAN lock,
374
+ * broadened by task `reaper-reap-terminal-stuck-lock-orphans`; ADR
375
+ * `ledger-status-on-per-item-lock-refs` § Addendum 2026-07-10):
376
+ * - `main` is TERMINAL + the held lock is `active` STRANDED (the crash was
377
+ * after the durable move, before the release) CLEAR it (`cleared-stale`).
378
+ * - `main` is TERMINAL + the held lock is `stuck` → CRASH-ORPHAN (`done` +
379
+ * `stuck` LEGITIMATELY co-existed during a rebase-conflict bounce, US #10,
380
+ * but the item then reached its terminal folder by ANY path — human finish,
381
+ * re-drive, manual fixup+merge leaving the stuck lock as an orphan the
382
+ * `main` record supersedes) → CLEAR it (`cleared-stuck-terminal`).
383
+ * - `main` is NOT terminal + the held lock is `stuck` → the GENUINE
384
+ * human-attention case (`kept-stuck`); NEVER auto-cleared here (a human
385
+ * resolves via `resume`/`requeue`/`release-lock`). This is the invariant
386
+ * the contract loosening MUST preserve.
387
+ * - `main` is NOT terminal + the held lock is `active` → the NORMAL in-flight
340
388
  * state (`kept-in-flight`); the lock is doing its job, leave it.
341
- * - no lock at all → `no-lock` (at rest).
389
+ * - no lock at all → `no-lock` (at rest).
342
390
  *
343
391
  * Best-effort + idempotent: it NEVER throws (a fetch/read fault degrades to
344
392
  * `error`, leaving the lock untouched — the safe direction), and re-running it
@@ -388,27 +436,30 @@ export declare function reconcileItemLockAgainstMain(opts: ReleaseOptions): Prom
388
436
  * `error`).
389
437
  */
390
438
  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. */
439
+ /** One lingering lock in the `gc --ledger` orphaned-lock REPORT: the held entry
440
+ * plus the read-only cross-substrate {@link ReconcileOutcome} classification of
441
+ * it against the authoritative `main` durable record. Reported, NEVER cleared
442
+ * by the report itself. */
395
443
  export interface LockReportEntry {
396
- /** The full held lock entry (action × state + holder/since/reason). */
444
+ /** The full held lock entry (action × state + holder/since). */
397
445
  lock: LockEntry;
398
446
  /** The lock ref (`refs/dorfl/lock/<entry>`). */
399
447
  ref: string;
400
448
  /**
401
449
  * 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).
450
+ * - `kept-in-flight` — a normal in-flight hold (active, not terminal on `main`).
451
+ * - `cleared-stale` the lock is reconcilable: terminal on `main` (stranded)
452
+ * OR non-terminal + SURFACED (`needsAnswers:true` + sidecar) = crash-window
453
+ * orphan; a reaper (or `release-lock`) clears it (NOT auto-cleared by the
454
+ * report no auto-sweep here).
408
455
  * - `error` — a per-item classification fault (kept verbatim).
409
456
  */
410
457
  reconcile: ReconcileOutcome;
411
458
  }
459
+ /** True iff a {@link ReconcileOutcome} names an ORPHAN class the
460
+ * `--reap-stale-locks` sweep can auto-clear via the shared leased delete.
461
+ * Post-`retire-stuck-lock-state` this is just `cleared-stale`. */
462
+ export declare function isReapableTerminalOrphan(outcome: ReconcileOutcome): boolean;
412
463
  /** The `gc --ledger` stuck/orphaned-lock REPORT (spec
413
464
  * `ledger-status-per-item-lock-refs` US #14): every lingering per-item lock on the
414
465
  * arbiter, each classified read-only against `main`. An EMPTY list = no locks held
@@ -462,22 +513,19 @@ export declare function reportItemLocks(cwd: string, arbiter?: string, env?: Nod
462
513
  */
463
514
  export declare function itemLockReportNeedsAttention(report: ItemLockReport): boolean;
464
515
  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.
516
+ /** Per-lock outcome of the human-invoked {@link reapStaleItemLocks} SWEEP.
517
+ * Post-`retire-stuck-lock-state` the `stuck`-flavoured verdicts
518
+ * (`reaped-stuck-terminal`, `kept-stuck`) are gone with the state itself.
519
+ * - `reaped` — a `cleared-stale` lock cleared via the SHARED leased delete.
468
520
  * - `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
521
+ * re-read the ref (`no-lock`).
522
+ * - `kept-in-flight` left untouched (active, non-terminal, not surfaced a
523
+ * healthy build).
524
+ * - `lost` — a reapable-orphan candidate whose leased delete was REJECTED
477
525
  * (the ref changed concurrently to a DIFFERENT value);
478
526
  * REPORTED, never `--force`d.
479
527
  * - `error` — a per-item classification/clear fault (left untouched). */
480
- export type ReapOutcome = 'reaped' | 'already-reaped' | 'kept-stuck' | 'kept-in-flight' | 'lost' | 'error';
528
+ export type ReapOutcome = 'reaped' | 'already-reaped' | 'kept-in-flight' | 'lost' | 'error';
481
529
  /** One lock's disposition in the {@link ReapReport}. */
482
530
  export interface ReapEntry {
483
531
  /** The full lock entry as the report saw it (action × state + holder/since). */
@@ -495,10 +543,10 @@ export interface ReapEntry {
495
543
  * race); a `kept-in-flight` is the normal healthy state and does NOT. */
496
544
  export interface ReapReport {
497
545
  entries: ReapEntry[];
546
+ /** Count of `cleared-stale` locks reaped (terminal-on-main + active, OR
547
+ * non-terminal + surfaced = crash-window orphan). */
498
548
  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. */
549
+ /** BENIGN already-reaped count: the sweep found the ref already gone (`no-lock`). */
502
550
  alreadyReaped: number;
503
551
  kept: number;
504
552
  lost: number;
@@ -514,13 +562,19 @@ export interface ReapReport {
514
562
  * {@link reconcileItemLockAgainstMain} (the recovery's clear, re-checked fresh per
515
563
  * item) — there is NO parallel clear mechanism.
516
564
  *
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).
565
+ * SCOPE FENCE (the trust model the default preserves; broadened by task
566
+ * `reaper-reap-terminal-stuck-lock-orphans`; ADR
567
+ * `ledger-status-on-per-item-lock-refs` § Addendum 2026-07-10):
568
+ * - it clears the TWO terminal-on-`main` ORPHAN classes ONLY: `cleared-stale`
569
+ * (terminal + `active` = stranded between move and release) AND
570
+ * `cleared-stuck-terminal` (terminal + `stuck` = crash-orphan the auto-reaper
571
+ * used to leave forever). A `kept-stuck` (STUCK + NON-terminal — the
572
+ * genuine human-attention case) and a `kept-in-flight` (`active` +
573
+ * non-terminal — a healthy build) are NEVER reaped, even here. Because each
574
+ * clear goes through {@link reconcileItemLockAgainstMain}, which RE-reads +
575
+ * RE-classifies before deleting, a lock whose item was un-completed on
576
+ * `main` between the report and the sweep is still safe (reconcile returns
577
+ * `kept-*`, not a delete).
524
578
  * - the clear is a LEASED delete: a concurrent change to the ref makes it REJECT
525
579
  * (`lost`), reported — never a blind `--force`.
526
580
  *
@@ -555,6 +609,17 @@ export declare function formatReapReport(report: ReapReport): string[];
555
609
  * {@link lockEntryFor} for the three known namespaces.
556
610
  */
557
611
  export declare function itemFromLockEntry(entry: string): string;
612
+ /**
613
+ * Does `<entry>` reverse-derive to a CURRENT item-form (`<type>:<slug>`), i.e.
614
+ * does it carry a known post-cutover type prefix (`task-`/`spec-`/`observation-`)?
615
+ * FALSE for a pre-cutover `slice-<slug>` / `prd-<slug>` entry (task
616
+ * `release-lock-entry-escape-hatch-and-literal-entry-reporting`): such an entry is
617
+ * UN-NAMEABLE through the item-form `release-lock <item>` path and must be cleared
618
+ * via the `release-lock --entry <literal>` escape hatch instead. This is the
619
+ * predicate the `gc --ledger` report keys off to decide whether to print the
620
+ * copy-pasteable item-form hint or the literal-`--entry` hint.
621
+ */
622
+ export declare function hasCurrentItemForm(entry: string): boolean;
558
623
  /** List the entries (`<type>-<slug>`) currently locked on the arbiter (the
559
624
  * stuck-lock report / `status` read path). */
560
625
  export declare function listItemLocks(cwd: string, arbiter?: string, env?: NodeJS.ProcessEnv): Promise<string[]>;
@@ -574,7 +639,7 @@ export declare function listItemLockEntries(cwd: string, arbiter?: string, env?:
574
639
  * List the TASK slugs currently lock-held on the arbiter — the held-slug set the
575
640
  * `ready/` pool readers SUBTRACT (spec `ledger-status-per-item-lock-refs` US #15;
576
641
  * 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
642
+ * and keeps only the `task-<slug>` entries (a spec/observation lock does not gate
578
643
  * the TASK pool), mapping each to its bare `<slug>`.
579
644
  *
580
645
  * LOAD-BEARING since the lock cut-over: the claim NO LONGER moves the body to
@@ -609,11 +674,13 @@ export declare function heldTaskSlugs(cwd: string, arbiter?: string, env?: NodeJ
609
674
  export declare function heldTaskSlugsStrict(cwd: string, arbiter?: string, env?: NodeJS.ProcessEnv): Promise<Set<string>>;
610
675
  /**
611
676
  * 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.
677
+ * inverse of {@link serialiseLockEntry}. Post-`retire-stuck-lock-state` a lock
678
+ * entry whose serialised state is not the single admitted `'active'` value
679
+ * (e.g. a legacy `state: stuck` blob written by an older binary before the
680
+ * one-shot migration ran) is COERCED to `'active'` on read the state is
681
+ * degenerate, and a lingering stuck ref is left for the migration/recovery
682
+ * verbs to clear via `main`-authoritative reconciliation rather than surfaced
683
+ * as a second live state.
617
684
  */
618
685
  export declare function parseLockEntry(body: string): LockEntry | undefined;
619
686
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"item-lock.d.ts","sourceRoot":"","sources":["../src/item-lock.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"item-lock.d.ts","sourceRoot":"","sources":["../src/item-lock.ts"],"names":[],"mappings":"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"}