Files
gastown/docs/federation.md
Steve Yegge a834bc79d4 Document BD_ACTOR format convention (gt-6r18e.9)
Add docs/identity.md with canonical BD_ACTOR format:
- Town level: mayor, deacon
- Rig level: {rig}/witness, {rig}/refinery
- Workers: {rig}/crew/{name}, {rig}/polecats/{name}

Also documents the attribution model:
- GIT_AUTHOR_NAME = BD_ACTOR (agent identity)
- GIT_AUTHOR_EMAIL = overseer email (work owner)
- created_by = BD_ACTOR (beads field)

Updates reference.md with expanded environment variables section
and adds cross-reference from federation.md.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-30 18:02:04 -08:00

220 lines
4.3 KiB
Markdown

# Federation Architecture
> Multi-workspace coordination for Gas Town and Beads
## Overview
Federation enables multiple Gas Town instances to reference each other's work,
coordinate across organizations, and track distributed projects.
## Entity Model
### Three Levels
```
Level 1: Entity - Person or organization (flat namespace)
Level 2: Chain - Workspace/town per entity
Level 3: Work Unit - Issues, tasks, molecules on chains
```
### URI Scheme
Full work unit reference (HOP protocol):
```
hop://entity/chain/rig/issue-id
hop://steve@example.com/main-town/gastown/gt-xyz
```
Cross-repo reference (same platform):
```
beads://platform/org/repo/issue-id
beads://github/acme/backend/ac-123
```
Within a workspace, short forms are preferred:
```
gt-xyz # Local (prefix routes via routes.jsonl)
gastown/gt-xyz # Different rig, same chain
./gt-xyz # Explicit current-rig ref
```
See `~/gt/docs/hop/GRAPH-ARCHITECTURE.md` for full URI specification.
## Relationship Types
### Employment
Track which entities belong to organizations:
```json
{
"type": "employment",
"entity": "alice@example.com",
"organization": "acme.com"
}
```
### Cross-Reference
Reference work in another workspace:
```json
{
"references": [
{
"type": "depends_on",
"target": "hop://other-entity/chain/rig/issue-id"
}
]
}
```
### Delegation
Distribute work across workspaces:
```json
{
"type": "delegation",
"parent": "hop://acme.com/projects/proj-123",
"child": "hop://alice@example.com/town/gastown/gt-xyz",
"terms": { "portion": "backend", "deadline": "2025-02-01" }
}
```
## Agent Provenance
Every agent operation is attributed. See [identity.md](identity.md) for the
complete BD_ACTOR format convention.
### Git Commits
```bash
# Set per agent session
GIT_AUTHOR_NAME="gastown/crew/joe"
GIT_AUTHOR_EMAIL="steve@example.com" # Workspace owner
```
Result: `abc123 Fix bug (gastown/crew/joe <steve@example.com>)`
### Beads Operations
```bash
BD_ACTOR="gastown/crew/joe" # Set in agent environment
bd create --title="Task" # Actor auto-populated
```
### Event Logging
All events include actor:
```json
{
"ts": "2025-01-15T10:30:00Z",
"type": "sling",
"actor": "gastown/crew/joe",
"payload": { "bead": "gt-xyz", "target": "gastown/polecats/Toast" }
}
```
## Discovery
### Workspace Metadata
Each workspace has identity metadata:
```json
// ~/gt/.town.json
{
"owner": "steve@example.com",
"name": "main-town",
"public_name": "steve-gastown"
}
```
### Remote Registration
```bash
gt remote add acme hop://acme.com/engineering
gt remote list
```
### Cross-Workspace Queries
```bash
bd show hop://acme.com/eng/ac-123 # Fetch remote issue
bd list --remote=acme # List remote issues
```
## Aggregation
Query across relationships without hierarchy:
```bash
# All work by org members
bd list --org=acme.com
# All work on a project (including delegated)
bd list --project=proj-123 --include-delegated
# Agent's full history
bd audit --actor=gastown/crew/joe
```
## Implementation Status
- [x] Agent identity in git commits
- [x] BD_ACTOR default in beads create
- [x] Workspace metadata file (.town.json)
- [x] Cross-workspace URI scheme (hop://, beads://, local forms)
- [ ] Remote registration
- [ ] Cross-workspace queries
- [ ] Delegation primitives
## Use Cases
### Multi-Repo Projects
Track work spanning multiple repositories:
```
Project X
├── hop://team/frontend/fe-123
├── hop://team/backend/be-456
└── hop://team/infra/inf-789
```
### Distributed Teams
Team members in different workspaces:
```
Alice's Town → works on → Project X
Bob's Town → works on → Project X
```
Each maintains their own CV/audit trail.
### Contractor Coordination
Prime contractor delegates to subcontractors:
```
Acme/Project
└── delegates to → Vendor/SubProject
└── delegates to → Contractor/Task
```
Completion cascades up. Attribution preserved.
## Design Principles
1. **Flat namespace** - Entities not nested, relationships connect them
2. **Relationships over hierarchy** - Graph structure, not tree
3. **Git-native** - Federation uses git mechanics (remotes, refs)
4. **Incremental** - Works standalone, gains power with federation
5. **Privacy-preserving** - Each entity controls their chain visibility