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

# Human reviewer

> Work the review queue: approve or reject flagged agent decisions.

You judge the cases the evaluators flag or sample. Your decisions also
become training labels for the bank's own judge model.

**1. Get the right role**

`member`, `developer` or `admin`.

**2. Open the queue**

Console **Human review**, or the CLI.

**3. Decide**

Approve, or reject with a named failure mode.

## 1. Get the right role

Deciding a review item needs the `audit:write` permission. Of the shipped
roles for people, only **member**, **developer** and **admin** have it. `approver`,
`cro`, `validator`, `auditor` and `viewer` can read the queue but cannot
decide.

If the active ControlBook names an override authority for an item's risk
tier, you also need that permission. Ask your platform operator.

## 2. Open the queue

Items reach the queue in three ways:

* **Drift alerts**, when the agent's `sengol.yaml` sets `governance.drift_response_policy.notify_compliance: true`
* **Judge calibration runs**, which sample cases for labelling
* **Anyone with `audit:write`**, who can flag a specific record

To flag a record yourself, take its id from `sengol audit list` and post it:

```bash theme={null}
JWT=$(curl -s -X POST "$SENGOL_API_URL/v1/auth/token" \
  -H "Content-Type: application/json" \
  -d "{\"grant_type\":\"local_user_token\",\"secret\":\"$SENGOL_API_TOKEN\"}" \
  | python -c 'import sys, json; print(json.load(sys.stdin)["access_token"])')

RECORD_ID=$(sengol audit list --agent-id gic-advisor --limit 1 --format json \
  | python -c 'import sys, json; print(json.load(sys.stdin)[0]["record_id"])')

curl -s -X POST "$SENGOL_API_URL/v1/review" \
  -H "Authorization: Bearer $JWT" -H "Content-Type: application/json" \
  -d "{\"audit_record_id\":\"$RECORD_ID\",\"agent_id\":\"gic-advisor\",\"policies\":[\"OSFI_E23\"]}"
```

**In the Console**, open **Govern → Human review**. The **Review queue** tab
lists pending items; **Production failures** lists failures the agent hit
in production.

![Human review page with three pending items](https://mintcdn.com/sengol/WAzD6pTFOjHwDiMz/images/console-review.png?fit=max\&auto=format\&n=WAzD6pTFOjHwDiMz\&q=85\&s=fab53b705ad614836af158f5f00d0b2b)

The review queue, signed in as a member.

**From the CLI:**

```bash theme={null}
sengol review list --status PENDING
```

```text theme={null}
REVIEW ID            AGENT        STATUS   AUDIT RECORD         DECIDED AT
-------------------  -----------  -------  -------------------  ----------
01a10cb5-c9d9-7731…  gic-advisor  PENDING  e11e2339-faa1-5da8…  —
```

## 3. Decide

**In the Console**, open an item. The panel explains why it was flagged
and what a decision does. Choose **Approve record**, or **Reject record** and
pick a failure mode.

![Review item detail with Approve record and Reject record buttons](https://mintcdn.com/sengol/WAzD6pTFOjHwDiMz/images/console-review-decide.png?fit=max\&auto=format\&n=WAzD6pTFOjHwDiMz\&q=85\&s=828575aa2edccc374ed621ab9e4c2bcb)

An open item: why it was flagged, and the two decisions.

**From the CLI**, you need the full review id. Look it up by the record you flagged:

```bash theme={null}
REVIEW_ID=$(curl -s "$SENGOL_API_URL/v1/review?status=PENDING" \
  -H "Authorization: Bearer $JWT" \
  | python -c 'import sys, json; print(next(i["review_id"] for i in json.load(sys.stdin) if i["audit_record_id"] == sys.argv[1]))' "$RECORD_ID")

sengol review decide "$REVIEW_ID" --rejected --failure-mode REQUIRED_DISCLOSURE_MISSING
```

```text theme={null}
Decision recorded: Rejected.
  Review ID:    01a10cb5-c9d9-7731-b538-e84ca32960ec
  Agent:        gic-advisor
  Status:       REJECTED
  Failure mode: REQUIRED_DISCLOSURE_MISSING
  Reviewer:     local:dev-tenant:01a10cab-...
```

Rules:

* A rejection must name a failure mode. List the valid ones with
  `GET /v1/review/failure-modes`.
* A decision is final. Deciding the same item again fails:

```bash theme={null}
sengol review decide "$REVIEW_ID" --approved
```

* The reviewer recorded is always you, the signed-in user.

## What happens to your decisions

* They are stored as review labels. They are **not** signed audit records,
  so an examiner cannot verify them offline.
* On a judge calibration run, decided items, approved and rejected, are
  collected into `judge_training.jsonl` for the bank's ML platform to train
  a judge candidate. Sengol never trains a model itself.

## Intake review steps

If your team owns a responsibility in a [review workflow](https://docs.sengol.io/guides/review-workflows.md),
intakes routed to it show a **Review progress** card. Select **Clear this
step**, or leave a note: advice, changes requested or a refusal. You need the
`sod:approve` permission, an interactive sign-in and a seat in the
responsibility. That is a different role from the queue above: `approver`,
`cro`, `validator` and `admin` hold `sod:approve`, while `member` and
`developer` do not.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.