---
title: "Two sovereigns"
url: https://services.dev/docs/people/sovereignty
captured: [legal-boundary.txt, legal-decline.txt, service-policy.txt]
---
# Two sovereigns

URL: https://services.dev/docs/people/sovereignty

> The member's no and the client's yes. A member's decline can't be overridden, and a client's decision on their own merits can't be undone. The gate holds both, against the brand, a reseller, the buyer and the AI.

Two people in a job hold something no one else can take from them. The member's judgment on their own act is theirs: they may say no. The client's decisions on their own affairs are theirs: only they say yes. A Service doesn't ask its brand to keep to this. The gate holds it, the same way for AI, your code, the buyer, a reseller and you.

## The member's no

A member may decline any Task on its merits, with a memo only the client reads; a conflict is a step aside instead ([decline or step aside?](https://services.dev/docs/people/acts.md#decline-or-step-aside)). The decline is paid, never scored, and final. From that moment the gate's direction check refuses every other way forward. The owner can't approve past it:

```txt
→ POST /owner/matters/job_7Hq2/approve   # the owner console
```

```txt title="magic values: none"
← 409 needs_direction: A signer declined, and only the client's direction moves the matter on.
```

The buyer can't cancel it, and the owner can't hand the Task to someone else. Only the client's direction moves the job, to another member they name or to an end, and they can't name the member who declined. [Declines and direction](https://services.dev/docs/people/direction.md) walks it.

## The client's yes

Merits are the client's alone: the values that decide the outcome for them, such as the least they will settle for. A Service declares one with `binds: 'merits'`, and the gate takes it only from the client. The brand, at its own console, is refused:

```txt
→ POST /owner/jobs/job_7Hq2/policy {"policy":{"match":0.7}}
```

```json title="403 · magic values: none"
{
  "type": "BLOCKED",
  "category": "blocked",
  "code": "merits_not_yours",
  "reason": "match binds the merits, and only the client sets them.",
  "param": "policy.match",
  "next": {
    "do": "get",
    "arguments": {
      "id": "job_7Hq2"
    },
    "tool": "get_job",
    "http": "GET http://localhost:8787/jobs/job_7Hq2?wait=50"
  },
  "doc_url": "http://localhost:8787/docs/errors/merits_not_yours",
  "request_id": "req_yvQQ1S",
  "simulated": true
}
```

A rules row with `client: true` makes an act the client's decision alone. Whether to settle a demand, and for how much, is one:

```bash
npx services.dev check   # each Service's bounds line
```

```txt title="magic values: none"
  bounds  reserved sign to bar admission where the client is · the attorney sells the fee · open send and courier · the client decides settle, alone · refused litigate
```

The step is an ask to the client. No guard, policy, reseller, escalation or fill rung may perform it or block it, and `check` fails [`client_decision_gated`](https://services.dev/docs/reference/check/client_decision_gated.md) on a Service whose step isn't one. Once the client decides, no mechanics change undoes it.

## Why both are held by the gate

AI delivers by default, and people come in where you want them or the work needs them. When they do, their part has to be real. A credentialed person who can be overridden isn't performing the act, and a client whose decision can be undone isn't deciding. So neither is a setting: both are checks the gate runs before it commits anything, and both refuse with the same answer shape as every other refusal. [Propose, then the gate commits](https://services.dev/docs/service/gate.md) has the checks in order.

---

- Up: [human: the line](https://services.dev/docs/people.md)
- Previous: [Declines and direction](https://services.dev/docs/people/direction.md)
- Next: [Of record](https://services.dev/docs/people/of-record.md)
