@kontourai/flow-agents 4.0.0 → 4.2.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 (507) hide show
  1. package/.github/workflows/ci.yml +8 -0
  2. package/CHANGELOG.md +34 -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/scripts/telemetry/lib/config.sh +29 -0
  19. package/context/settings/backlog-provider-settings.json +1 -1
  20. package/context/settings/workspace-backlog-provider-settings.example.json +1 -1
  21. package/dist/base/build/package.json +1 -1
  22. package/dist/base/build/src/cli/init.js +35 -3
  23. package/dist/base/build/src/cli/kit.js +95 -2
  24. package/dist/base/build/src/cli/pull-work-provider.js +7 -1
  25. package/dist/base/build/src/cli/validate-workflow-artifacts.js +53 -0
  26. package/dist/base/build/src/cli/workflow.js +5 -1
  27. package/dist/base/build/src/flow-kit/provision.d.ts +23 -0
  28. package/dist/base/build/src/flow-kit/provision.js +99 -0
  29. package/dist/base/build/src/flow-kit/validate.d.ts +52 -0
  30. package/dist/base/build/src/flow-kit/validate.js +214 -9
  31. package/dist/base/build/src/runtime-adapters.js +1 -1
  32. package/dist/base/context/contracts/execution-contract.md +30 -1
  33. package/dist/base/context/contracts/review-contract.md +4 -0
  34. package/dist/base/context/contracts/trigger-guards.md +73 -0
  35. package/dist/base/context/scripts/telemetry/lib/config.sh +29 -0
  36. package/dist/base/context/settings/backlog-provider-settings.json +1 -1
  37. package/dist/base/context/settings/workspace-backlog-provider-settings.example.json +1 -1
  38. package/dist/base/docs/adr/0023-kit-provisioning.md +47 -0
  39. package/dist/base/docs/adr/index.md +1 -0
  40. package/dist/base/docs/architecture-engine-and-kits.md +17 -0
  41. package/dist/base/docs/context-map.md +3 -0
  42. package/dist/base/docs/decisions/backlog-readiness-source.md +89 -0
  43. package/dist/base/docs/decisions/index.md +1 -0
  44. package/dist/base/docs/developer-architecture.md +3 -3
  45. package/dist/base/docs/flow-kit-repository-contract.md +34 -3
  46. package/dist/base/docs/kit-authoring-guide.md +1 -1
  47. package/dist/base/docs/veritas-integration.md +12 -0
  48. package/dist/base/evals/ci/run-baseline.sh +4 -0
  49. package/dist/base/evals/integration/test_kit_provisioning.sh +112 -0
  50. package/dist/base/evals/integration/test_liveness_console_relay.sh +91 -1
  51. package/dist/base/evals/integration/test_liveness_heartbeat.sh +66 -0
  52. package/dist/base/evals/integration/test_pull_work_provider.sh +18 -0
  53. package/dist/base/evals/integration/test_veritas_governance_kit.sh +256 -0
  54. package/dist/base/evals/integration/test_workflow_artifacts.sh +257 -0
  55. package/dist/base/evals/static/test_package.sh +6 -0
  56. package/dist/base/evals/static/test_workflow_skills.sh +16 -0
  57. package/dist/base/install.sh +1 -1
  58. package/dist/base/kits/builder/flows/publish-learn.flow.json +9 -1
  59. package/dist/base/kits/builder/skills/execute-plan/SKILL.md +4 -3
  60. package/dist/base/kits/builder/skills/pull-work/SKILL.md +12 -0
  61. package/dist/base/kits/builder/skills/review-work/SKILL.md +11 -0
  62. package/dist/base/kits/veritas-governance/adapter/readiness-to-trust-bundle.mjs +19 -20
  63. package/dist/base/kits/veritas-governance/assets/starter-hooks/githooks/post-commit +13 -0
  64. package/dist/base/kits/veritas-governance/assets/starter-hooks/githooks/pre-push +13 -0
  65. package/dist/base/kits/veritas-governance/assets/starter-standards/veritas/GOVERNANCE.md +23 -0
  66. package/dist/base/kits/veritas-governance/assets/starter-standards/veritas/README.md +58 -0
  67. package/dist/base/kits/veritas-governance/assets/starter-standards/veritas/authority/default.authority-settings.json +30 -0
  68. package/dist/base/kits/veritas-governance/assets/starter-standards/veritas/repo-map.json +115 -0
  69. package/dist/base/kits/veritas-governance/assets/starter-standards/veritas/repo-standards/default.repo-standards.json +54 -0
  70. package/dist/base/kits/veritas-governance/assets/starter-standards/veritas.claims.json +179 -0
  71. package/dist/base/kits/veritas-governance/docs/README.md +141 -10
  72. package/dist/base/kits/veritas-governance/fixtures/standards-authoring/approved.trust-bundle.json +74 -0
  73. package/dist/base/kits/veritas-governance/fixtures/standards-authoring/not-approved.trust-bundle.json +74 -0
  74. package/dist/base/kits/veritas-governance/flows/standards-authoring.flow.json +35 -0
  75. package/dist/base/kits/veritas-governance/kit.json +65 -0
  76. package/dist/base/kits/veritas-governance/skills/consult-standards/SKILL.md +73 -0
  77. package/dist/base/kits/veritas-governance/skills/standards-authoring/SKILL.md +87 -0
  78. package/dist/base/schemas/backlog-provider-settings.schema.json +1 -1
  79. package/dist/base/schemas/workflow-waves.schema.json +347 -0
  80. package/dist/base/scripts/check-layer-boundary.mjs +98 -0
  81. package/dist/base/scripts/hooks/claude-telemetry-hook.js +6 -0
  82. package/dist/base/scripts/hooks/lib/liveness-heartbeat.js +42 -1
  83. package/dist/base/scripts/hooks/lib/liveness-write.js +109 -9
  84. package/dist/base/scripts/liveness/relay.sh +23 -11
  85. package/dist/base/scripts/telemetry/lib/config.sh +29 -0
  86. package/dist/catalog.json +2 -0
  87. package/dist/claude-code/.claude/agents/tool-security-reviewer.md +2 -1
  88. package/dist/claude-code/.claude/skills/consult-standards/SKILL.md +73 -0
  89. package/dist/claude-code/.claude/skills/execute-plan/SKILL.md +4 -3
  90. package/dist/claude-code/.claude/skills/pull-work/SKILL.md +12 -0
  91. package/dist/claude-code/.claude/skills/review-work/SKILL.md +11 -0
  92. package/dist/claude-code/.claude/skills/standards-authoring/SKILL.md +87 -0
  93. package/dist/claude-code/build/package.json +1 -1
  94. package/dist/claude-code/build/src/cli/init.js +35 -3
  95. package/dist/claude-code/build/src/cli/kit.js +95 -2
  96. package/dist/claude-code/build/src/cli/pull-work-provider.js +7 -1
  97. package/dist/claude-code/build/src/cli/validate-workflow-artifacts.js +53 -0
  98. package/dist/claude-code/build/src/cli/workflow.js +5 -1
  99. package/dist/claude-code/build/src/flow-kit/provision.d.ts +23 -0
  100. package/dist/claude-code/build/src/flow-kit/provision.js +99 -0
  101. package/dist/claude-code/build/src/flow-kit/validate.d.ts +52 -0
  102. package/dist/claude-code/build/src/flow-kit/validate.js +214 -9
  103. package/dist/claude-code/build/src/runtime-adapters.js +1 -1
  104. package/dist/claude-code/context/contracts/execution-contract.md +30 -1
  105. package/dist/claude-code/context/contracts/review-contract.md +4 -0
  106. package/dist/claude-code/context/contracts/trigger-guards.md +73 -0
  107. package/dist/claude-code/context/scripts/telemetry/lib/config.sh +29 -0
  108. package/dist/claude-code/context/settings/backlog-provider-settings.json +1 -1
  109. package/dist/claude-code/context/settings/workspace-backlog-provider-settings.example.json +1 -1
  110. package/dist/claude-code/docs/adr/0023-kit-provisioning.md +47 -0
  111. package/dist/claude-code/docs/adr/index.md +1 -0
  112. package/dist/claude-code/docs/architecture-engine-and-kits.md +17 -0
  113. package/dist/claude-code/docs/context-map.md +3 -0
  114. package/dist/claude-code/docs/decisions/backlog-readiness-source.md +89 -0
  115. package/dist/claude-code/docs/decisions/index.md +1 -0
  116. package/dist/claude-code/docs/developer-architecture.md +3 -3
  117. package/dist/claude-code/docs/flow-kit-repository-contract.md +34 -3
  118. package/dist/claude-code/docs/kit-authoring-guide.md +1 -1
  119. package/dist/claude-code/docs/veritas-integration.md +12 -0
  120. package/dist/claude-code/evals/ci/run-baseline.sh +4 -0
  121. package/dist/claude-code/evals/integration/test_kit_provisioning.sh +112 -0
  122. package/dist/claude-code/evals/integration/test_liveness_console_relay.sh +91 -1
  123. package/dist/claude-code/evals/integration/test_liveness_heartbeat.sh +66 -0
  124. package/dist/claude-code/evals/integration/test_pull_work_provider.sh +18 -0
  125. package/dist/claude-code/evals/integration/test_veritas_governance_kit.sh +256 -0
  126. package/dist/claude-code/evals/integration/test_workflow_artifacts.sh +257 -0
  127. package/dist/claude-code/evals/static/test_package.sh +6 -0
  128. package/dist/claude-code/evals/static/test_workflow_skills.sh +16 -0
  129. package/dist/claude-code/install.sh +1 -1
  130. package/dist/claude-code/kits/builder/flows/publish-learn.flow.json +9 -1
  131. package/dist/claude-code/kits/builder/skills/execute-plan/SKILL.md +4 -3
  132. package/dist/claude-code/kits/builder/skills/pull-work/SKILL.md +12 -0
  133. package/dist/claude-code/kits/builder/skills/review-work/SKILL.md +11 -0
  134. package/dist/claude-code/kits/veritas-governance/adapter/readiness-to-trust-bundle.mjs +19 -20
  135. package/dist/claude-code/kits/veritas-governance/assets/starter-hooks/githooks/post-commit +13 -0
  136. package/dist/claude-code/kits/veritas-governance/assets/starter-hooks/githooks/pre-push +13 -0
  137. package/dist/claude-code/kits/veritas-governance/assets/starter-standards/veritas/GOVERNANCE.md +23 -0
  138. package/dist/claude-code/kits/veritas-governance/assets/starter-standards/veritas/README.md +58 -0
  139. package/dist/claude-code/kits/veritas-governance/assets/starter-standards/veritas/authority/default.authority-settings.json +30 -0
  140. package/dist/claude-code/kits/veritas-governance/assets/starter-standards/veritas/repo-map.json +115 -0
  141. package/dist/claude-code/kits/veritas-governance/assets/starter-standards/veritas/repo-standards/default.repo-standards.json +54 -0
  142. package/dist/claude-code/kits/veritas-governance/assets/starter-standards/veritas.claims.json +179 -0
  143. package/dist/claude-code/kits/veritas-governance/docs/README.md +141 -10
  144. package/dist/claude-code/kits/veritas-governance/fixtures/standards-authoring/approved.trust-bundle.json +74 -0
  145. package/dist/claude-code/kits/veritas-governance/fixtures/standards-authoring/not-approved.trust-bundle.json +74 -0
  146. package/dist/claude-code/kits/veritas-governance/flows/standards-authoring.flow.json +35 -0
  147. package/dist/claude-code/kits/veritas-governance/kit.json +65 -0
  148. package/dist/claude-code/kits/veritas-governance/skills/consult-standards/SKILL.md +73 -0
  149. package/dist/claude-code/kits/veritas-governance/skills/standards-authoring/SKILL.md +87 -0
  150. package/dist/claude-code/schemas/backlog-provider-settings.schema.json +1 -1
  151. package/dist/claude-code/schemas/workflow-waves.schema.json +347 -0
  152. package/dist/claude-code/scripts/check-layer-boundary.mjs +98 -0
  153. package/dist/claude-code/scripts/hooks/claude-telemetry-hook.js +6 -0
  154. package/dist/claude-code/scripts/hooks/lib/liveness-heartbeat.js +42 -1
  155. package/dist/claude-code/scripts/hooks/lib/liveness-write.js +109 -9
  156. package/dist/claude-code/scripts/liveness/relay.sh +23 -11
  157. package/dist/claude-code/scripts/telemetry/lib/config.sh +29 -0
  158. package/dist/codex/.agents/skills/builder-shape/context/contracts/execution-contract.md +30 -1
  159. package/dist/codex/.agents/skills/consult-standards/SKILL.md +73 -0
  160. package/dist/codex/.agents/skills/deliver/context/contracts/execution-contract.md +30 -1
  161. package/dist/codex/.agents/skills/design-probe/context/contracts/execution-contract.md +30 -1
  162. package/dist/codex/.agents/skills/execute-plan/SKILL.md +4 -3
  163. package/dist/codex/.agents/skills/execute-plan/context/contracts/execution-contract.md +30 -1
  164. package/dist/codex/.agents/skills/fix-bug/context/contracts/execution-contract.md +30 -1
  165. package/dist/codex/.agents/skills/idea-to-backlog/context/contracts/execution-contract.md +30 -1
  166. package/dist/codex/.agents/skills/plan-work/context/contracts/execution-contract.md +30 -1
  167. package/dist/codex/.agents/skills/pull-work/SKILL.md +12 -0
  168. package/dist/codex/.agents/skills/pull-work/context/contracts/execution-contract.md +30 -1
  169. package/dist/codex/.agents/skills/review-work/SKILL.md +11 -0
  170. package/dist/codex/.agents/skills/review-work/context/contracts/execution-contract.md +30 -1
  171. package/dist/codex/.agents/skills/standards-authoring/SKILL.md +87 -0
  172. package/dist/codex/.agents/skills/tdd-workflow/context/contracts/execution-contract.md +30 -1
  173. package/dist/codex/.agents/skills/verify-work/context/contracts/execution-contract.md +30 -1
  174. package/dist/codex/.codex/agents/tool-security-reviewer.toml +1 -1
  175. package/dist/codex/build/package.json +1 -1
  176. package/dist/codex/build/src/cli/init.js +35 -3
  177. package/dist/codex/build/src/cli/kit.js +95 -2
  178. package/dist/codex/build/src/cli/pull-work-provider.js +7 -1
  179. package/dist/codex/build/src/cli/validate-workflow-artifacts.js +53 -0
  180. package/dist/codex/build/src/cli/workflow.js +5 -1
  181. package/dist/codex/build/src/flow-kit/provision.d.ts +23 -0
  182. package/dist/codex/build/src/flow-kit/provision.js +99 -0
  183. package/dist/codex/build/src/flow-kit/validate.d.ts +52 -0
  184. package/dist/codex/build/src/flow-kit/validate.js +214 -9
  185. package/dist/codex/build/src/runtime-adapters.js +1 -1
  186. package/dist/codex/context/contracts/execution-contract.md +30 -1
  187. package/dist/codex/context/contracts/review-contract.md +4 -0
  188. package/dist/codex/context/contracts/trigger-guards.md +73 -0
  189. package/dist/codex/context/scripts/telemetry/lib/config.sh +29 -0
  190. package/dist/codex/context/settings/backlog-provider-settings.json +1 -1
  191. package/dist/codex/context/settings/workspace-backlog-provider-settings.example.json +1 -1
  192. package/dist/codex/docs/adr/0023-kit-provisioning.md +47 -0
  193. package/dist/codex/docs/adr/index.md +1 -0
  194. package/dist/codex/docs/architecture-engine-and-kits.md +17 -0
  195. package/dist/codex/docs/context-map.md +3 -0
  196. package/dist/codex/docs/decisions/backlog-readiness-source.md +89 -0
  197. package/dist/codex/docs/decisions/index.md +1 -0
  198. package/dist/codex/docs/developer-architecture.md +3 -3
  199. package/dist/codex/docs/flow-kit-repository-contract.md +34 -3
  200. package/dist/codex/docs/kit-authoring-guide.md +1 -1
  201. package/dist/codex/docs/veritas-integration.md +12 -0
  202. package/dist/codex/evals/ci/run-baseline.sh +4 -0
  203. package/dist/codex/evals/integration/test_kit_provisioning.sh +112 -0
  204. package/dist/codex/evals/integration/test_liveness_console_relay.sh +91 -1
  205. package/dist/codex/evals/integration/test_liveness_heartbeat.sh +66 -0
  206. package/dist/codex/evals/integration/test_pull_work_provider.sh +18 -0
  207. package/dist/codex/evals/integration/test_veritas_governance_kit.sh +256 -0
  208. package/dist/codex/evals/integration/test_workflow_artifacts.sh +257 -0
  209. package/dist/codex/evals/static/test_package.sh +6 -0
  210. package/dist/codex/evals/static/test_workflow_skills.sh +16 -0
  211. package/dist/codex/install.sh +1 -1
  212. package/dist/codex/kits/builder/flows/publish-learn.flow.json +9 -1
  213. package/dist/codex/kits/builder/skills/execute-plan/SKILL.md +4 -3
  214. package/dist/codex/kits/builder/skills/pull-work/SKILL.md +12 -0
  215. package/dist/codex/kits/builder/skills/review-work/SKILL.md +11 -0
  216. package/dist/codex/kits/veritas-governance/adapter/readiness-to-trust-bundle.mjs +19 -20
  217. package/dist/codex/kits/veritas-governance/assets/starter-hooks/githooks/post-commit +13 -0
  218. package/dist/codex/kits/veritas-governance/assets/starter-hooks/githooks/pre-push +13 -0
  219. package/dist/codex/kits/veritas-governance/assets/starter-standards/veritas/GOVERNANCE.md +23 -0
  220. package/dist/codex/kits/veritas-governance/assets/starter-standards/veritas/README.md +58 -0
  221. package/dist/codex/kits/veritas-governance/assets/starter-standards/veritas/authority/default.authority-settings.json +30 -0
  222. package/dist/codex/kits/veritas-governance/assets/starter-standards/veritas/repo-map.json +115 -0
  223. package/dist/codex/kits/veritas-governance/assets/starter-standards/veritas/repo-standards/default.repo-standards.json +54 -0
  224. package/dist/codex/kits/veritas-governance/assets/starter-standards/veritas.claims.json +179 -0
  225. package/dist/codex/kits/veritas-governance/docs/README.md +141 -10
  226. package/dist/codex/kits/veritas-governance/fixtures/standards-authoring/approved.trust-bundle.json +74 -0
  227. package/dist/codex/kits/veritas-governance/fixtures/standards-authoring/not-approved.trust-bundle.json +74 -0
  228. package/dist/codex/kits/veritas-governance/flows/standards-authoring.flow.json +35 -0
  229. package/dist/codex/kits/veritas-governance/kit.json +65 -0
  230. package/dist/codex/kits/veritas-governance/skills/consult-standards/SKILL.md +73 -0
  231. package/dist/codex/kits/veritas-governance/skills/standards-authoring/SKILL.md +87 -0
  232. package/dist/codex/schemas/backlog-provider-settings.schema.json +1 -1
  233. package/dist/codex/schemas/workflow-waves.schema.json +347 -0
  234. package/dist/codex/scripts/check-layer-boundary.mjs +98 -0
  235. package/dist/codex/scripts/hooks/claude-telemetry-hook.js +6 -0
  236. package/dist/codex/scripts/hooks/lib/liveness-heartbeat.js +42 -1
  237. package/dist/codex/scripts/hooks/lib/liveness-write.js +109 -9
  238. package/dist/codex/scripts/liveness/relay.sh +23 -11
  239. package/dist/codex/scripts/telemetry/lib/config.sh +29 -0
  240. package/dist/kiro/agents/tool-security-reviewer.json +1 -1
  241. package/dist/kiro/build/package.json +1 -1
  242. package/dist/kiro/build/src/cli/init.js +35 -3
  243. package/dist/kiro/build/src/cli/kit.js +95 -2
  244. package/dist/kiro/build/src/cli/pull-work-provider.js +7 -1
  245. package/dist/kiro/build/src/cli/validate-workflow-artifacts.js +53 -0
  246. package/dist/kiro/build/src/cli/workflow.js +5 -1
  247. package/dist/kiro/build/src/flow-kit/provision.d.ts +23 -0
  248. package/dist/kiro/build/src/flow-kit/provision.js +99 -0
  249. package/dist/kiro/build/src/flow-kit/validate.d.ts +52 -0
  250. package/dist/kiro/build/src/flow-kit/validate.js +214 -9
  251. package/dist/kiro/build/src/runtime-adapters.js +1 -1
  252. package/dist/kiro/context/contracts/execution-contract.md +30 -1
  253. package/dist/kiro/context/contracts/review-contract.md +4 -0
  254. package/dist/kiro/context/contracts/trigger-guards.md +73 -0
  255. package/dist/kiro/context/scripts/telemetry/lib/config.sh +29 -0
  256. package/dist/kiro/context/settings/backlog-provider-settings.json +1 -1
  257. package/dist/kiro/context/settings/workspace-backlog-provider-settings.example.json +1 -1
  258. package/dist/kiro/docs/adr/0023-kit-provisioning.md +47 -0
  259. package/dist/kiro/docs/adr/index.md +1 -0
  260. package/dist/kiro/docs/architecture-engine-and-kits.md +17 -0
  261. package/dist/kiro/docs/context-map.md +3 -0
  262. package/dist/kiro/docs/decisions/backlog-readiness-source.md +89 -0
  263. package/dist/kiro/docs/decisions/index.md +1 -0
  264. package/dist/kiro/docs/developer-architecture.md +3 -3
  265. package/dist/kiro/docs/flow-kit-repository-contract.md +34 -3
  266. package/dist/kiro/docs/kit-authoring-guide.md +1 -1
  267. package/dist/kiro/docs/veritas-integration.md +12 -0
  268. package/dist/kiro/evals/ci/run-baseline.sh +4 -0
  269. package/dist/kiro/evals/integration/test_kit_provisioning.sh +112 -0
  270. package/dist/kiro/evals/integration/test_liveness_console_relay.sh +91 -1
  271. package/dist/kiro/evals/integration/test_liveness_heartbeat.sh +66 -0
  272. package/dist/kiro/evals/integration/test_pull_work_provider.sh +18 -0
  273. package/dist/kiro/evals/integration/test_veritas_governance_kit.sh +256 -0
  274. package/dist/kiro/evals/integration/test_workflow_artifacts.sh +257 -0
  275. package/dist/kiro/evals/static/test_package.sh +6 -0
  276. package/dist/kiro/evals/static/test_workflow_skills.sh +16 -0
  277. package/dist/kiro/install.sh +1 -1
  278. package/dist/kiro/kits/builder/flows/publish-learn.flow.json +9 -1
  279. package/dist/kiro/kits/builder/skills/execute-plan/SKILL.md +4 -3
  280. package/dist/kiro/kits/builder/skills/pull-work/SKILL.md +12 -0
  281. package/dist/kiro/kits/builder/skills/review-work/SKILL.md +11 -0
  282. package/dist/kiro/kits/veritas-governance/adapter/readiness-to-trust-bundle.mjs +19 -20
  283. package/dist/kiro/kits/veritas-governance/assets/starter-hooks/githooks/post-commit +13 -0
  284. package/dist/kiro/kits/veritas-governance/assets/starter-hooks/githooks/pre-push +13 -0
  285. package/dist/kiro/kits/veritas-governance/assets/starter-standards/veritas/GOVERNANCE.md +23 -0
  286. package/dist/kiro/kits/veritas-governance/assets/starter-standards/veritas/README.md +58 -0
  287. package/dist/kiro/kits/veritas-governance/assets/starter-standards/veritas/authority/default.authority-settings.json +30 -0
  288. package/dist/kiro/kits/veritas-governance/assets/starter-standards/veritas/repo-map.json +115 -0
  289. package/dist/kiro/kits/veritas-governance/assets/starter-standards/veritas/repo-standards/default.repo-standards.json +54 -0
  290. package/dist/kiro/kits/veritas-governance/assets/starter-standards/veritas.claims.json +179 -0
  291. package/dist/kiro/kits/veritas-governance/docs/README.md +141 -10
  292. package/dist/kiro/kits/veritas-governance/fixtures/standards-authoring/approved.trust-bundle.json +74 -0
  293. package/dist/kiro/kits/veritas-governance/fixtures/standards-authoring/not-approved.trust-bundle.json +74 -0
  294. package/dist/kiro/kits/veritas-governance/flows/standards-authoring.flow.json +35 -0
  295. package/dist/kiro/kits/veritas-governance/kit.json +65 -0
  296. package/dist/kiro/kits/veritas-governance/skills/consult-standards/SKILL.md +73 -0
  297. package/dist/kiro/kits/veritas-governance/skills/standards-authoring/SKILL.md +87 -0
  298. package/dist/kiro/schemas/backlog-provider-settings.schema.json +1 -1
  299. package/dist/kiro/schemas/workflow-waves.schema.json +347 -0
  300. package/dist/kiro/scripts/check-layer-boundary.mjs +98 -0
  301. package/dist/kiro/scripts/hooks/claude-telemetry-hook.js +6 -0
  302. package/dist/kiro/scripts/hooks/lib/liveness-heartbeat.js +42 -1
  303. package/dist/kiro/scripts/hooks/lib/liveness-write.js +109 -9
  304. package/dist/kiro/scripts/liveness/relay.sh +23 -11
  305. package/dist/kiro/scripts/telemetry/lib/config.sh +29 -0
  306. package/dist/opencode/.opencode/agents/tool-security-reviewer.md +2 -1
  307. package/dist/opencode/.opencode/skills/consult-standards/SKILL.md +73 -0
  308. package/dist/opencode/.opencode/skills/execute-plan/SKILL.md +4 -3
  309. package/dist/opencode/.opencode/skills/pull-work/SKILL.md +12 -0
  310. package/dist/opencode/.opencode/skills/review-work/SKILL.md +11 -0
  311. package/dist/opencode/.opencode/skills/standards-authoring/SKILL.md +87 -0
  312. package/dist/opencode/build/package.json +1 -1
  313. package/dist/opencode/build/src/cli/init.js +35 -3
  314. package/dist/opencode/build/src/cli/kit.js +95 -2
  315. package/dist/opencode/build/src/cli/pull-work-provider.js +7 -1
  316. package/dist/opencode/build/src/cli/validate-workflow-artifacts.js +53 -0
  317. package/dist/opencode/build/src/cli/workflow.js +5 -1
  318. package/dist/opencode/build/src/flow-kit/provision.d.ts +23 -0
  319. package/dist/opencode/build/src/flow-kit/provision.js +99 -0
  320. package/dist/opencode/build/src/flow-kit/validate.d.ts +52 -0
  321. package/dist/opencode/build/src/flow-kit/validate.js +214 -9
  322. package/dist/opencode/build/src/runtime-adapters.js +1 -1
  323. package/dist/opencode/context/contracts/execution-contract.md +30 -1
  324. package/dist/opencode/context/contracts/review-contract.md +4 -0
  325. package/dist/opencode/context/contracts/trigger-guards.md +73 -0
  326. package/dist/opencode/context/scripts/telemetry/lib/config.sh +29 -0
  327. package/dist/opencode/context/settings/backlog-provider-settings.json +1 -1
  328. package/dist/opencode/context/settings/workspace-backlog-provider-settings.example.json +1 -1
  329. package/dist/opencode/docs/adr/0023-kit-provisioning.md +47 -0
  330. package/dist/opencode/docs/adr/index.md +1 -0
  331. package/dist/opencode/docs/architecture-engine-and-kits.md +17 -0
  332. package/dist/opencode/docs/context-map.md +3 -0
  333. package/dist/opencode/docs/decisions/backlog-readiness-source.md +89 -0
  334. package/dist/opencode/docs/decisions/index.md +1 -0
  335. package/dist/opencode/docs/developer-architecture.md +3 -3
  336. package/dist/opencode/docs/flow-kit-repository-contract.md +34 -3
  337. package/dist/opencode/docs/kit-authoring-guide.md +1 -1
  338. package/dist/opencode/docs/veritas-integration.md +12 -0
  339. package/dist/opencode/evals/ci/run-baseline.sh +4 -0
  340. package/dist/opencode/evals/integration/test_kit_provisioning.sh +112 -0
  341. package/dist/opencode/evals/integration/test_liveness_console_relay.sh +91 -1
  342. package/dist/opencode/evals/integration/test_liveness_heartbeat.sh +66 -0
  343. package/dist/opencode/evals/integration/test_pull_work_provider.sh +18 -0
  344. package/dist/opencode/evals/integration/test_veritas_governance_kit.sh +256 -0
  345. package/dist/opencode/evals/integration/test_workflow_artifacts.sh +257 -0
  346. package/dist/opencode/evals/static/test_package.sh +6 -0
  347. package/dist/opencode/evals/static/test_workflow_skills.sh +16 -0
  348. package/dist/opencode/install.sh +1 -1
  349. package/dist/opencode/kits/builder/flows/publish-learn.flow.json +9 -1
  350. package/dist/opencode/kits/builder/skills/execute-plan/SKILL.md +4 -3
  351. package/dist/opencode/kits/builder/skills/pull-work/SKILL.md +12 -0
  352. package/dist/opencode/kits/builder/skills/review-work/SKILL.md +11 -0
  353. package/dist/opencode/kits/veritas-governance/adapter/readiness-to-trust-bundle.mjs +19 -20
  354. package/dist/opencode/kits/veritas-governance/assets/starter-hooks/githooks/post-commit +13 -0
  355. package/dist/opencode/kits/veritas-governance/assets/starter-hooks/githooks/pre-push +13 -0
  356. package/dist/opencode/kits/veritas-governance/assets/starter-standards/veritas/GOVERNANCE.md +23 -0
  357. package/dist/opencode/kits/veritas-governance/assets/starter-standards/veritas/README.md +58 -0
  358. package/dist/opencode/kits/veritas-governance/assets/starter-standards/veritas/authority/default.authority-settings.json +30 -0
  359. package/dist/opencode/kits/veritas-governance/assets/starter-standards/veritas/repo-map.json +115 -0
  360. package/dist/opencode/kits/veritas-governance/assets/starter-standards/veritas/repo-standards/default.repo-standards.json +54 -0
  361. package/dist/opencode/kits/veritas-governance/assets/starter-standards/veritas.claims.json +179 -0
  362. package/dist/opencode/kits/veritas-governance/docs/README.md +141 -10
  363. package/dist/opencode/kits/veritas-governance/fixtures/standards-authoring/approved.trust-bundle.json +74 -0
  364. package/dist/opencode/kits/veritas-governance/fixtures/standards-authoring/not-approved.trust-bundle.json +74 -0
  365. package/dist/opencode/kits/veritas-governance/flows/standards-authoring.flow.json +35 -0
  366. package/dist/opencode/kits/veritas-governance/kit.json +65 -0
  367. package/dist/opencode/kits/veritas-governance/skills/consult-standards/SKILL.md +73 -0
  368. package/dist/opencode/kits/veritas-governance/skills/standards-authoring/SKILL.md +87 -0
  369. package/dist/opencode/schemas/backlog-provider-settings.schema.json +1 -1
  370. package/dist/opencode/schemas/workflow-waves.schema.json +347 -0
  371. package/dist/opencode/scripts/check-layer-boundary.mjs +98 -0
  372. package/dist/opencode/scripts/hooks/claude-telemetry-hook.js +6 -0
  373. package/dist/opencode/scripts/hooks/lib/liveness-heartbeat.js +42 -1
  374. package/dist/opencode/scripts/hooks/lib/liveness-write.js +109 -9
  375. package/dist/opencode/scripts/liveness/relay.sh +23 -11
  376. package/dist/opencode/scripts/telemetry/lib/config.sh +29 -0
  377. package/dist/pi/.pi/skills/consult-standards/SKILL.md +73 -0
  378. package/dist/pi/.pi/skills/execute-plan/SKILL.md +4 -3
  379. package/dist/pi/.pi/skills/pull-work/SKILL.md +12 -0
  380. package/dist/pi/.pi/skills/review-work/SKILL.md +11 -0
  381. package/dist/pi/.pi/skills/standards-authoring/SKILL.md +87 -0
  382. package/dist/pi/build/package.json +1 -1
  383. package/dist/pi/build/src/cli/init.js +35 -3
  384. package/dist/pi/build/src/cli/kit.js +95 -2
  385. package/dist/pi/build/src/cli/pull-work-provider.js +7 -1
  386. package/dist/pi/build/src/cli/validate-workflow-artifacts.js +53 -0
  387. package/dist/pi/build/src/cli/workflow.js +5 -1
  388. package/dist/pi/build/src/flow-kit/provision.d.ts +23 -0
  389. package/dist/pi/build/src/flow-kit/provision.js +99 -0
  390. package/dist/pi/build/src/flow-kit/validate.d.ts +52 -0
  391. package/dist/pi/build/src/flow-kit/validate.js +214 -9
  392. package/dist/pi/build/src/runtime-adapters.js +1 -1
  393. package/dist/pi/context/contracts/execution-contract.md +30 -1
  394. package/dist/pi/context/contracts/review-contract.md +4 -0
  395. package/dist/pi/context/contracts/trigger-guards.md +73 -0
  396. package/dist/pi/context/scripts/telemetry/lib/config.sh +29 -0
  397. package/dist/pi/context/settings/backlog-provider-settings.json +1 -1
  398. package/dist/pi/context/settings/workspace-backlog-provider-settings.example.json +1 -1
  399. package/dist/pi/docs/adr/0023-kit-provisioning.md +47 -0
  400. package/dist/pi/docs/adr/index.md +1 -0
  401. package/dist/pi/docs/architecture-engine-and-kits.md +17 -0
  402. package/dist/pi/docs/context-map.md +3 -0
  403. package/dist/pi/docs/decisions/backlog-readiness-source.md +89 -0
  404. package/dist/pi/docs/decisions/index.md +1 -0
  405. package/dist/pi/docs/developer-architecture.md +3 -3
  406. package/dist/pi/docs/flow-kit-repository-contract.md +34 -3
  407. package/dist/pi/docs/kit-authoring-guide.md +1 -1
  408. package/dist/pi/docs/veritas-integration.md +12 -0
  409. package/dist/pi/evals/ci/run-baseline.sh +4 -0
  410. package/dist/pi/evals/integration/test_kit_provisioning.sh +112 -0
  411. package/dist/pi/evals/integration/test_liveness_console_relay.sh +91 -1
  412. package/dist/pi/evals/integration/test_liveness_heartbeat.sh +66 -0
  413. package/dist/pi/evals/integration/test_pull_work_provider.sh +18 -0
  414. package/dist/pi/evals/integration/test_veritas_governance_kit.sh +256 -0
  415. package/dist/pi/evals/integration/test_workflow_artifacts.sh +257 -0
  416. package/dist/pi/evals/static/test_package.sh +6 -0
  417. package/dist/pi/evals/static/test_workflow_skills.sh +16 -0
  418. package/dist/pi/install.sh +1 -1
  419. package/dist/pi/kits/builder/flows/publish-learn.flow.json +9 -1
  420. package/dist/pi/kits/builder/skills/execute-plan/SKILL.md +4 -3
  421. package/dist/pi/kits/builder/skills/pull-work/SKILL.md +12 -0
  422. package/dist/pi/kits/builder/skills/review-work/SKILL.md +11 -0
  423. package/dist/pi/kits/veritas-governance/adapter/readiness-to-trust-bundle.mjs +19 -20
  424. package/dist/pi/kits/veritas-governance/assets/starter-hooks/githooks/post-commit +13 -0
  425. package/dist/pi/kits/veritas-governance/assets/starter-hooks/githooks/pre-push +13 -0
  426. package/dist/pi/kits/veritas-governance/assets/starter-standards/veritas/GOVERNANCE.md +23 -0
  427. package/dist/pi/kits/veritas-governance/assets/starter-standards/veritas/README.md +58 -0
  428. package/dist/pi/kits/veritas-governance/assets/starter-standards/veritas/authority/default.authority-settings.json +30 -0
  429. package/dist/pi/kits/veritas-governance/assets/starter-standards/veritas/repo-map.json +115 -0
  430. package/dist/pi/kits/veritas-governance/assets/starter-standards/veritas/repo-standards/default.repo-standards.json +54 -0
  431. package/dist/pi/kits/veritas-governance/assets/starter-standards/veritas.claims.json +179 -0
  432. package/dist/pi/kits/veritas-governance/docs/README.md +141 -10
  433. package/dist/pi/kits/veritas-governance/fixtures/standards-authoring/approved.trust-bundle.json +74 -0
  434. package/dist/pi/kits/veritas-governance/fixtures/standards-authoring/not-approved.trust-bundle.json +74 -0
  435. package/dist/pi/kits/veritas-governance/flows/standards-authoring.flow.json +35 -0
  436. package/dist/pi/kits/veritas-governance/kit.json +65 -0
  437. package/dist/pi/kits/veritas-governance/skills/consult-standards/SKILL.md +73 -0
  438. package/dist/pi/kits/veritas-governance/skills/standards-authoring/SKILL.md +87 -0
  439. package/dist/pi/schemas/backlog-provider-settings.schema.json +1 -1
  440. package/dist/pi/schemas/workflow-waves.schema.json +347 -0
  441. package/dist/pi/scripts/check-layer-boundary.mjs +98 -0
  442. package/dist/pi/scripts/hooks/claude-telemetry-hook.js +6 -0
  443. package/dist/pi/scripts/hooks/lib/liveness-heartbeat.js +42 -1
  444. package/dist/pi/scripts/hooks/lib/liveness-write.js +109 -9
  445. package/dist/pi/scripts/liveness/relay.sh +23 -11
  446. package/dist/pi/scripts/telemetry/lib/config.sh +29 -0
  447. package/docs/adr/0023-kit-provisioning.md +47 -0
  448. package/docs/adr/index.md +1 -0
  449. package/docs/architecture-engine-and-kits.md +17 -0
  450. package/docs/context-map.md +3 -0
  451. package/docs/decisions/backlog-readiness-source.md +89 -0
  452. package/docs/decisions/index.md +1 -0
  453. package/docs/developer-architecture.md +3 -3
  454. package/docs/flow-kit-repository-contract.md +34 -3
  455. package/docs/kit-authoring-guide.md +1 -1
  456. package/docs/veritas-integration.md +12 -0
  457. package/evals/ci/run-baseline.sh +4 -0
  458. package/evals/integration/test_kit_provisioning.sh +112 -0
  459. package/evals/integration/test_liveness_console_relay.sh +91 -1
  460. package/evals/integration/test_liveness_heartbeat.sh +66 -0
  461. package/evals/integration/test_pull_work_provider.sh +18 -0
  462. package/evals/integration/test_veritas_governance_kit.sh +256 -0
  463. package/evals/integration/test_workflow_artifacts.sh +257 -0
  464. package/evals/static/test_package.sh +6 -0
  465. package/evals/static/test_workflow_skills.sh +16 -0
  466. package/kits/builder/flows/publish-learn.flow.json +9 -1
  467. package/kits/builder/skills/execute-plan/SKILL.md +4 -3
  468. package/kits/builder/skills/pull-work/SKILL.md +12 -0
  469. package/kits/builder/skills/review-work/SKILL.md +11 -0
  470. package/kits/veritas-governance/adapter/readiness-to-trust-bundle.mjs +19 -20
  471. package/kits/veritas-governance/assets/starter-hooks/githooks/post-commit +13 -0
  472. package/kits/veritas-governance/assets/starter-hooks/githooks/pre-push +13 -0
  473. package/kits/veritas-governance/assets/starter-standards/veritas/GOVERNANCE.md +23 -0
  474. package/kits/veritas-governance/assets/starter-standards/veritas/README.md +58 -0
  475. package/kits/veritas-governance/assets/starter-standards/veritas/authority/default.authority-settings.json +30 -0
  476. package/kits/veritas-governance/assets/starter-standards/veritas/repo-map.json +115 -0
  477. package/kits/veritas-governance/assets/starter-standards/veritas/repo-standards/default.repo-standards.json +54 -0
  478. package/kits/veritas-governance/assets/starter-standards/veritas.claims.json +179 -0
  479. package/kits/veritas-governance/docs/README.md +141 -10
  480. package/kits/veritas-governance/fixtures/standards-authoring/approved.trust-bundle.json +74 -0
  481. package/kits/veritas-governance/fixtures/standards-authoring/not-approved.trust-bundle.json +74 -0
  482. package/kits/veritas-governance/flows/standards-authoring.flow.json +35 -0
  483. package/kits/veritas-governance/kit.json +65 -0
  484. package/kits/veritas-governance/skills/consult-standards/SKILL.md +73 -0
  485. package/kits/veritas-governance/skills/standards-authoring/SKILL.md +87 -0
  486. package/package.json +2 -1
  487. package/schemas/backlog-provider-settings.schema.json +1 -1
  488. package/schemas/workflow-waves.schema.json +347 -0
  489. package/scripts/check-layer-boundary.mjs +98 -0
  490. package/scripts/hooks/claude-telemetry-hook.js +6 -0
  491. package/scripts/hooks/lib/liveness-heartbeat.js +42 -1
  492. package/scripts/hooks/lib/liveness-write.js +109 -9
  493. package/scripts/liveness/relay.sh +23 -11
  494. package/scripts/telemetry/lib/config.sh +29 -0
  495. package/src/cli/builder-flow-runtime.test.mjs +86 -0
  496. package/src/cli/flow-resolver-composition.test.mjs +20 -1
  497. package/src/cli/init.ts +31 -3
  498. package/src/cli/kit-metadata-security.test.mjs +163 -1
  499. package/src/cli/kit-provisioning.test.mjs +122 -0
  500. package/src/cli/kit.ts +83 -2
  501. package/src/cli/pull-work-provider.ts +7 -1
  502. package/src/cli/validate-waves.test.mjs +134 -0
  503. package/src/cli/validate-workflow-artifacts.ts +47 -0
  504. package/src/cli/workflow.ts +7 -1
  505. package/src/flow-kit/provision.ts +118 -0
  506. package/src/flow-kit/validate.ts +233 -10
  507. package/src/runtime-adapters.ts +1 -1
@@ -102,9 +102,26 @@ Kit trust is orthogonal to engine privilege. A marketplace may call a kit offici
102
102
 
103
103
  The answer is determined by validation, activation, and gate evidence, not by a privileged kit list.
104
104
 
105
+ ## The Portfolio Layer Doctrine
106
+
107
+ The engine/kits split here is Flow Agents' instance of the portfolio-wide **Layer Doctrine**
108
+ ([surface/docs/architecture/portfolio-layer-doctrine.md](https://github.com/kontourai/surface/blob/main/docs/architecture/portfolio-layer-doctrine.md)):
109
+ dependency direction is one-way up the stack (open trust format → building-block tools → Surface →
110
+ products), and no layer reaches sideways into a peer. A product engine (e.g. `@kontourai/veritas`)
111
+ never depends on the platform, and a **kit consumes an engine only through its CLI + recorded
112
+ artifacts, never as an npm library import** — the whole point of the manifest/catalog model above.
113
+ Both edges are now enforced executably: veritas-side by `check-no-flow-agents-dep.mjs` (the engine
114
+ declares no flow-agents dependency) and here by [`scripts/check-layer-boundary.mjs`](../scripts/check-layer-boundary.mjs)
115
+ (no kit imports the veritas engine as a library). See veritas's
116
+ [Engine / Surface Seam](https://github.com/kontourai/veritas/blob/main/docs/architecture/engine-surface-seam.md)
117
+ for the canonical engine-vs-kit capability inventory that the Veritas Governance Kit row above
118
+ builds on.
119
+
105
120
  ## Related docs
106
121
 
107
122
  - [Flow Kit Authoring Guide](kit-authoring-guide.md)
108
123
  - [Flow Kit Repository Contract](flow-kit-repository-contract.md)
109
124
  - [Runtime Hook Surface spec](spec/runtime-hook-surface.md)
110
125
  - [Verifiable Trust](verifiable-trust.md)
126
+ - [Veritas Engine / Surface Seam](https://github.com/kontourai/veritas/blob/main/docs/architecture/engine-surface-seam.md) — how `@kontourai/veritas` splits into an engine library + the kit-owned product surface
127
+ - [Portfolio Layer Doctrine](https://github.com/kontourai/surface/blob/main/docs/architecture/portfolio-layer-doctrine.md)
@@ -71,6 +71,7 @@ Machine-readable workflow state lives beside Markdown artifacts in `.kontourai/f
71
71
  | workflow-learning.schema.json | Flow Agents Workflow Learning | https://flow-agents.dev/schemas/workflow-learning.schema.json |
72
72
  | workflow-release.schema.json | Flow Agents Workflow Release Readiness | https://flow-agents.dev/schemas/workflow-release.schema.json |
73
73
  | workflow-state.schema.json | Flow Agents Workflow State | https://flow-agents.dev/schemas/workflow-state.schema.json |
74
+ | workflow-waves.schema.json | Flow Agents Workflow Waves | https://flow-agents.dev/schemas/workflow-waves.schema.json |
74
75
 
75
76
  Primary tools: public `flow-agents workflow`, `trust.bundle`, artifact validation, `scripts/hooks/stop-goal-fit.js`, and `scripts/hooks/workflow-steering.js`. The package-internal writer is not an agent or consumer interface.
76
77
 
@@ -100,6 +101,7 @@ Primary tools: public `flow-agents workflow`, `trust.bundle`, artifact validatio
100
101
  | agentic-engineering | skills/agentic-engineering/SKILL.md | Eval-first execution, task decomposition, and cost-aware model routing for AI-driven development workflows. |
101
102
  | browser-test | skills/browser-test/SKILL.md | Headless browser automation via Playwright — screenshots, accessibility checks, form filling, UI testing, DOM inspection. |
102
103
  | builder-shape | kits/builder/skills/builder-shape/SKILL.md | Builder Kit shaping entrypoint. Turns a raw idea into a provider-neutral, reviewable backlog proposal and stops before build selection unless the user explicitly continues. |
104
+ | consult-standards | kits/veritas-governance/skills/consult-standards/SKILL.md | Get just-in-time Veritas governance guidance for a file or work area before editing it: run `veritas explain --file <path>` (or `--work-area <id>`) to see the governance excerpt, the Repo Standards rules that apply, their do/don't/exampl... |
103
105
  | dependency-update | skills/dependency-update/SKILL.md | Analyze and upgrade project dependencies — latest versions, security vulnerabilities, actionable update plan across all package managers. |
104
106
  | design-probe | kits/builder/skills/design-probe/SKILL.md | Generic one-question-at-a-time design probe for turning unclear goals, designs, and handoffs into shared understanding. |
105
107
  | eval-rebuild | skills/eval-rebuild/SKILL.md | Project-specific build and install commands for the eval feedback loop. Injected into eval-builder agent. Replace this skill for different build systems. |
@@ -108,6 +110,7 @@ Primary tools: public `flow-agents workflow`, `trust.bundle`, artifact validatio
108
110
  | knowledge-capture | kits/knowledge/skills/knowledge-capture/SKILL.md | Save durable knowledge, lightweight pointers, user corrections, decisions, lessons, relationship context, or source references into the knowledge base. Use when the user says save, remember, capture, file this, bookmark context, or when... |
109
111
  | pickup-probe | kits/builder/skills/pickup-probe/SKILL.md | Provider-grounded pickup probe used at the Builder design-probe step before planning. |
110
112
  | search-first | skills/search-first/SKILL.md | Research-before-coding workflow. Search for existing tools, libraries, and patterns before writing custom code. |
113
+ | standards-authoring | kits/veritas-governance/skills/standards-authoring/SKILL.md | Author or update a repo's Veritas Repo Standards through the kit's standards-authoring flow: run `veritas init --explore`/`--guided` to derive a proposed starter set (project name, repo-shape-adaptive Repo Map nodes, evidence-check infer... |
111
114
 
112
115
  ## Agents
113
116
 
@@ -0,0 +1,89 @@
1
+ ---
2
+ status: current
3
+ subject: Backlog Readiness Source
4
+ decided: 2026-07-16
5
+ evidence:
6
+ - kind: issue
7
+ ref: https://github.com/kontourai/flow-agents/issues/441
8
+ - kind: pr
9
+ ref: https://github.com/kontourai/flow-agents/pull/449
10
+ - kind: commit
11
+ ref: c19c3e64a214be7d5b2585004fd3c4f2597781e5
12
+ - kind: url
13
+ ref: https://claude.ai/code/session_01SmQYjiUo1aDSXgEKyiye7M
14
+ ---
15
+
16
+ # Backlog Readiness Source
17
+
18
+ Which signal marks a Work Item intentionally ready for pickup, and what
19
+ `pull-work` is allowed to do when that signal yields nothing.
20
+
21
+ ## Decision
22
+
23
+ - **The org project board is the readiness source.** The configured
24
+ BoardProvider — org GitHub Project `kontourai/1` ("Flow Agents Builder
25
+ Platform") — carries readiness as board Status. `ready_statuses=["ready"]`
26
+ is the pickup filter; the board's `Priority` field ranks the cross-repo
27
+ ready queue.
28
+ - **Triage is the automated intake status.** Every new `kontourai/*` issue is
29
+ added to the board with Status=Triage by the shared reusable workflow
30
+ (`kontourai/.github` `add-issue-to-project.yml`, called per-repo from
31
+ `.github/workflows/add-to-project.yml`); closing an issue moves it to Done.
32
+ Nothing reaches Ready automatically.
33
+ - **The Triage → Ready move is the intentionality act.** Moving an item to
34
+ Ready (and setting Priority) is the triage responsibility that makes work
35
+ eligible for agent pickup. This is a deliberate human/triage-pass decision,
36
+ not automation.
37
+ - **A configured readiness source that yields nothing is a surfaced warning,
38
+ never a silent fallback.** The board reader emits `zero_ready_items` when
39
+ the configured board produces an empty ready queue (landed with PR #449),
40
+ and the issue-listing path emits `board_provider_bypassed` whenever a
41
+ BoardProvider is configured but issue-level listing is used instead.
42
+ `pull-work` must carry these warnings into its artifact and route to
43
+ triage/intake rather than silently substituting unranked issue listing.
44
+ - The settings contract declares the real board taxonomy: the schema's
45
+ `exclude_statuses` vocabulary includes `triage`, and this repo's settings
46
+ exclude `triage` explicitly. `verification` remains in the schema vocabulary
47
+ for provider-neutral shapes even though this board has no such column.
48
+
49
+ ## Evidence basis (re-verified live, 2026-07-16)
50
+
51
+ Issue #441 was shaped on 2026-07-06 evidence that the board was dead (15
52
+ items, all Done, no automation). That premise is now false:
53
+
54
+ - The kontourai org has exactly **one** ProjectV2: `kontourai/1`, open, **468
55
+ items** (306 Triage / 14 Ready / 148 Done) spanning 13 repos; 169 of 171
56
+ open flow-agents issues are on it.
57
+ - The auto-add workflow targets exactly this project
58
+ (`PVT_kwDOEJYCKs4BYzgP`), Status field options: Triage, Ready, In Progress,
59
+ Blocked, Review, Done.
60
+ - A live board-driven `pull-work` read returns a **14-item priority-ranked
61
+ cross-repo ready queue** with zero warnings and zero intake gaps.
62
+ - The agent-path `gh` token carries the `project` scope, so the read:project
63
+ friction recorded in #441 no longer holds.
64
+
65
+ ## Rejected alternative
66
+
67
+ **Label-based readiness (per-repo `ready`/`blocked`/`in-progress` labels).**
68
+ Recommended by #441 when the board was dead, because it needed no board
69
+ maintenance and no extra token scope. Both advantages evaporated once the
70
+ auto-add automation went live org-wide and the agent token gained `project`
71
+ scope — and labels cannot express cross-repo priority ranking without
72
+ inventing a parallel convention per repo. Revisit trigger: if the auto-add
73
+ workflow or `project` token scope regresses for agent environments, reopen
74
+ this subject rather than quietly re-deriving readiness from labels.
75
+
76
+ ## Follow-ups (owned elsewhere, not absorbed here)
77
+
78
+ - **One-time triage sweep** of the ~306 Triage items (and any open issues
79
+ missing from the board) to assign Ready/Priority intentionally — owned by
80
+ the triage pass in #443 item 2. Not executed with this decision: the Ready
81
+ set was already non-empty (14 items), and bulk-moving 300+ items without
82
+ the accepted mechanism would manufacture fake intentionality.
83
+ - **Board maintenance as flow responsibility** (intake adds, claim → In
84
+ Progress, completion Done assertion): #443.
85
+ - **Doctor board-health checks** (configured-but-unfed board, dead readiness
86
+ source, missing token scope): #443 item 5 / #321. Until that surface
87
+ exists, the warnings live in `pull-work` provider output and the
88
+ `pull-work` skill contract only.
89
+ - **Workspace-scoped pull-work** across multiple repos: #444.
@@ -12,6 +12,7 @@ Numbered ADRs under `docs/adr/` are frozen history and are not listed here.
12
12
  | --- | --- | --- |
13
13
  | [agent-coordination](./agent-coordination.md) | current | Agent coordination |
14
14
  | [anti-gaming-trust-security](./anti-gaming-trust-security.md) | needs-decision | Anti-gaming trust security |
15
+ | [backlog-readiness-source](./backlog-readiness-source.md) | current | Backlog Readiness Source |
15
16
  | [context-lifecycle](./context-lifecycle.md) | needs-decision | Context lifecycle |
16
17
  | [core-domain-kit-boundary](./core-domain-kit-boundary.md) | needs-decision | Core vs domain kit boundary |
17
18
  | [decision-records](./decision-records.md) | current | Decision records |
@@ -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
@@ -18,6 +18,13 @@ source "$ROOT/evals/lib/node.sh"
18
18
 
19
19
  TMPDIR_EVAL="$(mktemp -d)"
20
20
  trap 'rm -rf "$TMPDIR_EVAL"; [[ -n "${STUB_PID:-}" ]] && kill "$STUB_PID" 2>/dev/null' EXIT
21
+
22
+ # Hermetic HOME: the conf-driven relay resolver (#567) reads __KIRO_PACKAGE_ROOT__/telemetry-console.conf
23
+ # as a resolution slot. Point HOME at an empty dir so these tests never read the running machine's
24
+ # real console conf — enablement here is controlled only by the env flag / an explicit
25
+ # TELEMETRY_CONFIG_FILE, exactly as each case sets up.
26
+ export HOME="$TMPDIR_EVAL/clean-home"
27
+ mkdir -p "$HOME"
21
28
  PORT=38795
22
29
  RECV="$TMPDIR_EVAL/recv.jsonl"
23
30
 
@@ -29,6 +36,12 @@ fail() { echo " [FAIL] $1"; errors=$((errors + 1)); }
29
36
  # controls the response — "ok" (200) or "fail" (500) — to exercise the relay-failure path.
30
37
  start_stub() {
31
38
  local mode="$1"
39
+ # Fresh port per stub: the relay POST is detached/async, so a late POST from a PRIOR "on" case
40
+ # could otherwise race into the next case's freshly-cleared RECV on a reused port and cause a
41
+ # spurious "a POST happened" failure in a "no POST" assertion. A new port each time sends any
42
+ # stray prior-case POST to a now-dead port (connection refused), never into this case's RECV.
43
+ PORT=$((PORT + 1))
44
+ ENDPOINT="http://127.0.0.1:${PORT}/records"
32
45
  STUB_MODE="$mode" node -e '
33
46
  const http=require("http"),fs=require("fs");
34
47
  const out=process.argv[1], mode=process.env.STUB_MODE||"ok";
@@ -67,7 +80,7 @@ echo "=== console liveness relay (#295) ==="
67
80
  echo "--- 1. relay on+configured: liveness emit mirrors to the Console with Bearer + tenant ---"
68
81
  : > "$RECV"; start_stub ok || { fail "stub server did not start"; }
69
82
  ROOT_A="$TMPDIR_EVAL/a"
70
- EVT1='{"type":"claim","subjectId":"relay-subj-1","actor":"claude-code:sessA:host","actor_key":"claude-code:sessA:host","at":"2026-07-05T00:00:00Z","ttlSeconds":1800,"host":"host","branch":"agent/a/relay-subj-1","artifact_dir":"relay-subj-1"}'
83
+ EVT1='{"type":"claim","subjectId":"relay-subj-1","actor":"claude-code:sessA:host","actor_key":"claude-code:sessA:host","at":"2026-07-05T00:00:00Z","ttlSeconds":1800,"host":"host","branch":"agent/a/relay-subj-1","artifact_dir":"relay-subj-1","source":"tool-activity","activity":{"tool":"Bash"}}'
71
84
  (
72
85
  export FLOW_AGENTS_CONSOLE_LIVENESS_RELAY=1
73
86
  export FLOW_AGENTS_CONSOLE_LIVENESS_ENDPOINT_URL="$ENDPOINT"
@@ -92,6 +105,8 @@ const checks=[
92
105
  ["subjectId", b.subjectId==="relay-subj-1"],
93
106
  ["actor", b.actor==="claude-code:sessA:host"],
94
107
  ["branch", b.branch==="agent/a/relay-subj-1"],
108
+ ["source tool-activity", b.source==="tool-activity"],
109
+ ["activity.tool Bash (richer real-liveness rides to the Console)", !!b.activity && b.activity.tool==="Bash"],
95
110
  ];
96
111
  for(const [name,ok] of checks) console.log((ok?"OK ":"BAD ")+name);
97
112
  ' "$RECV" > "$TMPDIR_EVAL/checks.txt" 2>&1
@@ -156,6 +171,81 @@ console.log(hasRawCtl?"RAW":"ESCAPED");
156
171
  if grep -q ESCAPED "$TMPDIR_EVAL/inj.txt"; then pass "hostile actor/branch control bytes are JSON-escaped, never raw in the POST body (injection discipline)"; else fail "raw control bytes reached the POST body: $(cat "$TMPDIR_EVAL/inj.txt")"; fi
157
172
  stop_stub
158
173
 
174
+ # ─── 6. CONF-DRIVEN enablement (#567): NO env flag, `console_liveness_relay=1` in the conf → POST ─
175
+ echo "--- 6. conf-driven (#567): console_liveness_relay=1 in the conf relays with NO env var ---"
176
+ : > "$RECV"; start_stub ok
177
+ ROOT_F="$TMPDIR_EVAL/f"
178
+ CONF6="$TMPDIR_EVAL/conf6.conf"
179
+ printf 'console_telemetry_url=https://example.invalid\nconsole_liveness_relay=1\n' > "$CONF6"
180
+ (
181
+ unset FLOW_AGENTS_CONSOLE_LIVENESS_RELAY # the whole point: no env var
182
+ export TELEMETRY_CONFIG_FILE="$CONF6"
183
+ export FLOW_AGENTS_CONSOLE_LIVENESS_ENDPOINT_URL="$ENDPOINT" # POST target (stub)
184
+ emit_event "$ROOT_F" '{"type":"claim","subjectId":"conf-on-1","actor":"a","at":"t"}'
185
+ )
186
+ [[ -s "$ROOT_F/liveness/events.jsonl" ]] && pass "local write happened (conf-driven case)" || fail "local write missing (conf-driven)"
187
+ if wait_for_post; then pass "conf-driven relay POSTed with NO env var (console_liveness_relay=1)"; else fail "conf-driven relay did NOT POST (env-var-free enablement broken)"; fi
188
+ stop_stub
189
+
190
+ # ─── 7. CONF-DRIVEN auto-on parity (#469): a console url with no explicit key defaults ON ────────
191
+ echo "--- 7. conf-driven auto-on: a console url with no explicit key relays; explicit =0 suppresses ---"
192
+ : > "$RECV"; start_stub ok
193
+ ROOT_G="$TMPDIR_EVAL/g"
194
+ CONF7="$TMPDIR_EVAL/conf7.conf"
195
+ printf 'console_telemetry_url=https://example.invalid\n' > "$CONF7" # url only, no explicit key
196
+ (
197
+ unset FLOW_AGENTS_CONSOLE_LIVENESS_RELAY
198
+ export TELEMETRY_CONFIG_FILE="$CONF7"
199
+ export FLOW_AGENTS_CONSOLE_LIVENESS_ENDPOINT_URL="$ENDPOINT"
200
+ emit_event "$ROOT_G" '{"type":"claim","subjectId":"auto-on-1","actor":"a","at":"t"}'
201
+ )
202
+ if wait_for_post; then pass "auto-on: a configured console url defaults the relay ON (#469 parity)"; else fail "auto-on did NOT POST (console-url default-on broken)"; fi
203
+ stop_stub
204
+
205
+ : > "$RECV"; start_stub ok
206
+ ROOT_H="$TMPDIR_EVAL/h"
207
+ CONF8="$TMPDIR_EVAL/conf8.conf"
208
+ printf 'console_telemetry_url=https://example.invalid\nconsole_liveness_relay=0\n' > "$CONF8" # explicit off wins
209
+ (
210
+ unset FLOW_AGENTS_CONSOLE_LIVENESS_RELAY
211
+ export TELEMETRY_CONFIG_FILE="$CONF8"
212
+ export FLOW_AGENTS_CONSOLE_LIVENESS_ENDPOINT_URL="$ENDPOINT"
213
+ emit_event "$ROOT_H" '{"type":"claim","subjectId":"conf-off-1","actor":"a","at":"t"}'
214
+ )
215
+ sleep 1
216
+ [[ -s "$ROOT_H/liveness/events.jsonl" ]] && pass "local write happened (explicit conf off)" || fail "local write missing (explicit conf off)"
217
+ [[ ! -s "$RECV" ]] && pass "explicit console_liveness_relay=0 suppresses the relay even with a url (opt-out wins)" || fail "a POST happened despite console_liveness_relay=0"
218
+ stop_stub
219
+
220
+ # ─── 8. EXFIL DEFENSE: an UNTRUSTED (mode 644) default-path conf must NOT relay (trust gate) ─────
221
+ # The cases above drive enablement through TELEMETRY_CONFIG_FILE, which is trusted BY DESIGN (an
222
+ # explicit env override bypasses the mode-600 gate). This case exercises the actual supply-chain
223
+ # defense end-to-end: a conf planted at the user-global default slot (__KIRO_PACKAGE_ROOT__/…, reached via
224
+ # the hermetic HOME set at the top) pointing at an attacker stub with console_liveness_relay=1, but
225
+ # mode 644 — exactly what a non-operator drop (clone/tarball/local tool) can produce, since git can
226
+ # only ship 644/755, never 600. relay.sh re-sources config.sh, whose telemetry_conf_trusted gate
227
+ # (mode 600 + owner + not-a-symlink) rejects it, so no URL resolves and nothing is POSTed — while
228
+ # the durable local write still happens. NO env flag, NO TELEMETRY_CONFIG_FILE, NO endpoint env:
229
+ # the untrusted conf is the ONLY possible signal, so a POST here would be a real exfil regression.
230
+ echo "--- 8. exfil defense: an untrusted (mode 644) __KIRO_PACKAGE_ROOT__ conf with an attacker url never relays ---"
231
+ : > "$RECV"; start_stub ok
232
+ ROOT_X="$TMPDIR_EVAL/x"
233
+ mkdir -p "__KIRO_PACKAGE_ROOT__"
234
+ UNTRUSTED_CONF="__KIRO_PACKAGE_ROOT__/telemetry-console.conf"
235
+ printf 'console_telemetry_url=http://127.0.0.1:%s\nconsole_liveness_relay=1\n' "$PORT" > "$UNTRUSTED_CONF"
236
+ chmod 644 "$UNTRUSTED_CONF"
237
+ (
238
+ unset FLOW_AGENTS_CONSOLE_LIVENESS_RELAY
239
+ unset TELEMETRY_CONFIG_FILE
240
+ unset FLOW_AGENTS_CONSOLE_LIVENESS_ENDPOINT_URL
241
+ emit_event "$ROOT_X" '{"type":"claim","subjectId":"exfil-x","actor":"a","at":"t"}'
242
+ )
243
+ sleep 1
244
+ [[ -s "$ROOT_X/liveness/events.jsonl" ]] && pass "local write happened (untrusted-conf case, local-first intact)" || fail "local write missing (untrusted conf)"
245
+ [[ ! -s "$RECV" ]] && pass "an untrusted (644) default-path conf naming an attacker url NEVER relays (trust gate holds, no exfil)" || fail "EXFIL: a POST reached the attacker stub from an untrusted 644 conf"
246
+ rm -f "$UNTRUSTED_CONF"
247
+ stop_stub
248
+
159
249
  echo ""
160
250
  if [[ "$errors" -eq 0 ]]; then
161
251
  echo "test_liveness_console_relay: all checks passed."
@@ -704,6 +704,72 @@ else
704
704
  _fail "maybeEmitHeartbeat did not neutralize an orphan heartbeat as expected: $J1_OUT"
705
705
  fi
706
706
 
707
+ # ─── K. Richer "real liveness": activity descriptor on the emitted heartbeat ────────────────
708
+ echo "--- K. Activity enrichment (tool name on the pulse) ---"
709
+
710
+ # call_heartbeat_activity <scratch_root> <env_json> <now_iso> <activity_json>
711
+ # Like call_heartbeat, but passes an `activity` descriptor through opts so we can prove the emitted
712
+ # heartbeat carries a sanitized activity field (the "what is this agent doing right now" signal).
713
+ call_heartbeat_activity() {
714
+ local root="$1" env_json="$2" now="$3" activity_json="$4"
715
+ MODULE_ARG="$HEARTBEAT_MODULE" ROOT_ARG="$root" ENV_JSON_ARG="$env_json" NOW_ARG="$now" ACTIVITY_ARG="$activity_json" \
716
+ node - <<'NODE'
717
+ const { maybeEmitHeartbeat } = require(process.env.MODULE_ARG);
718
+ const env = JSON.parse(process.env.ENV_JSON_ARG);
719
+ const opts = { cwd: process.env.ROOT_ARG, env, now: process.env.NOW_ARG, activity: JSON.parse(process.env.ACTIVITY_ARG) };
720
+ process.stdout.write(JSON.stringify(maybeEmitHeartbeat(opts)));
721
+ NODE
722
+ }
723
+
724
+ # K1: a clean tool name rides through onto the emitted heartbeat as activity.tool.
725
+ K1_ROOT="$(new_scratch)"
726
+ seed_claim "$K1_ROOT" "k1-subj" "agent-k1" "2026-06-25T12:00:00.000Z" 1800
727
+ K1_RESULT="$(call_heartbeat_activity "$K1_ROOT" '{"FLOW_AGENTS_ACTOR":"agent-k1"}' "2026-06-25T12:01:00.000Z" '{"tool":"Bash"}')"
728
+ K1_LINE="$(tail -n 1 "$(stream_file "$K1_ROOT")" 2>/dev/null)"
729
+ if [[ "$K1_RESULT" == '{"emitted":true}' ]] \
730
+ && grep -q '"type":"heartbeat"' <<<"$K1_LINE" \
731
+ && grep -q '"activity":{"tool":"Bash"}' <<<"$K1_LINE"; then
732
+ _pass "the emitted heartbeat carries a sanitized activity.tool (what the agent is doing right now)"
733
+ else
734
+ _fail "the heartbeat did not carry the expected activity.tool: result=$K1_RESULT line=$K1_LINE"
735
+ fi
736
+
737
+ # K2: an MCP-style tool name (double underscores + hyphens) survives sanitizeSegment intact.
738
+ K2_ROOT="$(new_scratch)"
739
+ seed_claim "$K2_ROOT" "k2-subj" "agent-k2" "2026-06-25T12:00:00.000Z" 1800
740
+ call_heartbeat_activity "$K2_ROOT" '{"FLOW_AGENTS_ACTOR":"agent-k2"}' "2026-06-25T12:01:00.000Z" '{"tool":"mcp__claude-in-chrome__navigate"}' >/dev/null
741
+ K2_LINE="$(tail -n 1 "$(stream_file "$K2_ROOT")" 2>/dev/null)"
742
+ if grep -q '"activity":{"tool":"mcp__claude-in-chrome__navigate"}' <<<"$K2_LINE"; then
743
+ _pass "an MCP tool name (double underscores + hyphens) rides through the allowlist sanitizer intact"
744
+ else
745
+ _fail "the MCP tool name was not preserved on the activity descriptor: line=$K2_LINE"
746
+ fi
747
+
748
+ # K3: a hostile tool name (control bytes / injection payload) is stripped to the allowlist charset —
749
+ # never emitted raw into the append-only stream.
750
+ K3_ROOT="$(new_scratch)"
751
+ seed_claim "$K3_ROOT" "k3-subj" "agent-k3" "2026-06-25T12:00:00.000Z" 1800
752
+ call_heartbeat_activity "$K3_ROOT" '{"FLOW_AGENTS_ACTOR":"agent-k3"}' "2026-06-25T12:01:00.000Z" '{"tool":"Ba\"sh\n{\"x\":1}"}' >/dev/null
753
+ K3_LINE="$(tail -n 1 "$(stream_file "$K3_ROOT")" 2>/dev/null)"
754
+ # The allowlist keeps only [A-Za-z0-9_.-], so the payload collapses to "Bashx1".
755
+ if grep -q '"activity":{"tool":"Bashx1"}' <<<"$K3_LINE" && ! grep -q 'Ba"sh' <<<"$K3_LINE"; then
756
+ _pass "a hostile tool name is stripped to the allowlist charset, never emitted raw (injection discipline)"
757
+ else
758
+ _fail "the hostile tool name was not sanitized as expected: line=$K3_LINE"
759
+ fi
760
+
761
+ # K4: no activity supplied → the heartbeat is a plain aliveness pulse with NO activity key (the field
762
+ # is omitted, not emitted empty).
763
+ K4_ROOT="$(new_scratch)"
764
+ seed_claim "$K4_ROOT" "k4-subj" "agent-k4" "2026-06-25T12:00:00.000Z" 1800
765
+ call_heartbeat "$K4_ROOT" '{"FLOW_AGENTS_ACTOR":"agent-k4"}' "2026-06-25T12:01:00.000Z" >/dev/null
766
+ K4_LINE="$(tail -n 1 "$(stream_file "$K4_ROOT")" 2>/dev/null)"
767
+ if grep -q '"type":"heartbeat"' <<<"$K4_LINE" && ! grep -q '"activity"' <<<"$K4_LINE"; then
768
+ _pass "with no activity supplied the heartbeat omits the activity field entirely (no empty-object noise)"
769
+ else
770
+ _fail "the no-activity heartbeat unexpectedly carried an activity field: line=$K4_LINE"
771
+ fi
772
+
707
773
  echo ""
708
774
  if [[ "$errors" -eq 0 ]]; then
709
775
  echo "Liveness heartbeat integration passed."