failproofai 1.0.7-beta.1 → 1.0.7

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 (429) hide show
  1. package/.next/standalone/.next/BUILD_ID +1 -1
  2. package/.next/standalone/.next/build-manifest.json +3 -3
  3. package/.next/standalone/.next/prerender-manifest.json +4 -4
  4. package/.next/standalone/.next/required-server-files.json +1 -1
  5. package/.next/standalone/.next/server/app/_global-error/page/server-reference-manifest.json +1 -1
  6. package/.next/standalone/.next/server/app/_global-error/page.js +4 -4
  7. package/.next/standalone/.next/server/app/_global-error/page.js.nft.json +1 -1
  8. package/.next/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  9. package/.next/standalone/.next/server/app/_global-error.html +1 -1
  10. package/.next/standalone/.next/server/app/_global-error.rsc +7 -7
  11. package/.next/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +6 -6
  12. package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +7 -7
  13. package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  14. package/.next/standalone/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
  15. package/.next/standalone/.next/server/app/_not-found/page.js +4 -4
  16. package/.next/standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
  17. package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  18. package/.next/standalone/.next/server/app/_not-found.html +1 -1
  19. package/.next/standalone/.next/server/app/_not-found.rsc +15 -15
  20. package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +15 -15
  21. package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +14 -14
  22. package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  23. package/.next/standalone/.next/server/app/api/audit/invite/route.js.nft.json +1 -1
  24. package/.next/standalone/.next/server/app/api/audit/run/route.js +7 -8
  25. package/.next/standalone/.next/server/app/api/audit/run/route.js.nft.json +1 -1
  26. package/.next/standalone/.next/server/app/api/audit/status/route.js.nft.json +1 -1
  27. package/.next/standalone/.next/server/app/api/auth/login-request/route.js.nft.json +1 -1
  28. package/.next/standalone/.next/server/app/api/auth/login-verify/route.js.nft.json +1 -1
  29. package/.next/standalone/.next/server/app/api/auth/logout/route.js.nft.json +1 -1
  30. package/.next/standalone/.next/server/app/api/auth/status/route.js.nft.json +1 -1
  31. package/.next/standalone/.next/server/app/api/download/[project]/[session]/route.js.nft.json +1 -1
  32. package/.next/standalone/.next/server/app/audit/page/server-reference-manifest.json +2 -2
  33. package/.next/standalone/.next/server/app/audit/page.js +5 -7
  34. package/.next/standalone/.next/server/app/audit/page.js.nft.json +1 -1
  35. package/.next/standalone/.next/server/app/audit/page_client-reference-manifest.js +1 -1
  36. package/.next/standalone/.next/server/app/index.html +1 -1
  37. package/.next/standalone/.next/server/app/index.rsc +15 -15
  38. package/.next/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +14 -14
  39. package/.next/standalone/.next/server/app/index.segments/_full.segment.rsc +15 -15
  40. package/.next/standalone/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  41. package/.next/standalone/.next/server/app/page/server-reference-manifest.json +1 -1
  42. package/.next/standalone/.next/server/app/page.js +6 -6
  43. package/.next/standalone/.next/server/app/page.js.nft.json +1 -1
  44. package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  45. package/.next/standalone/.next/server/app/policies/page/server-reference-manifest.json +14 -14
  46. package/.next/standalone/.next/server/app/policies/page.js +11 -13
  47. package/.next/standalone/.next/server/app/policies/page.js.nft.json +1 -1
  48. package/.next/standalone/.next/server/app/policies/page_client-reference-manifest.js +1 -1
  49. package/.next/standalone/.next/server/app/project/[name]/page/server-reference-manifest.json +1 -1
  50. package/.next/standalone/.next/server/app/project/[name]/page.js +7 -8
  51. package/.next/standalone/.next/server/app/project/[name]/page.js.nft.json +1 -1
  52. package/.next/standalone/.next/server/app/project/[name]/page_client-reference-manifest.js +1 -1
  53. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page/react-loadable-manifest.json +2 -2
  54. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page/server-reference-manifest.json +2 -2
  55. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page.js +7 -7
  56. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page.js.nft.json +1 -1
  57. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page_client-reference-manifest.js +1 -1
  58. package/.next/standalone/.next/server/app/projects/page/server-reference-manifest.json +1 -1
  59. package/.next/standalone/.next/server/app/projects/page.js +6 -7
  60. package/.next/standalone/.next/server/app/projects/page.js.nft.json +1 -1
  61. package/.next/standalone/.next/server/app/projects/page_client-reference-manifest.js +1 -1
  62. package/.next/standalone/.next/server/app/settings/page/server-reference-manifest.json +8 -41
  63. package/.next/standalone/.next/server/app/settings/page.js +9 -12
  64. package/.next/standalone/.next/server/app/settings/page.js.nft.json +1 -1
  65. package/.next/standalone/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  66. package/.next/standalone/.next/server/chunks/{[externals]__1j-zsg5._.js → [externals]__1_bftcl._.js} +1 -1
  67. package/.next/standalone/.next/server/chunks/{[externals]__19_pzeq._.js → [externals]__1msfs-h._.js} +1 -1
  68. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0o07qi9._.js +1 -1
  69. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__1bf34x4._.js → [root-of-the-server]__1_r2rbg._.js} +7 -5
  70. package/.next/standalone/.next/server/chunks/_09dz7xv._.js +21 -21
  71. package/.next/standalone/.next/server/chunks/_0tovk6q._.js +1 -1
  72. package/.next/standalone/.next/server/chunks/_0trp3yc._.js +1 -1
  73. package/.next/standalone/.next/server/chunks/{_1q5i8mb._.js → _1c3k-8x._.js} +2 -2
  74. package/.next/standalone/.next/server/chunks/_1ek68ln._.js +16 -16
  75. package/.next/standalone/.next/server/chunks/node_modules_posthog-node_dist_entrypoints_index_node_mjs_09z9-p7._.js +1 -1
  76. package/.next/standalone/.next/server/chunks/package_json_[json]_cjs_1nxcc4v._.js +1 -1
  77. package/.next/standalone/.next/server/chunks/src_hooks_0iu54mz._.js +3 -0
  78. package/.next/standalone/.next/server/chunks/src_hooks_custom-hooks-loader_ts_0lnb3n3._.js +2 -4
  79. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0-_ki57._.js +4 -0
  80. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__013jr2b._.js +4 -0
  81. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__01wy8d-._.js +4 -0
  82. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__02npjtd._.js +4 -0
  83. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0yxwl6j._.js → [root-of-the-server]__0bd3mje._.js} +2 -2
  84. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0cg-bgc._.js +5 -0
  85. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0cpu_mj._.js +3 -0
  86. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__1mf3zp6._.js → [root-of-the-server]__0cxe_2_._.js} +3 -3
  87. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0da85px._.js +4 -0
  88. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0ftmoxc._.js +4 -0
  89. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0p-5p8u._.js +4 -0
  90. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0u3w0ll._.js +22 -0
  91. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__17d_ffl._.js +3 -0
  92. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__19d9tgz._.js +5 -0
  93. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1ctpynv._.js +3 -0
  94. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1jiwfsj._.js +3 -0
  95. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1p2otjt._.js +4 -0
  96. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1phc187._.js +3 -0
  97. package/.next/standalone/.next/server/chunks/ssr/_06imw3p._.js +5 -0
  98. package/.next/standalone/.next/server/chunks/ssr/_08x1r5t._.js +1 -1
  99. package/.next/standalone/.next/server/chunks/ssr/{_1w_5l7t._.js → _0h_douw._.js} +1 -1
  100. package/.next/standalone/.next/server/chunks/ssr/{_214wgrp._.js → _1-i_gzc._.js} +2 -2
  101. package/.next/standalone/.next/server/chunks/ssr/{_0bn2oo8._.js → _166t73i._.js} +1 -1
  102. package/.next/standalone/.next/server/chunks/ssr/{_1q46vxx._.js → _1_qswah._.js} +2 -2
  103. package/.next/standalone/.next/server/chunks/ssr/{_1gb0ifp._.js → _1es2j7i._.js} +5 -5
  104. package/.next/standalone/.next/server/chunks/ssr/_1u8-lu2._.js +3 -0
  105. package/.next/standalone/.next/server/chunks/ssr/_1zopuov._.js +1 -1
  106. package/.next/standalone/.next/server/chunks/ssr/_next-internal_server_app_policies_page_actions_1sp2-yo.js +2 -2
  107. package/.next/standalone/.next/server/chunks/ssr/app_audit__components_audit-dashboard_tsx_0p9ud47._.js +1 -1
  108. package/.next/standalone/.next/server/chunks/ssr/app_global-error_tsx_1kp6l3x._.js +1 -1
  109. package/.next/standalone/.next/server/chunks/ssr/app_policies_hooks-client_tsx_19dqvpc._.js +2 -2
  110. package/.next/standalone/.next/server/chunks/ssr/app_settings_settings-client_tsx_20lq-mq._.js +3 -0
  111. package/.next/standalone/.next/server/chunks/ssr/{node_modules_next_dist_18_d8l1._.js → node_modules_next_dist_0drixxt._.js} +4 -4
  112. package/.next/standalone/.next/server/chunks/ssr/src_hooks_1cv9_c4._.js +10 -0
  113. package/.next/standalone/.next/server/chunks/ssr/src_hooks_builtin-policies_ts_09j2ndl._.js +1 -1
  114. package/.next/standalone/.next/server/chunks/ssr/src_hooks_fp-home_ts_0je3xkv._.js +1 -1
  115. package/.next/standalone/.next/server/chunks/ssr/src_hooks_pack-cli_ts_0t7me65._.js +1 -1
  116. package/.next/standalone/.next/server/middleware-build-manifest.js +3 -3
  117. package/.next/standalone/.next/server/pages/404.html +1 -1
  118. package/.next/standalone/.next/server/pages/500.html +1 -1
  119. package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
  120. package/.next/standalone/.next/server/server-reference-manifest.json +23 -56
  121. package/.next/standalone/.next/static/chunks/094xgi4owxaqf.js +1 -0
  122. package/.next/standalone/.next/static/chunks/0__8a7m868fvf.js +1 -0
  123. package/.next/standalone/.next/static/chunks/{12tvm75t5ffui.js → 0o6qlkgubtoex.js} +1 -1
  124. package/.next/standalone/.next/static/chunks/13i7-9is-vhys.js +1 -0
  125. package/.next/standalone/.next/static/chunks/1rz20_pz828f3.js +6 -0
  126. package/.next/standalone/.next/static/chunks/2k9f4tyv04809.css +1 -0
  127. package/.next/standalone/.next/static/chunks/{0vmd180qfntfb.js → 2klitrtzpaoe0.js} +1 -1
  128. package/.next/standalone/.next/static/chunks/{258668t68du6b.js → 2mdh397ghgnvv.js} +1 -1
  129. package/.next/standalone/.next/static/chunks/2rshywgeqsyzk.css +2 -0
  130. package/.next/standalone/.next/static/chunks/3pzx4chkhko9k.js +1 -0
  131. package/.next/standalone/.next/static/chunks/{0qrbdkv9qmvli.js → 3rh5o7e16irrm.js} +1 -1
  132. package/.next/standalone/.next/static/chunks/{29fql3nbnfc9q.js → 43ufqrz8qo3h-.js} +1 -1
  133. package/.next/standalone/SECURITY.md +53 -0
  134. package/.next/standalone/app/actions/pack-actions.ts +0 -12
  135. package/.next/standalone/app/policies/hooks-client.tsx +0 -9
  136. package/.next/standalone/app/settings/page.tsx +1 -20
  137. package/.next/standalone/app/settings/settings-client.tsx +1 -27
  138. package/.next/standalone/app/settings/settings.css +0 -79
  139. package/.next/standalone/package.json +9 -9
  140. package/.next/standalone/sdk/python/skill/SKILL.md +60 -14
  141. package/.next/standalone/sdk/python/skill/agents/openai.yaml +2 -1
  142. package/.next/standalone/sdk/python/skill/references/evaluator.md +255 -0
  143. package/.next/standalone/sdk/python/skill/references/events.md +17 -8
  144. package/.next/standalone/sdk/python/skill/references/frameworks.md +3 -0
  145. package/.next/standalone/sdk/python/skill/references/install.md +3 -0
  146. package/.next/standalone/sdk/python/skill/references/integration.md +6 -2
  147. package/.next/standalone/sdk/python/skill/references/typescript.md +568 -0
  148. package/.next/standalone/sdk/typescript/CHANGELOG.md +133 -0
  149. package/.next/standalone/sdk/typescript/LICENSE +42 -0
  150. package/.next/standalone/sdk/typescript/README.md +552 -0
  151. package/.next/standalone/sdk/typescript/eslint.config.mjs +59 -0
  152. package/.next/standalone/sdk/typescript/examples/research-agent.ts +197 -0
  153. package/.next/standalone/sdk/typescript/integration/ai.test.ts +920 -0
  154. package/.next/standalone/sdk/typescript/integration/fixtures/ai-4/agent.ts +337 -0
  155. package/.next/standalone/sdk/typescript/integration/fixtures/ai-4/package-lock.json +261 -0
  156. package/.next/standalone/sdk/typescript/integration/fixtures/ai-4/package.json +16 -0
  157. package/.next/standalone/sdk/typescript/integration/fixtures/ai-4/surfaces.ts +605 -0
  158. package/.next/standalone/sdk/typescript/integration/fixtures/ai-4/tsconfig.json +12 -0
  159. package/.next/standalone/sdk/typescript/integration/fixtures/ai-4/tsconfig.surfaces.json +4 -0
  160. package/.next/standalone/sdk/typescript/integration/fixtures/ai-5/agent.ts +342 -0
  161. package/.next/standalone/sdk/typescript/integration/fixtures/ai-5/package-lock.json +156 -0
  162. package/.next/standalone/sdk/typescript/integration/fixtures/ai-5/package.json +16 -0
  163. package/.next/standalone/sdk/typescript/integration/fixtures/ai-5/surfaces.ts +628 -0
  164. package/.next/standalone/sdk/typescript/integration/fixtures/ai-5/tsconfig.json +12 -0
  165. package/.next/standalone/sdk/typescript/integration/fixtures/ai-5/tsconfig.surfaces.json +4 -0
  166. package/.next/standalone/sdk/typescript/integration/fixtures/ai-6/agent.ts +346 -0
  167. package/.next/standalone/sdk/typescript/integration/fixtures/ai-6/package-lock.json +156 -0
  168. package/.next/standalone/sdk/typescript/integration/fixtures/ai-6/package.json +13 -0
  169. package/.next/standalone/sdk/typescript/integration/fixtures/ai-6/surfaces.ts +651 -0
  170. package/.next/standalone/sdk/typescript/integration/fixtures/ai-6/tsconfig.json +12 -0
  171. package/.next/standalone/sdk/typescript/integration/fixtures/ai-6/tsconfig.surfaces.json +4 -0
  172. package/.next/standalone/sdk/typescript/integration/fixtures/ai-7/agent.ts +350 -0
  173. package/.next/standalone/sdk/typescript/integration/fixtures/ai-7/package-lock.json +153 -0
  174. package/.next/standalone/sdk/typescript/integration/fixtures/ai-7/package.json +13 -0
  175. package/.next/standalone/sdk/typescript/integration/fixtures/ai-7/surfaces.ts +651 -0
  176. package/.next/standalone/sdk/typescript/integration/fixtures/ai-7/tsconfig.json +12 -0
  177. package/.next/standalone/sdk/typescript/integration/fixtures/ai-7/tsconfig.surfaces.json +4 -0
  178. package/.next/standalone/sdk/typescript/integration/fixtures/langchain-0.3/agent.ts +623 -0
  179. package/.next/standalone/sdk/typescript/integration/fixtures/langchain-0.3/package-lock.json +344 -0
  180. package/.next/standalone/sdk/typescript/integration/fixtures/langchain-0.3/package.json +19 -0
  181. package/.next/standalone/sdk/typescript/integration/fixtures/langchain-0.3/tsconfig.json +12 -0
  182. package/.next/standalone/sdk/typescript/integration/fixtures/langchain-1/agent-v1.ts +99 -0
  183. package/.next/standalone/sdk/typescript/integration/fixtures/langchain-1/agent.ts +623 -0
  184. package/.next/standalone/sdk/typescript/integration/fixtures/langchain-1/package-lock.json +336 -0
  185. package/.next/standalone/sdk/typescript/integration/fixtures/langchain-1/package.json +15 -0
  186. package/.next/standalone/sdk/typescript/integration/fixtures/langchain-1/tsconfig.json +12 -0
  187. package/.next/standalone/sdk/typescript/integration/fixtures/langchain-dup-core/agent.ts +96 -0
  188. package/.next/standalone/sdk/typescript/integration/fixtures/langchain-dup-core/package-lock.json +441 -0
  189. package/.next/standalone/sdk/typescript/integration/fixtures/langchain-dup-core/package.json +19 -0
  190. package/.next/standalone/sdk/typescript/integration/fixtures/langchain-dup-core/tsconfig.json +12 -0
  191. package/.next/standalone/sdk/typescript/integration/fixtures/langchain-dup-core/vendor/lc-weather-provider/index.cjs +53 -0
  192. package/.next/standalone/sdk/typescript/integration/fixtures/langchain-dup-core/vendor/lc-weather-provider/index.mjs +55 -0
  193. package/.next/standalone/sdk/typescript/integration/fixtures/langchain-dup-core/vendor/lc-weather-provider/package.json +18 -0
  194. package/.next/standalone/sdk/typescript/integration/fixtures/llamaindex-0.11/agent.ts +659 -0
  195. package/.next/standalone/sdk/typescript/integration/fixtures/llamaindex-0.11/package-lock.json +635 -0
  196. package/.next/standalone/sdk/typescript/integration/fixtures/llamaindex-0.11/package.json +15 -0
  197. package/.next/standalone/sdk/typescript/integration/fixtures/llamaindex-0.11/tsconfig.json +12 -0
  198. package/.next/standalone/sdk/typescript/integration/fixtures/llamaindex-0.12/agent.ts +659 -0
  199. package/.next/standalone/sdk/typescript/integration/fixtures/llamaindex-0.12/package-lock.json +553 -0
  200. package/.next/standalone/sdk/typescript/integration/fixtures/llamaindex-0.12/package.json +15 -0
  201. package/.next/standalone/sdk/typescript/integration/fixtures/llamaindex-0.12/tsconfig.json +12 -0
  202. package/.next/standalone/sdk/typescript/integration/fixtures/mastra-0/agent.ts +877 -0
  203. package/.next/standalone/sdk/typescript/integration/fixtures/mastra-0/mcp-server.mjs +66 -0
  204. package/.next/standalone/sdk/typescript/integration/fixtures/mastra-0/package-lock.json +6797 -0
  205. package/.next/standalone/sdk/typescript/integration/fixtures/mastra-0/package.json +24 -0
  206. package/.next/standalone/sdk/typescript/integration/fixtures/mastra-0/tsconfig.json +12 -0
  207. package/.next/standalone/sdk/typescript/integration/fixtures/mastra-1/agent.ts +872 -0
  208. package/.next/standalone/sdk/typescript/integration/fixtures/mastra-1/mcp-server.mjs +66 -0
  209. package/.next/standalone/sdk/typescript/integration/fixtures/mastra-1/package-lock.json +2540 -0
  210. package/.next/standalone/sdk/typescript/integration/fixtures/mastra-1/package.json +15 -0
  211. package/.next/standalone/sdk/typescript/integration/fixtures/mastra-1/tsconfig.json +12 -0
  212. package/.next/standalone/sdk/typescript/integration/fixtures/nextjs/app/actions.ts +18 -0
  213. package/.next/standalone/sdk/typescript/integration/fixtures/nextjs/app/api/ai/route.ts +42 -0
  214. package/.next/standalone/sdk/typescript/integration/fixtures/nextjs/app/api/edge/route.ts +29 -0
  215. package/.next/standalone/sdk/typescript/integration/fixtures/nextjs/app/api/langgraph/route.ts +21 -0
  216. package/.next/standalone/sdk/typescript/integration/fixtures/nextjs/app/api/llamaindex/route.ts +11 -0
  217. package/.next/standalone/sdk/typescript/integration/fixtures/nextjs/app/api/mastra/route.ts +19 -0
  218. package/.next/standalone/sdk/typescript/integration/fixtures/nextjs/app/api/status/route.ts +7 -0
  219. package/.next/standalone/sdk/typescript/integration/fixtures/nextjs/app/layout.tsx +9 -0
  220. package/.next/standalone/sdk/typescript/integration/fixtures/nextjs/app/page.tsx +15 -0
  221. package/.next/standalone/sdk/typescript/integration/fixtures/nextjs/instrumentation.ts +15 -0
  222. package/.next/standalone/sdk/typescript/integration/fixtures/nextjs/lib/ai.ts +61 -0
  223. package/.next/standalone/sdk/typescript/integration/fixtures/nextjs/lib/langgraph.ts +68 -0
  224. package/.next/standalone/sdk/typescript/integration/fixtures/nextjs/lib/llamaindex.ts +98 -0
  225. package/.next/standalone/sdk/typescript/integration/fixtures/nextjs/lib/mastra.ts +90 -0
  226. package/.next/standalone/sdk/typescript/integration/fixtures/nextjs/next.config.ts +52 -0
  227. package/.next/standalone/sdk/typescript/integration/fixtures/nextjs/package-lock.json +4343 -0
  228. package/.next/standalone/sdk/typescript/integration/fixtures/nextjs/package.json +28 -0
  229. package/.next/standalone/sdk/typescript/integration/fixtures/runtimes/agent.ts +51 -0
  230. package/.next/standalone/sdk/typescript/integration/fixtures/runtimes/deno-npm.ts +76 -0
  231. package/.next/standalone/sdk/typescript/integration/fixtures/runtimes/package-lock.json +484 -0
  232. package/.next/standalone/sdk/typescript/integration/fixtures/runtimes/package.json +15 -0
  233. package/.next/standalone/sdk/typescript/integration/fixtures/types/agent.ts +79 -0
  234. package/.next/standalone/sdk/typescript/integration/fixtures/types/package-lock.json +740 -0
  235. package/.next/standalone/sdk/typescript/integration/fixtures/types/package.json +11 -0
  236. package/.next/standalone/sdk/typescript/integration/fixtures/vanilla/agent.ts +197 -0
  237. package/.next/standalone/sdk/typescript/integration/fixtures/vanilla/package-lock.json +70 -0
  238. package/.next/standalone/sdk/typescript/integration/fixtures/vanilla/package.json +12 -0
  239. package/.next/standalone/sdk/typescript/integration/fixtures/vanilla/tsconfig.json +12 -0
  240. package/.next/standalone/sdk/typescript/integration/global-setup.ts +29 -0
  241. package/.next/standalone/sdk/typescript/integration/harness.ts +451 -0
  242. package/.next/standalone/sdk/typescript/integration/langchain.test.ts +682 -0
  243. package/.next/standalone/sdk/typescript/integration/llamaindex.test.ts +709 -0
  244. package/.next/standalone/sdk/typescript/integration/mastra-coverage.test.ts +386 -0
  245. package/.next/standalone/sdk/typescript/integration/mastra.test.ts +311 -0
  246. package/.next/standalone/sdk/typescript/integration/nextjs.test.ts +341 -0
  247. package/.next/standalone/sdk/typescript/integration/runtime-parity.ts +180 -0
  248. package/.next/standalone/sdk/typescript/integration/runtimes.bun.test.ts +15 -0
  249. package/.next/standalone/sdk/typescript/integration/runtimes.core.test.ts +113 -0
  250. package/.next/standalone/sdk/typescript/integration/runtimes.deno.test.ts +19 -0
  251. package/.next/standalone/sdk/typescript/integration/types.test.ts +141 -0
  252. package/.next/standalone/sdk/typescript/integration/vanilla.test.ts +255 -0
  253. package/.next/standalone/sdk/typescript/package-lock.json +2640 -0
  254. package/.next/standalone/sdk/typescript/package.json +401 -0
  255. package/.next/standalone/sdk/typescript/scripts/finalize-build.mjs +123 -0
  256. package/.next/standalone/sdk/typescript/scripts/release.mjs +177 -0
  257. package/.next/standalone/sdk/typescript/src/clock.ts +58 -0
  258. package/.next/standalone/sdk/typescript/src/context.ts +214 -0
  259. package/.next/standalone/sdk/typescript/src/edge/adapter.ts +18 -0
  260. package/.next/standalone/sdk/typescript/src/edge/ai.ts +116 -0
  261. package/.next/standalone/sdk/typescript/src/edge/index.ts +238 -0
  262. package/.next/standalone/sdk/typescript/src/edge/langchain.ts +18 -0
  263. package/.next/standalone/sdk/typescript/src/edge/llamaindex.ts +12 -0
  264. package/.next/standalone/sdk/typescript/src/edge/mastra.ts +17 -0
  265. package/.next/standalone/sdk/typescript/src/edge/notice.ts +33 -0
  266. package/.next/standalone/sdk/typescript/src/environment.ts +75 -0
  267. package/.next/standalone/sdk/typescript/src/evaluator/authoring.ts +480 -0
  268. package/.next/standalone/sdk/typescript/src/evaluator/cli.ts +96 -0
  269. package/.next/standalone/sdk/typescript/src/evaluator/client.ts +421 -0
  270. package/.next/standalone/sdk/typescript/src/evaluator/expression.ts +1292 -0
  271. package/.next/standalone/sdk/typescript/src/evaluator/index.ts +144 -0
  272. package/.next/standalone/sdk/typescript/src/evaluator/protocol.ts +747 -0
  273. package/.next/standalone/sdk/typescript/src/evaluator/runtime.ts +930 -0
  274. package/.next/standalone/sdk/typescript/src/evaluator/sandbox-worker.ts +171 -0
  275. package/.next/standalone/sdk/typescript/src/evaluator/source-limits.ts +27 -0
  276. package/.next/standalone/sdk/typescript/src/evaluator/source.ts +509 -0
  277. package/.next/standalone/sdk/typescript/src/events.ts +879 -0
  278. package/.next/standalone/sdk/typescript/src/exit.ts +117 -0
  279. package/.next/standalone/sdk/typescript/src/index.ts +186 -0
  280. package/.next/standalone/sdk/typescript/src/integrations/ai.ts +1566 -0
  281. package/.next/standalone/sdk/typescript/src/integrations/compat.ts +322 -0
  282. package/.next/standalone/sdk/typescript/src/integrations/core.ts +1321 -0
  283. package/.next/standalone/sdk/typescript/src/integrations/index.ts +355 -0
  284. package/.next/standalone/sdk/typescript/src/integrations/langchain.ts +2340 -0
  285. package/.next/standalone/sdk/typescript/src/integrations/llamaindex.ts +2111 -0
  286. package/.next/standalone/sdk/typescript/src/integrations/mastra.ts +1802 -0
  287. package/.next/standalone/sdk/typescript/src/logger.ts +98 -0
  288. package/.next/standalone/sdk/typescript/src/next.ts +115 -0
  289. package/.next/standalone/sdk/typescript/src/node-require.ts +446 -0
  290. package/.next/standalone/sdk/typescript/src/redact.ts +305 -0
  291. package/.next/standalone/sdk/typescript/src/resolver.ts +120 -0
  292. package/.next/standalone/sdk/typescript/src/runtime.ts +29 -0
  293. package/.next/standalone/sdk/typescript/src/schema.ts +410 -0
  294. package/.next/standalone/sdk/typescript/src/scopes.ts +701 -0
  295. package/.next/standalone/sdk/typescript/src/shared.ts +33 -0
  296. package/.next/standalone/sdk/typescript/src/version.ts +5 -0
  297. package/.next/standalone/sdk/typescript/src/writer.ts +934 -0
  298. package/.next/standalone/sdk/typescript/test/adapters.test.ts +397 -0
  299. package/.next/standalone/sdk/typescript/test/ai.test.ts +1076 -0
  300. package/.next/standalone/sdk/typescript/test/copies.test.ts +204 -0
  301. package/.next/standalone/sdk/typescript/test/edge.test.ts +183 -0
  302. package/.next/standalone/sdk/typescript/test/evaluator-client.test.ts +234 -0
  303. package/.next/standalone/sdk/typescript/test/evaluator-protocol.test.ts +225 -0
  304. package/.next/standalone/sdk/typescript/test/events.test.ts +193 -0
  305. package/.next/standalone/sdk/typescript/test/expression.test.ts +181 -0
  306. package/.next/standalone/sdk/typescript/test/global-setup.ts +26 -0
  307. package/.next/standalone/sdk/typescript/test/helpers.ts +130 -0
  308. package/.next/standalone/sdk/typescript/test/integrations.test.ts +369 -0
  309. package/.next/standalone/sdk/typescript/test/langchain-copies.test.ts +204 -0
  310. package/.next/standalone/sdk/typescript/test/langchain.test.ts +999 -0
  311. package/.next/standalone/sdk/typescript/test/llamaindex.test.ts +1760 -0
  312. package/.next/standalone/sdk/typescript/test/mastra-coverage.test.ts +501 -0
  313. package/.next/standalone/sdk/typescript/test/mastra-lifecycle.test.ts +479 -0
  314. package/.next/standalone/sdk/typescript/test/mastra.test.ts +285 -0
  315. package/.next/standalone/sdk/typescript/test/next.test.ts +109 -0
  316. package/.next/standalone/sdk/typescript/test/packaging.test.ts +312 -0
  317. package/.next/standalone/sdk/typescript/test/redaction.test.ts +171 -0
  318. package/.next/standalone/sdk/typescript/test/runtimes.test.ts +101 -0
  319. package/.next/standalone/sdk/typescript/test/sandbox.test.ts +189 -0
  320. package/.next/standalone/sdk/typescript/test/scopes.test.ts +271 -0
  321. package/.next/standalone/sdk/typescript/test/setup.ts +19 -0
  322. package/.next/standalone/sdk/typescript/test/skill-snippets.test.ts +73 -0
  323. package/.next/standalone/sdk/typescript/test/spool-contract.test.ts +124 -0
  324. package/.next/standalone/sdk/typescript/test/tracker-bounds.test.ts +191 -0
  325. package/.next/standalone/sdk/typescript/test/wire-format.test.ts +214 -0
  326. package/.next/standalone/sdk/typescript/test/writer.test.ts +407 -0
  327. package/.next/standalone/sdk/typescript/tsconfig.build.json +15 -0
  328. package/.next/standalone/sdk/typescript/tsconfig.cjs.json +19 -0
  329. package/.next/standalone/sdk/typescript/tsconfig.json +28 -0
  330. package/.next/standalone/sdk/typescript/vitest.config.ts +33 -0
  331. package/.next/standalone/sdk/typescript/vitest.integration.config.ts +23 -0
  332. package/.next/standalone/server.js +1 -1
  333. package/bin/failproofai.mjs +2 -115
  334. package/dist/cli.mjs +6538 -13686
  335. package/dist/index.js +1 -19
  336. package/dist/worker.mjs +2085 -8012
  337. package/package.json +9 -9
  338. package/pi-extension/index.ts +0 -11
  339. package/scripts/build-policy-pack.mjs +2 -39
  340. package/src/hooks/builtin-policies.ts +3 -21
  341. package/src/hooks/cloud-enrollment-cli.ts +1 -1
  342. package/src/hooks/cloud-managed-policies.ts +0 -22
  343. package/src/hooks/custom-hooks-loader.ts +7 -45
  344. package/src/hooks/custom-hooks-registry.ts +1 -45
  345. package/src/hooks/first-run-gate.ts +0 -5
  346. package/src/hooks/fp-home.ts +0 -23
  347. package/src/hooks/handler.ts +6 -265
  348. package/src/hooks/hook-activity-store.ts +1 -105
  349. package/src/hooks/hook-telemetry.ts +0 -41
  350. package/src/hooks/loader-utils.ts +0 -6
  351. package/src/hooks/pack-cli.ts +17 -278
  352. package/src/hooks/pack-manifest.ts +7 -479
  353. package/src/hooks/pack-store.ts +10 -156
  354. package/src/hooks/policy-catalog.ts +0 -65
  355. package/src/hooks/policy-evaluator.ts +796 -940
  356. package/src/hooks/policy-registry.ts +0 -25
  357. package/src/hooks/policy-types.ts +0 -126
  358. package/src/hooks/worker-server.ts +26 -119
  359. package/src/index.ts +0 -6
  360. package/.next/standalone/.next/server/chunks/src_hooks_01frwmb._.js +0 -5
  361. package/.next/standalone/.next/server/chunks/src_hooks_18qtd42._.js +0 -3
  362. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__01bmjsj._.js +0 -3
  363. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__04usis8._.js +0 -4
  364. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__056wjo4._.js +0 -4
  365. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__059yza8._.js +0 -3
  366. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0eip4_k._.js +0 -22
  367. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0n0xg95._.js +0 -4
  368. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0qcb0mg._.js +0 -3
  369. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0qxnccm._.js +0 -5
  370. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0rwtwpm._.js +0 -4
  371. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0s_yomn._.js +0 -4
  372. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0soxz2z._.js +0 -3
  373. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0yrsbd_._.js +0 -3
  374. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__11mayhe._.js +0 -4
  375. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__13d-wb6._.js +0 -3
  376. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1dinjii._.js +0 -3
  377. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1pprgri._.js +0 -4
  378. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1q4p5b8._.js +0 -4
  379. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1qiz0e4._.js +0 -3
  380. package/.next/standalone/.next/server/chunks/ssr/_042cgl1._.js +0 -3
  381. package/.next/standalone/.next/server/chunks/ssr/_0bqoto4._.js +0 -3
  382. package/.next/standalone/.next/server/chunks/ssr/_0uyu3jf._.js +0 -3
  383. package/.next/standalone/.next/server/chunks/ssr/_1feuvhb._.js +0 -5
  384. package/.next/standalone/.next/server/chunks/ssr/app_actions_get-scheduled-audit_ts_0ei9sni._.js +0 -3
  385. package/.next/standalone/.next/server/chunks/ssr/app_settings_02tf1h4._.js +0 -3
  386. package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_0w6mzq5._.js +0 -151
  387. package/.next/standalone/.next/server/chunks/ssr/src_hooks_095a_79._.js +0 -5
  388. package/.next/standalone/.next/server/chunks/ssr/src_hooks_15t8kqj._.js +0 -3
  389. package/.next/standalone/.next/server/chunks/ssr/src_hooks_18k8rl0._.js +0 -12
  390. package/.next/standalone/.next/server/chunks/ssr/src_hooks_1fm2w5z._.js +0 -3
  391. package/.next/standalone/.next/server/chunks/ssr/src_hooks_1j0zy3v._.js +0 -3
  392. package/.next/standalone/.next/static/chunks/0cd-_8-c-m1ea.js +0 -6
  393. package/.next/standalone/.next/static/chunks/0uldbut9y2-e8.js +0 -1
  394. package/.next/standalone/.next/static/chunks/1u5zsejmgrir_.js +0 -1
  395. package/.next/standalone/.next/static/chunks/285spx855h_3r.css +0 -2
  396. package/.next/standalone/.next/static/chunks/2qv4hshejedtx.css +0 -1
  397. package/.next/standalone/.next/static/chunks/2vkvu9-opa_1z.js +0 -1
  398. package/.next/standalone/.next/static/chunks/37lhv7wa3ywt6.js +0 -1
  399. package/.next/standalone/app/actions/get-jev-config.ts +0 -409
  400. package/.next/standalone/app/actions/update-jev-config.ts +0 -420
  401. package/.next/standalone/app/components/jev-notices.tsx +0 -96
  402. package/.next/standalone/app/settings/jev-panel.tsx +0 -469
  403. package/src/hooks/effective-reviewers.ts +0 -79
  404. package/src/hooks/jev-activity.ts +0 -385
  405. package/src/hooks/jev-cli.ts +0 -1193
  406. package/src/hooks/policy-authority.ts +0 -333
  407. package/src/hooks/policy-reviewability.ts +0 -229
  408. package/src/hooks/semantic/combine.ts +0 -541
  409. package/src/hooks/semantic/compile.ts +0 -176
  410. package/src/hooks/semantic/decide.ts +0 -392
  411. package/src/hooks/semantic/envelope.ts +0 -1296
  412. package/src/hooks/semantic/evaluator.ts +0 -547
  413. package/src/hooks/semantic/facts.ts +0 -292
  414. package/src/hooks/semantic/intent.ts +0 -1190
  415. package/src/hooks/semantic/jev-client.ts +0 -643
  416. package/src/hooks/semantic/jev-config.ts +0 -594
  417. package/src/hooks/semantic/jev-review.ts +0 -374
  418. package/src/hooks/semantic/jev-stats.ts +0 -289
  419. package/src/hooks/semantic/jev-throttle.ts +0 -421
  420. package/src/hooks/semantic/pack-policies.ts +0 -251
  421. package/src/hooks/semantic/policies.ts +0 -596
  422. package/src/hooks/semantic/precondition-names.ts +0 -60
  423. package/src/hooks/semantic/preconditions.ts +0 -58
  424. package/src/hooks/semantic/redact.ts +0 -2910
  425. package/src/hooks/semantic/types.ts +0 -145
  426. package/src/hooks/semver-precedence.ts +0 -128
  427. /package/.next/standalone/.next/static/{T8YAYM9h_64fKv705vug7 → PgeWCHmyVbjRznv2VO7KF}/_buildManifest.js +0 -0
  428. /package/.next/standalone/.next/static/{T8YAYM9h_64fKv705vug7 → PgeWCHmyVbjRznv2VO7KF}/_clientMiddlewareManifest.js +0 -0
  429. /package/.next/standalone/.next/static/{T8YAYM9h_64fKv705vug7 → PgeWCHmyVbjRznv2VO7KF}/_ssgManifest.js +0 -0
@@ -35,17 +35,8 @@
35
35
  import { createHash } from "node:crypto";
36
36
  import { existsSync, mkdirSync, readFileSync, renameSync, rmSync, writeFileSync } from "node:fs";
37
37
  import { dirname, resolve } from "node:path";
38
- import {
39
- MAX_SEMANTIC_POLICIES_PER_PACK,
40
- PACK_COMMIT_RE,
41
- checkPackMinCliVersion,
42
- packsRoot,
43
- parsePackIdentity,
44
- parsePackPolicy,
45
- parsePackSemanticPolicy,
46
- readInstalledPacks,
47
- } from "./pack-manifest";
48
- import type { ResolvedPack, SemanticManifestEntry } from "./pack-manifest";
38
+ import { PACK_COMMIT_RE, packsRoot, parsePackIdentity, parsePackPolicy, readInstalledPacks } from "./pack-manifest";
39
+ import type { ResolvedPack } from "./pack-manifest";
49
40
  import type { InstalledPackRecord } from "./pack-manifest";
50
41
  import type { PolicyCatalogEntry } from "./policy-types";
51
42
  import type { PolicyEffect } from "./cloud-managed-policies";
@@ -95,13 +86,6 @@ export interface AddPackResult {
95
86
  selection: SelectionReason;
96
87
  /** Category slugs the pack offers, for `--category`. */
97
88
  categories: string[];
98
- /**
99
- * How many Jev question sets came with it, and not a list of names: they are
100
- * not selectable and not switchable, so a name here would invite a `--policy`
101
- * that cannot work. A non-zero count is what stops a semantic-only install
102
- * reporting "the pack is installed and enforcing nothing".
103
- */
104
- semantic: number;
105
89
  artifact: string;
106
90
  }
107
91
 
@@ -470,10 +454,6 @@ interface FetchedPack {
470
454
  id: string;
471
455
  version: string;
472
456
  policies: PolicyCatalogEntry[];
473
- /** The pack's Jev question sets, validated. Empty when it declares none. */
474
- semantic: SemanticManifestEntry[];
475
- /** The minimum CLI it claims, once this one has been checked against it. */
476
- minCliVersion?: string;
477
457
  effect?: PolicyEffect;
478
458
  /** The git commit the publisher built this from, when they had one. */
479
459
  commit?: string;
@@ -481,66 +461,6 @@ interface FetchedPack {
481
461
  artifactDigest: string;
482
462
  }
483
463
 
484
- /**
485
- * The shape both fetch paths read a manifest's `semantic` array through.
486
- *
487
- * REFUSES what the loader would only drop, and the asymmetry is the same one
488
- * `parsePackPolicy` already has on this path: nothing has been written yet, so
489
- * refusing costs the user a clear error message and the publisher a fix —
490
- * whereas dropping an entry here would install a pack that enforces less than
491
- * the preview just showed, with the difference recorded only in a hook log. The
492
- * loader drops instead because by then the pack IS installed and refusing it
493
- * denies every tool call its regex policies cover.
494
- *
495
- * The per-pack cap is checked for the same reason. Over it, the loader keeps the
496
- * first 24 in declared order and records the rest as dropped; letting that
497
- * happen silently at install time means a machine quietly running a subset of
498
- * what the user agreed to.
499
- *
500
- * The CHARACTER budget is deliberately not checked here. It lives in
501
- * `semantic/pack-policies.ts`, and importing that module would pull Jev's
502
- * sixteen prompts into this one — which is reachable from a Next.js server
503
- * action (`app/actions/pack-actions.ts`), not just from the CLI. `failproofai
504
- * publish` refuses an over-budget pack at build time, and a pack built by some
505
- * other tool has its overflow dropped at resolve time with a recorded reason.
506
- */
507
- function parseManifestSemantic(packId: string, value: unknown): SemanticManifestEntry[] {
508
- if (value === undefined) return [];
509
- if (!Array.isArray(value)) throw new Error(`pack ${packId} semantic is not an array`);
510
- if (value.length > MAX_SEMANTIC_POLICIES_PER_PACK) {
511
- throw new Error(
512
- `pack ${packId} declares ${value.length} semantic policies, over the cap of ${MAX_SEMANTIC_POLICIES_PER_PACK}`,
513
- );
514
- }
515
- const entries = value.map((entry, i) => parsePackSemanticPolicy(packId, entry, i));
516
- const names = new Set<string>();
517
- for (const entry of entries) {
518
- if (names.has(entry.name)) throw new Error(`pack ${packId} declares semantic policy ${entry.name} twice`);
519
- names.add(entry.name);
520
- }
521
- return entries;
522
- }
523
-
524
- /**
525
- * Refuse a pack this CLI is too old to run — HERE, where the message is
526
- * something the person who typed the command can act on.
527
- *
528
- * The loader refuses it too, and that refusal is the fail-closed one: on a
529
- * machine where it lands, every tool call the pack's policies cover is denied
530
- * until somebody works out why. Catching it at install turns the same fact into
531
- * one line at the moment of choosing.
532
- *
533
- * A minimum this build cannot compare is IGNORED, exactly as the loader ignores
534
- * it: a publisher's typo in a version string must not be able to stop anyone
535
- * installing a pack. `failproofai publish` refuses to write one, so this is
536
- * only reachable from a pack built by some other tool.
537
- */
538
- function assertMinCliVersion(packId: string, declared: unknown): string | undefined {
539
- const verdict = checkPackMinCliVersion(packId, declared);
540
- if (verdict.kind === "too-old") throw new Error(verdict.reason);
541
- return verdict.kind === "satisfied" ? verdict.declared : undefined;
542
- }
543
-
544
464
  /** Fetch and fully validate a pack, without writing anything. */
545
465
  /**
546
466
  * The short names for the pack Failproof AI publishes.
@@ -623,19 +543,6 @@ export interface PackPreview {
623
543
  /** The git commit the publisher built this from, when they had one. */
624
544
  commit?: string;
625
545
  policies: PolicyCatalogEntry[];
626
- /**
627
- * The pack's Jev question sets. Shown, not selectable: a pack's `enabled`
628
- * narrowing picks which of its REGEX policies register, and its semantic set
629
- * replaces this build's wholesale or not at all.
630
- *
631
- * Carried on the preview because the preview is what somebody consents to. A
632
- * pack that quietly brings sixteen new questions to the classifier — and
633
- * replaces the sixteen this build shipped — is not something to discover after
634
- * installing it.
635
- */
636
- semantic: SemanticManifestEntry[];
637
- /** The minimum CLI this pack declares, when it declares one this build can read. */
638
- minCliVersion?: string;
639
546
  /** The exact source the preview was read from, tag resolved and pinned. */
640
547
  source: string;
641
548
  /** True when the tag was resolved rather than typed. */
@@ -682,52 +589,22 @@ export async function fetchPackPreview(source: string): Promise<PackPreview> {
682
589
  if (!raw || typeof raw !== "object") throw new Error(`${PACK_MANIFEST_ASSET} is not an object`);
683
590
  const value = raw as {
684
591
  id?: unknown; version?: unknown; policies?: unknown; effect?: unknown; commit?: unknown;
685
- semantic?: unknown; minCliVersion?: unknown;
686
592
  };
687
593
  const identity = parsePackIdentity(value);
688
- const minCliVersion = assertMinCliVersion(identity.id, value.minCliVersion);
689
- const semantic = parseManifestSemantic(identity.id, value.semantic);
690
- const policies = parseManifestPolicies(identity.id, value.policies);
691
- assertDeclaresSomething(policies, semantic);
594
+ if (!Array.isArray(value.policies) || value.policies.length === 0) {
595
+ throw new Error("pack manifest declares no policies");
596
+ }
692
597
  return {
693
598
  id: identity.id,
694
599
  version: identity.version,
695
600
  effect: identity.effect,
696
601
  ...(identity.commit ? { commit: identity.commit } : {}),
697
- policies,
698
- semantic,
699
- ...(minCliVersion ? { minCliVersion } : {}),
602
+ policies: value.policies.map((policy, i) => parsePackPolicy(identity.id, policy, i)),
700
603
  source: formatPackSpec(spec),
701
604
  resolvedFromLatest,
702
605
  };
703
606
  }
704
607
 
705
- /**
706
- * The regex half of a manifest. ABSENT is an empty list, not an error: a pack of
707
- * Jev questions alone is a legitimate thing to publish now, and ours writes
708
- * `policies: []` for one. Present and not an array is still malformed.
709
- */
710
- function parseManifestPolicies(packId: string, value: unknown): PolicyCatalogEntry[] {
711
- if (value === undefined) return [];
712
- if (!Array.isArray(value)) throw new Error(`pack ${packId} policies is not an array`);
713
- return value.map((policy, i) => parsePackPolicy(packId, policy, i));
714
- }
715
-
716
- /**
717
- * A pack has to bring SOMETHING, and either half counts.
718
- *
719
- * It used to be "at least one regex policy", which made a pack of Jev questions
720
- * alone impossible to install — and that is a legitimate pack: the regex floor
721
- * may already be somebody else's, and the two halves version independently. This
722
- * is the same widening `build()` makes to its "registered no policies" refusal,
723
- * so the two ends of the lane agree on what an empty pack is.
724
- */
725
- function assertDeclaresSomething(policies: PolicyCatalogEntry[], semantic: SemanticManifestEntry[]): void {
726
- if (policies.length === 0 && semantic.length === 0) {
727
- throw new Error("pack manifest declares no policies");
728
- }
729
- }
730
-
731
608
  /**
732
609
  * The record this install is really an update OF — matched by id, or failing
733
610
  * that by artifact digest.
@@ -770,26 +647,20 @@ async function fetchPack(spec: PinnedPackSpec): Promise<FetchedPack> {
770
647
  if (!parsed || typeof parsed !== "object") throw new Error(`${PACK_MANIFEST_ASSET} is not an object`);
771
648
  const raw = parsed as {
772
649
  id?: unknown; version?: unknown; policies?: unknown; effect?: unknown; commit?: unknown;
773
- semantic?: unknown; minCliVersion?: unknown;
774
650
  };
775
651
  const identity = parsePackIdentity(raw);
776
- // Before the shape checks below, because being too old for the pack is not a
777
- // complaint about the pack: the message to give is "update the CLI", and a
778
- // manifest field this build cannot read yet must not be reported as malformed.
779
- const minCliVersion = assertMinCliVersion(identity.id, raw.minCliVersion);
652
+ if (!Array.isArray(raw.policies) || raw.policies.length === 0) {
653
+ throw new Error("pack manifest declares no policies");
654
+ }
780
655
  // Validated with the SAME rules the loader applies, so a pack that could never
781
656
  // load is refused here — while nothing has been written — rather than
782
657
  // installing cleanly and failing silently on the next tool call.
783
- const policies = parseManifestPolicies(identity.id, raw.policies);
784
- const semantic = parseManifestSemantic(identity.id, raw.semantic);
785
- assertDeclaresSomething(policies, semantic);
658
+ const policies = raw.policies.map((p, i) => parsePackPolicy(identity.id, p, i));
786
659
 
787
660
  return {
788
661
  id: identity.id,
789
662
  version: identity.version,
790
663
  policies,
791
- semantic,
792
- ...(minCliVersion ? { minCliVersion } : {}),
793
664
  ...(raw.effect !== undefined ? { effect: identity.effect } : {}),
794
665
  ...(identity.commit ? { commit: identity.commit } : {}),
795
666
  artifact,
@@ -1060,22 +931,6 @@ export async function addPack(
1060
931
  entry: artifactRel,
1061
932
  sha256: fetched.artifactDigest,
1062
933
  policies: fetched.policies,
1063
- // Both halves of the manifest reach the record, because `installed.json` is
1064
- // the only thing enforcement reads. Left off, a pack's Jev questions were
1065
- // fetched, verified, shown in the preview and then dropped on the floor: the
1066
- // resolver found no `semantic` on any installed pack, kept this build's
1067
- // compiled set, and every pack policy naming one of the pack's own checks in
1068
- // `reviewedBy` registered as hard. Nothing failed, and the half the user
1069
- // installed did nothing.
1070
- //
1071
- // Omitted when empty for the same reason the manifest omits it: an empty
1072
- // array reads as "this pack declares semantic entries", and the replacement
1073
- // rule would then have it replace the compiled-in set with nothing.
1074
- ...(fetched.semantic.length > 0 ? { semantic: fetched.semantic } : {}),
1075
- // Recorded so the READER re-checks it. This CLI has already satisfied it or
1076
- // refused the install, but the record outlives this CLI: a downgrade, or a
1077
- // machine restored from another's home directory, has to meet it again.
1078
- ...(fetched.minCliVersion ? { minCliVersion: fetched.minCliVersion } : {}),
1079
934
  // Provenance, carried through from the manifest so `policies` and the
1080
935
  // dashboard can say which source produced what is installed. NOT part of
1081
936
  // verification — `sha256` above is the pin, and this is a label beside it.
@@ -1123,7 +978,6 @@ export async function addPack(
1123
978
  available,
1124
979
  selection: reason,
1125
980
  categories: [...new Set(fetched.policies.map((p) => slugifyCategory(p.category)))],
1126
- semantic: fetched.semantic.length,
1127
981
  artifact: artifactAbs,
1128
982
  };
1129
983
  }
@@ -25,12 +25,6 @@
25
25
  * - **Absent optionals stay absent.** `beta`, `alwaysOn` and `params` are read
26
26
  * with `in` and `undefined` checks; default-filling them changes behaviour and
27
27
  * fails existing tests.
28
- * - **Every entry states its `authority`,** even though absent already means
29
- * `hard`: whether Jev may clear a builtin's verdict is a decision to make per
30
- * policy, not a default to inherit. `reviewable` only where a semantic policy
31
- * genuinely covers the same concern, named in `reviewedBy`. The table and the
32
- * reasoning are in `docs/policies/authority.mdx`; `alwaysOn` is hard whatever
33
- * it says here.
34
28
  *
35
29
  * `params.default` values are handed to policies BY REFERENCE, so this must stay
36
30
  * one module-level const — never a factory minting fresh defaults per call.
@@ -44,7 +38,6 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
44
38
  displayTitle: "Redacted JWT tokens from tool output",
45
39
  impact: "Stops the agent from echoing auth tokens it saw in command output.",
46
40
  match: { events: ["PostToolUse"] },
47
- authority: "hard",
48
41
  defaultEnabled: true,
49
42
  category: "Sanitize",
50
43
  },
@@ -54,7 +47,6 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
54
47
  displayTitle: "Redacted API keys from tool output",
55
48
  impact: "Catches OpenAI / Anthropic / GitHub / AWS / Stripe / Google keys before the model sees them.",
56
49
  match: { events: ["PostToolUse"] },
57
- authority: "hard",
58
50
  defaultEnabled: true,
59
51
  category: "Sanitize",
60
52
  params: {
@@ -71,7 +63,6 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
71
63
  displayTitle: "Redacted database connection strings from tool output",
72
64
  impact: "Strips embedded DB credentials before they reach the model context.",
73
65
  match: { events: ["PostToolUse"] },
74
- authority: "hard",
75
66
  defaultEnabled: true,
76
67
  category: "Sanitize",
77
68
  },
@@ -81,7 +72,6 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
81
72
  displayTitle: "Redacted PEM private keys from tool output",
82
73
  impact: "Prevents private key bodies from being echoed into chat context.",
83
74
  match: { events: ["PostToolUse"] },
84
- authority: "hard",
85
75
  defaultEnabled: true,
86
76
  category: "Sanitize",
87
77
  },
@@ -91,7 +81,6 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
91
81
  impact: "Strips Authorization: Bearer values before they hit the model.",
92
82
  description: "Stop Claude from reading Authorization Bearer tokens in tool responses",
93
83
  match: { events: ["PostToolUse"] },
94
- authority: "hard",
95
84
  defaultEnabled: true,
96
85
  category: "Sanitize",
97
86
  },
@@ -101,8 +90,6 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
101
90
  impact: "Env vars often contain secrets; blocking `env` / `printenv` keeps them out of the model context.",
102
91
  description: "Prevent commands that read environment variables",
103
92
  match: { events: ["PreToolUse"], toolNames: ["Bash"] },
104
- authority: "reviewable",
105
- reviewedBy: ["env-secrets-dump", "secret-exposure"],
106
93
  defaultEnabled: true,
107
94
  category: "Environment",
108
95
  },
@@ -112,8 +99,6 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
112
99
  impact: "`.env` files routinely contain API keys and DB credentials.",
113
100
  description: "Block reading/writing .env files",
114
101
  match: { events: ["PreToolUse"] },
115
- authority: "reviewable",
116
- reviewedBy: ["secret-exposure"],
117
102
  defaultEnabled: true,
118
103
  category: "Environment",
119
104
  },
@@ -123,8 +108,6 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
123
108
  impact: "Stops the agent from peeking at neighboring repos or your home directory.",
124
109
  description: "Block file reads outside the session working directory",
125
110
  match: { events: ["PreToolUse"], toolNames: ["Read", "Glob", "Grep", "Bash"] },
126
- authority: "reviewable",
127
- reviewedBy: ["read-outside-workspace"],
128
111
  defaultEnabled: false,
129
112
  category: "Environment",
130
113
  params: {
@@ -143,7 +126,6 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
143
126
  // PermissionRequest is Codex's escalation-approval event; fire the same
144
127
  // sudo guard there so Codex sandbox bypasses are blocked too.
145
128
  match: { events: ["PreToolUse", "PermissionRequest"], toolNames: ["Bash"] },
146
- authority: "hard",
147
129
  defaultEnabled: true,
148
130
  category: "Dangerous Commands",
149
131
  params: {
@@ -160,7 +142,6 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
160
142
  impact: "`curl ... | sh` runs unverified remote code on your machine.",
161
143
  description: "Block piping downloads to shell",
162
144
  match: { events: ["PreToolUse"], toolNames: ["Bash"] },
163
- authority: "hard",
164
145
  defaultEnabled: true,
165
146
  category: "Dangerous Commands",
166
147
  },
@@ -170,7 +151,6 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
170
151
  impact: "Catches catastrophic `rm -rf /` and Windows equivalents.",
171
152
  description: "Prevent catastrophic deletions",
172
153
  match: { events: ["PreToolUse"], toolNames: ["Bash"] },
173
- authority: "hard",
174
154
  defaultEnabled: false,
175
155
  category: "Dangerous Commands",
176
156
  params: {
@@ -200,7 +180,6 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
200
180
  },
201
181
  defaultEnabled: true,
202
182
  alwaysOn: true,
203
- authority: "hard",
204
183
  category: "Dangerous Commands",
205
184
  },
206
185
  {
@@ -209,7 +188,6 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
209
188
  impact: "kubectl can change live cluster state — gated unless allow-listed.",
210
189
  description: "Block kubectl commands (Kubernetes cluster mutations)",
211
190
  match: { events: ["PreToolUse"], toolNames: ["Bash"] },
212
- authority: "hard",
213
191
  defaultEnabled: false,
214
192
  category: "Infra Commands",
215
193
  params: {
@@ -226,7 +204,6 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
226
204
  impact: "Terraform mutates real infrastructure — gated unless allow-listed.",
227
205
  description: "Block terraform and tofu (OpenTofu) commands",
228
206
  match: { events: ["PreToolUse"], toolNames: ["Bash"] },
229
- authority: "hard",
230
207
  defaultEnabled: false,
231
208
  category: "Infra Commands",
232
209
  params: {
@@ -243,7 +220,6 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
243
220
  impact: "AWS CLI can spend money or break prod — gated.",
244
221
  description: "Block aws CLI commands",
245
222
  match: { events: ["PreToolUse"], toolNames: ["Bash"] },
246
- authority: "hard",
247
223
  defaultEnabled: false,
248
224
  category: "Infra Commands",
249
225
  params: {
@@ -260,7 +236,6 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
260
236
  impact: "gcloud can spend money or break prod — gated.",
261
237
  description: "Block gcloud (Google Cloud) CLI commands",
262
238
  match: { events: ["PreToolUse"], toolNames: ["Bash"] },
263
- authority: "hard",
264
239
  defaultEnabled: false,
265
240
  category: "Infra Commands",
266
241
  params: {
@@ -277,7 +252,6 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
277
252
  impact: "az can spend money or break prod — gated.",
278
253
  description: "Block az (Azure) CLI commands",
279
254
  match: { events: ["PreToolUse"], toolNames: ["Bash"] },
280
- authority: "hard",
281
255
  defaultEnabled: false,
282
256
  category: "Infra Commands",
283
257
  params: {
@@ -294,7 +268,6 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
294
268
  impact: "Helm releases mutate cluster state — gated.",
295
269
  description: "Block helm commands",
296
270
  match: { events: ["PreToolUse"], toolNames: ["Bash"] },
297
- authority: "hard",
298
271
  defaultEnabled: false,
299
272
  category: "Infra Commands",
300
273
  params: {
@@ -311,7 +284,6 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
311
284
  impact: "Catches `gh workflow run`, `gh pr merge`, `gh secret set`, etc.",
312
285
  description: "Block gh CLI pipeline-trigger subcommands (workflow run, run rerun/cancel, pr merge, release create/delete, cache delete, secret set/delete)",
313
286
  match: { events: ["PreToolUse"], toolNames: ["Bash"] },
314
- authority: "hard",
315
287
  defaultEnabled: false,
316
288
  category: "Infra Commands",
317
289
  params: {
@@ -328,7 +300,6 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
328
300
  impact: "Stops the agent from creating `.pem`, `id_rsa`, `credentials.json`, etc.",
329
301
  description: "Block writing secret key files",
330
302
  match: { events: ["PreToolUse"], toolNames: ["Write"] },
331
- authority: "hard",
332
303
  defaultEnabled: false,
333
304
  category: "Dangerous Commands",
334
305
  params: {
@@ -345,7 +316,6 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
345
316
  impact: "Direct pushes to a protected branch bypass review.",
346
317
  description: "Block pushing to main/master",
347
318
  match: { events: ["PreToolUse"], toolNames: ["Bash"] },
348
- authority: "hard",
349
319
  defaultEnabled: true,
350
320
  category: "Git",
351
321
  params: {
@@ -362,7 +332,6 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
362
332
  impact: "Force-pushes rewrite history and can clobber teammates' work.",
363
333
  description: "Prevent force-pushing to any branch",
364
334
  match: { events: ["PreToolUse"], toolNames: ["Bash"] },
365
- authority: "hard",
366
335
  defaultEnabled: false,
367
336
  category: "Git",
368
337
  },
@@ -372,21 +341,6 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
372
341
  impact: "Work should land via PR — direct commits skip review.",
373
342
  description: "Block git commits and merges on main/master branch",
374
343
  match: { events: ["PreToolUse"], toolNames: ["Bash"] },
375
- // Hard, although `commit-on-protected-branch` covers exactly this concern.
376
- // That check is `mode: "instruct"`, and an instruct-mode reviewer can never
377
- // answer deny — so the conjunction had one reachable outcome, cleared, and
378
- // marking this reviewable did not hand the decision to Jev. It switched the
379
- // policy off on every machine that configured Jev, while the mark said
380
- // otherwise.
381
- //
382
- // The test that matters is not "can the reviewer keep this block" but "is
383
- // there anything left that can deny". `block-read-outside-cwd` also has only
384
- // an instruct reviewer and stays reviewable, because when it clears,
385
- // `secret-exposure` and `credential-exfiltration` are still asked about the
386
- // same read and still deny on their own through the most-severe merge. Here
387
- // nothing else covers committing on a protected branch, so a clear leaves
388
- // the concern unenforced by anything.
389
- authority: "hard",
390
344
  defaultEnabled: false,
391
345
  category: "Git",
392
346
  params: {
@@ -403,8 +357,6 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
403
357
  impact: "Amending after a push rewrites history that others may have pulled.",
404
358
  description: "Warns before amending git commits, which rewrites history",
405
359
  match: { events: ["PreToolUse"], toolNames: ["Bash"] },
406
- authority: "reviewable",
407
- reviewedBy: ["git-history-rewrite"],
408
360
  defaultEnabled: false,
409
361
  category: "Git",
410
362
  },
@@ -414,7 +366,6 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
414
366
  impact: "Stash deletions are permanent and silent.",
415
367
  description: "Warns before permanently deleting stashed changes",
416
368
  match: { events: ["PreToolUse"], toolNames: ["Bash"] },
417
- authority: "hard",
418
369
  defaultEnabled: false,
419
370
  category: "Git",
420
371
  },
@@ -424,7 +375,6 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
424
375
  impact: "Wide stages routinely catch generated files or secrets you didn't intend to commit.",
425
376
  description: "Warns before staging all working tree files with git add -A / . / --all",
426
377
  match: { events: ["PreToolUse"], toolNames: ["Bash"] },
427
- authority: "hard",
428
378
  defaultEnabled: false,
429
379
  category: "Git",
430
380
  },
@@ -434,8 +384,6 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
434
384
  impact: "Easy way to wipe a table by accident.",
435
385
  description: "Warn before executing destructive SQL (DROP/TRUNCATE/DELETE without WHERE) via database clients",
436
386
  match: { events: ["PreToolUse"], toolNames: ["Bash"] },
437
- authority: "reviewable",
438
- reviewedBy: ["database-destruction"],
439
387
  defaultEnabled: false,
440
388
  category: "Database",
441
389
  },
@@ -445,7 +393,6 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
445
393
  impact: "ALTER TABLE operations can lock tables and break readers.",
446
394
  description: "Warns before SQL schema changes (ALTER TABLE with column or rename operations)",
447
395
  match: { events: ["PreToolUse"], toolNames: ["Bash"] },
448
- authority: "hard",
449
396
  defaultEnabled: false,
450
397
  category: "Database",
451
398
  },
@@ -455,7 +402,6 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
455
402
  impact: "Publishes are irreversible — `npm publish` / `cargo publish` shouldn't happen without intent.",
456
403
  description: "Warn before publishing packages to public registries (npm, PyPI, crates.io, RubyGems, etc.)",
457
404
  match: { events: ["PreToolUse"], toolNames: ["Bash"] },
458
- authority: "hard",
459
405
  defaultEnabled: false,
460
406
  category: "Packages & System",
461
407
  },
@@ -465,8 +411,6 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
465
411
  impact: "`npm i -g`, `cargo install`, `pip --user` pollute your machine outside the project.",
466
412
  description: "Warns before installing packages globally (npm -g, cargo install, etc.)",
467
413
  match: { events: ["PreToolUse"], toolNames: ["Bash"] },
468
- authority: "reviewable",
469
- reviewedBy: ["system-modification"],
470
414
  defaultEnabled: false,
471
415
  category: "Packages & System",
472
416
  },
@@ -476,7 +420,6 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
476
420
  impact: "Mixing package managers creates lockfile churn for your team.",
477
421
  description: "Blocks non-preferred package managers and tells Claude to use an allowed one (e.g., uv instead of pip)",
478
422
  match: { events: ["PreToolUse"], toolNames: ["Bash"] },
479
- authority: "hard",
480
423
  defaultEnabled: false,
481
424
  category: "Packages & System",
482
425
  params: {
@@ -498,7 +441,6 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
498
441
  impact: "Catches accidentally large file writes (logs, binaries, model dumps).",
499
442
  description: "Warn before writing files larger than 1MB (configurable via thresholdKb param)",
500
443
  match: { events: ["PreToolUse"], toolNames: ["Write"] },
501
- authority: "hard",
502
444
  defaultEnabled: false,
503
445
  category: "Packages & System",
504
446
  params: {
@@ -515,7 +457,6 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
515
457
  impact: "Catches `nohup` / `&` / `screen` / `tmux` / `disown` patterns that the agent often forgets to clean up.",
516
458
  description: "Warns before starting detached or background processes",
517
459
  match: { events: ["PreToolUse"], toolNames: ["Bash"] },
518
- authority: "hard",
519
460
  defaultEnabled: false,
520
461
  category: "Packages & System",
521
462
  },
@@ -525,7 +466,6 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
525
466
  impact: "Usually a sign of a stuck loop burning tokens.",
526
467
  description: "Warn when the same tool is called 3+ times with identical parameters",
527
468
  match: { events: ["PreToolUse"] },
528
- authority: "hard",
529
469
  defaultEnabled: false,
530
470
  category: "AI Behavior",
531
471
  },
@@ -535,7 +475,6 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
535
475
  impact: "Work not in a commit is invisible to teammates and easy to lose.",
536
476
  description: "Require all changes to be committed before Claude stops",
537
477
  match: { events: ["Stop"] },
538
- authority: "hard",
539
478
  defaultEnabled: false,
540
479
  category: "Workflow",
541
480
  },
@@ -545,7 +484,6 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
545
484
  impact: "Local-only commits won't trigger CI or be reviewable.",
546
485
  description: "Require all commits to be pushed to remote before Claude stops",
547
486
  match: { events: ["Stop"] },
548
- authority: "hard",
549
487
  defaultEnabled: false,
550
488
  category: "Workflow",
551
489
  params: {
@@ -567,7 +505,6 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
567
505
  impact: "Branches without PRs don't get reviewed.",
568
506
  description: "Require a pull request to exist for the current branch before Claude stops",
569
507
  match: { events: ["Stop"] },
570
- authority: "hard",
571
508
  defaultEnabled: false,
572
509
  category: "Workflow",
573
510
  params: {
@@ -584,7 +521,6 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
584
521
  impact: "Conflicting branches can't merge — surface them early.",
585
522
  description: "Require the current branch to merge cleanly with the base branch before Claude stops",
586
523
  match: { events: ["Stop"] },
587
- authority: "hard",
588
524
  defaultEnabled: false,
589
525
  category: "Workflow",
590
526
  params: {
@@ -601,7 +537,6 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
601
537
  impact: "Failing CI blocks deploy.",
602
538
  description: "Require CI checks to pass on the current HEAD commit before Claude stops (ignores stale runs on prior commits)",
603
539
  match: { events: ["Stop"] },
604
- authority: "hard",
605
540
  defaultEnabled: false,
606
541
  category: "Workflow",
607
542
  },