{
  "handle": "Quorum",
  "mechanism": "A threshold-checking primitive. Validates if a count of {{ballot}} signals exceeds a required number (K). It does not negotiate; it simply counts. Used as a gating function for higher-level protocols.",
  "gloss": "Minimum participation threshold",
  "failure_modes": [
    "Veto threshold tuning is hard - too low enables cheap blocking, too high makes it useless.",
    "Strategic abstention to avoid commitment.",
    "Deadline pressure enables rushing bad proposals through."
  ],
  "invariants": [
    "K cannot decrease mid-vote."
  ],
  "preconditions": [
    "N agents in voting set.",
    "K threshold defined where K ≤ N.",
    "Proposal formulated."
  ],
  "postconditions": [
    "Result selected (approve/reject/timeout)",
    "Voting tally recorded"
  ],
  "parameters": [
    {
      "name": "k",
      "type": "Integer",
      "range": "[1, total_members]",
      "description": "Required count of affirmative {{ballot}}s. A count, matching the invariant and preconditions. Sub-majority values are legitimate — an any-one-approves gate is a quorum of 1."
    },
    {
      "name": "total_members",
      "type": "Integer",
      "range": "[3, 100]",
      "description": "Eligible participants (N)"
    }
  ],
  "_meta": {
    "tier": 1,
    "related": [
      "sema:LazyConsensus#mh:SHA-256:7bd765a60e8b663fb8f3bd3abb5ada96b0be7ceb21b21ea656724138456447b1"
    ],
    "ring": 0,
    "supersedes": [
      "sema:Quorum#mh:SHA-256:29b46f238f70cc3f2126e8bd35ff531aa7ae65e0d3ab1d7d7cc794fa7155127d",
      "sema:Quorum#mh:SHA-256:d634d5cf0f165f708a5f39e54d8ad42716c11e21189459585468a294d2ebc7bc",
      "sema:Quorum#mh:SHA-256:c6a5b21dbe9b2c1fa46e5e67505041c92048a0a687f5703efa45486b51c56957"
    ],
    "path": [
      "Infrastructure",
      "Primitives"
    ]
  },
  "sema_id": "sema:Quorum#mh:SHA-256:2a33f05d34bfb2667645680393ca37865d4a7d05d2056eddf4c9df0c13b21744",
  "sema_ref": "Quorum#2a33",
  "sema_stub": "2a33",
  "dependencies": {
    "accepts": {
      "ballot": "sema:Ballot#mh:SHA-256:e0e4a34b48dba4669e09b04c4b8c3202f95c878fc26c29480a298012753b1f3c"
    }
  },
  "sema_layer": "Infrastructure",
  "sema_category": "Primitives",
  "used_by": {
    "references": {
      "AnchorDrop": "sema:AnchorDrop#mh:SHA-256:63a776fe9a90b5b17802569fcbe5e01c59773b0176ee42641c0af5b3b6a6c26c",
      "ConsensusFinder": "sema:ConsensusFinder#mh:SHA-256:cbb7008c04a31f627c94eaeb135e9a14f7e57085fe84ae9941e49d3204ff5190",
      "Disband": "sema:Disband#mh:SHA-256:f11c01b825e33615ddb25261966af65da93ffc6a8fb72456692804040130e32a",
      "DissentSeek": "sema:DissentSeek#mh:SHA-256:cbe1c2ffdc64d0627f0fc9115ee06d1876f6baa38b80b03e712951131feedefb",
      "LatticeCommit": "sema:LatticeCommit#mh:SHA-256:488aef6c5b623b424066249025e3d9fd441e6d232467ad8d5862337f6f092ba7",
      "LazyConsensus": "sema:LazyConsensus#mh:SHA-256:76f5f9d3c8e5301625d4732cc79aaacf4174d411ff1fd81c0fe67f8f78382789",
      "NormativeJudge": "sema:NormativeJudge#mh:SHA-256:684f219181e9180ffea6b4ff2947dbdb9d37a12ae690c02c088f58881f9e0726",
      "NormCheck": "sema:NormCheck#mh:SHA-256:39ba24a3792c16fb8689bfd5bd0093d7f43b13e276fccc1d2b3e97fa20682603",
      "QuorumPulse": "sema:QuorumPulse#mh:SHA-256:15db29bbca17a27d707e309f281c97cf66f9840bb907cbe9f53f90a40236b34e",
      "RegimeSense": "sema:RegimeSense#mh:SHA-256:50396d316674bf65b204938ee8cecc48cf294223cdb90c9789d6a72bb542cb07"
    },
    "composes_with": {
      "Consensus": "sema:Consensus#mh:SHA-256:b9a51a8b58edf41b9990f962ee403dbc03c6dd380d6bf178cf5403666ec77d32",
      "Heartbeat": "sema:Heartbeat#mh:SHA-256:c5dfefe91d5460716f19e001290b47c3853173b17f0b6914793f6f51a41903ef",
      "Vote": "sema:Vote#mh:SHA-256:84935dbc846bcd8fe2da01e9e04401f190769e87d0354e00c0986e43e414f300"
    }
  }
}
