Back to Simocracy

org.simocracy.decision

A published allocation decision for a gathering. Written by the gathering admin to publish the results of an S-Process run (or any allocation mechanism) as the official outcome for a round. Visible to all viewers of the gathering.

record · key tid

A published allocation decision for a gathering. Written by the gathering admin to publish the results of an S-Process run (or any allocation mechanism) as the official outcome for a round. Visible to all viewers of the gathering.

gatheringUri*

Scope identifier this decision belongs to. Usually the AT-URI of an org.simocracy.gathering record (e.g. at://did:plc:.../org.simocracy.gathering/...). For built-in scopes that are not gatherings, a sentinel string is used instead (e.g. "ftc-sf:tower" for the Frontier Tower SF event).

string
runId*

Identifier of the source allocation run (e.g. an S-Process hearingId).

string · max 64
mechanism

Name of the allocation mechanism that produced this decision (e.g. "s-process").

string · max 64
model

Id of the AI model that served the recommender elicitation for this run (e.g. an OpenRouter slug, or a subscription model id when the run initiator's linked Claude/ChatGPT plan served the calls). Copied from the run's ballots at publish time so the outcome stays reproducible: replaying the round on a different model is a different experiment. If ballots in one run were served by multiple models (e.g. a mid-run fallback), the distinct ids are comma-separated. Absent on decisions published before model provenance existed.

string · max 128
title

Short label for the decision (e.g. "Round 1", "Q1 2025").

string · max 200
notes

Optional admin commentary published alongside the decision.

string · max 1000
budget*

Total budget allocated, in whole USD.

integer
allocations*

Per-proposal allocation amounts.

#allocation[] · max 200 · #allocation
outsideOptionKept

Dollars kept for future rounds via the outside option, in whole USD.

integer
status

Ratification status of this decision. provisional=published but awaiting principal review (sim owners may confirm/object via org.simocracy.ratification records); ratified=finalized by the publisher after the review window. Absent on decisions published before ratification existed, which should be read as ratified rather than as pending.

string
values: provisional · ratified
ratifiedAt

Timestamp when the publisher finalized the decision (status flipped to ratified).

datetime
recusalPolicy

Conflict-of-interest rule in force for the run that produced this decision, copied from the gathering's recusalPolicy at run time so the outcome stays auditable even if the gathering record is later edited. Absent on decisions published before recusal existed, which should be read as 'none' rather than as the current default.

string
values: owner · sim · disclose · none
recusals

Every (recommender sim, proposal) pair that was masked by the recusal policy during this run. Published so a reader can verify which edges were removed and reconstruct the counterfactual. An empty array means the policy was applied and produced no conflicts; an absent array means no policy was applied.

#recusal[] · max 500 · #recusal
decidedAt*

Timestamp when the admin published this decision.

datetime
createdAt*

Record creation timestamp.

datetime

Definitions

#recusalobject

One masked (recommender, proposal) edge. The recommender was excluded from directing budget to this proposal, but retained full influence over the rest of the slate.

simUri*

AT-URI of the recused org.simocracy.sim.

string
simName

Display name of the recused sim at run time.

string · max 200
proposalUri

AT-URI of the proposal (org.hypercerts.claim.activity) the sim was recused from.

string
proposalTitle

Display title of that proposal at run time.

string · max 500
reason*

Why the edge was masked. owner=the sim's owner DID matches the proposal's submitting repo DID. sim=the sim is credited as an author of the proposal via an org.simocracy.history sidecar. manual=the run initiator excluded the pair by hand.

string
values: owner · sim · manual

#allocationobject

proposalTitle*

Display title of the proposal.

string · max 500
proposalUri

Optional AT-URI of the proposal record (org.hypercerts.claim.activity).

string
amount*

Allocation amount in whole USD.

integer
requested

Amount the proposer originally asked for, in whole USD. Optional — omitted when the proposal had no itemised budget request.

integer
Raw lexicon JSON
{
  "lexicon": 1,
  "id": "org.simocracy.decision",
  "defs": {
    "main": {
      "type": "record",
      "description": "A published allocation decision for a gathering. Written by the gathering admin to publish the results of an S-Process run (or any allocation mechanism) as the official outcome for a round. Visible to all viewers of the gathering.",
      "key": "tid",
      "record": {
        "type": "object",
        "required": [
          "gatheringUri",
          "runId",
          "budget",
          "allocations",
          "decidedAt",
          "createdAt"
        ],
        "properties": {
          "gatheringUri": {
            "type": "string",
            "description": "Scope identifier this decision belongs to. Usually the AT-URI of an org.simocracy.gathering record (e.g. at://did:plc:.../org.simocracy.gathering/...). For built-in scopes that are not gatherings, a sentinel string is used instead (e.g. \"ftc-sf:tower\" for the Frontier Tower SF event)."
          },
          "runId": {
            "type": "string",
            "maxLength": 64,
            "description": "Identifier of the source allocation run (e.g. an S-Process hearingId)."
          },
          "mechanism": {
            "type": "string",
            "maxLength": 64,
            "description": "Name of the allocation mechanism that produced this decision (e.g. \"s-process\")."
          },
          "model": {
            "type": "string",
            "maxLength": 128,
            "description": "Id of the AI model that served the recommender elicitation for this run (e.g. an OpenRouter slug, or a subscription model id when the run initiator's linked Claude/ChatGPT plan served the calls). Copied from the run's ballots at publish time so the outcome stays reproducible: replaying the round on a different model is a different experiment. If ballots in one run were served by multiple models (e.g. a mid-run fallback), the distinct ids are comma-separated. Absent on decisions published before model provenance existed."
          },
          "title": {
            "type": "string",
            "maxLength": 200,
            "description": "Short label for the decision (e.g. \"Round 1\", \"Q1 2025\")."
          },
          "notes": {
            "type": "string",
            "maxLength": 1000,
            "description": "Optional admin commentary published alongside the decision."
          },
          "budget": {
            "type": "integer",
            "description": "Total budget allocated, in whole USD."
          },
          "allocations": {
            "type": "array",
            "maxLength": 200,
            "items": {
              "type": "ref",
              "ref": "#allocation"
            },
            "description": "Per-proposal allocation amounts."
          },
          "outsideOptionKept": {
            "type": "integer",
            "description": "Dollars kept for future rounds via the outside option, in whole USD."
          },
          "status": {
            "type": "string",
            "description": "Ratification status of this decision. provisional=published but awaiting principal review (sim owners may confirm/object via org.simocracy.ratification records); ratified=finalized by the publisher after the review window. Absent on decisions published before ratification existed, which should be read as ratified rather than as pending.",
            "knownValues": [
              "provisional",
              "ratified"
            ]
          },
          "ratifiedAt": {
            "type": "string",
            "format": "datetime",
            "description": "Timestamp when the publisher finalized the decision (status flipped to ratified)."
          },
          "recusalPolicy": {
            "type": "string",
            "description": "Conflict-of-interest rule in force for the run that produced this decision, copied from the gathering's recusalPolicy at run time so the outcome stays auditable even if the gathering record is later edited. Absent on decisions published before recusal existed, which should be read as 'none' rather than as the current default.",
            "knownValues": [
              "owner",
              "sim",
              "disclose",
              "none"
            ]
          },
          "recusals": {
            "type": "array",
            "maxLength": 500,
            "items": {
              "type": "ref",
              "ref": "#recusal"
            },
            "description": "Every (recommender sim, proposal) pair that was masked by the recusal policy during this run. Published so a reader can verify which edges were removed and reconstruct the counterfactual. An empty array means the policy was applied and produced no conflicts; an absent array means no policy was applied."
          },
          "decidedAt": {
            "type": "string",
            "format": "datetime",
            "description": "Timestamp when the admin published this decision."
          },
          "createdAt": {
            "type": "string",
            "format": "datetime",
            "description": "Record creation timestamp."
          }
        }
      }
    },
    "recusal": {
      "type": "object",
      "description": "One masked (recommender, proposal) edge. The recommender was excluded from directing budget to this proposal, but retained full influence over the rest of the slate.",
      "required": [
        "simUri",
        "reason"
      ],
      "properties": {
        "simUri": {
          "type": "string",
          "description": "AT-URI of the recused org.simocracy.sim."
        },
        "simName": {
          "type": "string",
          "maxLength": 200,
          "description": "Display name of the recused sim at run time."
        },
        "proposalUri": {
          "type": "string",
          "description": "AT-URI of the proposal (org.hypercerts.claim.activity) the sim was recused from."
        },
        "proposalTitle": {
          "type": "string",
          "maxLength": 500,
          "description": "Display title of that proposal at run time."
        },
        "reason": {
          "type": "string",
          "description": "Why the edge was masked. owner=the sim's owner DID matches the proposal's submitting repo DID. sim=the sim is credited as an author of the proposal via an org.simocracy.history sidecar. manual=the run initiator excluded the pair by hand.",
          "knownValues": [
            "owner",
            "sim",
            "manual"
          ]
        }
      }
    },
    "allocation": {
      "type": "object",
      "required": [
        "proposalTitle",
        "amount"
      ],
      "properties": {
        "proposalTitle": {
          "type": "string",
          "maxLength": 500,
          "description": "Display title of the proposal."
        },
        "proposalUri": {
          "type": "string",
          "description": "Optional AT-URI of the proposal record (org.hypercerts.claim.activity)."
        },
        "amount": {
          "type": "integer",
          "description": "Allocation amount in whole USD."
        },
        "requested": {
          "type": "integer",
          "description": "Amount the proposer originally asked for, in whole USD. Optional — omitted when the proposal had no itemised budget request."
        }
      }
    }
  }
}
org.simocracy.decision