> ## Documentation Index
> Fetch the complete documentation index at: https://docs.synscribe.com/llms.txt
> Use this file to discover all available pages before exploring further.

# How does the compliance guardrail decide pass or fail?

> A policy is org context plus rules; a single judge reads the content and returns violations; one confirmed violation fails.

The compliance guardrail decides with a single Claude judge reading your content against
one policy. A policy is the org's compliance context plus a set of rules; exactly one policy is active
per org. The judge returns a list of violations — one confirmed violation means **fail**, and clean
content means an **empty list**, not a report of everything that passed. The policy you write *is* the
prompt the judge runs on, so the quality of the rules is the quality of the decision.

## A policy = org context + rules

A policy is your compliance context plus a set of rules. **One active policy per org**
applies. Each rule has a title and a `guidance` string, plus optional good/bad example pairs. Two
things to know:

* There is no severity field. A flag is a flag; any confirmed violation blocks. You don't rank
  rules by severity; you write them so each one only fires when it should.
* The guidance must carry both halves. Every rule states what to *flag* **and** the carve-out —
  "flag X, but do NOT flag Y." A rule with only the flag half over-flags; the carve-out is what keeps
  the judge on the line you actually mean.

## The policy is the prompt

There's no hidden rulebook. The judge's prompt is assembled entirely from the policy: a system role
("an impartial legal/compliance reviewer for marketing content in a regulated industry"), then your
`## Organization context`, then `## Rules` (each rule with its good/bad examples), then the
`## Content to review`. Nothing else feeds the decision — which is why calibrating the *policy* is how
you calibrate the *judge*. (See [Calibrate the guardrail](/platform/calibrate-evaluator).)

## What it returns, and the verdict rule

The judge returns a list of violations, each with the rule it breaches, the offending excerpt, an
explanation, and a suggested fix. The verdict is simple: **status is `fail` if there's at least one
confirmed violation; otherwise it passes with an empty violation list.** Clean content comes back
*empty*: the guardrail gates content, so it doesn't hand back a list of everything that was fine.

<Frame caption="A failed run returns each violation: the rule it breaches, the offending excerpt, why it breaches, and a suggested fix.">
  <img src="https://mintcdn.com/synscribe/nrc8GKkJ73Gh9UPN/images/platform/guardrail-run-violations.png?fit=max&auto=format&n=nrc8GKkJ73Gh9UPN&q=85&s=4bcef69aea324927b86a869182147bc7" alt="An expanded guardrail run showing several violations, each with a rule name, the flagged excerpt in quotes, an explanation, and a Fix suggestion." width="2362" height="1316" data-path="images/platform/guardrail-run-violations.png" />
</Frame>

**Related:** [Set up the compliance guardrail](/platform/set-up-evaluator) · [Calibrate the guardrail](/platform/calibrate-evaluator) · [Refiner vs guardrail](/platform/refiner-vs-evaluator) · [Automate compliance checks](/platform/automate-compliance-checks)
