Community operators
Operators can grow from the community without ever silently mutating the canonical registry. Three tiers:
- Per-tenant — scoped to one machine; never enters the shared registry; no vote.
- Community staging — a proposal with an author, a required cited source, and an attached verification record.
- 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 returns409 envelope_locked_in_votewhile 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
| Endpoint | Purpose |
|---|---|
POST /api/community-operators/propose | submit (staging or per-tenant) |
POST /api/community-operators/:id/open-vote | author opens the window |
POST /api/community-operators/:id/stake | stake an envelope yes/no (locks it) |
POST /api/community-operators/:id/resolve | tally + refund all stakes |
POST /api/community-operators/:id/promote | §9 human gate → canonical |
GET /api/community-operators · GET /:id | list + live tally |
Source: shared/api-core/src/lib/communityOperators.ts,
routes/communityOperators.ts, app/lib/db/src/schema/community-operators.ts.