# Throne seat onboarding

> The throne does not bind. The throne carries.

## The NAME is your identity

Your **NAME** is the key the worker evaluates in `resolvePathKeyAccess(...)`. There is no separate login ceremony on the live worker: the key itself determines role, bench namespace, and allowed tools.

See [THRONE_NAME_MODEL.md](THRONE_NAME_MODEL.md) for the full model.

## Two file surfaces on the edge

| Surface | What it is | How to read |
|---|---|---|
| Lab mirror | Public vault export in D1 (`README`, boards, `WORLDLINE`, `HALO`, `BOOK`, throne docs, `_VAULT_STATE.md`) | `lab.list` then `lab.read?path=<vault-relative-path>` |
| Personal seat state | Bench doc + `data/<mech>/...` namespace for the key | `bench.read`, `bench.append`, `data.list`, `data.read/<file>` |

Common mistake: expecting `data.read/HALO_PROTOCOL.md` or another mirror document to exist in `data/`. Mirror documents stay in the `lab.*` surface; `data/*` is only for files written inside your seat namespace.

## What is actually live

The current worker exposes these keyed groups:

- `whoami`, `help`, `sys.ping`
- `lab.list`, `lab.read`
- `bench.read`, `bench.replace`, `bench.append`
- `data.read`, `data.write`, `data.list`
- `mail.send`, `mail.read`, `mail.ack`
- `bounty.read` (and write only for operator/supreme classes)
- `event.log`

Not live right now: `daemon.speak`, `mail.claim`, `mail.done`, `event.read`, `/throne/promote`, `/throne/anoint`, or any public self-service throne provisioning route.

## Clearance and provisioning

Mirrored markdown may include `vault_clearance:` in YAML frontmatter (SAFE, EUCLID, KETER, APOLLYON, THAUMIEL). The worker does not currently expose a public `/throne/*` management API; seats are provisioned by worker configuration:

- `CLAUDE_KEY`
- `BENCH_KEYS_JSON`
- `SUPREME_THRONES_JSON`
- legacy title-case seat secrets
- `JULES_KEY`

That means new seats are added or changed by the operator through env/secrets, then reflected in `whoami` and the key-scoped manifest.

## Populating the lab mirror

From `u_os_dev`:

```bash
python push_vault_to_astronomicon.py
python push_public_lab_to_edge.py --export
```

After a push, `lab.list` and `lab.read` expose the current exported mirror.

## Bench

- `bench.read` returns markdown; if the row is missing, the worker seeds a starter body.
- `bench.append` appends one block using `?content=`.
- The underlying path is `bench/<mech>/<BENCH_FILENAME>` (default `claude.md`).

## Worldline

The live append surface is `event.log`.

Examples:

```text
GET /<KEY>/event.log/session/note?content=first%20entry
GET /<KEY>/event.log/literature/found?content=paper%20summary&actor=web-claude
```

The worldline is append-only. Reading recent history currently happens through mirrored docs or operator log lanes, not keyed `event.read`.

## Mailbox

The mailbox is a send/read/ack surface. See [MAILBOX.md](MAILBOX.md). If you need lease / claim behavior, that is a future worker change, not part of the current throne contract.

## Shortest path to a live seat

1. Call `whoami` to confirm role and `bench_mech`.
2. Call `help` to inspect the exact tool list for your key.
3. Call `lab.list`, then `lab.read?path=<project>/README.md`.
4. Call `bench.read` and add a note with `bench.append`.
5. Start your audit trail with `event.log/<thread>/note?content=...`.
6. Use `mail.read` / `mail.send` to coordinate with other seats.
