docs(multitenant): add agent identity table to handoff

Introduce distinct user.name per agent so git log attribution is
unambiguous. All three agents share the same Codeberg key but set
different user.name values in the repo.

---
Build: pass | Tests: pass — 1812 passed (115 files)
This commit is contained in:
Operator & zAI 2026-04-24 19:53:39 +02:00
parent c2d340155a
commit 813817380c

View file

@ -1,5 +1,22 @@
# Multitenant Handoff # Multitenant Handoff
## Agent Identity
| Agent | `user.name` | Platform | Lane |
| ----------------- | ------------------- | -------- | ------------------------------- |
| Operator & zAI | `Operator & zAI` | Linux | Code review, cleanup, push |
| Operator & Codex | `Operator & Codex` | FreeBSD | Tests, build, host provisioning |
| Operator & Claude | `Operator & Claude` | Linux | Code review, edits, push |
All agents share `user.email = hello@clawdie.si`.
Check attribution: `git log --format='%h %an — %s' -20`
Each agent must set `user.name` in the repo before committing:
```
git config user.name "Operator & <agent>"
```
## In flight ## In flight
This branch is worked on by more than one agent in parallel. Before This branch is worked on by more than one agent in parallel. Before
@ -7,7 +24,7 @@ starting a new edit, append a one-line claim here; remove the line in
the same commit that closes the work. Keep entries short and concrete the same commit that closes the work. Keep entries short and concrete
so a peer can tell at a glance whether their planned change overlaps. so a peer can tell at a glance whether their planned change overlaps.
Format: `- <agent> · <files or surface> · <one-line intent> · <YYYY-MM-DDTHH:MMZ>` Format: `- <user.name> · <files or surface> · <one-line intent> · <YYYY-MM-DDTHH:MMZ>`
Working agreement: Working agreement:
@ -88,6 +105,7 @@ Cross-repo:
886 lines now. Working through my own 16-point gap analysis: 886 lines now. Working through my own 16-point gap analysis:
Bugs fixed: Bugs fixed:
- `platform.reserved_host_labels` schema field + dedicated section - `platform.reserved_host_labels` schema field + dedicated section
enumerating `[ai, cms, git, web, www, mail]`. Decision 13's enumerating `[ai, cms, git, web, www, mail]`. Decision 13's
Configurable cell now reads "No — `ai` is reserved" instead of Configurable cell now reads "No — `ai` is reserved" instead of
@ -109,6 +127,7 @@ Bugs fixed:
`host_label`). `host_label`).
Substantial gaps filled: Substantial gaps filled:
- New "How tenants reach the code service" section parallel to CMS: - New "How tenants reach the code service" section parallel to CMS:
operator-only admin in V2, tenants reach via git+SSH/HTTPS. operator-only admin in V2, tenants reach via git+SSH/HTTPS.
- New `code_admin_exposure` schema field with V2: must be - New `code_admin_exposure` schema field with V2: must be
@ -122,6 +141,7 @@ Substantial gaps filled:
`ai.<internal_base>`. `ai.<internal_base>`.
Polish: Polish:
- Stale claim example removed from the In flight format spec. - Stale claim example removed from the In flight format spec.
- New "Naming conventions appendix" with mechanical rules. - New "Naming conventions appendix" with mechanical rules.
- Wildcard DNS/TLS sharp-edge note in the cloud worked example. - Wildcard DNS/TLS sharp-edge note in the cloud worked example.
@ -395,7 +415,7 @@ following cleanup keeps the contract honest and the type tractable.
currently hard-coded (`false` and `[]`). Compute them from real currently hard-coded (`false` and `[]`). Compute them from real
signal — at minimum: signal — at minimum:
`readyForAutomaticApply = blockers.length === 0 `readyForAutomaticApply = blockers.length === 0
&& !preflightChecks.some(c => c.status === 'blocked')`. && !preflightChecks.some(c => c.status === 'blocked')`.
Even when the only contributor today is "live apply path does not Even when the only contributor today is "live apply path does not
exist", deriving the boolean is cheap and prevents the field from exist", deriving the boolean is cheap and prevents the field from
silently lying when a real check is added. silently lying when a real check is added.