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

# Fairness screening

> Group outcomes over declared attributes, with two rules about what a screen must not do to the people reading it.

A fairness screen compares decision outcomes across groups, using attributes
somebody **declared**. It does not infer them, and the reason is not
squeamishness: an inferred protected attribute is a guess, and a fairness
finding built on a guess is worse than no finding.

## Two rules run through all of it

**A flag requires a threshold breach *and* statistical significance.** A gap of
eight points on a cohort of eleven is noise. A screen that alarms on it teaches
people to close the tab, and the next alarm, the real one, gets closed too.
Those are reported as **watch**, not as a flag.

**Small cohorts are suppressed, never dropped.** Silence and erasure are
different things. A group too small to report on is named, counted out, and
given the threshold that would surface it, because the groups that fall below a
reporting threshold are frequently the groups the question was about.

## Declarations come first

```http theme={"system"}
GET    /v1/fairness/attributes
POST   /v1/fairness/declarations
DELETE /v1/fairness/declarations
```

A declaration says: for this population, this attribute is available and lawful
to screen on. The lawfulness half is separate from the arithmetic half by
design. One module decides whether a screen may run at all; another does
statistics and assumes that question is already answered.

## Running a screen

```http theme={"system"}
POST /v1/fairness/screens
GET  /v1/fairness/screens
```

The result reports, per group: the outcome rate, the cohort size, and one of
**flag**, **watch** or **suppressed**. Decisions carrying no declaration are
reported as **undisclosed** rather than dropped, so the denominator is honest.

## What a screen is and is not

<Warning>
  A screen over declared attributes is **not proof of fairness**. It tells you the
  rates for the people who told you, which is a self-selected group.

  A flagged cohort is **not proof of discrimination**. It is grounds for a
  controlled analysis that somebody qualified performs.

  Both of those belong in the conversation before the first screen runs, not
  after somebody has taken a chart to a regulator.
</Warning>

## Why not infer the attribute

Because the platform would then be manufacturing the protected characteristic it
is reporting on, and every finding would rest on the quality of that inference
rather than on the data. A decision with no declaration is `undisclosed`. That
is a smaller answer and a true one.
