dorfl 0.1.0 → 0.1.2

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 (324) 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 +7 -7
  8. package/dist/advance-drivers.d.ts.map +1 -1
  9. package/dist/advance-drivers.js +5 -5
  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.js +9 -9
  16. package/dist/advance-lifecycle-template.js.map +1 -1
  17. package/dist/advance-loop-driver.d.ts +3 -3
  18. package/dist/advance-loop-driver.d.ts.map +1 -1
  19. package/dist/advance-loop-driver.js +1 -1
  20. package/dist/advance-treeless-publish.d.ts +1 -1
  21. package/dist/advance.d.ts +11 -11
  22. package/dist/advance.d.ts.map +1 -1
  23. package/dist/advance.js +21 -21
  24. package/dist/advance.js.map +1 -1
  25. package/dist/advancing-lock.d.ts +1 -1
  26. package/dist/advancing-lock.js +5 -5
  27. package/dist/apply-decide.d.ts +2 -2
  28. package/dist/apply-decide.js +2 -2
  29. package/dist/apply-merge-action.d.ts +4 -4
  30. package/dist/apply-merge-action.js +2 -2
  31. package/dist/apply-persist.d.ts +5 -5
  32. package/dist/apply-persist.d.ts.map +1 -1
  33. package/dist/apply-persist.js +7 -7
  34. package/dist/apply-persist.js.map +1 -1
  35. package/dist/buildable-body.d.ts +14 -14
  36. package/dist/buildable-body.js +9 -9
  37. package/dist/claim-cas.d.ts +3 -3
  38. package/dist/claim-cas.js +1 -1
  39. package/dist/claim-cas.js.map +1 -1
  40. package/dist/cli.d.ts.map +1 -1
  41. package/dist/cli.js +83 -77
  42. package/dist/cli.js.map +1 -1
  43. package/dist/close-job-template.d.ts +3 -3
  44. package/dist/close-job-template.js +8 -8
  45. package/dist/close-job.d.ts +8 -8
  46. package/dist/close-job.js +25 -25
  47. package/dist/close-job.js.map +1 -1
  48. package/dist/complete.d.ts +3 -3
  49. package/dist/complete.js +8 -8
  50. package/dist/complete.js.map +1 -1
  51. package/dist/concurrency.d.ts +1 -1
  52. package/dist/concurrency.js +1 -1
  53. package/dist/config.d.ts +32 -32
  54. package/dist/config.js +5 -5
  55. package/dist/config.js.map +1 -1
  56. package/dist/continue-branch.d.ts +1 -1
  57. package/dist/continue-branch.js +1 -1
  58. package/dist/cwd-section.js +1 -1
  59. package/dist/cwd-section.js.map +1 -1
  60. package/dist/decision-engine.d.ts +2 -2
  61. package/dist/do-autopick.d.ts +6 -6
  62. package/dist/do-autopick.d.ts.map +1 -1
  63. package/dist/do-autopick.js +5 -5
  64. package/dist/do-autopick.js.map +1 -1
  65. package/dist/do-config.d.ts +3 -3
  66. package/dist/do-config.js +3 -3
  67. package/dist/do-config.js.map +1 -1
  68. package/dist/do-remote-auto.d.ts +2 -2
  69. package/dist/do-remote-auto.js +1 -1
  70. package/dist/do.d.ts +25 -25
  71. package/dist/do.d.ts.map +1 -1
  72. package/dist/do.js +22 -22
  73. package/dist/do.js.map +1 -1
  74. package/dist/drop-source.d.ts +2 -2
  75. package/dist/env-config.js +8 -8
  76. package/dist/env-config.js.map +1 -1
  77. package/dist/format.js +3 -3
  78. package/dist/format.js.map +1 -1
  79. package/dist/frontmatter.d.ts +33 -39
  80. package/dist/frontmatter.d.ts.map +1 -1
  81. package/dist/frontmatter.js +18 -31
  82. package/dist/frontmatter.js.map +1 -1
  83. package/dist/install-ci-branch-protection.d.ts +1 -1
  84. package/dist/install-ci-branch-protection.js +1 -1
  85. package/dist/install-ci-capabilities/advance-lifecycle.d.ts +1 -1
  86. package/dist/install-ci-capabilities/advance-lifecycle.js +1 -1
  87. package/dist/install-ci-capabilities/close-job.d.ts +1 -1
  88. package/dist/install-ci-capabilities/close-job.js +1 -1
  89. package/dist/install-ci-capabilities/example-noop.d.ts +1 -1
  90. package/dist/install-ci-capabilities/example-noop.js +1 -1
  91. package/dist/install-ci-capabilities/intake.d.ts +2 -2
  92. package/dist/install-ci-capabilities/intake.js +2 -2
  93. package/dist/install-ci-capabilities/verify.d.ts +1 -1
  94. package/dist/install-ci-capabilities/verify.js +1 -1
  95. package/dist/install-ci-core.d.ts +3 -3
  96. package/dist/install-ci-core.js +2 -2
  97. package/dist/install-ci-core.js.map +1 -1
  98. package/dist/install-ci-github.d.ts +1 -1
  99. package/dist/install-ci-github.js +1 -1
  100. package/dist/install-ci.d.ts +1 -1
  101. package/dist/install-ci.js +4 -4
  102. package/dist/install-ci.js.map +1 -1
  103. package/dist/intake-event.d.ts +6 -6
  104. package/dist/intake-event.js +6 -6
  105. package/dist/intake-marker.d.ts +3 -3
  106. package/dist/intake-marker.d.ts.map +1 -1
  107. package/dist/intake-triage.d.ts +1 -1
  108. package/dist/intake-triage.js +2 -2
  109. package/dist/intake-trigger-template.d.ts +8 -8
  110. package/dist/intake-trigger-template.d.ts.map +1 -1
  111. package/dist/intake-trigger-template.js +16 -16
  112. package/dist/intake-trigger-template.js.map +1 -1
  113. package/dist/intake.d.ts +50 -50
  114. package/dist/intake.d.ts.map +1 -1
  115. package/dist/intake.js +70 -70
  116. package/dist/intake.js.map +1 -1
  117. package/dist/integration-core.d.ts +17 -17
  118. package/dist/integration-core.js +17 -17
  119. package/dist/integration-core.js.map +1 -1
  120. package/dist/isolation.d.ts +3 -3
  121. package/dist/issue-provider.d.ts +4 -4
  122. package/dist/issue-provider.js +1 -1
  123. package/dist/item-lock.d.ts +21 -21
  124. package/dist/item-lock.d.ts.map +1 -1
  125. package/dist/item-lock.js +16 -16
  126. package/dist/item-path.d.ts +2 -2
  127. package/dist/item-path.js +2 -2
  128. package/dist/ledger-lint.d.ts +9 -9
  129. package/dist/ledger-lint.js +9 -9
  130. package/dist/ledger-read.d.ts +57 -57
  131. package/dist/ledger-read.d.ts.map +1 -1
  132. package/dist/ledger-read.js +24 -24
  133. package/dist/ledger-read.js.map +1 -1
  134. package/dist/ledger-write.d.ts +2 -2
  135. package/dist/ledger-write.js +1 -1
  136. package/dist/lifecycle-gather.d.ts +1 -1
  137. package/dist/lifecycle-gather.js +16 -16
  138. package/dist/lifecycle-gather.js.map +1 -1
  139. package/dist/lifecycle-pools.d.ts +4 -4
  140. package/dist/lifecycle-pools.js +1 -1
  141. package/dist/merge-question-surfacer.d.ts +3 -3
  142. package/dist/merge-question-surfacer.js +2 -2
  143. package/dist/merge-question-surfacer.js.map +1 -1
  144. package/dist/mint-adr.js +4 -4
  145. package/dist/mirror-pool-scan.d.ts +2 -2
  146. package/dist/mirror-pool-scan.js +3 -3
  147. package/dist/mirror-pool-scan.js.map +1 -1
  148. package/dist/needs-attention.d.ts +13 -13
  149. package/dist/needs-attention.d.ts.map +1 -1
  150. package/dist/needs-attention.js +11 -11
  151. package/dist/needs-attention.js.map +1 -1
  152. package/dist/orphan-sidecar.d.ts +2 -2
  153. package/dist/placement.d.ts +6 -6
  154. package/dist/placement.js +2 -2
  155. package/dist/prd-to-spec.d.ts +15 -1
  156. package/dist/prd-to-spec.d.ts.map +1 -1
  157. package/dist/prd-to-spec.js +36 -14
  158. package/dist/prd-to-spec.js.map +1 -1
  159. package/dist/prompt.d.ts +24 -24
  160. package/dist/prompt.d.ts.map +1 -1
  161. package/dist/prompt.js +29 -31
  162. package/dist/prompt.js.map +1 -1
  163. package/dist/protocol/CLAIM-PROTOCOL.md +4 -4
  164. package/dist/protocol/REVIEW-PROTOCOL.md +1 -1
  165. package/dist/protocol/TASKING-PROTOCOL.md +12 -12
  166. package/dist/protocol/WORK-CONTRACT.md +39 -39
  167. package/dist/protocol/spec-template.md +1 -1
  168. package/dist/protocol/task-template.md +3 -3
  169. package/dist/readiness.d.ts +1 -1
  170. package/dist/recover-isolated.js +1 -1
  171. package/dist/repo-config.js +12 -12
  172. package/dist/repo-config.js.map +1 -1
  173. package/dist/review-gate.d.ts +3 -3
  174. package/dist/review-gate.d.ts.map +1 -1
  175. package/dist/review-gate.js +11 -10
  176. package/dist/review-gate.js.map +1 -1
  177. package/dist/review-verdict.d.ts +2 -2
  178. package/dist/review-verdict.d.ts.map +1 -1
  179. package/dist/review-verdict.js +1 -1
  180. package/dist/run.d.ts +1 -1
  181. package/dist/run.js +5 -5
  182. package/dist/run.js.map +1 -1
  183. package/dist/scan.d.ts +10 -10
  184. package/dist/scan.d.ts.map +1 -1
  185. package/dist/scan.js +8 -8
  186. package/dist/scan.js.map +1 -1
  187. package/dist/select-order.d.ts +1 -1
  188. package/dist/select-priority.d.ts +12 -12
  189. package/dist/select-priority.d.ts.map +1 -1
  190. package/dist/select-priority.js +5 -5
  191. package/dist/select-priority.js.map +1 -1
  192. package/dist/sidecar.d.ts +2 -2
  193. package/dist/sidecar.js +2 -2
  194. package/dist/sidecar.js.map +1 -1
  195. package/dist/slug-namespace.d.ts +1 -1
  196. package/dist/slug-namespace.js +3 -3
  197. package/dist/slug-namespace.js.map +1 -1
  198. package/dist/spec-complete.js +2 -2
  199. package/dist/spec-complete.js.map +1 -1
  200. package/dist/start.d.ts +1 -1
  201. package/dist/start.js +3 -3
  202. package/dist/start.js.map +1 -1
  203. package/dist/status.d.ts +3 -3
  204. package/dist/status.js +4 -4
  205. package/dist/status.js.map +1 -1
  206. package/dist/surface-gate.d.ts +2 -2
  207. package/dist/surface-gate.d.ts.map +1 -1
  208. package/dist/surface-persist.d.ts +2 -2
  209. package/dist/surface-persist.d.ts.map +1 -1
  210. package/dist/tasker-review-loop.d.ts +8 -8
  211. package/dist/tasker-review-loop.d.ts.map +1 -1
  212. package/dist/tasker-review-loop.js +8 -8
  213. package/dist/tasker-review-loop.js.map +1 -1
  214. package/dist/tasking-eligibility.d.ts +21 -21
  215. package/dist/tasking-eligibility.d.ts.map +1 -1
  216. package/dist/tasking-eligibility.js +10 -10
  217. package/dist/tasking-lock.d.ts +8 -8
  218. package/dist/tasking-lock.d.ts.map +1 -1
  219. package/dist/tasking-lock.js +20 -21
  220. package/dist/tasking-lock.js.map +1 -1
  221. package/dist/tasking.d.ts +33 -33
  222. package/dist/tasking.d.ts.map +1 -1
  223. package/dist/tasking.js +89 -88
  224. package/dist/tasking.js.map +1 -1
  225. package/dist/triage-gate.d.ts +1 -1
  226. package/dist/triage-persist.d.ts +5 -5
  227. package/dist/triage-persist.js +15 -15
  228. package/dist/triage-persist.js.map +1 -1
  229. package/dist/verify-workflow-template.d.ts +1 -1
  230. package/dist/verify-workflow-template.js +2 -2
  231. package/dist/work-layout.d.ts +9 -7
  232. package/dist/work-layout.d.ts.map +1 -1
  233. package/dist/work-layout.js +9 -7
  234. package/dist/work-layout.js.map +1 -1
  235. package/dist/workspace.d.ts +1 -1
  236. package/package.json +1 -1
  237. package/src/advance-ci-template.ts +4 -4
  238. package/src/advance-classify.ts +5 -5
  239. package/src/advance-drivers.ts +10 -10
  240. package/src/advance-isolated.ts +3 -3
  241. package/src/advance-lifecycle-template.ts +9 -9
  242. package/src/advance-loop-driver.ts +3 -3
  243. package/src/advance-treeless-publish.ts +1 -1
  244. package/src/advance.ts +30 -30
  245. package/src/advancing-lock.ts +6 -6
  246. package/src/apply-decide.ts +2 -2
  247. package/src/apply-merge-action.ts +5 -5
  248. package/src/apply-persist.ts +8 -8
  249. package/src/buildable-body.ts +14 -14
  250. package/src/claim-cas.ts +4 -4
  251. package/src/cli.ts +94 -84
  252. package/src/close-job-template.ts +8 -8
  253. package/src/close-job.ts +26 -26
  254. package/src/complete.ts +11 -11
  255. package/src/concurrency.ts +1 -1
  256. package/src/config.ts +37 -37
  257. package/src/continue-branch.ts +1 -1
  258. package/src/cwd-section.ts +1 -1
  259. package/src/decision-engine.ts +3 -3
  260. package/src/do-autopick.ts +9 -9
  261. package/src/do-config.ts +6 -6
  262. package/src/do-remote-auto.ts +2 -2
  263. package/src/do.ts +49 -49
  264. package/src/drop-source.ts +2 -2
  265. package/src/env-config.ts +8 -8
  266. package/src/format.ts +3 -3
  267. package/src/frontmatter.ts +42 -60
  268. package/src/install-ci-branch-protection.ts +1 -1
  269. package/src/install-ci-capabilities/advance-lifecycle.ts +1 -1
  270. package/src/install-ci-capabilities/close-job.ts +1 -1
  271. package/src/install-ci-capabilities/example-noop.ts +1 -1
  272. package/src/install-ci-capabilities/intake.ts +2 -2
  273. package/src/install-ci-capabilities/verify.ts +1 -1
  274. package/src/install-ci-core.ts +4 -4
  275. package/src/install-ci-github.ts +1 -1
  276. package/src/install-ci.ts +4 -4
  277. package/src/intake-event.ts +6 -6
  278. package/src/intake-marker.ts +3 -3
  279. package/src/intake-triage.ts +2 -2
  280. package/src/intake-trigger-template.ts +17 -17
  281. package/src/intake.ts +97 -97
  282. package/src/integration-core.ts +35 -35
  283. package/src/isolation.ts +3 -3
  284. package/src/issue-provider.ts +4 -4
  285. package/src/item-lock.ts +21 -21
  286. package/src/item-path.ts +2 -2
  287. package/src/ledger-lint.ts +9 -9
  288. package/src/ledger-read.ts +81 -81
  289. package/src/ledger-write.ts +3 -3
  290. package/src/lifecycle-gather.ts +16 -16
  291. package/src/lifecycle-pools.ts +4 -4
  292. package/src/merge-question-surfacer.ts +4 -4
  293. package/src/mint-adr.ts +4 -4
  294. package/src/mirror-pool-scan.ts +5 -5
  295. package/src/needs-attention.ts +22 -22
  296. package/src/orphan-sidecar.ts +2 -2
  297. package/src/placement.ts +6 -6
  298. package/src/prd-to-spec.ts +51 -15
  299. package/src/prompt.ts +33 -35
  300. package/src/readiness.ts +1 -1
  301. package/src/recover-isolated.ts +1 -1
  302. package/src/repo-config.ts +12 -12
  303. package/src/review-gate.ts +12 -11
  304. package/src/review-verdict.ts +2 -2
  305. package/src/run.ts +6 -6
  306. package/src/scan.ts +15 -15
  307. package/src/select-order.ts +1 -1
  308. package/src/select-priority.ts +13 -13
  309. package/src/sidecar.ts +3 -3
  310. package/src/slug-namespace.ts +3 -3
  311. package/src/spec-complete.ts +2 -2
  312. package/src/start.ts +4 -4
  313. package/src/status.ts +7 -7
  314. package/src/surface-gate.ts +2 -2
  315. package/src/surface-persist.ts +2 -2
  316. package/src/tasker-review-loop.ts +15 -15
  317. package/src/tasking-eligibility.ts +21 -21
  318. package/src/tasking-lock.ts +27 -28
  319. package/src/tasking.ts +124 -123
  320. package/src/triage-gate.ts +1 -1
  321. package/src/triage-persist.ts +16 -16
  322. package/src/verify-workflow-template.ts +2 -2
  323. package/src/work-layout.ts +9 -7
  324. package/src/workspace.ts +1 -1
package/src/do-config.ts CHANGED
@@ -90,7 +90,7 @@ export function doFlagOverrides(
90
90
  ...surfaceBlockersFlagOverrides(flags),
91
91
  // `--merge-questions <off|ask|auto>` rides the SAME flag-override chain
92
92
  // (flag > env > per-repo > global > default `ask`): the 3-state gate over
93
- // the merge-question SURFACER (prd `land-time-reverify-and-parallel-
93
+ // the merge-question SURFACER (spec `land-time-reverify-and-parallel-
94
94
  // merge-ceiling` Story 17 / task `merge-questions-gate-axis`). SEPARATE
95
95
  // axis from `--observation-triage` with a HIGHER default — NEVER rides
96
96
  // `--observation-triage`.
@@ -122,7 +122,7 @@ export function doFlagOverrides(
122
122
  // `--no-pr` (the PR-INTENT axis): suppress the PR even on an authed GitHub
123
123
  // arbiter. Rides the SAME flag > env > per-repo > global > default chain.
124
124
  ...noPRFlagOverrides(flags),
125
- // `--merge-retries <n>` (the cross-job merge serialiser's CAS-retry cap — prd
125
+ // `--merge-retries <n>` (the cross-job merge serialiser's CAS-retry cap — spec
126
126
  // `land-time-reverify-and-parallel-merge-ceiling` Story 5 / Applied Answer
127
127
  // q1 (a)) rides the SAME chain (flag > env > per-repo > global > default).
128
128
  ...mergeRetriesFlagOverrides(flags),
@@ -130,7 +130,7 @@ export function doFlagOverrides(
130
130
  if (integration !== undefined) {
131
131
  // An explicit `--merge`/`--propose` flag ALWAYS wins for the transition this
132
132
  // command runs. `do` runs EITHER the build transition (a task) OR the tasking
133
- // transition (a `do prd:`) per invocation, and the typed flag is
133
+ // transition (a `do spec:`) per invocation, and the typed flag is
134
134
  // transition-AGNOSTIC, so it must override BOTH the build mode (`integration`)
135
135
  // AND the tasking mode (`taskingIntegration`). Setting both at the top of the
136
136
  // precedence chain means a `--propose` on a `taskingIntegration:'merge'` repo
@@ -346,7 +346,7 @@ export function observationTriageFlagOverrides(
346
346
  /**
347
347
  * The surface-blockers CLI flag (`advance`): `--surface-blockers` /
348
348
  * `--no-surface-blockers`, the BOOLEAN gate over DECLARED blocked work (whether a
349
- * `needsAnswers:true` task/prd is rendered into a question sidecar; ADR
349
+ * `needsAnswers:true` task/spec is rendered into a question sidecar; ADR
350
350
  * `ci-config-policy-and-gate-family`). The orthogonal PEER of
351
351
  * `--observation-triage`. Resolved through the SAME
352
352
  * `flag > env > per-repo > global > default` chain as the other gate flags.
@@ -414,7 +414,7 @@ export function mergeRetriesFlagOverrides(
414
414
 
415
415
  /**
416
416
  * The merge-questions CLI flag (`advance`): `--merge-questions <off|ask|auto>`,
417
- * the 3-state gate over the MERGE-QUESTION SURFACER (prd
417
+ * the 3-state gate over the MERGE-QUESTION SURFACER (spec
418
418
  * `land-time-reverify-and-parallel-merge-ceiling` Story 17 / task
419
419
  * `merge-questions-gate-axis`). MIRRORS `--observation-triage`'s SHAPE but is a
420
420
  * SEPARATE axis with a HIGHER default (`ask`, never `off` — a dropped merge-
@@ -459,7 +459,7 @@ export function mergeQuestionsFlagOverrides(
459
459
 
460
460
  /**
461
461
  * **The strict-merge-approval CLI flag** (`--strict-merge-approval` /
462
- * `--no-strict-merge-approval`) — prd
462
+ * `--no-strict-merge-approval`) — spec
463
463
  * `land-time-reverify-and-parallel-merge-ceiling` sidecar OQ6 / task
464
464
  * `strict-merge-approval-gate`. The OPT-IN strictness layered on the OQ6
465
465
  * stale-approval default: ON re-surfaces the merge-question on a merge-base
@@ -6,7 +6,7 @@ import {selectPrioritised, type SelectedItem} from './select-priority.js';
6
6
  import type {Config} from './config.js';
7
7
 
8
8
  /**
9
- * The MIRROR-SIDE auto-pick / `-n` caller for `do --remote` (prd `advance-loop`,
9
+ * The MIRROR-SIDE auto-pick / `-n` caller for `do --remote` (spec `advance-loop`,
10
10
  * task `advance-drivers-and-gates`, US #25) — the THIN caller the mirror-side
11
11
  * eligible-pool scan (`mirror-side-eligible-pool-scan`) makes possible, the
12
12
  * isolated counterpart of `do-autopick`'s in-place {@link performDoAuto}.
@@ -154,7 +154,7 @@ function remoteArgFor(item: SelectedItem): string {
154
154
  * the GIVEN order (no pool/priority — the operator chose them), each through the
155
155
  * EXISTING {@link performDoRemote} pipeline, SEQUENTIALLY. No mirror scan is
156
156
  * needed (the args are explicit); the per-item pipeline resolves each
157
- * bare/`task:`/`prd:` arg itself.
157
+ * bare/`task:`/`spec:` arg itself.
158
158
  */
159
159
  export async function performDoRemoteArgs(
160
160
  args: string[],
package/src/do.ts CHANGED
@@ -130,14 +130,14 @@ export type DoOutcome =
130
130
  | 'agent-stopped' // the agent DELIBERATELY stopped (task drifted/ambiguous) OR produced no change → surfaced; gate + Gate-2 SKIPPED
131
131
  | 'refused' // refused (dirty tree, wrong folder, nothing to complete, …)
132
132
  | 'usage-error' // usage / environment problem, or a slug-resolution error
133
- | 'tasked' // `do prd:<slug>` — the prd was tasked into work/backlog/ (runner-owned)
134
- | 'gate-refused' // `do prd:<slug>` — the tasking gate refused (honest skip)
135
- | 'stale'; // `do prd:<slug>` — the held prd was edited under the lock (stale tasking)
133
+ | 'tasked' // `do spec:<slug>` — the spec was tasked into work/backlog/ (runner-owned)
134
+ | 'gate-refused' // `do spec:<slug>` — the tasking gate refused (honest skip)
135
+ | 'stale'; // `do spec:<slug>` — the held spec was edited under the lock (stale tasking)
136
136
 
137
137
  export interface DoResult {
138
138
  exitCode: 0 | 1 | 2 | 3;
139
139
  outcome: DoOutcome;
140
- /** The resolved bare slug acted on (task or prd), when one was resolved. */
140
+ /** The resolved bare slug acted on (task or spec), when one was resolved. */
141
141
  slug?: string;
142
142
  /** The work branch the run operated on, when one was created/switched-to. */
143
143
  branch?: string;
@@ -171,7 +171,7 @@ export type DoDorfl = (input: {
171
171
  };
172
172
 
173
173
  export interface DoOptions {
174
- /** The raw CLI slug argument: bare (= task), `task:<slug>`, or `prd:<slug>`. */
174
+ /** The raw CLI slug argument: bare (= task), `task:<slug>`, or `spec:<slug>`. */
175
175
  arg: string;
176
176
  /** The working clone/checkout to run in-place in. */
177
177
  cwd: string;
@@ -187,10 +187,10 @@ export interface DoOptions {
187
187
  /**
188
188
  * Per-repo `autoTask` policy (resolved by `autoslice-gate`: flag > env >
189
189
  * per-repo > global > default false). It gates the AUTO-PICK / pool path only
190
- * (`do-autopick.ts`'s taskable-prd pool): "may an agent auto-task an
191
- * UNDECLARED prd in this repo?". An EXPLICITLY-named `do prd:<slug>` tasks
190
+ * (`do-autopick.ts`'s taskable-spec pool): "may an agent auto-task an
191
+ * UNDECLARED spec in this repo?". An EXPLICITLY-named `do spec:<slug>` tasks
192
192
  * REGARDLESS of this policy (the dispatch passes `explicit: true` to
193
- * `performTask` — naming the prd IS the authorization, exactly as `do <task>`
193
+ * `performTask` — naming the spec IS the authorization, exactly as `do <task>`
194
194
  * builds regardless of `autoBuild`). Ignored by the task-build path.
195
195
  */
196
196
  autoTask?: boolean;
@@ -205,7 +205,7 @@ export interface DoOptions {
205
205
  promptGuidance?: PromptGuidance;
206
206
  /**
207
207
  * **The tasker review→edit→converge LOOP seam** (`slicer-review-edit-loop`):
208
- * consumed ONLY by the `do prd:<slug>` tasking path — after the agent produces
208
+ * consumed ONLY by the `do spec:<slug>` tasking path — after the agent produces
209
209
  * candidate tasks, run the `review` SKILL as a review→edit→re-review loop that
210
210
  * improves them, routing the verdict through the needsAnswers / needs-attention
211
211
  * sink. Ignored by the task-build path. Omitted ⇒ no loop (candidate tasks land
@@ -234,20 +234,20 @@ export interface DoOptions {
234
234
  explicitMerge?: boolean;
235
235
  /**
236
236
  * **Per-TRANSITION override for the TASKING transition only** (config
237
- * `taskingIntegration`). Consumed ONLY by the `do prd:<slug>` tasking path: the
237
+ * `taskingIntegration`). Consumed ONLY by the `do spec:<slug>` tasking path: the
238
238
  * value threaded into {@link performTask} is `taskingIntegration ?? integration`,
239
239
  * so an unset override is byte-for-byte today's behaviour (tasking uses
240
240
  * `integration`). The task-BUILD path ALWAYS threads `integration` (never this
241
241
  * key). An explicit `--merge`/`--propose` flag wins over BOTH (the flag-override
242
242
  * layer sets `integration` AND `taskingIntegration` to the typed mode — see
243
- * `do-config.ts`). DISTINCT from intake's per-EMITTED-TYPE `{task, prd}` resolver.
243
+ * `do-config.ts`). DISTINCT from intake's per-EMITTED-TYPE `{task, spec}` resolver.
244
244
  */
245
245
  taskingIntegration?: IntegrationMode;
246
246
  /**
247
- * **The per-repo TASK-PLACEMENT default** (prd
247
+ * **The per-repo TASK-PLACEMENT default** (spec
248
248
  * `staging-pool-position-gate-and-trust-model` US #5, task
249
249
  * `runner-deterministic-slice-placement-policy-and-precedence`). Consumed by
250
- * the `do prd:<slug>` tasking path: the value is fed as the
250
+ * the `do spec:<slug>` tasking path: the value is fed as the
251
251
  * CONFIGURED-DEFAULT rung into the runner-deterministic placement resolver
252
252
  * (`src/placement.ts`). Resolved per-repo through the SAME chain as
253
253
  * `taskingIntegration` (flag > env > per-repo > global > built-in
@@ -274,7 +274,7 @@ export interface DoOptions {
274
274
  */
275
275
  ignoreDivergedMain?: boolean;
276
276
  /**
277
- * **`--allow-backlog`** (prd
277
+ * **`--allow-backlog`** (spec
278
278
  * `do-allow-backlog-drive-staged-tasks-without-promotion`): let this `do task:`
279
279
  * invocation FIND, CLAIM, and COMPLETE a task that lives in `tasks/backlog/`
280
280
  * (staging) IN PLACE, WITHOUT first promoting it to the pool — so no `advance`
@@ -284,7 +284,7 @@ export interface DoOptions {
284
284
  * build/gate are identical, and the done-move goes `tasks/backlog/ → tasks/done/`
285
285
  * directly (the explicit drive IS the promotion). EXPLICIT-INVOCATION-ONLY:
286
286
  * default off, never set by `run`/auto-pick/`advance` (the leak-fence). The
287
- * task-build path only; the `do prd:` path is unaffected.
287
+ * task-build path only; the `do spec:` path is unaffected.
288
288
  */
289
289
  allowBacklog?: boolean;
290
290
  /** The declared per-repo ENV-PREP step (string | list), run ONCE before the
@@ -300,7 +300,7 @@ export interface DoOptions {
300
300
  */
301
301
  freshWorktreeGate?: boolean;
302
302
  /**
303
- * **The cross-job merge-serialiser CAS-retry cap** (config `mergeRetries`, prd
303
+ * **The cross-job merge-serialiser CAS-retry cap** (config `mergeRetries`, spec
304
304
  * `land-time-reverify-and-parallel-merge-ceiling` Story 5 / Applied Answer q1
305
305
  * (a)). Threaded VERBATIM into `performComplete` → `performIntegration` so a
306
306
  * wide-matrix CI's raised cap actually reaches the cross-job land queue (the
@@ -335,7 +335,7 @@ export interface DoOptions {
335
335
  */
336
336
  providerInstance?: ReviewProvider;
337
337
  /**
338
- * **Gate 2 — the PR/code review gate** (GATES prd `work/prds/tasked/review.md`):
338
+ * **Gate 2 — the PR/code review gate** (GATES spec `work/specs/tasked/review.md`):
339
339
  * threaded VERBATIM into `performComplete` (the gate rides inside the shared
340
340
  * `do`/`complete` pipeline, so CI inherits it for free). When `review` is on,
341
341
  * the `review` SKILL runs as a fresh-context agent AFTER the green `verify` and
@@ -349,7 +349,7 @@ export interface DoOptions {
349
349
  reviewGate?: ReviewGate;
350
350
  /**
351
351
  * **The task-SET ACCEPTANCE GATE seam** (task `slice-acceptance-gate`):
352
- * consumed ONLY by the `do prd:<slug>` tasking path. When `review` resolves on,
352
+ * consumed ONLY by the `do spec:<slug>` tasking path. When `review` resolves on,
353
353
  * a fresh-context review of the produced task SET runs BEFORE the tasks
354
354
  * integrate (riding `performIntegration`'s review block); `block` routes the set
355
355
  * to needs-attention, `approve` lets it integrate. It rides the SAME BUILD
@@ -453,7 +453,7 @@ interface DoAgentLaunchOptions {
453
453
  * there is no checkout, so the worktree is materialised under `workspacesDir`.
454
454
  */
455
455
  export interface DoRemoteOptions extends DoAgentLaunchOptions {
456
- /** The raw CLI slug argument: bare (= task), `task:<slug>`, or `prd:<slug>`. */
456
+ /** The raw CLI slug argument: bare (= task), `task:<slug>`, or `spec:<slug>`. */
457
457
  arg: string;
458
458
  /**
459
459
  * The registered remote spec/URL to run against (`do --remote <r>`). Resolved
@@ -473,12 +473,12 @@ export interface DoRemoteOptions extends DoAgentLaunchOptions {
473
473
  arbiter?: string;
474
474
  /**
475
475
  * Per-repo `autoTask` policy — gates the AUTO-PICK / pool path only. An
476
- * EXPLICITLY-named `do --remote prd:<slug>` tasks regardless of it (the
476
+ * EXPLICITLY-named `do --remote spec:<slug>` tasks regardless of it (the
477
477
  * dispatch passes `explicit: true`), mirroring `do <task>` vs `autoBuild`.
478
478
  * Ignored by the task-build path.
479
479
  */
480
480
  autoTask?: boolean;
481
- /** The tasker review→edit→converge loop seam — `do --remote prd:<slug>` path only (see {@link DoOptions.reviewLoop}). */
481
+ /** The tasker review→edit→converge loop seam — `do --remote spec:<slug>` path only (see {@link DoOptions.reviewLoop}). */
482
482
  reviewLoop?: TaskReviewGate;
483
483
  /** The tasker improver loop's `taskerLoopMax` cap. Loop only. */
484
484
  taskerLoopMax?: number;
@@ -495,22 +495,22 @@ export interface DoRemoteOptions extends DoAgentLaunchOptions {
495
495
  explicitMerge?: boolean;
496
496
  /**
497
497
  * **Per-TRANSITION override for the TASKING transition only** (config
498
- * `taskingIntegration`) on the `do --remote prd:<slug>` path: threaded into
498
+ * `taskingIntegration`) on the `do --remote spec:<slug>` path: threaded into
499
499
  * {@link performTask} as `taskingIntegration ?? integration`. Unset ⇒ tasking
500
500
  * uses `integration` (today's behaviour); the task-BUILD path always threads
501
501
  * `integration`. See {@link DoOptions.taskingIntegration}.
502
502
  */
503
503
  taskingIntegration?: IntegrationMode;
504
504
  /**
505
- * **The per-repo TASK-PLACEMENT default** (prd
505
+ * **The per-repo TASK-PLACEMENT default** (spec
506
506
  * `staging-pool-position-gate-and-trust-model` US #5) on the `do --remote
507
- * prd:<slug>` path: threaded into {@link performTask} as the
507
+ * spec:<slug>` path: threaded into {@link performTask} as the
508
508
  * configured-default rung. See {@link DoOptions.tasksLandIn}.
509
509
  */
510
510
  tasksLandIn?: 'pre-backlog' | 'ready';
511
511
  /**
512
512
  * **The OPERATOR's EXPLICIT task-placement override** on the `do --remote
513
- * prd:` path. See {@link DoOptions.explicitTasksLandIn}.
513
+ * spec:` path. See {@link DoOptions.explicitTasksLandIn}.
514
514
  */
515
515
  explicitTasksLandIn?: 'pre-backlog' | 'ready';
516
516
  /** The declared per-repo ENV-PREP step (string | list), run ONCE before the
@@ -526,7 +526,7 @@ export interface DoRemoteOptions extends DoAgentLaunchOptions {
526
526
  */
527
527
  freshWorktreeGate?: boolean;
528
528
  /**
529
- * **The cross-job merge-serialiser CAS-retry cap** (config `mergeRetries`, prd
529
+ * **The cross-job merge-serialiser CAS-retry cap** (config `mergeRetries`, spec
530
530
  * `land-time-reverify-and-parallel-merge-ceiling` Story 5 / Applied Answer q1
531
531
  * (a)). Threaded VERBATIM into `performComplete` → `performIntegration` so the
532
532
  * resolved cap reaches the cross-job land queue (the CAS loop IS the queue
@@ -564,7 +564,7 @@ export interface DoRemoteOptions extends DoAgentLaunchOptions {
564
564
  reviewModel?: string;
565
565
  reviewMaxRounds?: number;
566
566
  reviewGate?: ReviewGate;
567
- /** The task-SET ACCEPTANCE GATE seam — `do --remote prd:<slug>` path only (see {@link DoOptions.taskReviewGate}). */
567
+ /** The task-SET ACCEPTANCE GATE seam — `do --remote spec:<slug>` path only (see {@link DoOptions.taskReviewGate}). */
568
568
  taskReviewGate?: ReviewGate;
569
569
  /**
570
570
  * **`--allow-backlog`** on the no-checkout `do --remote`/`--isolated` path (see
@@ -586,7 +586,7 @@ export interface DoRemoteOptions extends DoAgentLaunchOptions {
586
586
  const DEFAULT_ARBITER = 'origin';
587
587
 
588
588
  /**
589
- * Map a `do prd:<slug>` {@link TaskResult} onto the `do` {@link DoResult}
589
+ * Map a `do spec:<slug>` {@link TaskResult} onto the `do` {@link DoResult}
590
590
  * contract: outcomes pass through (tasked / gate-refused / stale / agent-failed /
591
591
  * usage-error), the lock-lost outcome splits into `lost` (exit 2) vs `contended`
592
592
  * (exit 3) by its exit code, and the tasking-only exit 4 (stale) is reported on
@@ -620,7 +620,7 @@ function taskResultToDoResult(tasked: TaskResult): DoResult {
620
620
  break;
621
621
  case 'needs-attention':
622
622
  // The tasker review→edit loop found the decomposition unclear and routed the
623
- // prd to needs-attention (no guessed tasks). Same exit class as a stuck
623
+ // spec to needs-attention (no guessed tasks). Same exit class as a stuck
624
624
  // build (1).
625
625
  outcome = 'needs-attention';
626
626
  exitCode = 1;
@@ -684,8 +684,8 @@ export async function performDo(options: DoOptions): Promise<DoResult> {
684
684
  }
685
685
 
686
686
  // 1. Resolve the slug across BOTH namespaces — `do` is the ONE command that
687
- // spans them (ADR §3a): bare → task (after a no-prd-collision check;
688
- // ERROR on collision), `task:`/`prd:` explicit. A collision / resolution
687
+ // spans them (ADR §3a): bare → task (after a no-spec-collision check;
688
+ // ERROR on collision), `task:`/`spec:` explicit. A collision / resolution
689
689
  // failure is a loud usage error (exit 1).
690
690
  let resolved;
691
691
  try {
@@ -717,10 +717,10 @@ export async function performDo(options: DoOptions): Promise<DoResult> {
717
717
  arbiter,
718
718
  doer: 'agent',
719
719
  autoTask: options.autoTask,
720
- // EXPLICIT dispatch: a `do prd:<slug>` target was NAMED (the operator typed
720
+ // EXPLICIT dispatch: a `do spec:<slug>` target was NAMED (the operator typed
721
721
  // it, or the auto-pick POOL already filtered it on `autoTask` before
722
722
  // dispatching here — the single policy-enforcement point). So the tasking gate
723
- // drops the `autoTask` policy term and binds only the prd's own readiness
723
+ // drops the `autoTask` policy term and binds only the spec's own readiness
724
724
  // (`humanOnly`/`needsAnswers`) + `taskedAfter`, EXACTLY as `do <task>` builds a
725
725
  // named task regardless of `autoBuild` (the pool gates the policy, not the
726
726
  // explicit claim).
@@ -746,14 +746,14 @@ export async function performDo(options: DoOptions): Promise<DoResult> {
746
746
  // precedence`). The tasker reads them as the configured-default + the
747
747
  // top rung of the runner-deterministic placement resolver; the
748
748
  // `originTrust: untrusted` force is read inside the tasker from the
749
- // prd's stamped frontmatter.
749
+ // spec's stamped frontmatter.
750
750
  tasksLandIn: options.tasksLandIn,
751
751
  explicitTasksLandIn: options.explicitTasksLandIn,
752
752
  noPR: options.noPR,
753
753
  providerInstance: options.providerInstance,
754
754
  // The tasker review→edit→converge loop (slicer-review-edit-loop): improves the
755
755
  // candidate tasks in place + routes the verdict through the needsAnswers /
756
- // needs-attention sink. Threaded only on the `do prd:` path; omitted ⇒ no loop.
756
+ // needs-attention sink. Threaded only on the `do spec:` path; omitted ⇒ no loop.
757
757
  reviewLoop: options.reviewLoop,
758
758
  taskerLoopMax: options.taskerLoopMax,
759
759
  reviewExecutions: options.reviewExecutions,
@@ -1008,7 +1008,7 @@ export async function performDo(options: DoOptions): Promise<DoResult> {
1008
1008
 
1009
1009
  // 5. Run the agent autonomously in the checkout, ON the work branch — the
1010
1010
  // SAME prompt assembly `dorfl prompt` emits (canonical wrapper +
1011
- // source prd + the task's ## Prompt). The agent only edits code (it does
1011
+ // source spec + the task's ## Prompt). The agent only edits code (it does
1012
1012
  // no git). This is the one NEW middle step `ar-run.sh` shelled out for
1013
1013
  // (`prompt | pi`).
1014
1014
  // The post-claim pipeline reads the uniform `IsolatedTree` handle (`tree.dir`)
@@ -1047,14 +1047,14 @@ export async function performDo(options: DoOptions): Promise<DoResult> {
1047
1047
  content: readFileSync(task.path, 'utf8'),
1048
1048
  env,
1049
1049
  });
1050
- // Per-item override layer: a task or prd may pin `promptGuidance.testFirst`
1050
+ // Per-item override layer: a task or spec may pin `promptGuidance.testFirst`
1051
1051
  // in its frontmatter, superseding the resolved repo policy for THIS item.
1052
1052
  const itemGuidance = resolvePromptGuidanceForItem({
1053
1053
  cwd: tree.dir,
1054
1054
  repoResolved: {testFirst: options.promptGuidance?.testFirst === true},
1055
1055
  taskContent: readFileSync(task.path, 'utf8'),
1056
1056
  });
1057
- prompt = buildAgentPrompt(task.slug, task.prd, task.taskPrompt, {
1057
+ prompt = buildAgentPrompt(task.slug, task.spec, task.taskPrompt, {
1058
1058
  cwd: tree.dir,
1059
1059
  continueContext,
1060
1060
  promptGuidance: itemGuidance,
@@ -1175,7 +1175,7 @@ export async function performDo(options: DoOptions): Promise<DoResult> {
1175
1175
  verify: options.verify,
1176
1176
  freshWorktreeGate: options.freshWorktreeGate,
1177
1177
  // The cross-job merge-serialiser CAS-retry cap (config `mergeRetries`) — the
1178
- // git-alone FLOOR of the cross-job land queue (prd `land-time-reverify-and-
1178
+ // git-alone FLOOR of the cross-job land queue (spec `land-time-reverify-and-
1179
1179
  // parallel-merge-ceiling` Story 5 / Applied Answer q1 (a)). Threaded so a
1180
1180
  // wide-matrix CI's raised cap actually reaches the merge loop.
1181
1181
  mergeRetries: options.mergeRetries,
@@ -1875,7 +1875,7 @@ export async function performDoRemote(
1875
1875
  try {
1876
1876
  // 2a. Resolve the slug across BOTH namespaces against the claim clone (it
1877
1877
  // carries `work/` from the mirror's main). A collision / resolution
1878
- // failure is a loud usage error; a `prd:` arg reaches the not-yet-wired
1878
+ // failure is a loud usage error; a `spec:` arg reaches the not-yet-wired
1879
1879
  // stub — identical behaviour to in-place `do`.
1880
1880
  let resolved;
1881
1881
  try {
@@ -1905,9 +1905,9 @@ export async function performDoRemote(
1905
1905
  arbiter: 'origin',
1906
1906
  doer: 'agent',
1907
1907
  autoTask: options.autoTask,
1908
- // EXPLICIT dispatch (same as the in-place path above): the `prd:<slug>` was
1908
+ // EXPLICIT dispatch (same as the in-place path above): the `spec:<slug>` was
1909
1909
  // NAMED (typed, or pool-filtered on `autoTask` before reaching here), so the
1910
- // tasking gate drops the policy term — only the prd's own readiness +
1910
+ // tasking gate drops the policy term — only the spec's own readiness +
1911
1911
  // `taskedAfter` bind, mirroring the build path vs `autoBuild`.
1912
1912
  explicit: true,
1913
1913
  dorfl: options.dorfl,
@@ -1919,22 +1919,22 @@ export async function performDoRemote(
1919
1919
  // `provider` is the SAME the task-build path threads (arg parity), but the
1920
1920
  // MODE is the per-TRANSITION TASKING resolution
1921
1921
  // (`per-transition-integration-mode-slicing-vs-build`):
1922
- // `taskingIntegration ?? integration`, so the `--remote prd:` output ALSO
1922
+ // `taskingIntegration ?? integration`, so the `--remote spec:` output ALSO
1923
1923
  // routes through the shared core with the tasking-resolved mode.
1924
1924
  integration: options.taskingIntegration ?? options.integration,
1925
1925
  // The per-repo TASK-PLACEMENT default + the operator's explicit
1926
1926
  // override (task `runner-deterministic-slice-placement-policy-and-
1927
- // precedence`). Same threading as the in-place `do prd:` path.
1927
+ // precedence`). Same threading as the in-place `do spec:` path.
1928
1928
  tasksLandIn: options.tasksLandIn,
1929
1929
  explicitTasksLandIn: options.explicitTasksLandIn,
1930
1930
  noPR: options.noPR,
1931
1931
  providerInstance: options.providerInstance,
1932
- // The tasker review→edit→converge loop on the `do --remote prd:` path too.
1932
+ // The tasker review→edit→converge loop on the `do --remote spec:` path too.
1933
1933
  reviewLoop: options.reviewLoop,
1934
1934
  taskerLoopMax: options.taskerLoopMax,
1935
1935
  reviewExecutions: options.reviewExecutions,
1936
1936
  taskerLoopModel: options.taskerLoopModel,
1937
- // The task-SET ACCEPTANCE GATE on the `do --remote prd:` path too.
1937
+ // The task-SET ACCEPTANCE GATE on the `do --remote spec:` path too.
1938
1938
  review: options.review,
1939
1939
  reviewGate: options.taskReviewGate,
1940
1940
  acceptanceReviewModel: options.reviewModel,
@@ -2238,14 +2238,14 @@ async function runRemotePipeline(
2238
2238
  content: readFileSync(task.path, 'utf8'),
2239
2239
  env,
2240
2240
  });
2241
- // Per-item override layer (mirrors in-place `do`): the task/prd frontmatter
2241
+ // Per-item override layer (mirrors in-place `do`): the task/spec frontmatter
2242
2242
  // may override the resolved repo `promptGuidance.testFirst` for THIS item.
2243
2243
  const itemGuidance = resolvePromptGuidanceForItem({
2244
2244
  cwd,
2245
2245
  repoResolved: {testFirst: options.promptGuidance?.testFirst === true},
2246
2246
  taskContent: readFileSync(task.path, 'utf8'),
2247
2247
  });
2248
- prompt = buildAgentPrompt(task.slug, task.prd, task.taskPrompt, {
2248
+ prompt = buildAgentPrompt(task.slug, task.spec, task.taskPrompt, {
2249
2249
  cwd,
2250
2250
  continueContext,
2251
2251
  promptGuidance: itemGuidance,
@@ -2568,7 +2568,7 @@ async function primeWorktreeTrackingRef(
2568
2568
  * identity) ride VERBATIM from the threaded `DoOptions` onto the structurally-
2569
2569
  * matching {@link DoRemoteOptions} fields; `cwd` is DROPPED (the worktree replaces
2570
2570
  * it) and `remote` + `workspacesDir` are supplied from this driver's closure (the
2571
- * mirror's arbiter URL + the agents' execution area). A `prd:` arg flows through
2571
+ * mirror's arbiter URL + the agents' execution area). A `spec:` arg flows through
2572
2572
  * unchanged — `performDoRemote` tasks it against the claim clone with NO build
2573
2573
  * worktree (the tasking/surface/triage/apply rungs are tree-less ledger moves, the
2574
2574
  * substrate the task's criterion 4 preserves).
@@ -5,7 +5,7 @@ import {resolveSidecarIdentity, sidecarPathFor} from './sidecar.js';
5
5
  import {resolveItemPathByIdentity} from './item-path.js';
6
6
 
7
7
  /**
8
- * The DIRECT-DELETE helper (prd
8
+ * The DIRECT-DELETE helper (spec
9
9
  * `agentic-question-resolution-retire-disposition-vocabulary`, US #5/#11; task
10
10
  * `direct-delete-question-cli-helper`) — the "I just want to throw this away"
11
11
  * path that `git rm`s a source item AND its question sidecar (when present) in
@@ -33,7 +33,7 @@ export interface DropSourceOptions {
33
33
  /** Working clone/worktree the deletion commits in. */
34
34
  cwd: string;
35
35
  /**
36
- * The namespaced item identity to delete (`task:foo` / `prd:bar` /
36
+ * The namespaced item identity to delete (`task:foo` / `spec:bar` /
37
37
  * `observation:baz` / `obs:baz` / a bare `<slug>` = task). Resolved to its
38
38
  * on-disk path by identity, folder-agnostic.
39
39
  */
package/src/env-config.ts CHANGED
@@ -65,7 +65,7 @@ const KEY_COERCIONS: {[K in keyof Config]?: Coercion} = {
65
65
  // LOUDLY naming the variable + the valid options.
66
66
  observationTriage: {enum: ['off', 'ask', 'auto']},
67
67
  // The merge-question SURFACER gate is a 3-state ENUM coercion (mirrors
68
- // `observationTriage`'s shape; SEPARATE axis with a HIGHER default, prd
68
+ // `observationTriage`'s shape; SEPARATE axis with a HIGHER default, spec
69
69
  // `land-time-reverify-and-parallel-merge-ceiling` Story 17 / task
70
70
  // `merge-questions-gate-axis`), so `DORFL_MERGE_QUESTIONS=off|ask|auto`
71
71
  // works and a typo FAILS LOUDLY naming the variable + the valid options.
@@ -74,8 +74,8 @@ const KEY_COERCIONS: {[K in keyof Config]?: Coercion} = {
74
74
  // `DORFL_SURFACE_BLOCKERS=true|false` works and a typo FAILS LOUDLY.
75
75
  surfaceBlockers: 'boolean',
76
76
  // `surfaceStaging` (the BOOLEAN gate-family member that widens the SURFACE
77
- // candidate set to include STAGING — `tasks/backlog/` + `prds/proposed/` —
78
- // not only the agent pool; prd
77
+ // candidate set to include STAGING — `tasks/backlog/` + `specs/proposed/` —
78
+ // not only the agent pool; spec
79
79
  // `staging-surface-and-apply-promote-safety` F2) coerces as a BOOLEAN like
80
80
  // `autoBuild`/`surfaceBlockers`, so `DORFL_SURFACE_STAGING=true|false`
81
81
  // works and a typo FAILS LOUDLY. Resolution chain identical to the other
@@ -98,7 +98,7 @@ const KEY_COERCIONS: {[K in keyof Config]?: Coercion} = {
98
98
  // works and a typo FAILS LOUDLY. Unset ⇒ the tasking transition falls back to
99
99
  // `integration` (the flat value). It NEVER touches the build transition or intake.
100
100
  taskingIntegration: {enum: ['propose', 'merge']},
101
- // `tasksLandIn` (the per-repo TASK-PLACEMENT default — prd
101
+ // `tasksLandIn` (the per-repo TASK-PLACEMENT default — spec
102
102
  // `staging-pool-position-gate-and-trust-model` US #5) coerces as the
103
103
  // `pre-backlog`/`ready` enum, so `DORFL_TASKS_LAND_IN=ready` works and a
104
104
  // typo FAILS LOUDLY. Same
@@ -113,7 +113,7 @@ const KEY_COERCIONS: {[K in keyof Config]?: Coercion} = {
113
113
  // > global > built-in `pre-proposed`); fed into the shared placement resolver
114
114
  // (`src/placement.ts`) as the configured-default rung for the spec lifecycle.
115
115
  // The legacy `prdsLandIn` key / `DORFL_PRDS_LAND_IN` env are GONE after the
116
- // prd → spec hard cutover (clean break).
116
+ // `prd``spec` hard cutover (clean break).
117
117
  specsLandIn: {enum: ['pre-proposed', 'ready']},
118
118
  // `noPR` (the PR-INTENT axis) is a BOOLEAN coercion (like `review`), so
119
119
  // `DORFL_NO_PR=true|false` works and a typo FAILS LOUDLY. The removed
@@ -139,14 +139,14 @@ const KEY_COERCIONS: {[K in keyof Config]?: Coercion} = {
139
139
  // `freshWorktreeGate` is a BOOLEAN coercion (like `taskerLoop`), so
140
140
  // `DORFL_FRESH_WORKTREE_GATE=true|false` works and a typo FAILS LOUDLY.
141
141
  freshWorktreeGate: 'boolean',
142
- // `mergeRetries` (the cross-job merge serialiser's CAS-retry cap — prd
142
+ // `mergeRetries` (the cross-job merge serialiser's CAS-retry cap — spec
143
143
  // `land-time-reverify-and-parallel-merge-ceiling` Story 5 / Applied Answer q1 (a))
144
144
  // coerces as a NUMBER (like `reviewMaxRounds`), so `DORFL_MERGE_RETRIES=20`
145
145
  // works and a typo FAILS LOUDLY. A wide-matrix CI raises it; the default
146
146
  // (1000 — the C2 large liveness ceiling) stays in place when unset.
147
147
  mergeRetries: 'number',
148
148
  // `strictMergeApproval` (the OPT-IN strictness layered on the OQ6
149
- // stale-approval default — prd `land-time-reverify-and-parallel-merge-ceiling`
149
+ // stale-approval default — spec `land-time-reverify-and-parallel-merge-ceiling`
150
150
  // sidecar OQ6 / task `strict-merge-approval-gate`) coerces as a BOOLEAN
151
151
  // (like `freshWorktreeGate`), so `DORFL_STRICT_MERGE_APPROVAL=true|false`
152
152
  // works and a typo FAILS LOUDLY. Default OFF; ON re-surfaces the
@@ -163,7 +163,7 @@ const KEY_COERCIONS: {[K in keyof Config]?: Coercion} = {
163
163
  /**
164
164
  * The env vars for the nested members of the `promptGuidance` namespace. The
165
165
  * key is the env var name (`DORFL_PROMPT_GUIDANCE_<MEMBER>`, the nested
166
- * naming the prd specifies); the value is the (boolean) coercion. Each member
166
+ * naming the spec specifies); the value is the (boolean) coercion. Each member
167
167
  * present in env contributes `{<member>: bool}` into a single
168
168
  * `promptGuidance` partial — mergeConfig replaces the whole namespace per the
169
169
  * layered precedence, which is correct because EVERY member is included (env
package/src/format.ts CHANGED
@@ -202,7 +202,7 @@ export function formatCwdSection(section: CwdSection): string[] {
202
202
  }
203
203
  }
204
204
 
205
- // The PER-ITEM LOCK in-flight SURFACE for the cwd (prd
205
+ // The PER-ITEM LOCK in-flight SURFACE for the cwd (spec
206
206
  // `ledger-status-per-item-lock-refs` US #8): held (`active` = in-progress) and
207
207
  // `stuck` (= needs-attention) lock entries + their reasons. This is what keeps a
208
208
  // held/stuck cwd item from vanishing: the held-slug subtraction removes it from
@@ -263,7 +263,7 @@ export function formatReport(report: ScanReport, cwd?: CwdSection): string {
263
263
  lines.push('No participating repos found.');
264
264
  lines.push(
265
265
  '(A repo participates iff its work/ tree has lifecycle content in any ' +
266
- 'pool: tasks/ready, tasks/backlog, prds/proposed, prds/ready, ' +
266
+ 'pool: tasks/ready, tasks/backlog, specs/proposed, specs/ready, ' +
267
267
  'notes/observations, or questions.)',
268
268
  );
269
269
  } else {
@@ -281,7 +281,7 @@ export function formatReport(report: ScanReport, cwd?: CwdSection): string {
281
281
  const groups = categoriseItems(repo.items);
282
282
  allGroups.push(groups);
283
283
  lines.push(...formatRepo(repo.path, groups));
284
- // The one-slug-one-folder LINT (prd `ledger-integrity` story 3): WARN LOUDLY
284
+ // The one-slug-one-folder LINT (spec `ledger-integrity` story 3): WARN LOUDLY
285
285
  // when any slug in this repo's ledger resides in >1 status folder (a corrupt
286
286
  // ledger — never a silent pass). Clean ledgers add no lines.
287
287
  const warnings = formatDuplicateWarnings(repo.ledgerDuplicates ?? []);