dev.idiolect.deliberation

A community-scoped question or proposal under collective consideration. Companion records carry the rest of the process: deliberationStatement for participant utterances, deliberationVote for stances on those utterances, and deliberationOutcome for the observer-aggregated tally.

Deliberations are intentionally process-shaped: they represent the unsettled moment. They are distinct from belief (settled doxastic) and recommendation (settled normative). A deliberation that closes can name an outcome record so consumers can read the conclusion without re-folding the votes.

Source: lexicons/dev/idiolect/deliberation.json · Rust: idiolect_records::Deliberation · TS: @idiolect-dev/schema/deliberation · Fixture: idiolect_records::examples::deliberation

Shape

FieldTypeRequiredNotes
owningCommunityat-uriyesThe community whose membership is deliberating.
topicstring (≤200 graphemes)yesHuman-readable topic or question.
descriptionstring (≤1000 graphemes)noExtended framing or context.
authRequiredboolean (default true)noWhether participation requires authenticated membership.
classificationopen enumnoquestion / proposal / grievance / retrospective.
classificationVocabvocabRefnoVocab the classification slug resolves against.
statusopen enumnoopen / closed / tabled / adopted / rejected.
statusVocabvocabRefnoVocab the status slug resolves against.
closedAtdatetimenoWhen the deliberation moved out of an open status.
outcomeat-urinoPointer to a deliberationOutcome record summarising the resolved stance.
createdAtdatetimeyesPublication timestamp.

Field details

owningCommunity

The deliberation is scoped to a single community. Membership and participation rights are resolved through that community's record. A deliberation can be cross-referenced from other communities, but exactly one owns it.

The substrate does not enforce membership. authRequired is a declared policy: when true, only authenticated members' statements and votes count toward the outcome; when false, the deliberation accepts drive-by statements (which observers may weight differently when folding the tally).

classification

SlugWhat it means
questionAn open question without a proposed resolution.
proposalA specific proposal under consideration.
grievanceA complaint or dispute.
retrospectiveA post-hoc review of a prior decision.

The classification is open-enum: a community publishing its own classifications vocabulary (negotiation, process-vote, amendment, ...) extends the slug set. Resolution goes through classificationVocab when set, otherwise the canonical idiolect default.

The classification is optional. A community that does not want to commit to a classification omits the field; the deliberation record is still valid, observers and consumers just have less metadata to fold on.

status lifecycle

SlugWhat it means
openActive. Statements and votes accepted.
closedNo longer accepting input. May or may not have an outcome.
tabledClosed but explicitly deferred for later.
adoptedClosed with a positive resolution.
rejectedClosed with a negative resolution.

Open-enum: a community that wants finer-grained statuses (closed-pending-revision, escalated, ...) extends via statusVocab. The lifecycle is a declaration; the substrate records the value the publisher set.

outcome

A pointer to a dev.idiolect.deliberationOutcome record. Set after closure when an outcome record exists. Consumers reading a closed deliberation can fetch the outcome without re-folding the entire vote stream.

Multiple outcome records per deliberation are allowed (different observers, different cut-offs); the deliberation's outcome field points at the canonical one. Consumers who want a different observer's tally query the orchestrator directly.

closedAt versus createdAt

createdAt is when the deliberation was opened. closedAt is when it moved out of an open status. The difference is the deliberation's duration. Observers fold this for cadence metrics: how long a community typically deliberates before adopting, how often deliberations are tabled rather than adopted.

Example

{
  "$type": "dev.idiolect.deliberation",
  "owningCommunity": "at://did:plc:community/dev.idiolect.community/canonical",
  "topic": "Should we adopt the v2 lens for post translations?",
  "description": "Community discussion on whether to make the v2 lens the default for member-published posts.",
  "authRequired": true,
  "classification": "proposal",
  "status": "open",
  "createdAt": "2026-04-19T00:00:00.000Z"
}

Process flow

flowchart LR
    DEL[deliberation] -->|opens| ST1[statement]
    DEL -->|opens| ST2[statement]
    DEL -->|opens| ST3[statement]
    ST1 -->|voted on by| V1[vote]
    ST2 -->|voted on by| V2[vote]
    ST3 -->|voted on by| V3[vote]
    V1 --> OBS[observer fold]
    V2 --> OBS
    V3 --> OBS
    OBS -->|publishes| OUT[deliberationOutcome]
    DEL -->|closes with| OUT

A deliberation is opened. Participants publish statements referencing the deliberation. Other participants publish votes referencing specific statements. An observer folds the vote stream and publishes a tally. The deliberation closes with an outcome pointer.

Concept references