@kontourai/flow-agents 4.0.0 → 4.1.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 (451) hide show
  1. package/.github/workflows/ci.yml +8 -0
  2. package/CHANGELOG.md +27 -0
  3. package/CONTEXT.md +5 -0
  4. package/agents/tool-security-reviewer.json +1 -1
  5. package/build/src/cli/init.js +35 -3
  6. package/build/src/cli/kit.js +95 -2
  7. package/build/src/cli/pull-work-provider.js +7 -1
  8. package/build/src/cli/validate-workflow-artifacts.js +53 -0
  9. package/build/src/cli/workflow.js +5 -1
  10. package/build/src/flow-kit/provision.d.ts +23 -0
  11. package/build/src/flow-kit/provision.js +99 -0
  12. package/build/src/flow-kit/validate.d.ts +52 -0
  13. package/build/src/flow-kit/validate.js +214 -9
  14. package/build/src/runtime-adapters.js +1 -1
  15. package/context/contracts/execution-contract.md +30 -1
  16. package/context/contracts/review-contract.md +4 -0
  17. package/context/contracts/trigger-guards.md +73 -0
  18. package/context/settings/backlog-provider-settings.json +1 -1
  19. package/context/settings/workspace-backlog-provider-settings.example.json +1 -1
  20. package/dist/base/build/package.json +1 -1
  21. package/dist/base/build/src/cli/init.js +35 -3
  22. package/dist/base/build/src/cli/kit.js +95 -2
  23. package/dist/base/build/src/cli/pull-work-provider.js +7 -1
  24. package/dist/base/build/src/cli/validate-workflow-artifacts.js +53 -0
  25. package/dist/base/build/src/cli/workflow.js +5 -1
  26. package/dist/base/build/src/flow-kit/provision.d.ts +23 -0
  27. package/dist/base/build/src/flow-kit/provision.js +99 -0
  28. package/dist/base/build/src/flow-kit/validate.d.ts +52 -0
  29. package/dist/base/build/src/flow-kit/validate.js +214 -9
  30. package/dist/base/build/src/runtime-adapters.js +1 -1
  31. package/dist/base/context/contracts/execution-contract.md +30 -1
  32. package/dist/base/context/contracts/review-contract.md +4 -0
  33. package/dist/base/context/contracts/trigger-guards.md +73 -0
  34. package/dist/base/context/settings/backlog-provider-settings.json +1 -1
  35. package/dist/base/context/settings/workspace-backlog-provider-settings.example.json +1 -1
  36. package/dist/base/docs/adr/0023-kit-provisioning.md +47 -0
  37. package/dist/base/docs/adr/index.md +1 -0
  38. package/dist/base/docs/architecture-engine-and-kits.md +17 -0
  39. package/dist/base/docs/context-map.md +3 -0
  40. package/dist/base/docs/decisions/backlog-readiness-source.md +89 -0
  41. package/dist/base/docs/decisions/index.md +1 -0
  42. package/dist/base/docs/developer-architecture.md +3 -3
  43. package/dist/base/docs/flow-kit-repository-contract.md +34 -3
  44. package/dist/base/docs/kit-authoring-guide.md +1 -1
  45. package/dist/base/docs/veritas-integration.md +12 -0
  46. package/dist/base/evals/ci/run-baseline.sh +4 -0
  47. package/dist/base/evals/integration/test_kit_provisioning.sh +112 -0
  48. package/dist/base/evals/integration/test_pull_work_provider.sh +18 -0
  49. package/dist/base/evals/integration/test_veritas_governance_kit.sh +256 -0
  50. package/dist/base/evals/integration/test_workflow_artifacts.sh +257 -0
  51. package/dist/base/evals/static/test_package.sh +6 -0
  52. package/dist/base/evals/static/test_workflow_skills.sh +16 -0
  53. package/dist/base/install.sh +1 -1
  54. package/dist/base/kits/builder/flows/publish-learn.flow.json +9 -1
  55. package/dist/base/kits/builder/skills/execute-plan/SKILL.md +4 -3
  56. package/dist/base/kits/builder/skills/pull-work/SKILL.md +12 -0
  57. package/dist/base/kits/builder/skills/review-work/SKILL.md +11 -0
  58. package/dist/base/kits/veritas-governance/adapter/readiness-to-trust-bundle.mjs +19 -20
  59. package/dist/base/kits/veritas-governance/assets/starter-hooks/githooks/post-commit +13 -0
  60. package/dist/base/kits/veritas-governance/assets/starter-hooks/githooks/pre-push +13 -0
  61. package/dist/base/kits/veritas-governance/assets/starter-standards/veritas/GOVERNANCE.md +23 -0
  62. package/dist/base/kits/veritas-governance/assets/starter-standards/veritas/README.md +58 -0
  63. package/dist/base/kits/veritas-governance/assets/starter-standards/veritas/authority/default.authority-settings.json +30 -0
  64. package/dist/base/kits/veritas-governance/assets/starter-standards/veritas/repo-map.json +115 -0
  65. package/dist/base/kits/veritas-governance/assets/starter-standards/veritas/repo-standards/default.repo-standards.json +54 -0
  66. package/dist/base/kits/veritas-governance/assets/starter-standards/veritas.claims.json +179 -0
  67. package/dist/base/kits/veritas-governance/docs/README.md +141 -10
  68. package/dist/base/kits/veritas-governance/fixtures/standards-authoring/approved.trust-bundle.json +74 -0
  69. package/dist/base/kits/veritas-governance/fixtures/standards-authoring/not-approved.trust-bundle.json +74 -0
  70. package/dist/base/kits/veritas-governance/flows/standards-authoring.flow.json +35 -0
  71. package/dist/base/kits/veritas-governance/kit.json +65 -0
  72. package/dist/base/kits/veritas-governance/skills/consult-standards/SKILL.md +73 -0
  73. package/dist/base/kits/veritas-governance/skills/standards-authoring/SKILL.md +87 -0
  74. package/dist/base/schemas/backlog-provider-settings.schema.json +1 -1
  75. package/dist/base/schemas/workflow-waves.schema.json +347 -0
  76. package/dist/base/scripts/check-layer-boundary.mjs +98 -0
  77. package/dist/catalog.json +2 -0
  78. package/dist/claude-code/.claude/agents/tool-security-reviewer.md +2 -1
  79. package/dist/claude-code/.claude/skills/consult-standards/SKILL.md +73 -0
  80. package/dist/claude-code/.claude/skills/execute-plan/SKILL.md +4 -3
  81. package/dist/claude-code/.claude/skills/pull-work/SKILL.md +12 -0
  82. package/dist/claude-code/.claude/skills/review-work/SKILL.md +11 -0
  83. package/dist/claude-code/.claude/skills/standards-authoring/SKILL.md +87 -0
  84. package/dist/claude-code/build/package.json +1 -1
  85. package/dist/claude-code/build/src/cli/init.js +35 -3
  86. package/dist/claude-code/build/src/cli/kit.js +95 -2
  87. package/dist/claude-code/build/src/cli/pull-work-provider.js +7 -1
  88. package/dist/claude-code/build/src/cli/validate-workflow-artifacts.js +53 -0
  89. package/dist/claude-code/build/src/cli/workflow.js +5 -1
  90. package/dist/claude-code/build/src/flow-kit/provision.d.ts +23 -0
  91. package/dist/claude-code/build/src/flow-kit/provision.js +99 -0
  92. package/dist/claude-code/build/src/flow-kit/validate.d.ts +52 -0
  93. package/dist/claude-code/build/src/flow-kit/validate.js +214 -9
  94. package/dist/claude-code/build/src/runtime-adapters.js +1 -1
  95. package/dist/claude-code/context/contracts/execution-contract.md +30 -1
  96. package/dist/claude-code/context/contracts/review-contract.md +4 -0
  97. package/dist/claude-code/context/contracts/trigger-guards.md +73 -0
  98. package/dist/claude-code/context/settings/backlog-provider-settings.json +1 -1
  99. package/dist/claude-code/context/settings/workspace-backlog-provider-settings.example.json +1 -1
  100. package/dist/claude-code/docs/adr/0023-kit-provisioning.md +47 -0
  101. package/dist/claude-code/docs/adr/index.md +1 -0
  102. package/dist/claude-code/docs/architecture-engine-and-kits.md +17 -0
  103. package/dist/claude-code/docs/context-map.md +3 -0
  104. package/dist/claude-code/docs/decisions/backlog-readiness-source.md +89 -0
  105. package/dist/claude-code/docs/decisions/index.md +1 -0
  106. package/dist/claude-code/docs/developer-architecture.md +3 -3
  107. package/dist/claude-code/docs/flow-kit-repository-contract.md +34 -3
  108. package/dist/claude-code/docs/kit-authoring-guide.md +1 -1
  109. package/dist/claude-code/docs/veritas-integration.md +12 -0
  110. package/dist/claude-code/evals/ci/run-baseline.sh +4 -0
  111. package/dist/claude-code/evals/integration/test_kit_provisioning.sh +112 -0
  112. package/dist/claude-code/evals/integration/test_pull_work_provider.sh +18 -0
  113. package/dist/claude-code/evals/integration/test_veritas_governance_kit.sh +256 -0
  114. package/dist/claude-code/evals/integration/test_workflow_artifacts.sh +257 -0
  115. package/dist/claude-code/evals/static/test_package.sh +6 -0
  116. package/dist/claude-code/evals/static/test_workflow_skills.sh +16 -0
  117. package/dist/claude-code/install.sh +1 -1
  118. package/dist/claude-code/kits/builder/flows/publish-learn.flow.json +9 -1
  119. package/dist/claude-code/kits/builder/skills/execute-plan/SKILL.md +4 -3
  120. package/dist/claude-code/kits/builder/skills/pull-work/SKILL.md +12 -0
  121. package/dist/claude-code/kits/builder/skills/review-work/SKILL.md +11 -0
  122. package/dist/claude-code/kits/veritas-governance/adapter/readiness-to-trust-bundle.mjs +19 -20
  123. package/dist/claude-code/kits/veritas-governance/assets/starter-hooks/githooks/post-commit +13 -0
  124. package/dist/claude-code/kits/veritas-governance/assets/starter-hooks/githooks/pre-push +13 -0
  125. package/dist/claude-code/kits/veritas-governance/assets/starter-standards/veritas/GOVERNANCE.md +23 -0
  126. package/dist/claude-code/kits/veritas-governance/assets/starter-standards/veritas/README.md +58 -0
  127. package/dist/claude-code/kits/veritas-governance/assets/starter-standards/veritas/authority/default.authority-settings.json +30 -0
  128. package/dist/claude-code/kits/veritas-governance/assets/starter-standards/veritas/repo-map.json +115 -0
  129. package/dist/claude-code/kits/veritas-governance/assets/starter-standards/veritas/repo-standards/default.repo-standards.json +54 -0
  130. package/dist/claude-code/kits/veritas-governance/assets/starter-standards/veritas.claims.json +179 -0
  131. package/dist/claude-code/kits/veritas-governance/docs/README.md +141 -10
  132. package/dist/claude-code/kits/veritas-governance/fixtures/standards-authoring/approved.trust-bundle.json +74 -0
  133. package/dist/claude-code/kits/veritas-governance/fixtures/standards-authoring/not-approved.trust-bundle.json +74 -0
  134. package/dist/claude-code/kits/veritas-governance/flows/standards-authoring.flow.json +35 -0
  135. package/dist/claude-code/kits/veritas-governance/kit.json +65 -0
  136. package/dist/claude-code/kits/veritas-governance/skills/consult-standards/SKILL.md +73 -0
  137. package/dist/claude-code/kits/veritas-governance/skills/standards-authoring/SKILL.md +87 -0
  138. package/dist/claude-code/schemas/backlog-provider-settings.schema.json +1 -1
  139. package/dist/claude-code/schemas/workflow-waves.schema.json +347 -0
  140. package/dist/claude-code/scripts/check-layer-boundary.mjs +98 -0
  141. package/dist/codex/.agents/skills/builder-shape/context/contracts/execution-contract.md +30 -1
  142. package/dist/codex/.agents/skills/consult-standards/SKILL.md +73 -0
  143. package/dist/codex/.agents/skills/deliver/context/contracts/execution-contract.md +30 -1
  144. package/dist/codex/.agents/skills/design-probe/context/contracts/execution-contract.md +30 -1
  145. package/dist/codex/.agents/skills/execute-plan/SKILL.md +4 -3
  146. package/dist/codex/.agents/skills/execute-plan/context/contracts/execution-contract.md +30 -1
  147. package/dist/codex/.agents/skills/fix-bug/context/contracts/execution-contract.md +30 -1
  148. package/dist/codex/.agents/skills/idea-to-backlog/context/contracts/execution-contract.md +30 -1
  149. package/dist/codex/.agents/skills/plan-work/context/contracts/execution-contract.md +30 -1
  150. package/dist/codex/.agents/skills/pull-work/SKILL.md +12 -0
  151. package/dist/codex/.agents/skills/pull-work/context/contracts/execution-contract.md +30 -1
  152. package/dist/codex/.agents/skills/review-work/SKILL.md +11 -0
  153. package/dist/codex/.agents/skills/review-work/context/contracts/execution-contract.md +30 -1
  154. package/dist/codex/.agents/skills/standards-authoring/SKILL.md +87 -0
  155. package/dist/codex/.agents/skills/tdd-workflow/context/contracts/execution-contract.md +30 -1
  156. package/dist/codex/.agents/skills/verify-work/context/contracts/execution-contract.md +30 -1
  157. package/dist/codex/.codex/agents/tool-security-reviewer.toml +1 -1
  158. package/dist/codex/build/package.json +1 -1
  159. package/dist/codex/build/src/cli/init.js +35 -3
  160. package/dist/codex/build/src/cli/kit.js +95 -2
  161. package/dist/codex/build/src/cli/pull-work-provider.js +7 -1
  162. package/dist/codex/build/src/cli/validate-workflow-artifacts.js +53 -0
  163. package/dist/codex/build/src/cli/workflow.js +5 -1
  164. package/dist/codex/build/src/flow-kit/provision.d.ts +23 -0
  165. package/dist/codex/build/src/flow-kit/provision.js +99 -0
  166. package/dist/codex/build/src/flow-kit/validate.d.ts +52 -0
  167. package/dist/codex/build/src/flow-kit/validate.js +214 -9
  168. package/dist/codex/build/src/runtime-adapters.js +1 -1
  169. package/dist/codex/context/contracts/execution-contract.md +30 -1
  170. package/dist/codex/context/contracts/review-contract.md +4 -0
  171. package/dist/codex/context/contracts/trigger-guards.md +73 -0
  172. package/dist/codex/context/settings/backlog-provider-settings.json +1 -1
  173. package/dist/codex/context/settings/workspace-backlog-provider-settings.example.json +1 -1
  174. package/dist/codex/docs/adr/0023-kit-provisioning.md +47 -0
  175. package/dist/codex/docs/adr/index.md +1 -0
  176. package/dist/codex/docs/architecture-engine-and-kits.md +17 -0
  177. package/dist/codex/docs/context-map.md +3 -0
  178. package/dist/codex/docs/decisions/backlog-readiness-source.md +89 -0
  179. package/dist/codex/docs/decisions/index.md +1 -0
  180. package/dist/codex/docs/developer-architecture.md +3 -3
  181. package/dist/codex/docs/flow-kit-repository-contract.md +34 -3
  182. package/dist/codex/docs/kit-authoring-guide.md +1 -1
  183. package/dist/codex/docs/veritas-integration.md +12 -0
  184. package/dist/codex/evals/ci/run-baseline.sh +4 -0
  185. package/dist/codex/evals/integration/test_kit_provisioning.sh +112 -0
  186. package/dist/codex/evals/integration/test_pull_work_provider.sh +18 -0
  187. package/dist/codex/evals/integration/test_veritas_governance_kit.sh +256 -0
  188. package/dist/codex/evals/integration/test_workflow_artifacts.sh +257 -0
  189. package/dist/codex/evals/static/test_package.sh +6 -0
  190. package/dist/codex/evals/static/test_workflow_skills.sh +16 -0
  191. package/dist/codex/install.sh +1 -1
  192. package/dist/codex/kits/builder/flows/publish-learn.flow.json +9 -1
  193. package/dist/codex/kits/builder/skills/execute-plan/SKILL.md +4 -3
  194. package/dist/codex/kits/builder/skills/pull-work/SKILL.md +12 -0
  195. package/dist/codex/kits/builder/skills/review-work/SKILL.md +11 -0
  196. package/dist/codex/kits/veritas-governance/adapter/readiness-to-trust-bundle.mjs +19 -20
  197. package/dist/codex/kits/veritas-governance/assets/starter-hooks/githooks/post-commit +13 -0
  198. package/dist/codex/kits/veritas-governance/assets/starter-hooks/githooks/pre-push +13 -0
  199. package/dist/codex/kits/veritas-governance/assets/starter-standards/veritas/GOVERNANCE.md +23 -0
  200. package/dist/codex/kits/veritas-governance/assets/starter-standards/veritas/README.md +58 -0
  201. package/dist/codex/kits/veritas-governance/assets/starter-standards/veritas/authority/default.authority-settings.json +30 -0
  202. package/dist/codex/kits/veritas-governance/assets/starter-standards/veritas/repo-map.json +115 -0
  203. package/dist/codex/kits/veritas-governance/assets/starter-standards/veritas/repo-standards/default.repo-standards.json +54 -0
  204. package/dist/codex/kits/veritas-governance/assets/starter-standards/veritas.claims.json +179 -0
  205. package/dist/codex/kits/veritas-governance/docs/README.md +141 -10
  206. package/dist/codex/kits/veritas-governance/fixtures/standards-authoring/approved.trust-bundle.json +74 -0
  207. package/dist/codex/kits/veritas-governance/fixtures/standards-authoring/not-approved.trust-bundle.json +74 -0
  208. package/dist/codex/kits/veritas-governance/flows/standards-authoring.flow.json +35 -0
  209. package/dist/codex/kits/veritas-governance/kit.json +65 -0
  210. package/dist/codex/kits/veritas-governance/skills/consult-standards/SKILL.md +73 -0
  211. package/dist/codex/kits/veritas-governance/skills/standards-authoring/SKILL.md +87 -0
  212. package/dist/codex/schemas/backlog-provider-settings.schema.json +1 -1
  213. package/dist/codex/schemas/workflow-waves.schema.json +347 -0
  214. package/dist/codex/scripts/check-layer-boundary.mjs +98 -0
  215. package/dist/kiro/agents/tool-security-reviewer.json +1 -1
  216. package/dist/kiro/build/package.json +1 -1
  217. package/dist/kiro/build/src/cli/init.js +35 -3
  218. package/dist/kiro/build/src/cli/kit.js +95 -2
  219. package/dist/kiro/build/src/cli/pull-work-provider.js +7 -1
  220. package/dist/kiro/build/src/cli/validate-workflow-artifacts.js +53 -0
  221. package/dist/kiro/build/src/cli/workflow.js +5 -1
  222. package/dist/kiro/build/src/flow-kit/provision.d.ts +23 -0
  223. package/dist/kiro/build/src/flow-kit/provision.js +99 -0
  224. package/dist/kiro/build/src/flow-kit/validate.d.ts +52 -0
  225. package/dist/kiro/build/src/flow-kit/validate.js +214 -9
  226. package/dist/kiro/build/src/runtime-adapters.js +1 -1
  227. package/dist/kiro/context/contracts/execution-contract.md +30 -1
  228. package/dist/kiro/context/contracts/review-contract.md +4 -0
  229. package/dist/kiro/context/contracts/trigger-guards.md +73 -0
  230. package/dist/kiro/context/settings/backlog-provider-settings.json +1 -1
  231. package/dist/kiro/context/settings/workspace-backlog-provider-settings.example.json +1 -1
  232. package/dist/kiro/docs/adr/0023-kit-provisioning.md +47 -0
  233. package/dist/kiro/docs/adr/index.md +1 -0
  234. package/dist/kiro/docs/architecture-engine-and-kits.md +17 -0
  235. package/dist/kiro/docs/context-map.md +3 -0
  236. package/dist/kiro/docs/decisions/backlog-readiness-source.md +89 -0
  237. package/dist/kiro/docs/decisions/index.md +1 -0
  238. package/dist/kiro/docs/developer-architecture.md +3 -3
  239. package/dist/kiro/docs/flow-kit-repository-contract.md +34 -3
  240. package/dist/kiro/docs/kit-authoring-guide.md +1 -1
  241. package/dist/kiro/docs/veritas-integration.md +12 -0
  242. package/dist/kiro/evals/ci/run-baseline.sh +4 -0
  243. package/dist/kiro/evals/integration/test_kit_provisioning.sh +112 -0
  244. package/dist/kiro/evals/integration/test_pull_work_provider.sh +18 -0
  245. package/dist/kiro/evals/integration/test_veritas_governance_kit.sh +256 -0
  246. package/dist/kiro/evals/integration/test_workflow_artifacts.sh +257 -0
  247. package/dist/kiro/evals/static/test_package.sh +6 -0
  248. package/dist/kiro/evals/static/test_workflow_skills.sh +16 -0
  249. package/dist/kiro/install.sh +1 -1
  250. package/dist/kiro/kits/builder/flows/publish-learn.flow.json +9 -1
  251. package/dist/kiro/kits/builder/skills/execute-plan/SKILL.md +4 -3
  252. package/dist/kiro/kits/builder/skills/pull-work/SKILL.md +12 -0
  253. package/dist/kiro/kits/builder/skills/review-work/SKILL.md +11 -0
  254. package/dist/kiro/kits/veritas-governance/adapter/readiness-to-trust-bundle.mjs +19 -20
  255. package/dist/kiro/kits/veritas-governance/assets/starter-hooks/githooks/post-commit +13 -0
  256. package/dist/kiro/kits/veritas-governance/assets/starter-hooks/githooks/pre-push +13 -0
  257. package/dist/kiro/kits/veritas-governance/assets/starter-standards/veritas/GOVERNANCE.md +23 -0
  258. package/dist/kiro/kits/veritas-governance/assets/starter-standards/veritas/README.md +58 -0
  259. package/dist/kiro/kits/veritas-governance/assets/starter-standards/veritas/authority/default.authority-settings.json +30 -0
  260. package/dist/kiro/kits/veritas-governance/assets/starter-standards/veritas/repo-map.json +115 -0
  261. package/dist/kiro/kits/veritas-governance/assets/starter-standards/veritas/repo-standards/default.repo-standards.json +54 -0
  262. package/dist/kiro/kits/veritas-governance/assets/starter-standards/veritas.claims.json +179 -0
  263. package/dist/kiro/kits/veritas-governance/docs/README.md +141 -10
  264. package/dist/kiro/kits/veritas-governance/fixtures/standards-authoring/approved.trust-bundle.json +74 -0
  265. package/dist/kiro/kits/veritas-governance/fixtures/standards-authoring/not-approved.trust-bundle.json +74 -0
  266. package/dist/kiro/kits/veritas-governance/flows/standards-authoring.flow.json +35 -0
  267. package/dist/kiro/kits/veritas-governance/kit.json +65 -0
  268. package/dist/kiro/kits/veritas-governance/skills/consult-standards/SKILL.md +73 -0
  269. package/dist/kiro/kits/veritas-governance/skills/standards-authoring/SKILL.md +87 -0
  270. package/dist/kiro/schemas/backlog-provider-settings.schema.json +1 -1
  271. package/dist/kiro/schemas/workflow-waves.schema.json +347 -0
  272. package/dist/kiro/scripts/check-layer-boundary.mjs +98 -0
  273. package/dist/opencode/.opencode/agents/tool-security-reviewer.md +2 -1
  274. package/dist/opencode/.opencode/skills/consult-standards/SKILL.md +73 -0
  275. package/dist/opencode/.opencode/skills/execute-plan/SKILL.md +4 -3
  276. package/dist/opencode/.opencode/skills/pull-work/SKILL.md +12 -0
  277. package/dist/opencode/.opencode/skills/review-work/SKILL.md +11 -0
  278. package/dist/opencode/.opencode/skills/standards-authoring/SKILL.md +87 -0
  279. package/dist/opencode/build/package.json +1 -1
  280. package/dist/opencode/build/src/cli/init.js +35 -3
  281. package/dist/opencode/build/src/cli/kit.js +95 -2
  282. package/dist/opencode/build/src/cli/pull-work-provider.js +7 -1
  283. package/dist/opencode/build/src/cli/validate-workflow-artifacts.js +53 -0
  284. package/dist/opencode/build/src/cli/workflow.js +5 -1
  285. package/dist/opencode/build/src/flow-kit/provision.d.ts +23 -0
  286. package/dist/opencode/build/src/flow-kit/provision.js +99 -0
  287. package/dist/opencode/build/src/flow-kit/validate.d.ts +52 -0
  288. package/dist/opencode/build/src/flow-kit/validate.js +214 -9
  289. package/dist/opencode/build/src/runtime-adapters.js +1 -1
  290. package/dist/opencode/context/contracts/execution-contract.md +30 -1
  291. package/dist/opencode/context/contracts/review-contract.md +4 -0
  292. package/dist/opencode/context/contracts/trigger-guards.md +73 -0
  293. package/dist/opencode/context/settings/backlog-provider-settings.json +1 -1
  294. package/dist/opencode/context/settings/workspace-backlog-provider-settings.example.json +1 -1
  295. package/dist/opencode/docs/adr/0023-kit-provisioning.md +47 -0
  296. package/dist/opencode/docs/adr/index.md +1 -0
  297. package/dist/opencode/docs/architecture-engine-and-kits.md +17 -0
  298. package/dist/opencode/docs/context-map.md +3 -0
  299. package/dist/opencode/docs/decisions/backlog-readiness-source.md +89 -0
  300. package/dist/opencode/docs/decisions/index.md +1 -0
  301. package/dist/opencode/docs/developer-architecture.md +3 -3
  302. package/dist/opencode/docs/flow-kit-repository-contract.md +34 -3
  303. package/dist/opencode/docs/kit-authoring-guide.md +1 -1
  304. package/dist/opencode/docs/veritas-integration.md +12 -0
  305. package/dist/opencode/evals/ci/run-baseline.sh +4 -0
  306. package/dist/opencode/evals/integration/test_kit_provisioning.sh +112 -0
  307. package/dist/opencode/evals/integration/test_pull_work_provider.sh +18 -0
  308. package/dist/opencode/evals/integration/test_veritas_governance_kit.sh +256 -0
  309. package/dist/opencode/evals/integration/test_workflow_artifacts.sh +257 -0
  310. package/dist/opencode/evals/static/test_package.sh +6 -0
  311. package/dist/opencode/evals/static/test_workflow_skills.sh +16 -0
  312. package/dist/opencode/install.sh +1 -1
  313. package/dist/opencode/kits/builder/flows/publish-learn.flow.json +9 -1
  314. package/dist/opencode/kits/builder/skills/execute-plan/SKILL.md +4 -3
  315. package/dist/opencode/kits/builder/skills/pull-work/SKILL.md +12 -0
  316. package/dist/opencode/kits/builder/skills/review-work/SKILL.md +11 -0
  317. package/dist/opencode/kits/veritas-governance/adapter/readiness-to-trust-bundle.mjs +19 -20
  318. package/dist/opencode/kits/veritas-governance/assets/starter-hooks/githooks/post-commit +13 -0
  319. package/dist/opencode/kits/veritas-governance/assets/starter-hooks/githooks/pre-push +13 -0
  320. package/dist/opencode/kits/veritas-governance/assets/starter-standards/veritas/GOVERNANCE.md +23 -0
  321. package/dist/opencode/kits/veritas-governance/assets/starter-standards/veritas/README.md +58 -0
  322. package/dist/opencode/kits/veritas-governance/assets/starter-standards/veritas/authority/default.authority-settings.json +30 -0
  323. package/dist/opencode/kits/veritas-governance/assets/starter-standards/veritas/repo-map.json +115 -0
  324. package/dist/opencode/kits/veritas-governance/assets/starter-standards/veritas/repo-standards/default.repo-standards.json +54 -0
  325. package/dist/opencode/kits/veritas-governance/assets/starter-standards/veritas.claims.json +179 -0
  326. package/dist/opencode/kits/veritas-governance/docs/README.md +141 -10
  327. package/dist/opencode/kits/veritas-governance/fixtures/standards-authoring/approved.trust-bundle.json +74 -0
  328. package/dist/opencode/kits/veritas-governance/fixtures/standards-authoring/not-approved.trust-bundle.json +74 -0
  329. package/dist/opencode/kits/veritas-governance/flows/standards-authoring.flow.json +35 -0
  330. package/dist/opencode/kits/veritas-governance/kit.json +65 -0
  331. package/dist/opencode/kits/veritas-governance/skills/consult-standards/SKILL.md +73 -0
  332. package/dist/opencode/kits/veritas-governance/skills/standards-authoring/SKILL.md +87 -0
  333. package/dist/opencode/schemas/backlog-provider-settings.schema.json +1 -1
  334. package/dist/opencode/schemas/workflow-waves.schema.json +347 -0
  335. package/dist/opencode/scripts/check-layer-boundary.mjs +98 -0
  336. package/dist/pi/.pi/skills/consult-standards/SKILL.md +73 -0
  337. package/dist/pi/.pi/skills/execute-plan/SKILL.md +4 -3
  338. package/dist/pi/.pi/skills/pull-work/SKILL.md +12 -0
  339. package/dist/pi/.pi/skills/review-work/SKILL.md +11 -0
  340. package/dist/pi/.pi/skills/standards-authoring/SKILL.md +87 -0
  341. package/dist/pi/build/package.json +1 -1
  342. package/dist/pi/build/src/cli/init.js +35 -3
  343. package/dist/pi/build/src/cli/kit.js +95 -2
  344. package/dist/pi/build/src/cli/pull-work-provider.js +7 -1
  345. package/dist/pi/build/src/cli/validate-workflow-artifacts.js +53 -0
  346. package/dist/pi/build/src/cli/workflow.js +5 -1
  347. package/dist/pi/build/src/flow-kit/provision.d.ts +23 -0
  348. package/dist/pi/build/src/flow-kit/provision.js +99 -0
  349. package/dist/pi/build/src/flow-kit/validate.d.ts +52 -0
  350. package/dist/pi/build/src/flow-kit/validate.js +214 -9
  351. package/dist/pi/build/src/runtime-adapters.js +1 -1
  352. package/dist/pi/context/contracts/execution-contract.md +30 -1
  353. package/dist/pi/context/contracts/review-contract.md +4 -0
  354. package/dist/pi/context/contracts/trigger-guards.md +73 -0
  355. package/dist/pi/context/settings/backlog-provider-settings.json +1 -1
  356. package/dist/pi/context/settings/workspace-backlog-provider-settings.example.json +1 -1
  357. package/dist/pi/docs/adr/0023-kit-provisioning.md +47 -0
  358. package/dist/pi/docs/adr/index.md +1 -0
  359. package/dist/pi/docs/architecture-engine-and-kits.md +17 -0
  360. package/dist/pi/docs/context-map.md +3 -0
  361. package/dist/pi/docs/decisions/backlog-readiness-source.md +89 -0
  362. package/dist/pi/docs/decisions/index.md +1 -0
  363. package/dist/pi/docs/developer-architecture.md +3 -3
  364. package/dist/pi/docs/flow-kit-repository-contract.md +34 -3
  365. package/dist/pi/docs/kit-authoring-guide.md +1 -1
  366. package/dist/pi/docs/veritas-integration.md +12 -0
  367. package/dist/pi/evals/ci/run-baseline.sh +4 -0
  368. package/dist/pi/evals/integration/test_kit_provisioning.sh +112 -0
  369. package/dist/pi/evals/integration/test_pull_work_provider.sh +18 -0
  370. package/dist/pi/evals/integration/test_veritas_governance_kit.sh +256 -0
  371. package/dist/pi/evals/integration/test_workflow_artifacts.sh +257 -0
  372. package/dist/pi/evals/static/test_package.sh +6 -0
  373. package/dist/pi/evals/static/test_workflow_skills.sh +16 -0
  374. package/dist/pi/install.sh +1 -1
  375. package/dist/pi/kits/builder/flows/publish-learn.flow.json +9 -1
  376. package/dist/pi/kits/builder/skills/execute-plan/SKILL.md +4 -3
  377. package/dist/pi/kits/builder/skills/pull-work/SKILL.md +12 -0
  378. package/dist/pi/kits/builder/skills/review-work/SKILL.md +11 -0
  379. package/dist/pi/kits/veritas-governance/adapter/readiness-to-trust-bundle.mjs +19 -20
  380. package/dist/pi/kits/veritas-governance/assets/starter-hooks/githooks/post-commit +13 -0
  381. package/dist/pi/kits/veritas-governance/assets/starter-hooks/githooks/pre-push +13 -0
  382. package/dist/pi/kits/veritas-governance/assets/starter-standards/veritas/GOVERNANCE.md +23 -0
  383. package/dist/pi/kits/veritas-governance/assets/starter-standards/veritas/README.md +58 -0
  384. package/dist/pi/kits/veritas-governance/assets/starter-standards/veritas/authority/default.authority-settings.json +30 -0
  385. package/dist/pi/kits/veritas-governance/assets/starter-standards/veritas/repo-map.json +115 -0
  386. package/dist/pi/kits/veritas-governance/assets/starter-standards/veritas/repo-standards/default.repo-standards.json +54 -0
  387. package/dist/pi/kits/veritas-governance/assets/starter-standards/veritas.claims.json +179 -0
  388. package/dist/pi/kits/veritas-governance/docs/README.md +141 -10
  389. package/dist/pi/kits/veritas-governance/fixtures/standards-authoring/approved.trust-bundle.json +74 -0
  390. package/dist/pi/kits/veritas-governance/fixtures/standards-authoring/not-approved.trust-bundle.json +74 -0
  391. package/dist/pi/kits/veritas-governance/flows/standards-authoring.flow.json +35 -0
  392. package/dist/pi/kits/veritas-governance/kit.json +65 -0
  393. package/dist/pi/kits/veritas-governance/skills/consult-standards/SKILL.md +73 -0
  394. package/dist/pi/kits/veritas-governance/skills/standards-authoring/SKILL.md +87 -0
  395. package/dist/pi/schemas/backlog-provider-settings.schema.json +1 -1
  396. package/dist/pi/schemas/workflow-waves.schema.json +347 -0
  397. package/dist/pi/scripts/check-layer-boundary.mjs +98 -0
  398. package/docs/adr/0023-kit-provisioning.md +47 -0
  399. package/docs/adr/index.md +1 -0
  400. package/docs/architecture-engine-and-kits.md +17 -0
  401. package/docs/context-map.md +3 -0
  402. package/docs/decisions/backlog-readiness-source.md +89 -0
  403. package/docs/decisions/index.md +1 -0
  404. package/docs/developer-architecture.md +3 -3
  405. package/docs/flow-kit-repository-contract.md +34 -3
  406. package/docs/kit-authoring-guide.md +1 -1
  407. package/docs/veritas-integration.md +12 -0
  408. package/evals/ci/run-baseline.sh +4 -0
  409. package/evals/integration/test_kit_provisioning.sh +112 -0
  410. package/evals/integration/test_pull_work_provider.sh +18 -0
  411. package/evals/integration/test_veritas_governance_kit.sh +256 -0
  412. package/evals/integration/test_workflow_artifacts.sh +257 -0
  413. package/evals/static/test_package.sh +6 -0
  414. package/evals/static/test_workflow_skills.sh +16 -0
  415. package/kits/builder/flows/publish-learn.flow.json +9 -1
  416. package/kits/builder/skills/execute-plan/SKILL.md +4 -3
  417. package/kits/builder/skills/pull-work/SKILL.md +12 -0
  418. package/kits/builder/skills/review-work/SKILL.md +11 -0
  419. package/kits/veritas-governance/adapter/readiness-to-trust-bundle.mjs +19 -20
  420. package/kits/veritas-governance/assets/starter-hooks/githooks/post-commit +13 -0
  421. package/kits/veritas-governance/assets/starter-hooks/githooks/pre-push +13 -0
  422. package/kits/veritas-governance/assets/starter-standards/veritas/GOVERNANCE.md +23 -0
  423. package/kits/veritas-governance/assets/starter-standards/veritas/README.md +58 -0
  424. package/kits/veritas-governance/assets/starter-standards/veritas/authority/default.authority-settings.json +30 -0
  425. package/kits/veritas-governance/assets/starter-standards/veritas/repo-map.json +115 -0
  426. package/kits/veritas-governance/assets/starter-standards/veritas/repo-standards/default.repo-standards.json +54 -0
  427. package/kits/veritas-governance/assets/starter-standards/veritas.claims.json +179 -0
  428. package/kits/veritas-governance/docs/README.md +141 -10
  429. package/kits/veritas-governance/fixtures/standards-authoring/approved.trust-bundle.json +74 -0
  430. package/kits/veritas-governance/fixtures/standards-authoring/not-approved.trust-bundle.json +74 -0
  431. package/kits/veritas-governance/flows/standards-authoring.flow.json +35 -0
  432. package/kits/veritas-governance/kit.json +65 -0
  433. package/kits/veritas-governance/skills/consult-standards/SKILL.md +73 -0
  434. package/kits/veritas-governance/skills/standards-authoring/SKILL.md +87 -0
  435. package/package.json +2 -1
  436. package/schemas/backlog-provider-settings.schema.json +1 -1
  437. package/schemas/workflow-waves.schema.json +347 -0
  438. package/scripts/check-layer-boundary.mjs +98 -0
  439. package/src/cli/builder-flow-runtime.test.mjs +86 -0
  440. package/src/cli/flow-resolver-composition.test.mjs +20 -1
  441. package/src/cli/init.ts +31 -3
  442. package/src/cli/kit-metadata-security.test.mjs +163 -1
  443. package/src/cli/kit-provisioning.test.mjs +122 -0
  444. package/src/cli/kit.ts +83 -2
  445. package/src/cli/pull-work-provider.ts +7 -1
  446. package/src/cli/validate-waves.test.mjs +134 -0
  447. package/src/cli/validate-workflow-artifacts.ts +47 -0
  448. package/src/cli/workflow.ts +7 -1
  449. package/src/flow-kit/provision.ts +118 -0
  450. package/src/flow-kit/validate.ts +233 -10
  451. package/src/runtime-adapters.ts +1 -1
@@ -22,7 +22,7 @@ Use these local references when you need more detail:
22
22
  - [ADR 0005](adr/0005-kubernetes-inspired-resource-contracts.md) records the Kontour Resource Contract direction.
23
23
  - [Kontour Resource Contract](kontour-resource-contract.md) documents the shared durable record shape.
24
24
  - [Flow Kit Repository Contract](flow-kit-repository-contract.md) documents local kit validation and activation boundaries.
25
- - [Veritas Integration Boundary](veritas-integration.md) documents optional governance evidence.
25
+ - [Veritas Integration Boundary](veritas-integration.md) records the early integration rationale; the shipped path is the **Veritas Governance Kit** (`kits/veritas-governance`) — see its [README](../kits/veritas-governance/docs/README.md) and [Engine and kits](architecture-engine-and-kits.md).
26
26
 
27
27
  ## Coordination Map
28
28
 
@@ -63,10 +63,10 @@ flowchart LR
63
63
  | Flow Agents | Agent-facing workflow bundles, skills, sidecars, artifact contracts, evals, runtime export, provider wiring, and local-first docs. | Does not become the core workflow engine for all Kontour products and should not copy product-native rule models into this repo. |
64
64
  | Flow | Generic workflow semantics, Flow Definitions, gate transitions, attempts, route-back behavior, Flow Runs, and Flow Reports. | Flow Agents may consume or project Flow concepts, but Flow owns enforcement semantics once the Flow surface is available. |
65
65
  | Builder Kit | The first Kontour-authored Flow Kit for build work: shaping, pickup probes, planning, execution, review, verification, publication, release readiness, and learning workflows. | Flow Agents validates, installs, activates, and routes Builder Kit assets; it does not make every Builder Kit specialization a core Flow Agents concept. |
66
- | Veritas | Repo-local standards, authority settings, policy/rule checks, and native governance reports. | Flow Agents records compact Veritas evidence references when configured; Veritas is optional and not a mandatory dependency for every workflow. |
66
+ | Veritas | The repo-local governance **evaluation engine** (`@kontourai/veritas`): repo standards, authority settings, policy/rule checks, merge-readiness, and native governance reports. | Flow Agents ships the **Veritas Governance Kit** (`kits/veritas-governance`), which owns the repo-installed governance surface (standards scaffold, hooks, authoring, agent guidance) and gates a real `veritas readiness` verdict as a `software-readiness-verdict` trust.bundle claim — wrapping the engine's CLI, never importing or reimplementing it. The kit is optional; the engine it wraps is a standalone library. |
67
67
  | Surface | Portable trust state, claims, TrustReports, Trust Snapshots, and user-facing trust surfaces. | Flow Agents can reference Surface-shaped claims for gates, but Surface owns claim models and trust presentation. |
68
68
 
69
- **Current state:** Builder Kit is the first proof point for extracting out-of-the-box behavior into normal Flow Kits. Veritas integration is documented as optional and adapter-driven. Surface references appear as a trust-state boundary in local Veritas and Builder Kit evidence docs.
69
+ **Current state:** Builder Kit is the first proof point for extracting out-of-the-box behavior into normal Flow Kits. Veritas is consumed through the **Veritas Governance Kit** (`kits/veritas-governance`) — an agentless kit that wraps the `veritas` CLI and projects its recorded readiness verdict into a trust.bundle gate; it owns the repo-installed governance surface, while veritas stays the standalone evaluation engine. Surface references appear as a trust-state boundary in local Veritas and Builder Kit evidence docs.
70
70
 
71
71
  **Future direction:** Flow Agents should support more runtime adapters, provider adapters, and Flow Kits without forcing all users to install Builder Kit, Veritas, Surface, or a specific hosted provider.
72
72
 
@@ -72,7 +72,7 @@ codex-local
72
72
 
73
73
  Unknown adapter ids fail with JSON diagnostics that include the available adapters. No Claude, Kiro, framework, API, npm module extraction, or remote install adapters are implemented by this activation surface.
74
74
 
75
- The `codex-local` adapter supports only Flow Definition assets declared in `flows`. It activates the built-in Builder Kit Flow Definitions, including `builder.shape` and `builder.build`, plus Flow Definitions from locally installed kit copies under:
75
+ The `codex-local` adapter supports assets declared in `flows`, `skills`, and `docs`. It activates the built-in Builder Kit Flow Definitions, including `builder.shape` and `builder.build`, plus supported assets from locally installed kit copies under:
76
76
 
77
77
  ```text
78
78
  <dest>/kits/local/repositories/<kit-id>/
@@ -91,13 +91,13 @@ Flow Definition copies are placed under `flows/<kit-id>/<flow-id>.flow.json`, an
91
91
  The stable activation diagnostics include:
92
92
 
93
93
  - `selected_adapter`: selected adapter id, currently `codex-local`.
94
- - `supported_asset_classes`: asset classes the selected adapter activates, currently `["flows"]`.
94
+ - `supported_asset_classes`: asset classes the selected adapter activates, currently `["flows", "skills", "docs"]`.
95
95
  - `generated_runtime_files`: generated runtime-local files with asset class, path, kit id, asset id, and source path.
96
96
  - `skipped_assets`: unsupported declared assets with asset class, path, kit id, asset id when present, and reason.
97
97
  - `warnings`: recoverable catalog, registry, or asset discovery problems.
98
98
  - `errors`: blocking discovery or activation problems.
99
99
 
100
- Declared `skills`, `docs`, `adapters`, `evals`, and generic `assets` are diagnostic-only for this adapter. They are skipped with explicit `skipped_assets` entries; they are not copied, installed, invoked, or treated as active runtime behavior.
100
+ Declared `skills` and `docs` are copied into the runtime projection alongside flows. Declared `adapters`, `evals`, generic `assets`, and `provisions` are diagnostic-only for this adapter. They are skipped with explicit `skipped_assets` entries; they are not copied, installed, invoked, or treated as active runtime behavior.
101
101
 
102
102
  ## Root Manifest
103
103
 
@@ -122,6 +122,14 @@ Declared `skills`, `docs`, `adapters`, `evals`, and generic `assets` are diagnos
122
122
  "id": "example.readme",
123
123
  "path": "docs/README.md"
124
124
  }
125
+ ],
126
+ "provisions": [
127
+ {
128
+ "id": "example-kit.editor-policy",
129
+ "path": "provisions/editor-policy.json",
130
+ "target": ".editor/policy.json",
131
+ "description": "Initial repository policy."
132
+ }
125
133
  ]
126
134
  }
127
135
  ```
@@ -138,6 +146,29 @@ Optional fields:
138
146
  - `product_name`: non-empty display name when the product name differs from `name`.
139
147
  - `description`: non-empty summary.
140
148
  - `skills`, `docs`, `adapters`, `evals`, `assets`: lists of relative asset paths or objects with `id`, `path`, and optional `description`.
149
+ - `provisions`: a list of objects with kit-id-prefixed `id`, source `path`, consumer-repository-relative `target`, and optional `description`.
150
+
151
+ ## Repository Provisioning
152
+
153
+ Provision entries declare inert files; kits do not execute installer code. Source paths follow the other extension-asset rules: they must be relative, stay inside the kit directory, and name an existing regular file. Targets must be non-empty relative paths, must not contain traversal segments or resolve outside the consumer repository, must not be inside `.git`, and must be unique after normalization.
154
+
155
+ Provision a catalog kit, an installed-registry kit, or a kit at a direct local path with:
156
+
157
+ ```bash
158
+ flow-agents kit provision <kit-id-or-path> [--target <consumer-repo>] [--force] [--dry-run]
159
+ ```
160
+
161
+ `--target` defaults to the current working directory and must already be a directory. The engine resolves the real path of the deepest existing destination ancestor before writing, so a symlink cannot redirect a provision outside the target repository. It preflights the whole declaration: by default, any existing destination reports every conflict, exits nonzero, and writes none of the provisioned files. `--force` replaces declared destination files. `--dry-run` prints every source-to-target mapping and writes nothing.
162
+
163
+ After a successful non-dry-run copy, Flow Agents writes or replaces this bookkeeping manifest:
164
+
165
+ ```text
166
+ <target>/.kontourai/flow-agents/provisions/<kit-id>.json
167
+ ```
168
+
169
+ The schema is `{ schema_version: "1.0", kit_id, kit_hash, provisioned_at, files: [{ id, target }] }`. Provisioned files become consumer-repository content; uninstalling or deactivating the kit does not remove them.
170
+
171
+ When `flow-agents init --activate-kit <id>` successfully activates a selected kit, init invokes the same provisioning engine against its destination with create-only semantics. Existing destinations are reported as skipped warnings and do not fail an init rerun. Provisions never enter the runtime projection directory.
141
172
 
142
173
  ## Path Rules
143
174
 
@@ -54,7 +54,7 @@ Required fields:
54
54
  | `name` | Non-empty display name |
55
55
  | `flows` | Non-empty list; each entry must have `id` and `path` |
56
56
 
57
- Optional fields: `product_name`, `description`, `skills`, `docs`, `adapters`, `evals`, `assets`, `dependencies` (cross-kit dependency declarations; see [Cross-kit dependencies](#cross-kit-dependencies)), `workflow_triggers` (structured workflow steering keyed by engine trigger names such as `implementation-work-detected`), `hook_influence_expectations` (kit-owned required hook-influence fixture expectations), and `first_party` (legacy catalog/marketplace metadata; no runtime privilege). Optional asset fields list relative asset paths or objects with `id`, `path`, and optional `description`. `skills` and `docs` assets are activated by both adapters alongside flows. `adapters`, `evals`, and `assets` appear in diagnostics as `skipped_assets` (see the Activate section for the full per-adapter table).
57
+ Optional fields: `product_name`, `description`, `skills`, `docs`, `adapters`, `evals`, `assets`, `dependencies` (cross-kit dependency declarations; see [Cross-kit dependencies](#cross-kit-dependencies)), `workflow_triggers` (structured workflow steering keyed by engine trigger names such as `implementation-work-detected`), `hook_influence_expectations` (kit-owned required hook-influence fixture expectations), `agent_spawn_triggers` (perimeter trigger surfaces that spawn agent runs plus their dedup/cooldown/cap/concurrency guard config; validation warns when a spawning surface lacks complete guards — see `context/contracts/trigger-guards.md`), and `first_party` (legacy catalog/marketplace metadata; no runtime privilege). Optional asset fields list relative asset paths or objects with `id`, `path`, and optional `description`. `skills` and `docs` assets are activated by both adapters alongside flows. `adapters`, `evals`, and `assets` appear in diagnostics as `skipped_assets` (see the Activate section for the full per-adapter table).
58
58
 
59
59
  ## Minimal flow file
60
60
 
@@ -4,6 +4,18 @@ title: Veritas Integration Boundary
4
4
 
5
5
  # Veritas Integration Boundary
6
6
 
7
+ > **Superseded by the shipped kit.** This doc records the early rationale for how Flow Agents
8
+ > should integrate Veritas. That decision has since been made and shipped as the **Veritas
9
+ > Governance Kit** (`kits/veritas-governance`): an agentless kit that wraps the `veritas` CLI and
10
+ > projects its recorded readiness verdict into a `software-readiness-verdict` trust.bundle gate,
11
+ > and that owns the repo-installed governance surface (standards scaffold, hooks, standards
12
+ > authoring, just-in-time agent guidance). For the current integration, read the
13
+ > [kit README](../kits/veritas-governance/docs/README.md), [Engine and kits](architecture-engine-and-kits.md),
14
+ > and veritas's [Engine / Surface Seam](https://github.com/kontourai/veritas/blob/main/docs/architecture/engine-surface-seam.md).
15
+ > The boundary principle below still holds — Veritas is the evaluation engine; the kit wraps it,
16
+ > never reimplements it — but the concrete adapter shape described here predates and is replaced by
17
+ > the kit's flows + trust.bundle adapter.
18
+
7
19
  Veritas is a strong fit for Flow Agents' development evidence and governance layer, but it should stay optional and adapter-driven.
8
20
 
9
21
  The guiding rule is simple: Flow owns generic process enforcement, Flow Agents projects Flow-backed workflows into agent harnesses, and Veritas owns repo-local standards, authority, and evidence-check semantics.
@@ -11,6 +11,7 @@ mkdir -p "$LOG_DIR"
11
11
 
12
12
  CHECKS=(
13
13
  "Content boundary|npm run check:content-boundary --"
14
+ "Layer boundary|npm run check:layer-boundary --"
14
15
  "Hachure boundary|npm run check:hachure-boundary --"
15
16
  "Decision registry|npm run check:decisions --"
16
17
  "Source tree validation|npm run validate:source --"
@@ -52,6 +53,7 @@ CHECKS=(
52
53
  "Workflow steering hook integration|bash evals/integration/test_workflow_steering_hook.sh"
53
54
  "Hook influence contract integration|bash evals/integration/test_hook_influence_cases.sh"
54
55
  "Flow Kit repository integration|bash evals/integration/test_flow_kit_repository.sh"
56
+ "Kit provisioning integration|bash evals/integration/test_kit_provisioning.sh"
55
57
  "Runtime adapter activation integration|bash evals/integration/test_runtime_adapter_activation.sh"
56
58
  "Bundle install integration|bash evals/integration/test_bundle_install.sh"
57
59
  "Published Codex install integration|bash evals/integration/test_published_codex_install.sh"
@@ -119,6 +121,7 @@ CHECKS=(
119
121
 
120
122
  LANE_SOURCE_AND_STATIC=(
121
123
  "Content boundary"
124
+ "Layer boundary"
122
125
  "Hachure boundary"
123
126
  "Decision registry"
124
127
  "Source tree validation"
@@ -169,6 +172,7 @@ LANE_RUNTIME_AND_KIT=(
169
172
  "Workflow steering hook integration"
170
173
  "Hook influence contract integration"
171
174
  "Flow Kit repository integration"
175
+ "Kit provisioning integration"
172
176
  "Runtime adapter activation integration"
173
177
  "Bundle install integration"
174
178
  "Published Codex install integration"
@@ -0,0 +1,112 @@
1
+ #!/usr/bin/env bash
2
+ set -uo pipefail
3
+
4
+ ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
5
+ source "$ROOT/evals/lib/node.sh"
6
+
7
+ errors=0
8
+ TMP_DIR="$(mktemp -d)"
9
+ trap 'rm -rf "$TMP_DIR"' EXIT
10
+ pass() { echo " ✓ $1"; }
11
+ fail() { echo " ✗ $1"; errors=$((errors + 1)); }
12
+
13
+ CLI="$ROOT/build/src/cli.js"
14
+ KIT="$TMP_DIR/fixture-kit"
15
+ mkdir -p "$KIT/flows" "$KIT/payload"
16
+ cp "$ROOT/kits/release-evidence/flows/release-evidence.flow.json" "$KIT/flows/review.flow.json"
17
+ printf 'alpha from kit\n' >"$KIT/payload/alpha.txt"
18
+ printf 'beta from kit\n' >"$KIT/payload/beta.txt"
19
+ cat >"$KIT/kit.json" <<'JSON'
20
+ {
21
+ "schema_version": "1.0",
22
+ "id": "fixture-kit",
23
+ "name": "Provision Fixture Kit",
24
+ "flows": [{"id":"release-evidence","path":"flows/review.flow.json"}],
25
+ "provisions": [
26
+ {"id":"fixture-kit.alpha","path":"payload/alpha.txt","target":"docs/alpha.txt"},
27
+ {"id":"fixture-kit.beta","path":"payload/beta.txt","target":"config/beta.txt","description":"fixture"}
28
+ ]
29
+ }
30
+ JSON
31
+
32
+ echo "=== Kit provisioning integration ==="
33
+ npm run build --silent >/dev/null || { fail "build failed"; exit 1; }
34
+
35
+ if node "$CLI" kit validate "$KIT" >"$TMP_DIR/validate.out" 2>&1; then
36
+ pass "kit validate accepts declared provisions"
37
+ else
38
+ fail "kit validate rejected valid provisions"; sed -n '1,80p' "$TMP_DIR/validate.out"
39
+ fi
40
+
41
+ TARGET="$TMP_DIR/consumer"
42
+ mkdir -p "$TARGET"
43
+ if node "$CLI" kit provision "$KIT" --target "$TARGET" >"$TMP_DIR/provision.out" 2>&1 \
44
+ && cmp -s "$KIT/payload/alpha.txt" "$TARGET/docs/alpha.txt" \
45
+ && cmp -s "$KIT/payload/beta.txt" "$TARGET/config/beta.txt" \
46
+ && node -e 'const m=require(process.argv[1]); if(m.schema_version!=="1.0"||m.kit_id!=="fixture-kit"||m.files.length!==2)process.exit(1)' "$TARGET/.kontourai/flow-agents/provisions/fixture-kit.json"; then
47
+ pass "provision copies exact content and writes the two-entry manifest"
48
+ else
49
+ fail "positive provision failed"; sed -n '1,100p' "$TMP_DIR/provision.out"
50
+ fi
51
+
52
+ printf 'consumer-owned alpha\n' >"$TARGET/docs/alpha.txt"
53
+ printf 'changed source beta\n' >"$KIT/payload/beta.txt"
54
+ if node "$CLI" kit provision "$KIT" --target "$TARGET" >"$TMP_DIR/conflict.out" 2>&1; then
55
+ fail "create-only conflict unexpectedly succeeded"
56
+ elif [[ "$(cat "$TARGET/docs/alpha.txt")" == "consumer-owned alpha" ]] \
57
+ && [[ "$(cat "$TARGET/config/beta.txt")" == "beta from kit" ]] \
58
+ && rg -q 'docs/alpha.txt' "$TMP_DIR/conflict.out" \
59
+ && rg -q 'config/beta.txt' "$TMP_DIR/conflict.out"; then
60
+ pass "conflict is nonzero, names all conflicts, and overwrites nothing"
61
+ else
62
+ fail "conflict handling was not atomic or diagnostic"; sed -n '1,100p' "$TMP_DIR/conflict.out"
63
+ fi
64
+
65
+ if node "$CLI" kit provision "$KIT" --target "$TARGET" --force >"$TMP_DIR/force.out" 2>&1 \
66
+ && cmp -s "$KIT/payload/alpha.txt" "$TARGET/docs/alpha.txt" \
67
+ && cmp -s "$KIT/payload/beta.txt" "$TARGET/config/beta.txt"; then
68
+ pass "--force overwrites declared destinations"
69
+ else
70
+ fail "--force did not overwrite"; sed -n '1,100p' "$TMP_DIR/force.out"
71
+ fi
72
+
73
+ DRY="$TMP_DIR/dry-consumer"
74
+ mkdir -p "$DRY"
75
+ if node "$CLI" kit provision "$KIT" --target "$DRY" --dry-run >"$TMP_DIR/dry.out" 2>&1 \
76
+ && [[ ! -e "$DRY/docs/alpha.txt" && ! -e "$DRY/.kontourai" ]] \
77
+ && rg -q 'would provision' "$TMP_DIR/dry.out"; then
78
+ pass "--dry-run prints the plan and writes nothing"
79
+ else
80
+ fail "--dry-run wrote state or omitted its plan"; sed -n '1,100p' "$TMP_DIR/dry.out"
81
+ fi
82
+
83
+ INVALID="$TMP_DIR/invalid-kit"
84
+ cp -R "$KIT" "$INVALID"
85
+ node -e 'const fs=require("fs"),p=process.argv[1],m=JSON.parse(fs.readFileSync(p));m.provisions[0].target="../escape.txt";m.provisions[1].target="/absolute.txt";fs.writeFileSync(p,JSON.stringify(m,null,2))' "$INVALID/kit.json"
86
+ if node "$CLI" kit validate "$INVALID" >"$TMP_DIR/invalid-validate.out" 2>&1; then
87
+ fail "kit validate accepted traversal and absolute targets"
88
+ elif node "$CLI" kit provision "$INVALID" --target "$DRY" >"$TMP_DIR/invalid-provision.out" 2>&1; then
89
+ fail "kit provision accepted an invalid kit"
90
+ elif rg -q 'traversal' "$TMP_DIR/invalid-validate.out" && rg -q 'must be relative' "$TMP_DIR/invalid-validate.out"; then
91
+ pass "validation and provisioning refuse traversal and absolute targets"
92
+ else
93
+ fail "unsafe target diagnostics were incomplete"; sed -n '1,100p' "$TMP_DIR/invalid-validate.out"
94
+ fi
95
+
96
+ HOME_FIXTURE="$TMP_DIR/kit-home"
97
+ mkdir -p "$HOME_FIXTURE"
98
+ if node "$CLI" kit install "$KIT" --dest "$HOME_FIXTURE" >"$TMP_DIR/install.out" 2>&1 \
99
+ && node "$CLI" kit activate --dest "$HOME_FIXTURE" --source-root "$ROOT" >"$TMP_DIR/activate.out" 2>&1 \
100
+ && node -e 'const r=JSON.parse(require("fs").readFileSync(process.argv[1],"utf8"));if(!r.skipped_assets.some(x=>x.asset_class==="provisions"&&/not activated/.test(x.reason)))process.exit(1)' "$TMP_DIR/activate.out"; then
101
+ pass "codex-local activation explicitly skips provisions"
102
+ else
103
+ fail "activation did not report provisions as skipped"; sed -n '1,120p' "$TMP_DIR/activate.out"
104
+ fi
105
+
106
+ echo ""
107
+ if [[ "$errors" -eq 0 ]]; then
108
+ echo "Kit provisioning integration passed."
109
+ exit 0
110
+ fi
111
+ echo "Kit provisioning integration failed with $errors error(s)."
112
+ exit 1
@@ -131,6 +131,24 @@ node "$SCRIPT" \
131
131
  [[ "$(json_query "$TMPDIR_EVAL/unresolved.json" "items.11.dependency_impacts.0.impact_state")" == "unknown" ]] && pass "structured-only dependency impact state is unknown without resolved ref" || fail "structured-only dependency impact state is unknown without resolved ref"
132
132
  [[ "$(json_query "$TMPDIR_EVAL/unresolved.json" "items.11.readiness.classification")" == "blocked" ]] && pass "structured-only blocker blocks without prose parsing" || fail "structured-only blocker blocks without prose parsing"
133
133
 
134
+ # Readiness Source Integrity (docs/decisions/backlog-readiness-source.md):
135
+ # reaching the issue-listing path while a BoardProvider is configured is a
136
+ # bypass of the canonical readiness source and must be loud, never silent.
137
+ [[ "$(json_query "$TMPDIR_EVAL/normalized.json" "warnings.0.code")" == "board_provider_bypassed" ]] && pass "issue-listing path with configured board surfaces board_provider_bypassed" || fail "issue-listing path with configured board surfaces board_provider_bypassed"
138
+
139
+ node -e '
140
+ const fs = require("fs");
141
+ const doc = JSON.parse(fs.readFileSync(process.argv[1], "utf8"));
142
+ const settings = doc.projects[0];
143
+ delete settings.board_provider;
144
+ fs.writeFileSync(process.argv[2], JSON.stringify(settings, null, 2));
145
+ ' "$SETTINGS" "$TMPDIR_EVAL/boardless-settings.json"
146
+ node "$SCRIPT" \
147
+ --settings-json "$TMPDIR_EVAL/boardless-settings.json" \
148
+ --issues-json "$FIXTURE" \
149
+ > "$TMPDIR_EVAL/boardless.json"
150
+ [[ "$(json_query "$TMPDIR_EVAL/boardless.json" "warnings.length")" == "0" ]] && pass "issue-listing path without a configured board emits no bypass warning" || fail "issue-listing path without a configured board emits no bypass warning"
151
+
134
152
  if [[ "$errors" -eq 0 ]]; then
135
153
  echo "Pull work provider checks passed"
136
154
  else
@@ -133,6 +133,72 @@ echo "--- exemption-issuance: gate blocks without a verified approval, passes wi
133
133
  exemption_gate_case "$KIT/fixtures/exemption/approved.trust-bundle.json" "exemption-positive" 0
134
134
  exemption_gate_case "$KIT/fixtures/exemption/not-approved.trust-bundle.json" "exemption-negative" 1
135
135
 
136
+ # --- standards-authoring flow (Slice 2 PR3): registration, gate shape, gate cases ---
137
+ # Agentless propose -> apply flow whose human-approval-gate blocks the `veritas init --apply`
138
+ # write until a human-authored standards-authoring-approval claim is verified. The kit only
139
+ # gates the sign-off; Veritas does the derivation and the write (no evaluation reimplemented).
140
+ AUTHORING_FLOWDEF="$KIT/flows/standards-authoring.flow.json"
141
+ if node -e "const f=require('$AUTHORING_FLOWDEF'); if(f.id!=='veritas-governance.standards-authoring') process.exit(1);" 2>/dev/null; then
142
+ pass "standards-authoring flow file has id veritas-governance.standards-authoring"
143
+ else
144
+ fail "standards-authoring flow file missing or has unexpected id"
145
+ fi
146
+ if rg -q '"id": *"veritas-governance\.standards-authoring"' "$KIT/kit.json" && rg -q '"path": *"flows/standards-authoring\.flow\.json"' "$KIT/kit.json"; then
147
+ pass "standards-authoring flow is registered in kit.json flows[]"
148
+ else
149
+ fail "standards-authoring flow is NOT registered in kit.json flows[]"
150
+ fi
151
+ if rg -q '"id": *"veritas-governance\.standards-authoring"' "$KIT/kit.json" && rg -q '"path": *"skills/standards-authoring/SKILL.md"' "$KIT/kit.json"; then
152
+ pass "standards-authoring skill is registered in kit.json skills[]"
153
+ else
154
+ fail "standards-authoring skill is NOT registered in kit.json skills[]"
155
+ fi
156
+ # Agentless invariant: the kit declares no flow_step_actions (would opt into Builder's
157
+ # producer-ownership contract and break the agentless gate flows).
158
+ if rg -q 'flow_step_actions' "$KIT/kit.json"; then
159
+ fail "kit.json declares flow_step_actions — veritas-governance flows are agentless"
160
+ else
161
+ pass "kit stays agentless (no flow_step_actions)"
162
+ fi
163
+ if node -e "
164
+ const f=require('$AUTHORING_FLOWDEF');
165
+ const g=f.gates['human-approval-gate'];
166
+ const bc=g.expects[0].bundle_claim;
167
+ if (g.expects[0].kind!=='trust.bundle') process.exit(1);
168
+ if (bc.claimType!=='standards-authoring-approval') process.exit(1);
169
+ if (bc.subjectType!=='repo-governance-change') process.exit(1);
170
+ if (JSON.stringify(bc.accepted_statuses)!=='[\"verified\"]') process.exit(1);
171
+ " 2>/dev/null; then
172
+ pass "standards-authoring gate expects[] kind is trust.bundle and pins claimType/subjectType/accepted_statuses exactly"
173
+ else
174
+ fail "standards-authoring gate expects[] shape does not match the pinned claim selector"
175
+ fi
176
+ # Positive/negative gate cases against the committed fixtures. $1 bundle, $2 label, $3 expect.
177
+ authoring_gate_case() {
178
+ local bundle="$1" label="$2" expect="$3"
179
+ local work="$TMP_DIR/$label"; mkdir -p "$work"; ( cd "$work" && node "$FLOW_CLI" init >/dev/null 2>&1 )
180
+ ( cd "$work" && node "$FLOW_CLI" start "$AUTHORING_FLOWDEF" --run-id "$label" >/dev/null 2>&1 )
181
+ ( cd "$work" && node "$FLOW_CLI" attach-evidence "$label" --gate human-approval-gate --file "$bundle" --bundle >"$work/attach.out" 2>&1 )
182
+ if ! rg -q 'kind: trust.bundle' "$work/attach.out"; then
183
+ fail "[$label] evidence did not attach as kind: trust.bundle"; sed -n '1,20p' "$work/attach.out"; return
184
+ fi
185
+ ( cd "$work" && node "$FLOW_CLI" evaluate "$label" --gate human-approval-gate --exit-code >"$work/eval.out" 2>&1 )
186
+ local got=$?
187
+ if [[ "$got" == "$expect" ]]; then
188
+ pass "[$label] standards-authoring gate evaluate exit $got as expected"
189
+ else
190
+ fail "[$label] standards-authoring gate evaluate exit $got, expected $expect"; sed -n '1,20p' "$work/eval.out"
191
+ fi
192
+ }
193
+ authoring_gate_case "$KIT/fixtures/standards-authoring/approved.trust-bundle.json" "authoring-positive" 0
194
+ authoring_gate_case "$KIT/fixtures/standards-authoring/not-approved.trust-bundle.json" "authoring-negative" 1
195
+ # No-fork: the authoring skill wraps the veritas CLI; it must not vendor rule/claim evaluation.
196
+ if rg -q -i 'evaluateRepoStandards|evidence-check-runner\.mjs|class +[A-Za-z]*RuleEngine|repo-standards/default\.repo-standards\.json' "$KIT/skills/standards-authoring" "$KIT/flows/standards-authoring.flow.json" 2>/dev/null; then
197
+ fail "standards-authoring skill/flow appears to vendor Veritas evaluation logic (no-fork violated)"
198
+ else
199
+ pass "no-fork: standards-authoring wraps the veritas CLI, no vendored rule/claim engine"
200
+ fi
201
+
136
202
  # --- exemption-issuance: issue-step DECLARED append semantics (AC4) --------------
137
203
  # Seed a scratch delivery/DECLARED with main's real 2-entry array (inlined here, not read
138
204
  # live from the repo, so this eval is not coupled to that file's future contents), then
@@ -364,6 +430,196 @@ else
364
430
  echo " - SKIP live Veritas leg (set VERITAS_BIN + VERITAS_GOVERNED_REPO to enable); fixtures are captured real output"
365
431
  fi
366
432
 
433
+ # --- Starter-standards provisioning (Slice 2 PR2): the kit scaffolds a runnable .veritas/ ---
434
+ # The kit declares its starter Repo Standards as provisions[]; `kit provision` copies them into
435
+ # a consumer repo. This asserts the scaffold lands and is well-formed; when a Veritas binary is
436
+ # available it further asserts `veritas readiness` runs end-to-end against the scaffolded repo.
437
+ echo "--- starter-standards provisioning ---"
438
+ FA_CLI="$ROOT/build/src/cli.js"
439
+ if [[ ! -f "$FA_CLI" ]]; then
440
+ fail "flow-agents CLI not built at build/src/cli.js (run npm run build)"
441
+ else
442
+ prov="$TMP_DIR/provisioned-repo"; mkdir -p "$prov"
443
+ if node "$FA_CLI" kit provision "$KIT" --target "$prov" >"$TMP_DIR/provision.out" 2>&1; then
444
+ pass "kit provision scaffolds starter standards into a consumer repo"
445
+ else
446
+ fail "kit provision failed"; sed -n '1,20p' "$TMP_DIR/provision.out"
447
+ fi
448
+ # Every declared provision target must land and (for JSON) parse.
449
+ starter_targets=(
450
+ ".veritas/repo-map.json"
451
+ ".veritas/repo-standards/default.repo-standards.json"
452
+ ".veritas/authority/default.authority-settings.json"
453
+ ".veritas/GOVERNANCE.md"
454
+ ".veritas/README.md"
455
+ "veritas.claims.json"
456
+ )
457
+ for rel in "${starter_targets[@]}"; do
458
+ if [[ -f "$prov/$rel" ]]; then
459
+ if [[ "$rel" == *.json ]]; then
460
+ if node -e "JSON.parse(require('fs').readFileSync(process.argv[1],'utf8'))" "$prov/$rel" >/dev/null 2>&1; then
461
+ pass "scaffolded $rel is present and valid JSON"
462
+ else
463
+ fail "scaffolded $rel is not valid JSON"
464
+ fi
465
+ else
466
+ pass "scaffolded $rel is present"
467
+ fi
468
+ else
469
+ fail "expected scaffolded file missing: $rel"
470
+ fi
471
+ done
472
+ # The scaffold must reference the Veritas engine's OWN starter output, not reimplement it:
473
+ # every provision source lives under assets/, never in adapter/ or flows/ (no-fork already
474
+ # scopes there). Assert the declared sources exist inside the kit's assets tree.
475
+ if node -e "
476
+ const fs=require('fs'),path=require('path');
477
+ const kit=JSON.parse(fs.readFileSync(process.argv[1]+'/kit.json','utf8'));
478
+ const bad=(kit.provisions||[]).filter(p=>!p.path.startsWith('assets/')||!fs.existsSync(path.join(process.argv[1],p.path)));
479
+ if(bad.length){console.error('bad provisions:',bad.map(p=>p.id).join(','));process.exit(1)}
480
+ " "$KIT" >/dev/null 2>&1; then
481
+ pass "all starter provisions source from the kit's assets/ tree"
482
+ else
483
+ fail "a starter provision points outside assets/ or at a missing file"
484
+ fi
485
+ # Live: a Veritas binary must be able to run readiness against the scaffolded repo.
486
+ VBIN2="${VERITAS_BIN:-veritas}"
487
+ if command -v "$VBIN2" >/dev/null 2>&1 || [[ -x "$VBIN2" ]]; then
488
+ ( cd "$prov" && git init -q && printf '{"name":"scaffold-eval","scripts":{"test":"node -e \"process.exit(0)\""}}\n' > package.json \
489
+ && git add -A && git -c user.email=eval@local -c user.name=eval commit -qm scaffold ) >/dev/null 2>&1
490
+ if ( cd "$prov" && "$VBIN2" readiness --working-tree >/dev/null 2>&1 ); then :; fi
491
+ if ls "$prov/.kontourai/veritas/evidence/"*.json >/dev/null 2>&1; then
492
+ pass "veritas readiness runs end-to-end on the kit-scaffolded repo (evidence report produced)"
493
+ else
494
+ fail "veritas readiness produced no evidence report on the scaffolded repo"
495
+ fi
496
+ else
497
+ echo " - SKIP scaffold readiness leg (no Veritas binary; set VERITAS_BIN to enable)"
498
+ fi
499
+ fi
500
+
501
+ # --- Governance git-hook provisioning (Slice 3 PR / #648) --------------------------
502
+ # The kit ships the two governance git hooks as provisions[]; `kit provision` lands them
503
+ # (non-executable), and a documented chmod + core.hooksPath step activates them. This asserts
504
+ # the hook files land with the expected bodies and that, once activated, the pre-push hook fires.
505
+ echo "--- governance git-hook provisioning ---"
506
+ FA_CLI2="$ROOT/build/src/cli.js"
507
+ if [[ ! -f "$FA_CLI2" ]]; then
508
+ fail "flow-agents CLI not built at build/src/cli.js (run npm run build)"
509
+ else
510
+ hookrepo="$TMP_DIR/hook-provisioned-repo"; mkdir -p "$hookrepo"
511
+ ( cd "$hookrepo" && git init -q && printf '{"name":"hook-eval","scripts":{"prepush":"echo PREPUSH-RAN"}}\n' > package.json )
512
+ if node "$FA_CLI2" kit provision "$KIT" --target "$hookrepo" >"$TMP_DIR/hookprov.out" 2>&1; then
513
+ pass "kit provision lands the governance git hooks"
514
+ else
515
+ fail "kit provision (hooks) failed"; sed -n '1,20p' "$TMP_DIR/hookprov.out"
516
+ fi
517
+ # Both hook files present, match the committed kit assets byte-for-byte, AND carry their
518
+ # defining command. The byte-match alone cannot catch a corrupted kit asset (a bad asset is
519
+ # copied verbatim and still matches itself), so a content assertion pins what each hook must do.
520
+ declare -A hook_must_contain=(
521
+ [pre-push]='npm run --if-present prepush'
522
+ [post-commit]='veritas readiness --changed-from HEAD~1 --changed-to HEAD'
523
+ )
524
+ for hook in pre-push post-commit; do
525
+ if [[ -f "$hookrepo/.githooks/$hook" ]]; then
526
+ if cmp -s "$hookrepo/.githooks/$hook" "$KIT/assets/starter-hooks/githooks/$hook"; then
527
+ pass "scaffolded .githooks/$hook matches the kit asset byte-for-byte"
528
+ else
529
+ fail "scaffolded .githooks/$hook differs from the kit asset"
530
+ fi
531
+ if grep -qF "${hook_must_contain[$hook]}" "$hookrepo/.githooks/$hook"; then
532
+ pass "scaffolded .githooks/$hook invokes its defining command (${hook_must_contain[$hook]})"
533
+ else
534
+ fail "scaffolded .githooks/$hook is missing its defining command (${hook_must_contain[$hook]}) — corrupted asset?"
535
+ fi
536
+ else
537
+ fail "expected git hook missing: .githooks/$hook"
538
+ fi
539
+ done
540
+ # Provisions land non-executable by design (the engine copy is agent-blind) — assert for BOTH.
541
+ for hook in pre-push post-commit; do
542
+ if [[ -x "$hookrepo/.githooks/$hook" ]]; then
543
+ fail "provisioned .githooks/$hook is already executable — provisioning should be agent-blind (no +x)"
544
+ else
545
+ pass "provisioned .githooks/$hook lands non-executable (agent-blind copy; activation is explicit)"
546
+ fi
547
+ done
548
+ ( cd "$hookrepo" && chmod +x .githooks/pre-push .githooks/post-commit && git config core.hooksPath .githooks )
549
+ if [[ "$(cd "$hookrepo" && git config --get core.hooksPath)" == ".githooks" ]]; then
550
+ pass "activation sets core.hooksPath to .githooks"
551
+ else
552
+ fail "activation did not set core.hooksPath"
553
+ fi
554
+ # Prove GIT actually dispatches the hook via core.hooksPath — not just direct invocation. Push
555
+ # to a local bare remote; the pre-push hook (runs `npm run --if-present prepush`) fires through
556
+ # git's own hook machinery. Output captured to a file so pipefail + git's SIGPIPE can't interfere.
557
+ ( cd "$hookrepo" && git -c user.email=eval@local -c user.name=eval commit -qm base --allow-empty ) >/dev/null 2>&1
558
+ bare="$TMP_DIR/hook-remote.git"; git init --bare -q "$bare"
559
+ ( cd "$hookrepo" && git remote add origin "$bare" && git push -q origin HEAD:refs/heads/main ) >"$TMP_DIR/gitpush.out" 2>&1
560
+ if grep -qF PREPUSH-RAN "$TMP_DIR/gitpush.out"; then
561
+ pass "git dispatches the pre-push hook via core.hooksPath (real git push fires it)"
562
+ else
563
+ fail "git push did not fire the pre-push hook via core.hooksPath"; sed -n '1,12p' "$TMP_DIR/gitpush.out"
564
+ fi
565
+ # No-fork: hook assets live under assets/, and invoke the veritas CLI — they must not vendor
566
+ # rule/claim evaluation. (assets/ is outside the adapter/flows no-fork scope; assert explicitly.)
567
+ if rg -q -i 'evaluateRepoStandards|evidence-check-runner\.mjs|class +[A-Za-z]*RuleEngine' "$KIT/assets/starter-hooks" 2>/dev/null; then
568
+ fail "governance hook assets appear to vendor Veritas evaluation logic (no-fork violated)"
569
+ else
570
+ pass "no-fork: governance hooks invoke the veritas CLI only (no vendored rule/claim engine)"
571
+ fi
572
+ fi
573
+
574
+ # --- consult-standards skill (Slice 4 / #649): JIT guidance via `veritas explain` ---------
575
+ # A pull-based advisory skill telling an agent to run `veritas explain --file <path>` before
576
+ # editing. No MCP server; wraps the veritas CLI, reimplements no evaluation.
577
+ echo "--- consult-standards skill ---"
578
+ CONSULT_SKILL="$KIT/skills/consult-standards/SKILL.md"
579
+ if [[ -f "$CONSULT_SKILL" ]]; then
580
+ pass "consult-standards SKILL.md is present"
581
+ else
582
+ fail "consult-standards SKILL.md is missing"
583
+ fi
584
+ if rg -q '"id": *"veritas-governance\.consult-standards"' "$KIT/kit.json" && rg -q '"path": *"skills/consult-standards/SKILL.md"' "$KIT/kit.json"; then
585
+ pass "consult-standards skill is registered in kit.json skills[]"
586
+ else
587
+ fail "consult-standards skill is NOT registered in kit.json skills[]"
588
+ fi
589
+ # It must point agents at `veritas explain` (the JIT producer), not vendor evaluation.
590
+ if grep -qF 'veritas explain' "$CONSULT_SKILL"; then
591
+ pass "consult-standards points at the veritas explain CLI"
592
+ else
593
+ fail "consult-standards does not reference veritas explain"
594
+ fi
595
+ if rg -q -i 'evaluateRepoStandards|evidence-check-runner\.mjs|class +[A-Za-z]*RuleEngine' "$KIT/skills/consult-standards" 2>/dev/null; then
596
+ fail "consult-standards appears to vendor Veritas evaluation logic (no-fork violated)"
597
+ else
598
+ pass "no-fork: consult-standards wraps the veritas CLI, no vendored rule/claim engine"
599
+ fi
600
+ # No-MCP invariant (#649 / ADR 0011): the kit ships no MCP server CODE and declares no MCP
601
+ # dependency. Scoped to non-markdown files so the docs' explicit "no MCP server" prose (which
602
+ # names the concept precisely to say the kit avoids it) does not trip the check.
603
+ if rg -q -i 'modelcontextprotocol|new +McpServer|StdioServerTransport|createMcpServer' "$KIT" --glob '!*.md' 2>/dev/null; then
604
+ fail "kit ships MCP server code/dependency — #649 guidance is a skill, not an MCP server (ADR 0011)"
605
+ else
606
+ pass "no MCP server: JIT guidance is an agent-pull skill (ADR 0011)"
607
+ fi
608
+ # Live leg: with a Veritas binary, a scaffolded repo's `veritas explain --file` produces JIT context.
609
+ VBIN3="${VERITAS_BIN:-veritas}"
610
+ if command -v "$VBIN3" >/dev/null 2>&1 || [[ -x "$VBIN3" ]]; then
611
+ cs="$TMP_DIR/consult-repo"; mkdir -p "$cs"
612
+ ( cd "$cs" && git init -q && printf '{"name":"consult-eval","scripts":{"test":"node -e \\"process.exit(0)\\""}}\n' > package.json && "$VBIN3" init >/dev/null 2>&1 )
613
+ explain_out="$( cd "$cs" && "$VBIN3" explain --file package.json 2>&1 )"
614
+ if printf '%s' "$explain_out" | grep -qF 'Veritas JIT Context'; then
615
+ pass "veritas explain --file produces JIT context on a governed repo (the guidance the skill invokes)"
616
+ else
617
+ fail "veritas explain --file did not produce JIT context"; printf '%s\n' "$explain_out" | sed -n '1,8p'
618
+ fi
619
+ else
620
+ echo " - SKIP consult-standards live leg (no Veritas binary; set VERITAS_BIN to enable)"
621
+ fi
622
+
367
623
  echo ""
368
624
  if [[ "$errors" -eq 0 ]]; then
369
625
  echo "PASS: veritas-governance kit gate demo (positive passes, negative blocks)"