Governance PDS
The Governance PDS is a dedicated Personal Data Server that stores all community-approved governance data. This makes Chive's governance ATProto-native and portable.
Overview
did:plc:chive-governance
The Governance PDS stores:
- Authority records
- Facet definitions
- Field taxonomy
- Organizational records
- Approved proposals
- Reconciliation history
Why a Governance PDS?
ATProto-native benefits
| Benefit | Description |
|---|---|
| Portability | Governance data can move to different hosts |
| Verifiability | All records are cryptographically signed |
| Interoperability | Any ATProto AppView can index the data |
| Transparency | Public, auditable record of decisions |
Comparison with traditional approaches
| Approach | Governance PDS | Central database |
|---|---|---|
| Data location | Decentralized PDS | Chive servers only |
| Ownership | Community | Platform |
| Portability | Full export/import | Requires migration |
| Verification | Cryptographic | Trust-based |
| Failover | Any compliant host | Single point of failure |
Record types
Graph nodes
Knowledge graph nodes stored in the Governance PDS:
// Collection: pub.chive.graph.node
interface GraphNodeDocument {
$type: 'pub.chive.graph.node';
id: string;
kind: 'type' | 'object';
subkind: string;
label: string;
alternateLabels: string[];
description: string;
externalIds: ExternalId[];
status: 'proposed' | 'provisional' | 'established' | 'deprecated';
createdAt: string;
updatedAt: string;
}
interface ExternalId {
source: string; // 'wikidata', 'lcsh', 'viaf', 'fast', 'orcid', 'ror'
value: string;
}
Subkind values by kind:
| Kind | Subkinds |
|---|---|
type | endorsement-kind, license, methodology, paper-type |
object | field, facet, institution, author, eprint |
Graph edges
Relationships between nodes are stored as separate edge records:
// Collection: pub.chive.graph.edge
interface GraphEdgeDocument {
$type: 'pub.chive.graph.edge';
sourceUri: string;
targetUri: string;
relationSlug: 'broader' | 'narrower' | 'related' | 'sameAs';
weight: number;
status: 'proposed' | 'established' | 'deprecated';
createdAt: string;
}
Approved proposals
// Collection: pub.chive.governance.approvedProposal
interface ApprovedProposalDocument {
$type: 'pub.chive.governance.approvedProposal';
id: string;
originalProposalUri: string;
type: ProposalType;
title: string;
changes: ProposalChanges;
votingSummary: VotingSummary;
approvedAt: string;
enactedAt: string;
}
Reconciliation records
// Collection: pub.chive.governance.reconciliation
interface ReconciliationDocument {
$type: 'pub.chive.governance.reconciliation';
authorityId: string;
externalSource: string;
externalId: string;
confidence: number;
evidenceType: string;
reconciler: string; // DID of person/automated
timestamp: string;
}
Architecture
Cache strategy
Multi-level caching
| Level | Storage | TTL | Purpose |
|---|---|---|---|
| L1 | Redis | 5 minutes | Hot data, low latency |
| L2 | Governance PDS | Authoritative | Source of truth fallback |
| L3 | PostgreSQL | Until invalidation | Indexed for queries |
Cache invalidation
When governance data changes:
Security
Access control
| Operation | Who can perform |
|---|---|
| Read records | Anyone |
| Create node | Graph editors |
| Update node | Graph editors (via proposal) |
| Create edge | Graph editors |
| Update edge | Graph editors (via proposal) |
| Sign records | Authorized administrators |
Audit trail
All changes include provenance:
{
"record": {},
"sig": "z...",
"provenance": {
"proposal": "at://did:plc:.../pub.chive.graph.proposal/a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"approvedAt": "2025-01-15T10:30:00Z",
"approvedBy": "did:plc:admin..."
}
}
Operations
Backup and recovery
# Export full repository
atproto repo export did:plc:chive-governance --output backup.car
# Verify integrity
atproto repo verify backup.car
# Restore to new PDS (if needed)
atproto repo import backup.car --target new-pds.example.com
Monitoring
Metrics tracked:
- Record count by type
- Write latency
- Firehose lag
- Cache hit rates
- Sync status with AppView
Failover
If the Governance PDS becomes unavailable:
- AppView continues operating from cached data
- Write operations queued
- Failover PDS activated from most recent backup
- DNS updated to point to failover
- Queued writes replayed
Migration path
The Governance PDS is transitioning to become the authoritative source for all governance data. During the transition, both PostgreSQL and the Governance PDS receive writes. The target state is for the Governance PDS to be primary, with PostgreSQL serving only as an indexed cache.
API access
Read from Governance PDS
GET https://pds.chive.pub/xrpc/com.atproto.repo.listRecords?
repo=did:plc:chive-governance&
collection=pub.chive.governance.authorityRecord&
limit=50
Through Chive AppView (recommended)
GET /xrpc/pub.chive.graph.getAuthority?id=authority-123
The AppView provides:
- Faster response (cached)
- Additional computed fields
- Cross-references resolved
- Search capability
Next steps
- Authority control: Managing authority records
- Governance overview: The governance model
- AT Protocol: Understanding PDSes