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.
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.
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).
Identifier of the source allocation run (e.g. an S-Process hearingId).
Name of the allocation mechanism that produced this decision (e.g. "s-process").
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.
Short label for the decision (e.g. "Round 1", "Q1 2025").
Optional admin commentary published alongside the decision.
Total budget allocated, in whole USD.
Per-proposal allocation amounts.
Dollars kept for future rounds via the outside option, in whole USD.
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.
Timestamp when the publisher finalized the decision (status flipped to ratified).
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.
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.
Timestamp when the admin published this decision.
Record creation timestamp.
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.
AT-URI of the recused org.simocracy.sim.
Display name of the recused sim at run time.
AT-URI of the proposal (org.hypercerts.claim.activity) the sim was recused from.
Display title of that proposal at run time.
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.
#allocationobject
Display title of the proposal.
Optional AT-URI of the proposal record (org.hypercerts.claim.activity).
Allocation amount in whole USD.
Amount the proposer originally asked for, in whole USD. Optional — omitted when the proposal had no itemised budget request.
▸ 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."
}
}
}
}
}