---
slug: "Ballot"
name: "Ballot"
type: "Data Structures"
layer: "Infrastructure"
ref: "Ballot#e0e4"
sema_id: "sema:Ballot#mh:SHA-256:e0e4a34b48dba4669e09b04c4b8c3202f95c878fc26c29480a298012753b1f3c"
tags: ["Infrastructure","Data Structures"]
updated: 2026-11-11
mindscape: "bootstrap"
index_url: https://mindscape.pages.dev/bootstrap/index.json
url: https://mindscape.pages.dev/bootstrap/Ballot/
related: ["MonotonicCounter","Select","Elect","Quorum","Vote"]
---

# Ballot

Immutable record of one agent's cast choice

Layer: Infrastructure · Category: Data Structures

## Mechanism

The immutable record of one agent's cast choice in a decision. Carries which proposal, which voter, and which option was chosen. The question, the options and the decision rule belong to the `Vote` that called for it; a Ballot is the response, and `Quorum` counts these. Immutable once cast — a revision is a new Ballot carrying a fresh [MonotonicCounter](https://mindscape.pages.dev/bootstrap/MonotonicCounter.md) sequence, so revocation and amendment surface as distinct later decisions rather than retroactive edits.

## Invariants

- Immutable once cast: a revision is a new Ballot, not an edit.
- Names one voter and one choice drawn from the options of the decision it answers.
- Choice is expressed as a [Select](https://mindscape.pages.dev/bootstrap/Select.md) over those options, not free text.

## Failure modes

- Spoiled ballot: ambiguous or invalid [Select](https://mindscape.pages.dev/bootstrap/Select.md) format.
- Double voting: a single agent submits multiple ballots for one proposal (Sybil risk).

## Data schema

```json
{
  "type": "object",
  "required": [
    "ballot_id",
    "proposal_id",
    "voter_id",
    "choice"
  ],
  "properties": {
    "ballot_id": {
      "type": "string"
    },
    "proposal_id": {
      "type": "string"
    },
    "voter_id": {
      "type": "string"
    },
    "choice": {
      "type": "string",
      "description": "The selected option"
    },
    "weight": {
      "type": "number",
      "default": 1
    },
    "signature": {
      "type": "string",
      "description": "Cryptographic proof of vote"
    },
    "timestamp": {
      "type": "string",
      "format": "date-time"
    }
  }
}
```

## Builds on

- [MonotonicCounter](https://mindscape.pages.dev/bootstrap/MonotonicCounter.md) (Society; References)
- [Select](https://mindscape.pages.dev/bootstrap/Select.md) (Infrastructure; References)

## Used by

- [Elect](https://mindscape.pages.dev/bootstrap/Elect.md) (Society; Accepts)
- [Quorum](https://mindscape.pages.dev/bootstrap/Quorum.md) (Infrastructure; Accepts)
- [Vote](https://mindscape.pages.dev/bootstrap/Vote.md) (Society; Accepts)

## Identity

- Sema ID: `sema:Ballot#mh:SHA-256:e0e4a34b48dba4669e09b04c4b8c3202f95c878fc26c29480a298012753b1f3c`
- Ref: `Ballot#e0e4`
- Supersedes:
  - `sema:Ballot#mh:SHA-256:f1d7f5635ea8bc53d0e1718d1ea372bd93b829500ac69602e648e507404f7beb`
  - `sema:Ballot#mh:SHA-256:84c3ea1db9fa8ab818d4fd156a8ef0a43d15b50419ca42236869bd9119f35497`
  - `sema:Ballot#mh:SHA-256:43ebc85e8e87e132698c59536402d1ba715b0dbad9e6c116f97a056c60da4577`

## Links

- [Pattern page](https://mindscape.pages.dev/bootstrap/Ballot/)
- [View in the interactive graph](https://mindscape.pages.dev/bootstrap/#Ballot)
- [JSON](https://mindscape.pages.dev/bootstrap/Ballot.json)
- [Index of all patterns](https://mindscape.pages.dev/bootstrap/index.json)
