@deftai/directive 0.126.2 → 0.128.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 (420) hide show
  1. package/bin/deft-hook +14 -0
  2. package/bin/deft-hook.cmd +14 -0
  3. package/dist/bin.js +4319 -3
  4. package/package.json +11 -21
  5. package/dist/agents-refresh.d.ts +0 -11
  6. package/dist/agents-refresh.js +0 -90
  7. package/dist/authz.d.ts +0 -7
  8. package/dist/authz.js +0 -732
  9. package/dist/bin.d.ts +0 -3
  10. package/dist/branch-fixtures.d.ts +0 -45
  11. package/dist/branch-fixtures.js +0 -156
  12. package/dist/cache.d.ts +0 -4
  13. package/dist/cache.js +0 -10
  14. package/dist/capacity-backfill.d.ts +0 -3
  15. package/dist/capacity-backfill.js +0 -9
  16. package/dist/capacity-show.d.ts +0 -3
  17. package/dist/capacity-show.js +0 -9
  18. package/dist/change-init.d.ts +0 -3
  19. package/dist/change-init.js +0 -59
  20. package/dist/changelog-check.d.ts +0 -3
  21. package/dist/changelog-check.js +0 -52
  22. package/dist/check.d.ts +0 -15
  23. package/dist/check.js +0 -150
  24. package/dist/cli-package-version.d.ts +0 -3
  25. package/dist/cli-package-version.js +0 -23
  26. package/dist/cli-router/index.d.ts +0 -8
  27. package/dist/cli-router/index.js +0 -44
  28. package/dist/cli-router/route-argv.d.ts +0 -40
  29. package/dist/cli-router/route-argv.js +0 -371
  30. package/dist/codebase-default-extractor.d.ts +0 -3
  31. package/dist/codebase-default-extractor.js +0 -9
  32. package/dist/codebase-map-fresh.d.ts +0 -3
  33. package/dist/codebase-map-fresh.js +0 -9
  34. package/dist/codebase-map.d.ts +0 -3
  35. package/dist/codebase-map.js +0 -9
  36. package/dist/codebase-projection-registry.d.ts +0 -3
  37. package/dist/codebase-projection-registry.js +0 -9
  38. package/dist/codebase-provider.d.ts +0 -3
  39. package/dist/codebase-provider.js +0 -9
  40. package/dist/commit-lint.d.ts +0 -3
  41. package/dist/commit-lint.js +0 -44
  42. package/dist/content-validate-cli/validate-links.d.ts +0 -11
  43. package/dist/content-validate-cli/validate-links.js +0 -37
  44. package/dist/content-validate-cli/validate-strategy-output.d.ts +0 -13
  45. package/dist/content-validate-cli/validate-strategy-output.js +0 -56
  46. package/dist/content-validate-cli/verify-capacity.d.ts +0 -12
  47. package/dist/content-validate-cli/verify-capacity.js +0 -54
  48. package/dist/coverage-hotspots.d.ts +0 -21
  49. package/dist/coverage-hotspots.js +0 -198
  50. package/dist/design-critique-spend-resolve.d.ts +0 -18
  51. package/dist/design-critique-spend-resolve.js +0 -191
  52. package/dist/directive-finish-loop.d.ts +0 -3
  53. package/dist/directive-finish-loop.js +0 -10
  54. package/dist/dispatch.d.ts +0 -193
  55. package/dist/dispatch.js +0 -3091
  56. package/dist/doctor.d.ts +0 -19
  57. package/dist/doctor.js +0 -155
  58. package/dist/entrypoint.d.ts +0 -6
  59. package/dist/entrypoint.js +0 -19
  60. package/dist/escalation-cli.d.ts +0 -4
  61. package/dist/escalation-cli.js +0 -301
  62. package/dist/eval-health.d.ts +0 -13
  63. package/dist/eval-health.js +0 -63
  64. package/dist/eval-report.d.ts +0 -15
  65. package/dist/eval-report.js +0 -97
  66. package/dist/eval-run.d.ts +0 -17
  67. package/dist/eval-run.js +0 -122
  68. package/dist/eval-triggers.d.ts +0 -12
  69. package/dist/eval-triggers.js +0 -56
  70. package/dist/framework-check-updates.d.ts +0 -10
  71. package/dist/framework-check-updates.js +0 -68
  72. package/dist/gates-cli/_helpers.d.ts +0 -24
  73. package/dist/gates-cli/_helpers.js +0 -115
  74. package/dist/gates-cli/verify-bridge-drift.d.ts +0 -11
  75. package/dist/gates-cli/verify-bridge-drift.js +0 -47
  76. package/dist/gates-cli/verify-go-freeze.d.ts +0 -11
  77. package/dist/gates-cli/verify-go-freeze.js +0 -48
  78. package/dist/hook-bin.d.ts +0 -3
  79. package/dist/hook-bin.js +0 -11
  80. package/dist/hook-dispatch.d.ts +0 -80
  81. package/dist/hook-dispatch.js +0 -186
  82. package/dist/human-presence-mint.d.ts +0 -70
  83. package/dist/human-presence-mint.js +0 -204
  84. package/dist/identity-banner.d.ts +0 -13
  85. package/dist/identity-banner.js +0 -19
  86. package/dist/index.d.ts +0 -11
  87. package/dist/index.js +0 -14
  88. package/dist/init-cli/constants.d.ts +0 -42
  89. package/dist/init-cli/constants.js +0 -42
  90. package/dist/init-cli/help.d.ts +0 -9
  91. package/dist/init-cli/help.js +0 -43
  92. package/dist/init-cli/init.d.ts +0 -26
  93. package/dist/init-cli/init.js +0 -80
  94. package/dist/init-cli/migrate.d.ts +0 -3
  95. package/dist/init-cli/migrate.js +0 -51
  96. package/dist/init-cli/resolve-binary.d.ts +0 -34
  97. package/dist/init-cli/resolve-binary.js +0 -78
  98. package/dist/init-cli/run-deft-install.d.ts +0 -23
  99. package/dist/init-cli/run-deft-install.js +0 -71
  100. package/dist/init-cli/update.d.ts +0 -5
  101. package/dist/init-cli/update.js +0 -38
  102. package/dist/install-cli/coverage-map.d.ts +0 -14
  103. package/dist/install-cli/coverage-map.js +0 -113
  104. package/dist/install-uninstall.d.ts +0 -3
  105. package/dist/install-uninstall.js +0 -44
  106. package/dist/install-upgrade.d.ts +0 -41
  107. package/dist/install-upgrade.js +0 -86
  108. package/dist/lifecycle-cli/coverage-map.d.ts +0 -16
  109. package/dist/lifecycle-cli/coverage-map.js +0 -254
  110. package/dist/lifecycle-cli/helpers.d.ts +0 -8
  111. package/dist/lifecycle-cli/helpers.js +0 -20
  112. package/dist/lifecycle-event.d.ts +0 -11
  113. package/dist/lifecycle-event.js +0 -45
  114. package/dist/lifecycle-stats.d.ts +0 -12
  115. package/dist/lifecycle-stats.js +0 -100
  116. package/dist/migrate-category-b.d.ts +0 -9
  117. package/dist/migrate-category-b.js +0 -52
  118. package/dist/migrate-preflight.d.ts +0 -10
  119. package/dist/migrate-preflight.js +0 -85
  120. package/dist/migrate-xbrief.d.ts +0 -11
  121. package/dist/migrate-xbrief.js +0 -88
  122. package/dist/occupancy-grant.d.ts +0 -18
  123. package/dist/occupancy-grant.js +0 -121
  124. package/dist/occupancy-heartbeat.d.ts +0 -8
  125. package/dist/occupancy-heartbeat.js +0 -63
  126. package/dist/occupancy-release.d.ts +0 -23
  127. package/dist/occupancy-release.js +0 -102
  128. package/dist/occupancy-steal.d.ts +0 -10
  129. package/dist/occupancy-steal.js +0 -83
  130. package/dist/occupancy-unrecognized.d.ts +0 -3
  131. package/dist/occupancy-unrecognized.js +0 -5
  132. package/dist/orchestration-cli/coverage-map.d.ts +0 -21
  133. package/dist/orchestration-cli/coverage-map.js +0 -225
  134. package/dist/orchestration-cli/helpers.d.ts +0 -11
  135. package/dist/orchestration-cli/helpers.js +0 -35
  136. package/dist/ownership-doctor.d.ts +0 -10
  137. package/dist/ownership-doctor.js +0 -96
  138. package/dist/ownership-fix.d.ts +0 -10
  139. package/dist/ownership-fix.js +0 -93
  140. package/dist/plan-sequence.d.ts +0 -14
  141. package/dist/plan-sequence.js +0 -258
  142. package/dist/policy-fixtures.d.ts +0 -33
  143. package/dist/policy-fixtures.js +0 -118
  144. package/dist/policy.d.ts +0 -37
  145. package/dist/policy.js +0 -744
  146. package/dist/pr-closing-keywords.d.ts +0 -3
  147. package/dist/pr-closing-keywords.js +0 -10
  148. package/dist/pr-finish-loop.d.ts +0 -3
  149. package/dist/pr-finish-loop.js +0 -10
  150. package/dist/pr-merge-readiness.d.ts +0 -3
  151. package/dist/pr-merge-readiness.js +0 -10
  152. package/dist/pr-monitor.d.ts +0 -3
  153. package/dist/pr-monitor.js +0 -10
  154. package/dist/pr-protected-issues.d.ts +0 -3
  155. package/dist/pr-protected-issues.js +0 -10
  156. package/dist/pr-wait-mergeable.d.ts +0 -3
  157. package/dist/pr-wait-mergeable.js +0 -10
  158. package/dist/pr-watch.d.ts +0 -3
  159. package/dist/pr-watch.js +0 -10
  160. package/dist/pre-pr-run.d.ts +0 -39
  161. package/dist/pre-pr-run.js +0 -514
  162. package/dist/preflight-cache.d.ts +0 -18
  163. package/dist/preflight-cache.js +0 -113
  164. package/dist/preflight-gh.d.ts +0 -15
  165. package/dist/preflight-gh.js +0 -143
  166. package/dist/probe-session.d.ts +0 -3
  167. package/dist/probe-session.js +0 -10
  168. package/dist/release-e2e-fixtures.d.ts +0 -29
  169. package/dist/release-e2e-fixtures.js +0 -38
  170. package/dist/release-e2e.d.ts +0 -3
  171. package/dist/release-e2e.js +0 -10
  172. package/dist/release-publish.d.ts +0 -3
  173. package/dist/release-publish.js +0 -10
  174. package/dist/release-rollback.d.ts +0 -3
  175. package/dist/release-rollback.js +0 -10
  176. package/dist/release-wait-npm.d.ts +0 -3
  177. package/dist/release-wait-npm.js +0 -10
  178. package/dist/release.d.ts +0 -3
  179. package/dist/release.js +0 -10
  180. package/dist/render-cli/deft-ts-runner.d.ts +0 -17
  181. package/dist/render-cli/deft-ts-runner.js +0 -19
  182. package/dist/render-cli/export-spec-cli.d.ts +0 -2
  183. package/dist/render-cli/export-spec-cli.js +0 -6
  184. package/dist/render-cli/prd-render-cli.d.ts +0 -2
  185. package/dist/render-cli/prd-render-cli.js +0 -37
  186. package/dist/render-cli/project-render-cli.d.ts +0 -2
  187. package/dist/render-cli/project-render-cli.js +0 -6
  188. package/dist/render-cli/rule-map-cli.d.ts +0 -2
  189. package/dist/render-cli/rule-map-cli.js +0 -5
  190. package/dist/render-cli/spec-reconstruct-cli.d.ts +0 -3
  191. package/dist/render-cli/spec-reconstruct-cli.js +0 -15
  192. package/dist/render-cli/spec-render-cli.d.ts +0 -2
  193. package/dist/render-cli/spec-render-cli.js +0 -39
  194. package/dist/render-cli/spec-validate-cli.d.ts +0 -2
  195. package/dist/render-cli/spec-validate-cli.js +0 -38
  196. package/dist/review-monitor-register.d.ts +0 -19
  197. package/dist/review-monitor-register.js +0 -183
  198. package/dist/review-monitor-release.d.ts +0 -14
  199. package/dist/review-monitor-release.js +0 -123
  200. package/dist/scm-sync-default.d.ts +0 -34
  201. package/dist/scm-sync-default.js +0 -210
  202. package/dist/scope-lifecycle.d.ts +0 -4
  203. package/dist/scope-lifecycle.js +0 -34
  204. package/dist/scope-record-approved-scope.d.ts +0 -29
  205. package/dist/scope-record-approved-scope.js +0 -319
  206. package/dist/scope-record-intent-constraint.d.ts +0 -16
  207. package/dist/scope-record-intent-constraint.js +0 -202
  208. package/dist/scope-record-observable-scope.d.ts +0 -16
  209. package/dist/scope-record-observable-scope.js +0 -204
  210. package/dist/session-ready.d.ts +0 -15
  211. package/dist/session-ready.js +0 -144
  212. package/dist/session-start.d.ts +0 -56
  213. package/dist/session-start.js +0 -581
  214. package/dist/slice.d.ts +0 -4
  215. package/dist/slice.js +0 -34
  216. package/dist/story-ready-fixtures.d.ts +0 -47
  217. package/dist/story-ready-fixtures.js +0 -137
  218. package/dist/subagent-monitor.d.ts +0 -3
  219. package/dist/subagent-monitor.js +0 -10
  220. package/dist/subagent-pre-cancel.d.ts +0 -21
  221. package/dist/subagent-pre-cancel.js +0 -240
  222. package/dist/subagent-steer-write.d.ts +0 -41
  223. package/dist/subagent-steer-write.js +0 -333
  224. package/dist/toolchain-check.d.ts +0 -8
  225. package/dist/toolchain-check.js +0 -54
  226. package/dist/triage-actions.d.ts +0 -23
  227. package/dist/triage-actions.js +0 -233
  228. package/dist/triage-aux-a-fixtures.d.ts +0 -33
  229. package/dist/triage-aux-a-fixtures.js +0 -107
  230. package/dist/triage-aux-b-fixtures.d.ts +0 -30
  231. package/dist/triage-aux-b-fixtures.js +0 -167
  232. package/dist/triage-bootstrap-fixtures.d.ts +0 -42
  233. package/dist/triage-bootstrap-fixtures.js +0 -139
  234. package/dist/triage-bootstrap.d.ts +0 -24
  235. package/dist/triage-bootstrap.js +0 -175
  236. package/dist/triage-bulk.d.ts +0 -17
  237. package/dist/triage-bulk.js +0 -154
  238. package/dist/triage-classify-fixtures.d.ts +0 -38
  239. package/dist/triage-classify-fixtures.js +0 -137
  240. package/dist/triage-classify.d.ts +0 -45
  241. package/dist/triage-classify.js +0 -287
  242. package/dist/triage-evaluate.d.ts +0 -14
  243. package/dist/triage-evaluate.js +0 -153
  244. package/dist/triage-help.d.ts +0 -3
  245. package/dist/triage-help.js +0 -10
  246. package/dist/triage-queue-fixtures.d.ts +0 -59
  247. package/dist/triage-queue-fixtures.js +0 -284
  248. package/dist/triage-queue.d.ts +0 -38
  249. package/dist/triage-queue.js +0 -391
  250. package/dist/triage-reconcile.d.ts +0 -11
  251. package/dist/triage-reconcile.js +0 -76
  252. package/dist/triage-refresh.d.ts +0 -7
  253. package/dist/triage-refresh.js +0 -37
  254. package/dist/triage-scope-drift.d.ts +0 -12
  255. package/dist/triage-scope-drift.js +0 -117
  256. package/dist/triage-scope-fixtures.d.ts +0 -32
  257. package/dist/triage-scope-fixtures.js +0 -131
  258. package/dist/triage-scope.d.ts +0 -4
  259. package/dist/triage-scope.js +0 -34
  260. package/dist/triage-smoketest.d.ts +0 -3
  261. package/dist/triage-smoketest.js +0 -43
  262. package/dist/triage-strip-withdrawn.d.ts +0 -21
  263. package/dist/triage-strip-withdrawn.js +0 -102
  264. package/dist/triage-subscribe.d.ts +0 -15
  265. package/dist/triage-subscribe.js +0 -157
  266. package/dist/triage-summary.d.ts +0 -14
  267. package/dist/triage-summary.js +0 -83
  268. package/dist/triage-welcome.d.ts +0 -14
  269. package/dist/triage-welcome.js +0 -121
  270. package/dist/ts-check-lane.d.ts +0 -9
  271. package/dist/ts-check-lane.js +0 -49
  272. package/dist/umbrella-current-shape.d.ts +0 -9
  273. package/dist/umbrella-current-shape.js +0 -56
  274. package/dist/vbrief-activate.d.ts +0 -3
  275. package/dist/vbrief-activate.js +0 -7
  276. package/dist/vbrief-build.d.ts +0 -3
  277. package/dist/vbrief-build.js +0 -8
  278. package/dist/vbrief-preflight-fixtures.d.ts +0 -32
  279. package/dist/vbrief-preflight-fixtures.js +0 -79
  280. package/dist/vbrief-preflight.d.ts +0 -13
  281. package/dist/vbrief-preflight.js +0 -141
  282. package/dist/vbrief-reconcile.d.ts +0 -3
  283. package/dist/vbrief-reconcile.js +0 -7
  284. package/dist/vbrief-validate.d.ts +0 -3
  285. package/dist/vbrief-validate.js +0 -8
  286. package/dist/vbrief-validation.d.ts +0 -3
  287. package/dist/vbrief-validation.js +0 -8
  288. package/dist/verify-ac.d.ts +0 -28
  289. package/dist/verify-ac.js +0 -439
  290. package/dist/verify-agents-md-advisory.d.ts +0 -19
  291. package/dist/verify-agents-md-advisory.js +0 -65
  292. package/dist/verify-agents-md-budget.d.ts +0 -12
  293. package/dist/verify-agents-md-budget.js +0 -71
  294. package/dist/verify-branch.d.ts +0 -14
  295. package/dist/verify-branch.js +0 -81
  296. package/dist/verify-class-checks.d.ts +0 -11
  297. package/dist/verify-class-checks.js +0 -71
  298. package/dist/verify-cohort-review-monitors.d.ts +0 -5
  299. package/dist/verify-cohort-review-monitors.js +0 -11
  300. package/dist/verify-completed-tracked.d.ts +0 -19
  301. package/dist/verify-completed-tracked.js +0 -202
  302. package/dist/verify-completed-write-guard.d.ts +0 -13
  303. package/dist/verify-completed-write-guard.js +0 -84
  304. package/dist/verify-consumer-check-contract.d.ts +0 -12
  305. package/dist/verify-consumer-check-contract.js +0 -70
  306. package/dist/verify-consumer-header-placeholder.d.ts +0 -12
  307. package/dist/verify-consumer-header-placeholder.js +0 -73
  308. package/dist/verify-consumer-test-lane.d.ts +0 -12
  309. package/dist/verify-consumer-test-lane.js +0 -57
  310. package/dist/verify-durable-effect-acquisition.d.ts +0 -13
  311. package/dist/verify-durable-effect-acquisition.js +0 -70
  312. package/dist/verify-encoding.d.ts +0 -15
  313. package/dist/verify-encoding.js +0 -83
  314. package/dist/verify-eval-health-relocation.d.ts +0 -16
  315. package/dist/verify-eval-health-relocation.js +0 -93
  316. package/dist/verify-eval-triggers-relocation.d.ts +0 -14
  317. package/dist/verify-eval-triggers-relocation.js +0 -74
  318. package/dist/verify-evaluator-surface.d.ts +0 -15
  319. package/dist/verify-evaluator-surface.js +0 -87
  320. package/dist/verify-forward-coverage.d.ts +0 -19
  321. package/dist/verify-forward-coverage.js +0 -144
  322. package/dist/verify-hooks-installed.d.ts +0 -24
  323. package/dist/verify-hooks-installed.js +0 -140
  324. package/dist/verify-intent-constraint.d.ts +0 -17
  325. package/dist/verify-intent-constraint.js +0 -110
  326. package/dist/verify-investigation.d.ts +0 -3
  327. package/dist/verify-investigation.js +0 -10
  328. package/dist/verify-judgment-gates.d.ts +0 -3
  329. package/dist/verify-judgment-gates.js +0 -10
  330. package/dist/verify-l4-owner.d.ts +0 -15
  331. package/dist/verify-l4-owner.js +0 -132
  332. package/dist/verify-lifecycle-visible.d.ts +0 -13
  333. package/dist/verify-lifecycle-visible.js +0 -68
  334. package/dist/verify-literal-ac.d.ts +0 -14
  335. package/dist/verify-literal-ac.js +0 -168
  336. package/dist/verify-no-task-runtime.d.ts +0 -3
  337. package/dist/verify-no-task-runtime.js +0 -16
  338. package/dist/verify-observable-scope.d.ts +0 -17
  339. package/dist/verify-observable-scope.js +0 -110
  340. package/dist/verify-operator-scope-limit.d.ts +0 -17
  341. package/dist/verify-operator-scope-limit.js +0 -285
  342. package/dist/verify-orphan-active.d.ts +0 -17
  343. package/dist/verify-orphan-active.js +0 -135
  344. package/dist/verify-ownership.d.ts +0 -10
  345. package/dist/verify-ownership.js +0 -90
  346. package/dist/verify-persisted-planning-narratives.d.ts +0 -12
  347. package/dist/verify-persisted-planning-narratives.js +0 -82
  348. package/dist/verify-plan-sequence.d.ts +0 -14
  349. package/dist/verify-plan-sequence.js +0 -138
  350. package/dist/verify-pr-closeout-attestable.d.ts +0 -15
  351. package/dist/verify-pr-closeout-attestable.js +0 -114
  352. package/dist/verify-presentation-ceiling.d.ts +0 -11
  353. package/dist/verify-presentation-ceiling.js +0 -71
  354. package/dist/verify-presentation-coverage.d.ts +0 -14
  355. package/dist/verify-presentation-coverage.js +0 -90
  356. package/dist/verify-review-monitor.d.ts +0 -32
  357. package/dist/verify-review-monitor.js +0 -362
  358. package/dist/verify-scope-provenance.d.ts +0 -16
  359. package/dist/verify-scope-provenance.js +0 -91
  360. package/dist/verify-session-ritual.d.ts +0 -23
  361. package/dist/verify-session-ritual.js +0 -144
  362. package/dist/verify-source-cli/rule-ownership-lint.d.ts +0 -12
  363. package/dist/verify-source-cli/rule-ownership-lint.js +0 -61
  364. package/dist/verify-source-cli/verify-biome-config.d.ts +0 -11
  365. package/dist/verify-source-cli/verify-biome-config.js +0 -46
  366. package/dist/verify-source-cli/verify-closing-keywords.d.ts +0 -35
  367. package/dist/verify-source-cli/verify-closing-keywords.js +0 -139
  368. package/dist/verify-source-cli/verify-consumer-hard-stops.d.ts +0 -16
  369. package/dist/verify-source-cli/verify-consumer-hard-stops.js +0 -99
  370. package/dist/verify-source-cli/verify-contained-writes.d.ts +0 -13
  371. package/dist/verify-source-cli/verify-contained-writes.js +0 -67
  372. package/dist/verify-source-cli/verify-content-manifest.d.ts +0 -12
  373. package/dist/verify-source-cli/verify-content-manifest.js +0 -61
  374. package/dist/verify-source-cli/verify-contract-drift.d.ts +0 -11
  375. package/dist/verify-source-cli/verify-contract-drift.js +0 -47
  376. package/dist/verify-source-cli/verify-cursor-tier1.d.ts +0 -12
  377. package/dist/verify-source-cli/verify-cursor-tier1.js +0 -51
  378. package/dist/verify-source-cli/verify-deposit-closure.d.ts +0 -12
  379. package/dist/verify-source-cli/verify-deposit-closure.js +0 -52
  380. package/dist/verify-source-cli/verify-openclaw-tier1.d.ts +0 -12
  381. package/dist/verify-source-cli/verify-openclaw-tier1.js +0 -51
  382. package/dist/verify-source-cli/verify-scm-boundary.d.ts +0 -13
  383. package/dist/verify-source-cli/verify-scm-boundary.js +0 -66
  384. package/dist/verify-source-cli/verify-semantic-single-source.d.ts +0 -11
  385. package/dist/verify-source-cli/verify-semantic-single-source.js +0 -49
  386. package/dist/verify-source-cli/verify-skill-external-fetch-gate.d.ts +0 -11
  387. package/dist/verify-source-cli/verify-skill-external-fetch-gate.js +0 -46
  388. package/dist/verify-source-cli/verify-spec-drift.d.ts +0 -3
  389. package/dist/verify-source-cli/verify-spec-drift.js +0 -15
  390. package/dist/verify-source-cli/verify-spec-prd-fresh.d.ts +0 -3
  391. package/dist/verify-source-cli/verify-spec-prd-fresh.js +0 -15
  392. package/dist/verify-source-cli/verify-stubs.d.ts +0 -11
  393. package/dist/verify-source-cli/verify-stubs.js +0 -27
  394. package/dist/verify-source-cli/verify-telemetry-coverage.d.ts +0 -13
  395. package/dist/verify-source-cli/verify-telemetry-coverage.js +0 -67
  396. package/dist/verify-source-cli/verify-xbrief-drift.d.ts +0 -15
  397. package/dist/verify-source-cli/verify-xbrief-drift.js +0 -80
  398. package/dist/verify-story-ready.d.ts +0 -18
  399. package/dist/verify-story-ready.js +0 -190
  400. package/dist/verify-subagent-alive.d.ts +0 -21
  401. package/dist/verify-subagent-alive.js +0 -219
  402. package/dist/verify-subagent-steer.d.ts +0 -19
  403. package/dist/verify-subagent-steer.js +0 -136
  404. package/dist/verify-test-boundary.d.ts +0 -12
  405. package/dist/verify-test-boundary.js +0 -80
  406. package/dist/verify-tools.d.ts +0 -13
  407. package/dist/verify-tools.js +0 -67
  408. package/dist/verify-wip-cap.d.ts +0 -13
  409. package/dist/verify-wip-cap.js +0 -62
  410. package/dist/windows-bin-ps1.d.ts +0 -39
  411. package/dist/windows-bin-ps1.js +0 -226
  412. package/dist/wip-cap-fixtures.d.ts +0 -37
  413. package/dist/wip-cap-fixtures.js +0 -122
  414. package/dist/wsl-ownership-guard.d.ts +0 -2
  415. package/dist/wsl-ownership-guard.js +0 -15
  416. package/dist/xbrief-create.d.ts +0 -3
  417. package/dist/xbrief-create.js +0 -9
  418. package/dist/xbrief-verify.d.ts +0 -3
  419. package/dist/xbrief-verify.js +0 -9
  420. package/scripts/remove-windows-ps1-shims.mjs +0 -26
package/dist/policy.js DELETED
@@ -1,744 +0,0 @@
1
- #!/usr/bin/env node
2
- /**
3
- * Policy CLI (#1722): `policy:show` and `policy:allow-direct-commits` surfaces,
4
- * mirroring scripts/_policy_show_cli.py and scripts/policy_set.py.
5
- */
6
- import { existsSync } from "node:fs";
7
- import { resolve as pathResolve, relative } from "node:path";
8
- import { fileURLToPath } from "node:url";
9
- import { ALLOW_BOT_MERGE_CAPABILITY_COST, ALLOW_DESTRUCTIVE_GH_VERBS_CAPABILITY_COST, CEREMONY_DEPTHS, clearValueFeedback, createNoDeftDirectiveFlag, describeShadowedPlanExtension, detectNoDeftDirective, detectShadowedPlanExtensions, disableHostHooks, disclosureLine, enableValueFeedback, FIELD_VALUE_FEEDBACK, FIELD_VALUE_FEEDBACK_CLI_ALIAS, formatValueFeedbackStatusLine, humanMergeDisclosureLine, inspectAllPolicies, inspectOnePolicy, loadProjectDefinition, NO_DEFT_DIRECTIVE_DISABLED_MESSAGE, NO_DEFT_DIRECTIVE_FLAG_NAME, NO_DEFT_DIRECTIVE_INCONSISTENT_MESSAGE, POLICY_AUDIT_NOOP_STDOUT, parseHookHost, policyColonInvocation, projectDefinitionPath, promoteSpecGuardDriftEnforcement, pythonListRepr, pythonStringRepr, registeredPolicyNames, removeNoDeftDirectiveFlag, renderJson, renderText, resolveHumanMergePolicy, resolvePolicy, resolveValueFeedback, SPEC_GUARD_ENFORCEMENTS, setAllowDestructiveGhVerbs, setCeremonyDial, setPolicy, setRequireHumanMerge, } from "@deftai/directive-core/policy";
10
- const CAPABILITY_COST_DISCLOSURE = "\u26a0 Capability-cost disclosure -- enabling direct commits to the default " +
11
- "branch turns OFF the deft branch-protection policy.\n" +
12
- " \u2022 Pre-commit + pre-push hooks will no longer block default-branch " +
13
- "commits.\n" +
14
- " \u2022 verify:branch will pass on the default branch.\n" +
15
- " \u2022 The CI sanity check (head_ref != base_ref) is still independent and " +
16
- "will continue to flag master->master PRs.\n" +
17
- " \u2022 This change is reversible: run `" +
18
- policyColonInvocation("enforce-branches") +
19
- "` to " +
20
- "re-enable the gate.\n" +
21
- " \u2022 The change is recorded to meta/policy-changes.log for auditability.";
22
- function makeSetError(message) {
23
- return {
24
- cmd: "show",
25
- confirm: false,
26
- actor: "",
27
- note: "",
28
- projectRoot: ".",
29
- format: "text",
30
- changedOnly: false,
31
- field: null,
32
- error: message,
33
- };
34
- }
35
- function parseProjectRoot(argv) {
36
- let projectRoot = ".";
37
- for (let i = 0; i < argv.length; i += 1) {
38
- const arg = argv[i];
39
- if (arg === "--project-root") {
40
- const v = argv[i + 1];
41
- if (v === undefined) {
42
- return { projectRoot: ".", error: "argument --project-root: expected one argument" };
43
- }
44
- projectRoot = v;
45
- i += 1;
46
- }
47
- else if (arg?.startsWith("--project-root=")) {
48
- projectRoot = arg.slice("--project-root=".length);
49
- }
50
- else {
51
- return { projectRoot: ".", error: `unrecognized argument: ${arg}` };
52
- }
53
- }
54
- return { projectRoot };
55
- }
56
- /** Parse policy:show flags (mirrors _policy_show_cli.py). */
57
- export function parseShowArgs(argv) {
58
- const parsed = {
59
- format: "text",
60
- changedOnly: false,
61
- field: null,
62
- projectRoot: ".",
63
- };
64
- for (let i = 0; i < argv.length; i += 1) {
65
- const arg = argv[i];
66
- if (arg === "--format") {
67
- const v = argv[i + 1];
68
- if (v !== "text" && v !== "json") {
69
- return {
70
- ...parsed,
71
- error: v === undefined ? "argument --format: expected one argument" : `invalid choice: '${v}'`,
72
- };
73
- }
74
- parsed.format = v;
75
- i += 1;
76
- }
77
- else if (arg?.startsWith("--format=")) {
78
- const v = arg.slice("--format=".length);
79
- if (v !== "text" && v !== "json") {
80
- return { ...parsed, error: `invalid choice: '${v}'` };
81
- }
82
- parsed.format = v;
83
- }
84
- else if (arg === "--changed-only") {
85
- parsed.changedOnly = true;
86
- }
87
- else if (arg === "--field") {
88
- const v = argv[i + 1];
89
- if (v === undefined)
90
- return { ...parsed, error: "argument --field: expected one argument" };
91
- parsed.field = v;
92
- i += 1;
93
- }
94
- else if (arg?.startsWith("--field=")) {
95
- parsed.field = arg.slice("--field=".length);
96
- }
97
- else if (arg === "--project-root") {
98
- const v = argv[i + 1];
99
- if (v === undefined) {
100
- return { ...parsed, error: "argument --project-root: expected one argument" };
101
- }
102
- parsed.projectRoot = v;
103
- i += 1;
104
- }
105
- else if (arg?.startsWith("--project-root=")) {
106
- parsed.projectRoot = arg.slice("--project-root=".length);
107
- }
108
- else {
109
- return { ...parsed, error: `unrecognized argument: ${arg}` };
110
- }
111
- }
112
- return parsed;
113
- }
114
- /** Parse argv for the policy CLI (show + set subcommands). */
115
- export function parseArgs(argv) {
116
- if (argv.length === 0) {
117
- const usage = "usage: policy [show|enforce-branches|allow-direct-commits|allow-destructive-gh-verbs|enforce-destructive-gh-verbs|allow-bot-merge|enable-value-feedback|clear-value-feedback|set-ceremony-dial|set-spec-guard-enforcement|disable-host-hooks|disable-directive|enable-directive|resolve] ...";
118
- return makeSetError(usage);
119
- }
120
- const cmd = argv[0];
121
- if (cmd === "set-spec-guard-enforcement") {
122
- let confirm = false;
123
- let actor = policyColonInvocation("set-spec-guard-enforcement");
124
- let note = "";
125
- let projectRoot = ".";
126
- let specGuardEnforcement;
127
- for (let i = 1; i < argv.length; i += 1) {
128
- const arg = argv[i];
129
- if (arg === "--confirm") {
130
- confirm = true;
131
- }
132
- else if (arg === "--actor") {
133
- const v = argv[i + 1];
134
- if (v === undefined)
135
- return makeSetError("argument --actor: expected one argument");
136
- actor = v;
137
- i += 1;
138
- }
139
- else if (arg?.startsWith("--actor=")) {
140
- actor = arg.slice("--actor=".length);
141
- }
142
- else if (arg === "--note") {
143
- const v = argv[i + 1];
144
- if (v === undefined)
145
- return makeSetError("argument --note: expected one argument");
146
- note = v;
147
- i += 1;
148
- }
149
- else if (arg?.startsWith("--note=")) {
150
- note = arg.slice("--note=".length);
151
- }
152
- else if (arg === "--set") {
153
- const v = argv[i + 1];
154
- if (v === undefined) {
155
- return makeSetError("argument --set: expected advise|shadow|enforce");
156
- }
157
- if (!SPEC_GUARD_ENFORCEMENTS.has(v)) {
158
- return makeSetError(`argument --set: expected advise|shadow|enforce, got ${JSON.stringify(v)}`);
159
- }
160
- specGuardEnforcement = v;
161
- i += 1;
162
- }
163
- else if (arg?.startsWith("--set=")) {
164
- const v = arg.slice("--set=".length);
165
- if (!SPEC_GUARD_ENFORCEMENTS.has(v)) {
166
- return makeSetError(`argument --set: expected advise|shadow|enforce, got ${JSON.stringify(v)}`);
167
- }
168
- specGuardEnforcement = v;
169
- }
170
- else if (arg === "--project-root") {
171
- const v = argv[i + 1];
172
- if (v === undefined)
173
- return makeSetError("argument --project-root: expected one argument");
174
- projectRoot = v;
175
- i += 1;
176
- }
177
- else if (arg?.startsWith("--project-root=")) {
178
- projectRoot = arg.slice("--project-root=".length);
179
- }
180
- else if (arg === "--") {
181
- }
182
- else {
183
- return makeSetError(`unrecognized argument: ${arg}`);
184
- }
185
- }
186
- return {
187
- cmd: "set-spec-guard-enforcement",
188
- confirm,
189
- actor,
190
- note,
191
- projectRoot,
192
- format: "text",
193
- changedOnly: false,
194
- field: null,
195
- specGuardEnforcement,
196
- };
197
- }
198
- if (cmd === "show") {
199
- const show = parseShowArgs(argv.slice(1));
200
- return {
201
- cmd: "show",
202
- confirm: false,
203
- actor: policyColonInvocation("show"),
204
- note: "",
205
- projectRoot: show.projectRoot,
206
- format: show.format,
207
- changedOnly: show.changedOnly,
208
- field: show.field,
209
- error: show.error,
210
- };
211
- }
212
- if (cmd === "resolve") {
213
- const root = parseProjectRoot(argv.slice(1));
214
- return {
215
- cmd: "resolve",
216
- confirm: false,
217
- actor: "agent",
218
- note: "",
219
- projectRoot: root.projectRoot,
220
- format: "text",
221
- changedOnly: false,
222
- field: null,
223
- error: root.error,
224
- };
225
- }
226
- if (cmd === "enforce-branches" ||
227
- cmd === "allow-direct-commits" ||
228
- cmd === "allow-destructive-gh-verbs" ||
229
- cmd === "enforce-destructive-gh-verbs" ||
230
- cmd === "allow-bot-merge" ||
231
- cmd === "enable-value-feedback" ||
232
- cmd === "clear-value-feedback" ||
233
- cmd === "set-ceremony-dial" ||
234
- cmd === "disable-host-hooks" ||
235
- cmd === "disable-directive" ||
236
- cmd === "enable-directive") {
237
- let confirm = false;
238
- let actor = cmd === "enforce-branches"
239
- ? policyColonInvocation("enforce-branches")
240
- : cmd === "allow-direct-commits"
241
- ? policyColonInvocation("allow-direct-commits")
242
- : cmd === "allow-destructive-gh-verbs"
243
- ? policyColonInvocation("allow-destructive-gh-verbs")
244
- : cmd === "enforce-destructive-gh-verbs"
245
- ? policyColonInvocation("enforce-destructive-gh-verbs")
246
- : cmd === "allow-bot-merge"
247
- ? policyColonInvocation("allow-bot-merge")
248
- : cmd === "enable-value-feedback"
249
- ? policyColonInvocation("enable-value-feedback")
250
- : cmd === "clear-value-feedback"
251
- ? policyColonInvocation("clear-value-feedback")
252
- : cmd === "set-ceremony-dial"
253
- ? policyColonInvocation("set-ceremony-dial")
254
- : cmd === "disable-host-hooks"
255
- ? policyColonInvocation("disable-host-hooks")
256
- : cmd === "disable-directive"
257
- ? policyColonInvocation("disable-directive")
258
- : policyColonInvocation("enable-directive");
259
- let note = "";
260
- let projectRoot = ".";
261
- let host;
262
- let ceremonyOverride;
263
- let ceremonyEnabled;
264
- let upstreamPrompt;
265
- for (let i = 1; i < argv.length; i += 1) {
266
- const arg = argv[i];
267
- if (arg === "--confirm") {
268
- confirm = true;
269
- }
270
- else if (cmd === "enable-value-feedback" && arg === "--upstream-prompt") {
271
- upstreamPrompt = true;
272
- }
273
- else if (arg === "--actor") {
274
- const v = argv[i + 1];
275
- if (v === undefined)
276
- return makeSetError("argument --actor: expected one argument");
277
- actor = v;
278
- i += 1;
279
- }
280
- else if (arg?.startsWith("--actor=")) {
281
- actor = arg.slice("--actor=".length);
282
- }
283
- else if (arg === "--note") {
284
- const v = argv[i + 1];
285
- if (v === undefined)
286
- return makeSetError("argument --note: expected one argument");
287
- note = v;
288
- i += 1;
289
- }
290
- else if (arg?.startsWith("--note=")) {
291
- note = arg.slice("--note=".length);
292
- }
293
- else if (arg === "--project-root") {
294
- const v = argv[i + 1];
295
- if (v === undefined)
296
- return makeSetError("argument --project-root: expected one argument");
297
- projectRoot = v;
298
- i += 1;
299
- }
300
- else if (arg?.startsWith("--project-root=")) {
301
- projectRoot = arg.slice("--project-root=".length);
302
- }
303
- else if (cmd === "set-ceremony-dial" && (arg === "--override" || arg === "--depth")) {
304
- const v = argv[i + 1];
305
- if (v === undefined) {
306
- return makeSetError(`argument ${arg}: expected one argument (minimal|rapid|standard|elevated|null)`);
307
- }
308
- if (v === "null" || v === "none" || v === "clear") {
309
- ceremonyOverride = null;
310
- }
311
- else if (CEREMONY_DEPTHS.includes(v)) {
312
- ceremonyOverride = v;
313
- }
314
- else {
315
- return makeSetError(`argument ${arg}: expected minimal|rapid|standard|elevated|null, got ${JSON.stringify(v)}`);
316
- }
317
- i += 1;
318
- }
319
- else if (cmd === "set-ceremony-dial" &&
320
- (arg?.startsWith("--override=") || arg?.startsWith("--depth="))) {
321
- const v = arg.slice(arg.indexOf("=") + 1);
322
- if (v === "null" || v === "none" || v === "clear") {
323
- ceremonyOverride = null;
324
- }
325
- else if (CEREMONY_DEPTHS.includes(v)) {
326
- ceremonyOverride = v;
327
- }
328
- else {
329
- return makeSetError(`argument --override: expected minimal|rapid|standard|elevated|null, got ${JSON.stringify(v)}`);
330
- }
331
- }
332
- else if (cmd === "set-ceremony-dial" && arg === "--enabled") {
333
- const v = argv[i + 1];
334
- if (v === undefined || (v !== "true" && v !== "false")) {
335
- return makeSetError("argument --enabled: expected true|false");
336
- }
337
- ceremonyEnabled = v === "true";
338
- i += 1;
339
- }
340
- else if (cmd === "set-ceremony-dial" && arg?.startsWith("--enabled=")) {
341
- const v = arg.slice("--enabled=".length);
342
- if (v !== "true" && v !== "false") {
343
- return makeSetError("argument --enabled: expected true|false");
344
- }
345
- ceremonyEnabled = v === "true";
346
- }
347
- else if (cmd === "disable-host-hooks" && arg === "--host") {
348
- const v = argv[i + 1];
349
- const parsedHost = parseHookHost(v);
350
- if (parsedHost === null) {
351
- return makeSetError("argument --host: expected claude|cursor|grok|codex");
352
- }
353
- host = parsedHost;
354
- i += 1;
355
- }
356
- else if (cmd === "disable-host-hooks" && arg?.startsWith("--host=")) {
357
- const parsedHost = parseHookHost(arg.slice("--host=".length));
358
- if (parsedHost === null) {
359
- return makeSetError("argument --host: expected claude|cursor|grok|codex");
360
- }
361
- host = parsedHost;
362
- }
363
- else if (arg === "--") {
364
- }
365
- else {
366
- return makeSetError(`unrecognized argument: ${arg}`);
367
- }
368
- }
369
- if (cmd === "disable-host-hooks" && host === undefined) {
370
- return makeSetError("disable-host-hooks requires --host claude|cursor|grok|codex");
371
- }
372
- return {
373
- cmd,
374
- confirm,
375
- actor,
376
- note,
377
- projectRoot,
378
- format: "text",
379
- changedOnly: false,
380
- field: null,
381
- host,
382
- ceremonyOverride,
383
- ceremonyEnabled,
384
- upstreamPrompt,
385
- };
386
- }
387
- return makeSetError(`unknown subcommand: ${cmd}`);
388
- }
389
- /**
390
- * Emit a loud warning to stderr for every plan-extension key whose bare block
391
- * silently shadows the namespaced form (#2301). Never fails / throws: a missing
392
- * or malformed PROJECT-DEFINITION simply yields no warnings.
393
- */
394
- function emitPlanExtensionShadowWarnings(projectRoot) {
395
- const [data] = loadProjectDefinition(projectRoot);
396
- if (data === null)
397
- return;
398
- const shadows = detectShadowedPlanExtensions(data.plan);
399
- for (const shadow of shadows) {
400
- process.stderr.write(`[policy:show] WARNING: ${describeShadowedPlanExtension(shadow)}\n`);
401
- }
402
- }
403
- function valueFeedbackGateSummary(projectRoot) {
404
- return formatValueFeedbackStatusLine(resolveValueFeedback(projectRoot));
405
- }
406
- function runShow(args) {
407
- const projectRoot = pathResolve(args.projectRoot);
408
- // Layout-aware (#2302): name the resolved PROJECT-DEFINITION path (xbrief on a
409
- // migrated tree, else vbrief) instead of the hardcoded vbrief/ literal.
410
- const pdPath = projectDefinitionPath(projectRoot);
411
- if (!existsSync(pdPath)) {
412
- process.stderr.write(`[policy:show] PROJECT-DEFINITION not found at ${pdPath}; ` +
413
- "rendering framework defaults.\n");
414
- }
415
- emitPlanExtensionShadowWarnings(projectRoot);
416
- if (args.field !== null) {
417
- const field = inspectOnePolicy(args.field, projectRoot);
418
- if (field === null) {
419
- const known = registeredPolicyNames();
420
- process.stderr.write(`[policy:show] unknown --field=${pythonStringRepr(args.field)}; ` +
421
- `registered fields: ${pythonListRepr(known)}\n`);
422
- return 2;
423
- }
424
- if (args.format === "json") {
425
- process.stdout.write(`${renderJson([field])}\n`);
426
- }
427
- else {
428
- process.stdout.write(`${renderText([field])}\n`);
429
- if (field.name === FIELD_VALUE_FEEDBACK || args.field === FIELD_VALUE_FEEDBACK_CLI_ALIAS) {
430
- process.stdout.write(`\n${valueFeedbackGateSummary(projectRoot)}\n`);
431
- }
432
- }
433
- return 0;
434
- }
435
- let fields = inspectAllPolicies(projectRoot);
436
- if (args.changedOnly) {
437
- fields = fields.filter((f) => f.source !== "default");
438
- }
439
- if (args.format === "json") {
440
- process.stdout.write(`${renderJson(fields)}\n`);
441
- }
442
- else {
443
- process.stdout.write(`${renderText(fields)}\n`);
444
- }
445
- return 0;
446
- }
447
- function runResolve(projectRoot) {
448
- const result = resolvePolicy(projectRoot);
449
- process.stdout.write(`allowDirectCommitsToMaster=${String(result.allowDirectCommits).toLowerCase()}\n`);
450
- process.stdout.write(`source=${result.source}\n`);
451
- if (result.deprecationWarning !== null) {
452
- process.stdout.write(`warning=${result.deprecationWarning}\n`);
453
- }
454
- if (result.error !== null) {
455
- process.stdout.write(`error=${result.error}\n`);
456
- }
457
- process.stdout.write(`${disclosureLine(result)}\n`);
458
- return 0;
459
- }
460
- function runEnableValueFeedback(args) {
461
- const result = enableValueFeedback(pathResolve(args.projectRoot), {
462
- confirm: args.confirm,
463
- actor: args.actor,
464
- note: args.note,
465
- subFlags: args.upstreamPrompt === true ? { upstreamPrompt: true } : undefined,
466
- });
467
- process.stdout.write(result.stdout);
468
- return result.exitCode;
469
- }
470
- function runDisableHostHooks(args) {
471
- const host = args.host;
472
- if (host === undefined) {
473
- process.stderr.write("policy: disable-host-hooks requires --host claude|cursor|grok|codex\n");
474
- return 2;
475
- }
476
- const result = disableHostHooks(pathResolve(args.projectRoot), {
477
- host,
478
- confirm: args.confirm,
479
- actor: args.actor,
480
- note: args.note,
481
- });
482
- process.stdout.write(result.stdout);
483
- return result.exitCode;
484
- }
485
- function runSet(args) {
486
- const projectRoot = pathResolve(args.projectRoot);
487
- if (args.cmd === "allow-direct-commits" && !args.confirm) {
488
- process.stdout.write(`${CAPABILITY_COST_DISCLOSURE}\n\n`);
489
- process.stdout.write(`Re-run with --confirm to apply: ${policyColonInvocation("allow-direct-commits", " -- --confirm")}\n`);
490
- return 1;
491
- }
492
- const target = args.cmd === "allow-direct-commits";
493
- try {
494
- const { changed, auditEntry } = setPolicy(projectRoot, {
495
- allowDirectCommits: target,
496
- actor: args.actor,
497
- note: args.note,
498
- });
499
- const state = target ? "OFF" : "ON";
500
- process.stdout.write(`\u2713 plan.policy.allowDirectCommitsToMaster=${target ? "true" : "false"} ` +
501
- `(branch-protection ${state}).\n`);
502
- if (changed) {
503
- process.stdout.write(` audit: meta/policy-changes.log :: ${auditEntry}\n`);
504
- }
505
- else {
506
- process.stdout.write(`${POLICY_AUDIT_NOOP_STDOUT}\n`);
507
- }
508
- process.stdout.write(`${disclosureLine(resolvePolicy(projectRoot))}\n`);
509
- return 0;
510
- }
511
- catch (err) {
512
- const message = err instanceof Error ? err.message : String(err);
513
- if (message.includes("PROJECT-DEFINITION not found")) {
514
- process.stderr.write(`\u274c ${message}\n`);
515
- const pdRel = relative(projectRoot, projectDefinitionPath(projectRoot));
516
- process.stderr.write(` Recovery: run \`task setup\` to generate ${pdRel}.\n`);
517
- return 2;
518
- }
519
- process.stderr.write(`\u274c Config error: ${message}\n`);
520
- return 2;
521
- }
522
- }
523
- function runClearValueFeedback(args) {
524
- const result = clearValueFeedback(pathResolve(args.projectRoot), {
525
- actor: args.actor,
526
- note: args.note,
527
- });
528
- process.stdout.write(result.stdout);
529
- return result.exitCode;
530
- }
531
- /** Create root `.no-deft-directive` opt-out flag (#2926). Does not delete deposits. */
532
- function runDisableDirective(args) {
533
- const projectRoot = pathResolve(args.projectRoot);
534
- const before = detectNoDeftDirective(projectRoot);
535
- if (before.present) {
536
- process.stdout.write(`${NO_DEFT_DIRECTIVE_DISABLED_MESSAGE} (already present)\n`);
537
- if (before.inconsistent) {
538
- process.stderr.write(`${NO_DEFT_DIRECTIVE_INCONSISTENT_MESSAGE}\n`);
539
- return 1;
540
- }
541
- return 0;
542
- }
543
- const path = createNoDeftDirectiveFlag(projectRoot, {
544
- rationale: args.note.trim().length > 0 ? args.note.trim() : undefined,
545
- });
546
- process.stdout.write(`Created ${NO_DEFT_DIRECTIVE_FLAG_NAME} at ${path}\n`);
547
- process.stdout.write(`${NO_DEFT_DIRECTIVE_DISABLED_MESSAGE}\n`);
548
- const after = detectNoDeftDirective(projectRoot);
549
- if (after.inconsistent) {
550
- process.stderr.write(`${NO_DEFT_DIRECTIVE_INCONSISTENT_MESSAGE}\n`);
551
- return 1;
552
- }
553
- return 0;
554
- }
555
- /** Remove root `.no-deft-directive` so Directive may be installed/used again (#2926). */
556
- function runEnableDirective(args) {
557
- const projectRoot = pathResolve(args.projectRoot);
558
- const removed = removeNoDeftDirectiveFlag(projectRoot);
559
- if (removed) {
560
- process.stdout.write(`Removed ${NO_DEFT_DIRECTIVE_FLAG_NAME}\n`);
561
- }
562
- else {
563
- process.stdout.write(`${NO_DEFT_DIRECTIVE_FLAG_NAME} was not present\n`);
564
- }
565
- process.stdout.write("Directive opt-out cleared. Run `directive init` or `directive update` to ensure install.\n");
566
- return 0;
567
- }
568
- /** Allow or re-enforce the #1019 destructive-gh-verb gate. */
569
- function runDestructiveGhVerbs(args) {
570
- const projectRoot = pathResolve(args.projectRoot);
571
- const allow = args.cmd === "allow-destructive-gh-verbs";
572
- if (allow && !args.confirm) {
573
- process.stdout.write(`${ALLOW_DESTRUCTIVE_GH_VERBS_CAPABILITY_COST}\n\n`);
574
- process.stdout.write(`Re-run with --confirm to apply: ${policyColonInvocation("allow-destructive-gh-verbs", " -- --confirm")}\n`);
575
- return 1;
576
- }
577
- try {
578
- const result = setAllowDestructiveGhVerbs(projectRoot, {
579
- allowDestructiveGhVerbs: allow,
580
- actor: args.actor,
581
- note: args.note,
582
- });
583
- if (!result.ok) {
584
- process.stderr.write(`\u274c ${result.message}\n`);
585
- if (result.message.includes("PROJECT-DEFINITION not found")) {
586
- const pdRel = relative(projectRoot, projectDefinitionPath(projectRoot));
587
- process.stderr.write(` Recovery: run \`task setup\` to generate ${pdRel}.\n`);
588
- }
589
- return 2;
590
- }
591
- process.stdout.write(`\u2713 plan.policy.allowDestructiveGhVerbs=${allow ? "true" : "false"} ` +
592
- `(#1019 gate ${allow ? "OFF" : "ON"}).\n`);
593
- if (result.changed) {
594
- process.stdout.write(` audit: meta/policy-changes.log :: ${result.auditEntry}\n`);
595
- }
596
- else {
597
- process.stdout.write(`${POLICY_AUDIT_NOOP_STDOUT}\n`);
598
- }
599
- return 0;
600
- }
601
- catch (err) {
602
- const message = err instanceof Error ? err.message : String(err);
603
- if (message.includes("PROJECT-DEFINITION not found")) {
604
- process.stderr.write(`\u274c ${message}\n`);
605
- const pdRel = relative(projectRoot, projectDefinitionPath(projectRoot));
606
- process.stderr.write(` Recovery: run \`task setup\` to generate ${pdRel}.\n`);
607
- return 2;
608
- }
609
- process.stderr.write(`\u274c Config error: ${message}\n`);
610
- return 2;
611
- }
612
- }
613
- /** Allow agent/bot merge by writing requireHumanMerge=false (#1193). */
614
- function runAllowBotMerge(args) {
615
- const projectRoot = pathResolve(args.projectRoot);
616
- if (!args.confirm) {
617
- process.stdout.write(`${ALLOW_BOT_MERGE_CAPABILITY_COST}\n\n`);
618
- process.stdout.write(`Re-run with --confirm to apply: ${policyColonInvocation("allow-bot-merge", " -- --confirm")}\n`);
619
- return 1;
620
- }
621
- try {
622
- const { changed, auditEntry } = setRequireHumanMerge(projectRoot, {
623
- requireHumanMerge: false,
624
- actor: args.actor,
625
- note: args.note,
626
- });
627
- process.stdout.write(`\u2713 plan.policy.requireHumanMerge=false (human merge gate OFF; agent may merge).\n`);
628
- if (changed) {
629
- process.stdout.write(` audit: meta/policy-changes.log :: ${auditEntry}\n`);
630
- }
631
- else {
632
- process.stdout.write(`${POLICY_AUDIT_NOOP_STDOUT}\n`);
633
- }
634
- const line = humanMergeDisclosureLine(resolveHumanMergePolicy(projectRoot));
635
- if (line !== null) {
636
- process.stdout.write(`${line}\n`);
637
- }
638
- else {
639
- process.stdout.write("[deft policy] Human merge gate is OFF; agent may merge when other gates allow.\n");
640
- }
641
- return 0;
642
- }
643
- catch (err) {
644
- const message = err instanceof Error ? err.message : String(err);
645
- if (message.includes("PROJECT-DEFINITION not found")) {
646
- process.stderr.write(`\u274c ${message}\n`);
647
- const pdRel = relative(projectRoot, projectDefinitionPath(projectRoot));
648
- process.stderr.write(` Recovery: run \`task setup\` to generate ${pdRel}.\n`);
649
- return 2;
650
- }
651
- process.stderr.write(`\u274c Config error: ${message}\n`);
652
- return 2;
653
- }
654
- }
655
- /** Run the policy CLI; returns process exit code. */
656
- export function run(argv) {
657
- const args = parseArgs(argv);
658
- if (args.error !== undefined) {
659
- process.stderr.write(`policy: ${args.error}\n`);
660
- return 2;
661
- }
662
- if (args.cmd === "show") {
663
- return runShow({
664
- format: args.format,
665
- changedOnly: args.changedOnly,
666
- field: args.field,
667
- projectRoot: args.projectRoot,
668
- });
669
- }
670
- if (args.cmd === "resolve") {
671
- return runResolve(pathResolve(args.projectRoot));
672
- }
673
- if (args.cmd === "enforce-branches" || args.cmd === "allow-direct-commits") {
674
- return runSet(args);
675
- }
676
- if (args.cmd === "allow-destructive-gh-verbs" || args.cmd === "enforce-destructive-gh-verbs") {
677
- return runDestructiveGhVerbs(args);
678
- }
679
- if (args.cmd === "allow-bot-merge") {
680
- return runAllowBotMerge(args);
681
- }
682
- if (args.cmd === "enable-value-feedback") {
683
- return runEnableValueFeedback(args);
684
- }
685
- if (args.cmd === "disable-host-hooks") {
686
- return runDisableHostHooks(args);
687
- }
688
- if (args.cmd === "clear-value-feedback") {
689
- return runClearValueFeedback(args);
690
- }
691
- if (args.cmd === "set-ceremony-dial") {
692
- return runSetCeremonyDial(args);
693
- }
694
- if (args.cmd === "set-spec-guard-enforcement") {
695
- return runSetSpecGuardEnforcement(args);
696
- }
697
- if (args.cmd === "disable-directive") {
698
- return runDisableDirective(args);
699
- }
700
- if (args.cmd === "enable-directive") {
701
- return runEnableDirective(args);
702
- }
703
- return 2;
704
- }
705
- /** Persist plan.policy.specGuard.driftGuard.enforcement (#5350). */
706
- function runSetSpecGuardEnforcement(args) {
707
- const root = pathResolve(args.projectRoot);
708
- if (args.specGuardEnforcement === undefined) {
709
- process.stdout.write("usage: policy set-spec-guard-enforcement -- --set advise|shadow|enforce [--confirm] [--project-root PATH]\n" +
710
- " Promote ladder: advise → shadow → enforce (advise→enforce skip refused without shadow attestation).\n" +
711
- ` Inspect: ${policyColonInvocation("show", " --field=specGuard")}\n`);
712
- return 1;
713
- }
714
- const result = promoteSpecGuardDriftEnforcement(root, {
715
- to: args.specGuardEnforcement,
716
- confirm: args.confirm,
717
- actor: args.actor,
718
- note: args.note,
719
- });
720
- process.stdout.write(result.stdout);
721
- return result.exitCode;
722
- }
723
- /** Persist plan.policy.ceremonyDial override/enabled (#3214). */
724
- function runSetCeremonyDial(args) {
725
- const root = pathResolve(args.projectRoot);
726
- if (args.ceremonyOverride === undefined && args.ceremonyEnabled === undefined) {
727
- process.stdout.write("usage: policy set-ceremony-dial -- --confirm [--override minimal|rapid|standard|elevated|null] [--enabled true|false] [--project-root PATH]\n" +
728
- ` Inspect: ${policyColonInvocation("show", " --field=ceremonyDial")}\n`);
729
- return 1;
730
- }
731
- const result = setCeremonyDial(root, {
732
- confirm: args.confirm,
733
- actor: args.actor,
734
- note: args.note,
735
- ...(args.ceremonyOverride !== undefined ? { override: args.ceremonyOverride } : {}),
736
- ...(args.ceremonyEnabled !== undefined ? { enabled: args.ceremonyEnabled } : {}),
737
- });
738
- process.stdout.write(result.stdout);
739
- return result.exitCode;
740
- }
741
- if (process.argv[1] !== undefined && fileURLToPath(import.meta.url) === process.argv[1]) {
742
- process.exit(run(process.argv.slice(2)));
743
- }
744
- //# sourceMappingURL=policy.js.map