# Supply

URL: /workflows/processes/supply · Id: `process:supply`

> Supply keeps enough credentialed Suppliers booked to meet demand and suspends any whose Credential lapses.

Supply keeps enough credentialed [Suppliers](/business/nouns/supplier) booked to meet demand and suspends any whose [Credential](/business/nouns/credential) lapses.

## Outcome
| Part | This Process |
| --- | --- |
| Outcome | Booked work for the next 14 days is covered by Suppliers whose Credentials were verified at the source today. |
| Reads | [Supplier](/business/nouns/supplier), [Credential](/business/nouns/credential) |
| Leaves | [Supplier](/business/nouns/supplier), [Credential](/business/nouns/credential), [Task](/business/nouns/task) |
| Runs in | Each Startup |

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

## Workflows
| Workflow | Runs | Team |
| --- | --- | --- |
| [Recruit supply](/workflows/processes/supply/recruit-supply) | every week | [Operations Team](/agents/operations) |
| [Credential check](/workflows/processes/supply/credential-check) | every day | [Operations Team](/agents/operations) |

## Who does each step

| Workflow | Step | Role | Calls | Approval |
| --- | --- | --- | --- | --- |
| [Recruit supply](/workflows/processes/supply/recruit-supply) | 1. Forecast booked capacity for the next 14 days. | [Supply Manager](/agents/operations/supply-manager) | [Forecast.create](/business/nouns/forecast/create) | None |
| [Recruit supply](/workflows/processes/supply/recruit-supply) | 2. Recruit from credential registries and professional communities when open capacity falls below target. | [Supply Manager](/agents/operations/supply-manager) | [Human.recruit](/business/nouns/human/recruit) | None |
| [Recruit supply](/workflows/processes/supply/recruit-supply) | 3. Verify each Credential at its source. | [Supply Manager](/agents/operations/supply-manager) | [Credential.verify](/business/nouns/credential/verify) | None |
| [Recruit supply](/workflows/processes/supply/recruit-supply) | 4. Calibrate each recruit on graded sample work. | [Supply Manager](/agents/operations/supply-manager) | [Task.assign](/business/nouns/task/assign) | None |
| [Recruit supply](/workflows/processes/supply/recruit-supply) | 5. Pay each Supplier when the Customer confirms their work. | [Supply Manager](/agents/operations/supply-manager) | [Human.remit](/business/nouns/human/remit) | Asks first; waits 1 business hour |
| [Credential check](/workflows/processes/supply/credential-check) | 1. Verify every active Credential at its source. | [Supply Manager](/agents/operations/supply-manager) | [Credential.verify](/business/nouns/credential/verify) | None |
| [Credential check](/workflows/processes/supply/credential-check) | 2. Suspend any Supplier whose Credential lapsed. | [Supply Manager](/agents/operations/supply-manager) | [Human.suspend](/business/nouns/human/suspend) | None |
| [Credential check](/workflows/processes/supply/credential-check) | 3. Reassign the suspended Supplier’s open Tasks. | [Delivery Manager](/agents/operations/delivery-manager) | [Task.assign](/business/nouns/task/assign) | None |

## Events
| Direction | When | What happens |
| --- | --- | --- |
| In | Every week | Starts [Recruit supply](/workflows/processes/supply/recruit-supply) |
| In | Every day | Starts [Credential check](/workflows/processes/supply/credential-check) |
| Out | `Forecast.created` | Raised by step 1 of [Recruit supply](/workflows/processes/supply/recruit-supply) |
| Out | [`Human.recruited`](/business/events/Human.recruited) | Raised by step 2 of [Recruit supply](/workflows/processes/supply/recruit-supply) |
| Out | [`Credential.verified`](/business/events/Credential.verified) | Raised by step 3 of [Recruit supply](/workflows/processes/supply/recruit-supply) |
| Out | [`Task.assigned`](/business/events/Task.assigned) | Raised by step 4 of [Recruit supply](/workflows/processes/supply/recruit-supply) |
| Out | [`Human.remitted`](/business/events/Human.remitted) | Raised by step 5 of [Recruit supply](/workflows/processes/supply/recruit-supply) |
| Out | [`Human.suspended`](/business/events/Human.suspended) | Raised by step 2 of [Credential check](/workflows/processes/supply/credential-check) |

## Plays
No Play names this Process.

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

## Settings
| Setting | Type | Default | Say | Set with |
| --- | --- | --- | --- | --- |
| `supply.capacityTarget` | `number` | `1.2` | Keep 20% more supplier capacity than booked work | [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
| Step | Value |
| --- | --- |
| Hypothesis | Booking Suppliers a week ahead of forecast demand fills more Orders on time than booking on request. |
| Measure | [Fill rate](/agents/operations#fill-rate) over 30d, at least 50 observations |
| Learn | The learn step reads the Readout, records Evidence and a Decision, and drafts the next Variant. |

## Code

**Ask**

```text
Turn on supply
```

**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 [Marketplace](/products/templates/marketplace), [Licensed-human marketplace](/products/templates/licensed-marketplace), [Services-as-Software](/products/templates/services-as-software), [E2E managed service](/products/templates/managed-service). [Process.pause](/business/nouns/process/pause) stops new Actions; Actions in progress finish.

**Ask**

```text
Keep 20% more supplier capacity than booked work
```

**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":1.2,"key":"supply.capacityTarget"}'
```

**SDK**

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

await $.Setting.update({ id: 'setting_1', value: 1.2, key: 'supply.capacityTarget' })
```

**CLI**

```bash
npx startup-builder do Setting.update --json '{"id":"setting_1","value":1.2,"key":"supply.capacityTarget"}'
```

**MCP**

```json
{
  "name": "do",
  "arguments": {
    "code": "return await $.Setting.update({ id: 'setting_1', value: 1.2, key: 'supply.capacityTarget' })"
  }
}
```

## Example
Appraisal bookings for the next 14 days exceed capacity by 30%. [Recruit supply](/workflows/processes/supply/recruit-supply) adds four licensed appraisers, each graded on two sample reports. When one license lapses, [Credential check](/workflows/processes/supply/credential-check) suspends that Supplier and reassigns its three open [Tasks](/business/nouns/task).