@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
@@ -0,0 +1,347 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://flow-agents.dev/schemas/workflow-waves.schema.json",
4
+ "title": "Flow Agents Workflow Waves",
5
+ "description": "Fan-out wave manifest for a workflow session. Each wave declares its expected workers (M) before dispatch; every worker lands exactly one terminal status record; the orchestrator reconciles worker_results against expected_workers at wave close and records an explicit 'N of M reported' reconciliation. A worker that never reported is recorded as not_reported — visible data, never silently absorbed. This sidecar is additive: a session without waves.json declares no fan-out and is unaffected.",
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "required": [
9
+ "schema_version",
10
+ "task_slug",
11
+ "waves"
12
+ ],
13
+ "$defs": {
14
+ "evidence_ref": {
15
+ "type": "object",
16
+ "additionalProperties": false,
17
+ "required": [
18
+ "kind"
19
+ ],
20
+ "properties": {
21
+ "kind": {
22
+ "type": "string",
23
+ "enum": [
24
+ "source",
25
+ "command",
26
+ "artifact",
27
+ "provider",
28
+ "external"
29
+ ]
30
+ },
31
+ "url": {
32
+ "type": "string",
33
+ "minLength": 1
34
+ },
35
+ "file": {
36
+ "type": "string",
37
+ "minLength": 1
38
+ },
39
+ "line_start": {
40
+ "type": "integer",
41
+ "minimum": 1
42
+ },
43
+ "line_end": {
44
+ "type": "integer",
45
+ "minimum": 1
46
+ },
47
+ "excerpt": {
48
+ "type": "string",
49
+ "minLength": 1
50
+ },
51
+ "summary": {
52
+ "type": "string",
53
+ "minLength": 1
54
+ }
55
+ },
56
+ "allOf": [
57
+ {
58
+ "if": {
59
+ "type": "object",
60
+ "properties": {
61
+ "kind": {
62
+ "const": "source"
63
+ }
64
+ },
65
+ "required": [
66
+ "kind"
67
+ ]
68
+ },
69
+ "then": {
70
+ "required": [
71
+ "file",
72
+ "line_start",
73
+ "line_end",
74
+ "excerpt"
75
+ ]
76
+ }
77
+ },
78
+ {
79
+ "if": {
80
+ "type": "object",
81
+ "properties": {
82
+ "kind": {
83
+ "const": "artifact"
84
+ }
85
+ },
86
+ "required": [
87
+ "kind"
88
+ ]
89
+ },
90
+ "then": {
91
+ "allOf": [
92
+ {
93
+ "anyOf": [
94
+ {
95
+ "type": "object",
96
+ "required": [
97
+ "file"
98
+ ]
99
+ },
100
+ {
101
+ "type": "object",
102
+ "required": [
103
+ "url"
104
+ ]
105
+ }
106
+ ]
107
+ },
108
+ {
109
+ "anyOf": [
110
+ {
111
+ "type": "object",
112
+ "required": [
113
+ "summary"
114
+ ]
115
+ },
116
+ {
117
+ "type": "object",
118
+ "required": [
119
+ "excerpt"
120
+ ]
121
+ }
122
+ ]
123
+ }
124
+ ]
125
+ }
126
+ },
127
+ {
128
+ "if": {
129
+ "type": "object",
130
+ "properties": {
131
+ "kind": {
132
+ "const": "command"
133
+ }
134
+ },
135
+ "required": [
136
+ "kind"
137
+ ]
138
+ },
139
+ "then": {
140
+ "anyOf": [
141
+ {
142
+ "type": "object",
143
+ "required": [
144
+ "excerpt"
145
+ ]
146
+ },
147
+ {
148
+ "type": "object",
149
+ "required": [
150
+ "summary"
151
+ ]
152
+ },
153
+ {
154
+ "type": "object",
155
+ "required": [
156
+ "url"
157
+ ]
158
+ }
159
+ ]
160
+ }
161
+ },
162
+ {
163
+ "if": {
164
+ "type": "object",
165
+ "properties": {
166
+ "kind": {
167
+ "enum": [
168
+ "provider",
169
+ "external"
170
+ ]
171
+ }
172
+ },
173
+ "required": [
174
+ "kind"
175
+ ]
176
+ },
177
+ "then": {
178
+ "required": [
179
+ "url"
180
+ ]
181
+ }
182
+ }
183
+ ]
184
+ },
185
+ "expected_worker": {
186
+ "type": "object",
187
+ "additionalProperties": false,
188
+ "required": [
189
+ "worker_id",
190
+ "task"
191
+ ],
192
+ "properties": {
193
+ "worker_id": {
194
+ "type": "string",
195
+ "minLength": 1
196
+ },
197
+ "task": {
198
+ "type": "string",
199
+ "minLength": 1
200
+ },
201
+ "role": {
202
+ "type": "string",
203
+ "minLength": 1
204
+ },
205
+ "owned_files": {
206
+ "type": "array",
207
+ "items": {
208
+ "type": "string",
209
+ "minLength": 1
210
+ }
211
+ }
212
+ }
213
+ },
214
+ "worker_result": {
215
+ "type": "object",
216
+ "additionalProperties": false,
217
+ "required": [
218
+ "worker_id",
219
+ "status",
220
+ "summary",
221
+ "recorded_at"
222
+ ],
223
+ "properties": {
224
+ "worker_id": {
225
+ "type": "string",
226
+ "minLength": 1
227
+ },
228
+ "status": {
229
+ "type": "string",
230
+ "enum": [
231
+ "completed",
232
+ "failed",
233
+ "blocked",
234
+ "not_reported"
235
+ ]
236
+ },
237
+ "summary": {
238
+ "type": "string",
239
+ "minLength": 1
240
+ },
241
+ "recorded_at": {
242
+ "type": "string",
243
+ "format": "date-time"
244
+ },
245
+ "evidence_refs": {
246
+ "type": "array",
247
+ "items": {
248
+ "$ref": "#/$defs/evidence_ref"
249
+ }
250
+ }
251
+ }
252
+ },
253
+ "reconciliation": {
254
+ "type": "object",
255
+ "additionalProperties": false,
256
+ "required": [
257
+ "status",
258
+ "expected_count",
259
+ "reported_count",
260
+ "summary",
261
+ "reconciled_at"
262
+ ],
263
+ "properties": {
264
+ "status": {
265
+ "type": "string",
266
+ "enum": [
267
+ "complete",
268
+ "incomplete"
269
+ ]
270
+ },
271
+ "expected_count": {
272
+ "type": "integer",
273
+ "minimum": 0
274
+ },
275
+ "reported_count": {
276
+ "type": "integer",
277
+ "minimum": 0
278
+ },
279
+ "summary": {
280
+ "type": "string",
281
+ "minLength": 1
282
+ },
283
+ "reconciled_at": {
284
+ "type": "string",
285
+ "format": "date-time"
286
+ }
287
+ }
288
+ },
289
+ "wave": {
290
+ "type": "object",
291
+ "additionalProperties": false,
292
+ "required": [
293
+ "wave_id",
294
+ "step",
295
+ "declared_at",
296
+ "expected_workers"
297
+ ],
298
+ "properties": {
299
+ "wave_id": {
300
+ "type": "string",
301
+ "minLength": 1
302
+ },
303
+ "step": {
304
+ "type": "string",
305
+ "minLength": 1
306
+ },
307
+ "declared_at": {
308
+ "type": "string",
309
+ "format": "date-time"
310
+ },
311
+ "expected_workers": {
312
+ "type": "array",
313
+ "minItems": 1,
314
+ "items": {
315
+ "$ref": "#/$defs/expected_worker"
316
+ }
317
+ },
318
+ "worker_results": {
319
+ "type": "array",
320
+ "items": {
321
+ "$ref": "#/$defs/worker_result"
322
+ }
323
+ },
324
+ "reconciliation": {
325
+ "$ref": "#/$defs/reconciliation"
326
+ }
327
+ }
328
+ }
329
+ },
330
+ "properties": {
331
+ "schema_version": {
332
+ "type": "string",
333
+ "const": "1.0"
334
+ },
335
+ "task_slug": {
336
+ "type": "string",
337
+ "minLength": 1
338
+ },
339
+ "waves": {
340
+ "type": "array",
341
+ "minItems": 1,
342
+ "items": {
343
+ "$ref": "#/$defs/wave"
344
+ }
345
+ }
346
+ }
347
+ }
@@ -0,0 +1,98 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * check-layer-boundary — kit/engine layer-doctrine ratchet.
4
+ *
5
+ * Doctrine (veritas docs/architecture/engine-surface-seam.md, Invariant 3; ADR 0008/0016):
6
+ * kits distribute by copy/activate/CLI and consume a product engine via CLI + artifacts, NEVER
7
+ * as an npm library import. A kit that `import`s the veritas evaluation engine would fork the
8
+ * layer boundary — the kit must wrap the engine's CLI, not link its code. This is the executable
9
+ * enforcement of that invariant (flow-agents#651).
10
+ *
11
+ * FAILS if any tracked file under kits/ imports `@kontourai/veritas` (or its `/engine` subpath),
12
+ * or if any kit.json declares it as a dependency. The kit's trust-bundle adapter may import
13
+ * `@kontourai/surface` (the open trust format, Layer 3) — that is the sanctioned channel and is
14
+ * NOT matched here. No allowlist: the count is zero today and must stay zero.
15
+ *
16
+ * Not a violation (and not matched — import-syntax-scoped): the many descriptive strings naming
17
+ * "@kontourai/veritas" in kit.json descriptions, docs, and recorded CLI-output fixtures are prose
18
+ * and data, not code imports.
19
+ */
20
+ import { execFileSync } from "node:child_process";
21
+ import { readFileSync } from "node:fs";
22
+
23
+ // Match import/require/dynamic-import of the veritas package (root or /engine subpath) only, so
24
+ // prose/fixture mentions of the package name can never trip it — only an actual code link does.
25
+ const PKG = String.raw`@kontourai/veritas(?:/[A-Za-z0-9_./-]+)?`;
26
+ const IMPORT_PATTERNS = [
27
+ new RegExp(String.raw`from\s+['"](?:${PKG})['"]`),
28
+ new RegExp(String.raw`require(?:\.resolve)?\(\s*['"](?:${PKG})['"]\s*\)`),
29
+ new RegExp(String.raw`import\(\s*['"](?:${PKG})['"]\s*\)`),
30
+ ];
31
+ const SOURCE_EXT = /\.(ts|tsx|mjs|cjs|js|jsx)$/;
32
+
33
+ // Strip comments so an import-SHAPED example inside a doc comment (e.g. a JSDoc `* import ...`
34
+ // line) is not a false positive. A real import statement never starts a line with `//` or `*`,
35
+ // so this only removes prose, never a genuine dependency edge. (Line-scoped — not a full parser;
36
+ // a package name inside a string literal remains matchable, which is intentional.)
37
+ function codeOnly(line) {
38
+ const trimmed = line.trimStart();
39
+ if (trimmed.startsWith("//") || trimmed.startsWith("*") || trimmed.startsWith("/*")) return "";
40
+ return line.replace(/\/\*.*?\*\//g, "").replace(/\/\/.*$/, "");
41
+ }
42
+
43
+ function trackedFiles(dir) {
44
+ return execFileSync("git", ["ls-files", dir], { encoding: "utf8" })
45
+ .split("\n")
46
+ .map((line) => line.trim())
47
+ .filter(Boolean);
48
+ }
49
+
50
+ const violations = [];
51
+
52
+ // 1. Source imports under kits/.
53
+ for (const file of trackedFiles("kits").filter((f) => SOURCE_EXT.test(f))) {
54
+ let text;
55
+ try {
56
+ text = readFileSync(file, "utf8");
57
+ } catch {
58
+ continue;
59
+ }
60
+ text.split("\n").forEach((line, index) => {
61
+ if (IMPORT_PATTERNS.some((re) => re.test(codeOnly(line)))) {
62
+ violations.push(`${file}:${index + 1} imports @kontourai/veritas — kits wrap the engine via CLI, not as a library`);
63
+ }
64
+ });
65
+ }
66
+
67
+ // 2. kit.json dependency declarations.
68
+ for (const file of trackedFiles("kits").filter((f) => f.endsWith("kit.json"))) {
69
+ let manifest;
70
+ try {
71
+ manifest = JSON.parse(readFileSync(file, "utf8"));
72
+ } catch {
73
+ continue;
74
+ }
75
+ for (const field of ["dependencies", "devDependencies", "optionalDependencies", "peerDependencies"]) {
76
+ const decl = manifest[field];
77
+ if (decl && typeof decl === "object" && !Array.isArray(decl)) {
78
+ for (const name of ["@kontourai/veritas"]) {
79
+ if (Object.prototype.hasOwnProperty.call(decl, name)) {
80
+ violations.push(`${file} ${field}.${name} — a kit must not declare the engine as an npm dependency`);
81
+ }
82
+ }
83
+ }
84
+ }
85
+ }
86
+
87
+ if (violations.length) {
88
+ console.error("[check-layer-boundary] FAILED — a kit imports/depends on the veritas engine as a library (engine/surface seam, Invariant 3):");
89
+ for (const v of violations) console.error(` ${v}`);
90
+ console.error(
91
+ "\nKits distribute by copy/activate/CLI and consume the engine via its CLI + recorded artifacts,\n" +
92
+ "never as an npm library import. The trust-bundle adapter may import @kontourai/surface (the open\n" +
93
+ "trust format); it must not import @kontourai/veritas. See veritas docs/architecture/engine-surface-seam.md.",
94
+ );
95
+ process.exitCode = 1;
96
+ } else {
97
+ console.log("[check-layer-boundary] OK — no kit imports or declares the veritas engine as a library.");
98
+ }
@@ -1860,6 +1860,92 @@ test("publish-change reports an external capability gap and self-authored result
1860
1860
  await releaseBuilderFlowAssignment({ sessionDir: session.sessionDir, reason: `test cleanup for ${ambient.actorKey}` });
1861
1861
  });
1862
1862
 
1863
+ async function advanceSessionToPrOpen(session) {
1864
+ await startBuilderFlowSession({ sessionDir: session.sessionDir });
1865
+ const steps = [
1866
+ () => [bundleClaim({ expectation: "selected-work", claimType: "builder.pull-work.selected", subjectType: "work-item" })],
1867
+ () => [
1868
+ bundleClaim({ expectation: "pickup-probe-readiness", claimType: "builder.design-probe.pickup-readiness", subjectType: "work-item" }),
1869
+ bundleClaim({ expectation: "probe-decisions-or-accepted-gaps", claimType: "builder.design-probe.decisions", subjectType: "decision" }),
1870
+ ],
1871
+ () => [bundleClaim({ expectation: "implementation-plan", claimType: "builder.plan.implementation", subjectType: "artifact" })],
1872
+ () => [bundleClaim({ expectation: "implementation-scope", claimType: "builder.execute.scope", subjectType: "change" })],
1873
+ () => [bundleClaim({ expectation: "tests-evidence", claimType: "builder.verify.tests", subjectType: "flow-step" }), ...verifiedTestsPrerequisites(session)],
1874
+ () => [bundleClaim({ expectation: "merge-readiness", claimType: "builder.merge-ready.readiness", subjectType: "change" })],
1875
+ ];
1876
+ let latest = null;
1877
+ for (const entries of steps) latest = await writeAndSync(session, entries());
1878
+ assert.equal(latest.run.state.current_step, "pr-open");
1879
+ return latest;
1880
+ }
1881
+
1882
+ test("pr-open route-back with missing_evidence returns the run to verify and supports repair re-entry (#695 item a)", async () => {
1883
+ const session = makeSession("propen-routeback");
1884
+ await advanceSessionToPrOpen(session);
1885
+
1886
+ // The #663 wedge scenario: a trust divergence is discovered at pr-open. A failing
1887
+ // pull-request-opened claim declaring the missing_evidence route reason must land
1888
+ // the canonical run back at verify — the sanctioned repair surface — not throw.
1889
+ const failureTimestamp = new Date().toISOString();
1890
+ const routed = await writeAndSync(session, [bundleClaim({
1891
+ expectation: "pull-request-opened",
1892
+ claimType: "builder.pr-open.pull-request",
1893
+ subjectType: "pull-request",
1894
+ status: "fail",
1895
+ routeReason: "missing_evidence",
1896
+ timestamp: failureTimestamp,
1897
+ })]);
1898
+
1899
+ assert.equal(routed.attached, true);
1900
+ assert.equal(routed.run.state.current_step, "verify");
1901
+ const routeBacks = routed.run.state.transitions.filter((transition) => transition.type === "route_back");
1902
+ assert.equal(routeBacks.length, 1);
1903
+ assert.equal(routeBacks[0].from_step, "pr-open");
1904
+ assert.equal(routeBacks[0].to_step, "verify");
1905
+ assert.equal(routeBacks[0].route_reason, "missing_evidence");
1906
+ assert.equal(routeBacks[0].gate_id, "builder.publish-learn:pr-open-gate");
1907
+ assert.equal(routed.projection.flow_run.route_back_attempt, 1);
1908
+ assert.equal(routed.projection.flow_run.route_back_max_attempts, 3);
1909
+ assert.match(routed.projection.next_action.summary, /Route-back history: attempt 1\/3 returned to `verify` for `missing_evidence`/);
1910
+
1911
+ // Repair loop: fresh verify evidence re-passes verify, fresh merge-readiness
1912
+ // re-passes merge-ready, and the run returns to pr-open.
1913
+ const repairedAt = new Date(Date.parse(routed.run.state.transitions.at(-1).at) + 1).toISOString();
1914
+ const reverified = await writeAndSync(session, [
1915
+ withIdentitySuffix(bundleClaim({ expectation: "tests-evidence", claimType: "builder.verify.tests", subjectType: "flow-step", timestamp: repairedAt }), "repair"),
1916
+ ...verifiedTestsPrerequisites(session, repairedAt).map((entry, index) => withIdentitySuffix(entry, `repair-${index}`)),
1917
+ ]);
1918
+ assert.equal(reverified.run.state.current_step, "merge-ready");
1919
+ const returned = await writeAndSync(session, [
1920
+ withIdentitySuffix(bundleClaim({ expectation: "merge-readiness", claimType: "builder.merge-ready.readiness", subjectType: "change", timestamp: new Date().toISOString() }), "repair"),
1921
+ ]);
1922
+ assert.equal(returned.run.state.current_step, "pr-open");
1923
+ });
1924
+
1925
+ test("pr-open route-back with an undeclared reason still throws and mutates nothing", async () => {
1926
+ const session = makeSession("propen-undeclared-reason");
1927
+ await advanceSessionToPrOpen(session);
1928
+
1929
+ const flowDirectory = runDir(session.slug, session.projectRoot);
1930
+ const beforeState = readJson(path.join(flowDirectory, "state.json"));
1931
+ const beforeManifest = readJson(path.join(flowDirectory, FLOW_RUN_EVIDENCE_MANIFEST_PATH));
1932
+
1933
+ writeBundle(session.sessionDir, [bundleClaim({
1934
+ expectation: "pull-request-opened",
1935
+ claimType: "builder.pr-open.pull-request",
1936
+ subjectType: "pull-request",
1937
+ status: "fail",
1938
+ routeReason: "stale_critique",
1939
+ timestamp: new Date().toISOString(),
1940
+ })]);
1941
+ await assert.rejects(
1942
+ () => syncBuilderFlowSession({ sessionDir: session.sessionDir }),
1943
+ /route_reason.*is not declared by gate builder\.publish-learn:pr-open-gate/,
1944
+ );
1945
+ assert.deepEqual(readJson(path.join(flowDirectory, "state.json")), beforeState);
1946
+ assert.deepEqual(readJson(path.join(flowDirectory, FLOW_RUN_EVIDENCE_MANIFEST_PATH)), beforeManifest);
1947
+ });
1948
+
1863
1949
  test("recovery loads the slug-bound run, restores every matching projection, and preserves every Flow byte", async () => {
1864
1950
  const session = makeSession("recover-active");
1865
1951
  await startBuilderFlowSession({ sessionDir: session.sessionDir });
@@ -4,7 +4,9 @@ import fs from "node:fs";
4
4
  import os from "node:os";
5
5
  import path from "node:path";
6
6
 
7
- import { resolveEffectiveFlowDefinition, resolveFlowFilePath } from "../../build/src/lib/flow-resolver.js";
7
+ import { validateDefinition } from "@kontourai/flow";
8
+
9
+ import { resolveEffectiveFlowDefinition, resolveFlowFilePath, resolveFlowStep } from "../../build/src/lib/flow-resolver.js";
8
10
 
9
11
  const REPO_ROOT = path.resolve(import.meta.dirname, "../..");
10
12
 
@@ -26,6 +28,23 @@ test("effective Builder definition materializes uses_flow and Flow-native comple
26
28
  );
27
29
  });
28
30
 
31
+ test("composed pr-open-gate declares the missing_evidence repair route to verify (#695 item a)", () => {
32
+ const definition = resolveEffectiveFlowDefinition("builder.build", REPO_ROOT);
33
+ assert.ok(definition);
34
+ const gate = definition.gates["builder.publish-learn:pr-open-gate"];
35
+ assert.deepEqual(gate.on_route_back, { missing_evidence: "verify", default: "verify" });
36
+ assert.deepEqual(gate.route_back_policy, { max_attempts: 3, on_exceeded: "block" });
37
+ // Every declared route-back target must exist in the EFFECTIVE step set — the
38
+ // composed definition (where `verify` lives) must stay a valid Flow definition.
39
+ assert.doesNotThrow(() => validateDefinition(definition));
40
+ // The live resolver surfaces the declared reasons at the composed step, which is
41
+ // what record-gate-claim's --route-reason validation reads.
42
+ const step = resolveFlowStep("builder.build", "pr-open", REPO_ROOT);
43
+ assert.ok(step);
44
+ assert.equal(step.gateId, "builder.publish-learn:pr-open-gate");
45
+ assert.deepEqual([...step.routeBackReasons].sort(), ["default", "missing_evidence"]);
46
+ });
47
+
29
48
  test("installed package definitions resolve when a consumer repo has no kits directory", () => {
30
49
  const consumer = fs.mkdtempSync(path.join(os.tmpdir(), "flow-agents-consumer-"));
31
50
  const resolved = resolveFlowFilePath("builder", "build", "builder.build", consumer, false);
package/src/cli/init.ts CHANGED
@@ -8,6 +8,7 @@ import { createInterface } from "node:readline/promises";
8
8
  import { stdin as input, stdout as output } from "node:process";
9
9
  import { parseArgs, flagBool, flagList, flagString } from "../lib/args.js";
10
10
  import { activateCodexLocal } from "../runtime-adapters.js";
11
+ import { provisionKit, ProvisionConflictError } from "../flow-kit/provision.js";
11
12
  import { main as buildBundles } from "../tools/build-universal-bundles.js";
12
13
  import { root } from "../tools/common.js";
13
14
  import { defaultCodexHome, durableInstallRecordPath, skillsManifestPath } from "../lib/local-artifact-root.js";
@@ -640,7 +641,21 @@ function installBundle(bundle: string, options: InitOptions): number {
640
641
  return result.status ?? 1;
641
642
  }
642
643
 
643
- function activateKits(options: InitOptions): number {
644
+ function kitPathForInit(kitId: string, dest: string): string | null {
645
+ const catalogPath = path.join(root, "kits", "catalog.json");
646
+ if (fs.existsSync(catalogPath)) {
647
+ const catalog = JSON.parse(fs.readFileSync(catalogPath, "utf8")) as { kits?: unknown[] };
648
+ const entry = Array.isArray(catalog.kits)
649
+ ? catalog.kits.find((item) => typeof item === "object" && item !== null && (item as Record<string, unknown>).id === kitId)
650
+ : undefined;
651
+ const rel = entry && typeof entry === "object" ? (entry as Record<string, unknown>).path : undefined;
652
+ if (typeof rel === "string") return path.resolve(root, rel);
653
+ }
654
+ const installed = path.join(dest, "kits", "local", "repositories", kitId);
655
+ return fs.existsSync(installed) ? installed : null;
656
+ }
657
+
658
+ async function activateKits(options: InitOptions): Promise<number> {
644
659
  const activeKitIds = options.activeKitIds ?? [];
645
660
  if (!options.activateKits || activeKitIds.length === 0 || options.runtime !== "codex") return 0;
646
661
  const result = activateCodexLocal(options.dest, options.dest, { kitIdFilter: activeKitIds });
@@ -650,6 +665,19 @@ function activateKits(options: InitOptions): number {
650
665
  }
651
666
  const generated = Array.isArray(result.generated_runtime_files) ? result.generated_runtime_files : [];
652
667
  console.log(`Activated ${generated.length} Codex local runtime asset(s)`);
668
+ for (const kitId of activeKitIds) {
669
+ const kitDir = kitPathForInit(kitId, options.dest);
670
+ if (!kitDir) throw new Error(`activated kit '${kitId}' could not be resolved for provisioning`);
671
+ try {
672
+ const provisioned = await provisionKit(kitDir, options.dest);
673
+ if (provisioned.files.length > 0) console.log(`Provisioned ${provisioned.files.length} file(s) from kit '${kitId}'`);
674
+ } catch (error) {
675
+ if (!(error instanceof ProvisionConflictError)) throw error;
676
+ for (const conflict of error.conflicts) {
677
+ console.warn(`flow-agents init: warning: skipped existing provision '${conflict.target}' from kit '${kitId}'`);
678
+ }
679
+ }
680
+ }
653
681
  return 0;
654
682
  }
655
683
 
@@ -867,7 +895,7 @@ export async function main(argv = process.argv.slice(2)): Promise<number> {
867
895
  const installed = result.status ?? 1;
868
896
  if (installed !== 0) return installed;
869
897
  writeInstallRecord(options.dest, "codex", true, options.activeKitIds ?? []);
870
- return activateKits(options);
898
+ return await activateKits(options);
871
899
  }
872
900
  // --global for pi: NOT_VERIFIED (no documented global dir). Warn and fall through to workspace install.
873
901
  if (options.global && options.runtime === "pi") {
@@ -881,7 +909,7 @@ export async function main(argv = process.argv.slice(2)): Promise<number> {
881
909
  const installed = installBundle(bundle, options);
882
910
  if (installed !== 0) return installed;
883
911
  writeInstallRecord(options.dest, options.runtime, options.global, options.activeKitIds ?? []);
884
- const activated = activateKits(options);
912
+ const activated = await activateKits(options);
885
913
  // G2/G3: shared post-install auto-verify + summary tail. Applies
886
914
  // identically whether main() reached here via headlessOptions() or
887
915
  // interactiveOptions() -- never changes `activated`'s exit code.