{
"id": "pub.chive.governance.getProposal",
"defs": {
"main": {
"type": "query",
"errors": [
{
"name": "NotFound"
}
],
"output": {
"schema": {
"ref": "#proposalView",
"type": "ref"
},
"encoding": "application/json"
},
"parameters": {
"type": "params",
"required": [
"proposalId"
],
"properties": {
"proposalId": {
"type": "string",
"description": "Proposal identifier"
}
}
},
"description": "Get a single governance proposal by ID with full enrichment"
},
"externalId": {
"type": "object",
"required": [
"system",
"identifier"
],
"properties": {
"uri": {
"type": "string",
"format": "uri",
"description": "URI in external system"
},
"system": {
"type": "string",
"description": "External system name"
},
"matchType": {
"type": "string",
"description": "Match type",
"knownValues": [
"exact",
"close",
"broader",
"narrower",
"related"
]
},
"identifier": {
"type": "string",
"description": "Identifier in external system"
}
}
},
"voteCounts": {
"type": "object",
"required": [
"approve",
"reject",
"abstain"
],
"properties": {
"reject": {
"type": "integer",
"minimum": 0,
"description": "Number of reject votes"
},
"abstain": {
"type": "integer",
"minimum": 0,
"description": "Number of abstain votes"
},
"approve": {
"type": "integer",
"minimum": 0,
"description": "Number of approve votes"
}
}
},
"proposalView": {
"type": "object",
"required": [
"id",
"uri",
"cid",
"type",
"changes",
"status",
"proposedBy",
"votes",
"consensus",
"createdAt"
],
"properties": {
"id": {
"type": "string",
"description": "Proposal identifier"
},
"cid": {
"type": "string",
"description": "Content identifier"
},
"uri": {
"type": "string",
"format": "at-uri",
"description": "Proposal AT-URI"
},
"type": {
"type": "string",
"description": "Proposal type",
"knownValues": [
"create",
"update",
"merge",
"deprecate"
]
},
"label": {
"type": "string",
"description": "Node label (from target node or proposed changes)"
},
"votes": {
"ref": "#voteCounts",
"type": "ref"
},
"status": {
"type": "string",
"description": "Current proposal status",
"knownValues": [
"pending",
"approved",
"rejected",
"expired"
]
},
"changes": {
"ref": "#proposalChanges",
"type": "ref",
"description": "Proposed changes"
},
"nodeUri": {
"type": "string",
"format": "at-uri",
"description": "Target node URI (for update/merge/deprecate)"
},
"consensus": {
"ref": "#consensusProgress",
"type": "ref"
},
"createdAt": {
"type": "string",
"format": "datetime",
"description": "Creation timestamp"
},
"expiresAt": {
"type": "string",
"format": "datetime",
"description": "Expiration timestamp"
},
"rationale": {
"type": "string",
"description": "Rationale for the proposal"
},
"updatedAt": {
"type": "string",
"format": "datetime",
"description": "Last update timestamp"
},
"proposedBy": {
"type": "string",
"format": "did",
"description": "DID of the proposer"
},
"proposerName": {
"type": "string",
"description": "Display name of the proposer"
}
},
"description": "View of a governance proposal"
},
"proposalChanges": {
"type": "object",
"properties": {
"kind": {
"type": "string",
"description": "Node kind",
"knownValues": [
"type",
"object"
]
},
"label": {
"type": "string",
"description": "Node label"
},
"subkind": {
"type": "string",
"description": "Node subkind"
},
"metadata": {
"type": "unknown",
"description": "Additional metadata"
},
"targetUri": {
"type": "string",
"format": "at-uri",
"description": "Target URI for update/deprecate"
},
"description": {
"type": "string",
"description": "Node description"
},
"externalIds": {
"type": "array",
"items": {
"ref": "#externalId",
"type": "ref"
},
"description": "External identifiers"
},
"mergeIntoUri": {
"type": "string",
"format": "at-uri",
"description": "Merge target URI"
},
"alternateLabels": {
"type": "array",
"items": {
"type": "string"
},
"description": "Alternate labels"
}
},
"description": "Proposed changes to a node"
},
"consensusProgress": {
"type": "object",
"required": [
"approvalPercentage",
"threshold",
"voterCount",
"minimumVotes",
"consensusReached",
"recommendedStatus"
],
"properties": {
"threshold": {
"type": "integer",
"maximum": 100,
"minimum": 0,
"description": "Required threshold for approval (0-100)"
},
"voterCount": {
"type": "integer",
"minimum": 0,
"description": "Number of voters"
},
"minimumVotes": {
"type": "integer",
"minimum": 0,
"description": "Minimum votes required"
},
"consensusReached": {
"type": "boolean",
"description": "Whether consensus has been reached"
},
"recommendedStatus": {
"type": "string",
"description": "Recommended status based on votes",
"knownValues": [
"approved",
"rejected",
"pending"
]
},
"approvalPercentage": {
"type": "integer",
"maximum": 100,
"minimum": 0,
"description": "Current approval percentage (0-100)"
}
}
}
},
"$type": "com.atproto.lexicon.schema",
"lexicon": 1,
"revision": 1
}