org.simocracy.ballot

gainforest.earth

{
  "id": "org.simocracy.ballot",
  "defs": {
    "main": {
      "key": "tid",
      "type": "record",
      "record": {
        "type": "object",
        "required": [
          "run",
          "mechanism",
          "gatheringUri",
          "simUri",
          "payload",
          "createdAt"
        ],
        "properties": {
          "run": {
            "type": "string",
            "maxLength": 64,
            "description": "Run identifier this ballot belongs to. Matches the run's org.simocracy.history `hearingId` and the published decision's `runId`."
          },
          "round": {
            "type": "integer",
            "minimum": 0,
            "description": "Deliberation round this ballot was cast in (0-based). Omitted for single-round runs."
          },
          "simUri": {
            "type": "string",
            "description": "AT-URI of the org.simocracy.sim that cast this ballot."
          },
          "payload": {
            "refs": [
              "#mvfBallot",
              "#creditsBallot"
            ],
            "type": "union",
            "description": "Mechanism-specific ballot content."
          },
          "simName": {
            "type": "string",
            "maxLength": 200,
            "description": "Display name of the sim at cast time (denormalised for cheap rendering)."
          },
          "createdAt": {
            "type": "string",
            "format": "datetime"
          },
          "mechanism": {
            "type": "string",
            "maxLength": 64,
            "description": "Versioned mechanism id that elicited this ballot, e.g. \"s-process@1\" or \"quadratic-voting@1\"."
          },
          "gatheringUri": {
            "type": "string",
            "description": "Scope identifier: usually the AT-URI of an org.simocracy.gathering record; a sentinel string for built-in scopes (e.g. \"ftc-sf:tower\")."
          }
        }
      },
      "description": "One sim's elicited ballot in a funding-mechanism run (S-Process, Quadratic Voting, …). Ballots are the public, replayable elicitation layer of a run: anyone can recompute the outcome by feeding a run's ballots through the mechanism's deterministic aggregator. The `payload` union carries the mechanism-specific ballot shape; new mechanisms extend the union without breaking existing readers. Written by the run initiator; the sim that cast the ballot is attributed via `simUri`. Fixed-point convention: fields ending in `Milli` store real numbers ×1000 (lexicons have no float type)."
    },
    "mvfPoint": {
      "type": "object",
      "required": [
        "dollars",
        "marginalValueMilli"
      ],
      "properties": {
        "dollars": {
          "type": "integer",
          "minimum": 0,
          "description": "Funding level in whole USD."
        },
        "marginalValueMilli": {
          "type": "integer",
          "minimum": 0,
          "description": "Value-per-dollar of the next dollar at this funding level, ×1000 (fixed-point: 1500 = 1.5)."
        }
      }
    },
    "mvfBallot": {
      "type": "object",
      "required": [
        "evaluations"
      ],
      "properties": {
        "evaluations": {
          "type": "array",
          "items": {
            "ref": "#mvfEvaluation",
            "type": "ref"
          },
          "maxLength": 100
        },
        "outsideOptionMilli": {
          "type": "integer",
          "minimum": 0,
          "description": "Marginal value of keeping a dollar for future rounds, ×1000 (fixed-point: 500 = 0.5)."
        }
      },
      "description": "S-Process ballot: one marginal-value function per proposal."
    },
    "creditEntry": {
      "type": "object",
      "required": [
        "proposal",
        "credits"
      ],
      "properties": {
        "credits": {
          "type": "integer",
          "maximum": 100,
          "minimum": 0,
          "description": "Voice credits spent on this proposal (integer, whole credits)."
        },
        "proposal": {
          "type": "string",
          "description": "AT-URI of the proposal (org.hypercerts.claim.activity), or a \"title:<title>\" fallback key."
        },
        "proposalTitle": {
          "type": "string",
          "maxLength": 500,
          "description": "Display title at cast time."
        }
      }
    },
    "creditsBallot": {
      "type": "object",
      "required": [
        "credits"
      ],
      "properties": {
        "credits": {
          "type": "array",
          "items": {
            "ref": "#creditEntry",
            "type": "ref"
          },
          "maxLength": 100
        },
        "reasoning": {
          "type": "string",
          "maxLength": 10000,
          "description": "The sim's in-character reasoning for this spread.",
          "maxGraphemes": 5000
        }
      },
      "description": "Quadratic Voting ballot: voice credits spent per proposal. Effective votes are the square root of credits; a sim spends at most 100 credits per run."
    },
    "mvfEvaluation": {
      "type": "object",
      "required": [
        "proposal",
        "mvf"
      ],
      "properties": {
        "mvf": {
          "type": "array",
          "items": {
            "ref": "#mvfPoint",
            "type": "ref"
          },
          "maxLength": 20,
          "description": "Piecewise-linear marginal value function, points sorted ascending by dollars."
        },
        "proposal": {
          "type": "string",
          "description": "AT-URI of the evaluated proposal (org.hypercerts.claim.activity), or a \"title:<title>\" fallback key when the URI could not be resolved."
        },
        "reasoning": {
          "type": "string",
          "maxLength": 10000,
          "description": "The sim's in-character reasoning for this curve.",
          "maxGraphemes": 5000
        },
        "proposalTitle": {
          "type": "string",
          "maxLength": 500,
          "description": "Display title at cast time."
        }
      }
    }
  },
  "$type": "com.atproto.lexicon.schema",
  "lexicon": 1
}

Validate Record

Validate a record against org.simocracy.ballot

Validation Options
Treat any remaining unresolved references as valid

Metadata

DID
did:plc:qoti4acfmc5wg6zzmtix6hse
CID
bafyreigrclq4tezra6efrleixipf7q3gqjhf3pnytkjfl36edni2yzeol4
Indexed At
2026-07-26 20:13 UTC
AT-URI
at://did:plc:qoti4acfmc5wg6zzmtix6hse/com.atproto.lexicon.schema/org.simocracy.ballot

Lexicon Garden

@