@deftai/directive 0.126.0-beta.2 → 0.126.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (420) hide show
  1. package/dist/agents-refresh.d.ts +11 -0
  2. package/dist/agents-refresh.js +90 -0
  3. package/dist/authz.d.ts +7 -0
  4. package/dist/authz.js +732 -0
  5. package/dist/bin.d.ts +3 -0
  6. package/dist/bin.js +3 -4333
  7. package/dist/branch-fixtures.d.ts +45 -0
  8. package/dist/branch-fixtures.js +156 -0
  9. package/dist/cache.d.ts +4 -0
  10. package/dist/cache.js +10 -0
  11. package/dist/capacity-backfill.d.ts +3 -0
  12. package/dist/capacity-backfill.js +9 -0
  13. package/dist/capacity-show.d.ts +3 -0
  14. package/dist/capacity-show.js +9 -0
  15. package/dist/change-init.d.ts +3 -0
  16. package/dist/change-init.js +59 -0
  17. package/dist/changelog-check.d.ts +3 -0
  18. package/dist/changelog-check.js +52 -0
  19. package/dist/check.d.ts +15 -0
  20. package/dist/check.js +150 -0
  21. package/dist/cli-package-version.d.ts +3 -0
  22. package/dist/cli-package-version.js +23 -0
  23. package/dist/cli-router/index.d.ts +8 -0
  24. package/dist/cli-router/index.js +44 -0
  25. package/dist/cli-router/route-argv.d.ts +40 -0
  26. package/dist/cli-router/route-argv.js +371 -0
  27. package/dist/codebase-default-extractor.d.ts +3 -0
  28. package/dist/codebase-default-extractor.js +9 -0
  29. package/dist/codebase-map-fresh.d.ts +3 -0
  30. package/dist/codebase-map-fresh.js +9 -0
  31. package/dist/codebase-map.d.ts +3 -0
  32. package/dist/codebase-map.js +9 -0
  33. package/dist/codebase-projection-registry.d.ts +3 -0
  34. package/dist/codebase-projection-registry.js +9 -0
  35. package/dist/codebase-provider.d.ts +3 -0
  36. package/dist/codebase-provider.js +9 -0
  37. package/dist/commit-lint.d.ts +3 -0
  38. package/dist/commit-lint.js +44 -0
  39. package/dist/content-validate-cli/validate-links.d.ts +11 -0
  40. package/dist/content-validate-cli/validate-links.js +37 -0
  41. package/dist/content-validate-cli/validate-strategy-output.d.ts +13 -0
  42. package/dist/content-validate-cli/validate-strategy-output.js +56 -0
  43. package/dist/content-validate-cli/verify-capacity.d.ts +12 -0
  44. package/dist/content-validate-cli/verify-capacity.js +54 -0
  45. package/dist/coverage-hotspots.d.ts +21 -0
  46. package/dist/coverage-hotspots.js +198 -0
  47. package/dist/design-critique-spend-resolve.d.ts +18 -0
  48. package/dist/design-critique-spend-resolve.js +191 -0
  49. package/dist/directive-finish-loop.d.ts +3 -0
  50. package/dist/directive-finish-loop.js +10 -0
  51. package/dist/dispatch.d.ts +193 -0
  52. package/dist/dispatch.js +3091 -0
  53. package/dist/doctor.d.ts +19 -0
  54. package/dist/doctor.js +155 -0
  55. package/dist/entrypoint.d.ts +6 -0
  56. package/dist/entrypoint.js +19 -0
  57. package/dist/escalation-cli.d.ts +4 -0
  58. package/dist/escalation-cli.js +301 -0
  59. package/dist/eval-health.d.ts +13 -0
  60. package/dist/eval-health.js +63 -0
  61. package/dist/eval-report.d.ts +15 -0
  62. package/dist/eval-report.js +97 -0
  63. package/dist/eval-run.d.ts +17 -0
  64. package/dist/eval-run.js +122 -0
  65. package/dist/eval-triggers.d.ts +12 -0
  66. package/dist/eval-triggers.js +56 -0
  67. package/dist/framework-check-updates.d.ts +10 -0
  68. package/dist/framework-check-updates.js +68 -0
  69. package/dist/gates-cli/_helpers.d.ts +24 -0
  70. package/dist/gates-cli/_helpers.js +115 -0
  71. package/dist/gates-cli/verify-bridge-drift.d.ts +11 -0
  72. package/dist/gates-cli/verify-bridge-drift.js +47 -0
  73. package/dist/gates-cli/verify-go-freeze.d.ts +11 -0
  74. package/dist/gates-cli/verify-go-freeze.js +48 -0
  75. package/dist/hook-bin.d.ts +3 -0
  76. package/dist/hook-bin.js +11 -0
  77. package/dist/hook-dispatch.d.ts +80 -0
  78. package/dist/hook-dispatch.js +186 -0
  79. package/dist/human-presence-mint.d.ts +70 -0
  80. package/dist/human-presence-mint.js +204 -0
  81. package/dist/identity-banner.d.ts +13 -0
  82. package/dist/identity-banner.js +19 -0
  83. package/dist/index.d.ts +11 -0
  84. package/dist/index.js +14 -0
  85. package/dist/init-cli/constants.d.ts +42 -0
  86. package/dist/init-cli/constants.js +42 -0
  87. package/dist/init-cli/help.d.ts +9 -0
  88. package/dist/init-cli/help.js +43 -0
  89. package/dist/init-cli/init.d.ts +26 -0
  90. package/dist/init-cli/init.js +80 -0
  91. package/dist/init-cli/migrate.d.ts +3 -0
  92. package/dist/init-cli/migrate.js +51 -0
  93. package/dist/init-cli/resolve-binary.d.ts +34 -0
  94. package/dist/init-cli/resolve-binary.js +78 -0
  95. package/dist/init-cli/run-deft-install.d.ts +23 -0
  96. package/dist/init-cli/run-deft-install.js +71 -0
  97. package/dist/init-cli/update.d.ts +5 -0
  98. package/dist/init-cli/update.js +38 -0
  99. package/dist/install-cli/coverage-map.d.ts +14 -0
  100. package/dist/install-cli/coverage-map.js +113 -0
  101. package/dist/install-uninstall.d.ts +3 -0
  102. package/dist/install-uninstall.js +44 -0
  103. package/dist/install-upgrade.d.ts +41 -0
  104. package/dist/install-upgrade.js +86 -0
  105. package/dist/lifecycle-cli/coverage-map.d.ts +16 -0
  106. package/dist/lifecycle-cli/coverage-map.js +254 -0
  107. package/dist/lifecycle-cli/helpers.d.ts +8 -0
  108. package/dist/lifecycle-cli/helpers.js +20 -0
  109. package/dist/lifecycle-event.d.ts +11 -0
  110. package/dist/lifecycle-event.js +45 -0
  111. package/dist/lifecycle-stats.d.ts +12 -0
  112. package/dist/lifecycle-stats.js +100 -0
  113. package/dist/migrate-category-b.d.ts +9 -0
  114. package/dist/migrate-category-b.js +52 -0
  115. package/dist/migrate-preflight.d.ts +10 -0
  116. package/dist/migrate-preflight.js +85 -0
  117. package/dist/migrate-xbrief.d.ts +11 -0
  118. package/dist/migrate-xbrief.js +88 -0
  119. package/dist/occupancy-grant.d.ts +18 -0
  120. package/dist/occupancy-grant.js +121 -0
  121. package/dist/occupancy-heartbeat.d.ts +8 -0
  122. package/dist/occupancy-heartbeat.js +63 -0
  123. package/dist/occupancy-release.d.ts +23 -0
  124. package/dist/occupancy-release.js +102 -0
  125. package/dist/occupancy-steal.d.ts +10 -0
  126. package/dist/occupancy-steal.js +83 -0
  127. package/dist/occupancy-unrecognized.d.ts +3 -0
  128. package/dist/occupancy-unrecognized.js +5 -0
  129. package/dist/orchestration-cli/coverage-map.d.ts +21 -0
  130. package/dist/orchestration-cli/coverage-map.js +225 -0
  131. package/dist/orchestration-cli/helpers.d.ts +11 -0
  132. package/dist/orchestration-cli/helpers.js +35 -0
  133. package/dist/ownership-doctor.d.ts +10 -0
  134. package/dist/ownership-doctor.js +96 -0
  135. package/dist/ownership-fix.d.ts +10 -0
  136. package/dist/ownership-fix.js +93 -0
  137. package/dist/plan-sequence.d.ts +14 -0
  138. package/dist/plan-sequence.js +258 -0
  139. package/dist/policy-fixtures.d.ts +33 -0
  140. package/dist/policy-fixtures.js +118 -0
  141. package/dist/policy.d.ts +37 -0
  142. package/dist/policy.js +744 -0
  143. package/dist/pr-closing-keywords.d.ts +3 -0
  144. package/dist/pr-closing-keywords.js +10 -0
  145. package/dist/pr-finish-loop.d.ts +3 -0
  146. package/dist/pr-finish-loop.js +10 -0
  147. package/dist/pr-merge-readiness.d.ts +3 -0
  148. package/dist/pr-merge-readiness.js +10 -0
  149. package/dist/pr-monitor.d.ts +3 -0
  150. package/dist/pr-monitor.js +10 -0
  151. package/dist/pr-protected-issues.d.ts +3 -0
  152. package/dist/pr-protected-issues.js +10 -0
  153. package/dist/pr-wait-mergeable.d.ts +3 -0
  154. package/dist/pr-wait-mergeable.js +10 -0
  155. package/dist/pr-watch.d.ts +3 -0
  156. package/dist/pr-watch.js +10 -0
  157. package/dist/pre-pr-run.d.ts +39 -0
  158. package/dist/pre-pr-run.js +514 -0
  159. package/dist/preflight-cache.d.ts +18 -0
  160. package/dist/preflight-cache.js +113 -0
  161. package/dist/preflight-gh.d.ts +15 -0
  162. package/dist/preflight-gh.js +143 -0
  163. package/dist/probe-session.d.ts +3 -0
  164. package/dist/probe-session.js +10 -0
  165. package/dist/release-e2e-fixtures.d.ts +29 -0
  166. package/dist/release-e2e-fixtures.js +38 -0
  167. package/dist/release-e2e.d.ts +3 -0
  168. package/dist/release-e2e.js +10 -0
  169. package/dist/release-publish.d.ts +3 -0
  170. package/dist/release-publish.js +10 -0
  171. package/dist/release-rollback.d.ts +3 -0
  172. package/dist/release-rollback.js +10 -0
  173. package/dist/release-wait-npm.d.ts +3 -0
  174. package/dist/release-wait-npm.js +10 -0
  175. package/dist/release.d.ts +3 -0
  176. package/dist/release.js +10 -0
  177. package/dist/render-cli/deft-ts-runner.d.ts +17 -0
  178. package/dist/render-cli/deft-ts-runner.js +19 -0
  179. package/dist/render-cli/export-spec-cli.d.ts +2 -0
  180. package/dist/render-cli/export-spec-cli.js +6 -0
  181. package/dist/render-cli/prd-render-cli.d.ts +2 -0
  182. package/dist/render-cli/prd-render-cli.js +37 -0
  183. package/dist/render-cli/project-render-cli.d.ts +2 -0
  184. package/dist/render-cli/project-render-cli.js +6 -0
  185. package/dist/render-cli/rule-map-cli.d.ts +2 -0
  186. package/dist/render-cli/rule-map-cli.js +5 -0
  187. package/dist/render-cli/spec-reconstruct-cli.d.ts +3 -0
  188. package/dist/render-cli/spec-reconstruct-cli.js +15 -0
  189. package/dist/render-cli/spec-render-cli.d.ts +2 -0
  190. package/dist/render-cli/spec-render-cli.js +39 -0
  191. package/dist/render-cli/spec-validate-cli.d.ts +2 -0
  192. package/dist/render-cli/spec-validate-cli.js +38 -0
  193. package/dist/review-monitor-register.d.ts +19 -0
  194. package/dist/review-monitor-register.js +183 -0
  195. package/dist/review-monitor-release.d.ts +14 -0
  196. package/dist/review-monitor-release.js +123 -0
  197. package/dist/scm-sync-default.d.ts +34 -0
  198. package/dist/scm-sync-default.js +210 -0
  199. package/dist/scope-lifecycle.d.ts +4 -0
  200. package/dist/scope-lifecycle.js +34 -0
  201. package/dist/scope-record-approved-scope.d.ts +29 -0
  202. package/dist/scope-record-approved-scope.js +319 -0
  203. package/dist/scope-record-intent-constraint.d.ts +16 -0
  204. package/dist/scope-record-intent-constraint.js +202 -0
  205. package/dist/scope-record-observable-scope.d.ts +16 -0
  206. package/dist/scope-record-observable-scope.js +204 -0
  207. package/dist/session-ready.d.ts +15 -0
  208. package/dist/session-ready.js +144 -0
  209. package/dist/session-start.d.ts +56 -0
  210. package/dist/session-start.js +581 -0
  211. package/dist/slice.d.ts +4 -0
  212. package/dist/slice.js +34 -0
  213. package/dist/story-ready-fixtures.d.ts +47 -0
  214. package/dist/story-ready-fixtures.js +137 -0
  215. package/dist/subagent-monitor.d.ts +3 -0
  216. package/dist/subagent-monitor.js +10 -0
  217. package/dist/subagent-pre-cancel.d.ts +21 -0
  218. package/dist/subagent-pre-cancel.js +240 -0
  219. package/dist/subagent-steer-write.d.ts +41 -0
  220. package/dist/subagent-steer-write.js +333 -0
  221. package/dist/toolchain-check.d.ts +8 -0
  222. package/dist/toolchain-check.js +54 -0
  223. package/dist/triage-actions.d.ts +23 -0
  224. package/dist/triage-actions.js +233 -0
  225. package/dist/triage-aux-a-fixtures.d.ts +33 -0
  226. package/dist/triage-aux-a-fixtures.js +107 -0
  227. package/dist/triage-aux-b-fixtures.d.ts +30 -0
  228. package/dist/triage-aux-b-fixtures.js +167 -0
  229. package/dist/triage-bootstrap-fixtures.d.ts +42 -0
  230. package/dist/triage-bootstrap-fixtures.js +139 -0
  231. package/dist/triage-bootstrap.d.ts +24 -0
  232. package/dist/triage-bootstrap.js +175 -0
  233. package/dist/triage-bulk.d.ts +17 -0
  234. package/dist/triage-bulk.js +154 -0
  235. package/dist/triage-classify-fixtures.d.ts +38 -0
  236. package/dist/triage-classify-fixtures.js +137 -0
  237. package/dist/triage-classify.d.ts +45 -0
  238. package/dist/triage-classify.js +287 -0
  239. package/dist/triage-evaluate.d.ts +14 -0
  240. package/dist/triage-evaluate.js +153 -0
  241. package/dist/triage-help.d.ts +3 -0
  242. package/dist/triage-help.js +10 -0
  243. package/dist/triage-queue-fixtures.d.ts +59 -0
  244. package/dist/triage-queue-fixtures.js +284 -0
  245. package/dist/triage-queue.d.ts +38 -0
  246. package/dist/triage-queue.js +391 -0
  247. package/dist/triage-reconcile.d.ts +11 -0
  248. package/dist/triage-reconcile.js +76 -0
  249. package/dist/triage-refresh.d.ts +7 -0
  250. package/dist/triage-refresh.js +37 -0
  251. package/dist/triage-scope-drift.d.ts +12 -0
  252. package/dist/triage-scope-drift.js +117 -0
  253. package/dist/triage-scope-fixtures.d.ts +32 -0
  254. package/dist/triage-scope-fixtures.js +131 -0
  255. package/dist/triage-scope.d.ts +4 -0
  256. package/dist/triage-scope.js +34 -0
  257. package/dist/triage-smoketest.d.ts +3 -0
  258. package/dist/triage-smoketest.js +43 -0
  259. package/dist/triage-strip-withdrawn.d.ts +21 -0
  260. package/dist/triage-strip-withdrawn.js +102 -0
  261. package/dist/triage-subscribe.d.ts +15 -0
  262. package/dist/triage-subscribe.js +157 -0
  263. package/dist/triage-summary.d.ts +14 -0
  264. package/dist/triage-summary.js +83 -0
  265. package/dist/triage-welcome.d.ts +14 -0
  266. package/dist/triage-welcome.js +121 -0
  267. package/dist/ts-check-lane.d.ts +9 -0
  268. package/dist/ts-check-lane.js +49 -0
  269. package/dist/umbrella-current-shape.d.ts +9 -0
  270. package/dist/umbrella-current-shape.js +56 -0
  271. package/dist/vbrief-activate.d.ts +3 -0
  272. package/dist/vbrief-activate.js +7 -0
  273. package/dist/vbrief-build.d.ts +3 -0
  274. package/dist/vbrief-build.js +8 -0
  275. package/dist/vbrief-preflight-fixtures.d.ts +32 -0
  276. package/dist/vbrief-preflight-fixtures.js +79 -0
  277. package/dist/vbrief-preflight.d.ts +13 -0
  278. package/dist/vbrief-preflight.js +141 -0
  279. package/dist/vbrief-reconcile.d.ts +3 -0
  280. package/dist/vbrief-reconcile.js +7 -0
  281. package/dist/vbrief-validate.d.ts +3 -0
  282. package/dist/vbrief-validate.js +8 -0
  283. package/dist/vbrief-validation.d.ts +3 -0
  284. package/dist/vbrief-validation.js +8 -0
  285. package/dist/verify-ac.d.ts +28 -0
  286. package/dist/verify-ac.js +439 -0
  287. package/dist/verify-agents-md-advisory.d.ts +19 -0
  288. package/dist/verify-agents-md-advisory.js +65 -0
  289. package/dist/verify-agents-md-budget.d.ts +12 -0
  290. package/dist/verify-agents-md-budget.js +71 -0
  291. package/dist/verify-branch.d.ts +14 -0
  292. package/dist/verify-branch.js +81 -0
  293. package/dist/verify-class-checks.d.ts +11 -0
  294. package/dist/verify-class-checks.js +71 -0
  295. package/dist/verify-cohort-review-monitors.d.ts +5 -0
  296. package/dist/verify-cohort-review-monitors.js +11 -0
  297. package/dist/verify-completed-tracked.d.ts +19 -0
  298. package/dist/verify-completed-tracked.js +202 -0
  299. package/dist/verify-completed-write-guard.d.ts +13 -0
  300. package/dist/verify-completed-write-guard.js +84 -0
  301. package/dist/verify-consumer-check-contract.d.ts +12 -0
  302. package/dist/verify-consumer-check-contract.js +70 -0
  303. package/dist/verify-consumer-header-placeholder.d.ts +12 -0
  304. package/dist/verify-consumer-header-placeholder.js +73 -0
  305. package/dist/verify-consumer-test-lane.d.ts +12 -0
  306. package/dist/verify-consumer-test-lane.js +57 -0
  307. package/dist/verify-durable-effect-acquisition.d.ts +13 -0
  308. package/dist/verify-durable-effect-acquisition.js +70 -0
  309. package/dist/verify-encoding.d.ts +15 -0
  310. package/dist/verify-encoding.js +83 -0
  311. package/dist/verify-eval-health-relocation.d.ts +16 -0
  312. package/dist/verify-eval-health-relocation.js +93 -0
  313. package/dist/verify-eval-triggers-relocation.d.ts +14 -0
  314. package/dist/verify-eval-triggers-relocation.js +74 -0
  315. package/dist/verify-evaluator-surface.d.ts +15 -0
  316. package/dist/verify-evaluator-surface.js +87 -0
  317. package/dist/verify-forward-coverage.d.ts +19 -0
  318. package/dist/verify-forward-coverage.js +144 -0
  319. package/dist/verify-hooks-installed.d.ts +24 -0
  320. package/dist/verify-hooks-installed.js +140 -0
  321. package/dist/verify-intent-constraint.d.ts +15 -0
  322. package/dist/verify-intent-constraint.js +86 -0
  323. package/dist/verify-investigation.d.ts +3 -0
  324. package/dist/verify-investigation.js +10 -0
  325. package/dist/verify-judgment-gates.d.ts +3 -0
  326. package/dist/verify-judgment-gates.js +10 -0
  327. package/dist/verify-l4-owner.d.ts +15 -0
  328. package/dist/verify-l4-owner.js +132 -0
  329. package/dist/verify-lifecycle-visible.d.ts +13 -0
  330. package/dist/verify-lifecycle-visible.js +68 -0
  331. package/dist/verify-literal-ac.d.ts +14 -0
  332. package/dist/verify-literal-ac.js +168 -0
  333. package/dist/verify-no-task-runtime.d.ts +3 -0
  334. package/dist/verify-no-task-runtime.js +16 -0
  335. package/dist/verify-observable-scope.d.ts +15 -0
  336. package/dist/verify-observable-scope.js +86 -0
  337. package/dist/verify-operator-scope-limit.d.ts +17 -0
  338. package/dist/verify-operator-scope-limit.js +285 -0
  339. package/dist/verify-orphan-active.d.ts +17 -0
  340. package/dist/verify-orphan-active.js +135 -0
  341. package/dist/verify-ownership.d.ts +10 -0
  342. package/dist/verify-ownership.js +90 -0
  343. package/dist/verify-persisted-planning-narratives.d.ts +12 -0
  344. package/dist/verify-persisted-planning-narratives.js +82 -0
  345. package/dist/verify-plan-sequence.d.ts +14 -0
  346. package/dist/verify-plan-sequence.js +138 -0
  347. package/dist/verify-pr-closeout-attestable.d.ts +15 -0
  348. package/dist/verify-pr-closeout-attestable.js +114 -0
  349. package/dist/verify-presentation-ceiling.d.ts +11 -0
  350. package/dist/verify-presentation-ceiling.js +71 -0
  351. package/dist/verify-presentation-coverage.d.ts +14 -0
  352. package/dist/verify-presentation-coverage.js +90 -0
  353. package/dist/verify-review-monitor.d.ts +32 -0
  354. package/dist/verify-review-monitor.js +362 -0
  355. package/dist/verify-scope-provenance.d.ts +16 -0
  356. package/dist/verify-scope-provenance.js +91 -0
  357. package/dist/verify-session-ritual.d.ts +23 -0
  358. package/dist/verify-session-ritual.js +144 -0
  359. package/dist/verify-source-cli/rule-ownership-lint.d.ts +12 -0
  360. package/dist/verify-source-cli/rule-ownership-lint.js +61 -0
  361. package/dist/verify-source-cli/verify-biome-config.d.ts +11 -0
  362. package/dist/verify-source-cli/verify-biome-config.js +46 -0
  363. package/dist/verify-source-cli/verify-closing-keywords.d.ts +35 -0
  364. package/dist/verify-source-cli/verify-closing-keywords.js +139 -0
  365. package/dist/verify-source-cli/verify-consumer-hard-stops.d.ts +16 -0
  366. package/dist/verify-source-cli/verify-consumer-hard-stops.js +99 -0
  367. package/dist/verify-source-cli/verify-contained-writes.d.ts +13 -0
  368. package/dist/verify-source-cli/verify-contained-writes.js +67 -0
  369. package/dist/verify-source-cli/verify-content-manifest.d.ts +12 -0
  370. package/dist/verify-source-cli/verify-content-manifest.js +61 -0
  371. package/dist/verify-source-cli/verify-contract-drift.d.ts +11 -0
  372. package/dist/verify-source-cli/verify-contract-drift.js +47 -0
  373. package/dist/verify-source-cli/verify-cursor-tier1.d.ts +12 -0
  374. package/dist/verify-source-cli/verify-cursor-tier1.js +51 -0
  375. package/dist/verify-source-cli/verify-deposit-closure.d.ts +12 -0
  376. package/dist/verify-source-cli/verify-deposit-closure.js +52 -0
  377. package/dist/verify-source-cli/verify-openclaw-tier1.d.ts +12 -0
  378. package/dist/verify-source-cli/verify-openclaw-tier1.js +51 -0
  379. package/dist/verify-source-cli/verify-scm-boundary.d.ts +13 -0
  380. package/dist/verify-source-cli/verify-scm-boundary.js +66 -0
  381. package/dist/verify-source-cli/verify-semantic-single-source.d.ts +11 -0
  382. package/dist/verify-source-cli/verify-semantic-single-source.js +49 -0
  383. package/dist/verify-source-cli/verify-skill-external-fetch-gate.d.ts +11 -0
  384. package/dist/verify-source-cli/verify-skill-external-fetch-gate.js +46 -0
  385. package/dist/verify-source-cli/verify-spec-drift.d.ts +3 -0
  386. package/dist/verify-source-cli/verify-spec-drift.js +15 -0
  387. package/dist/verify-source-cli/verify-spec-prd-fresh.d.ts +3 -0
  388. package/dist/verify-source-cli/verify-spec-prd-fresh.js +15 -0
  389. package/dist/verify-source-cli/verify-stubs.d.ts +11 -0
  390. package/dist/verify-source-cli/verify-stubs.js +27 -0
  391. package/dist/verify-source-cli/verify-telemetry-coverage.d.ts +13 -0
  392. package/dist/verify-source-cli/verify-telemetry-coverage.js +67 -0
  393. package/dist/verify-source-cli/verify-xbrief-drift.d.ts +15 -0
  394. package/dist/verify-source-cli/verify-xbrief-drift.js +80 -0
  395. package/dist/verify-story-ready.d.ts +18 -0
  396. package/dist/verify-story-ready.js +190 -0
  397. package/dist/verify-subagent-alive.d.ts +21 -0
  398. package/dist/verify-subagent-alive.js +219 -0
  399. package/dist/verify-subagent-steer.d.ts +19 -0
  400. package/dist/verify-subagent-steer.js +136 -0
  401. package/dist/verify-test-boundary.d.ts +12 -0
  402. package/dist/verify-test-boundary.js +80 -0
  403. package/dist/verify-tools.d.ts +13 -0
  404. package/dist/verify-tools.js +67 -0
  405. package/dist/verify-wip-cap.d.ts +13 -0
  406. package/dist/verify-wip-cap.js +62 -0
  407. package/dist/windows-bin-ps1.d.ts +39 -0
  408. package/dist/windows-bin-ps1.js +226 -0
  409. package/dist/wip-cap-fixtures.d.ts +37 -0
  410. package/dist/wip-cap-fixtures.js +122 -0
  411. package/dist/wsl-ownership-guard.d.ts +2 -0
  412. package/dist/wsl-ownership-guard.js +15 -0
  413. package/dist/xbrief-create.d.ts +3 -0
  414. package/dist/xbrief-create.js +9 -0
  415. package/dist/xbrief-verify.d.ts +3 -0
  416. package/dist/xbrief-verify.js +9 -0
  417. package/package.json +23 -12
  418. package/scripts/remove-windows-ps1-shims.mjs +26 -0
  419. package/bin/deft-hook +0 -14
  420. package/bin/deft-hook.cmd +0 -14
@@ -0,0 +1,23 @@
1
+ #!/usr/bin/env node
2
+ import { type DirectivePosture, type VerifyResult } from "@deftai/directive-core/session";
3
+ export interface VerifySessionRitualRunDeps {
4
+ readonly verifySessionRitual?: (projectRoot: string, options: {
5
+ tier: "quick" | "gated";
6
+ posture?: DirectivePosture;
7
+ }) => VerifyResult;
8
+ }
9
+ interface ParsedArgs {
10
+ projectRoot: string;
11
+ tier: "quick" | "gated";
12
+ posture: DirectivePosture | null;
13
+ emitJson: boolean;
14
+ error?: string;
15
+ }
16
+ /** Parse verify-session-ritual CLI args, mirroring scripts/verify_session_ritual.py. */
17
+ export declare function parseArgs(argv: string[]): ParsedArgs;
18
+ /** True when the ritual failure is the gated cache_fresh step (#3506 / #3507). */
19
+ export declare function isCacheFreshFailureMessage(message: string): boolean;
20
+ /** Run the gate and return the process exit code. */
21
+ export declare function run(argv: string[], deps?: VerifySessionRitualRunDeps): number;
22
+ export {};
23
+ //# sourceMappingURL=verify-session-ritual.d.ts.map
@@ -0,0 +1,144 @@
1
+ #!/usr/bin/env node
2
+ import { resolve } from "node:path";
3
+ import { fileURLToPath } from "node:url";
4
+ import { emitBypassWarning, emitVerifyJson, formatCacheFreshDeferSoftPath, occupancyAwareDenialMessage, verifySessionRitual, } from "@deftai/directive-core/session";
5
+ function parsePosture(value) {
6
+ if (value === "read-only")
7
+ return "read-only";
8
+ if (value === "mutation" || value === "mutating")
9
+ return "mutation";
10
+ return null;
11
+ }
12
+ /** Parse verify-session-ritual CLI args, mirroring scripts/verify_session_ritual.py. */
13
+ export function parseArgs(argv) {
14
+ const parsed = {
15
+ projectRoot: ".",
16
+ tier: "quick",
17
+ posture: null,
18
+ emitJson: false,
19
+ };
20
+ for (let i = 0; i < argv.length; i += 1) {
21
+ const arg = argv[i];
22
+ if (arg === "--") {
23
+ continue;
24
+ }
25
+ if (arg === "--json") {
26
+ parsed.emitJson = true;
27
+ }
28
+ else if (arg === "--project-root") {
29
+ const value = argv[i + 1];
30
+ if (value === undefined) {
31
+ return { ...parsed, error: "argument --project-root: expected one argument" };
32
+ }
33
+ parsed.projectRoot = value;
34
+ i += 1;
35
+ }
36
+ else if (arg?.startsWith("--project-root=")) {
37
+ parsed.projectRoot = arg.slice("--project-root=".length);
38
+ }
39
+ else if (arg === "--tier") {
40
+ const value = argv[i + 1];
41
+ if (value === undefined) {
42
+ return { ...parsed, error: "argument --tier: expected one argument" };
43
+ }
44
+ if (value !== "quick" && value !== "gated") {
45
+ return { ...parsed, error: `argument --tier: invalid choice: '${value}'` };
46
+ }
47
+ parsed.tier = value;
48
+ i += 1;
49
+ }
50
+ else if (arg?.startsWith("--tier=")) {
51
+ const value = arg.slice("--tier=".length);
52
+ if (value !== "quick" && value !== "gated") {
53
+ return { ...parsed, error: `argument --tier: invalid choice: '${value}'` };
54
+ }
55
+ parsed.tier = value;
56
+ }
57
+ else if (arg === "--posture") {
58
+ const value = argv[i + 1];
59
+ if (value === undefined) {
60
+ return { ...parsed, error: "argument --posture: expected one argument" };
61
+ }
62
+ const posture = parsePosture(value);
63
+ if (posture === null) {
64
+ return {
65
+ ...parsed,
66
+ error: `argument --posture: invalid choice: '${value}' (expected read-only|mutation)`,
67
+ };
68
+ }
69
+ parsed.posture = posture;
70
+ i += 1;
71
+ }
72
+ else if (arg?.startsWith("--posture=")) {
73
+ const value = arg.slice("--posture=".length);
74
+ const posture = parsePosture(value);
75
+ if (posture === null) {
76
+ return {
77
+ ...parsed,
78
+ error: `argument --posture: invalid choice: '${value}' (expected read-only|mutation)`,
79
+ };
80
+ }
81
+ parsed.posture = posture;
82
+ }
83
+ else {
84
+ const error = `unrecognized argument: ${arg}`;
85
+ if (arg === "--session-id" || arg?.startsWith("--session-id=")) {
86
+ return {
87
+ ...parsed,
88
+ error: `${error} Drop the flag and retry deft verify:session-ritual -- --tier=gated.`,
89
+ };
90
+ }
91
+ return { ...parsed, error };
92
+ }
93
+ }
94
+ return parsed;
95
+ }
96
+ /** True when the ritual failure is the gated cache_fresh step (#3506 / #3507). */
97
+ export function isCacheFreshFailureMessage(message) {
98
+ return message.includes("cache_fresh") || message.includes("cache-fresh");
99
+ }
100
+ /** Run the gate and return the process exit code. */
101
+ export function run(argv, deps = {}) {
102
+ const args = parseArgs(argv);
103
+ if (args.error !== undefined) {
104
+ process.stderr.write(`verify_session_ritual: ${args.error}\n`);
105
+ return 2;
106
+ }
107
+ const projectRoot = resolve(args.projectRoot);
108
+ const verify = deps.verifySessionRitual ?? verifySessionRitual;
109
+ const result = verify(projectRoot, {
110
+ tier: args.tier,
111
+ posture: args.posture ?? undefined,
112
+ });
113
+ const warning = emitBypassWarning(result);
114
+ const warningNeeded = result.bypassed && result.wouldFailCode !== null;
115
+ if (args.emitJson) {
116
+ process.stdout.write(`${emitVerifyJson(result)}\n`);
117
+ }
118
+ else if (result.code === 0) {
119
+ if (!warningNeeded) {
120
+ process.stdout.write(`${result.message}\n`);
121
+ }
122
+ }
123
+ else if (result.code === 1) {
124
+ const recoveryTier = result.recoveryTier ?? "cold";
125
+ const lines = [
126
+ occupancyAwareDenialMessage(projectRoot, result.message, { env: process.env }, recoveryTier),
127
+ ];
128
+ if (isCacheFreshFailureMessage(result.message)) {
129
+ lines.push(formatCacheFreshDeferSoftPath());
130
+ }
131
+ process.stderr.write(`${lines.join("\n")}\n`);
132
+ }
133
+ else {
134
+ process.stderr.write(`${result.message}\n`);
135
+ }
136
+ if (warning.length > 0) {
137
+ process.stderr.write(`${warning}\n`);
138
+ }
139
+ return result.code;
140
+ }
141
+ if (process.argv[1] !== undefined && fileURLToPath(import.meta.url) === process.argv[1]) {
142
+ process.exit(run(process.argv.slice(2)));
143
+ }
144
+ //# sourceMappingURL=verify-session-ritual.js.map
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/env node
2
+ interface ParsedArgs {
3
+ mapPath: string | null;
4
+ root: string | null;
5
+ error?: string;
6
+ }
7
+ /** Parse rule-ownership-lint CLI args, mirroring scripts/rule_ownership_lint.py. */
8
+ export declare function parseArgs(argv: string[]): ParsedArgs;
9
+ /** Run the gate and return the process exit code. */
10
+ export declare function run(argv: string[]): number;
11
+ export {};
12
+ //# sourceMappingURL=rule-ownership-lint.d.ts.map
@@ -0,0 +1,61 @@
1
+ #!/usr/bin/env node
2
+ import { resolve } from "node:path";
3
+ import { fileURLToPath } from "node:url";
4
+ import { evaluateRuleOwnership } from "@deftai/directive-core/verify-source";
5
+ /** Parse rule-ownership-lint CLI args, mirroring scripts/rule_ownership_lint.py. */
6
+ export function parseArgs(argv) {
7
+ const parsed = { mapPath: null, root: null };
8
+ for (let i = 0; i < argv.length; i += 1) {
9
+ const arg = argv[i];
10
+ if (arg === "--map") {
11
+ const value = argv[i + 1];
12
+ if (value === undefined) {
13
+ return { ...parsed, error: "argument --map: expected one argument" };
14
+ }
15
+ parsed.mapPath = value;
16
+ i += 1;
17
+ }
18
+ else if (arg?.startsWith("--map=")) {
19
+ parsed.mapPath = arg.slice("--map=".length);
20
+ }
21
+ else if (arg === "--root") {
22
+ const value = argv[i + 1];
23
+ if (value === undefined) {
24
+ return { ...parsed, error: "argument --root: expected one argument" };
25
+ }
26
+ parsed.root = value;
27
+ i += 1;
28
+ }
29
+ else if (arg?.startsWith("--root=")) {
30
+ parsed.root = arg.slice("--root=".length);
31
+ }
32
+ else {
33
+ return { ...parsed, error: `unrecognized argument: ${arg}` };
34
+ }
35
+ }
36
+ return parsed;
37
+ }
38
+ /** Run the gate and return the process exit code. */
39
+ export function run(argv) {
40
+ const args = parseArgs(argv);
41
+ if (args.error !== undefined) {
42
+ process.stderr.write(`rule_ownership_lint: ${args.error}\n`);
43
+ return 2;
44
+ }
45
+ const root = resolve(args.root ?? ".");
46
+ const result = evaluateRuleOwnership(root, {
47
+ root,
48
+ mapPath: args.mapPath !== null ? resolve(args.mapPath) : undefined,
49
+ });
50
+ if (result.stream === "stdout") {
51
+ process.stdout.write(`${result.message}\n`);
52
+ }
53
+ else {
54
+ process.stderr.write(`${result.message}\n`);
55
+ }
56
+ return result.code;
57
+ }
58
+ if (process.argv[1] !== undefined && fileURLToPath(import.meta.url) === process.argv[1]) {
59
+ process.exit(run(process.argv.slice(2)));
60
+ }
61
+ //# sourceMappingURL=rule-ownership-lint.js.map
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env node
2
+ interface ParsedArgs {
3
+ projectRoot: string;
4
+ error?: string;
5
+ }
6
+ /** Parse verify-biome-config CLI args (#2190). */
7
+ export declare function parseArgs(argv: string[]): ParsedArgs;
8
+ /** Run the gate and return the process exit code. */
9
+ export declare function run(argv: string[]): number;
10
+ export {};
11
+ //# sourceMappingURL=verify-biome-config.d.ts.map
@@ -0,0 +1,46 @@
1
+ #!/usr/bin/env node
2
+ import { resolve } from "node:path";
3
+ import { fileURLToPath } from "node:url";
4
+ import { evaluateBiomeConfigGuard } from "@deftai/directive-core/verify-source";
5
+ /** Parse verify-biome-config CLI args (#2190). */
6
+ export function parseArgs(argv) {
7
+ const parsed = { projectRoot: "." };
8
+ for (let i = 0; i < argv.length; i += 1) {
9
+ const arg = argv[i];
10
+ if (arg === "--project-root") {
11
+ const value = argv[i + 1];
12
+ if (value === undefined) {
13
+ return { ...parsed, error: "argument --project-root: expected one argument" };
14
+ }
15
+ parsed.projectRoot = value;
16
+ i += 1;
17
+ }
18
+ else if (arg?.startsWith("--project-root=")) {
19
+ parsed.projectRoot = arg.slice("--project-root=".length);
20
+ }
21
+ else {
22
+ return { ...parsed, error: `unrecognized argument: ${arg}` };
23
+ }
24
+ }
25
+ return parsed;
26
+ }
27
+ /** Run the gate and return the process exit code. */
28
+ export function run(argv) {
29
+ const args = parseArgs(argv);
30
+ if (args.error !== undefined) {
31
+ process.stderr.write(`verify_biome_config: ${args.error}\n`);
32
+ return 2;
33
+ }
34
+ const result = evaluateBiomeConfigGuard(resolve(args.projectRoot));
35
+ if (result.code === 0) {
36
+ process.stdout.write(`${result.message}\n`);
37
+ }
38
+ else {
39
+ process.stderr.write(`${result.message}\n`);
40
+ }
41
+ return result.code;
42
+ }
43
+ if (process.argv[1] !== undefined && fileURLToPath(import.meta.url) === process.argv[1]) {
44
+ process.exit(run(process.argv.slice(2)));
45
+ }
46
+ //# sourceMappingURL=verify-biome-config.js.map
@@ -0,0 +1,35 @@
1
+ #!/usr/bin/env node
2
+ export type RunGitFn = (args: readonly string[]) => {
3
+ readonly returncode: number;
4
+ readonly stdout: string;
5
+ readonly stderr: string;
6
+ };
7
+ export type RangeResolution = {
8
+ readonly kind: "pr";
9
+ readonly pr: string;
10
+ } | {
11
+ readonly kind: "range";
12
+ readonly range: string;
13
+ } | {
14
+ readonly kind: "missing-base";
15
+ readonly reason: string;
16
+ } | {
17
+ readonly kind: "stale-base";
18
+ readonly reason: string;
19
+ };
20
+ export declare function defaultRunGit(args: readonly string[]): {
21
+ returncode: number;
22
+ stdout: string;
23
+ stderr: string;
24
+ };
25
+ /**
26
+ * Resolve the candidate commit range against a merge-base, not a hardcoded
27
+ * origin/master two-dot range (#3969 Greptile leftover).
28
+ */
29
+ export declare function resolveClosingKeywordsSource(env: NodeJS.ProcessEnv, runGit?: RunGitFn): RangeResolution;
30
+ export declare function buildClosingKeywordsCheckArgv(env: NodeJS.ProcessEnv, extra?: readonly string[], runGit?: RunGitFn): {
31
+ argv: string[];
32
+ error?: string;
33
+ };
34
+ export declare function run(argv: string[], env?: NodeJS.ProcessEnv, invoke?: (args: readonly string[]) => number, runGit?: RunGitFn): number;
35
+ //# sourceMappingURL=verify-closing-keywords.d.ts.map
@@ -0,0 +1,139 @@
1
+ #!/usr/bin/env node
2
+ import { execFileSync } from "node:child_process";
3
+ import { fileURLToPath } from "node:url";
4
+ import { cmdPrCheckClosingKeywords } from "@deftai/directive-core/dist/pr-closing-keywords/main.js";
5
+ const BASE_CANDIDATES = ["origin/master", "origin/main"];
6
+ export function defaultRunGit(args) {
7
+ try {
8
+ const stdout = execFileSync("git", [...args], {
9
+ encoding: "utf8",
10
+ timeout: 30_000,
11
+ stdio: ["ignore", "pipe", "pipe"],
12
+ });
13
+ return { returncode: 0, stdout: typeof stdout === "string" ? stdout : "", stderr: "" };
14
+ }
15
+ catch (err) {
16
+ const e = err;
17
+ return {
18
+ returncode: typeof e.status === "number" ? e.status : 1,
19
+ stdout: typeof e.stdout === "string" ? e.stdout : "",
20
+ stderr: typeof e.stderr === "string" ? e.stderr : String(e.message ?? ""),
21
+ };
22
+ }
23
+ }
24
+ function firstLine(text) {
25
+ return text.trim().split(/\r?\n/)[0] ?? "";
26
+ }
27
+ function shaOf(result) {
28
+ if (result.returncode !== 0)
29
+ return null;
30
+ const sha = firstLine(result.stdout);
31
+ return /^[0-9a-f]{7,40}$/i.test(sha) ? sha : null;
32
+ }
33
+ function localDefaultFor(originRef) {
34
+ if (originRef.endsWith("/master") || originRef === "master")
35
+ return "master";
36
+ if (originRef.endsWith("/main") || originRef === "main")
37
+ return "main";
38
+ const slash = originRef.lastIndexOf("/");
39
+ return slash >= 0 ? originRef.slice(slash + 1) : null;
40
+ }
41
+ /** Remote-tracking ref name for `git fetch origin <name> --`. */
42
+ function originFetchArg(originRef) {
43
+ if (!originRef.startsWith("origin/"))
44
+ return null;
45
+ const name = originRef.slice("origin/".length);
46
+ return name.length > 0 ? name : null;
47
+ }
48
+ /**
49
+ * Detect the locally observable stale-range enlargement without fetching:
50
+ * origin/<default> lags a descendant local default, and HEAD's merge-base
51
+ * against that local default is not the origin merge-base. Then
52
+ * origin/master..HEAD would include already-merged local-default commits.
53
+ */
54
+ function staleRelativeToLocalDefault(originRef, originMergeBase, runGit) {
55
+ const localDefault = localDefaultFor(originRef);
56
+ if (localDefault === null)
57
+ return null;
58
+ const ahead = runGit(["merge-base", "--is-ancestor", originRef, localDefault]);
59
+ if (ahead.returncode !== 0)
60
+ return null;
61
+ const localMb = shaOf(runGit(["merge-base", localDefault, "HEAD"]));
62
+ if (localMb === null || localMb === originMergeBase)
63
+ return null;
64
+ return {
65
+ kind: "stale-base",
66
+ reason: originRef +
67
+ " lags local " +
68
+ localDefault +
69
+ " relative to HEAD, so the scan range would include already-merged commits. Recovery: git fetch origin " +
70
+ localDefault +
71
+ ".",
72
+ };
73
+ }
74
+ /**
75
+ * Resolve the candidate commit range against a merge-base, not a hardcoded
76
+ * origin/master two-dot range (#3969 Greptile leftover).
77
+ */
78
+ export function resolveClosingKeywordsSource(env, runGit = defaultRunGit) {
79
+ const raw = env.GITHUB_PR_NUMBER ?? env.PR_NUMBER;
80
+ const pr = raw?.trim() ?? "";
81
+ if (/^\d+$/.test(pr)) {
82
+ return { kind: "pr", pr };
83
+ }
84
+ const bases = [
85
+ env.GITHUB_BASE_REF?.trim() ? `origin/${env.GITHUB_BASE_REF.trim()}` : null,
86
+ ...BASE_CANDIDATES,
87
+ ].filter((base) => base !== null && base.length > 0);
88
+ const seen = new Set();
89
+ for (const base of bases) {
90
+ if (seen.has(base))
91
+ continue;
92
+ seen.add(base);
93
+ const fetchArg = originFetchArg(base);
94
+ let fetched = false;
95
+ if (fetchArg !== null) {
96
+ // Scoped to this wrapper, not the whole check graph. CI uses --pr
97
+ // and never reaches this path.
98
+ fetched = runGit(["fetch", "origin", fetchArg, "--"]).returncode === 0;
99
+ }
100
+ const sha = shaOf(runGit(["merge-base", base, "HEAD"]));
101
+ if (sha === null)
102
+ continue;
103
+ if (!fetched) {
104
+ const stale = staleRelativeToLocalDefault(base, sha, runGit);
105
+ if (stale !== null)
106
+ return stale;
107
+ // Fetch failed and local evidence cannot prove freshness: do not
108
+ // scan a possibly stale origin merge-base.
109
+ continue;
110
+ }
111
+ return { kind: "range", range: `${sha}..HEAD` };
112
+ }
113
+ return {
114
+ kind: "missing-base",
115
+ reason: "no merge-base against origin/master or origin/main. Recovery: git fetch origin master.",
116
+ };
117
+ }
118
+ export function buildClosingKeywordsCheckArgv(env, extra = [], runGit = defaultRunGit) {
119
+ const source = resolveClosingKeywordsSource(env, runGit);
120
+ if (source.kind === "pr") {
121
+ return { argv: ["--mode", "both", "--pr", source.pr, ...extra] };
122
+ }
123
+ if (source.kind === "missing-base" || source.kind === "stale-base") {
124
+ return { argv: [], error: source.reason };
125
+ }
126
+ return { argv: ["--mode", "both", "--from-git-range", source.range, ...extra] };
127
+ }
128
+ export function run(argv, env = process.env, invoke = cmdPrCheckClosingKeywords, runGit = defaultRunGit) {
129
+ const built = buildClosingKeywordsCheckArgv(env, argv, runGit);
130
+ if (built.error !== undefined) {
131
+ process.stderr.write("verify:closing-keywords: fail -- " + built.error + "\n");
132
+ return 2;
133
+ }
134
+ return invoke(built.argv);
135
+ }
136
+ if (process.argv[1] !== undefined && fileURLToPath(import.meta.url) === process.argv[1]) {
137
+ process.exit(run(process.argv.slice(2)));
138
+ }
139
+ //# sourceMappingURL=verify-closing-keywords.js.map
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env node
2
+ interface ParsedArgs {
3
+ repo: string;
4
+ projectRoot: string;
5
+ changelog: string | null;
6
+ error?: string;
7
+ }
8
+ export interface HardStopCliSeams {
9
+ readonly inventory?: readonly Record<string, unknown>[];
10
+ readonly changelogText?: string;
11
+ }
12
+ /** Parse verify-consumer-hard-stops CLI args (#3900 / #3713). */
13
+ export declare function parseArgs(argv: string[]): ParsedArgs;
14
+ export declare function run(argv: string[], seams?: HardStopCliSeams): number;
15
+ export {};
16
+ //# sourceMappingURL=verify-consumer-hard-stops.d.ts.map
@@ -0,0 +1,99 @@
1
+ #!/usr/bin/env node
2
+ import { readFileSync } from "node:fs";
3
+ import { resolve } from "node:path";
4
+ import { fileURLToPath } from "node:url";
5
+ import { evaluateConsumerHardStopCensus, issueFromInventoryRow, parseClosesSet, } from "@deftai/directive-core/release";
6
+ import { restIssueListOpenInventory } from "@deftai/directive-core/scm";
7
+ /** Parse verify-consumer-hard-stops CLI args (#3900 / #3713). */
8
+ export function parseArgs(argv) {
9
+ const parsed = { repo: "deftai/directive", projectRoot: ".", changelog: null };
10
+ for (let i = 0; i < argv.length; i += 1) {
11
+ const arg = argv[i];
12
+ if (arg === "--repo") {
13
+ const value = argv[i + 1];
14
+ if (value === undefined)
15
+ return { ...parsed, error: "argument --repo: expected one argument" };
16
+ parsed.repo = value;
17
+ i += 1;
18
+ }
19
+ else if (arg?.startsWith("--repo=")) {
20
+ parsed.repo = arg.slice("--repo=".length);
21
+ }
22
+ else if (arg === "--project-root") {
23
+ const value = argv[i + 1];
24
+ if (value === undefined)
25
+ return { ...parsed, error: "argument --project-root: expected one argument" };
26
+ parsed.projectRoot = value;
27
+ i += 1;
28
+ }
29
+ else if (arg?.startsWith("--project-root=")) {
30
+ parsed.projectRoot = arg.slice("--project-root=".length);
31
+ }
32
+ else if (arg === "--changelog") {
33
+ const value = argv[i + 1];
34
+ if (value === undefined)
35
+ return { ...parsed, error: "argument --changelog: expected one argument" };
36
+ parsed.changelog = value;
37
+ i += 1;
38
+ }
39
+ else if (arg?.startsWith("--changelog=")) {
40
+ parsed.changelog = arg.slice("--changelog=".length);
41
+ }
42
+ else {
43
+ return { ...parsed, error: "unrecognized argument: " + String(arg) };
44
+ }
45
+ }
46
+ return parsed;
47
+ }
48
+ export function run(argv, seams = {}) {
49
+ const args = parseArgs(argv);
50
+ if (args.error !== undefined) {
51
+ process.stderr.write("verify_consumer_hard_stops: " + args.error + "\n");
52
+ return 2;
53
+ }
54
+ const root = resolve(args.projectRoot);
55
+ let changelogText = seams.changelogText;
56
+ if (changelogText === undefined) {
57
+ const changelogPath = resolve(root, args.changelog ?? "CHANGELOG.md");
58
+ try {
59
+ changelogText = readFileSync(changelogPath, "utf8");
60
+ }
61
+ catch (err) {
62
+ const reason = err instanceof Error ? err.message : String(err);
63
+ process.stderr.write("verify_consumer_hard_stops: could not read CHANGELOG (" + reason + ")\n");
64
+ return 2;
65
+ }
66
+ }
67
+ let rows;
68
+ try {
69
+ rows = seams.inventory ?? restIssueListOpenInventory(args.repo);
70
+ }
71
+ catch (err) {
72
+ const reason = err instanceof Error ? err.message : String(err);
73
+ process.stderr.write("verify_consumer_hard_stops: fail -- could not list open issues. Recovery: check gh auth and REST quota. " +
74
+ reason +
75
+ "\n");
76
+ return 2;
77
+ }
78
+ const issues = [];
79
+ for (const row of rows) {
80
+ const issue = issueFromInventoryRow(row);
81
+ if (issue !== null)
82
+ issues.push(issue);
83
+ }
84
+ const result = evaluateConsumerHardStopCensus({
85
+ issues,
86
+ closesSet: parseClosesSet(changelogText),
87
+ });
88
+ if (result.stream === "stdout") {
89
+ process.stdout.write(result.message + "\n");
90
+ }
91
+ else {
92
+ process.stderr.write(result.message + "\n");
93
+ }
94
+ return result.code;
95
+ }
96
+ if (process.argv[1] !== undefined && fileURLToPath(import.meta.url) === process.argv[1]) {
97
+ process.exit(run(process.argv.slice(2)));
98
+ }
99
+ //# sourceMappingURL=verify-consumer-hard-stops.js.map
@@ -0,0 +1,13 @@
1
+ #!/usr/bin/env node
2
+ interface ParsedArgs {
3
+ projectRoot: string;
4
+ enforce: boolean;
5
+ help?: boolean;
6
+ error?: string;
7
+ }
8
+ /** Parse verify-contained-writes CLI args (#2951). */
9
+ export declare function parseArgs(argv: string[]): ParsedArgs;
10
+ /** Run the gate and return the process exit code. */
11
+ export declare function run(argv: string[]): number;
12
+ export {};
13
+ //# sourceMappingURL=verify-contained-writes.d.ts.map
@@ -0,0 +1,67 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * CLI for task verify:contained-writes (#2951 Phase 1).
4
+ * Fail-open by default; pass --enforce for fail-closed (later phases).
5
+ */
6
+ import { resolve } from "node:path";
7
+ import { fileURLToPath } from "node:url";
8
+ import { evaluateContainedWrites } from "@deftai/directive-core/verify-source";
9
+ /** Parse verify-contained-writes CLI args (#2951). */
10
+ export function parseArgs(argv) {
11
+ const parsed = { projectRoot: ".", enforce: false };
12
+ for (let i = 0; i < argv.length; i += 1) {
13
+ const arg = argv[i];
14
+ if (arg === "--project-root") {
15
+ const value = argv[i + 1];
16
+ if (value === undefined) {
17
+ return { ...parsed, error: "argument --project-root: expected one argument" };
18
+ }
19
+ parsed.projectRoot = value;
20
+ i += 1;
21
+ }
22
+ else if (arg?.startsWith("--project-root=")) {
23
+ parsed.projectRoot = arg.slice("--project-root=".length);
24
+ }
25
+ else if (arg === "--enforce") {
26
+ parsed.enforce = true;
27
+ }
28
+ else if (arg === "--help" || arg === "-h") {
29
+ return { ...parsed, help: true };
30
+ }
31
+ else {
32
+ return { ...parsed, error: `unrecognized argument: ${arg}` };
33
+ }
34
+ }
35
+ return parsed;
36
+ }
37
+ const HELP_TEXT = "Usage: verify-contained-writes [--project-root <path>] [--enforce]\n" +
38
+ " Inventory raw write sinks outside the allowlist (#2951).\n" +
39
+ " Default: fail-open (exit 0 with advisory report).\n" +
40
+ " --enforce: fail closed (exit 1) when non-allowlisted sinks remain.\n";
41
+ /** Run the gate and return the process exit code. */
42
+ export function run(argv) {
43
+ const args = parseArgs(argv);
44
+ if (args.help === true) {
45
+ process.stdout.write(HELP_TEXT);
46
+ return 0;
47
+ }
48
+ if (args.error !== undefined) {
49
+ process.stderr.write(`verify_contained_writes: ${args.error}\n`);
50
+ return 2;
51
+ }
52
+ const result = evaluateContainedWrites({
53
+ projectRoot: resolve(args.projectRoot),
54
+ enforce: args.enforce,
55
+ });
56
+ if (result.stream === "stdout") {
57
+ process.stdout.write(`${result.message}\n`);
58
+ }
59
+ else {
60
+ process.stderr.write(`${result.message}\n`);
61
+ }
62
+ return result.code;
63
+ }
64
+ if (process.argv[1] !== undefined && fileURLToPath(import.meta.url) === process.argv[1]) {
65
+ process.exit(run(process.argv.slice(2)));
66
+ }
67
+ //# sourceMappingURL=verify-contained-writes.js.map