Decisions

How the probabilities from WHAT_IT_CHECKS.md turn into allow / ask / deny.

Thresholds (see internal/policy/policy.go:42; starting guesses, not tuned):

Highest harm probabilityAction
Below the ask thresholdAllow silently
Between ask and denyAsk you to confirm (ask)
At or above denyBlock, and tell the agent why so it can pick a safer alternative

Default bands:

Harmaskdeny
destroys_uncommitted0.350.80
irreversible_data_loss0.400.85
touches_production0.300.75
writes_outside_project0.500.90
exfiltrates_data0.500.90

blast_radius >= 2.0 alone triggers ask. Reasons are templated in code (the model never generates text). Missing answers → fail-safe ask. Tune bands via jevrail eval: do not trust the defaults on a real project.

If Jev is unreachable (1.5 s budget, timeout_ms): degraded fallback. Commands whose parsed argv looks dangerous (rm, reset, clean, drop, truncate, delete, dd, mkfs, push --force, kubectl, terraform, …; full list in internal/tier0/tier0.go:54) → ask; otherwise allow (or per fail_mode). Logged as degraded. Configurable via fail_mode = "ask" | "allow" | "deny".

Bands are overridden per-project in ~/.config/jevrail/config.json: see the Configuration section of the README for the file format.