dorfl 0.1.1 → 0.2.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 (492) hide show
  1. package/dist/advance-ci-template.d.ts +3 -3
  2. package/dist/advance-ci-template.js +1 -1
  3. package/dist/advance-ci-template.js.map +1 -1
  4. package/dist/advance-classify.d.ts +5 -5
  5. package/dist/advance-classify.d.ts.map +1 -1
  6. package/dist/advance-classify.js +4 -4
  7. package/dist/advance-drivers.d.ts +8 -8
  8. package/dist/advance-drivers.d.ts.map +1 -1
  9. package/dist/advance-drivers.js +20 -8
  10. package/dist/advance-drivers.js.map +1 -1
  11. package/dist/advance-isolated.d.ts +3 -3
  12. package/dist/advance-isolated.d.ts.map +1 -1
  13. package/dist/advance-isolated.js +1 -1
  14. package/dist/advance-lifecycle-template.d.ts +2 -2
  15. package/dist/advance-lifecycle-template.d.ts.map +1 -1
  16. package/dist/advance-lifecycle-template.js +85 -13
  17. package/dist/advance-lifecycle-template.js.map +1 -1
  18. package/dist/advance-loop-driver.d.ts +3 -3
  19. package/dist/advance-loop-driver.d.ts.map +1 -1
  20. package/dist/advance-loop-driver.js +1 -1
  21. package/dist/advance-treeless-publish.d.ts +24 -1
  22. package/dist/advance-treeless-publish.d.ts.map +1 -1
  23. package/dist/advance-treeless-publish.js +41 -0
  24. package/dist/advance-treeless-publish.js.map +1 -1
  25. package/dist/advance.d.ts +69 -17
  26. package/dist/advance.d.ts.map +1 -1
  27. package/dist/advance.js +409 -102
  28. package/dist/advance.js.map +1 -1
  29. package/dist/advancing-lock.d.ts +31 -3
  30. package/dist/advancing-lock.d.ts.map +1 -1
  31. package/dist/advancing-lock.js +55 -5
  32. package/dist/advancing-lock.js.map +1 -1
  33. package/dist/agent-launch.d.ts +12 -0
  34. package/dist/agent-launch.d.ts.map +1 -1
  35. package/dist/agent-launch.js +22 -12
  36. package/dist/agent-launch.js.map +1 -1
  37. package/dist/agent-stop.d.ts +40 -2
  38. package/dist/agent-stop.d.ts.map +1 -1
  39. package/dist/agent-stop.js +30 -2
  40. package/dist/agent-stop.js.map +1 -1
  41. package/dist/apply-decide.d.ts +19 -5
  42. package/dist/apply-decide.d.ts.map +1 -1
  43. package/dist/apply-decide.js +38 -9
  44. package/dist/apply-decide.js.map +1 -1
  45. package/dist/apply-merge-action.d.ts +20 -8
  46. package/dist/apply-merge-action.d.ts.map +1 -1
  47. package/dist/apply-merge-action.js +44 -9
  48. package/dist/apply-merge-action.js.map +1 -1
  49. package/dist/apply-persist.d.ts +62 -31
  50. package/dist/apply-persist.d.ts.map +1 -1
  51. package/dist/apply-persist.js +173 -44
  52. package/dist/apply-persist.js.map +1 -1
  53. package/dist/apply-stuck-action.d.ts +151 -0
  54. package/dist/apply-stuck-action.d.ts.map +1 -0
  55. package/dist/apply-stuck-action.js +125 -0
  56. package/dist/apply-stuck-action.js.map +1 -0
  57. package/dist/brand.d.ts +12 -1
  58. package/dist/brand.d.ts.map +1 -1
  59. package/dist/brand.js +2 -1
  60. package/dist/brand.js.map +1 -1
  61. package/dist/buildable-body.d.ts +14 -14
  62. package/dist/buildable-body.js +9 -9
  63. package/dist/claim-cas.d.ts +3 -3
  64. package/dist/claim-cas.js +1 -1
  65. package/dist/claim-cas.js.map +1 -1
  66. package/dist/cli-spinner.d.ts +1 -1
  67. package/dist/cli-spinner.js +1 -1
  68. package/dist/cli.d.ts +10 -0
  69. package/dist/cli.d.ts.map +1 -1
  70. package/dist/cli.js +385 -128
  71. package/dist/cli.js.map +1 -1
  72. package/dist/close-job-template.d.ts +3 -3
  73. package/dist/close-job-template.js +9 -9
  74. package/dist/close-job.d.ts +8 -8
  75. package/dist/close-job.js +25 -25
  76. package/dist/close-job.js.map +1 -1
  77. package/dist/complete.d.ts +9 -6
  78. package/dist/complete.d.ts.map +1 -1
  79. package/dist/complete.js +99 -45
  80. package/dist/complete.js.map +1 -1
  81. package/dist/concurrency.d.ts +1 -1
  82. package/dist/concurrency.js +1 -1
  83. package/dist/config.d.ts +86 -40
  84. package/dist/config.d.ts.map +1 -1
  85. package/dist/config.js +61 -9
  86. package/dist/config.js.map +1 -1
  87. package/dist/continue-branch.d.ts +1 -1
  88. package/dist/continue-branch.d.ts.map +1 -1
  89. package/dist/continue-branch.js +23 -1
  90. package/dist/continue-branch.js.map +1 -1
  91. package/dist/cwd-section.js +1 -1
  92. package/dist/cwd-section.js.map +1 -1
  93. package/dist/decision-engine.d.ts +39 -11
  94. package/dist/decision-engine.d.ts.map +1 -1
  95. package/dist/decision-engine.js +10 -6
  96. package/dist/decision-engine.js.map +1 -1
  97. package/dist/do-autopick.d.ts +6 -6
  98. package/dist/do-autopick.d.ts.map +1 -1
  99. package/dist/do-autopick.js +16 -6
  100. package/dist/do-autopick.js.map +1 -1
  101. package/dist/do-config.d.ts +4 -4
  102. package/dist/do-config.js +3 -3
  103. package/dist/do-config.js.map +1 -1
  104. package/dist/do-remote-auto.d.ts +2 -2
  105. package/dist/do-remote-auto.js +1 -1
  106. package/dist/do.d.ts +74 -81
  107. package/dist/do.d.ts.map +1 -1
  108. package/dist/do.js +439 -50
  109. package/dist/do.js.map +1 -1
  110. package/dist/drop-source.d.ts +2 -2
  111. package/dist/env-config.d.ts.map +1 -1
  112. package/dist/env-config.js +19 -11
  113. package/dist/env-config.js.map +1 -1
  114. package/dist/failure-cause.d.ts +3 -2
  115. package/dist/failure-cause.d.ts.map +1 -1
  116. package/dist/failure-cause.js +28 -1
  117. package/dist/failure-cause.js.map +1 -1
  118. package/dist/format.d.ts +6 -6
  119. package/dist/format.d.ts.map +1 -1
  120. package/dist/format.js +13 -30
  121. package/dist/format.js.map +1 -1
  122. package/dist/frontmatter.d.ts +28 -15
  123. package/dist/frontmatter.d.ts.map +1 -1
  124. package/dist/frontmatter.js +38 -24
  125. package/dist/frontmatter.js.map +1 -1
  126. package/dist/gc.d.ts +65 -6
  127. package/dist/gc.d.ts.map +1 -1
  128. package/dist/gc.js +126 -9
  129. package/dist/gc.js.map +1 -1
  130. package/dist/github.d.ts +14 -0
  131. package/dist/github.d.ts.map +1 -1
  132. package/dist/github.js +73 -0
  133. package/dist/github.js.map +1 -1
  134. package/dist/harness.d.ts +25 -0
  135. package/dist/harness.d.ts.map +1 -1
  136. package/dist/harness.js.map +1 -1
  137. package/dist/index.d.ts +4 -1
  138. package/dist/index.d.ts.map +1 -1
  139. package/dist/index.js +2 -1
  140. package/dist/index.js.map +1 -1
  141. package/dist/install-ci-branch-protection.d.ts +133 -39
  142. package/dist/install-ci-branch-protection.d.ts.map +1 -1
  143. package/dist/install-ci-branch-protection.js +191 -49
  144. package/dist/install-ci-branch-protection.js.map +1 -1
  145. package/dist/install-ci-capabilities/advance-lifecycle.d.ts +1 -1
  146. package/dist/install-ci-capabilities/advance-lifecycle.js +1 -1
  147. package/dist/install-ci-capabilities/close-job.d.ts +1 -1
  148. package/dist/install-ci-capabilities/close-job.js +1 -1
  149. package/dist/install-ci-capabilities/example-noop.d.ts +1 -1
  150. package/dist/install-ci-capabilities/example-noop.js +1 -1
  151. package/dist/install-ci-capabilities/intake.d.ts +2 -2
  152. package/dist/install-ci-capabilities/intake.js +2 -2
  153. package/dist/install-ci-capabilities/verify.d.ts +1 -1
  154. package/dist/install-ci-capabilities/verify.js +1 -1
  155. package/dist/install-ci-core.d.ts +24 -4
  156. package/dist/install-ci-core.d.ts.map +1 -1
  157. package/dist/install-ci-core.js +12 -5
  158. package/dist/install-ci-core.js.map +1 -1
  159. package/dist/install-ci-github.d.ts +33 -1
  160. package/dist/install-ci-github.d.ts.map +1 -1
  161. package/dist/install-ci-github.js +74 -1
  162. package/dist/install-ci-github.js.map +1 -1
  163. package/dist/install-ci.d.ts +1 -1
  164. package/dist/install-ci.js +4 -4
  165. package/dist/install-ci.js.map +1 -1
  166. package/dist/install-skills.d.ts +123 -0
  167. package/dist/install-skills.d.ts.map +1 -0
  168. package/dist/install-skills.js +100 -0
  169. package/dist/install-skills.js.map +1 -0
  170. package/dist/intake-event.d.ts +6 -6
  171. package/dist/intake-event.js +6 -6
  172. package/dist/intake-marker.d.ts +3 -3
  173. package/dist/intake-marker.d.ts.map +1 -1
  174. package/dist/intake-triage.d.ts +1 -1
  175. package/dist/intake-triage.js +2 -2
  176. package/dist/intake-trigger-template.d.ts +8 -8
  177. package/dist/intake-trigger-template.d.ts.map +1 -1
  178. package/dist/intake-trigger-template.js +17 -17
  179. package/dist/intake-trigger-template.js.map +1 -1
  180. package/dist/intake.d.ts +65 -52
  181. package/dist/intake.d.ts.map +1 -1
  182. package/dist/intake.js +92 -76
  183. package/dist/intake.js.map +1 -1
  184. package/dist/integration-core.d.ts +27 -24
  185. package/dist/integration-core.d.ts.map +1 -1
  186. package/dist/integration-core.js +191 -77
  187. package/dist/integration-core.js.map +1 -1
  188. package/dist/integrator.d.ts +1 -1
  189. package/dist/integrator.d.ts.map +1 -1
  190. package/dist/integrator.js +19 -3
  191. package/dist/integrator.js.map +1 -1
  192. package/dist/isolation.d.ts +4 -4
  193. package/dist/isolation.d.ts.map +1 -1
  194. package/dist/isolation.js +9 -0
  195. package/dist/isolation.js.map +1 -1
  196. package/dist/issue-provider.d.ts +4 -4
  197. package/dist/issue-provider.js +1 -1
  198. package/dist/item-lock.d.ts +216 -149
  199. package/dist/item-lock.d.ts.map +1 -1
  200. package/dist/item-lock.js +345 -270
  201. package/dist/item-lock.js.map +1 -1
  202. package/dist/item-path.d.ts +2 -2
  203. package/dist/item-path.js +2 -2
  204. package/dist/ledger-lint.d.ts +9 -9
  205. package/dist/ledger-lint.js +9 -9
  206. package/dist/ledger-read.d.ts +57 -57
  207. package/dist/ledger-read.d.ts.map +1 -1
  208. package/dist/ledger-read.js +24 -24
  209. package/dist/ledger-read.js.map +1 -1
  210. package/dist/ledger-write.d.ts +33 -28
  211. package/dist/ledger-write.d.ts.map +1 -1
  212. package/dist/ledger-write.js +100 -122
  213. package/dist/ledger-write.js.map +1 -1
  214. package/dist/lifecycle-gather.d.ts +18 -1
  215. package/dist/lifecycle-gather.d.ts.map +1 -1
  216. package/dist/lifecycle-gather.js +23 -17
  217. package/dist/lifecycle-gather.js.map +1 -1
  218. package/dist/lifecycle-pools.d.ts +44 -7
  219. package/dist/lifecycle-pools.d.ts.map +1 -1
  220. package/dist/lifecycle-pools.js +27 -7
  221. package/dist/lifecycle-pools.js.map +1 -1
  222. package/dist/merge-question-surfacer.d.ts +18 -4
  223. package/dist/merge-question-surfacer.d.ts.map +1 -1
  224. package/dist/merge-question-surfacer.js +20 -5
  225. package/dist/merge-question-surfacer.js.map +1 -1
  226. package/dist/migrate-stuck-locks.d.ts +129 -0
  227. package/dist/migrate-stuck-locks.d.ts.map +1 -0
  228. package/dist/migrate-stuck-locks.js +355 -0
  229. package/dist/migrate-stuck-locks.js.map +1 -0
  230. package/dist/mint-adr.js +4 -4
  231. package/dist/mirror-pool-scan.d.ts +2 -2
  232. package/dist/mirror-pool-scan.js +3 -3
  233. package/dist/mirror-pool-scan.js.map +1 -1
  234. package/dist/needs-attention.d.ts +304 -27
  235. package/dist/needs-attention.d.ts.map +1 -1
  236. package/dist/needs-attention.js +542 -67
  237. package/dist/needs-attention.js.map +1 -1
  238. package/dist/orphan-sidecar.d.ts +10 -6
  239. package/dist/orphan-sidecar.d.ts.map +1 -1
  240. package/dist/orphan-sidecar.js +35 -2
  241. package/dist/orphan-sidecar.js.map +1 -1
  242. package/dist/pi-harness.d.ts +16 -0
  243. package/dist/pi-harness.d.ts.map +1 -1
  244. package/dist/pi-harness.js +82 -2
  245. package/dist/pi-harness.js.map +1 -1
  246. package/dist/placement.d.ts +8 -8
  247. package/dist/placement.js +3 -3
  248. package/dist/prd-to-spec.d.ts.map +1 -1
  249. package/dist/prd-to-spec.js +9 -5
  250. package/dist/prd-to-spec.js.map +1 -1
  251. package/dist/prompt.d.ts +16 -19
  252. package/dist/prompt.d.ts.map +1 -1
  253. package/dist/prompt.js +17 -19
  254. package/dist/prompt.js.map +1 -1
  255. package/dist/protocol/CLAIM-PROTOCOL.md +17 -10
  256. package/dist/protocol/REVIEW-PROTOCOL.md +4 -1
  257. package/dist/protocol/SURFACE-PROTOCOL.md +16 -2
  258. package/dist/protocol/TASKING-PROTOCOL.md +3 -1
  259. package/dist/protocol/WORK-CONTRACT.md +22 -18
  260. package/dist/protocol/task-template.md +1 -1
  261. package/dist/readiness.d.ts +1 -1
  262. package/dist/reap-branches.d.ts +12 -9
  263. package/dist/reap-branches.d.ts.map +1 -1
  264. package/dist/reap-branches.js +25 -7
  265. package/dist/reap-branches.js.map +1 -1
  266. package/dist/recover-isolated.d.ts +12 -0
  267. package/dist/recover-isolated.d.ts.map +1 -1
  268. package/dist/recover-isolated.js +6 -1
  269. package/dist/recover-isolated.js.map +1 -1
  270. package/dist/repo-config.d.ts +23 -2
  271. package/dist/repo-config.d.ts.map +1 -1
  272. package/dist/repo-config.js +64 -18
  273. package/dist/repo-config.js.map +1 -1
  274. package/dist/repo-mirror.d.ts.map +1 -1
  275. package/dist/repo-mirror.js +18 -2
  276. package/dist/repo-mirror.js.map +1 -1
  277. package/dist/review-gate.d.ts +3 -3
  278. package/dist/review-gate.d.ts.map +1 -1
  279. package/dist/review-gate.js +11 -10
  280. package/dist/review-gate.js.map +1 -1
  281. package/dist/review-verdict.d.ts +2 -2
  282. package/dist/review-verdict.d.ts.map +1 -1
  283. package/dist/review-verdict.js +2 -2
  284. package/dist/review-verdict.js.map +1 -1
  285. package/dist/run.d.ts +2 -2
  286. package/dist/run.d.ts.map +1 -1
  287. package/dist/run.js +58 -23
  288. package/dist/run.js.map +1 -1
  289. package/dist/scan.d.ts +26 -17
  290. package/dist/scan.d.ts.map +1 -1
  291. package/dist/scan.js +29 -15
  292. package/dist/scan.js.map +1 -1
  293. package/dist/select-order.d.ts +1 -1
  294. package/dist/select-priority.d.ts +14 -14
  295. package/dist/select-priority.d.ts.map +1 -1
  296. package/dist/select-priority.js +5 -5
  297. package/dist/select-priority.js.map +1 -1
  298. package/dist/sidecar-apply.js +1 -1
  299. package/dist/sidecar-apply.js.map +1 -1
  300. package/dist/sidecar.d.ts +47 -12
  301. package/dist/sidecar.d.ts.map +1 -1
  302. package/dist/sidecar.js +84 -4
  303. package/dist/sidecar.js.map +1 -1
  304. package/dist/skills/answer-questions/SKILL.md +89 -0
  305. package/dist/skills/capture-signal/SKILL.md +52 -0
  306. package/dist/skills/convert-from-prd-to-spec/SKILL.md +90 -0
  307. package/dist/skills/drive-tasks/SKILL.md +218 -0
  308. package/dist/skills/from-idea/SKILL.md +83 -0
  309. package/dist/skills/merge-prs/SKILL.md +70 -0
  310. package/dist/skills/orchestrate/SKILL.md +101 -0
  311. package/dist/skills/promote/SKILL.md +35 -0
  312. package/dist/skills/review/SKILL.md +16 -0
  313. package/dist/skills/setup/SKILL.md +258 -0
  314. package/dist/skills/setup/protocol/ADR-FORMAT.md +47 -0
  315. package/dist/skills/setup/protocol/CLAIM-PROTOCOL.md +224 -0
  316. package/dist/skills/setup/protocol/REVIEW-PROTOCOL.md +122 -0
  317. package/dist/skills/setup/protocol/SURFACE-PROTOCOL.md +135 -0
  318. package/dist/skills/setup/protocol/TASKING-PROTOCOL.md +124 -0
  319. package/dist/skills/setup/protocol/WORK-CONTRACT.md +280 -0
  320. package/dist/skills/setup/protocol/spec-template.md +71 -0
  321. package/dist/skills/setup/protocol/task-template.md +65 -0
  322. package/dist/skills/surface-questions/SKILL.md +16 -0
  323. package/dist/skills/to-spec/SKILL.md +34 -0
  324. package/dist/skills/to-task/SKILL.md +19 -0
  325. package/dist/skills/triage-observations/SKILL.md +78 -0
  326. package/dist/skills/work/SKILL.md +51 -0
  327. package/dist/slug-namespace.d.ts +6 -6
  328. package/dist/slug-namespace.js +8 -8
  329. package/dist/slug-namespace.js.map +1 -1
  330. package/dist/spec-complete.d.ts.map +1 -1
  331. package/dist/spec-complete.js +4 -5
  332. package/dist/spec-complete.js.map +1 -1
  333. package/dist/start.d.ts +1 -1
  334. package/dist/start.d.ts.map +1 -1
  335. package/dist/start.js +54 -60
  336. package/dist/start.js.map +1 -1
  337. package/dist/status.d.ts +3 -3
  338. package/dist/status.js +4 -4
  339. package/dist/status.js.map +1 -1
  340. package/dist/surface-gate.d.ts +2 -2
  341. package/dist/surface-gate.d.ts.map +1 -1
  342. package/dist/surface-gate.js +10 -3
  343. package/dist/surface-gate.js.map +1 -1
  344. package/dist/surface-persist.d.ts +2 -2
  345. package/dist/surface-persist.d.ts.map +1 -1
  346. package/dist/surface-persist.js +1 -1
  347. package/dist/surface-persist.js.map +1 -1
  348. package/dist/tasker-review-loop.d.ts +11 -10
  349. package/dist/tasker-review-loop.d.ts.map +1 -1
  350. package/dist/tasker-review-loop.js +8 -8
  351. package/dist/tasker-review-loop.js.map +1 -1
  352. package/dist/tasking-eligibility.d.ts +21 -21
  353. package/dist/tasking-eligibility.d.ts.map +1 -1
  354. package/dist/tasking-eligibility.js +10 -10
  355. package/dist/tasking-lock.d.ts +10 -10
  356. package/dist/tasking-lock.d.ts.map +1 -1
  357. package/dist/tasking-lock.js +69 -49
  358. package/dist/tasking-lock.js.map +1 -1
  359. package/dist/tasking.d.ts +73 -39
  360. package/dist/tasking.d.ts.map +1 -1
  361. package/dist/tasking.js +309 -95
  362. package/dist/tasking.js.map +1 -1
  363. package/dist/triage-gate.d.ts +1 -1
  364. package/dist/triage-persist.d.ts +15 -11
  365. package/dist/triage-persist.d.ts.map +1 -1
  366. package/dist/triage-persist.js +48 -18
  367. package/dist/triage-persist.js.map +1 -1
  368. package/dist/vendor/incur/agents.d.ts +58 -0
  369. package/dist/vendor/incur/agents.d.ts.map +1 -0
  370. package/dist/vendor/incur/agents.js +343 -0
  371. package/dist/vendor/incur/agents.js.map +1 -0
  372. package/dist/verify-workflow-template.d.ts +1 -1
  373. package/dist/verify-workflow-template.js +3 -3
  374. package/dist/watch-session.d.ts +11 -3
  375. package/dist/watch-session.d.ts.map +1 -1
  376. package/dist/watch-session.js +94 -7
  377. package/dist/watch-session.js.map +1 -1
  378. package/dist/work-layout.d.ts +15 -9
  379. package/dist/work-layout.d.ts.map +1 -1
  380. package/dist/work-layout.js +14 -9
  381. package/dist/work-layout.js.map +1 -1
  382. package/dist/workspace.d.ts +2 -2
  383. package/package.json +2 -2
  384. package/src/advance-ci-template.ts +4 -4
  385. package/src/advance-classify.ts +5 -5
  386. package/src/advance-drivers.ts +26 -13
  387. package/src/advance-isolated.ts +3 -3
  388. package/src/advance-lifecycle-template.ts +98 -13
  389. package/src/advance-loop-driver.ts +3 -3
  390. package/src/advance-treeless-publish.ts +46 -1
  391. package/src/advance.ts +495 -115
  392. package/src/advancing-lock.ts +102 -7
  393. package/src/agent-launch.ts +37 -12
  394. package/src/agent-stop.ts +60 -2
  395. package/src/apply-decide.ts +38 -9
  396. package/src/apply-merge-action.ts +49 -11
  397. package/src/apply-persist.ts +236 -62
  398. package/src/apply-stuck-action.ts +260 -0
  399. package/src/brand.ts +14 -2
  400. package/src/buildable-body.ts +14 -14
  401. package/src/claim-cas.ts +4 -4
  402. package/src/cli-spinner.ts +1 -1
  403. package/src/cli.ts +472 -141
  404. package/src/close-job-template.ts +9 -9
  405. package/src/close-job.ts +26 -26
  406. package/src/complete.ts +121 -63
  407. package/src/concurrency.ts +1 -1
  408. package/src/config.ts +143 -49
  409. package/src/continue-branch.ts +23 -1
  410. package/src/cwd-section.ts +1 -1
  411. package/src/decision-engine.ts +57 -19
  412. package/src/do-autopick.ts +21 -10
  413. package/src/do-config.ts +7 -7
  414. package/src/do-remote-auto.ts +2 -2
  415. package/src/do.ts +558 -85
  416. package/src/drop-source.ts +2 -2
  417. package/src/env-config.ts +19 -11
  418. package/src/failure-cause.ts +30 -1
  419. package/src/format.ts +13 -33
  420. package/src/frontmatter.ts +55 -35
  421. package/src/gc.ts +172 -9
  422. package/src/github.ts +78 -0
  423. package/src/harness.ts +25 -0
  424. package/src/index.ts +10 -0
  425. package/src/install-ci-branch-protection.ts +283 -58
  426. package/src/install-ci-capabilities/advance-lifecycle.ts +1 -1
  427. package/src/install-ci-capabilities/close-job.ts +1 -1
  428. package/src/install-ci-capabilities/example-noop.ts +1 -1
  429. package/src/install-ci-capabilities/intake.ts +2 -2
  430. package/src/install-ci-capabilities/verify.ts +1 -1
  431. package/src/install-ci-core.ts +34 -7
  432. package/src/install-ci-github.ts +87 -1
  433. package/src/install-ci.ts +4 -4
  434. package/src/install-skills.ts +166 -0
  435. package/src/intake-event.ts +6 -6
  436. package/src/intake-marker.ts +3 -3
  437. package/src/intake-triage.ts +2 -2
  438. package/src/intake-trigger-template.ts +18 -18
  439. package/src/intake.ts +138 -103
  440. package/src/integration-core.ts +234 -100
  441. package/src/integrator.ts +22 -9
  442. package/src/isolation.ts +13 -4
  443. package/src/issue-provider.ts +4 -4
  444. package/src/item-lock.ts +505 -361
  445. package/src/item-path.ts +2 -2
  446. package/src/ledger-lint.ts +9 -9
  447. package/src/ledger-read.ts +81 -81
  448. package/src/ledger-write.ts +137 -152
  449. package/src/lifecycle-gather.ts +45 -22
  450. package/src/lifecycle-pools.ts +71 -13
  451. package/src/merge-question-surfacer.ts +32 -8
  452. package/src/migrate-stuck-locks.ts +451 -0
  453. package/src/mint-adr.ts +4 -4
  454. package/src/mirror-pool-scan.ts +5 -5
  455. package/src/needs-attention.ts +877 -104
  456. package/src/orphan-sidecar.ts +49 -8
  457. package/src/pi-harness.ts +82 -2
  458. package/src/placement.ts +8 -8
  459. package/src/prd-to-spec.ts +13 -5
  460. package/src/prompt.ts +20 -25
  461. package/src/readiness.ts +1 -1
  462. package/src/reap-branches.ts +38 -14
  463. package/src/recover-isolated.ts +18 -1
  464. package/src/repo-config.ts +66 -17
  465. package/src/repo-mirror.ts +23 -1
  466. package/src/review-gate.ts +12 -11
  467. package/src/review-verdict.ts +3 -3
  468. package/src/run.ts +69 -23
  469. package/src/scan.ts +36 -22
  470. package/src/select-order.ts +1 -1
  471. package/src/select-priority.ts +15 -15
  472. package/src/sidecar-apply.ts +1 -1
  473. package/src/sidecar.ts +141 -14
  474. package/src/slug-namespace.ts +10 -10
  475. package/src/spec-complete.ts +4 -5
  476. package/src/start.ts +57 -63
  477. package/src/status.ts +7 -7
  478. package/src/surface-gate.ts +12 -5
  479. package/src/surface-persist.ts +3 -3
  480. package/src/tasker-review-loop.ts +18 -17
  481. package/src/tasking-eligibility.ts +21 -21
  482. package/src/tasking-lock.ts +75 -60
  483. package/src/tasking.ts +381 -135
  484. package/src/triage-gate.ts +1 -1
  485. package/src/triage-persist.ts +71 -27
  486. package/src/vendor/incur/LICENSE +21 -0
  487. package/src/vendor/incur/README.md +19 -0
  488. package/src/vendor/incur/agents.ts +392 -0
  489. package/src/verify-workflow-template.ts +3 -3
  490. package/src/watch-session.ts +102 -7
  491. package/src/work-layout.ts +14 -9
  492. package/src/workspace.ts +2 -2
package/dist/sidecar.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * The **question/answer SIDECAR contract** (prd `advance-loop`, task
2
+ * The **question/answer SIDECAR contract** (spec `advance-loop`, task
3
3
  * `advance-sidecar-contract`) — the one genuinely-new piece of the `advance`
4
4
  * family. A strict, tooling-OWNED per-item file `work/questions/<type>-<slug>.md`
5
5
  * carrying per-entry answered-state, so the tooling fully owns the Q&A artifact
@@ -68,7 +68,7 @@
68
68
  * The item-types a sidecar can key onto (the slug-namespace + obs).
69
69
  *
70
70
  * HARD CUTOVER (spec `prd-to-spec-vocabulary-cutover-and-migration-command`,
71
- * contract step): the legacy `'prd'` type member is GONE — the parent-spec type
71
+ * contract step): the legacy ''prd'' type member is GONE — the parent-spec type
72
72
  * is `'spec'` only. A `spec:<slug>` identity keys onto the `spec-<slug>`
73
73
  * lock/sidecar entry. The on-disk `prd-<slug>.md` sidecar FILE (dorfl's
74
74
  * not-yet-converted data) is still probed by {@link sidecarPathCandidates} as a
@@ -83,13 +83,19 @@ export type SidecarType = 'spec' | 'task' | 'observation';
83
83
  * sniffing the shape of another field. Absent ⇒ the existing binary content
84
84
  * entry (every pre-`kind` sidecar parses + renders byte-identically).
85
85
  *
86
- * INTERIM PRIMITIVE REMOVE when question sidecars move to KIND-BASED
87
- * SUBFOLDERS (`work/questions/merge/`, ), where the folder ENCODES the kind
88
- * and this per-entry field is redundant. See the observation
89
- * `questions-folder-rename-and-kind-axis-prefix-vs-subfolder-2026-06-21` + idea
90
- * `folder-taxonomy-and-prd-edit-handshake`. Built deliberately as a single
91
- * typed field read in exactly ONE place (the apply dispatch, a later task) so
92
- * the folder-cutover can DELETE it in one move.
86
+ * A TYPED FIELD is the PERMANENT home for the kind axis (not an interim step
87
+ * toward kind subfolders). Encoding kind in the PATH either a filename prefix
88
+ * (`merge-<type>-<slug>.md`) or a subfolder (`work/questions/merge/…`) was
89
+ * deliberately REJECTED: kind is a MUTABLE axis (one item can carry a `spec`
90
+ * question pre-build, then a `merge` question at land time), but `sidecarPathFor`
91
+ * is a pure function of item IDENTITY alone and does not know the kind, so a
92
+ * path that encodes kind would make identity-only lookups SILENTLY miss a
93
+ * sidecar filed under a different kind. So kind lives INSIDE the file (this
94
+ * field), the path stays identity-keyed, and per-kind queues are RENDERED by the
95
+ * tool (`status`/`scan`) rather than by the directory tree. See the observation
96
+ * `questions-folder-rename-and-kind-axis-prefix-vs-subfolder-2026-06-21` (its
97
+ * round-2 conclusion + the recorded answers) and `SURFACE-PROTOCOL.md`. The
98
+ * field is read in exactly ONE place (the apply dispatch).
93
99
  *
94
100
  * A mistyped/unknown `kind=` token parses to `undefined` (silent-on-malformed,
95
101
  * mirroring the retired `disposition` precedent), never a throw, never a
@@ -183,14 +189,14 @@ export declare function sidecarPathFor(identity: string): string;
183
189
  * canonical {@link sidecarPathFor} path FIRST, then any legacy-data fallback that
184
190
  * may still be on disk before the migration command converts it.
185
191
  *
186
- * MIGRATE step (prd `prd-to-spec-vocabulary-cutover-and-migration-command`): the
192
+ * MIGRATE step (spec `prd-to-spec-vocabulary-cutover-and-migration-command`): the
187
193
  * producer side now emits `spec:<slug>`, so {@link sidecarPathFor} resolves
188
194
  * `work/questions/spec-<slug>.md`. But the ON-DISK sidecar is still the legacy
189
195
  * `work/questions/prd-<slug>.md` until `dorfl prd-to-spec` renames the DATA. So a
190
196
  * `spec`-typed identity ALSO probes the legacy `prd-<slug>.md` as a fallback, and
191
197
  * a reader takes the FIRST candidate that exists. This is a FILE-PATH DATA alias
192
198
  * the migration command removes (it converts `prd-<slug>.md → spec-<slug>.md` on
193
- * disk); it is NOT the `SlugNamespace`/`SidecarType` `'prd'` type member. Every
199
+ * disk); it is NOT the `SlugNamespace`/`SidecarType` ''prd'' type member. Every
194
200
  * non-`spec` type has a single candidate (its canonical path), unchanged.
195
201
  */
196
202
  export declare function sidecarPathCandidates(identity: string): string[];
@@ -214,7 +220,36 @@ export declare function parseSidecar(text: string): SidecarModel;
214
220
  * `parseSidecar(serialiseSidecar(m))` recovers an equal MODEL; re-serialising
215
221
  * canonicalises the text.
216
222
  */
217
- export declare function serialiseSidecar(model: SidecarModel): string;
223
+ export declare function serialiseSidecar(model: SidecarModel, options?: SerialiseSidecarOptions): string;
224
+ /**
225
+ * Options for {@link serialiseSidecar}. The optional `repoRoot` opts the
226
+ * caller into emitting the human-visible Markdown link line at the top of
227
+ * the sidecar (pointing at the item's current `work/<folder>/<slug>.md`).
228
+ * Callers that don't have a repo root (e.g. pure format tests) simply omit
229
+ * it and the serialiser emits no link — the parse is unaffected either way.
230
+ *
231
+ * DECISION (sidecar-visible-item-link): `repoRoot` is OPTIONAL and defaults
232
+ * to NO link, rather than being a required argument threaded through every
233
+ * caller. Only the two WRITING call sites (`applyAtomic` in
234
+ * `sidecar-apply.ts`, `persistSurfacedQuestions` in `surface-persist.ts`)
235
+ * pass `cwd`; any other current/future caller of `serialiseSidecar` silently
236
+ * emits no link line. This keeps the many pure-format / round-trip tests
237
+ * trivial (they need no on-disk repo) and keeps the link a write-only
238
+ * cosmetic concern of the persist paths. TRADE-OFF: a new writing caller must
239
+ * remember to pass `repoRoot` to get the link; ALTERNATIVE considered — make
240
+ * it required — rejected because it would force every format-only caller and
241
+ * test to fabricate a repo root purely to reach the same no-link output.
242
+ */
243
+ export interface SerialiseSidecarOptions {
244
+ /**
245
+ * Absolute or relative path to the repository root, so the serialiser can
246
+ * scan `work/<lifecycle-folder>/<slug>.md` for the item and render a
247
+ * clickable relative link line. When omitted (or when the item cannot be
248
+ * located), the link line is omitted — a harmless fallback, never a
249
+ * broken link.
250
+ */
251
+ repoRoot?: string;
252
+ }
218
253
  /** A new question to append (no id — the appender mints the next monotonic id). */
219
254
  export interface NewQuestion {
220
255
  question: string;
@@ -1 +1 @@
1
- {"version":3,"file":"sidecar.d.ts","sourceRoot":"","sources":["../src/sidecar.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiEG;AAEH;;;;;;;;;;GAUG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,aAAa,CAAC;AAE1D;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;AAShE,yEAAyE;AACzE,MAAM,WAAW,YAAY;IAC5B,sEAAsE;IACtE,EAAE,EAAE,MAAM,CAAC;IACX,8BAA8B;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,6EAA6E;IAC7E,OAAO,EAAE,MAAM,CAAC;IAChB,uEAAuE;IACvE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,MAAM,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;;;;OAIG;IACH,IAAI,CAAC,EAAE,WAAW,CAAC;CACnB;AAED,kEAAkE;AAClE,MAAM,WAAW,YAAY;IAC5B,gFAAgF;IAChF,IAAI,EAAE,MAAM,CAAC;IACb,4EAA4E;IAC5E,IAAI,EAAE,WAAW,CAAC;IAClB,qBAAqB;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,6EAA6E;IAC7E,OAAO,EAAE,YAAY,EAAE,CAAC;CACxB;AAED,yEAAyE;AACzE,qBAAa,iBAAkB,SAAQ,KAAK;gBAC/B,OAAO,EAAE,MAAM;CAI3B;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAK5D;AAED,uEAAuE;AACvE,wBAAgB,cAAc,CAAC,KAAK,EAAE,YAAY,GAAG,YAAY,EAAE,CAElE;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAExD;AAgCD,gEAAgE;AAChE,MAAM,WAAW,eAAe;IAC/B,IAAI,EAAE,WAAW,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,gEAAgE;IAChE,IAAI,EAAE,MAAM,CAAC;CACb;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,eAAe,CAiBxE;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAGvD;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAOhE;AAgND;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CAqDvD;AAkBD;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CAkD5D;AAID,mFAAmF;AACnF,MAAM,WAAW,WAAW;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;;OAKG;IACH,IAAI,CAAC,EAAE,WAAW,CAAC;CACnB;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC9B,KAAK,EAAE,YAAY,EACnB,YAAY,EAAE,WAAW,EAAE,GACzB,YAAY,CAkBd;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CACzB,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,WAAW,EAAE,GACzB,YAAY,CASd"}
1
+ {"version":3,"file":"sidecar.d.ts","sourceRoot":"","sources":["../src/sidecar.ts"],"names":[],"mappings":"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"}
package/dist/sidecar.js CHANGED
@@ -1,3 +1,5 @@
1
+ import { existsSync } from 'node:fs';
2
+ import { join } from 'node:path';
1
3
  import { parseSlugArg } from './slug-namespace.js';
2
4
  import { workItemRel } from './work-layout.js';
3
5
  const SIDECAR_KINDS = new Set([
@@ -56,7 +58,7 @@ function typeForNamespace(explicit, rawPrefix) {
56
58
  if (explicit === 'task') {
57
59
  return 'task';
58
60
  }
59
- // `parseSlugArg` only knows `task:`/`prd:`; the sidecar adds the
61
+ // `parseSlugArg` only knows `task:`/`spec:`; the sidecar adds the
60
62
  // `observation:` namespace (`obs:` is the CLI alias the verb resolves; the
61
63
  // sidecar stores the canonical `observation`). A bare slug (no prefix)
62
64
  // defaults to the task namespace, matching the resolver's "bare = task".
@@ -104,14 +106,14 @@ export function sidecarPathFor(identity) {
104
106
  * canonical {@link sidecarPathFor} path FIRST, then any legacy-data fallback that
105
107
  * may still be on disk before the migration command converts it.
106
108
  *
107
- * MIGRATE step (prd `prd-to-spec-vocabulary-cutover-and-migration-command`): the
109
+ * MIGRATE step (spec `prd-to-spec-vocabulary-cutover-and-migration-command`): the
108
110
  * producer side now emits `spec:<slug>`, so {@link sidecarPathFor} resolves
109
111
  * `work/questions/spec-<slug>.md`. But the ON-DISK sidecar is still the legacy
110
112
  * `work/questions/prd-<slug>.md` until `dorfl prd-to-spec` renames the DATA. So a
111
113
  * `spec`-typed identity ALSO probes the legacy `prd-<slug>.md` as a fallback, and
112
114
  * a reader takes the FIRST candidate that exists. This is a FILE-PATH DATA alias
113
115
  * the migration command removes (it converts `prd-<slug>.md → spec-<slug>.md` on
114
- * disk); it is NOT the `SlugNamespace`/`SidecarType` `'prd'` type member. Every
116
+ * disk); it is NOT the `SlugNamespace`/`SidecarType` ''prd'' type member. Every
115
117
  * non-`spec` type has a single candidate (its canonical path), unchanged.
116
118
  */
117
119
  export function sidecarPathCandidates(identity) {
@@ -125,6 +127,70 @@ export function sidecarPathCandidates(identity) {
125
127
  // --- Format constants -----------------------------------------------------
126
128
  /** The fixed answer marker the human types prose under. */
127
129
  const ANSWER_MARKER = '**Your answer** (write below this line):';
130
+ /**
131
+ * The lifecycle folders a given item type may currently reside in — the
132
+ * search set the {@link serialiseSidecar} human-visible link line scans to
133
+ * locate the item at write-time. Deliberately INCLUSIVE of the terminal
134
+ * folders (`done`, `cancelled`, `prds-dropped`) so a sidecar still-being-
135
+ * serialised for a finished item still emits a clickable link. Kept LOCAL to
136
+ * this module (rather than reused from `advance.ts`) because this set is the
137
+ * "where might the item CURRENTLY be on disk?" question, which is broader
138
+ * than advance's rung-classifier reach.
139
+ *
140
+ * DECISION (sidecar-visible-item-link): the task set is the four DURABLE
141
+ * folders `tasks-ready` / `done` / `cancelled` / `tasks-backlog` and
142
+ * deliberately EXCLUDES `in-progress` / `needs-attention`. Those two are NOT
143
+ * durable folders — they are retired transient lock-ref state (ADR
144
+ * `needs-attention-folder-cutover-followup-nits`, see the `TASK_LIFECYCLE_FOLDERS`
145
+ * JSDoc in `work-layout.ts`): a stuck task's BODY rests in `tasks/ready/`
146
+ * while the lock carries `state: stuck`, so no task body ever lives under
147
+ * `work/in-progress/` or `work/needs-attention/` for this scan to find. An
148
+ * earlier WIP of this task listed both; narrowing to the durable set matches
149
+ * the current on-disk reality and avoids scanning phantom folders.
150
+ * ALTERNATIVE considered: reuse `TASK_LIFECYCLE_FOLDERS` directly — rejected
151
+ * because it still carries the legacy `in-progress` entry and omits the
152
+ * `cancelled` / `tasks-backlog` folders a sidecar link may need to reach.
153
+ */
154
+ const LINK_LIFECYCLE_FOLDERS = {
155
+ task: ['tasks-ready', 'done', 'cancelled', 'tasks-backlog'],
156
+ spec: ['specs-ready', 'specs-tasked', 'specs-proposed', 'specs-dropped'],
157
+ observation: ['observations'],
158
+ };
159
+ /**
160
+ * Look up the item's CURRENT on-disk repo-relative path by scanning the
161
+ * lifecycle folders its type may reside in, in a documented precedence order.
162
+ * Returns `undefined` when the item is not found in ANY folder — the
163
+ * serialiser's "harmless fallback" (omit the link) branch.
164
+ *
165
+ * PURE lookup: no throws, no side effects. Every call is a fresh scan — the
166
+ * link SELF-HEALS on the next `serialise` after a `git mv` between folders
167
+ * (identity-keyed sidecar; NO lock-step move).
168
+ */
169
+ function findItemRelPath(repoRoot, type, slug) {
170
+ for (const folder of LINK_LIFECYCLE_FOLDERS[type]) {
171
+ const rel = workItemRel(folder, `${slug}.md`);
172
+ if (existsSync(join(repoRoot, rel))) {
173
+ return rel;
174
+ }
175
+ }
176
+ return undefined;
177
+ }
178
+ /**
179
+ * Render the human-visible Markdown link line, from the sidecar's fixed path
180
+ * (`work/questions/<type>-<slug>.md`) to the item's current `work/<folder>/
181
+ * <slug>.md`. Since both live under `work/`, the sidecar-relative link is
182
+ * `../<folder-name>/<slug>.md` — the `..` climbs out of `questions/` and the
183
+ * `<folder-name>` (which may contain a `/`, e.g. `tasks/ready`) drops back in.
184
+ */
185
+ function renderItemLinkLine(item, itemRel) {
186
+ // itemRel is `work/<folder-name>/<slug>.md`; strip the leading `work/` and
187
+ // prefix with `../` so the link is relative to `work/questions/<file>.md`.
188
+ const prefix = 'work/';
189
+ const target = itemRel.startsWith(prefix)
190
+ ? `../${itemRel.slice(prefix.length)}`
191
+ : itemRel;
192
+ return `Item: [\`${item}\`](${target})`;
193
+ }
128
194
  // --- Parse ----------------------------------------------------------------
129
195
  /** Pull the next monotonic id given the highest existing id number. */
130
196
  function nextId(entries) {
@@ -386,7 +452,7 @@ function blockquote(value) {
386
452
  * `parseSidecar(serialiseSidecar(m))` recovers an equal MODEL; re-serialising
387
453
  * canonicalises the text.
388
454
  */
389
- export function serialiseSidecar(model) {
455
+ export function serialiseSidecar(model, options = {}) {
390
456
  const out = [];
391
457
  const identityParts = [
392
458
  `item=${model.item}`,
@@ -395,6 +461,20 @@ export function serialiseSidecar(model) {
395
461
  `allAnswered=${allAnswered(model)}`,
396
462
  ];
397
463
  out.push(`<!-- dorfl-sidecar: ${identityParts.join(' ')} -->`);
464
+ // Human-visible Markdown link line — placed AFTER the identity comment and
465
+ // BEFORE the first `## ` heading, i.e. in the parser's ignored preamble
466
+ // region. Regenerated on every serialise from the item's CURRENT on-disk
467
+ // location; NEVER round-tripped through the parsed model (the link line is
468
+ // write-only cosmetic output, per the source observation). If the item is
469
+ // not resolvable on disk, we simply OMIT the line (harmless fallback) — a
470
+ // broken link would be more confusing than no link.
471
+ if (options.repoRoot !== undefined) {
472
+ const itemRel = findItemRelPath(options.repoRoot, model.type, model.slug);
473
+ if (itemRel !== undefined) {
474
+ out.push('');
475
+ out.push(renderItemLinkLine(model.item, itemRel));
476
+ }
477
+ }
398
478
  model.entries.forEach((entry) => {
399
479
  out.push('');
400
480
  const heading = entry.id.replace(/^q/, 'Q');
@@ -1 +1 @@
1
- {"version":3,"file":"sidecar.js","sourceRoot":"","sources":["../src/sidecar.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sidecar.js","sourceRoot":"","sources":["../src/sidecar.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,89 @@
1
+ ---
2
+ name: answer-questions
3
+ disable-model-invocation: true
4
+ description: 'Human-facing: go over the open question sidecars in work/questions/, RESOLVE the factual ones into draft answers FOR THE HUMAN TO RATIFY, and DEFER the genuine-judgement ones with full context + a suggested default. Proposes; never finalises. The human is the clock.'
5
+ ---
6
+
7
+ # answer-questions
8
+
9
+ **The read-side mirror of `surface-questions`.** `surface-questions` FORMULATES the open questions for an item and writes nothing. `answer-questions` walks the questions that already exist (`work/questions/*.md` sidecars) and, for each, does the cheap legwork to **propose a draft answer the human ratifies** — OR, when the answer is genuine judgement, **defers it to the human with enough context to answer in one pass**. It is the operator's "let's clear the question backlog together" skill.
10
+
11
+ It is a **user-invoked operator skill** (`disable-model-invocation: true`), human-facing like `review` / `promote` — NOT an autonomous engine rung. This invocation boundary is load-bearing: the autonomous `advance` engine applies ONLY human-authored answers and NEVER invents one (the humility law, shared with `surface-questions`). So this skill exists only where a human IS present, and even then it **proposes; it never finalises**. A drafted answer is a candidate the human reads and ratifies (or edits, or rejects) — it is not an answer until the human owns it. Reach for it by name; it never fires on its own.
12
+
13
+ > **Protocol-native.** Assumes the `work/` contract (rules in the repo's `work/protocol/`, copied by `setup`). Every bare "WORK-CONTRACT" / "sidecar" mention is `work/protocol/WORK-CONTRACT.md` / the documented question-sidecar format in the repo under work.
14
+
15
+ ## The one law (it keeps the tool honest)
16
+
17
+ **Propose, never finalise — the human is the clock.** You may RESOLVE a question only when the answer is **factual / discoverable** (settled in the code, an ADR, the contract, a `tasks/done/` record, or external truth) — and even then you present it as a DRAFT for the human to ratify, never as a committed answer. The moment a question turns on **preference, product/design/security judgement, or an unresolved fork**, you do NOT answer it — you DEFER it with context and an optional suggested default (the humility aid, never a decision). When in doubt between "factual" and "judgement", treat it as judgement and defer. A confident wrong answer to a judgement question produces drifted work that costs far more than asking.
18
+
19
+ ## When to use vs. not
20
+
21
+ - **Use** when there is a populated `work/questions/` and a human present who wants to clear it: to go question-by-question, knock out the ones whose answers are just legwork (drafted for ratification), and hand the human a tight batch of the ones that genuinely need them. Compose it from `orchestrate`'s apply step, or invoke it directly to drain the question backlog.
22
+ - **Don't** use it to FORMULATE questions (that is `surface-questions`), to PERSIST / commit an answer or advance the item (that is the `advance` verb's apply rung, or the human writing the answer into the sidecar), or to invent an answer to a judgement question (the law forbids it). It READS sidecars and DRAFTS; it does not own the write.
23
+
24
+ ## How to use
25
+
26
+ For each open sidecar in `work/questions/` (each `<type>-<slug>.md` with an unanswered entry), per question:
27
+
28
+ 1. **Read the question + its context** from the sidecar (the bold question, the blockquote context, any suggested default). A sidecar entry is BINARY (no-answer | answered) — there is no disposition token to read; the human answers in plain language. Open the item it asks about (`<type>:<slug>`) only if the inline context is not enough.
29
+ 2. **Classify factual vs judgement** — do the cheap legwork to decide:
30
+ - **FACTUAL / resolvable** — the answer is settled somewhere checkable: a landed `tasks/done/` record, an ADR in `docs/adr/`, a `work/protocol/` rule, the current code, or external/world fact. Investigate it against current reality (the same honesty `surface-questions`/triage demand) so the draft is grounded, not guessed.
31
+ - **JUDGEMENT** — the answer turns on preference, a design/product/security call, a `humanOnly` concern, or an open fork the evidence does not settle.
32
+ 3. **Act on the classification:**
33
+ - **FACTUAL → PROPOSE a draft answer.** State the answer in PLAIN LANGUAGE, and cite the EVIDENCE (the `file:line` / ADR / done-record / contract clause that settles it) so the human can ratify in seconds rather than re-investigate. For an observation's "what becomes of this signal?" question, the draft is a plain-language recommendation (e.g. "turn this into a task", "this is a duplicate of `<x>` — delete it") with the evidence for it; the apply rung's decision agent reads that answer and acts, and an outright throw-away can also go via the direct-delete path. Mark it clearly as a DRAFT awaiting ratification.
34
+ - **JUDGEMENT → DEFER.** Surface the question with: inline context (so the human need not open the item), the consequence of each plausible answer, and an **optional suggested default** where you honestly have a view (the humility aid — never a decision). Do NOT draft a committed answer.
35
+ 4. **Batch the output** (below). In phase 1 you WRITE nothing to the sidecar. You write a `**Your answer**` slot ONLY in the optional phase 2, and ONLY for the handles the human explicitly ratified (see "Phase 2" below).
36
+
37
+ ## Your output
38
+
39
+ Emit, across the open sidecars, a single batch the human can act on in one pass — ordered by leverage (the answer that unblocks the most downstream work first), each tagged PROPOSE or DEFER. Give every entry a **batch-stable handle** (`P1`, `P2`, … for PROPOSE; `D1`, `D2`, … for DEFER), numbered across the WHOLE batch independent of which sidecar it came from, so the human can approve / reject / amend by number in one line (e.g. "approve P1-P6, D3; amend D9 (...); reject D14") instead of re-quoting `<type>:<slug> (qN)`. Keep the `item:`/`(qN)` line too — the handle is for acting, the item id is for locating where the answer persists:
40
+
41
+ ```
42
+ question backlog: <N sidecars, M open questions>
43
+
44
+ PROPOSE (factual — ratify or correct):
45
+ - P1 item: <type>:<slug> (qN)
46
+ question: <verbatim>
47
+ draft: <the proposed answer>
48
+ evidence: <file:line / ADR / tasks/done record / contract clause that settles it>
49
+
50
+ DEFER (judgement — needs you):
51
+ - D1 item: <type>:<slug> (qN)
52
+ question: <verbatim>
53
+ context: <inline context to answer without opening the item>
54
+ consequence:<what each plausible answer implies>
55
+ default: <optional suggested default — humility aid, omit if none>
56
+ ```
57
+
58
+ (A sidecar entry is binary — no-answer | answered — so a PROPOSE or DEFER is just plain-language answer text; there is no disposition token to fill.)
59
+
60
+ The verbatim `question:` (and, for DEFER, the `context:`) is MANDATORY on every entry — it is the whole point of the batch: the human must be able to DECIDE from the batch alone, without opening each file. A compact TABLE keyed on the same `P#`/`D#` handles is fine for a large batch ONLY IF every row still carries the verbatim question + (for DEFER) context + item id + draft/default + (for PROPOSE) evidence. If that does not fit a table row, use the block form — do NOT drop the question to make it fit. A batch that elides the question forces a manual file lookup to decide and has failed at its job. Where several entries collapse to ONE decision (e.g. a recurring pattern across many sidecars), give the cluster a single handle and list the items it covers, so the human spends one ratification, not N.
61
+
62
+ If a sidecar's open questions are ALL judgement, it appears only under DEFER; if all factual, only under PROPOSE. An empty backlog (nothing open) is a valid, honest result — say so; never manufacture a question or an answer to look busy.
63
+
64
+ ### Phase 2 (OPTIONAL, human-initiated): ratify-by-handle, then the skill writes the accepted answers
65
+
66
+ The batch above is phase 1 and writes NOTHING. If — and only if — the human replies naming the handles they accept (e.g. "write P1-P6, D4, D9" or "accept P3, amend D9 to <text>"), you MAY enter phase 2 and write THOSE answers into their `**Your answer** (write below this line):` slots. This is NOT a violation of "propose, never finalise": a handle the human explicitly named is HUMAN-AUTHORED — the human ratified it by naming it — so transcribing it into the slot is a faithful recording, not an invention. The ironclad rules for phase 2:
67
+
68
+ - **Write ONLY handles the human explicitly named.** Never write an un-named entry, never "helpfully" fill the rest, never write a DEFER's suggested `default:` unless the human named that handle. An entry the human left out stays blank.
69
+ - **Amendments are the human's text, verbatim.** If the human says "accept D9 but change X", write their amended text, not your original draft.
70
+ - **For an observation's triage entry, write the plain-language answer the human ratified** (e.g. "make this a task" / "delete it"). Match the sidecar's documented `**Your answer**` format exactly — there is no disposition token, the human's prose IS the answer.
71
+ - **Still NEVER** set `answered:`/`allAnswered`, never `git mv`, never commit, never touch the per-entry/identity machine comments. You write ONLY the prose under the `**Your answer**` marker; the apply rung (or the human) owns everything else (see below).
72
+ - **If the human's reply is ambiguous about a handle, do not write it — ask.** A wrong transcription into the trusted slot is the exact forgery the law forbids; when unsure, leave it blank and surface the ambiguity.
73
+
74
+ > **Why phase 1 goes to the human and never auto-writes the slot.** The only writable human slot per entry (`**Your answer** (write below this line):`) is the one the `advance` apply rung trusts as the human's ratified answer; writing an UNRATIFIED draft there forges the human's signature and an unattended `advance` would apply the guess (the humility law forbids exactly this). So phase 1 emits to the human and writes nothing; phase 2 writes ONLY what the human ratified by handle. There is no sanctioned "draft, ignored-until-ratified" CARRIER in the sidecar (a draft cannot rest in the file across sessions without risking that mistake), so a parked, browsable in-file draft is out of scope for this skill.
75
+
76
+ ## How the answer gets PERSISTED (NOT your job — for orientation)
77
+
78
+ You draft; the HUMAN owns the write. Once the human ratifies a PROPOSE (or answers a DEFER), the answer is recorded by:
79
+
80
+ - **The `advance` verb's apply rung** — it applies the HUMAN's answered sidecar atomically (item body + sidecar in one commit): a decision agent reads the answer + source and resolves / re-pauses / acts on the item (mint / delete-source / ask-follow-up). It applies only human-authored answers; a ratified draft is human-authored the moment the human accepts it. (A human with no runner hand-writes the answer into the sidecar per the documented format.)
81
+ - **Hand-writing the answer** into `work/questions/<type>-<slug>.md` under the entry's `**Your answer** (write below this line):` marker (the documented human-readable sidecar format). The ratified draft text drops straight in — it is a transcription, because you already shaped it as the answer.
82
+
83
+ Your ONLY write is the optional phase-2 transcription: dropping the HUMAN-RATIFIED answer text under the `**Your answer**` marker for the handles the human explicitly named. Beyond that you never set `answered:`/`allAnswered`, never touch machine comments, never `git mv`, never commit. You propose and defer; the human ratifies (and may name handles for you to transcribe); the apply rung (or the human's own edit) does the rest — reads the answered slot, sets `answered:`/`allAnswered`, runs the decision agent over the answer + source to act on it (mint / delete-source / ask-follow-up), and commits.
84
+
85
+ ## Boundaries (the scope fence)
86
+
87
+ - **`surface-questions` and `answer-questions` are duals.** Surface FORMULATES open questions for one item and writes nothing; answer READS the formulated questions and drafts/defers (phase 1, write-nothing) and, ONLY on explicit human ratification, transcribes the named answers into their slots (phase 2). Neither FORMULATES nor APPLIES: do not let answer re-formulate (that is surface) or set `answered:` / act on the answer / commit (that is apply). Phase-2 transcription writes the answer PROSE only; it is not "persisting" in the apply sense.
88
+ - **Propose, never finalise.** Restated because it is the whole point: you resolve only factual questions, and only into DRAFTS the human ratifies; genuine judgement is DEFERRED with context, never auto-answered. You write a slot ONLY for a handle the human explicitly named (that text is then human-authored); you NEVER write an un-named entry or your own suggested default into a slot. The human is the clock.
89
+ - **Compose, don't reimplement.** Use `review` / the item bodies / the ADRs / the contract as the single sources of truth your draft cites; do not re-derive their judgement. You gather evidence and shape it into a ratifiable answer.
@@ -0,0 +1,52 @@
1
+ ---
2
+ name: capture-signal
3
+ description: "Record a noticed signal into the right work/ bucket (observations / findings / ideas / ADR / needs-attention) before it evaporates. Fire the MOMENT you notice something off the current task's path: drift (docs vs code), a recurring failure, surprising external behaviour, an out-of-scope opportunity, or a decision worth recording. The trigger is NOTICING, not being asked."
4
+ ---
5
+
6
+ # capture-signal
7
+
8
+ Turn a noticed signal into a durable file in the `work/` contract, in the **right bucket**, immediately — so it is not lost to the conversation. Capturing beats losing: do not agonise over the perfect bucket; pick the best fit and write it.
9
+
10
+ The bucket _definitions_ are authoritative in [WORK-CONTRACT.md](work/protocol/WORK-CONTRACT.md) (the repo-local protocol copy setup writes; read it if unsure) — this skill is the **routing reflex + the discipline**, not a restatement of the contract.
11
+
12
+ ## When this fires (the trigger is NOTICING)
13
+
14
+ The hard part is not _how_ to write the note — it is _remembering to_ at the moment a signal appears. Fire this skill when, mid-task, you notice any of:
15
+
16
+ - a **discrepancy / drift** (a doc contradicts the code; a task/spec assumes something no longer true; a dependency landed differently than assumed);
17
+ - a **recurring tool/process failure** (the same error twice — yours or the system's; a wasted-round-trip pattern);
18
+ - **surprising external/domain behaviour** you had to learn (an API's real behaviour, a protocol quirk) — verified ground truth;
19
+ - an **out-of-scope idea/opportunity** ("we could also…") that would derail the current task;
20
+ - a **decision** you/the user just made and reasoned through;
21
+ - the user nudging: "shouldn't that be captured / an observation?".
22
+
23
+ If you catch yourself _narrating_ a signal in prose ("interesting — X keeps happening") instead of _recording_ it, that is the trigger. Record it.
24
+
25
+ ## Route to the right bucket
26
+
27
+ | The signal is… | Bucket | Mutability |
28
+ | --- | --- | --- |
29
+ | spotted, **unverified** ("I noticed maybe-X") — INCLUDING agent/harness **conduct** signals | `work/notes/observations/<slug>.md` | append-only |
30
+ | **verified external/domain** ground truth (a real API/protocol behaviour) | `work/notes/findings/<slug>.md` | accumulates |
31
+ | a **proposed** enhancement, pre-spec ("we might build X") | `work/notes/ideas/<slug>.md` | editable |
32
+ | a **decision WE made** + its why | `docs/adr/<slug>.md` | durable |
33
+ | a **claimed item that got stuck** (gate red, conflict, ambiguity) | needs-attention (the runner marks its per-item lock `state: stuck`) | lock-ref state |
34
+
35
+ Tie-breakers:
36
+
37
+ - **observation vs finding:** internal "spotted, unverified" → observation; only _verified external/domain_ truth → finding. An internal investigation is an observation (it may spawn a fix task / an ADR), NOT a finding. **A finding MUST carry a `source:` (provenance)** — what the source is AND how current (a captured trace, a _dated_ external spec, or the code you read). A would-be finding with no source is really an `observation`. Describing OUR OWN code is never a finding (→ `CONTEXT.md`/`docs/`); a finding records the _external_ world we integrate with.
38
+ - **observation vs ADR:** "I spotted X" → observation; "we DECIDED X because Y" → ADR.
39
+ - **agent/harness conduct signals** (e.g. "the agent kept misusing a tool"): these are not repo-domain signals, but **capture > lose** — put them in `observations/` and **flag in the note that it is a conduct signal, not a domain signal** so a future reader does not hunt for a code bug. (Include refs: the offending tool calls, `file:line`, or commit.)
40
+
41
+ ## Discipline (from WORK-CONTRACT.md — honour, don't relitigate)
42
+
43
+ - **Content-derived slug**, never a counter (`agent-skipped-edit-skill`, not `note-3`).
44
+ - **Frontmatter:** `title`, `type` (`observation`/`finding`/`idea`), `status` (`spotted`/`incubating`), and a `spotted:`/`created:` date. **For a `finding`, also `source:` (REQUIRED provenance: what the source is + how current; no separate confidence field)** — see WORK-CONTRACT.md findings box.
45
+ - **`observations/` are APPEND-ONLY** — add an `## Update` block; don't rewrite what was first seen.
46
+ - **Capture buckets do NOT flow** (they are not work items / status≠folder); they leave only by deletion once no longer useful. A note may _spawn_ work (a task, an ADR) created separately — the note is not `git mv`'d into it.
47
+ - **Make it actionable:** state what was seen, where (refs/`file:line`/commit), and why it matters — enough that a future reader (or you) can act without the conversation.
48
+ - **Do NOT auto-commit** when firing standalone in an interactive session — write the file, report the path, leave it for the maintainer (per the repo's git etiquette). (EXCEPTION: when a conductor/autonomous caller — e.g. `drive-tasks` / `orchestrate` — captures the note as part of a run that commits its own observations, it commits this note too and reports it; the no-auto-commit default is for the standalone interactive reflex.)
49
+
50
+ ## Anti-pattern this skill exists to prevent
51
+
52
+ Knowing what observations _are_ (a glossary entry in CONTEXT.md) does NOT make you _record_ one at the right moment — that is a reflex, not a fact. If you find you described a signal but never wrote it down, you hit the anti-pattern. Write the file.
@@ -0,0 +1,90 @@
1
+ ---
2
+ name: convert-from-prd-to-spec
3
+ disable-model-invocation: true
4
+ description: 'Migrate a repo off the retired `prd` vocabulary end-to-end: drive `dorfl prd-to-spec` for the deterministic half, then sweep the prose the command skips, gated by the bi-word leak scan.'
5
+ ---
6
+
7
+ # convert-from-prd-to-spec
8
+
9
+ Drive the WHOLE `prd → spec` vocabulary cutover end-to-end for a repo that is ALREADY on the `work/` contract, so a maintainer invokes ONE thing and the agent does both halves: the deterministic, gated DATA conversion (which the `dorfl prd-to-spec` command owns) AND the judgement-heavy PROSE sweep the command deliberately skips. This is an OPERATOR skill (protocol-native, runner-agnostic, human-invoked) — it lives ONLY under `skills/`; it has NO `work/protocol/` mirror and NO `dist/protocol/` vendor, exactly like the sibling operator skills `to-spec` and `to-task`.
10
+
11
+ It is authored for the ONE cutover that exists (`prd → spec`), not pre-generalised to an arbitrary `<from> → <to>`. The DATA engine's `VocabularyMigration` parameterisation is the reuse mechanism if a future cutover ever appears; this skill is not pre-generalised (decision 3 below).
12
+
13
+ ## The two-half orchestration (run these IN ORDER)
14
+
15
+ ### Half 1 — deterministic: CALL `dorfl prd-to-spec` (do NOT re-implement it)
16
+
17
+ Run the purpose-named migration command; it owns everything deterministic and gated. Do NOT re-implement its layers in the skill — the skill CALLS the command and reads its report.
18
+
19
+ 1. **Preview first:** run `dorfl prd-to-spec --dry-run`. It reports exactly what each layer WOULD do, touching nothing. Read the report; proceed only if it looks right.
20
+ 2. **Apply:** run `dorfl prd-to-spec`. In ONE command it: checks quiescence (refuses loudly on a dirty tree / a held per-item lock / an in-progress work-branch, NAMING the offender); re-syncs the repo's `work/protocol/*` contract from the package-canonical source (never the target's old copy) and bumps `work/protocol/VERSION`; converts the DATA — the `work/**` folders (via `git mv`), the item frontmatter + inert path/token refs across ALL items INCLUDING terminal history (`work/tasks/done/`, `work/specs/tasked/`), the `.dorfl.json` config keys, and the inert git refs (lock refs + work-branches); and then runs its OWN forward+reverse leak scan over the converted tree as the command's acceptance gate.
21
+ 3. **Gate on green:** only proceed to Half 2 when the command reports a clean/green result (no quiescence refusal, no leaks). If it refused, resolve the named offender (commit/stash, release the lock, land/prune the branch) and re-run. The command is idempotent: a second run on an already-migrated repo is a no-op.
22
+
23
+ ### Half 2 — judgement: sweep the prose the command SKIPS
24
+
25
+ The command's DATA migration is scoped to `work/**` + config + refs + the `work/protocol/*` re-sync. It deliberately does NOT touch the artifact WORD in the LIVING PROSE trees, because sweeping those correctly needs judgement a blind keep-case find/replace cannot safely apply (it would over-rewrite slugs, symbols, and English). Sweep those trees BY HAND with the reusable pattern below:
26
+
27
+ - `CONTEXT.md`, `README.md`, `AGENTS.md`
28
+ - `docs/**` (including the ADRs)
29
+ - source comments + string literals
30
+
31
+ For each surviving artifact-word occurrence, propose a keep-case rewrite to the new spelling and DEFER the ambiguous ones (word vs slug vs English vs immutable provenance) to the human. Apply the identity allow-list and the provenance-vs-living split (below) so you never rewrite a file identity or falsify history.
32
+
33
+ **Preview-only pass (mirrors the command's `--dry-run`).** Offer a write-nothing mode first: WALK the prose trees, PROPOSE every rewrite as a diff, and write NOTHING, so the human can review the judgement calls before they land. Only after the human accepts do you apply them. This is the skill's `--dry-run` equivalent.
34
+
35
+ Note (out of scope): a stale `.github/workflows/*.yml` is regenerated by `dorfl install-ci`, NOT hand-edited. If you notice one still carries the retired word, NOTE it for a regen; do not edit it here.
36
+
37
+ ### Half 3 — acceptance: the widened BI-WORD leak scan is the PROOF
38
+
39
+ The repo is DONE only when the bi-word leak scan is green over BOTH halves' output — the converted `work/**`+config+refs tree AND the swept prose trees. A green scan is the exhaustive-by-construction proof the cutover is complete; the only survivors it permits are marker spans, backtick spans, enumerated slug identities, genuine English, and immutable provenance.
40
+
41
+ ## Runner-agnostic fallback (when `dorfl` is ABSENT)
42
+
43
+ The command is the FAST PATH, not a hard dependency (adopt/convert is a runner-agnostic protocol — ADR §9; the `dorfl prd-to-spec` command is ONE implementation). If `dorfl` is not installed, complete the cutover BY HAND by following the SAME layers the command exposes as documented, independent pieces (see `packages/dorfl/src/prd-to-spec.ts`), in the same order:
44
+
45
+ 1. `checkQuiescence` — refuse over a dirty tree / a held lock / an in-progress work-branch.
46
+ 2. `resyncProtocol` — copy the canonical `work/protocol/*` contract and bump `VERSION`.
47
+ 3. `migrateFolders` — `git mv` the `work/**` lifecycle folders to the new spelling.
48
+ 4. `migrateItemContent` — rewrite the frontmatter field key + inert path/token refs across every item (including terminal history).
49
+ 5. `migrateConfig` — rename the `.dorfl.json` config keys, preserving their values.
50
+ 6. `migrateRefs` — rename the inert lock refs + work-branches.
51
+ 7. `scanForLeaks` — run the forward+reverse gate over the converted tree.
52
+
53
+ Then do Half 2 (the prose sweep) and Half 3 (the bi-word leak scan) exactly as above. The result is identical to the command path; the command just does layers 1-7 for you.
54
+
55
+ ## The reusable pattern toolkit (this skill's authoritative discipline)
56
+
57
+ The hand-sweep of the dorfl self-cutover proved out a small, transferable toolkit. TEACH it and REUSE it; do NOT fork the detector logic. The two existing scans already ENCODE this discipline and are its REFERENCE IMPLEMENTATION — point at them, read them, do not re-derive them:
58
+
59
+ - `packages/dorfl/test/prd-src-prose-leak-scan.test.ts` — the source comment/JSDoc + runtime-string scan over `packages/dorfl/src`.
60
+ - `packages/dorfl/test/prd-word-cutover-leak-scan.test.ts` — the tree-wide WORD/prose scan over `CONTEXT.md`/`README.md`/`AGENTS.md`/`skills/**`/`docs/**`/`work/**`.
61
+
62
+ Both encode the marker-strip, the bi-word lens, the English allow-list, the per-tree provenance-vs-living scoping, and the enumerated identity allow-list. The five load-bearing items:
63
+
64
+ 1. **The `''…''` provenance marker (double-single-quote).** When a live doc or comment must name a RETIRED token ONLY as provenance ("the old `''prd''` outcome is gone"), wrap it in the double-single-quote marker. It is uniquely greppable (`grep "''prd''"` finds exactly those provenance mentions, distinct from the ~40 ordinary backtick spans) and the scan STRIPS a `''…''` span exactly like a backtick span, so it is not read as the live noun.
65
+
66
+ 2. **The BI-WORD scan.** This cutover has a REVERT in its history (the `spec → brief → spec` thrash), so the scan must FAIL on the retired word (`prd`) OR the reverted-away word (`brief`). A forward-only scan silently passes a stray `brief` (it once did). Any future cutover with a thrash needs this two-word lens.
67
+
68
+ 3. **The coined-vs-real-word English asymmetry.** `prd` is a COINED acronym with ZERO English collisions, so its lens carries no English allow-list. `brief` is REAL English (`debrief`, `briefly`, "a brief note"), so its lens DOES carry an English allow-list plus a following-noun heuristic (bare "a brief" is the retired noun and must flag; "a brief note" is the English adjective and is exempt). Record which class each word is; apply the real-word allow-list only to the real word.
69
+
70
+ 4. **The provenance-vs-living per-tree split.** The retired word is IMMUTABLE PROVENANCE in some positions and a LIVE LEAK in others; encode the split as concrete per-tree scoping, NOT a blanket exemption. GATE the current-guidance surface: `CONTEXT.md`/`README.md`/`AGENTS.md`, `skills/**`, and the live-reference ADR text. EXEMPT the provenance trees: terminal-history bodies (`work/tasks/done/`, `work/specs/tasked/`, append-only notes), dated incident narration in ACTIVE task bodies, and ADR text that RECORDS what was retired or names the migration's pre-cutover INPUT. Rewriting a provenance mention falsifies history.
71
+
72
+ 5. **The concrete IDENTITY allow-list.** NEVER rewrite a `prd`-containing hyphenated slug, filename, `slug:`/`spec:`/`blockedBy:`/`covers:`/`taskedAfter:` value, camelCase symbol, or historical API name — each is a FILE IDENTITY or proper noun whose rename would break a cross-reference or desync history. Enumerate the survivors concretely and keep the list non-vacuous (every entry names a real identity present in the tree); do not use a blanket wildcard.
73
+
74
+ ## Domain vocabulary
75
+
76
+ - A **spec** is a north-star launch doc in `work/specs/`; a **task** is a buildable item in `work/tasks/`.
77
+ - The **`work/` contract** is the on-disk protocol every set-up repo carries.
78
+ - **`dorfl prd-to-spec`** is the purpose-named migration COMMAND (ADR §7e) whose DATA migration is scoped to `work/**`+config+refs and which ALSO re-syncs `work/protocol/*`.
79
+ - The **leak scan** is the acceptance GATE — a green bi-word scan is the proof the cutover is complete.
80
+ - Adopt/convert work is a SKILL, execute work is a COMMAND (ADR §8). That is why this prose sweep is a skill, not a new command layer.
81
+
82
+ ## The three maintainer decisions
83
+
84
+ 1. **A NEW standalone skill named `convert-from-prd-to-spec`** — NOT folded into the `migrate` skill. `migrate` maps a FOREIGN format onto the contract; this is a same-format keep-case vocabulary sweep of a repo ALREADY on the contract, so it stands alone.
85
+ 2. **This skill OWNS the doc-sweep coverage; `dorfl prd-to-spec` is NOT extended with a report-line fallback.** Invoking this skill IS the complete path (deterministic command + prose sweep), so the bare command need not print a manual grep. A user who runs only the bare command still gets a correctly-converted `work/`+config+refs+protocol; the residual prose is this skill's job.
86
+ 3. **This skill is `prd`-SPECIFIC** — authored for the `prd → spec` cutover (today's only cutover), NOT generalised to an arbitrary `<from> → <to>` from day one. The DATA engine's `VocabularyMigration` parameterisation remains the reuse mechanism for a future cutover; this skill is not pre-generalised.
87
+
88
+ ## Git
89
+
90
+ Do NOT stage/commit/push from this skill. The `git mv` folder moves + the ref renames are the command's job (Half 1); the prose edits are ordinary working-tree changes the maintainer reviews and commits. Report what was converted and what was swept; leave the commit to the human.