Reference ยท Governance v1

Governance rules

The complete rules the Governance page runs on โ€” eligibility, how votes are counted and kept private, quorum, approval thresholds, anti-abuse, and the hard boundary between a passed vote and anything actually executing.

Governance Module v1 ยท last substantive update 2026-07-20 (v1.1 hardening 2026-07-12) ยท applies to /governance/, /governance/proposal/, /governance/submit/

Contents
Section 1

Purpose

Gives verified $WinLEW holders a structured, server-verified, permanent, public way to weigh in on community, feature, reward, and burn-program decisions โ€” fulfilling the original roadmap's Phase 5 promise ("$WinLEW holders vote on feature proposals," "$WinLEW holders vote on token-burn schedules") without pretending a website vote executes a treasury or burn transaction by itself.

Section 2

Scope

Governance v1 applies to WinLEW community matters only. It explicitly does not govern:

Those are separate products with their own boundaries. A WinLEW governance vote has no authority over them.

Section 3

Eligibility

Checked server-side, every time โ€” never trusted from the browser, never cached indefinitely (60s TTL only, to avoid hammering RPC). The default v1 rule lives in exactly one canonical place, GOVERNANCE_CONFIG:

  1. Authenticated with the shared WinLEW session (the same login as Dashboard/Quiz/Faucet โ€” no second auth flow).
  2. A verified, linked Solana wallet โ€” reusing the exact wallet-link functions the Dashboard already uses, and the same link that unlocks Discord's Verified WinLEW Holders Linked Role. See How to unlock voting for the /mole link โ†’ /verify/ โ†’ select-role walkthrough. No new wallet connector was built for governance.
  3. That wallet holds at least 1 WinLEW. Checked with the same on-chain balance function the Transparency Center and Burn Center already use.
  4. To buy additional weight on top of that free vote, the wallet must hold at least 1,000,000 WinLEW.
    History, because the number moved twice: the bar was 1 WinLEW until 2026-07-17, when it was raised to 1,000,000 at the project owner's request โ€” a near-zero formality was not a meaningful bar. That was right about amplification and wrong about access: it also removed the free vote from every holder under a million tokens, which had been the reason to verify at all. On 2026-08-06 the gate was split so both hold: verifying earns a vote, and 1,000,000 earns the ability to raise it.
  5. One verified wallet = one vote.
A failed RPC balance check returns eligibility unknown, never a false "not eligible" โ€” the page renders "Eligibility temporarily unavailable." A network problem must never look like a rejection.
Section 4

Voting method and weighting

Every eligible verified wallet gets one free vote on every proposal. Beyond that free vote, a wallet may add up to 10 further votes on the same proposal through the Governance Vote Fund โ€” so the most any single wallet can ever carry on one proposal is 11. Results are tallied by that weight.

Why capped, and not unlimited token weighting

This platform has no historical-balance indexer โ€” there is no way to answer "what did every wallet hold at block N" after the fact. Every live-balance feature (Transparency Center, Burn Center, governance) reads the current on-chain balance. Given that constraint, the options were:

  1. Unlimited token-weighted voting on current balance โ€” rejected, and still rejected. It would let one large holder trivially control every decision. A hard cap of 10 extra votes is what keeps the largest possible voice at 11ร— the smallest rather than unbounded.
  2. One free vote per verified wallet, with nothing purchasable โ€” how governance launched, and the safest possible starting point.
  3. One free vote plus capped, priced additional votes โ€” adopted 2026-07-28. It lets someone express strength of feeling and fund the reserves at the same time, without letting a balance alone decide an outcome.
Anyone can take part meaningfully without spending anything. Buying weight is optional, capped, and visible: the participation board shows how many proposals each voter took part in โ€” never how anyone voted.

Snapshot rule (v1.1, 2026-07-12)

Eligibility is no longer purely "live at whatever moment you happen to check." Each proposal has a snapshot boundary (defaulting to when voting opens). The first successful eligibility check for a wallet on that proposal, at or after the boundary, is recorded immutably and reused for every later check on that same proposal-and-wallet pair โ€” so a wallet cannot change its own recorded eligibility by acquiring or disposing of tokens after that first check.

This is deliberately not presented as a full chain-wide historical snapshot. A wallet never checked before voting closes simply never gets one. See Known limitations.
Section 5

Proposal lifecycle

There are 17 defined statuses with an explicit map of valid transitions between them, so a proposal can never jump silently between states. For example draft โ†’ executed is not a legal transition; it must pass through review, discussion, scheduled, active, passed, awaiting-ratification/approved-for-execution, executing, then executed. archived is a true terminal state.

Every status change records a timestamp, the actor or system, the previous status, the new status, and a reason. In v1 there is no admin UI, so that record is a maintainer's public commit history and message rather than a separate audit-log feature โ€” see Proposal publishing.

Section 6

Proposal categories

A fixed, controlled list of 14 categories: Community, Features, Quiz, Faucet, Games, Events, Rewards, Proof of Value, Burn Program, Treasury Allocation, Partnerships, Grants, Governance Rules, Platform Policy.

No free-form categories, so terminology never fragments across proposals.

Section 7

Governance modes

Every proposal declares one of four modes. Governance is never presented as uniformly "binding":

Section 8

Vote privacy

Section 9

Vote-change rule

A voter may update their choice until voting closes โ€” the latest valid choice replaces the prior one. This is enforced by construction rather than by duplicate-detection logic: votes are stored keyed by wallet address within a proposal, so a second vote from the same wallet overwrites the first entry. The original cast time is preserved alongside the time of the latest change.

Section 10

Quorum

Proposal-specific, expressed as a fixed count of eligible votes โ€” never a percentage of all holders. This platform does not have reliable total-holder-count data, and inventing one to make a quorum look rigorous would be fabricating a figure.

Section 11

Approval threshold

Section 12

Anti-abuse and uniqueness

AttackWhy it fails
Duplicate votesImpossible by construction โ€” wallet-keyed storage, see Vote-change rule.
Voting for another userImpossible โ€” the wallet is always resolved server-side from the session, never accepted from the client request body.
Session replay / client-side eligibility bypassEligibility is re-checked server-side on every single vote request. It is never cached client-side or trusted from a prior response.
Concurrent submissionsEvery read-modify-write happens synchronously within one request handler, with no await between the read and the write, so two near-simultaneous requests cannot interleave. Tested with two concurrent votes from different wallets (both preserved) and two from the same wallet (exactly one survives โ€” a vote change, not a duplicate).
Voting outside the window, or on a cancelled proposalThe vote path checks votable status and the voting window independently of whatever the frontend believes.
Malformed choicesAny choice not in the proposal's own list is rejected.
Duplicate proposal IDsChecked against the seeded data by a dedicated test.
Result manipulation by frontend codeImpossible โ€” the results calculation is the only source of truth and runs server-side. The frontend only ever displays what the API returns.
Section 13

Proposal publishing

There is no CMS and no unauthenticated public proposal-creation endpoint. Real proposals are a maintainer-edited record, published the same way burn events, partners, and events already are: edit the file, run the validation test to confirm the record is valid, commit, push.

v1.1 added a community submission review queue that lets anyone with a verified wallet submit a proposal idea for maintainer review โ€” but a submission can never publish itself. Turning an approved submission into a real proposal is still that same manual, maintainer-owned step.

Discord notification (added 2026-07-17)

Every successful submission also best-effort-posts a summary to a Discord webhook. A webhook outage never fails the submission itself, because the record is durably written before the notification is attempted.

Because a submission's title and summary are user-supplied free text โ€” unlike every other value this platform's webhook messages contain, which are all server-resolved โ€” the payload explicitly blocks mention parsing. A submitter cannot embed @everyone, @here, or a role mention in their own title or summary and have it actually fire, while the one legitimate system-controlled "credit the submitter" mention still works. This is covered by its own test.

Section 14

Burn proposal handling

A burn-program proposal must carry a burn-details object โ€” proposed amount, source, benchmark or date, reason, effect on the 100M goal, execution authority, and execution deadline โ€” and this is enforced at the data-model level. The proposal detail page fetches the canonical, live Burn Center totals rather than ever restating a second hardcoded figure, so it shows current verified-burned, staged, and remaining-to-target alongside the proposal's own ask.

A successful vote never executes a burn. The lifecycle is exactly:

Proposal โ†’ Vote โ†’ Result โ†’ Maintainer safety review โ†’ Approved for execution
  โ†’ Separate, manually authorized burn transaction (outside this system)
  โ†’ On-chain confirmation โ†’ Burn Center event โ†’ Governance execution record

No signing capability, private key handling, or transaction-broadcast code exists anywhere in Governance v1 โ€” see Execution boundaries. A "Donate to Burn" flow is explicitly not implemented.

Section 15

Feature proposal handling

A feature proposal captures problem, proposed change, community benefit, affected systems, scope, risks, estimated effort, dependencies, alternatives, and success criteria as fields on the proposal record.

A vote never forces an unsafe or impossible implementation. After passage a maintainer classifies it โ€” accepted, accepted-pending-prerequisites, requires-revision, unable-to-execute, or rejected-on-safety-or-legal-grounds โ€” and any refusal requires a public reason.

Section 16

Maintainer ratification

The maintainer-ratified and binding-within-defined-policy modes both require a human decision after a vote closes, reflected in the awaiting-ratification โ†’ approved-for-execution transition. There is no code path that skips this step.

Section 17

Emergency boundaries

Governance has no relationship to incident response. An active security threat is handled entirely outside governance, by maintainers, exactly as established platform-wide. A vote-gated emergency response would be a contradiction: emergencies need speed, not a multi-day voting window.

Section 18 ยท read this one

Execution boundaries

No signing, no treasury access, and no burn-execution capability exists anywhere in Governance v1. Concretely:

Section 19

Historical archive

Rejected, quorum-not-met, and cancelled proposals are never deleted. They remain visible in the governance archive exactly like passed and executed ones. Governance credibility requires preserving the unsuccessful decisions too.

Section 20

Security model

Section 21

Security hardening review (2026-07-17)

Prompted by the project owner's explicit request to audit governance for exploit vectors โ€” "evidence over assumptions" โ€” rather than trust the design documents at face value. Findings were verified against the actual code, not against this document's prior claims.

Verified solid, not merely asserted

Vote casting and submission creation really do read-check-write synchronously with no await in between; both have concurrent-write tests rather than a comment claiming safety. Submission detail and withdraw routes return "not found" to non-owners, never a distinguishing "not yours". The maintainer gate has no bypass path, and maintainers vote through the identical eligibility path as anyone else โ€” no special-cased privilege. RPC-failure handling never collapses to a false "ineligible" and never caches a failure.

Fixed

The proposal-submission Discord webhook now explicitly guards against mention-injection from user-supplied free text.

Not fixed, deliberately โ€” documented instead

Wallet linking has no check preventing a Discord account from relinking to a different wallet at any time, and the v1.1 snapshot lock-in records only the first balance check at or after a proposal's boundary โ€” it has no minimum holding duration. In principle a wallet could be funded briefly right at a proposal's snapshot boundary and drained afterward. This is now weaker than it was between 2026-07-17 and 2026-08-06, and that is a deliberate trade. While voting required 1,000,000 WinLEW, funding a wallet briefly at a snapshot boundary cost a million tokens per vote. With the free-vote bar back at 1, that cost is gone โ€” a sybil vote now costs a Discord account and a verified wallet, not a large holding. What it buys is capped at one vote, purchased weight still requires 1,000,000 held, and quorum still has to be met. The bar was moved to restore a deliberate incentive; the cost is that low-value sybil voting is cheaper, and this page says so rather than leaving it for someone else to find.

A duration-based fix is not buildable without a historical-balance indexer this platform does not have. Rather than ship a partial heuristic that could falsely exclude a genuine holder who happens to re-verify near a snapshot boundary, the limitation is stated plainly here and on the Governance page itself.

Structural, not a bug

Wallet-based one-vote can never fully prevent one person controlling multiple funded wallets and Discord accounts. No KYC exists or is planned. This was already true before the review; it is stated explicitly rather than left implicit.

Section 22

Known limitations

  1. No full chain-wide historical holder snapshot. v1.1 added a narrower, honest per-proposal eligibility lock-in, but there is still no indexer that can answer "what did every wallet hold at block N." A wallet never checked before voting closes never gets a recorded snapshot at all.
  2. No maintainer review UI for the submission queue yet. The community can submit and track their own drafts, and the review API is fully built and tested, but there is no dedicated admin page โ€” maintainers act through the API directly.
  3. No on-chain execution automation, by design. See Execution boundaries. This is a permanent v1 boundary, not a temporary gap.
  4. No admin UI for status transitions. Status changes are commits, not a dashboard action โ€” matching how burn events, partners, and events already work.
  5. Only one real, seeded proposal existed at launch (the Governance Launch record itself, informational). No fabricated voting history. The first real community vote will be the platform's actual first governance test.
Related

Where to go next