Skip to main content

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

BenefitDescription
PortabilityGovernance data can move to different hosts
VerifiabilityAll records are cryptographically signed
InteroperabilityAny ATProto AppView can index the data
TransparencyPublic, auditable record of decisions

Comparison with traditional approaches

ApproachGovernance PDSCentral database
Data locationDecentralized PDSChive servers only
OwnershipCommunityPlatform
PortabilityFull export/importRequires migration
VerificationCryptographicTrust-based
FailoverAny compliant hostSingle 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:

KindSubkinds
typeendorsement-kind, license, methodology, paper-type
objectfield, 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

LevelStorageTTLPurpose
L1Redis5 minutesHot data, low latency
L2Governance PDSAuthoritativeSource of truth fallback
L3PostgreSQLUntil invalidationIndexed for queries

Cache invalidation

When governance data changes:

Security

Access control

OperationWho can perform
Read recordsAnyone
Create nodeGraph editors
Update nodeGraph editors (via proposal)
Create edgeGraph editors
Update edgeGraph editors (via proposal)
Sign recordsAuthorized 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:

  1. AppView continues operating from cached data
  2. Write operations queued
  3. Failover PDS activated from most recent backup
  4. DNS updated to point to failover
  5. 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
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