failproofai 1.0.6 → 1.0.7-beta.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.
- package/.next/standalone/.next/BUILD_ID +1 -1
- package/.next/standalone/.next/build-manifest.json +3 -3
- package/.next/standalone/.next/prerender-manifest.json +4 -4
- package/.next/standalone/.next/required-server-files.json +1 -1
- package/.next/standalone/.next/server/app/_global-error/page/server-reference-manifest.json +1 -1
- package/.next/standalone/.next/server/app/_global-error/page.js +4 -4
- package/.next/standalone/.next/server/app/_global-error/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/_global-error.html +1 -1
- package/.next/standalone/.next/server/app/_global-error.rsc +7 -7
- package/.next/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +6 -6
- package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +7 -7
- package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
- package/.next/standalone/.next/server/app/_not-found/page.js +4 -4
- package/.next/standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/_not-found.html +1 -1
- package/.next/standalone/.next/server/app/_not-found.rsc +15 -15
- package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +15 -15
- package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +14 -14
- package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/api/audit/invite/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/audit/run/route.js +8 -7
- package/.next/standalone/.next/server/app/api/audit/run/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/audit/status/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/auth/login-request/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/auth/login-verify/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/auth/logout/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/auth/status/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/download/[project]/[session]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/audit/page/server-reference-manifest.json +2 -2
- package/.next/standalone/.next/server/app/audit/page.js +7 -5
- package/.next/standalone/.next/server/app/audit/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/audit/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/index.html +1 -1
- package/.next/standalone/.next/server/app/index.rsc +15 -15
- package/.next/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +14 -14
- package/.next/standalone/.next/server/app/index.segments/_full.segment.rsc +15 -15
- package/.next/standalone/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/page/server-reference-manifest.json +1 -1
- package/.next/standalone/.next/server/app/page.js +6 -6
- package/.next/standalone/.next/server/app/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/policies/page/server-reference-manifest.json +14 -14
- package/.next/standalone/.next/server/app/policies/page.js +13 -11
- package/.next/standalone/.next/server/app/policies/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/policies/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/project/[name]/page/server-reference-manifest.json +1 -1
- package/.next/standalone/.next/server/app/project/[name]/page.js +8 -7
- package/.next/standalone/.next/server/app/project/[name]/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/project/[name]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page/react-loadable-manifest.json +2 -2
- package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page/server-reference-manifest.json +2 -2
- package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page.js +7 -7
- package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/projects/page/server-reference-manifest.json +1 -1
- package/.next/standalone/.next/server/app/projects/page.js +7 -6
- package/.next/standalone/.next/server/app/projects/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/projects/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/settings/page/server-reference-manifest.json +41 -8
- package/.next/standalone/.next/server/app/settings/page.js +12 -9
- package/.next/standalone/.next/server/app/settings/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/chunks/{[externals]__1msfs-h._.js → [externals]__19_pzeq._.js} +1 -1
- package/.next/standalone/.next/server/chunks/{[externals]__1_bftcl._.js → [externals]__1j-zsg5._.js} +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0o07qi9._.js +1 -1
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__1_r2rbg._.js → [root-of-the-server]__1bf34x4._.js} +5 -7
- package/.next/standalone/.next/server/chunks/_09dz7xv._.js +21 -21
- package/.next/standalone/.next/server/chunks/_0tovk6q._.js +1 -1
- package/.next/standalone/.next/server/chunks/_0trp3yc._.js +1 -1
- package/.next/standalone/.next/server/chunks/_1ek68ln._.js +16 -16
- package/.next/standalone/.next/server/chunks/{_1c3k-8x._.js → _1q5i8mb._.js} +2 -2
- package/.next/standalone/.next/server/chunks/node_modules_posthog-node_dist_entrypoints_index_node_mjs_01r25oi._.js +2 -2
- package/.next/standalone/.next/server/chunks/node_modules_posthog-node_dist_entrypoints_index_node_mjs_09z9-p7._.js +2 -2
- package/.next/standalone/.next/server/chunks/package_json_[json]_cjs_1nxcc4v._.js +1 -1
- package/.next/standalone/.next/server/chunks/src_hooks_01frwmb._.js +5 -0
- package/.next/standalone/.next/server/chunks/src_hooks_18qtd42._.js +3 -0
- package/.next/standalone/.next/server/chunks/src_hooks_custom-hooks-loader_ts_0lnb3n3._.js +4 -2
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__01bmjsj._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__04usis8._.js +4 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__056wjo4._.js +4 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__059yza8._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0eip4_k._.js +22 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0n0xg95._.js +4 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0qcb0mg._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0qxnccm._.js +5 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0rwtwpm._.js +4 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0s_yomn._.js +4 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0soxz2z._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0yrsbd_._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__11mayhe._.js +4 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__13d-wb6._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1b2dbet._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1dinjii._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0cxe_2_._.js → [root-of-the-server]__1mf3zp6._.js} +3 -3
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__1svlq8e._.js → [root-of-the-server]__1p28m0u._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1pprgri._.js +4 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1q4p5b8._.js +4 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1qiz0e4._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_042cgl1._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_08x1r5t._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_0bqoto4._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/{_17o744m._.js → _0cf1olg._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/_0uyu3jf._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/{_0do6d26._.js → _135-c3y._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_1feuvhb._.js +5 -0
- package/.next/standalone/.next/server/chunks/ssr/{_1es2j7i._.js → _1gb0ifp._.js} +5 -5
- package/.next/standalone/.next/server/chunks/ssr/{_1_qswah._.js → _1q46vxx._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/{_0h_douw._.js → _1w_5l7t._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_1zopuov._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_next-internal_server_app_policies_page_actions_1sp2-yo.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/app_actions_get-scheduled-audit_ts_0ei9sni._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/app_audit__components_audit-dashboard_tsx_0p9ud47._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/app_global-error_tsx_1kp6l3x._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/app_policies_hooks-client_tsx_19dqvpc._.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/app_settings_02tf1h4._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/lib_utils_ts_0az0sfq._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{node_modules_next_dist_0drixxt._.js → node_modules_next_dist_0w6mzq5._.js} +4 -4
- package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_18_d8l1._.js +151 -0
- package/.next/standalone/.next/server/chunks/ssr/node_modules_posthog-node_dist_entrypoints_index_node_mjs_11bnuzn._.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/src_hooks_095a_79._.js +5 -0
- package/.next/standalone/.next/server/chunks/ssr/src_hooks_15t8kqj._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/src_hooks_18k8rl0._.js +12 -0
- package/.next/standalone/.next/server/chunks/ssr/src_hooks_1fm2w5z._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/src_hooks_1j0zy3v._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/src_hooks_builtin-policies_ts_09j2ndl._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/src_hooks_fp-home_ts_0je3xkv._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/src_hooks_pack-cli_ts_0t7me65._.js +1 -1
- package/.next/standalone/.next/server/middleware-build-manifest.js +3 -3
- package/.next/standalone/.next/server/pages/404.html +1 -1
- package/.next/standalone/.next/server/pages/500.html +1 -1
- package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/server-reference-manifest.json +56 -23
- package/.next/standalone/.next/static/chunks/{25m8mg7bosgip.js → 00i9thnpht4l1.js} +1 -1
- package/.next/standalone/.next/static/chunks/0289oapk24zql.js +1 -0
- package/.next/standalone/.next/static/chunks/{35pw7zxhh76n7.js → 0pyy9m5cm8zku.js} +1 -1
- package/.next/standalone/.next/static/chunks/15heikmy3yjzc.js +1 -0
- package/.next/standalone/.next/static/chunks/285spx855h_3r.css +2 -0
- package/.next/standalone/.next/static/chunks/{40-wncjnguy4e.js → 2plg9qae1yejv.js} +1 -1
- package/.next/standalone/.next/static/chunks/2qv4hshejedtx.css +1 -0
- package/.next/standalone/.next/static/chunks/2tqszh84mp_2l.js +1 -0
- package/.next/standalone/.next/static/chunks/34jpdb2xjm-x7.js +1 -0
- package/.next/standalone/.next/static/chunks/3cdkxrukvlvul.js +1 -0
- package/.next/standalone/.next/static/chunks/3dnd-_29uiaj3.js +6 -0
- package/.next/standalone/.next/static/chunks/3vp7c3knkh8mr.js +1 -0
- package/.next/standalone/.next/static/chunks/{2y4ycwcwfjv4k.js → 3vwnzfx9q80yl.js} +1 -1
- package/.next/standalone/app/actions/get-jev-config.ts +409 -0
- package/.next/standalone/app/actions/pack-actions.ts +12 -0
- package/.next/standalone/app/actions/update-jev-config.ts +420 -0
- package/.next/standalone/app/components/jev-notices.tsx +96 -0
- package/.next/standalone/app/policies/hooks-client.tsx +9 -0
- package/.next/standalone/app/settings/jev-panel.tsx +469 -0
- package/.next/standalone/app/settings/page.tsx +20 -1
- package/.next/standalone/app/settings/settings-client.tsx +27 -1
- package/.next/standalone/app/settings/settings.css +79 -0
- package/.next/standalone/fp-cloud-cli/CHANGELOG.md +51 -3
- package/.next/standalone/fp-cloud-cli/README.md +1 -1
- package/.next/standalone/fp-cloud-cli/fp_cli/_version.py +1 -1
- package/.next/standalone/fp-cloud-cli/fp_cli/client.py +44 -0
- package/.next/standalone/fp-cloud-cli/fp_cli/commands/incidents_cmds.py +226 -5
- package/.next/standalone/fp-cloud-cli/fp_cli/models.py +11 -0
- package/.next/standalone/fp-cloud-cli/fp_cli/output.py +68 -1
- package/.next/standalone/fp-cloud-cli/pyproject.toml +1 -1
- package/.next/standalone/fp-cloud-cli/skill/SKILL.md +17 -2
- package/.next/standalone/fp-cloud-cli/skill/references/commands.md +7 -4
- package/.next/standalone/fp-cloud-cli/tests/test_alerting.py +184 -0
- package/.next/standalone/fp-cloud-cli/uv.lock +3 -3
- package/.next/standalone/package.json +11 -11
- package/.next/standalone/sdk/python/CHANGELOG.md +7 -0
- package/.next/standalone/sdk/python/failproofai_sdk/_version.py +1 -1
- package/.next/standalone/sdk/python/failproofai_sdk/evaluator/__init__.py +2 -0
- package/.next/standalone/sdk/python/failproofai_sdk/evaluator/authoring.py +24 -1
- package/.next/standalone/sdk/python/failproofai_sdk/evaluator/runtime.py +41 -6
- package/.next/standalone/sdk/python/tests/test_evaluator_runtime.py +88 -0
- package/.next/standalone/sdk/python/uv.lock +15 -15
- package/.next/standalone/server.js +1 -1
- package/bin/failproofai.mjs +115 -2
- package/dist/cli.mjs +9283 -2149
- package/dist/index.js +19 -1
- package/dist/worker.mjs +13761 -7834
- package/package.json +11 -11
- package/pi-extension/index.ts +11 -0
- package/scripts/build-policy-pack.mjs +39 -2
- package/src/hooks/builtin-policies.ts +21 -3
- package/src/hooks/cloud-enrollment-cli.ts +1 -1
- package/src/hooks/cloud-managed-policies.ts +22 -0
- package/src/hooks/custom-hooks-loader.ts +45 -7
- package/src/hooks/custom-hooks-registry.ts +45 -1
- package/src/hooks/effective-reviewers.ts +79 -0
- package/src/hooks/first-run-gate.ts +5 -0
- package/src/hooks/fp-home.ts +23 -0
- package/src/hooks/handler.ts +265 -6
- package/src/hooks/hook-activity-store.ts +105 -1
- package/src/hooks/hook-telemetry.ts +41 -0
- package/src/hooks/jev-activity.ts +385 -0
- package/src/hooks/jev-cli.ts +1193 -0
- package/src/hooks/loader-utils.ts +6 -0
- package/src/hooks/pack-cli.ts +237 -11
- package/src/hooks/pack-manifest.ts +479 -7
- package/src/hooks/pack-store.ts +156 -10
- package/src/hooks/policy-authority.ts +333 -0
- package/src/hooks/policy-catalog.ts +65 -0
- package/src/hooks/policy-evaluator.ts +940 -796
- package/src/hooks/policy-registry.ts +25 -0
- package/src/hooks/policy-reviewability.ts +229 -0
- package/src/hooks/policy-types.ts +126 -0
- package/src/hooks/semantic/combine.ts +541 -0
- package/src/hooks/semantic/compile.ts +176 -0
- package/src/hooks/semantic/decide.ts +392 -0
- package/src/hooks/semantic/envelope.ts +1296 -0
- package/src/hooks/semantic/evaluator.ts +547 -0
- package/src/hooks/semantic/facts.ts +292 -0
- package/src/hooks/semantic/intent.ts +1190 -0
- package/src/hooks/semantic/jev-client.ts +643 -0
- package/src/hooks/semantic/jev-config.ts +594 -0
- package/src/hooks/semantic/jev-review.ts +374 -0
- package/src/hooks/semantic/jev-stats.ts +289 -0
- package/src/hooks/semantic/jev-throttle.ts +421 -0
- package/src/hooks/semantic/pack-policies.ts +251 -0
- package/src/hooks/semantic/policies.ts +596 -0
- package/src/hooks/semantic/precondition-names.ts +60 -0
- package/src/hooks/semantic/preconditions.ts +58 -0
- package/src/hooks/semantic/redact.ts +2910 -0
- package/src/hooks/semantic/types.ts +145 -0
- package/src/hooks/semver-precedence.ts +128 -0
- package/src/hooks/worker-server.ts +119 -26
- package/src/index.ts +6 -0
- package/.next/standalone/.next/server/chunks/src_hooks_0iu54mz._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0-_ki57._.js +0 -4
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__013jr2b._.js +0 -4
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__01wy8d-._.js +0 -4
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__02npjtd._.js +0 -4
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0cg-bgc._.js +0 -5
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0cpu_mj._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0da85px._.js +0 -4
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0ftmoxc._.js +0 -4
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0p-5p8u._.js +0 -4
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0u3w0ll._.js +0 -22
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__17d_ffl._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__19d9tgz._.js +0 -5
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1ctpynv._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1jiwfsj._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1p2otjt._.js +0 -4
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1phc187._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_06imw3p._.js +0 -5
- package/.next/standalone/.next/server/chunks/ssr/_1u8-lu2._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/app_settings_settings-client_tsx_20lq-mq._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/src_hooks_1cv9_c4._.js +0 -10
- package/.next/standalone/.next/static/chunks/0bepqeawy72n6.js +0 -1
- package/.next/standalone/.next/static/chunks/0h-gz8e00478q.js +0 -1
- package/.next/standalone/.next/static/chunks/0qmsunv04x4na.css +0 -2
- package/.next/standalone/.next/static/chunks/2k9f4tyv04809.css +0 -1
- package/.next/standalone/.next/static/chunks/2lvr2pt70qn14.js +0 -1
- package/.next/standalone/.next/static/chunks/3-6zhytp6adkk.js +0 -1
- package/.next/standalone/.next/static/chunks/319c_91le7-h_.js +0 -1
- package/.next/standalone/.next/static/chunks/35m53kix7uaii.js +0 -6
- package/.next/standalone/.next/static/chunks/3xacd7qmuqlvs.js +0 -1
- /package/.next/standalone/.next/static/{LzR_etPlaZV9JZH09lEp3 → qbVI48kgBOf9CTOKcFIk2}/_buildManifest.js +0 -0
- /package/.next/standalone/.next/static/{LzR_etPlaZV9JZH09lEp3 → qbVI48kgBOf9CTOKcFIk2}/_clientMiddlewareManifest.js +0 -0
- /package/.next/standalone/.next/static/{LzR_etPlaZV9JZH09lEp3 → qbVI48kgBOf9CTOKcFIk2}/_ssgManifest.js +0 -0
|
@@ -25,6 +25,12 @@
|
|
|
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.
|
|
28
34
|
*
|
|
29
35
|
* `params.default` values are handed to policies BY REFERENCE, so this must stay
|
|
30
36
|
* one module-level const — never a factory minting fresh defaults per call.
|
|
@@ -38,6 +44,7 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
|
|
|
38
44
|
displayTitle: "Redacted JWT tokens from tool output",
|
|
39
45
|
impact: "Stops the agent from echoing auth tokens it saw in command output.",
|
|
40
46
|
match: { events: ["PostToolUse"] },
|
|
47
|
+
authority: "hard",
|
|
41
48
|
defaultEnabled: true,
|
|
42
49
|
category: "Sanitize",
|
|
43
50
|
},
|
|
@@ -47,6 +54,7 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
|
|
|
47
54
|
displayTitle: "Redacted API keys from tool output",
|
|
48
55
|
impact: "Catches OpenAI / Anthropic / GitHub / AWS / Stripe / Google keys before the model sees them.",
|
|
49
56
|
match: { events: ["PostToolUse"] },
|
|
57
|
+
authority: "hard",
|
|
50
58
|
defaultEnabled: true,
|
|
51
59
|
category: "Sanitize",
|
|
52
60
|
params: {
|
|
@@ -63,6 +71,7 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
|
|
|
63
71
|
displayTitle: "Redacted database connection strings from tool output",
|
|
64
72
|
impact: "Strips embedded DB credentials before they reach the model context.",
|
|
65
73
|
match: { events: ["PostToolUse"] },
|
|
74
|
+
authority: "hard",
|
|
66
75
|
defaultEnabled: true,
|
|
67
76
|
category: "Sanitize",
|
|
68
77
|
},
|
|
@@ -72,6 +81,7 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
|
|
|
72
81
|
displayTitle: "Redacted PEM private keys from tool output",
|
|
73
82
|
impact: "Prevents private key bodies from being echoed into chat context.",
|
|
74
83
|
match: { events: ["PostToolUse"] },
|
|
84
|
+
authority: "hard",
|
|
75
85
|
defaultEnabled: true,
|
|
76
86
|
category: "Sanitize",
|
|
77
87
|
},
|
|
@@ -81,6 +91,7 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
|
|
|
81
91
|
impact: "Strips Authorization: Bearer values before they hit the model.",
|
|
82
92
|
description: "Stop Claude from reading Authorization Bearer tokens in tool responses",
|
|
83
93
|
match: { events: ["PostToolUse"] },
|
|
94
|
+
authority: "hard",
|
|
84
95
|
defaultEnabled: true,
|
|
85
96
|
category: "Sanitize",
|
|
86
97
|
},
|
|
@@ -90,6 +101,8 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
|
|
|
90
101
|
impact: "Env vars often contain secrets; blocking `env` / `printenv` keeps them out of the model context.",
|
|
91
102
|
description: "Prevent commands that read environment variables",
|
|
92
103
|
match: { events: ["PreToolUse"], toolNames: ["Bash"] },
|
|
104
|
+
authority: "reviewable",
|
|
105
|
+
reviewedBy: ["env-secrets-dump", "secret-exposure"],
|
|
93
106
|
defaultEnabled: true,
|
|
94
107
|
category: "Environment",
|
|
95
108
|
},
|
|
@@ -99,6 +112,8 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
|
|
|
99
112
|
impact: "`.env` files routinely contain API keys and DB credentials.",
|
|
100
113
|
description: "Block reading/writing .env files",
|
|
101
114
|
match: { events: ["PreToolUse"] },
|
|
115
|
+
authority: "reviewable",
|
|
116
|
+
reviewedBy: ["secret-exposure"],
|
|
102
117
|
defaultEnabled: true,
|
|
103
118
|
category: "Environment",
|
|
104
119
|
},
|
|
@@ -108,6 +123,8 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
|
|
|
108
123
|
impact: "Stops the agent from peeking at neighboring repos or your home directory.",
|
|
109
124
|
description: "Block file reads outside the session working directory",
|
|
110
125
|
match: { events: ["PreToolUse"], toolNames: ["Read", "Glob", "Grep", "Bash"] },
|
|
126
|
+
authority: "reviewable",
|
|
127
|
+
reviewedBy: ["read-outside-workspace"],
|
|
111
128
|
defaultEnabled: false,
|
|
112
129
|
category: "Environment",
|
|
113
130
|
params: {
|
|
@@ -126,6 +143,7 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
|
|
|
126
143
|
// PermissionRequest is Codex's escalation-approval event; fire the same
|
|
127
144
|
// sudo guard there so Codex sandbox bypasses are blocked too.
|
|
128
145
|
match: { events: ["PreToolUse", "PermissionRequest"], toolNames: ["Bash"] },
|
|
146
|
+
authority: "hard",
|
|
129
147
|
defaultEnabled: true,
|
|
130
148
|
category: "Dangerous Commands",
|
|
131
149
|
params: {
|
|
@@ -142,6 +160,7 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
|
|
|
142
160
|
impact: "`curl ... | sh` runs unverified remote code on your machine.",
|
|
143
161
|
description: "Block piping downloads to shell",
|
|
144
162
|
match: { events: ["PreToolUse"], toolNames: ["Bash"] },
|
|
163
|
+
authority: "hard",
|
|
145
164
|
defaultEnabled: true,
|
|
146
165
|
category: "Dangerous Commands",
|
|
147
166
|
},
|
|
@@ -151,6 +170,7 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
|
|
|
151
170
|
impact: "Catches catastrophic `rm -rf /` and Windows equivalents.",
|
|
152
171
|
description: "Prevent catastrophic deletions",
|
|
153
172
|
match: { events: ["PreToolUse"], toolNames: ["Bash"] },
|
|
173
|
+
authority: "hard",
|
|
154
174
|
defaultEnabled: false,
|
|
155
175
|
category: "Dangerous Commands",
|
|
156
176
|
params: {
|
|
@@ -180,6 +200,7 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
|
|
|
180
200
|
},
|
|
181
201
|
defaultEnabled: true,
|
|
182
202
|
alwaysOn: true,
|
|
203
|
+
authority: "hard",
|
|
183
204
|
category: "Dangerous Commands",
|
|
184
205
|
},
|
|
185
206
|
{
|
|
@@ -188,6 +209,7 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
|
|
|
188
209
|
impact: "kubectl can change live cluster state — gated unless allow-listed.",
|
|
189
210
|
description: "Block kubectl commands (Kubernetes cluster mutations)",
|
|
190
211
|
match: { events: ["PreToolUse"], toolNames: ["Bash"] },
|
|
212
|
+
authority: "hard",
|
|
191
213
|
defaultEnabled: false,
|
|
192
214
|
category: "Infra Commands",
|
|
193
215
|
params: {
|
|
@@ -204,6 +226,7 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
|
|
|
204
226
|
impact: "Terraform mutates real infrastructure — gated unless allow-listed.",
|
|
205
227
|
description: "Block terraform and tofu (OpenTofu) commands",
|
|
206
228
|
match: { events: ["PreToolUse"], toolNames: ["Bash"] },
|
|
229
|
+
authority: "hard",
|
|
207
230
|
defaultEnabled: false,
|
|
208
231
|
category: "Infra Commands",
|
|
209
232
|
params: {
|
|
@@ -220,6 +243,7 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
|
|
|
220
243
|
impact: "AWS CLI can spend money or break prod — gated.",
|
|
221
244
|
description: "Block aws CLI commands",
|
|
222
245
|
match: { events: ["PreToolUse"], toolNames: ["Bash"] },
|
|
246
|
+
authority: "hard",
|
|
223
247
|
defaultEnabled: false,
|
|
224
248
|
category: "Infra Commands",
|
|
225
249
|
params: {
|
|
@@ -236,6 +260,7 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
|
|
|
236
260
|
impact: "gcloud can spend money or break prod — gated.",
|
|
237
261
|
description: "Block gcloud (Google Cloud) CLI commands",
|
|
238
262
|
match: { events: ["PreToolUse"], toolNames: ["Bash"] },
|
|
263
|
+
authority: "hard",
|
|
239
264
|
defaultEnabled: false,
|
|
240
265
|
category: "Infra Commands",
|
|
241
266
|
params: {
|
|
@@ -252,6 +277,7 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
|
|
|
252
277
|
impact: "az can spend money or break prod — gated.",
|
|
253
278
|
description: "Block az (Azure) CLI commands",
|
|
254
279
|
match: { events: ["PreToolUse"], toolNames: ["Bash"] },
|
|
280
|
+
authority: "hard",
|
|
255
281
|
defaultEnabled: false,
|
|
256
282
|
category: "Infra Commands",
|
|
257
283
|
params: {
|
|
@@ -268,6 +294,7 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
|
|
|
268
294
|
impact: "Helm releases mutate cluster state — gated.",
|
|
269
295
|
description: "Block helm commands",
|
|
270
296
|
match: { events: ["PreToolUse"], toolNames: ["Bash"] },
|
|
297
|
+
authority: "hard",
|
|
271
298
|
defaultEnabled: false,
|
|
272
299
|
category: "Infra Commands",
|
|
273
300
|
params: {
|
|
@@ -284,6 +311,7 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
|
|
|
284
311
|
impact: "Catches `gh workflow run`, `gh pr merge`, `gh secret set`, etc.",
|
|
285
312
|
description: "Block gh CLI pipeline-trigger subcommands (workflow run, run rerun/cancel, pr merge, release create/delete, cache delete, secret set/delete)",
|
|
286
313
|
match: { events: ["PreToolUse"], toolNames: ["Bash"] },
|
|
314
|
+
authority: "hard",
|
|
287
315
|
defaultEnabled: false,
|
|
288
316
|
category: "Infra Commands",
|
|
289
317
|
params: {
|
|
@@ -300,6 +328,7 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
|
|
|
300
328
|
impact: "Stops the agent from creating `.pem`, `id_rsa`, `credentials.json`, etc.",
|
|
301
329
|
description: "Block writing secret key files",
|
|
302
330
|
match: { events: ["PreToolUse"], toolNames: ["Write"] },
|
|
331
|
+
authority: "hard",
|
|
303
332
|
defaultEnabled: false,
|
|
304
333
|
category: "Dangerous Commands",
|
|
305
334
|
params: {
|
|
@@ -316,6 +345,7 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
|
|
|
316
345
|
impact: "Direct pushes to a protected branch bypass review.",
|
|
317
346
|
description: "Block pushing to main/master",
|
|
318
347
|
match: { events: ["PreToolUse"], toolNames: ["Bash"] },
|
|
348
|
+
authority: "hard",
|
|
319
349
|
defaultEnabled: true,
|
|
320
350
|
category: "Git",
|
|
321
351
|
params: {
|
|
@@ -332,6 +362,7 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
|
|
|
332
362
|
impact: "Force-pushes rewrite history and can clobber teammates' work.",
|
|
333
363
|
description: "Prevent force-pushing to any branch",
|
|
334
364
|
match: { events: ["PreToolUse"], toolNames: ["Bash"] },
|
|
365
|
+
authority: "hard",
|
|
335
366
|
defaultEnabled: false,
|
|
336
367
|
category: "Git",
|
|
337
368
|
},
|
|
@@ -341,6 +372,21 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
|
|
|
341
372
|
impact: "Work should land via PR — direct commits skip review.",
|
|
342
373
|
description: "Block git commits and merges on main/master branch",
|
|
343
374
|
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",
|
|
344
390
|
defaultEnabled: false,
|
|
345
391
|
category: "Git",
|
|
346
392
|
params: {
|
|
@@ -357,6 +403,8 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
|
|
|
357
403
|
impact: "Amending after a push rewrites history that others may have pulled.",
|
|
358
404
|
description: "Warns before amending git commits, which rewrites history",
|
|
359
405
|
match: { events: ["PreToolUse"], toolNames: ["Bash"] },
|
|
406
|
+
authority: "reviewable",
|
|
407
|
+
reviewedBy: ["git-history-rewrite"],
|
|
360
408
|
defaultEnabled: false,
|
|
361
409
|
category: "Git",
|
|
362
410
|
},
|
|
@@ -366,6 +414,7 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
|
|
|
366
414
|
impact: "Stash deletions are permanent and silent.",
|
|
367
415
|
description: "Warns before permanently deleting stashed changes",
|
|
368
416
|
match: { events: ["PreToolUse"], toolNames: ["Bash"] },
|
|
417
|
+
authority: "hard",
|
|
369
418
|
defaultEnabled: false,
|
|
370
419
|
category: "Git",
|
|
371
420
|
},
|
|
@@ -375,6 +424,7 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
|
|
|
375
424
|
impact: "Wide stages routinely catch generated files or secrets you didn't intend to commit.",
|
|
376
425
|
description: "Warns before staging all working tree files with git add -A / . / --all",
|
|
377
426
|
match: { events: ["PreToolUse"], toolNames: ["Bash"] },
|
|
427
|
+
authority: "hard",
|
|
378
428
|
defaultEnabled: false,
|
|
379
429
|
category: "Git",
|
|
380
430
|
},
|
|
@@ -384,6 +434,8 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
|
|
|
384
434
|
impact: "Easy way to wipe a table by accident.",
|
|
385
435
|
description: "Warn before executing destructive SQL (DROP/TRUNCATE/DELETE without WHERE) via database clients",
|
|
386
436
|
match: { events: ["PreToolUse"], toolNames: ["Bash"] },
|
|
437
|
+
authority: "reviewable",
|
|
438
|
+
reviewedBy: ["database-destruction"],
|
|
387
439
|
defaultEnabled: false,
|
|
388
440
|
category: "Database",
|
|
389
441
|
},
|
|
@@ -393,6 +445,7 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
|
|
|
393
445
|
impact: "ALTER TABLE operations can lock tables and break readers.",
|
|
394
446
|
description: "Warns before SQL schema changes (ALTER TABLE with column or rename operations)",
|
|
395
447
|
match: { events: ["PreToolUse"], toolNames: ["Bash"] },
|
|
448
|
+
authority: "hard",
|
|
396
449
|
defaultEnabled: false,
|
|
397
450
|
category: "Database",
|
|
398
451
|
},
|
|
@@ -402,6 +455,7 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
|
|
|
402
455
|
impact: "Publishes are irreversible — `npm publish` / `cargo publish` shouldn't happen without intent.",
|
|
403
456
|
description: "Warn before publishing packages to public registries (npm, PyPI, crates.io, RubyGems, etc.)",
|
|
404
457
|
match: { events: ["PreToolUse"], toolNames: ["Bash"] },
|
|
458
|
+
authority: "hard",
|
|
405
459
|
defaultEnabled: false,
|
|
406
460
|
category: "Packages & System",
|
|
407
461
|
},
|
|
@@ -411,6 +465,8 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
|
|
|
411
465
|
impact: "`npm i -g`, `cargo install`, `pip --user` pollute your machine outside the project.",
|
|
412
466
|
description: "Warns before installing packages globally (npm -g, cargo install, etc.)",
|
|
413
467
|
match: { events: ["PreToolUse"], toolNames: ["Bash"] },
|
|
468
|
+
authority: "reviewable",
|
|
469
|
+
reviewedBy: ["system-modification"],
|
|
414
470
|
defaultEnabled: false,
|
|
415
471
|
category: "Packages & System",
|
|
416
472
|
},
|
|
@@ -420,6 +476,7 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
|
|
|
420
476
|
impact: "Mixing package managers creates lockfile churn for your team.",
|
|
421
477
|
description: "Blocks non-preferred package managers and tells Claude to use an allowed one (e.g., uv instead of pip)",
|
|
422
478
|
match: { events: ["PreToolUse"], toolNames: ["Bash"] },
|
|
479
|
+
authority: "hard",
|
|
423
480
|
defaultEnabled: false,
|
|
424
481
|
category: "Packages & System",
|
|
425
482
|
params: {
|
|
@@ -441,6 +498,7 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
|
|
|
441
498
|
impact: "Catches accidentally large file writes (logs, binaries, model dumps).",
|
|
442
499
|
description: "Warn before writing files larger than 1MB (configurable via thresholdKb param)",
|
|
443
500
|
match: { events: ["PreToolUse"], toolNames: ["Write"] },
|
|
501
|
+
authority: "hard",
|
|
444
502
|
defaultEnabled: false,
|
|
445
503
|
category: "Packages & System",
|
|
446
504
|
params: {
|
|
@@ -457,6 +515,7 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
|
|
|
457
515
|
impact: "Catches `nohup` / `&` / `screen` / `tmux` / `disown` patterns that the agent often forgets to clean up.",
|
|
458
516
|
description: "Warns before starting detached or background processes",
|
|
459
517
|
match: { events: ["PreToolUse"], toolNames: ["Bash"] },
|
|
518
|
+
authority: "hard",
|
|
460
519
|
defaultEnabled: false,
|
|
461
520
|
category: "Packages & System",
|
|
462
521
|
},
|
|
@@ -466,6 +525,7 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
|
|
|
466
525
|
impact: "Usually a sign of a stuck loop burning tokens.",
|
|
467
526
|
description: "Warn when the same tool is called 3+ times with identical parameters",
|
|
468
527
|
match: { events: ["PreToolUse"] },
|
|
528
|
+
authority: "hard",
|
|
469
529
|
defaultEnabled: false,
|
|
470
530
|
category: "AI Behavior",
|
|
471
531
|
},
|
|
@@ -475,6 +535,7 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
|
|
|
475
535
|
impact: "Work not in a commit is invisible to teammates and easy to lose.",
|
|
476
536
|
description: "Require all changes to be committed before Claude stops",
|
|
477
537
|
match: { events: ["Stop"] },
|
|
538
|
+
authority: "hard",
|
|
478
539
|
defaultEnabled: false,
|
|
479
540
|
category: "Workflow",
|
|
480
541
|
},
|
|
@@ -484,6 +545,7 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
|
|
|
484
545
|
impact: "Local-only commits won't trigger CI or be reviewable.",
|
|
485
546
|
description: "Require all commits to be pushed to remote before Claude stops",
|
|
486
547
|
match: { events: ["Stop"] },
|
|
548
|
+
authority: "hard",
|
|
487
549
|
defaultEnabled: false,
|
|
488
550
|
category: "Workflow",
|
|
489
551
|
params: {
|
|
@@ -505,6 +567,7 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
|
|
|
505
567
|
impact: "Branches without PRs don't get reviewed.",
|
|
506
568
|
description: "Require a pull request to exist for the current branch before Claude stops",
|
|
507
569
|
match: { events: ["Stop"] },
|
|
570
|
+
authority: "hard",
|
|
508
571
|
defaultEnabled: false,
|
|
509
572
|
category: "Workflow",
|
|
510
573
|
params: {
|
|
@@ -521,6 +584,7 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
|
|
|
521
584
|
impact: "Conflicting branches can't merge — surface them early.",
|
|
522
585
|
description: "Require the current branch to merge cleanly with the base branch before Claude stops",
|
|
523
586
|
match: { events: ["Stop"] },
|
|
587
|
+
authority: "hard",
|
|
524
588
|
defaultEnabled: false,
|
|
525
589
|
category: "Workflow",
|
|
526
590
|
params: {
|
|
@@ -537,6 +601,7 @@ export const POLICY_CATALOG: PolicyCatalogEntry[] = [
|
|
|
537
601
|
impact: "Failing CI blocks deploy.",
|
|
538
602
|
description: "Require CI checks to pass on the current HEAD commit before Claude stops (ignores stale runs on prior commits)",
|
|
539
603
|
match: { events: ["Stop"] },
|
|
604
|
+
authority: "hard",
|
|
540
605
|
defaultEnabled: false,
|
|
541
606
|
category: "Workflow",
|
|
542
607
|
},
|