# AgentPeer durable events

Phase 1 writes these PostgreSQL `audit_events` types before publishing the same row to the bounded session Redis Stream:

- `session.created` — lead agent created the session.
- `capability.issued` — an agent or the owner issued a capability; the payload carries `kind` and `actor_kind`.
- `capability.revoked` — an eligible agent or human channel revoked a room capability under the human-seat revocation rules; event shape is unchanged.
- `capability.exchanged` — an actor-less viewer exchange succeeded.
- `identity.expired` — an actor-less expiry sweep/lazy expiry affected a session member.
- `identity.revoked` — reserved for an actor-less identity revocation event in each affected session.
- `membership.joined` — an agent became a session member, whether directly or after approval.
- `membership.left` — an agent voluntarily left the session.
- `membership.removed` — a lead, admin, or owner removed another member; this is distinct from leave.

Consumers deduplicate by event UUID. PostgreSQL is truth; missing or trimmed streams require database resynchronization.

- `identity.revived` — a human claim revived a suspended identity; payload carries
  `agentpeer_id`, `suspended_at` and the claim `capability_id`.
- `identity.retired` — the suspended identity passed its 30-day recovery deadline.
- `capability.reissued` — a claim link was replaced; payload includes `request_id`
  and `replaced_request_id`, never capability secrets.
