@deftai/directive-runtime 0.127.0 → 0.129.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 (264) hide show
  1. package/.githooks/_directive-run.sh +30 -0
  2. package/.githooks/pre-commit +4 -24
  3. package/.githooks/pre-push +11 -17
  4. package/Taskfile.yml +16 -15
  5. package/contracts/design-critique.md +5 -0
  6. package/dist/cli-router/route-argv.js +1 -0
  7. package/dist/contract-entry.js +2 -0
  8. package/dist/coverage-hotspots.js +2 -2
  9. package/dist/dispatch.d.ts +1 -1
  10. package/dist/dispatch.js +7 -0
  11. package/dist/policy.d.ts +4 -2
  12. package/dist/policy.js +101 -2
  13. package/dist/pre-pr-run.d.ts +2 -0
  14. package/dist/pre-pr-run.js +40 -0
  15. package/dist/render-cli/capability-map-cli.d.ts +3 -0
  16. package/dist/render-cli/capability-map-cli.js +6 -0
  17. package/dist/setup-wiring.d.ts +16 -1
  18. package/dist/setup-wiring.js +47 -3
  19. package/dist/setup.d.ts +4 -0
  20. package/dist/setup.js +7 -1
  21. package/dist/verify-ac.js +29 -2
  22. package/docs/getting-started.md +2 -0
  23. package/docs/known-limitations.md +1 -0
  24. package/docs/launcher.md +10 -0
  25. package/package.json +1 -1
  26. package/packs/skills/skills-pack-0.1.json +1 -1
  27. package/skills/deft-directive-pre-pr/SKILL.md +13 -3
  28. package/tasks/agent.yml +0 -2
  29. package/tasks/cache.yml +0 -16
  30. package/tasks/capacity.yml +0 -4
  31. package/tasks/change.yml +0 -4
  32. package/tasks/codebase.yml +0 -10
  33. package/tasks/commit.yml +0 -2
  34. package/tasks/coverage.yml +0 -2
  35. package/tasks/decision.yml +0 -4
  36. package/tasks/directive.yml +0 -1
  37. package/tasks/docs.yml +6 -10
  38. package/tasks/engine-invoke.cjs +79 -0
  39. package/tasks/engine-invoke.test.cjs +84 -0
  40. package/tasks/engine.yml +27 -88
  41. package/tasks/eval.yml +0 -8
  42. package/tasks/feedback.yml +0 -2
  43. package/tasks/install.yml +0 -4
  44. package/tasks/issue.yml +0 -3
  45. package/tasks/lifecycle.yml +0 -1
  46. package/tasks/materialize.cjs +246 -0
  47. package/tasks/materialize.test.cjs +103 -0
  48. package/tasks/materialize.yml +13 -0
  49. package/tasks/migrate.yml +0 -6
  50. package/tasks/packs.yml +0 -16
  51. package/tasks/plan-sequence.yml +0 -8
  52. package/tasks/policy.yml +0 -24
  53. package/tasks/pr.yml +0 -6
  54. package/tasks/prd.yml +0 -2
  55. package/tasks/product-signal.yml +0 -10
  56. package/tasks/project.yml +0 -8
  57. package/tasks/reconcile.yml +0 -2
  58. package/tasks/review-monitor.yml +0 -4
  59. package/tasks/roadmap.yml +0 -4
  60. package/tasks/scm.yml +0 -32
  61. package/tasks/scope.yml +0 -30
  62. package/tasks/slice.yml +0 -4
  63. package/tasks/spec.yml +0 -6
  64. package/tasks/subagent.yml +0 -4
  65. package/tasks/swarm.yml +0 -7
  66. package/tasks/toolchain.yml +0 -4
  67. package/tasks/triage-actions.yml +0 -8
  68. package/tasks/triage-bootstrap.yml +0 -1
  69. package/tasks/triage-bulk.yml +0 -5
  70. package/tasks/triage-classify.yml +0 -2
  71. package/tasks/triage-evaluate.yml +0 -1
  72. package/tasks/triage-metrics.yml +0 -2
  73. package/tasks/triage-queue.yml +0 -3
  74. package/tasks/triage-reconcile.yml +0 -1
  75. package/tasks/triage-scope-drift.yml +0 -1
  76. package/tasks/triage-scope.yml +0 -1
  77. package/tasks/triage-smoketest.yml +0 -1
  78. package/tasks/triage-subscribe.yml +0 -2
  79. package/tasks/tutorial.yml +0 -20
  80. package/tasks/umbrella.yml +0 -2
  81. package/tasks/value.yml +0 -2
  82. package/tasks/vbrief.yml +0 -12
  83. package/tasks/verify.yml +0 -140
  84. package/tasks/xbrief.yml +0 -6
  85. package/templates/design-critique-brief.md +3 -0
  86. package/vendor/directive-content/.githooks/_directive-run.sh +30 -0
  87. package/vendor/directive-content/.githooks/pre-commit +4 -24
  88. package/vendor/directive-content/.githooks/pre-push +11 -17
  89. package/vendor/directive-content/Taskfile.yml +16 -15
  90. package/vendor/directive-content/contracts/design-critique.md +5 -0
  91. package/vendor/directive-content/docs/getting-started.md +2 -0
  92. package/vendor/directive-content/docs/known-limitations.md +1 -0
  93. package/vendor/directive-content/docs/launcher.md +10 -0
  94. package/vendor/directive-content/packs/skills/skills-pack-0.1.json +1 -1
  95. package/vendor/directive-content/skills/deft-directive-pre-pr/SKILL.md +13 -3
  96. package/vendor/directive-content/tasks/agent.yml +0 -2
  97. package/vendor/directive-content/tasks/cache.yml +0 -16
  98. package/vendor/directive-content/tasks/capacity.yml +0 -4
  99. package/vendor/directive-content/tasks/change.yml +0 -4
  100. package/vendor/directive-content/tasks/codebase.yml +0 -10
  101. package/vendor/directive-content/tasks/commit.yml +0 -2
  102. package/vendor/directive-content/tasks/coverage.yml +0 -2
  103. package/vendor/directive-content/tasks/decision.yml +0 -4
  104. package/vendor/directive-content/tasks/directive.yml +0 -1
  105. package/vendor/directive-content/tasks/docs.yml +6 -10
  106. package/vendor/directive-content/tasks/engine-invoke.cjs +79 -0
  107. package/vendor/directive-content/tasks/engine-invoke.test.cjs +84 -0
  108. package/vendor/directive-content/tasks/engine.yml +27 -88
  109. package/vendor/directive-content/tasks/eval.yml +0 -8
  110. package/vendor/directive-content/tasks/feedback.yml +0 -2
  111. package/vendor/directive-content/tasks/install.yml +0 -4
  112. package/vendor/directive-content/tasks/issue.yml +0 -3
  113. package/vendor/directive-content/tasks/lifecycle.yml +0 -1
  114. package/vendor/directive-content/tasks/materialize.cjs +246 -0
  115. package/vendor/directive-content/tasks/materialize.test.cjs +103 -0
  116. package/vendor/directive-content/tasks/materialize.yml +13 -0
  117. package/vendor/directive-content/tasks/migrate.yml +0 -6
  118. package/vendor/directive-content/tasks/packs.yml +0 -16
  119. package/vendor/directive-content/tasks/plan-sequence.yml +0 -8
  120. package/vendor/directive-content/tasks/policy.yml +0 -24
  121. package/vendor/directive-content/tasks/pr.yml +0 -6
  122. package/vendor/directive-content/tasks/prd.yml +0 -2
  123. package/vendor/directive-content/tasks/product-signal.yml +0 -10
  124. package/vendor/directive-content/tasks/project.yml +0 -8
  125. package/vendor/directive-content/tasks/reconcile.yml +0 -2
  126. package/vendor/directive-content/tasks/review-monitor.yml +0 -4
  127. package/vendor/directive-content/tasks/roadmap.yml +0 -4
  128. package/vendor/directive-content/tasks/scm.yml +0 -32
  129. package/vendor/directive-content/tasks/scope.yml +0 -30
  130. package/vendor/directive-content/tasks/slice.yml +0 -4
  131. package/vendor/directive-content/tasks/spec.yml +0 -6
  132. package/vendor/directive-content/tasks/subagent.yml +0 -4
  133. package/vendor/directive-content/tasks/swarm.yml +0 -7
  134. package/vendor/directive-content/tasks/toolchain.yml +0 -4
  135. package/vendor/directive-content/tasks/triage-actions.yml +0 -8
  136. package/vendor/directive-content/tasks/triage-bootstrap.yml +0 -1
  137. package/vendor/directive-content/tasks/triage-bulk.yml +0 -5
  138. package/vendor/directive-content/tasks/triage-classify.yml +0 -2
  139. package/vendor/directive-content/tasks/triage-evaluate.yml +0 -1
  140. package/vendor/directive-content/tasks/triage-metrics.yml +0 -2
  141. package/vendor/directive-content/tasks/triage-queue.yml +0 -3
  142. package/vendor/directive-content/tasks/triage-reconcile.yml +0 -1
  143. package/vendor/directive-content/tasks/triage-scope-drift.yml +0 -1
  144. package/vendor/directive-content/tasks/triage-scope.yml +0 -1
  145. package/vendor/directive-content/tasks/triage-smoketest.yml +0 -1
  146. package/vendor/directive-content/tasks/triage-subscribe.yml +0 -2
  147. package/vendor/directive-content/tasks/tutorial.yml +0 -20
  148. package/vendor/directive-content/tasks/umbrella.yml +0 -2
  149. package/vendor/directive-content/tasks/value.yml +0 -2
  150. package/vendor/directive-content/tasks/vbrief.yml +0 -12
  151. package/vendor/directive-content/tasks/verify.yml +0 -140
  152. package/vendor/directive-content/tasks/xbrief.yml +0 -6
  153. package/vendor/directive-content/templates/design-critique-brief.md +3 -0
  154. package/vendor/directive-core/dist/.tsbuildinfo +1 -1
  155. package/vendor/directive-core/dist/content-root.d.ts.map +1 -1
  156. package/vendor/directive-core/dist/content-root.js +8 -1
  157. package/vendor/directive-core/dist/content-root.js.map +1 -1
  158. package/vendor/directive-core/dist/coverage-hotspots/evaluate.d.ts +13 -5
  159. package/vendor/directive-core/dist/coverage-hotspots/evaluate.d.ts.map +1 -1
  160. package/vendor/directive-core/dist/coverage-hotspots/evaluate.js +60 -2
  161. package/vendor/directive-core/dist/coverage-hotspots/evaluate.js.map +1 -1
  162. package/vendor/directive-core/dist/doctor/checks.d.ts.map +1 -1
  163. package/vendor/directive-core/dist/doctor/checks.js +5 -3
  164. package/vendor/directive-core/dist/doctor/checks.js.map +1 -1
  165. package/vendor/directive-core/dist/hooks/scope.d.ts +57 -0
  166. package/vendor/directive-core/dist/hooks/scope.d.ts.map +1 -1
  167. package/vendor/directive-core/dist/hooks/scope.js +171 -0
  168. package/vendor/directive-core/dist/hooks/scope.js.map +1 -1
  169. package/vendor/directive-core/dist/index.d.ts +1 -0
  170. package/vendor/directive-core/dist/index.d.ts.map +1 -1
  171. package/vendor/directive-core/dist/index.js +1 -0
  172. package/vendor/directive-core/dist/index.js.map +1 -1
  173. package/vendor/directive-core/dist/init-deposit/scaffold.d.ts +1 -1
  174. package/vendor/directive-core/dist/init-deposit/scaffold.d.ts.map +1 -1
  175. package/vendor/directive-core/dist/init-deposit/scaffold.js +1 -1
  176. package/vendor/directive-core/dist/init-deposit/scaffold.js.map +1 -1
  177. package/vendor/directive-core/dist/packs/pack-render.d.ts +6 -1
  178. package/vendor/directive-core/dist/packs/pack-render.d.ts.map +1 -1
  179. package/vendor/directive-core/dist/packs/pack-render.js +103 -78
  180. package/vendor/directive-core/dist/packs/pack-render.js.map +1 -1
  181. package/vendor/directive-core/dist/packs/packs-root.d.ts +53 -0
  182. package/vendor/directive-core/dist/packs/packs-root.d.ts.map +1 -0
  183. package/vendor/directive-core/dist/packs/packs-root.js +83 -0
  184. package/vendor/directive-core/dist/packs/packs-root.js.map +1 -0
  185. package/vendor/directive-core/dist/packs/packs-slice.d.ts.map +1 -1
  186. package/vendor/directive-core/dist/packs/packs-slice.js +6 -6
  187. package/vendor/directive-core/dist/packs/packs-slice.js.map +1 -1
  188. package/vendor/directive-core/dist/policy/coverage-mode.d.ts +84 -0
  189. package/vendor/directive-core/dist/policy/coverage-mode.d.ts.map +1 -0
  190. package/vendor/directive-core/dist/policy/coverage-mode.js +226 -0
  191. package/vendor/directive-core/dist/policy/coverage-mode.js.map +1 -0
  192. package/vendor/directive-core/dist/policy/index.d.ts +2 -0
  193. package/vendor/directive-core/dist/policy/index.d.ts.map +1 -1
  194. package/vendor/directive-core/dist/policy/index.js +60 -40
  195. package/vendor/directive-core/dist/policy/index.js.map +1 -1
  196. package/vendor/directive-core/dist/pr-closing-keywords/main.d.ts.map +1 -1
  197. package/vendor/directive-core/dist/pr-closing-keywords/main.js +137 -7
  198. package/vendor/directive-core/dist/pr-closing-keywords/main.js.map +1 -1
  199. package/vendor/directive-core/dist/pre-pr-controller/controller.d.ts +2 -0
  200. package/vendor/directive-core/dist/pre-pr-controller/controller.d.ts.map +1 -1
  201. package/vendor/directive-core/dist/pre-pr-controller/controller.js +109 -14
  202. package/vendor/directive-core/dist/pre-pr-controller/controller.js.map +1 -1
  203. package/vendor/directive-core/dist/pre-pr-controller/evaluate.d.ts +2 -0
  204. package/vendor/directive-core/dist/pre-pr-controller/evaluate.d.ts.map +1 -1
  205. package/vendor/directive-core/dist/pre-pr-controller/evaluate.js +11 -1
  206. package/vendor/directive-core/dist/pre-pr-controller/evaluate.js.map +1 -1
  207. package/vendor/directive-core/dist/pre-pr-controller/index.d.ts +1 -1
  208. package/vendor/directive-core/dist/pre-pr-controller/index.d.ts.map +1 -1
  209. package/vendor/directive-core/dist/pre-pr-controller/index.js +1 -1
  210. package/vendor/directive-core/dist/pre-pr-controller/index.js.map +1 -1
  211. package/vendor/directive-core/dist/pre-pr-controller/phases.d.ts +10 -0
  212. package/vendor/directive-core/dist/pre-pr-controller/phases.d.ts.map +1 -1
  213. package/vendor/directive-core/dist/pre-pr-controller/phases.js +15 -1
  214. package/vendor/directive-core/dist/pre-pr-controller/phases.js.map +1 -1
  215. package/vendor/directive-core/dist/pre-pr-controller/types.d.ts +20 -1
  216. package/vendor/directive-core/dist/pre-pr-controller/types.d.ts.map +1 -1
  217. package/vendor/directive-core/dist/pre-pr-controller/types.js +2 -0
  218. package/vendor/directive-core/dist/pre-pr-controller/types.js.map +1 -1
  219. package/vendor/directive-core/dist/preflight-gh/pre-push.d.ts +40 -3
  220. package/vendor/directive-core/dist/preflight-gh/pre-push.d.ts.map +1 -1
  221. package/vendor/directive-core/dist/preflight-gh/pre-push.js +353 -27
  222. package/vendor/directive-core/dist/preflight-gh/pre-push.js.map +1 -1
  223. package/vendor/directive-core/dist/product-first-done-gate/acceptance-resolver.d.ts +1 -1
  224. package/vendor/directive-core/dist/product-first-done-gate/acceptance-resolver.d.ts.map +1 -1
  225. package/vendor/directive-core/dist/product-first-done-gate/acceptance-resolver.js +1 -1
  226. package/vendor/directive-core/dist/product-first-done-gate/acceptance-resolver.js.map +1 -1
  227. package/vendor/directive-core/dist/product-first-done-gate/index.d.ts +1 -1
  228. package/vendor/directive-core/dist/product-first-done-gate/index.d.ts.map +1 -1
  229. package/vendor/directive-core/dist/product-first-done-gate/index.js +1 -1
  230. package/vendor/directive-core/dist/product-first-done-gate/index.js.map +1 -1
  231. package/vendor/directive-core/dist/release/main.d.ts.map +1 -1
  232. package/vendor/directive-core/dist/release/main.js +3 -2
  233. package/vendor/directive-core/dist/release/main.js.map +1 -1
  234. package/vendor/directive-core/dist/release/version.d.ts +14 -0
  235. package/vendor/directive-core/dist/release/version.d.ts.map +1 -1
  236. package/vendor/directive-core/dist/release/version.js +28 -0
  237. package/vendor/directive-core/dist/release/version.js.map +1 -1
  238. package/vendor/directive-core/dist/render/project-render.d.ts.map +1 -1
  239. package/vendor/directive-core/dist/render/project-render.js +1 -0
  240. package/vendor/directive-core/dist/render/project-render.js.map +1 -1
  241. package/vendor/directive-core/dist/scope/file-scope-coverage-warn.d.ts +21 -0
  242. package/vendor/directive-core/dist/scope/file-scope-coverage-warn.d.ts.map +1 -0
  243. package/vendor/directive-core/dist/scope/file-scope-coverage-warn.js +95 -0
  244. package/vendor/directive-core/dist/scope/file-scope-coverage-warn.js.map +1 -0
  245. package/vendor/directive-core/dist/swarm/launch-cli.d.ts.map +1 -1
  246. package/vendor/directive-core/dist/swarm/launch-cli.js +12 -0
  247. package/vendor/directive-core/dist/swarm/launch-cli.js.map +1 -1
  248. package/vendor/directive-core/dist/swarm/launch.d.ts +6 -0
  249. package/vendor/directive-core/dist/swarm/launch.d.ts.map +1 -1
  250. package/vendor/directive-core/dist/swarm/launch.js +11 -0
  251. package/vendor/directive-core/dist/swarm/launch.js.map +1 -1
  252. package/vendor/directive-core/dist/swarm/leftover-before-activation.d.ts +27 -0
  253. package/vendor/directive-core/dist/swarm/leftover-before-activation.d.ts.map +1 -0
  254. package/vendor/directive-core/dist/swarm/leftover-before-activation.js +31 -0
  255. package/vendor/directive-core/dist/swarm/leftover-before-activation.js.map +1 -0
  256. package/vendor/directive-core/dist/verify-env/verify-hooks-installed.d.ts +3 -3
  257. package/vendor/directive-core/dist/verify-env/verify-hooks-installed.d.ts.map +1 -1
  258. package/vendor/directive-core/dist/verify-env/verify-hooks-installed.js +7 -11
  259. package/vendor/directive-core/dist/verify-env/verify-hooks-installed.js.map +1 -1
  260. package/vendor/directive-core/dist/verify-source/project-definition-mutation-boundary.d.ts.map +1 -1
  261. package/vendor/directive-core/dist/verify-source/project-definition-mutation-boundary.js +1 -0
  262. package/vendor/directive-core/dist/verify-source/project-definition-mutation-boundary.js.map +1 -1
  263. package/.githooks/_deft-run.sh +0 -47
  264. package/vendor/directive-content/.githooks/_deft-run.sh +0 -47
@@ -7,8 +7,6 @@ tasks:
7
7
 
8
8
  stubs:
9
9
  desc: Scan source files for stub patterns (TODO, FIXME, HACK, return null, bare pass)
10
- deps:
11
- - task: :engine:_ts-build
12
10
  cmds:
13
11
  # Oracle/fallback (parity): scripts/verify-stubs.py (#1828 Wave 8 / #1854 s3).
14
12
  - task: :engine:invoke
@@ -17,8 +15,6 @@ tasks:
17
15
 
18
16
  links:
19
17
  desc: Validate internal links in markdown files
20
- deps:
21
- - task: :engine:_ts-build
22
18
  cmds:
23
19
  # Oracle/fallback (parity): scripts/validate-links.py (#1828 Wave 8 / #1854 s3).
24
20
  - task: :engine:invoke
@@ -27,8 +23,6 @@ tasks:
27
23
 
28
24
  rule-ownership:
29
25
  desc: "Verify the Rule Ownership Map (conventions/rule-ownership.json) is in sync with its owner files (#635)"
30
- deps:
31
- - task: :engine:_ts-build
32
26
  cmds:
33
27
  # Oracle/fallback (parity): scripts/rule_ownership_lint.py (#1828 Wave 8 / #1854 s3).
34
28
  - task: :engine:invoke
@@ -37,8 +31,6 @@ tasks:
37
31
 
38
32
  rule-to-verb-parity:
39
33
  desc: "[#5521] Fail closed when agents-entry.md / agent-prompt-preamble.md name unregistered deft/task verbs (family globs expand). Framework-source only."
40
- deps:
41
- - task: :engine:_ts-build
42
34
  cmds:
43
35
  - task: :engine:invoke
44
36
  vars:
@@ -46,8 +38,6 @@ tasks:
46
38
 
47
39
  biome-config:
48
40
  desc: "Guard against #2190 (biome check . flipping recommended-preset diagnostic severity between warning and error non-deterministically): asserts biome.json declares an explicit non-error severity for noUnusedVariables and noNonNullAssertion. Three-state exit (0 clean / 1 missing/error severity / 2 config error)."
49
- deps:
50
- - task: :engine:_ts-build
51
41
  # Framework-source-only gate: it reads THIS repo's own biome.json, so it
52
42
  # targets DEFT_ROOT (not USER_WORKING_DIR) -- a consumer deposit has no
53
43
  # TS engine / biome.json to guard. Mirrors verify:content-manifest.
@@ -58,8 +48,6 @@ tasks:
58
48
 
59
49
  telemetry-coverage:
60
50
  desc: "Dead-surface detector for run-summary event kinds (#3362). Every RUN_SUMMARY_EVENT_KINDS member needs a production caller and a field-shaped fixture. Default is warn-only; pass --enforce to fail closed. -- task verify:telemetry-coverage [-- --enforce]"
61
- deps:
62
- - task: :engine:_ts-build
63
51
  # Framework-source-only gate: scans THIS repo's packages/core/src emitters.
64
52
  cmds:
65
53
  - task: :engine:invoke
@@ -68,8 +56,6 @@ tasks:
68
56
 
69
57
  contained-writes:
70
58
  desc: "Inventory raw product write sinks outside the contained-write allowlist (#2951 / #2980). Default CLI remains fail-open; task check wires --enforce fail-closed. -- task verify:contained-writes [-- --enforce]"
71
- deps:
72
- - task: :engine:_ts-build
73
59
  # Framework-source-only gate: scans packages/core/src in THIS repo.
74
60
  cmds:
75
61
  - task: :engine:invoke
@@ -78,8 +64,6 @@ tasks:
78
64
 
79
65
  content-manifest:
80
66
  desc: "Verify the Content Manifest (conventions/content-manifest.json) classifies every git-tracked top-level entry (#1821). Fails on an unclassified entry, a stale classified path, an invalid bucket, or a duplicate path. Wave-1 shippability audit for the engine/content split (#1669)."
81
- deps:
82
- - task: :engine:_ts-build
83
67
  # Framework-source-only gate: it classifies THIS repo's top-level tree, so it
84
68
  # targets DEFT_ROOT (not USER_WORKING_DIR) -- a consumer install has no
85
69
  # content/ + engine/ top-level split to audit. Mirrors verify:rule-ownership.
@@ -90,8 +74,6 @@ tasks:
90
74
 
91
75
  deposit-closure:
92
76
  desc: "C1 declared deposit closure against a staged pack root (#3900 / #3601). Resolves contracts/deposit-required-paths.json; does not infer paths from AGENTS.md. Three-state (0 clean / 1 missing / 2 config)."
93
- deps:
94
- - task: :engine:_ts-build
95
77
  cmds:
96
78
  - task: :engine:invoke
97
79
  vars:
@@ -99,8 +81,6 @@ tasks:
99
81
 
100
82
  consumer-hard-stops:
101
83
  desc: "Enumerate open consumer hard-stops by privileged labels (adoption-blocker, blocks-release-tag) only (#3900 / #3713 / #3969). Does not read issue bodies. Fail-closed at release."
102
- deps:
103
- - task: :engine:_ts-build
104
84
  cmds:
105
85
  - task: :engine:invoke
106
86
  vars:
@@ -108,8 +88,6 @@ tasks:
108
88
 
109
89
  closing-keywords:
110
90
  desc: "Wire task pr:check-closing-keywords into the check graph (#737 / #3969). FP mode against the merge-base, or --pr when GITHUB_PR_NUMBER is set."
111
- deps:
112
- - task: :engine:_ts-build
113
91
  dir: '{{.USER_WORKING_DIR}}'
114
92
  cmds:
115
93
  - task: :engine:invoke
@@ -118,8 +96,6 @@ tasks:
118
96
 
119
97
  docs-impact:
120
98
  desc: "Declared-versus-touched documentation-impact check (#4099). --pr uses REST; --body-file for local. Fork PRs stay read-only."
121
- deps:
122
- - task: :engine:_ts-build
123
99
  dir: '{{.USER_WORKING_DIR}}'
124
100
  cmds:
125
101
  - task: :engine:invoke
@@ -135,8 +111,6 @@ tasks:
135
111
 
136
112
  skill-external-fetch-gate:
137
113
  desc: "Verify shipped skills do not pair external fetch/follow-through with execute/install without Security context mitigation (#1936 / #1532)."
138
- deps:
139
- - task: :engine:_ts-build
140
114
  # Framework-source-only gate: scans THIS repo's content/skills tree.
141
115
  cmds:
142
116
  - task: :engine:invoke
@@ -145,8 +119,6 @@ tasks:
145
119
 
146
120
  semantic-single-source:
147
121
  desc: "C2 semantic single-source conformance (#3600 / #3899): shipped authoring MUST lines name exactly one xBRIEF write version, the version setup writes. Fails on a mutated staged pack. Three-state (0 clean / 1 drift / 2 config). -- task verify:semantic-single-source [-- --project-root <pack-or-source>]"
148
- deps:
149
- - task: :engine:_ts-build
150
122
  # Framework-source-only gate: scans shipped authoring surfaces in THIS repo
151
123
  # (or a staged pack root via --project-root / --pack-root).
152
124
  cmds:
@@ -156,8 +128,6 @@ tasks:
156
128
 
157
129
  contract-drift:
158
130
  desc: "Drift gate for the public contract layer (#1799). Asserts packages/types/schemas/vbrief-core-0.6.schema.json matches content/vbrief/schemas/vbrief-core.schema.json and that @deftai/directive-types Status/version constants align with the schema. Three-state exit (0 clean / 1 drift / 2 config error)."
159
- deps:
160
- - task: :engine:_ts-build
161
131
  cmds:
162
132
  - task: :engine:invoke
163
133
  vars:
@@ -165,8 +135,6 @@ tasks:
165
135
 
166
136
  cursor-tier1:
167
137
  desc: "Framework-source content gate (#1877): assert Cursor (cursor-composer / cursor-cloud-agent, Task-tool primitive) is enumerated as a Tier-1 descriptor in the swarm Phase 3 capability matrix AND the review-cycle monitoring tier table. Fails when a doc edit drops the Cursor descriptor and silently re-opens the Tier-3 blocking-poll misclassification. Three-state exit (0 clean / 1 missing marker / 2 config error)."
168
- deps:
169
- - task: :engine:_ts-build
170
138
  # Framework-source-only gate: it scans THIS repo's two skill docs, so it
171
139
  # targets DEFT_ROOT (not USER_WORKING_DIR) -- a consumer install renders
172
140
  # these skills under .deft/core and does not author them. Mirrors
@@ -178,8 +146,6 @@ tasks:
178
146
 
179
147
  openclaw-tier1:
180
148
  desc: "Framework-source content gate (#2875): assert OpenClaw (openclaw descriptor, sessions_spawn primitive) is enumerated as Tier 1 in the swarm Phase 3 capability matrix AND routing accepts openclaw as a dispatch_provider. Fails when a doc/code edit drops the OpenClaw descriptor and silently re-opens grok-build / generic-terminal misclassification. Three-state exit (0 clean / 1 missing marker / 2 config error)."
181
- deps:
182
- - task: :engine:_ts-build
183
149
  # Framework-source-only gate: it scans THIS repo's swarm skill + routing
184
150
  # module, so it targets DEFT_ROOT (not USER_WORKING_DIR). Mirrors
185
151
  # verify:cursor-tier1 / verify:content-manifest.
@@ -190,8 +156,6 @@ tasks:
190
156
 
191
157
  go-freeze:
192
158
  desc: "Tier-1 freeze gate for the legacy Go-installer bridge (#1912). Advisory while the Tier-0 SoT (lastGoInstaller) is null; once the operator pins it, fails when cmd/deft-install is bumped above the frozen tag. Three-state exit (0 ok / 1 violation / 2 config error). Emergency bypass: DEFT_ALLOW_GO_INSTALLER_BUMP=1."
193
- deps:
194
- - task: :engine:_ts-build
195
159
  # Framework-source-only gate: it inspects THIS repo's cmd/deft-install
196
160
  # version constant + the Tier-0 SoT, so it targets DEFT_ROOT (not
197
161
  # USER_WORKING_DIR) -- a consumer install has no Go-installer source to
@@ -203,8 +167,6 @@ tasks:
203
167
 
204
168
  bridge-drift:
205
169
  desc: "Tier-1 cross-surface drift gate for the legacy Go-installer bridge (#1912). Asserts no surface marked with the bridge sentinel hardcodes a Go-installer version instead of reading the Tier-0 SoT (lastGoInstaller). Three-state exit (0 clean / 1 drift / 2 config error). Passes whether or not the UPGRADING/doctor surfaces exist yet."
206
- deps:
207
- - task: :engine:_ts-build
208
170
  # Framework-source-only gate: it scans THIS repo's bridge-version surfaces
209
171
  # against the Tier-0 SoT, so it targets DEFT_ROOT. Mirrors
210
172
  # verify:content-manifest / verify:scm-boundary.
@@ -216,8 +178,6 @@ tasks:
216
178
  branch:
217
179
  desc: "Detection-bound branch-protection gate (#747). Reads plan.policy.allowDirectCommitsToMaster from PROJECT-DEFINITION."
218
180
  dir: '{{.USER_WORKING_DIR}}'
219
- deps:
220
- - task: :engine:_ts-build
221
181
  cmds:
222
182
  - task: :engine:invoke
223
183
  vars:
@@ -244,8 +204,6 @@ tasks:
244
204
  # cached skip would return a stale verdict.
245
205
  desc: "Validate GitHub auth from the worker envelope (#1557): host-gh vs injected-token mode, gh auth status, and API reachability. Fails closed on missing_injected_token in cloud-headless. -- task verify:gh-auth [-- --json] [--repo OWNER/NAME] [--github-auth-mode host-gh|injected-token]"
246
206
  dir: '{{.USER_WORKING_DIR}}'
247
- deps:
248
- - task: :engine:_ts-build
249
207
  cmds:
250
208
  # Bare CLI_ARGS per the verify:encoding convention -- go-task shell-escapes pass-through args.
251
209
  - task: :engine:invoke
@@ -255,8 +213,6 @@ tasks:
255
213
  routing:
256
214
  desc: "Operator coding sub-agent model routing gate (#1739). Pre-dispatch (default): fails when a dispatched worker role has no decision in .deft/routing.local.json. Pass --advise for the non-blocking session-start disclosure; --roles a,b to widen the gated set; --provider to override the runtime."
257
215
  dir: '{{.USER_WORKING_DIR}}'
258
- deps:
259
- - task: :engine:_ts-build
260
216
  cmds:
261
217
  # Bare CLI_ARGS per the verify:encoding convention -- go-task shell-escapes pass-through args.
262
218
  - task: :engine:invoke
@@ -266,8 +222,6 @@ tasks:
266
222
  hooks-installed:
267
223
  desc: "Assert the deft git hooks are installed AND functional -- core.hooksPath set, hooks dir + pre-commit/pre-push present, and the gate scripts resolve in this layout (own-repo or vendored). Fails loud on the #1463 false-green (wired but non-functional). Run `task setup` / re-run the installer if this fails (#747, #1463)."
268
224
  dir: '{{.USER_WORKING_DIR}}'
269
- deps:
270
- - task: :engine:_ts-build
271
225
  # No sources:/generates: -- a cached cmds skip would mask a hooks dir /
272
226
  # gate-script that was deleted after the last run.
273
227
  cmds:
@@ -279,8 +233,6 @@ tasks:
279
233
  encoding:
280
234
  desc: "Detect PS 5.1 non-ASCII round-trip corruption (#798). Scans tracked text files for U+FFFD, CP1252/CP437-as-UTF-8 mojibake, and unexpected BOM. Defaults to --all; pass --staged for the pre-commit invocation."
281
235
  dir: '{{.USER_WORKING_DIR}}'
282
- deps:
283
- - task: :engine:_ts-build
284
236
  # Per `conventions/task-caching.md`: NO `sources:` / `generates:` because
285
237
  # user-facing flags (--staged / --all / --allow-list <path>) MUST NOT be
286
238
  # silently swallowed by go-task's incremental-build cache. The same
@@ -296,8 +248,6 @@ tasks:
296
248
  forward-coverage:
297
249
  desc: "Forward-coverage gate (#1310 / #3514): fail-closed when a NEW source file is added without a corresponding test in the SAME diff; also report uncovered added/modified branches by intersecting coverage-final.json with the diff (warn-first; --enforce fail-closes). The 90% per-diff threshold is not the 75 global floor. Defaults to the HEAD-relative diff; pass --staged for pre-commit. Three-state exit (0 clean or warn / 1 missing existence or enforced diff findings / 2 config error)."
298
250
  dir: '{{.USER_WORKING_DIR}}'
299
- deps:
300
- - task: :engine:_ts-build
301
251
  # Per `conventions/task-caching.md`: NO `sources:` / `generates:` because
302
252
  # user-facing flags (--staged / --head / --allow-list <path> / --quiet / --enforce) MUST
303
253
  # NOT be silently swallowed by go-task's incremental-build cache (same
@@ -310,8 +260,6 @@ tasks:
310
260
  changelog-unreleased:
311
261
  desc: "Fail-closed CHANGELOG.md [Unreleased] has at least one `- ` entry (#633). Alias of changelog-check --against-merge-base; same Unreleased language as task change:changelog:check. Framework-source merge-chokepoint only. Fails when the Unreleased `- ` set is unchanged versus merge-base."
312
262
  dir: '{{.USER_WORKING_DIR}}'
313
- deps:
314
- - task: :engine:_ts-build
315
263
  cmds:
316
264
  - task: :engine:invoke
317
265
  vars:
@@ -320,8 +268,6 @@ tasks:
320
268
  test-boundary:
321
269
  desc: "Test/source boundary gate (#3145): reject recognized test artifacts under production roots and production references to test/fixture roots unless allowlisted or classified production-liveness. Policy from .deft/test-boundary.policy.json or plan.policy.testBoundary; defaults are warn-only (migration). Flags: --enforce / --warn / --policy <path> / --quiet. Three-state exit (0 clean or warn / 1 violation / 2 config)."
322
270
  dir: '{{.USER_WORKING_DIR}}'
323
- deps:
324
- - task: :engine:_ts-build
325
271
  cmds:
326
272
  - task: :engine:invoke
327
273
  vars:
@@ -330,8 +276,6 @@ tasks:
330
276
  class-checks:
331
277
  desc: "Fail-closed class checks (#4980 / #3145 class): diff-scoped vs merge base for test-under-source, production→test-root refs, test identity in infra, and protected-glob story mixes. Independent of file_scope digests and verify:test-boundary warn mode. No approve/skip/phrase. Flags: --base-ref / --quiet. Three-state exit (0 clean / 1 violation / 2 config)."
332
278
  dir: '{{.USER_WORKING_DIR}}'
333
- deps:
334
- - task: :engine:_ts-build
335
279
  cmds:
336
280
  - task: :engine:invoke
337
281
  vars:
@@ -340,8 +284,6 @@ tasks:
340
284
  scope-provenance:
341
285
  desc: "Scope provenance gate (#3145 / #4956 / #4774 / #5057): merge-base file_scope is the production fence; membership fail-closes undeclared product paths. Soft findings are advisory intent-pin drift on a brief with no intent pin (#3385). --enforce is parsed for compatibility and does not change the exit code. Flags: --base-ref / --enforce / --quiet. Three-state exit (0 clean or advisory WARN / 1 fence or membership / 2 config)."
342
286
  dir: '{{.USER_WORKING_DIR}}'
343
- deps:
344
- - task: :engine:_ts-build
345
287
  cmds:
346
288
  - task: :engine:invoke
347
289
  vars:
@@ -350,8 +292,6 @@ tasks:
350
292
  observable-scope:
351
293
  desc: "Fail-closed observable UI scope contract (#4495): minted allowedChanges versus parse5+typescript oracle on base-pinned surfaces. Unset policy plus UI file types is inferred-defaults-warn (exit 0 with findings). Flags: --origin-ref / --staged / --quiet. Three-state exit (0 skip/warn/pass / 1 unlisted delta or missing mint / 2 config). Does not accept --base-ref."
352
294
  dir: '{{.USER_WORKING_DIR}}'
353
- deps:
354
- - task: :engine:_ts-build
355
295
  cmds:
356
296
  - task: :engine:invoke
357
297
  vars:
@@ -360,8 +300,6 @@ tasks:
360
300
  presentation-coverage:
361
301
  desc: "Fail-closed presentation-coverage compositor (#5079): under a recorded presentation ceiling, cannot-evaluate on a composed required gate is refuse or escalate, never pass. Arms from any add-only or tightening head restriction. Flags: --origin-ref / --staged / --plan-id / --json / --quiet. Three-state exit (0 off-ceiling or continue / 1 refuse / 2 config). Does not accept --base-ref."
362
302
  dir: '{{.USER_WORKING_DIR}}'
363
- deps:
364
- - task: :engine:_ts-build
365
303
  cmds:
366
304
  - task: :engine:invoke
367
305
  vars:
@@ -370,8 +308,6 @@ tasks:
370
308
  intent-constraint:
371
309
  desc: "Fail-closed intent-constraint snapshot (#4541): throw/reject/abort sites and new numeric consts in changed production .ts/.js versus merge-base pin. Human mint for value/unit/rejectionScope. Tests and in-scope paths are not authority. Flags: --origin-ref / --staged / --quiet. Three-state exit (0 skip/pass / 1 unapproved fact or missing mint / 2 config). Does not accept --base-ref."
372
310
  dir: '{{.USER_WORKING_DIR}}'
373
- deps:
374
- - task: :engine:_ts-build
375
311
  cmds:
376
312
  - task: :engine:invoke
377
313
  vars:
@@ -380,8 +316,6 @@ tasks:
380
316
  presentation-ceiling:
381
317
  desc: "Fail-closed presentation ceiling (#5056): under a recorded changeClass: presentation restriction, changed paths outside the built-in presentation extension set refuse. Arms from merge-base ceiling artifacts; first-PR add-only restrictions compose. Flags: --base-ref / --quiet. Three-state exit (0 skip or pass / 1 refuse / 2 config)."
382
318
  dir: '{{.USER_WORKING_DIR}}'
383
- deps:
384
- - task: :engine:_ts-build
385
319
  cmds:
386
320
  - task: :engine:invoke
387
321
  vars:
@@ -390,8 +324,6 @@ tasks:
390
324
  durable-effect-acquisition:
391
325
  desc: "Fail-closed in-class durable-effect acquisition under a presentation ceiling (#5080). Consumes the #5056 ceiling artifact. Refuses storage, cookies, non-GET or non-sentinel network, and markup submission in changed .tsx/.jsx/.html. skipped/N/A is not an exit under an armed ceiling. Flags: --origin-ref / --quiet. Three-state exit (0 off-ceiling or pass / 1 refuse / 2 config)."
392
326
  dir: '{{.USER_WORKING_DIR}}'
393
- deps:
394
- - task: :engine:_ts-build
395
327
  cmds:
396
328
  - task: :engine:invoke
397
329
  vars:
@@ -400,8 +332,6 @@ tasks:
400
332
  evaluator-surface:
401
333
  desc: "Declared evaluator-surface diff gate (#4386 / #3156): fail when Taskfile.yml, tasks/verify.yml, gate-lists, coverage config, or the detector itself changes without xbrief/evaluator-surface-disposition.json covering those paths. Disclosure only -- a commit-body issue/PR URL is not #3164 authorization. Prior color is unobserved. Flags: --base-ref / --staged / --path / --quiet. Three-state exit (0 skip or disclosed / 1 missing disposition / 2 config)."
402
334
  dir: '{{.USER_WORKING_DIR}}'
403
- deps:
404
- - task: :engine:_ts-build
405
335
  cmds:
406
336
  - task: :engine:invoke
407
337
  vars:
@@ -410,8 +340,6 @@ tasks:
410
340
  consumer-test-lane:
411
341
  desc: "Consumer declared-test-command lane (#4386): run plan.policy.testCommand or package.json scripts.test. Skip when undeclared -- do not invent go test ./... or a shipped-library default. Does not replace verify:ac (PRODUCT_FIRST_AC_GATE). Flags: --quiet. Three-state exit (0 skip or pass / 1 declared command failed / 2 config)."
412
342
  dir: '{{.USER_WORKING_DIR}}'
413
- deps:
414
- - task: :engine:_ts-build
415
343
  cmds:
416
344
  - task: :engine:invoke
417
345
  vars:
@@ -420,8 +348,6 @@ tasks:
420
348
  consumer-check-contract:
421
349
  desc: "Consumer check-composition contract (#3145): fail when tasks/verify.yml or check aggregate omit required enforcement gates (verify:test-boundary, verify:class-checks, verify:scope-provenance, verify:consumer-check-contract, verify:evaluator-surface, verify:observable-scope, verify:intent-constraint, verify:presentation-ceiling, verify:durable-effect-acquisition). CI omissions warn by default. Flags: --framework-source / --enforce / --warn / --quiet. Three-state exit (0 clean or warn / 1 missing / 2 config)."
422
350
  dir: '{{.USER_WORKING_DIR}}'
423
- deps:
424
- - task: :engine:_ts-build
425
351
  cmds:
426
352
  - task: :engine:invoke
427
353
  vars:
@@ -430,8 +356,6 @@ tasks:
430
356
  vbrief-conformance:
431
357
  desc: "Detect bare non-conformant vBRIEF keys (#1620). Scans tracked vbrief/**/*.vbrief.json and flags any document/plan/item key that is not 0.6 spec-core, x-directive/-namespaced, or x-vbrief/-namespaced. plan.policy + plan.completedNote carry a TEMPORARY allow-list pending vBRIEF #12. Defaults to --all; pass --staged for the pre-commit invocation."
432
358
  dir: '{{.USER_WORKING_DIR}}'
433
- deps:
434
- - task: :engine:_ts-build
435
359
  # Per `conventions/task-caching.md`: NO `sources:` / `generates:` because
436
360
  # user-facing flags (--staged / --all / --allow-list <path>) MUST NOT be
437
361
  # silently swallowed by go-task's incremental-build cache (same rationale
@@ -445,8 +369,6 @@ tasks:
445
369
  destructive-gh-verbs:
446
370
  desc: "Detection-bound gate for destructive gh verbs (#1019). Runs preflight-gh --self-test so the fixture-vs-classifier contract fails CI on drift. Override via DEFT_ALLOW_DESTRUCTIVE_GH_VERBS=1 (per-shell emergency bypass)."
447
371
  dir: '{{.USER_WORKING_DIR}}'
448
- deps:
449
- - task: :engine:_ts-build
450
372
  # No sources:/generates: -- the self-test fixture table is the
451
373
  # invariant under test; we want the gate to re-run on every
452
374
  # `task check` invocation regardless of whether the classifier file
@@ -478,8 +400,6 @@ tasks:
478
400
  codebase-map-fresh:
479
401
  desc: "Drift gate for the generated .planning/codebase/MAP.md projection (#1595 PR4)."
480
402
  dir: '{{.USER_WORKING_DIR}}'
481
- deps:
482
- - task: :engine:_ts-build
483
403
  # Per conventions/task-caching.md: no sources/generates because this gate
484
404
  # forwards output/artifact overrides through CLI_ARGS.
485
405
  cmds:
@@ -491,8 +411,6 @@ tasks:
491
411
  spec-prd-fresh:
492
412
  desc: "Fail-closed SPECIFICATION.md / PRD.md render-freshness gate (#4086). Re-renders to a buffer and fails on banner or projection diff. Banner canon and full projection freshness are separate assertions. Modeled on verify:codebase-map-fresh."
493
413
  dir: '{{.USER_WORKING_DIR}}'
494
- deps:
495
- - task: :engine:_ts-build
496
414
  # Per conventions/task-caching.md: no sources/generates because this gate
497
415
  # forwards project-root through CLI_ARGS.
498
416
  cmds:
@@ -510,8 +428,6 @@ tasks:
510
428
  Distinct from fail-closed verify:spec-prd-fresh. Consumer alias:
511
429
  task deft:verify:spec-drift.
512
430
  dir: '{{.USER_WORKING_DIR}}'
513
- deps:
514
- - task: :engine:_ts-build
515
431
  cmds:
516
432
  - task: :engine:invoke
517
433
  vars:
@@ -520,8 +436,6 @@ tasks:
520
436
  rule-map-fresh:
521
437
  desc: "Fail-closed docs/RULE-MAP.md renderer freshness (#4095). Alias for docs:rule-map:check. Asserts byte-identical renderer output, filled grouping purposes, pack entries from named arrays, and Taskfile declaration counts. Not a consumer gate."
522
438
  dir: '{{.USER_WORKING_DIR}}'
523
- deps:
524
- - task: :engine:_ts-build
525
439
  cmds:
526
440
  - task: :docs:rule-map:check
527
441
 
@@ -539,8 +453,6 @@ tasks:
539
453
  plan-sequence:
540
454
  desc: "Fail-closed ordered-plan target check (#2402). Flags: --target-kind <kind> --target <id> / --json. Skips (exit 0) when no active sequence."
541
455
  dir: '{{.USER_WORKING_DIR}}'
542
- deps:
543
- - task: :engine:_ts-build
544
456
  cmds:
545
457
  - task: :engine:invoke
546
458
  vars:
@@ -559,8 +471,6 @@ tasks:
559
471
  scm-boundary:
560
472
  desc: "Detection-bound gate against raw `gh` / `ghx` subprocess calls (#1145 / N5). TypeScript verbs route through packages/core/src/scm/call.ts. The scanner still globs retired scripts/triage_*.py paths (vacuous; owner packages/core/src/verify-source/scm-boundary.ts SCOPE_GLOBS). Three-state exit (0 clean / 1 violations / 2 config error). Document an exception via `--allow-list <path>`."
561
473
  dir: '{{.USER_WORKING_DIR}}'
562
- deps:
563
- - task: :engine:_ts-build
564
474
  # Per `conventions/task-caching.md` (#574): NO `sources:` / `generates:`
565
475
  # because the gate forwards user-facing flags via {{.CLI_ARGS}}
566
476
  # (`--allow-list <path>` / `--quiet`) that go-task's incremental-build
@@ -574,8 +484,6 @@ tasks:
574
484
  xbrief-drift:
575
485
  desc: "Data-plane drift gate for the #2109 vbrief->xbrief rename. FAILS when a NEW legacy-layout token is reintroduced: a tracked `*.vbrief.json` artifact, a tracked file under a top-level `vbrief/` lifecycle dir, or a bare `x-vbrief/` reference type inside a canonical `xbrief/**/*.xbrief.json` corpus artifact. Sanctioned back-compat shims (the Part 1 layout-resolver fallback, the EXTENSION_PREFIXES legacy entry, the #2110 migrate path, the #1650 policy fallback) are TS source -- outside the scanned data plane -- and the legacy fixture trees (tests/, content/vbrief/, docs/, history/, xbrief/migration/) are allowlisted. Three-state exit (0 clean / 1 drift / 2 config error). Document an exception via `--allow-list <path>`."
576
486
  dir: '{{.USER_WORKING_DIR}}'
577
- deps:
578
- - task: :engine:_ts-build
579
487
  # Per `conventions/task-caching.md` (#574): NO `sources:` / `generates:`
580
488
  # because the gate forwards user-facing flags via {{.CLI_ARGS}}
581
489
  # (`--allow-list <path>` / `--staged` / `--quiet`) that go-task's
@@ -588,8 +496,6 @@ tasks:
588
496
  story-ready:
589
497
  desc: "Deterministic story-start Gate 0 (#1378 Story C). Inspects working-tree cleanliness, the target vBRIEF lifecycle (active/ + plan.status==running), and the dispatch envelope's `## Allocation context` consent token (Story A schema). Three-state exit (0 ready / 1 not ready / 2 config error). -- task verify:story-ready -- --vbrief-path <active-story-path> [--allocation-context <dispatch-envelope-file>] [--allow-dirty] [--json]"
590
498
  dir: '{{.USER_WORKING_DIR}}'
591
- deps:
592
- - task: :engine:_ts-build
593
499
  # Per `conventions/task-caching.md` (#574): NO `sources:` / `generates:`
594
500
  # because the gate forwards user-facing flags via {{.CLI_ARGS}}
595
501
  # (--vbrief-path / --allocation-context / --allow-dirty / --json) that
@@ -606,8 +512,6 @@ tasks:
606
512
  investigation:
607
513
  desc: "Validate a forensic investigation ledger (#1621). Promotes the forensic-research validator into a deterministic gate: the close check before Wave 5 / any causal chat. Three-state exit (0 close-ready / 1 hard failures / 2 config error). Intentionally NOT in the `task check` aggregate -- it requires a concrete --ledger path. -- task verify:investigation -- --ledger .tmp/investigations/<id>/investigation.xbrief.json [--json]"
608
514
  dir: '{{.USER_WORKING_DIR}}'
609
- deps:
610
- - task: :engine:_ts-build
611
515
  # Per `conventions/task-caching.md` (#574): NO `sources:` / `generates:`
612
516
  # because the gate forwards user-facing flags via {{.CLI_ARGS}}
613
517
  # (--ledger / --json) that go-task's incremental-build cache would
@@ -621,8 +525,6 @@ tasks:
621
525
  architecture-sor:
622
526
  desc: "Diff-time system-of-record architecture gate. Scans stateful persistence signals and requires a matching architecture.systemOfRecord record. Example: task verify:architecture-sor -- --base-ref origin/main [--story-path <path>]"
623
527
  dir: '{{.USER_WORKING_DIR}}'
624
- deps:
625
- - task: :engine:_ts-build
626
528
  # Per conventions/task-caching.md: no sources/generates because this gate
627
529
  # forwards --base-ref, --story-path, and --json through CLI_ARGS.
628
530
  cmds:
@@ -634,8 +536,6 @@ tasks:
634
536
  capacity:
635
537
  desc: "Three-state ADVISORY capacity gate (#1419 Slice 4). Reports trailing-window target-vs-actual bucket mix from plan.policy.capacityAllocation; exits 0 in the default advise posture (and on insufficient sample / unconfigured policy), 1 only under an explicit enforce posture with a sampled deficit, 2 on config error. DELIBERATELY NOT in the `task check` aggregate -- capacity must never fail-closed on the framework tree."
636
538
  dir: '{{.USER_WORKING_DIR}}'
637
- deps:
638
- - task: :engine:_ts-build
639
539
  # Per `conventions/task-caching.md` (#574): NO `sources:` / `generates:`
640
540
  # because the gate forwards user-facing flags via {{.CLI_ARGS}}
641
541
  # (--project-root / --quiet) that go-task's incremental-build cache would
@@ -651,8 +551,6 @@ tasks:
651
551
  judgment-gates:
652
552
  desc: "Three-state ADVISORY judgment-gate engine (#1419 Slice 3). Evaluates a candidate change (diff paths / labels / body) against plan.policy.judgmentGates + four default-on universal safety gates (secrets / infra / AGENTS.md+skills / installer). Advisory by default (always exits 0); opt-in --enforce fails closed (exit 1) when a mechanical block-tier gate fires without a recorded clearance; exit 2 on config error. -- task verify:judgment-gates [-- --base-ref <ref>] [--path P] [--label L] [--enforce] [--json]. DELIBERATELY NOT in the `task check` aggregate -- judgment gates must never fail-closed on the framework tree (advise -> observe -> block rollout, #1419)."
653
553
  dir: '{{.USER_WORKING_DIR}}'
654
- deps:
655
- - task: :engine:_ts-build
656
554
  # Per `conventions/task-caching.md` (#574): NO `sources:` / `generates:`
657
555
  # because the gate forwards user-facing flags via {{.CLI_ARGS}}
658
556
  # (--base-ref / --path / --label / --body / --state / --enforce / --json /
@@ -670,8 +568,6 @@ tasks:
670
568
  wip-cap:
671
569
  desc: "Pre-merge re-validation that pending/+active/ count is within plan.policy.wipCap (#1124 / D4 of #1119). Catches stale-branch merges + --force overrides. Default cap is 20 (#2319; raised from the original 10 per umbrella #1119 Current Shape v3). The framework's own task check passes --allow-over-cap during landing-day overage; consumer projects MUST NOT pass that flag."
672
570
  dir: '{{.USER_WORKING_DIR}}'
673
- deps:
674
- - task: :engine:_ts-build
675
571
  # Per `conventions/task-caching.md` (#574): NO `sources:` /
676
572
  # `generates:` because the gate forwards user-facing flags via
677
573
  # {{.CLI_ARGS}} (--allow-over-cap / --quiet) that go-task's
@@ -690,8 +586,6 @@ tasks:
690
586
  lifecycle-visible:
691
587
  desc: "Warn when git ignore/exclude/skip-worktree hides xbrief/vbrief lifecycle roots (#3505), including file-only and date-range globs. Per-clone, not per-commit — not on task check. Default warn-only; pass --enforce to fail closed. -- task verify:lifecycle-visible [-- --enforce]"
692
588
  dir: '{{.USER_WORKING_DIR}}'
693
- deps:
694
- - task: :engine:_ts-build
695
589
  cmds:
696
590
  - task: :engine:invoke
697
591
  vars:
@@ -700,8 +594,6 @@ tasks:
700
594
  orphan-active:
701
595
  desc: "Fail-closed orphan-active guard (#2321 / #3429). Detects xbrief/active/ briefs with plan.status==running whose referenced GitHub issues are all closed and/or whose linked PR is merged — the stop-at:pr-open lifecycle leak. Confirmed shipped remediates with task scope:complete / scope:cancel or swarm finalize. Unresolved GitHub lookup still exits 1 but prints a retry, not scope:complete. Three-state exit (0 clean / 1 orphan / 2 config). Pass --issue N to scan one origin after merge; --changed-only [--base-ref <ref>] for the merge-chokepoint form that evaluates only briefs the candidate's own diff touches (#3893; falls back to the repo-wide sweep at the delivery tip or on an unresolvable base ref); --skip-gh to rely on triage cache only. Issue state resolves by query shape (#3767): scoped --issue N takes an authoritative read and stays fail-closed on unknown; the unscoped sweep uses one complete open-issue inventory and stays fail-open on unknown. A cache hit counts only within 15 minutes, and every run prints the basis of its verdict — see content/docs/orphan-active-verdict-basis.md."
702
596
  dir: '{{.USER_WORKING_DIR}}'
703
- deps:
704
- - task: :engine:_ts-build
705
597
  cmds:
706
598
  - task: :engine:invoke
707
599
  vars:
@@ -710,8 +602,6 @@ tasks:
710
602
  pr-closeout-attestable:
711
603
  desc: "Fail-closed merge-time closeout gate (#3781). Refuses a merge when the PR's structured closing references name an issue whose brief is still running in xbrief/active/ with acceptance criteria carrying neither x-directive/evidence nor x-directive/disposition. The trigger is the closing reference, not the branch diff — CI runs before the merge and the issue closes on it, so a diff-keyed gate can never fail the PR that creates the orphan. Reuses evaluateAcceptanceEvidenceGate, the same rule scope:complete enforces. A PR that leaves an unattested brief WITHOUT closing its issue is unaffected. Three-state exit (0 attestable or closes nothing / 1 unattested closeout / 2 config or closing-reference lookup error). -- task verify:pr-closeout-attestable -- --pr N [--repo OWNER/REPO]"
712
604
  dir: '{{.USER_WORKING_DIR}}'
713
- deps:
714
- - task: :engine:_ts-build
715
605
  cmds:
716
606
  - task: :engine:invoke
717
607
  vars:
@@ -720,8 +610,6 @@ tasks:
720
610
  completed-write-guard:
721
611
  desc: "Fail-closed completed/ write guard (#3679). Newly added xbrief/completed/ (or vbrief/completed/) artifacts must have been written by scope:complete / scope:fail. Historical corpus is advisory via doctor. Remediation names the leftover land PR (#3476). Three-state exit (0 clean / 1 unguarded add / 2 config). Does not change verify:completed-tracked."
722
612
  dir: '{{.USER_WORKING_DIR}}'
723
- deps:
724
- - task: :engine:_ts-build
725
613
  cmds:
726
614
  - task: :engine:invoke
727
615
  vars:
@@ -730,8 +618,6 @@ tasks:
730
618
  persisted-planning-narratives:
731
619
  desc: "Fail-closed PROJECT-DEFINITION planning narratives gate (#5176 Prefer-A). Default = unconditional setup Phase 2 bar (empty Overview+tech stack → exit 1; missing PD → exit 2). --check-conjunct = Taskfile/check Prefer-A mirror (marker present/unreadable + empty → refuse; missing PD / scaffold-empty without marker → pass) for check:merge / check:consumer. Mid-setup parse may still accept empty strings. Remedy: deft project:write-narratives. Three-state exit (0 pass / 1 refuse / 2 config)."
732
620
  dir: '{{.USER_WORKING_DIR}}'
733
- deps:
734
- - task: :engine:_ts-build
735
621
  cmds:
736
622
  - task: :engine:invoke
737
623
  vars:
@@ -740,8 +626,6 @@ tasks:
740
626
  consumer-header-placeholder:
741
627
  desc: "Fail-closed first-ship AGENTS header placeholder gate (#4544 Prefer-A). Refuses when product-mutation completion still leaves the unmanaged header on the exact scaffold edit-me one-liner; Process-only and custom headers pass. Three-state exit (0 pass / 1 refuse / 2 config)."
742
628
  dir: '{{.USER_WORKING_DIR}}'
743
- deps:
744
- - task: :engine:_ts-build
745
629
  cmds:
746
630
  - task: :engine:invoke
747
631
  vars:
@@ -750,8 +634,6 @@ tasks:
750
634
  completed-tracked:
751
635
  desc: "Fail-closed completed-tracked land guard (#3264 / #1358 / #3476). Closed scoped GitHub issues with a known lifecycle xBRIEF origin must have a tracked xbrief/completed/ or xbrief/cancelled/ artifact on the delivery tip. --issue N is the drive-to DONE form. Remediation: task swarm:finalize-cohort or a lifecycle PR. Three-state exit (0 clean / 1 missing land / 2 config). Pass --skip-gh to rely on triage cache only; --tip to override delivery tip."
752
636
  dir: '{{.USER_WORKING_DIR}}'
753
- deps:
754
- - task: :engine:_ts-build
755
637
  cmds:
756
638
  - task: :engine:invoke
757
639
  vars:
@@ -760,8 +642,6 @@ tasks:
760
642
  literal-ac:
761
643
  desc: "Literal acceptance-command verification (#3267). Run stated acceptance commands from the active (or --xbrief) scope artifact VERBATIM before done — same flags/cwd. Capture-only audit: --capture-only. Three-state exit (0 pass or none stated / 1 command failed / 2 config). Extends #973; required on ceremony dial rapid/minimal (#3214). Prefer verify:ac (#3284) as the product-first primary name."
762
644
  dir: '{{.USER_WORKING_DIR}}'
763
- deps:
764
- - task: :engine:_ts-build
765
645
  cmds:
766
646
  - task: :engine:invoke
767
647
  vars:
@@ -770,8 +650,6 @@ tasks:
770
650
  ac:
771
651
  desc: "Product-first acceptance gate (#3284). Runs plan.acceptance.commands (or #3267 literal ledger) FIRST and never skippable when commands exist. Check composition uses --soft-missing-xbrief. Rapid ceremony = AC-only; pressure/degraded makes hygiene advisory. Capture-only: --capture-only. Three-state exit (0 pass or none / 1 fail / 2 config). Architecture for #3267."
772
652
  dir: '{{.USER_WORKING_DIR}}'
773
- deps:
774
- - task: :engine:_ts-build
775
653
  cmds:
776
654
  - task: :engine:invoke
777
655
  vars:
@@ -780,8 +658,6 @@ tasks:
780
658
  agents-md-budget:
781
659
  desc: "Layered AGENTS.md budget instrument (#645 + #2450). Fail-closed relative ratchet: counts the managed section and the unmanaged region separately (the #1309 propagation duplicates content across the marker) and fails when either region grows past plan.policy.agentsMdBudget. Seeded at current size, so it ships green; growth past the ratchet fails. ADVISORY absolute north-star: also reports managed-section size vs ≤8 KB / ~2k tok (#2372 layered instrument) without affecting exit codes in Wave 1. Three-state exit (0 within / 1 over ratchet / 2 config error)."
782
660
  dir: '{{.USER_WORKING_DIR}}'
783
- deps:
784
- - task: :engine:_ts-build
785
661
  # Per `conventions/task-caching.md` (#574): NO `sources:` / `generates:`
786
662
  # because the gate forwards user-facing flags via {{.CLI_ARGS}} (--quiet).
787
663
  cmds:
@@ -792,8 +668,6 @@ tasks:
792
668
  eval-health-relocation:
793
669
  desc: "Fail-closed eval:health no-regression gate for epic #2369 rule-relocation PRs (#2373). Classifies diffs touching AGENTS.md, content/templates/agents-entry.md, content/skills/**/SKILL.md, or content/packs/** and requires eval:health to not regress against the committed baseline at xbrief/.eval/results/eval-health-baseline.json. Skips (exit 0) when no relocation paths are in the diff. Seed baseline once with --seed-baseline after master is healthy. Three-state exit (0 pass or skip / 1 regression / 2 config error). -- task verify:eval-health-relocation [-- --base-ref <ref> | --staged] [--quiet] [--seed-baseline]"
794
670
  dir: '{{.USER_WORKING_DIR}}'
795
- deps:
796
- - task: :engine:_ts-build
797
671
  cmds:
798
672
  - task: :engine:invoke
799
673
  vars:
@@ -802,8 +676,6 @@ tasks:
802
676
  eval-triggers-relocation:
803
677
  desc: "Fail-closed eval:triggers gate when AGENTS.md / REFERENCES.md / trigger cases change (#1586). Skips (exit 0) when the diff does not touch trigger-routing homes. -- task verify:eval-triggers-relocation [-- --base-ref <ref> | --staged] [--quiet]"
804
678
  dir: '{{.USER_WORKING_DIR}}'
805
- deps:
806
- - task: :engine:_ts-build
807
679
  cmds:
808
680
  - task: :engine:invoke
809
681
  vars:
@@ -812,8 +684,6 @@ tasks:
812
684
  agents-md-advisory:
813
685
  desc: "ADVISORY (never fail-closing) consumer AGENTS.md legibility signal (#2155). Counts the UNMANAGED (project-authored) region only -- the framework-owned managed section is excluded -- and compares it against the SOFT, operator-adjustable budget plan.policy.agentsMdAdvisory.unmanagedSoftMaxLines (generous default when unset). Consumer companion to the maintainer-only #645 ratchet; deliberately NOT a check:consumer dependency (advise->observe->enforce per #1419). Default posture ALWAYS exits 0; the opt-in --enforce flag promotes an over-budget region to a hard cap (exit 1). Raising the field is the documented, no-friction way to accept growth and silence the nudge."
814
686
  dir: '{{.USER_WORKING_DIR}}'
815
- deps:
816
- - task: :engine:_ts-build
817
687
  # Per `conventions/task-caching.md` (#574): NO `sources:` / `generates:`
818
688
  # because the gate forwards user-facing flags via {{.CLI_ARGS}} (--quiet / --enforce).
819
689
  cmds:
@@ -824,8 +694,6 @@ tasks:
824
694
  review-monitor:
825
695
  desc: "Fail-closed review-monitor gate (#2655): when Tier 1 sub-agent primitive is available, require a recorded active review-monitor before yield / Approach 3 / review ownership. Three-state exit (0 ready / 1 not ready / 2 config error)."
826
696
  dir: '{{.USER_WORKING_DIR}}'
827
- deps:
828
- - task: :engine:_ts-build
829
697
  cmds:
830
698
  - task: :engine:invoke
831
699
  vars:
@@ -834,8 +702,6 @@ tasks:
834
702
  cohort-review-monitors:
835
703
  desc: "Fail-closed cohort babysit inventory (#5318): classify each listed PR armed-live / halted-explicit / unarmed via per-PR merge-path-arm --live-wait. Exit 0 only when all listed are armed-live or halted-explicit; empty/malformed PR set exit 2. swarm:verify-review-clean CLEAN does not satisfy this inventory."
836
704
  dir: '{{.USER_WORKING_DIR}}'
837
- deps:
838
- - task: :engine:_ts-build
839
705
  cmds:
840
706
  - task: :engine:invoke
841
707
  vars:
@@ -844,8 +710,6 @@ tasks:
844
710
  l4-owner:
845
711
  desc: "Owner Continuity / L4 owner gate (#3090): exit 0 only if sticky review-owner lease is fresh or --review-cycle done (forbid freeform started/pending). Three-state exit (0 ready / 1 silent hold / 2 config)."
846
712
  dir: '{{.USER_WORKING_DIR}}'
847
- deps:
848
- - task: :engine:_ts-build
849
713
  cmds:
850
714
  - task: :engine:invoke
851
715
  vars:
@@ -854,8 +718,6 @@ tasks:
854
718
  subagent-alive:
855
719
  desc: "Fail-closed worker liveness gate (#2824): missing/STALE heartbeats for in-flight drive-to:merge* workers exit 1 with REDISPATCH_OK. Three-state exit (0 alive / 1 stale-or-missing / 2 config error)."
856
720
  dir: '{{.USER_WORKING_DIR}}'
857
- deps:
858
- - task: :engine:_ts-build
859
721
  cmds:
860
722
  - task: :engine:invoke
861
723
  vars:
@@ -864,8 +726,6 @@ tasks:
864
726
  subagent-steer:
865
727
  desc: "Parent-visible unread steer flag (#4286): exit 1 is STEER_PENDING, not REDISPATCH_OK. Three-state exit (0 none / 1 unread / 2 config)."
866
728
  dir: '{{.USER_WORKING_DIR}}'
867
- deps:
868
- - task: :engine:_ts-build
869
729
  cmds:
870
730
  - task: :engine:invoke
871
731
  vars:
@@ -19,8 +19,6 @@ tasks:
19
19
  # resolve. Refs #1487 (the recurrence the cohort-close gate prevents).
20
20
  desc: "Validate xBRIEF lifecycle folder structure and cross-file consistency. Alias of vbrief:validate with xbrief-first naming (#3483)."
21
21
  dir: '{{.USER_WORKING_DIR}}'
22
- deps:
23
- - task: :engine:_ts-build
24
22
  cmds:
25
23
  # Layout-aware (#2109 part 2a): pass --project-root and let the engine
26
24
  # resolve the lifecycle dir (xbrief when migrated, else vbrief).
@@ -35,8 +33,6 @@ tasks:
35
33
  # Legacy `task vbrief:preflight -- <path>` remains accepted for the same gate.
36
34
  desc: "Preflight an implementation-intent gate (#810): exits 0 only when the xBRIEF is in xbrief/active/ AND plan.status == 'running'. Alias of vbrief:preflight with xbrief-first help."
37
35
  dir: '{{.USER_WORKING_DIR}}'
38
- deps:
39
- - task: :engine:_ts-build
40
36
  cmds:
41
37
  - task: :engine:invoke
42
38
  vars:
@@ -55,8 +51,6 @@ tasks:
55
51
  # skip would silently swallow it.
56
52
  desc: "Activate an xBRIEF: pending/ -> active/ (status: running). Idempotent. Alias of vbrief:activate with xbrief-first naming (#810 / #3483)."
57
53
  dir: '{{.USER_WORKING_DIR}}'
58
- deps:
59
- - task: :engine:_ts-build
60
54
  cmds:
61
55
  - task: :engine:invoke
62
56
  vars:
@@ -58,8 +58,11 @@ Read, do not restate:
58
58
  | Variant selection | Stop 2 — Variant selection |
59
59
  | Parent-facing dispatch rules | Parent-facing dispatch rules |
60
60
  | Critic method | Critic method |
61
+ | Bound remedy thinness (Thin Fail-Closed #3265) | Critic method / Successor lean |
61
62
  | Envelope and ceiling | Envelope and ceiling |
62
63
  | Pain-audit targeting | Pain coverage / Yolo leftover-pain |
64
+ | Writing-bar footnote PA posture (#3368) | Pain coverage (#4496) |
65
+ | Remint Bound remedy for mechanism change only | Successor lean |
63
66
  | Seat families / Grok Build launcher | Envelope and ceiling |
64
67
  | Comment lead (model then role) | Stop 3 — Critic envelope |
65
68
  | Fresh reiteration | Stop 4 — Residual reiteration |