# Role review

URL: /workflows/processes/role-review · Id: `process:role-review`

> Role review checks every filled Role against its contract each week and turns each missed result into a Decision.

Role review checks every filled [Role](/business/nouns/role) against its contract each week and turns each missed result into a [Decision](/business/nouns/decision).

## Outcome
| Part | This Process |
| --- | --- |
| Outcome | Each week every filled Role has a Role Review against its contract, and the Founder holds one Decision request per missed result. |
| Reads | [Role](/business/nouns/role), [Metric](/business/nouns/metric) |
| Leaves | [Role Review](/business/nouns/role-review), [Dashboard](/business/nouns/dashboard), [Task](/business/nouns/task) |
| Runs in | Each Startup |

## Accountable
[Operations Lead](/agents/operations/operations-lead), [Operations Team](/agents/operations).

## Workflows
| Workflow | Runs | Team |
| --- | --- | --- |
| [Monday Role review](/workflows/processes/role-review/monday-role-review) | every week on Monday at 09:00 | [Operations Team](/agents/operations) |

## Who does each step

| Workflow | Step | Role | Calls | Approval |
| --- | --- | --- | --- | --- |
| [Monday Role review](/workflows/processes/role-review/monday-role-review) | 1. Read each filled Role’s result Metrics against their targets for the week. | [Operations Lead](/agents/operations/operations-lead) | [Metric.query](/business/nouns/metric/query) | None |
| [Monday Role review](/workflows/processes/role-review/monday-role-review) | 2. Record a Role Review for each filled Role, with its results, standards and rung. | [Operations Lead](/agents/operations/operations-lead) | [Role.review](/business/nouns/role/review) | None |
| [Monday Role review](/workflows/processes/role-review/monday-role-review) | 3. Assign the Founder one Decision request per missed result. | [Operations Lead](/agents/operations/operations-lead) | [Task.assign](/business/nouns/task/assign) | None |
| [Monday Role review](/workflows/processes/role-review/monday-role-review) | 4. Publish the week’s Role reviews on the Dashboard every Team reads. | [Operations Lead](/agents/operations/operations-lead) | [Dashboard.update](/business/nouns/dashboard/update) | None |

## Events
| Direction | When | What happens |
| --- | --- | --- |
| In | Every week on Monday at 09:00 | Starts [Monday Role review](/workflows/processes/role-review/monday-role-review) |
| Out | [`Metric.queried`](/business/events/Metric.queried) | Raised by step 1 of [Monday Role review](/workflows/processes/role-review/monday-role-review) |
| Out | [`Role.reviewed`](/business/events/Role.reviewed) | Raised by step 2 of [Monday Role review](/workflows/processes/role-review/monday-role-review) |
| Out | [`Task.assigned`](/business/events/Task.assigned) | Raised by step 3 of [Monday Role review](/workflows/processes/role-review/monday-role-review) |
| Out | `Dashboard.updated` | Raised by step 4 of [Monday Role review](/workflows/processes/role-review/monday-role-review) |

## Plays
No Play names this Process.

## Controls
No Control names this Process or a Workflow of it.

## Settings
| Setting | Type | Default | Say | Set with |
| --- | --- | --- | --- | --- |
| `roleReview.at` | `string` | `mon 09:00` | Send the Role review Mondays at nine | [Setting.update](/business/nouns/setting/update) |

## Failure
A failed step retries; when retries run out, the Action goes to the [Operations Lead](/agents/operations/operations-lead).

## Loop
No loop: the path is never randomized, because it serves [Governance oversight](/systems/trust-and-governance/controls/governance-oversight).

## Code

**Ask**

```text
Turn on role review
```

**API**

```bash
curl -X POST https://api.sb/leaseline.app/processes/process_1/enable \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY"
```

**SDK**

```ts
import { $ } from 'startup-builder'

await $.Process.enable({ process: 'process_1' })
```

**CLI**

```bash
npx startup-builder do Process.enable --json '{"process":"process_1"}'
```

**MCP**

```json
{
  "name": "do",
  "arguments": {
    "code": "return await $.Process.enable({ process: 'process_1' })"
  }
}
```

## Enable
On by default for every Product Template. [Process.pause](/business/nouns/process/pause) stops new Actions; Actions in progress finish.

**Ask**

```text
Send the Role review Mondays at nine
```

**API**

```bash
curl -X PATCH https://api.sb/leaseline.app/settings/setting_1 \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"value":"mon 09:00","key":"roleReview.at"}'
```

**SDK**

```ts
import { $ } from 'startup-builder'

await $.Setting.update({ id: 'setting_1', value: 'mon 09:00', key: 'roleReview.at' })
```

**CLI**

```bash
npx startup-builder do Setting.update --json '{"id":"setting_1","value":"mon 09:00","key":"roleReview.at"}'
```

**MCP**

```json
{
  "name": "do",
  "arguments": {
    "code": "return await $.Setting.update({ id: 'setting_1', value: 'mon 09:00', key: 'roleReview.at' })"
  }
}
```

## Example
At 9:00 on the first workday of week 43, a [SaaS](/products/templates/saas) [Startup](/business/nouns/startup)'s [Sales Lead](/agents/sales/sales-lead) reads 4 new [Deals](/business/nouns/deal) against a target of 10. Its [Role Review](/business/nouns/role-review) records the miss, and the [Founder](/agents/founding/founder) gets one Decision request: add a second outbound [Sequence](/business/nouns/sequence), or lower the target.