Decision log, alerts and evidence
What the policy decision log records, how severity is decided, failure alerts and the daily digest, the evidence export and the AI inventory export.
The decision log
Every decision the policy engine records is written to an append-only log, on every edition. It is read on Settings → Policies → Activity, which needs audit.view (Owner and Admin by default).
A decision never holds the matched value, nor any part of it. It holds:
| Field | Meaning |
|---|---|
| Object and run | The Agent, Team, Workflow or Project, and the run it belongs to |
| Boundary | Model call, tool call before or after, agent output, or outbound |
| Rule kind | capability, routing, data, code or egress |
| Policy versions | Every version in force |
| Category, detector | What was found, with the confidence for name recognition, and the exact version of a custom pattern or dictionary |
| Action | allow, redact, deny, escalate or route |
| Outcome | applied, monitor_only or partial_scan |
| Mode | enforce or monitor |
| Severity | See below |
| Fingerprint | A keyed HMAC of the value, per Organization, so repeats can be counted. It is not the value. |
| Reference | REF- and 8 characters, only on a denial or escalation shown to an end user. Search it in Activity to find the decision. |
The log stores no model name, so a routed decision names the configuration chosen rather than a model.
Severity
The engine sets severity; no caller can choose it.
| Severity | When |
|---|---|
success | The rule applied as written |
contained | The data was stopped later than the rule intended (a streamed answer denied after earlier sentences were sent), an escalation expired into a deny, or a scan was partial |
failure | The engine could not apply the rule: a detector error, a policy that could not be loaded, a boundary reached without run context. A failure always denies. |
Alerts
Enterprise. On Community no alert is sent, and the decision log stays viewable.
failure: every active Owner and Admin gets an in-app notification and an email, within seconds. The sidebar bell shows a red dot while a failure is unread, with Open decision and View trace. Repeats from one policy and one object within 10 minutes collapse into one notification with a count, and only the first is emailed.contained: one daily digest, in-app and by email, at 06:00 UTC for the previous UTC day, with counts by policy and object. An Organization with none gets nothing.
Alerts carry no matched value. Slack is not available.
Evidence export
Enterprise. Settings → Policies → Evidence export, with reports.generate (Owner and Admin by default). Choose a period (last 30 days, last quarter, year to date or custom dates, at most 366 days, in UTC) and a format: JSON, or CSV as a .zip with one file per section. Generate downloads:
- the policies and versions in force during the period, with their mode;
- the override history: who replaced what, when and why;
- decision counts by severity, category, boundary and object, with Monitor counted apart;
- your compliance mappings, grouped by framework and reference, labelled customer-declared;
- the custom detection versions in force.
Values are never exported. A custom pattern's text is exported, as evidence of the rule; a dictionary's terms are not, only their count. A period that has not ended is marked partial, with the time its data runs through.
The export assists with audits. It is evidence of how policies were configured and applied, not a compliance certificate.
AI inventory export
Enterprise. Download AI inventory, on the same tab with the same permission and period, produces one JSON file (ai-inventory-<org-slug>-<from>-<to>.json) that answers "what AI systems do we run and what governs them". For every Agent, Team and Workflow it lists where it lives, the LLM Configurations and Knowledge Bases it uses, the policies and overrides governing it at export time, and, for the period, the decision counts and a run summary.
It holds names and an override's reason, and no message or trace content, prompt, Knowledge Base content, dictionary term or sample.
Synchronous Agent API runs (POST /api/v1/agents/:id/run) keep no durable run record, so the run summary does not count them.