@deftai/directive-runtime 0.126.0-beta.2 → 0.127.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 (345) hide show
  1. package/.agents/skills/deft-directive-release/SKILL.md +428 -7
  2. package/Taskfile.yml +1 -1
  3. package/UPGRADING.md +4 -3
  4. package/commands.md +9 -6
  5. package/contracts/design-critique.md +39 -1
  6. package/dist/contract-entry.js +2 -4
  7. package/dist/dispatch.js +1 -6
  8. package/dist/doctor-diagnose.d.ts +1 -1
  9. package/dist/doctor-diagnose.js +38 -9
  10. package/dist/doctor.js +1 -1
  11. package/dist/hook-dispatch.d.ts +1 -1
  12. package/dist/hook-dispatch.js +1 -1
  13. package/dist/install-cli/coverage-map.d.ts +1 -5
  14. package/dist/install-cli/coverage-map.js +28 -22
  15. package/dist/installer-output-inventory.js +1 -4
  16. package/dist/lifecycle-cli/coverage-map.js +37 -35
  17. package/dist/migrate.js +12 -7
  18. package/dist/removal-steps/index.d.ts +2 -2
  19. package/dist/removal-steps/steps.js +6 -9
  20. package/dist/removal-steps/strategies.js +1 -1
  21. package/dist/session-start.js +28 -1
  22. package/dist/setup-wiring.d.ts +4 -0
  23. package/dist/setup-wiring.js +6 -7
  24. package/dist/setup.js +12 -14
  25. package/dist/uninstall.js +1 -1
  26. package/dist/vbrief-preflight-fixtures.js +1 -1
  27. package/dist/verify-intent-constraint.d.ts +2 -0
  28. package/dist/verify-intent-constraint.js +24 -0
  29. package/dist/verify-observable-scope.d.ts +2 -0
  30. package/dist/verify-observable-scope.js +24 -0
  31. package/dist/verify-review-monitor.d.ts +7 -0
  32. package/dist/verify-review-monitor.js +21 -0
  33. package/docs/getting-started.md +13 -1
  34. package/docs/intent-constraint.md +7 -1
  35. package/docs/observable-scope.md +6 -0
  36. package/package.json +1 -1
  37. package/packs/skills/skills-pack-0.1.json +7 -7
  38. package/packs/strategies/strategies-pack-0.1.json +32 -19
  39. package/scm/github.md +1 -0
  40. package/skills/deft-directive-article-review/SKILL.md +104 -24
  41. package/skills/deft-directive-design-critique/SKILL.md +10 -9
  42. package/skills/deft-directive-pre-pr/SKILL.md +14 -0
  43. package/skills/deft-directive-release/SKILL.md +4 -4
  44. package/skills/deft-directive-review-cycle/SKILL.md +19 -2
  45. package/skills/deft-directive-setup/SKILL.md +6 -0
  46. package/skills/deft-directive-swarm/references/host-cursor.md +18 -1
  47. package/skills/deft-directive-swarm/references/host-grok-build.md +4 -4
  48. package/skills/deft-directive-sync/SKILL.md +2 -2
  49. package/strategies/README.md +1 -0
  50. package/strategies/artifact-guards.md +2 -2
  51. package/strategies/design-thinking.md +182 -0
  52. package/strategies/discuss.md +2 -0
  53. package/strategies/interview.md +76 -23
  54. package/strategies/rapid.md +22 -12
  55. package/tasks/engine.yml +11 -4
  56. package/templates/agents-entry.md +5 -3
  57. package/templates/design-critique-brief.md +5 -1
  58. package/tutorial/beats.json +2 -2
  59. package/vendor/directive-content/.agents/skills/deft-directive-release/SKILL.md +428 -7
  60. package/vendor/directive-content/Taskfile.yml +1 -1
  61. package/vendor/directive-content/UPGRADING.md +4 -3
  62. package/vendor/directive-content/commands.md +9 -6
  63. package/vendor/directive-content/contracts/design-critique.md +39 -1
  64. package/vendor/directive-content/docs/getting-started.md +13 -1
  65. package/vendor/directive-content/docs/intent-constraint.md +7 -1
  66. package/vendor/directive-content/docs/observable-scope.md +6 -0
  67. package/vendor/directive-content/packs/skills/skills-pack-0.1.json +7 -7
  68. package/vendor/directive-content/packs/strategies/strategies-pack-0.1.json +32 -19
  69. package/vendor/directive-content/scm/github.md +1 -0
  70. package/vendor/directive-content/skills/deft-directive-article-review/SKILL.md +104 -24
  71. package/vendor/directive-content/skills/deft-directive-design-critique/SKILL.md +10 -9
  72. package/vendor/directive-content/skills/deft-directive-pre-pr/SKILL.md +14 -0
  73. package/vendor/directive-content/skills/deft-directive-release/SKILL.md +4 -4
  74. package/vendor/directive-content/skills/deft-directive-review-cycle/SKILL.md +19 -2
  75. package/vendor/directive-content/skills/deft-directive-setup/SKILL.md +6 -0
  76. package/vendor/directive-content/skills/deft-directive-swarm/references/host-cursor.md +18 -1
  77. package/vendor/directive-content/skills/deft-directive-swarm/references/host-grok-build.md +4 -4
  78. package/vendor/directive-content/skills/deft-directive-sync/SKILL.md +2 -2
  79. package/vendor/directive-content/strategies/README.md +1 -0
  80. package/vendor/directive-content/strategies/artifact-guards.md +2 -2
  81. package/vendor/directive-content/strategies/design-thinking.md +182 -0
  82. package/vendor/directive-content/strategies/discuss.md +2 -0
  83. package/vendor/directive-content/strategies/interview.md +76 -23
  84. package/vendor/directive-content/strategies/rapid.md +22 -12
  85. package/vendor/directive-content/tasks/engine.yml +11 -4
  86. package/vendor/directive-content/templates/agents-entry.md +5 -3
  87. package/vendor/directive-content/templates/design-critique-brief.md +5 -1
  88. package/vendor/directive-content/tutorial/beats.json +2 -2
  89. package/vendor/directive-core/dist/.tsbuildinfo +1 -1
  90. package/vendor/directive-core/dist/consumer-check-contract/evaluate.d.ts +3 -2
  91. package/vendor/directive-core/dist/consumer-check-contract/evaluate.d.ts.map +1 -1
  92. package/vendor/directive-core/dist/consumer-check-contract/evaluate.js +7 -6
  93. package/vendor/directive-core/dist/consumer-check-contract/evaluate.js.map +1 -1
  94. package/vendor/directive-core/dist/content-contracts/skills/greptile-detector.d.ts +6 -0
  95. package/vendor/directive-core/dist/content-contracts/skills/greptile-detector.d.ts.map +1 -1
  96. package/vendor/directive-core/dist/content-contracts/skills/greptile-detector.js +97 -3
  97. package/vendor/directive-core/dist/content-contracts/skills/greptile-detector.js.map +1 -1
  98. package/vendor/directive-core/dist/content-contracts/skills/helpers.d.ts +11 -1
  99. package/vendor/directive-core/dist/content-contracts/skills/helpers.d.ts.map +1 -1
  100. package/vendor/directive-core/dist/content-contracts/skills/helpers.js +18 -5
  101. package/vendor/directive-core/dist/content-contracts/skills/helpers.js.map +1 -1
  102. package/vendor/directive-core/dist/coverage-applicability/evaluate.d.ts.map +1 -1
  103. package/vendor/directive-core/dist/coverage-applicability/evaluate.js +406 -11
  104. package/vendor/directive-core/dist/coverage-applicability/evaluate.js.map +1 -1
  105. package/vendor/directive-core/dist/deposit/live-procedure-targets.d.ts.map +1 -1
  106. package/vendor/directive-core/dist/deposit/live-procedure-targets.js.map +1 -1
  107. package/vendor/directive-core/dist/deposit/python-free.d.ts +2 -0
  108. package/vendor/directive-core/dist/deposit/python-free.d.ts.map +1 -1
  109. package/vendor/directive-core/dist/deposit/python-free.js +5 -1
  110. package/vendor/directive-core/dist/deposit/python-free.js.map +1 -1
  111. package/vendor/directive-core/dist/design-critique/auto-stamp-path1.d.ts +40 -0
  112. package/vendor/directive-core/dist/design-critique/auto-stamp-path1.d.ts.map +1 -1
  113. package/vendor/directive-core/dist/design-critique/auto-stamp-path1.js +116 -0
  114. package/vendor/directive-core/dist/design-critique/auto-stamp-path1.js.map +1 -1
  115. package/vendor/directive-core/dist/design-critique/citation-grammar.d.ts +36 -0
  116. package/vendor/directive-core/dist/design-critique/citation-grammar.d.ts.map +1 -1
  117. package/vendor/directive-core/dist/design-critique/citation-grammar.js +60 -3
  118. package/vendor/directive-core/dist/design-critique/citation-grammar.js.map +1 -1
  119. package/vendor/directive-core/dist/design-critique/completed-arc-record.d.ts +103 -3
  120. package/vendor/directive-core/dist/design-critique/completed-arc-record.d.ts.map +1 -1
  121. package/vendor/directive-core/dist/design-critique/completed-arc-record.js +127 -5
  122. package/vendor/directive-core/dist/design-critique/completed-arc-record.js.map +1 -1
  123. package/vendor/directive-core/dist/design-critique/ingest-posture.d.ts +27 -0
  124. package/vendor/directive-core/dist/design-critique/ingest-posture.d.ts.map +1 -0
  125. package/vendor/directive-core/dist/design-critique/ingest-posture.js +66 -0
  126. package/vendor/directive-core/dist/design-critique/ingest-posture.js.map +1 -0
  127. package/vendor/directive-core/dist/design-critique/panel-handback-acceptance.d.ts +106 -7
  128. package/vendor/directive-core/dist/design-critique/panel-handback-acceptance.d.ts.map +1 -1
  129. package/vendor/directive-core/dist/design-critique/panel-handback-acceptance.js +284 -17
  130. package/vendor/directive-core/dist/design-critique/panel-handback-acceptance.js.map +1 -1
  131. package/vendor/directive-core/dist/docs/docs-impact.d.ts +13 -0
  132. package/vendor/directive-core/dist/docs/docs-impact.d.ts.map +1 -1
  133. package/vendor/directive-core/dist/docs/docs-impact.js +49 -4
  134. package/vendor/directive-core/dist/docs/docs-impact.js.map +1 -1
  135. package/vendor/directive-core/dist/doctor/checks.d.ts.map +1 -1
  136. package/vendor/directive-core/dist/doctor/checks.js +3 -7
  137. package/vendor/directive-core/dist/doctor/checks.js.map +1 -1
  138. package/vendor/directive-core/dist/doctor/main.d.ts +48 -0
  139. package/vendor/directive-core/dist/doctor/main.d.ts.map +1 -1
  140. package/vendor/directive-core/dist/doctor/main.js +227 -4
  141. package/vendor/directive-core/dist/doctor/main.js.map +1 -1
  142. package/vendor/directive-core/dist/doctor/manifest.d.ts.map +1 -1
  143. package/vendor/directive-core/dist/doctor/manifest.js +3 -2
  144. package/vendor/directive-core/dist/doctor/manifest.js.map +1 -1
  145. package/vendor/directive-core/dist/doctor/paths.d.ts.map +1 -1
  146. package/vendor/directive-core/dist/doctor/paths.js +11 -0
  147. package/vendor/directive-core/dist/doctor/paths.js.map +1 -1
  148. package/vendor/directive-core/dist/engine-version.d.ts.map +1 -1
  149. package/vendor/directive-core/dist/engine-version.js +1 -4
  150. package/vendor/directive-core/dist/engine-version.js.map +1 -1
  151. package/vendor/directive-core/dist/hooks/dispatcher.d.ts +2 -0
  152. package/vendor/directive-core/dist/hooks/dispatcher.d.ts.map +1 -1
  153. package/vendor/directive-core/dist/hooks/dispatcher.js +156 -14
  154. package/vendor/directive-core/dist/hooks/dispatcher.js.map +1 -1
  155. package/vendor/directive-core/dist/init-deposit/agent-hooks.d.ts +4 -0
  156. package/vendor/directive-core/dist/init-deposit/agent-hooks.d.ts.map +1 -1
  157. package/vendor/directive-core/dist/init-deposit/agent-hooks.js +25 -4
  158. package/vendor/directive-core/dist/init-deposit/agent-hooks.js.map +1 -1
  159. package/vendor/directive-core/dist/init-deposit/scaffold.d.ts +4 -0
  160. package/vendor/directive-core/dist/init-deposit/scaffold.d.ts.map +1 -1
  161. package/vendor/directive-core/dist/init-deposit/scaffold.js +4 -2
  162. package/vendor/directive-core/dist/init-deposit/scaffold.js.map +1 -1
  163. package/vendor/directive-core/dist/install-contract/constants.d.ts.map +1 -1
  164. package/vendor/directive-core/dist/install-contract/constants.js +9 -1
  165. package/vendor/directive-core/dist/install-contract/constants.js.map +1 -1
  166. package/vendor/directive-core/dist/install-contract/data-status.d.ts.map +1 -1
  167. package/vendor/directive-core/dist/install-contract/data-status.js.map +1 -1
  168. package/vendor/directive-core/dist/install-contract/index.d.ts +1 -1
  169. package/vendor/directive-core/dist/install-contract/index.d.ts.map +1 -1
  170. package/vendor/directive-core/dist/install-contract/index.js.map +1 -1
  171. package/vendor/directive-core/dist/install-contract/package-meta.d.ts.map +1 -1
  172. package/vendor/directive-core/dist/install-contract/package-meta.js.map +1 -1
  173. package/vendor/directive-core/dist/install-health/cheap.d.ts.map +1 -1
  174. package/vendor/directive-core/dist/install-health/cheap.js +2 -6
  175. package/vendor/directive-core/dist/install-health/cheap.js.map +1 -1
  176. package/vendor/directive-core/dist/install-health/in-sync.d.ts.map +1 -1
  177. package/vendor/directive-core/dist/install-health/in-sync.js.map +1 -1
  178. package/vendor/directive-core/dist/install-health/index.d.ts +6 -6
  179. package/vendor/directive-core/dist/install-health/index.d.ts.map +1 -1
  180. package/vendor/directive-core/dist/install-health/index.js +3 -3
  181. package/vendor/directive-core/dist/install-health/index.js.map +1 -1
  182. package/vendor/directive-core/dist/install-health/ownership.d.ts.map +1 -1
  183. package/vendor/directive-core/dist/install-health/ownership.js +2 -6
  184. package/vendor/directive-core/dist/install-health/ownership.js.map +1 -1
  185. package/vendor/directive-core/dist/install-health/readers.d.ts.map +1 -1
  186. package/vendor/directive-core/dist/install-health/readers.js.map +1 -1
  187. package/vendor/directive-core/dist/install-health/wiring.d.ts.map +1 -1
  188. package/vendor/directive-core/dist/install-health/wiring.js +2 -3
  189. package/vendor/directive-core/dist/install-health/wiring.js.map +1 -1
  190. package/vendor/directive-core/dist/intake/issue-ingest.d.ts +2 -0
  191. package/vendor/directive-core/dist/intake/issue-ingest.d.ts.map +1 -1
  192. package/vendor/directive-core/dist/intake/issue-ingest.js +26 -1
  193. package/vendor/directive-core/dist/intake/issue-ingest.js.map +1 -1
  194. package/vendor/directive-core/dist/intent-constraint/evaluate.d.ts +7 -0
  195. package/vendor/directive-core/dist/intent-constraint/evaluate.d.ts.map +1 -1
  196. package/vendor/directive-core/dist/intent-constraint/evaluate.js +26 -5
  197. package/vendor/directive-core/dist/intent-constraint/evaluate.js.map +1 -1
  198. package/vendor/directive-core/dist/intent-constraint/plan-id-adopter.d.ts +76 -0
  199. package/vendor/directive-core/dist/intent-constraint/plan-id-adopter.d.ts.map +1 -0
  200. package/vendor/directive-core/dist/intent-constraint/plan-id-adopter.js +239 -0
  201. package/vendor/directive-core/dist/intent-constraint/plan-id-adopter.js.map +1 -0
  202. package/vendor/directive-core/dist/observable-scope/evaluate.d.ts +7 -0
  203. package/vendor/directive-core/dist/observable-scope/evaluate.d.ts.map +1 -1
  204. package/vendor/directive-core/dist/observable-scope/evaluate.js +51 -7
  205. package/vendor/directive-core/dist/observable-scope/evaluate.js.map +1 -1
  206. package/vendor/directive-core/dist/pr-closing-keywords/detect.d.ts.map +1 -1
  207. package/vendor/directive-core/dist/pr-closing-keywords/detect.js +52 -7
  208. package/vendor/directive-core/dist/pr-closing-keywords/detect.js.map +1 -1
  209. package/vendor/directive-core/dist/pr-closing-keywords/main.d.ts +2 -0
  210. package/vendor/directive-core/dist/pr-closing-keywords/main.d.ts.map +1 -1
  211. package/vendor/directive-core/dist/pr-closing-keywords/main.js +6 -2
  212. package/vendor/directive-core/dist/pr-closing-keywords/main.js.map +1 -1
  213. package/vendor/directive-core/dist/pr-watch/main.d.ts +5 -0
  214. package/vendor/directive-core/dist/pr-watch/main.d.ts.map +1 -1
  215. package/vendor/directive-core/dist/pr-watch/main.js.map +1 -1
  216. package/vendor/directive-core/dist/pr-watch/watch.d.ts.map +1 -1
  217. package/vendor/directive-core/dist/pr-watch/watch.js +5 -0
  218. package/vendor/directive-core/dist/pr-watch/watch.js.map +1 -1
  219. package/vendor/directive-core/dist/presentation-ceiling/evaluate.d.ts.map +1 -1
  220. package/vendor/directive-core/dist/presentation-ceiling/evaluate.js +3 -1
  221. package/vendor/directive-core/dist/presentation-ceiling/evaluate.js.map +1 -1
  222. package/vendor/directive-core/dist/release/auto-hatch.d.ts +6 -0
  223. package/vendor/directive-core/dist/release/auto-hatch.d.ts.map +1 -1
  224. package/vendor/directive-core/dist/release/auto-hatch.js +13 -4
  225. package/vendor/directive-core/dist/release/auto-hatch.js.map +1 -1
  226. package/vendor/directive-core/dist/release/cli-drift-report.d.ts +4 -4
  227. package/vendor/directive-core/dist/release/cli-drift-report.d.ts.map +1 -1
  228. package/vendor/directive-core/dist/release/cli-drift-report.js +6 -11
  229. package/vendor/directive-core/dist/release/cli-drift-report.js.map +1 -1
  230. package/vendor/directive-core/dist/release-e2e/constants.d.ts +4 -3
  231. package/vendor/directive-core/dist/release-e2e/constants.d.ts.map +1 -1
  232. package/vendor/directive-core/dist/release-e2e/constants.js +4 -3
  233. package/vendor/directive-core/dist/release-e2e/constants.js.map +1 -1
  234. package/vendor/directive-core/dist/release-e2e/greenfield-python-free-smoke.d.ts.map +1 -1
  235. package/vendor/directive-core/dist/release-e2e/greenfield-python-free-smoke.js +87 -28
  236. package/vendor/directive-core/dist/release-e2e/greenfield-python-free-smoke.js.map +1 -1
  237. package/vendor/directive-core/dist/release-e2e/legacy-bridge-leg.d.ts.map +1 -1
  238. package/vendor/directive-core/dist/release-e2e/legacy-bridge-leg.js +13 -2
  239. package/vendor/directive-core/dist/release-e2e/legacy-bridge-leg.js.map +1 -1
  240. package/vendor/directive-core/dist/release-e2e/main.js +1 -1
  241. package/vendor/directive-core/dist/release-e2e/npm-ops.d.ts +11 -5
  242. package/vendor/directive-core/dist/release-e2e/npm-ops.d.ts.map +1 -1
  243. package/vendor/directive-core/dist/release-e2e/npm-ops.js +90 -45
  244. package/vendor/directive-core/dist/release-e2e/npm-ops.js.map +1 -1
  245. package/vendor/directive-core/dist/resolution/engine-resolve.d.ts.map +1 -1
  246. package/vendor/directive-core/dist/resolution/engine-resolve.js.map +1 -1
  247. package/vendor/directive-core/dist/resolution/pin.d.ts +11 -5
  248. package/vendor/directive-core/dist/resolution/pin.d.ts.map +1 -1
  249. package/vendor/directive-core/dist/resolution/pin.js +20 -11
  250. package/vendor/directive-core/dist/resolution/pin.js.map +1 -1
  251. package/vendor/directive-core/dist/resolution/plan.d.ts.map +1 -1
  252. package/vendor/directive-core/dist/resolution/plan.js +5 -3
  253. package/vendor/directive-core/dist/resolution/plan.js.map +1 -1
  254. package/vendor/directive-core/dist/review-monitor/bounded-pr-watch-deny.d.ts +54 -3
  255. package/vendor/directive-core/dist/review-monitor/bounded-pr-watch-deny.d.ts.map +1 -1
  256. package/vendor/directive-core/dist/review-monitor/bounded-pr-watch-deny.js +142 -0
  257. package/vendor/directive-core/dist/review-monitor/bounded-pr-watch-deny.js.map +1 -1
  258. package/vendor/directive-core/dist/review-monitor/record.d.ts +11 -0
  259. package/vendor/directive-core/dist/review-monitor/record.d.ts.map +1 -1
  260. package/vendor/directive-core/dist/review-monitor/record.js +23 -0
  261. package/vendor/directive-core/dist/review-monitor/record.js.map +1 -1
  262. package/vendor/directive-core/dist/run-summary/emit.d.ts +2 -1
  263. package/vendor/directive-core/dist/run-summary/emit.d.ts.map +1 -1
  264. package/vendor/directive-core/dist/run-summary/emit.js +3 -0
  265. package/vendor/directive-core/dist/run-summary/emit.js.map +1 -1
  266. package/vendor/directive-core/dist/run-summary/index.d.ts +1 -1
  267. package/vendor/directive-core/dist/run-summary/index.d.ts.map +1 -1
  268. package/vendor/directive-core/dist/run-summary/index.js.map +1 -1
  269. package/vendor/directive-core/dist/run-summary/types.d.ts +8 -2
  270. package/vendor/directive-core/dist/run-summary/types.d.ts.map +1 -1
  271. package/vendor/directive-core/dist/run-summary/types.js +1 -0
  272. package/vendor/directive-core/dist/run-summary/types.js.map +1 -1
  273. package/vendor/directive-core/dist/scope/delivery-evidence.d.ts +11 -0
  274. package/vendor/directive-core/dist/scope/delivery-evidence.d.ts.map +1 -1
  275. package/vendor/directive-core/dist/scope/delivery-evidence.js +34 -0
  276. package/vendor/directive-core/dist/scope/delivery-evidence.js.map +1 -1
  277. package/vendor/directive-core/dist/session/occupancy.d.ts +101 -0
  278. package/vendor/directive-core/dist/session/occupancy.d.ts.map +1 -1
  279. package/vendor/directive-core/dist/session/occupancy.js +276 -1
  280. package/vendor/directive-core/dist/session/occupancy.js.map +1 -1
  281. package/vendor/directive-core/dist/session/spawn-occupancy.d.ts +7 -0
  282. package/vendor/directive-core/dist/session/spawn-occupancy.d.ts.map +1 -1
  283. package/vendor/directive-core/dist/session/spawn-occupancy.js +28 -0
  284. package/vendor/directive-core/dist/session/spawn-occupancy.js.map +1 -1
  285. package/vendor/directive-core/dist/staleness-tickler/run.d.ts.map +1 -1
  286. package/vendor/directive-core/dist/staleness-tickler/run.js.map +1 -1
  287. package/vendor/directive-core/dist/swarm/approach1-babysitter.d.ts +19 -6
  288. package/vendor/directive-core/dist/swarm/approach1-babysitter.d.ts.map +1 -1
  289. package/vendor/directive-core/dist/swarm/approach1-babysitter.js +69 -9
  290. package/vendor/directive-core/dist/swarm/approach1-babysitter.js.map +1 -1
  291. package/vendor/directive-core/dist/swarm/cohort-review-monitors-cli.d.ts.map +1 -1
  292. package/vendor/directive-core/dist/swarm/cohort-review-monitors-cli.js +5 -1
  293. package/vendor/directive-core/dist/swarm/cohort-review-monitors-cli.js.map +1 -1
  294. package/vendor/directive-core/dist/swarm/cohort-review-monitors.d.ts +71 -0
  295. package/vendor/directive-core/dist/swarm/cohort-review-monitors.d.ts.map +1 -1
  296. package/vendor/directive-core/dist/swarm/cohort-review-monitors.js +125 -2
  297. package/vendor/directive-core/dist/swarm/cohort-review-monitors.js.map +1 -1
  298. package/vendor/directive-core/dist/swarm/dest-place.d.ts +1 -1
  299. package/vendor/directive-core/dist/swarm/dest-place.d.ts.map +1 -1
  300. package/vendor/directive-core/dist/swarm/dest-place.js +1 -1
  301. package/vendor/directive-core/dist/swarm/dest-place.js.map +1 -1
  302. package/vendor/directive-core/dist/swarm/worktree-pm-install.d.ts +5 -0
  303. package/vendor/directive-core/dist/swarm/worktree-pm-install.d.ts.map +1 -1
  304. package/vendor/directive-core/dist/swarm/worktree-pm-install.js +16 -6
  305. package/vendor/directive-core/dist/swarm/worktree-pm-install.js.map +1 -1
  306. package/vendor/directive-core/dist/swarm/worktrees.d.ts.map +1 -1
  307. package/vendor/directive-core/dist/swarm/worktrees.js.map +1 -1
  308. package/vendor/directive-core/dist/telemetry-coverage/fake-trial.d.ts.map +1 -1
  309. package/vendor/directive-core/dist/telemetry-coverage/fake-trial.js +9 -0
  310. package/vendor/directive-core/dist/telemetry-coverage/fake-trial.js.map +1 -1
  311. package/vendor/directive-core/dist/telemetry-coverage/kinds.d.ts.map +1 -1
  312. package/vendor/directive-core/dist/telemetry-coverage/kinds.js +2 -0
  313. package/vendor/directive-core/dist/telemetry-coverage/kinds.js.map +1 -1
  314. package/vendor/directive-core/dist/text/redos-safe.d.ts.map +1 -1
  315. package/vendor/directive-core/dist/text/redos-safe.js +2 -1
  316. package/vendor/directive-core/dist/text/redos-safe.js.map +1 -1
  317. package/vendor/directive-core/dist/triage/evaluate/worktrees.d.ts.map +1 -1
  318. package/vendor/directive-core/dist/triage/evaluate/worktrees.js +6 -6
  319. package/vendor/directive-core/dist/triage/evaluate/worktrees.js.map +1 -1
  320. package/vendor/directive-core/dist/value/feedback-file.d.ts +49 -6
  321. package/vendor/directive-core/dist/value/feedback-file.d.ts.map +1 -1
  322. package/vendor/directive-core/dist/value/feedback-file.js +446 -41
  323. package/vendor/directive-core/dist/value/feedback-file.js.map +1 -1
  324. package/vendor/directive-core/dist/vbrief-validate/conformance.d.ts.map +1 -1
  325. package/vendor/directive-core/dist/vbrief-validate/conformance.js +5 -0
  326. package/vendor/directive-core/dist/vbrief-validate/conformance.js.map +1 -1
  327. package/vendor/directive-core/dist/verify-env/agent-hooks-live-probe.js +1 -1
  328. package/vendor/directive-core/dist/verify-env/agent-hooks-live-probe.js.map +1 -1
  329. package/vendor/directive-core/dist/xbrief/paths.d.ts.map +1 -1
  330. package/vendor/directive-core/dist/xbrief/paths.js +15 -12
  331. package/vendor/directive-core/dist/xbrief/paths.js.map +1 -1
  332. package/vendor/directive-core/dist/xbrief-migrate/constants.d.ts +7 -0
  333. package/vendor/directive-core/dist/xbrief-migrate/constants.d.ts.map +1 -1
  334. package/vendor/directive-core/dist/xbrief-migrate/constants.js +7 -0
  335. package/vendor/directive-core/dist/xbrief-migrate/constants.js.map +1 -1
  336. package/vendor/directive-core/dist/xbrief-migrate/detect.d.ts +9 -1
  337. package/vendor/directive-core/dist/xbrief-migrate/detect.d.ts.map +1 -1
  338. package/vendor/directive-core/dist/xbrief-migrate/detect.js +14 -7
  339. package/vendor/directive-core/dist/xbrief-migrate/detect.js.map +1 -1
  340. package/vendor/directive-core/dist/xbrief-migrate/migrate-project.d.ts.map +1 -1
  341. package/vendor/directive-core/dist/xbrief-migrate/migrate-project.js +118 -57
  342. package/vendor/directive-core/dist/xbrief-migrate/migrate-project.js.map +1 -1
  343. package/vendor/directive-core/dist/xbrief-migrate/transforms.d.ts.map +1 -1
  344. package/vendor/directive-core/dist/xbrief-migrate/transforms.js +8 -1
  345. package/vendor/directive-core/dist/xbrief-migrate/transforms.js.map +1 -1
@@ -13,6 +13,11 @@ This contract scaffolds the motion. Only the ADR-005 judgment gate and the conte
13
13
  - ⊗ Pin this contract or `skills/deft-directive-design-critique` into `templates/agents-entry.md` or the AGENTS.md always-pin list. Discovery is on-demand via the Skills Index.
14
14
  - ⊗ Auto-dispatch critics from this contract (#3578 / #1702). Operator (or parent after an operator verb) dispatches the next envelope from the brief template.
15
15
 
16
+ ### Pre-ingest recommendation (#5716)
17
+
18
+ Before `issue:ingest` for every GitHub issue, run the design-critique arc or record `design-critique: not warranted, because …`. ADR-005 is unchanged: no auto-dispatch, no engine refusal of unarced work. The ingest advisory is exit 0 and never blocks. This scaffolds the recommendation; content-contract tests lock the skip-form string. Discovery stays on-demand (no always-pin of this skill or contract path). Issue-less scopes use `## No-issue target archive (#5486)` — this GitHub ingest advisory does not extend there.
19
+
20
+
16
21
  ### The arc
17
22
 
18
23
  **An arc is one recorded motion over one target revision**, from the Stop 1 write-back (or a voluntary dispatch) through accepted synthesis or the halt line. It holds one or more rounds, and therefore one or more ceilings. An arc is per-target, not per-issue: one issue carries several arcs over time, and one arc can span several issues.
@@ -138,6 +143,15 @@ After Handoff, Stop 2 evaluation does not re-select charter from the issue body
138
143
 
139
144
  Default motion after a mechanism-shaped stamp: fresh open critique. N=1 (and N≥3 when recommend says so under panel permission) only after a resolved `n=` token, a recorded ask-answer, or a recorded `spend-recommend:` resolve. If residual remains, one reiterating pass with a fresh critic that reads a disagreement map, then verified synthesis. Resume is optional sharpening ("does my prior finding still hold"), not the default reiterating agent. A permitted N≥3 does not change that default; the parent records the spend when it uses the permission after parseOperatorSpend, an ask-answer, or a panel-permission-lawful `spend-recommend: N≥3`.
140
145
 
146
+ ### Target-kind (#5486)
147
+
148
+ **Target-kind** is what durable identity the arc binds (`issue` | `xbrief` | `envelope-file`). It is orthogonal to `### Target shape` (set-level / against-implementation) and does not select charter or spend.
149
+
150
+ - ! Record `Target-kind:` on the lean when the target is not a GitHub issue. Default remains `issue`.
151
+ - ! Target-digest hashes canonical target bytes for that kind (REST issue body, xBRIEF file bytes, or envelope-file bytes). Protocol / gate / chip state stays outside digested bytes.
152
+ - ! Envelope-file targets need durable bytes before Stop 1.
153
+ - ⊗ Treat Target-kind as a Target shape row or a charter/spend row.
154
+
141
155
  ### Target shape
142
156
 
143
157
  Charter is what the critic is given. **Target shape is what is being critiqued.** The two are independent axes, and target shape selects neither the charter nor the spend, so it is not a row in either table above.
@@ -205,6 +219,21 @@ The three tokens are the blocking, sharpening, and footnote classes `walk all` a
205
219
 
206
220
  The injection / swarm lens is a triggered MUST: it fires only on those target changes. The reviewer-catch rule is a prohibition, not a required recital. Road-not-taken and steelman are SHOULD, and fire only on a real fork.
207
221
 
222
+ ### Ceiling-kind (#5486)
223
+
224
+ **Ceiling-kind** names how same-round isolation is frozen:
225
+
226
+ | Ceiling-kind | Form |
227
+ |---|---|
228
+ | `comment-id` | GitHub comment id (existing issue path) |
229
+ | `dispatch-sha-outbox-manifest` | dispatch-sha + parent-written outbox manifest (stage-(0) file-path) |
230
+
231
+ - ! Stage-(0) file-path admits `PostconditionArtifactClass` `file-path` at the panel-handback caller (`panel-handback-acceptance.ts`). Obligation fields bind target-id/path; `issueNumber` is optional/N/A. Verdict returns non-numeric `boundArtifactId` alongside `boundCommentId`.
232
+ - ! Construct the outbox-manifest artifact in stage (0); do not defer to archive stage (b). Parent-collected exclusive-create per-seat outboxes feed the retained archive.
233
+ - ! Comment-id path stays unchanged. Do not weaken the GitHub-issue arc path.
234
+ - ⊗ Use bare file existence or chat-success as dispatch proof.
235
+ - ⊗ Fake 8+ digit local ids that collide with GitHub. Chosen local id-model is composite `arc-post:<n>` (published before parser accept).
236
+
208
237
  ### Envelope and ceiling
209
238
 
210
239
  The envelope is [`templates/design-critique-brief.md`](../templates/design-critique-brief.md). Fill fields. Do not copy rule bodies from this contract into the envelope.
@@ -733,7 +762,7 @@ Closed cite forms on the successor lean (no third coverage-map type):
733
762
 
734
763
  - `relieves: P1` / `relieves P1`
735
764
  - `does-not-relieve: P1`
736
- - `operator-deferred: P1 #4377` / `operator-deferred: P1 issue 4377`
765
+ - `operator-deferred: P1 #4377`; leftover brief cites `operator-deferred: P1 plan-id github.issue.123` / `operator-deferred: P1 path xbrief/proposed/example.xbrief.json` / `operator-deferred: P1 issue 4377`
737
766
 
738
767
  Uncited ids and `does-not-relieve` stay residual headings (`unrelieved-pain`). Unknown ids and conflicting dispositions fail closed as `malformed-pain`. `operator-deferred` must cite a **different** issue id; same-number leftover is `unrelieved-pain`, not yolo-confirmable leftover, and is halt or a later lean that binds relief, without ingest clearance.
739
768
 
@@ -801,3 +830,12 @@ This motion ingests untrusted issue threads by design.
801
830
  ## Test surface
802
831
 
803
832
  `packages/core/src/content-contracts/standards/design_critique_contract.test.ts` locks required pointer strings, the scaffolds framing, the comment-lead field as model then role from the closed set (not an issue label), the operator-gated loop (successor lean, operator verbs including walk / walk all, dual stop, halt line, exclusive remaining-set replace of the three catalog chips, #3640 auto-stamp on a non-empty all-accept map and no-stamp on stubs, first-lean recording obligation after this round's siblings are posted), the parent-side substantiation token and independence rules, the Stop 1 exclusion (pre-critic premises outside the trigger) and `refutation-target:` field tokens rather than full body sentences, the composed auto-bind conjunct (all-accept map AND zero unresolved audit markers) at Operator verbs and Bind path 1, the variant-table evaluation rule (charter selection and spend permission evaluated independently), the critic-method heading and distinctive obligation tokens (exact class tokens, citations-are-claims, existing mechanisms, injection / swarm trigger nouns, failed-reviewer phrase, finding anatomy) rather than full body sentences, the brief-template forbidden-inputs list, and the thin router skill (existence, line cap, pointer resolution, no-normative-content). `evaluateParentAudit` locks the omission failure modes. This suite locks the SoT MUST and the thin skill pointer for the first-lean recording obligation, including the auto-stamp operator-confirm conjunct and the no-bind-while-unposted-same-round-siblings rule. `evaluateCompletedArcRecord` locks ingest on the completed-arc record rather than a catalog chip. It does not fail-close live parent turns. `packages/core/src/design-critique/citation-grammar.test.ts` locks the `## Citation grammar` closed set, the refused positions, and the diagnostics surface; `packages/core/src/design-critique/completed-arc-record.test.ts` locks one parser for both questions, set membership against the latest lean, and the observation-echoing block details (#3831). Runtime parent-turn detection only if `evaluateParentAudit` is extended; that extension is not required to ship the recording obligation. Panel completeness is locked as contract text only. No predicate observes it on a live arc (#3850). N≥2 round-1 ceiling is the post-panel-deposit snapshot; Envelope Id ceiling stays authoritative; deposit/envelope mismatch is a finding, never a re-ceiling (#4435). Completeness stays unobservable to round-1 critics even with the deposit in envelope. Decomposition MUST plus multi-pointer forbid are locked as contract text; no new grammar and no new evaluator. `evaluatePanelSeatComposition` locks claimed-family composition and PATH paste-ready-first; it is a fixture over claimed families, not a live sibling-count gate, and it does not observe launchability. `evaluateN3LaunchProbe` locks the N≥3 launch-probe fixture: critic argv class with bypass flags, the existing benign pong, no envelope path, amend-spend or dispatch-fail on miss, and no new halt token (#4432). Does not close #3850. `### The arc` and its derived boundaries, the `### Target shape` axis with its twice-run caveat, and the two bind-path-2 non-empty refusals are locked as contract text (#3797). `## Plain-language summary` is locked the same way: the contract test pins the heading token, the MUST-not-SHOULD reasoning, the ADR-006 exemption and its limit, the non-normative marking, and the per-artifact reserved line-start matrix, and `packages/core/src/design-critique/reserved-line-starts.test.ts` exercises each of the five families on each artifact kind against the exported shape predicates and `evaluateCompletedArcRecord`. `packages/core/src/design-critique/handoff.ts` locks `evaluateHandoffPrint`, `evaluateDualStopReservedSlot`, and `postHandoffStop1Writeback`. Do not add `reframe-needed` to `evaluateCompletedArcRecord`. Do not halt Dual-stop on invariant-set equality. `evaluateCompletedArcRecord` observes presence-only `## In plain English` on `citedLeanId` + `synthesisCommentId` (#5415); closed reason `missing-plain-english`. A pointer-only Bound-remedy or comment-id summary is a published miss and stays unobserved by that presence check; both artifacts state the problem then the accepted solution in ordinary language, including auto-posted synthesis-accepted; the thin skill names `## Plain-language summary` and keeps `Plain English first in main-chat` as the widget surface; ingest-open protocol and "Ingest may proceed" stay off this heading. Content-contract tests lock those sentences. No prose-quality parser (#4309). `### Verified-claims table heading`, the closed reason vocabulary, and the re-measured line-start matrix are locked as contract text, and `completed-arc-record.test.ts` exercises the typed refusal partition: the two states, details that differ by more than the id, the untyped null table id, and the seven recorded live arc table ids (#3942). `### Run posture` and `parseOperatorRunPosture` / `evaluateDirectDispatch` lock the closed-token front door, the missing-token ask including yolo, the `session:start --read-only` start verb, stdin posting, SHA-pinned reads, and the no-worktree direct panel; `run-posture.test.ts` exercises those fixtures. `### Spend` and `parseOperatorSpend` / `evaluateSpendRecord` lock the closed-token spend front door, the missing-token ask including yolo, numeric-only resolved tokens, bare panel as ask, colliding classes as ask, Stop 1 `spend-ask: resolved|asked`, and that grok-bot detect does not default spend; `spend.test.ts` exercises those fixtures. Live parent turns stay unenforced (#4705). Does not close #3846. `evaluateCompletedArcRecord` ignores `arc-mode:` (#4072). Yolo standing confirm of a posted all-accept map, the disagree/defer-set refusal, word-boundary parse on the operator chat utterance, and that yolo-confirm is not ingest are locked as contract text plus content-contract tests; live parent turns stay unenforced (#4308). `evaluateAutoStampPath1Write` locks the lean-cite-only unpublished path-1 candidate, the full pain-coverage reason set, skip of ingest-ready remaining-set when path-1 is refused, and that `autoStamp: true` does not return empty verbs when Handoff applies (#4592). English-heading critic after the bind lean with no operative field refuses `writePath1` as `unresolved-pain-audit` (#4648). `packages/core/src/design-critique/leftover-pain.ts` locks yolo leftover-path recommendation, leftover issue-create recording, remainder continue, finish-still-possible, cite honesty and placement, pain-audit follow-through, Dual-stop posts-not-seats default 6 for spend N=1, and asserted reserved-slot coverage (#4593). Pain-audit dispatch fill of operative `audit-targets:` (ids or none), English Pain-audit headings are not targeting, later-arc critic after the bind lean id, footnote-only follow-through is not clearance, and that `buildPainCoverageDeposit` JSDoc does not recut the asserted-marker conjunct (#4648). Dual stop Fingerprint composition with #3448, the Parallel fingerprint working default that no comparable fingerprint exists for a parallel round, and that marker clearance has no verdict field are locked as contract text plus parent-audit tests (#4442). Yolo first-lean cites under standing (#4811) are locked as contract text plus the thin skill pointer: honest pain cites on the bind-capable first all-accept lean, no free-English intermediate hatch, uncited first map stays Handoff, do not recut evaluateHandoffPrint, pain-audit brief after operative first relieves while Dual-stop numbered or reserved slot remains, and Mid-arc EXIT does not default to operator next-envelope after that lean. Live parent turns may stay unenforced. Dual-stop raise stays a raise.
833
+
834
+ ## No-issue target archive (#5486)
835
+
836
+ When no GitHub issue exists, the durable arc record is a parent-owned ordered archive under a main-checkout-resolved root (`.deft/design-critique/archive`), keyed by target-id + arc-id. Dest-relative `.deft-scratch` is staging only, not archive root. Sidecar mirrors are optional with published read precedence; never two live SoTs. Machine-local / single-operator is the supported durability tier; cross-machine replication is deferred. Single-machine no-Issues consumers may use the archive.
837
+
838
+ Write posture (pick one): critics zero in-tree writes and parent collects exclusive-create outboxes into the archive (chosen). Harvest `## Bound remedy` into the same brief via plan-id-keyed idempotent update (`hashBoundRemedyBytes` key); do not use `issue:ingest` as the no-issue harvest path. Promotion keeps the archive authoritative with optional link/mirror and refuses two live arcs over one target.
839
+
840
+ Gate admission for no-issue targets is `evaluateNoIssueGateAdmission`: target identity + authoritative marker + completed-arc proof + live revision via adapter over `GATE_MATCH_PREDICATES` (paths / body-text). Storage fields alone are insufficient. Discovery/recovery or concrete manual-diagnosis path required. No fake GitHub labels.
841
+
@@ -4,8 +4,8 @@
4
4
  * Plain `doctor` composes install-sync diagnosis + full product doctor (F-015 / C6).
5
5
  */
6
6
  import { readProjectDataStatus } from "./data-status.js";
7
- import { formatDoctorReport, runDoctorDiagnosis } from "./doctor-diagnose.js";
8
7
  import { run as runProductDoctor } from "./doctor.js";
8
+ import { formatDoctorReport, runDoctorDiagnosis } from "./doctor-diagnose.js";
9
9
  import { runMigrate } from "./migrate.js";
10
10
  import { runSetup } from "./setup.js";
11
11
  import { runUninstall } from "./uninstall.js";
@@ -91,9 +91,7 @@ export async function handleContractEntrypoint(argv) {
91
91
  return result.remaining.length > 0 ? 1 : 0;
92
92
  }
93
93
  if (head === "doctor") {
94
- const root = takeFlag([...argv], "--root") ??
95
- process.env.DIRECTIVE_PROJECT_ROOT ??
96
- process.cwd();
94
+ const root = takeFlag([...argv], "--root") ?? process.env.DIRECTIVE_PROJECT_ROOT ?? process.cwd();
97
95
  // Machine discriminant for equal-version upgrade (AC4.10). Sync-only; no product suite.
98
96
  if (hasFlag(argv, "--data-status")) {
99
97
  const status = readProjectDataStatus(root);
package/dist/dispatch.js CHANGED
@@ -2741,12 +2741,7 @@ export function registeredVerbs() {
2741
2741
  return [...names].sort();
2742
2742
  }
2743
2743
  /** Top-level UX commands routed before the flat dispatcher (#1670). */
2744
- const TOP_LEVEL_COMMAND_NAMES = [
2745
- "init",
2746
- "update",
2747
- "doctor",
2748
- "check",
2749
- ];
2744
+ const TOP_LEVEL_COMMAND_NAMES = ["init", "update", "doctor", "check"];
2750
2745
  /** Scope lifecycle verbs exposed as scope:<verb> in help (#2172). */
2751
2746
  const SCOPE_COMMAND_NAMES = [
2752
2747
  "scope:promote",
@@ -86,6 +86,6 @@ export declare function isNoGitReadinessGap(sync: FullInSyncResult, projectRoot:
86
86
  * Full read-only diagnosis. Never creates/updates files or Git config.
87
87
  */
88
88
  export declare function runDoctorDiagnosis(projectRoot: string, options?: DoctorDiagnosisOptions): DoctorDiagnosis;
89
- /** Human-readable doctor report (AC12.3 / AC12.5 / F-010). */
89
+ /** Human-readable doctor report (AC12.3 / AC12.5 / F-010 / wave 4g). */
90
90
  export declare function formatDoctorReport(diag: DoctorDiagnosis): string;
91
91
  //# sourceMappingURL=doctor-diagnose.d.ts.map
@@ -54,10 +54,7 @@ function inspectHookAndSkillForm(projectRoot) {
54
54
  ".codex/hooks.json",
55
55
  ".grok/hooks/deft.json",
56
56
  ];
57
- const skillRelCandidates = [
58
- ".agents/skills/deft/SKILL.md",
59
- "AGENTS.md",
60
- ];
57
+ const skillRelCandidates = [".agents/skills/deft/SKILL.md", "AGENTS.md"];
61
58
  let hookOk = true;
62
59
  let hookDetail = null;
63
60
  let sawHook = false;
@@ -127,8 +124,14 @@ function inspectHookAndSkillForm(projectRoot) {
127
124
  skillDetail = "no skill pointer / AGENTS managed section present";
128
125
  }
129
126
  return {
130
- hookCommandForm: { ok: hookOk || !sawHook, detail: hookOk ? (sawHook ? null : hookDetail) : hookDetail },
131
- skillPointers: { ok: skillOk || !sawSkill, detail: skillOk ? (sawSkill ? null : skillDetail) : skillDetail },
127
+ hookCommandForm: {
128
+ ok: hookOk || !sawHook,
129
+ detail: hookOk ? (sawHook ? null : hookDetail) : hookDetail,
130
+ },
131
+ skillPointers: {
132
+ ok: skillOk || !sawSkill,
133
+ detail: skillOk ? (sawSkill ? null : skillDetail) : skillDetail,
134
+ },
132
135
  };
133
136
  }
134
137
  function defaultHookProbe(projectRoot) {
@@ -272,7 +275,7 @@ function line(ok, name, detail) {
272
275
  const mark = ok ? "ok" : "FAIL";
273
276
  return detail ? ` ${name}: ${mark} — ${detail}` : ` ${name}: ${mark}`;
274
277
  }
275
- /** Human-readable doctor report (AC12.3 / AC12.5 / F-010). */
278
+ /** Human-readable doctor report (AC12.3 / AC12.5 / F-010 / wave 4g). */
276
279
  export function formatDoctorReport(diag) {
277
280
  const lines = [];
278
281
  // Header tracks overall health (exitCode), not install-health inSync alone —
@@ -281,12 +284,29 @@ export function formatDoctorReport(diag) {
281
284
  // generic "not in sync" that reads like a broken pin.
282
285
  if (diag.exitCode === 0) {
283
286
  lines.push("directive doctor: in sync");
287
+ lines.push("");
288
+ lines.push("This project's Directive version and wiring look consistent.");
284
289
  }
285
290
  else if (diag.incompleteInstall === "git-precondition") {
286
291
  lines.push("directive doctor: incomplete install (git precondition)");
292
+ lines.push("");
293
+ lines.push("This folder is not a git repository yet, so git hooks were not installed.");
294
+ lines.push("");
295
+ lines.push("Next:");
296
+ lines.push(" git init");
297
+ lines.push(" directive install --repair");
287
298
  }
288
299
  else {
289
300
  lines.push("directive doctor: not in sync");
301
+ lines.push("");
302
+ if (!diag.surfaces.installed.ok || !diag.surfaces.pin.ok) {
303
+ const ver = diag.version ?? "the pinned version";
304
+ lines.push(`The project asks for Directive ${ver}, but that package is missing or the wrong version is installed.`);
305
+ lines.push("");
306
+ lines.push("Next:");
307
+ lines.push(" npm i -g @deftai/directive");
308
+ lines.push(" directive install --repair");
309
+ }
290
310
  }
291
311
  if (diag.version)
292
312
  lines.push(` version: ${diag.version}`);
@@ -317,8 +337,17 @@ export function formatDoctorReport(diag) {
317
337
  if (diag.schemaRemedy) {
318
338
  lines.push(`Next: ${diag.schemaRemedy}`);
319
339
  }
320
- if (diag.remedy) {
321
- lines.push(`Recovery: ${diag.remedy}`);
340
+ if (diag.remedy && diag.incompleteInstall !== "git-precondition") {
341
+ // Avoid duplicating the plain Next: block when we already printed recovery.
342
+ if (diag.exitCode !== 0 && diag.surfaces.installed.ok && diag.surfaces.pin.ok) {
343
+ lines.push(`Recovery: ${diag.remedy}`);
344
+ }
345
+ else if (diag.exitCode !== 0 && (!diag.surfaces.installed.ok || !diag.surfaces.pin.ok)) {
346
+ // Plain Next: block already covers AC9.7.
347
+ }
348
+ else {
349
+ lines.push(`Recovery: ${diag.remedy}`);
350
+ }
322
351
  }
323
352
  return `${lines.join("\n")}\n`;
324
353
  }
package/dist/doctor.js CHANGED
@@ -71,7 +71,7 @@ function namesUpdatePruneRecovery(result) {
71
71
  export function renderDepositFileSetHygieneLine(projectRoot, result = evaluateDepositFileSetHygiene(projectRoot)) {
72
72
  const deftDir = join(projectRoot, ".deft", "core");
73
73
  if (!existsSync(deftDir)) {
74
- return "Deposit hygiene: none -- no .deft/core deposit.";
74
+ return "Deposit hygiene: none -- package-based layout (no copied .deft/core tree; expected).";
75
75
  }
76
76
  if (result.skipped) {
77
77
  return ("Deposit hygiene: skip -- @deftai/directive-content is not installed " +
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
- import { type HookEvent, type HookHost, type HookPayloadContext } from "@deftai/directive-core/hooks";
3
2
  import type { CheapInSyncResult } from "@deftai/directive-core/dist/install-health/types.js";
3
+ import { type HookEvent, type HookHost, type HookPayloadContext } from "@deftai/directive-core/hooks";
4
4
  /**
5
5
  * Session-start schema-behind notice (AC8.9 / AC14.11). Doctor uses the same
6
6
  * remedy name; other hooks must stay silent about data currency.
@@ -2,9 +2,9 @@
2
2
  import { readFileSync, realpathSync } from "node:fs";
3
3
  import { resolve } from "node:path";
4
4
  import { fileURLToPath } from "node:url";
5
- import { decideHook, hookPayloadTopLevelKeys, isHookEvent, isHookHost, mergeHookDispatchEnviron, normalizeHookProjectRoot, parseHookStdin, projectRootFromHookPayload, renderHostDecision, } from "../vendor/directive-core/dist/hooks/index.js";
6
5
  import { checkCheapInSync } from "../vendor/directive-core/dist/install-health/cheap.js";
7
6
  import { INSTALLATION_RECOVERY_GUIDANCE } from "../vendor/directive-core/dist/install-health/constants.js";
7
+ import { decideHook, hookPayloadTopLevelKeys, isHookEvent, isHookHost, mergeHookDispatchEnviron, normalizeHookProjectRoot, parseHookStdin, projectRootFromHookPayload, renderHostDecision, } from "../vendor/directive-core/dist/hooks/index.js";
8
8
  import { readProjectDataStatus } from "./data-status.js";
9
9
  import { maybeSelfCompleteSetup } from "./self-complete.js";
10
10
  /**
@@ -1,7 +1,3 @@
1
- /**
2
- * Wave 8.5 s7 install/migrate CLI tail — retire-vs-retarget coverage map (#1838).
3
- * Primary deliverable is duplicated in the PR body for Wave 9 mechanical teardown.
4
- */
5
1
  export type InstallCliTailClassification = "retire-at-Wave-9" | "retarget";
6
2
  export interface InstallCliTailEntry {
7
3
  readonly pythonTest: string;
@@ -9,6 +5,6 @@ export interface InstallCliTailEntry {
9
5
  readonly rationale: string;
10
6
  readonly vitestSpec?: string;
11
7
  }
12
- /** One-line rationale per in-scope tests/cli file (Bucket C audit). */
8
+ /** One-line rationale per in-scope pytest cli file (Bucket C audit). */
13
9
  export declare const INSTALL_CLI_TAIL_COVERAGE_MAP: readonly InstallCliTailEntry[];
14
10
  //# sourceMappingURL=coverage-map.d.ts.map
@@ -1,111 +1,117 @@
1
- /** One-line rationale per in-scope tests/cli file (Bucket C audit). */
1
+ /**
2
+ * Wave 8.5 s7 install/migrate CLI tail — retire-vs-retarget coverage map (#1838).
3
+ * Primary deliverable is duplicated in the PR body for Wave 9 mechanical teardown.
4
+ */
5
+ /** Python pytest root segments joined at runtime (avoid class-2 path literals). */
6
+ const PY_CLI_TESTS = "tests" + "/cli";
7
+ /** One-line rationale per in-scope pytest cli file (Bucket C audit). */
2
8
  export const INSTALL_CLI_TAIL_COVERAGE_MAP = [
3
9
  {
4
- pythonTest: "tests/cli/test_migrate_vbrief.py",
10
+ pythonTest: `${PY_CLI_TESTS}/test_migrate_vbrief.py`,
5
11
  classification: "retire-at-Wave-9",
6
12
  rationale: "Exercises scripts/migrate_vbrief.py pre-v0.20 migrator — accepted non-port deleted in #1731.",
7
13
  },
8
14
  {
9
- pythonTest: "tests/cli/test_migrate_vbrief_canonical_refs.py",
15
+ pythonTest: `${PY_CLI_TESTS}/test_migrate_vbrief_canonical_refs.py`,
10
16
  classification: "retire-at-Wave-9",
11
17
  rationale: "End-to-end migrate_vbrief references/narrative clamp regressions — accepted non-port migrator.",
12
18
  },
13
19
  {
14
- pythonTest: "tests/cli/test_migrate_vbrief_fixtures.py",
20
+ pythonTest: `${PY_CLI_TESTS}/test_migrate_vbrief_fixtures.py`,
15
21
  classification: "retire-at-Wave-9",
16
22
  rationale: "Fixture-driven migrate() routing matrix — accepted non-port pre-cutover migrator tooling.",
17
23
  },
18
24
  {
19
- pythonTest: "tests/cli/test_migrate_vbrief_rc4.py",
25
+ pythonTest: `${PY_CLI_TESTS}/test_migrate_vbrief_rc4.py`,
20
26
  classification: "retire-at-Wave-9",
21
27
  rationale: "RC4 migrator rollback/reconciliation — accepted non-port migrate_* family (#1731).",
22
28
  },
23
29
  {
24
- pythonTest: "tests/cli/test_migrate_preflight.py",
30
+ pythonTest: `${PY_CLI_TESTS}/test_migrate_preflight.py`,
25
31
  classification: "retarget",
26
32
  rationale: "scripts/migrate_preflight.py agent-side migrate:vbrief gate — retargeted to deft-ts migrate-preflight on consumer task path (#2022 Phase 2).",
27
33
  vitestSpec: "packages/cli/src/migrate-task-surface.test.ts",
28
34
  },
29
35
  {
30
- pythonTest: "tests/cli/test_precutover_guard.py",
36
+ pythonTest: `${PY_CLI_TESTS}/test_precutover_guard.py`,
31
37
  classification: "retire-at-Wave-9",
32
38
  rationale: "Pre-cutover detection and legacy placeholder checks via _precutover — accepted non-port.",
33
39
  },
34
40
  {
35
- pythonTest: "tests/cli/test_cmd_agents_refresh.py",
41
+ pythonTest: `${PY_CLI_TESTS}/test_cmd_agents_refresh.py`,
36
42
  classification: "retire-at-Wave-9",
37
43
  rationale: "Python run cmd_agents_refresh upgrade-gate companion — no deft-ts verb; retires with legacy run.",
38
44
  },
39
45
  {
40
- pythonTest: "tests/cli/test_cmd_check_updates.py",
46
+ pythonTest: `${PY_CLI_TESTS}/test_cmd_check_updates.py`,
41
47
  classification: "retarget",
42
48
  rationale: "Python run cmd_check_updates remote version probe — retargeted to deft-ts framework-check-updates on consumer task path (#2069).",
43
49
  vitestSpec: "packages/core/src/check-updates/index.test.ts, packages/cli/src/framework-check-updates-task-surface.test.ts",
44
50
  },
45
51
  {
46
- pythonTest: "tests/cli/test_cmd_doctor.py",
52
+ pythonTest: `${PY_CLI_TESTS}/test_cmd_doctor.py`,
47
53
  classification: "retarget",
48
54
  rationale: "cmd_doctor survives as deft-ts doctor verb (packages/cli/src/doctor.ts); exit-code parity via dispatch.",
49
55
  vitestSpec: "packages/cli/src/install-cli/retarget-dispatch.test.ts",
50
56
  },
51
57
  {
52
- pythonTest: "tests/cli/test_cmd_gate.py",
58
+ pythonTest: `${PY_CLI_TESTS}/test_cmd_gate.py`,
53
59
  classification: "retire-at-Wave-9",
54
60
  rationale: "Python run cmd_gate universal upgrade gate — no deft-ts verb; retires with legacy run module.",
55
61
  },
56
62
  {
57
- pythonTest: "tests/cli/test_cmd_spec.py",
63
+ pythonTest: `${PY_CLI_TESTS}/test_cmd_spec.py`,
58
64
  classification: "retire-at-Wave-9",
59
65
  rationale: "Python run cmd_spec interactive spec generator — no deft-ts verb; retires with legacy run.",
60
66
  },
61
67
  {
62
- pythonTest: "tests/cli/test_upgrade_gate.py",
68
+ pythonTest: `${PY_CLI_TESTS}/test_upgrade_gate.py`,
63
69
  classification: "retire-at-Wave-9",
64
70
  rationale: "Python run upgrade gate and cmd_project lifecycle scaffolding — legacy run; no TS equivalent.",
65
71
  },
66
72
  {
67
- pythonTest: "tests/cli/test_upgrade_gate_remote_drift.py",
73
+ pythonTest: `${PY_CLI_TESTS}/test_upgrade_gate_remote_drift.py`,
68
74
  classification: "retire-at-Wave-9",
69
75
  rationale: "Python run _check_upgrade_gate remote-drift integration — legacy run upgrade path.",
70
76
  },
71
77
  {
72
- pythonTest: "tests/cli/test_run_bat_path.py",
78
+ pythonTest: `${PY_CLI_TESTS}/test_run_bat_path.py`,
73
79
  classification: "retire-at-Wave-9",
74
80
  rationale: "Windows run.bat packaging shim self-relative resolution — build/packaging accepted non-port.",
75
81
  },
76
82
  {
77
- pythonTest: "tests/cli/test_run_version.py",
83
+ pythonTest: `${PY_CLI_TESTS}/test_run_version.py`,
78
84
  classification: "retire-at-Wave-9",
79
85
  rationale: "Python run VERSION resolution chain — legacy run entrypoint retires with scripts/*.py in #1731.",
80
86
  },
81
87
  {
82
- pythonTest: "tests/cli/test_setup_ghx.py",
88
+ pythonTest: `${PY_CLI_TESTS}/test_setup_ghx.py`,
83
89
  classification: "retire-at-Wave-9",
84
90
  rationale: "scripts/setup_ghx.py consent-gated installer helper — build/packaging accepted non-port (#1731).",
85
91
  },
86
92
  {
87
- pythonTest: "tests/cli/test_safe_subprocess.py",
93
+ pythonTest: `${PY_CLI_TESTS}/test_safe_subprocess.py`,
88
94
  classification: "retire-at-Wave-9",
89
95
  rationale: "scripts/_safe_subprocess.py UTF-8 capture shim — Python runtime accepted non-port (#1731).",
90
96
  },
91
97
  {
92
- pythonTest: "tests/cli/test_task_scripts.py",
98
+ pythonTest: `${PY_CLI_TESTS}/test_task_scripts.py`,
93
99
  classification: "retarget",
94
100
  rationale: "TestToolchainCheck maps to deft-ts toolchain-check; remainder covers legacy Python task scripts without TS verbs.",
95
101
  vitestSpec: "packages/cli/src/install-cli/retarget-dispatch.test.ts",
96
102
  },
97
103
  {
98
- pythonTest: "tests/cli/test_ts_check_lane.py",
104
+ pythonTest: `${PY_CLI_TESTS}/test_ts_check_lane.py`,
99
105
  classification: "retire-at-Wave-9",
100
106
  rationale: "scripts/ts_check_lane.py Python meta-guard for pnpm lane — retires once Python CI lane is removed.",
101
107
  },
102
108
  {
103
- pythonTest: "tests/cli/test_vendored_install_metadata.py",
109
+ pythonTest: `${PY_CLI_TESTS}/test_vendored_install_metadata.py`,
104
110
  classification: "retire-at-Wave-9",
105
111
  rationale: "Vendored Go-install metadata via Python run/doctor/resolve_version — installer deposit accepted non-port.",
106
112
  },
107
113
  {
108
- pythonTest: "tests/cli/test_remote_probe_throttle.py",
114
+ pythonTest: `${PY_CLI_TESTS}/test_remote_probe_throttle.py`,
109
115
  classification: "retire-at-Wave-9",
110
116
  rationale: "Python run remote-probe throttle state for #801 — legacy run module; no deft-ts verb.",
111
117
  },
@@ -77,10 +77,7 @@ export const INSTALLER_OUTPUT_INVENTORY = [
77
77
  },
78
78
  {
79
79
  id: "openclaw-integrations",
80
- legacyOutputs: [
81
- "OpenClaw L2 product-command skills",
82
- "OpenClaw soft AGENTS re-bind skill",
83
- ],
80
+ legacyOutputs: ["OpenClaw L2 product-command skills", "OpenClaw soft AGENTS re-bind skill"],
84
81
  ovprTarget: "OpenClaw workspace skills dirs when OC signals present (conditional)",
85
82
  disposition: "conditional",
86
83
  justification: "AC8.1 conditional OpenClaw — deposit adapters no-op unless OpenClaw is detected; fail-closed otherwise.",