Back to Simocracy

org.simocracy.mechanism

A published governance/funding mechanism — the Simocracy analogue of app.bsky.feed.generator. The record is discovery + attribution; the `service` DID's document declares a `#simocracy_mechanism` service endpoint where the mechanism runs (routing); the service implements the shared mechanism contract (compute). Elicitation may be LLM-driven (the `protocol` rubric), but aggregation MUST be a deterministic, replayable function over the run's public org.simocracy.ballot records — outcomes carry a ballot-set hash so anyone can recompute and verify them. Anyone can publish a mechanism record in their own repo; gatherings opt in by referencing it.

record · key any

A published governance/funding mechanism — the Simocracy analogue of app.bsky.feed.generator. The record is discovery + attribution; the `service` DID's document declares a `#simocracy_mechanism` service endpoint where the mechanism runs (routing); the service implements the shared mechanism contract (compute). Elicitation may be LLM-driven (the `protocol` rubric), but aggregation MUST be a deterministic, replayable function over the run's public org.simocracy.ballot records — outcomes carry a ballot-set hash so anyone can recompute and verify them. Anyone can publish a mechanism record in their own repo; gatherings opt in by referencing it.

name*

Mechanism identifier — lowercase, kebab-case (e.g. "s-process", "quadratic-voting"). Matches the id the service advertises in GET /mechanisms and the workflow route it serves.

string · max 64
version

Aggregator version. Decisions pin "<name>@<version>" so outcomes stay recomputable after the mechanism evolves.

integer · ≥ 1
displayName*

Human-readable name shown in mechanism pickers.

string · max 200
description*

What the mechanism does, how ballots are elicited, and how the deterministic aggregation works — enough for a gathering admin to make an informed choice.

string · max 3000
outcomeKind*

What kind of decision the mechanism produces. "allocation" mechanisms split a treasury; others publish non-monetary outcomes.

string · max 64
values: allocation · verdict · ranking · statement
ballotKind*

Which org.simocracy.ballot payload variant the mechanism elicits and aggregates.

string · max 64
values: mvf · credits · score · approval · ranking · argument
protocol

SKILL.md-style markdown rubric the elicitation LLM follows (prompts, round structure, scoring guidance). Public so the squishy phase is inspectable. The aggregation math is NOT defined here — it lives in the service and must be deterministic.

string · max 50000
service

DID of the mechanism service. Its DID document must declare a `#simocracy_mechanism` service entry whose endpoint serves GET /mechanisms (describe) and POST /workflows/<name> (compute) per the shared contract. Omitted for mechanisms built into the appview itself.

did
sourceRepo

Public source repository implementing this mechanism (e.g. a fork of github.com/GainForest/simocracy-mechanisms). Recommended: verifiability rests on others being able to re-run the aggregator.

uri
createdAt*
datetime
updatedAt
datetime
Raw lexicon JSON
{
  "lexicon": 1,
  "id": "org.simocracy.mechanism",
  "defs": {
    "main": {
      "type": "record",
      "description": "A published governance/funding mechanism — the Simocracy analogue of app.bsky.feed.generator. The record is discovery + attribution; the `service` DID's document declares a `#simocracy_mechanism` service endpoint where the mechanism runs (routing); the service implements the shared mechanism contract (compute). Elicitation may be LLM-driven (the `protocol` rubric), but aggregation MUST be a deterministic, replayable function over the run's public org.simocracy.ballot records — outcomes carry a ballot-set hash so anyone can recompute and verify them. Anyone can publish a mechanism record in their own repo; gatherings opt in by referencing it.",
      "key": "any",
      "record": {
        "type": "object",
        "required": [
          "name",
          "displayName",
          "description",
          "outcomeKind",
          "ballotKind",
          "createdAt"
        ],
        "properties": {
          "name": {
            "type": "string",
            "maxLength": 640,
            "maxGraphemes": 64,
            "description": "Mechanism identifier — lowercase, kebab-case (e.g. \"s-process\", \"quadratic-voting\"). Matches the id the service advertises in GET /mechanisms and the workflow route it serves."
          },
          "version": {
            "type": "integer",
            "minimum": 1,
            "description": "Aggregator version. Decisions pin \"<name>@<version>\" so outcomes stay recomputable after the mechanism evolves."
          },
          "displayName": {
            "type": "string",
            "maxLength": 2000,
            "maxGraphemes": 200,
            "description": "Human-readable name shown in mechanism pickers."
          },
          "description": {
            "type": "string",
            "maxLength": 30000,
            "maxGraphemes": 3000,
            "description": "What the mechanism does, how ballots are elicited, and how the deterministic aggregation works — enough for a gathering admin to make an informed choice."
          },
          "outcomeKind": {
            "type": "string",
            "maxLength": 64,
            "knownValues": [
              "allocation",
              "verdict",
              "ranking",
              "statement"
            ],
            "description": "What kind of decision the mechanism produces. \"allocation\" mechanisms split a treasury; others publish non-monetary outcomes."
          },
          "ballotKind": {
            "type": "string",
            "maxLength": 64,
            "knownValues": [
              "mvf",
              "credits",
              "score",
              "approval",
              "ranking",
              "argument"
            ],
            "description": "Which org.simocracy.ballot payload variant the mechanism elicits and aggregates."
          },
          "protocol": {
            "type": "string",
            "maxLength": 500000,
            "maxGraphemes": 50000,
            "description": "SKILL.md-style markdown rubric the elicitation LLM follows (prompts, round structure, scoring guidance). Public so the squishy phase is inspectable. The aggregation math is NOT defined here — it lives in the service and must be deterministic."
          },
          "service": {
            "type": "string",
            "format": "did",
            "description": "DID of the mechanism service. Its DID document must declare a `#simocracy_mechanism` service entry whose endpoint serves GET /mechanisms (describe) and POST /workflows/<name> (compute) per the shared contract. Omitted for mechanisms built into the appview itself."
          },
          "sourceRepo": {
            "type": "string",
            "format": "uri",
            "description": "Public source repository implementing this mechanism (e.g. a fork of github.com/GainForest/simocracy-mechanisms). Recommended: verifiability rests on others being able to re-run the aggregator."
          },
          "createdAt": {
            "type": "string",
            "format": "datetime"
          },
          "updatedAt": {
            "type": "string",
            "format": "datetime"
          }
        }
      }
    }
  }
}
org.simocracy.mechanism