Skip to main content

Community operators

Operators can grow from the community without ever silently mutating the canonical registry. Three tiers:

  1. Per-tenant — scoped to one machine; never enters the shared registry; no vote.
  2. Community staging — a proposal with an author, a required cited source, and an attached verification record.
  3. Promoted — merged to canonical, but only via an explicit human step.

The staking vote

Promotion is gated by a vote where ZID holders stake ZEQ envelopes yes/no.

  • Refundable bond. A stake locks the envelope for the window (tally_tokens.locked_for_vote; the transfer endpoint returns 409 envelope_locked_in_vote while locked), then returns it in full at resolution — regardless of outcome. No slashing, no wager.
  • Linear value-weight = sybil-neutral. Vote weight is the staked envelope value. Splitting a stake across many ZIDs gives n·(v/n) = v — the same total weight, so fragmenting identity buys nothing. (Quadratic √-weighting would reward splitting — n·√(v/n) = √n·√v — so it is deliberately not used.) The scarce resource is compute-earned ZEQ value, not free identities.
  • Distinct-staker quorum + min-stake. A lone whale can't promote alone; dust can't vote.

Correctness is gated separately by the cited source + verification record — the vote only decides community desirability, never whether the math is right.

The human promotion gate (§9)

POST /api/community-operators/:id/promote requires a human session (requireAuth; machine/LLM keys do not satisfy it) and an explicit { confirm: true }. An LLM may propose and the vote may approve, but a person promotes. The canonical operator-registry.json merge remains a maintainer source commit — machine proposes, human commits.

Endpoints

EndpointPurpose
POST /api/community-operators/proposesubmit (staging or per-tenant)
POST /api/community-operators/:id/open-voteauthor opens the window
POST /api/community-operators/:id/stakestake an envelope yes/no (locks it)
POST /api/community-operators/:id/resolvetally + refund all stakes
POST /api/community-operators/:id/promote§9 human gate → canonical
GET /api/community-operators · GET /:idlist + live tally

Source: shared/api-core/src/lib/communityOperators.ts, routes/communityOperators.ts, app/lib/db/src/schema/community-operators.ts.