Scoped admin token
Enter your admin token. National tokens see every poll; chapter tokens see only their own. All actions are recorded in the audit log under your token's name.
Just exploring?
Use the public demo token
DEMO-ADMIN-TOKEN-2026 — it opens the console as a
national root admin so you can explore the full experience: build elections, import a
(synthetic) roll, watch turnout, adjudicate provisionals, void & reissue, set vote weights,
run the count workbench, and view results across every poll. This is a demo sandbox with
synthetic data only — changes here don't touch any real election. (The sandbox's voting
test code is TEST-SANDBOX-2026-DEMO.)
Loading…
Turnout status per voter: whether their code was used and whether a ballot record was received and stored for it — never how anyone voted. The integrity check counts used codes with no stored ballot (should always be 0).
Ballot lookup — troubleshooting (root only, audited)
Find a specific ballot by member ID or receipt. Shows the voter's
identity-linked answers (admin-visible by policy) and whether their
secret-ballot record exists — never the secret ranking. Voters
can also self-check at
/p/<poll>/verify?receipt=XXXX (public, status only).
Import voter roll (national admins)
Required header: member_id. Optional:
chapter, weight (integer 1–1000 ballot
weight, default 1). Every other column is ignored, so a full
membership export works as-is. One code is minted per new member;
already-imported members are skipped. Codes are stored hashed — the
plaintext manifest exists exactly once, wherever you receive it.
National admins only
Art. V §5 applies only to National Convention delegate elections — mark a ranked question as a delegate election to enforce it. Ordinary referendums and chapter officer elections have no window restrictions.
No questions yet — add one below or use a template.
Templates:
Question
Voters rate every candidate 0–max (DSA at-large delegates use 0/1/2 = disapprove/neutral/approve). Score sums the ratings; STAR runs an automatic runoff between the two highest. Quota requirements below apply to both.
Candidate attribute tags below become required once quotas are on.
Attribute tags
(comma-separated, e.g. cis_man, white) drive the quota requirements above.
A candidate with no matching category gets an empty tag list.
Advanced — raw JSON (questions, quota groups)
Results unlock when a poll is finalized (automatic ~15 minutes after close). Ranked contests are counted here by the shipped Scottish STV tabulator — delegate contests include the alternates recount. Free-text answers are counted, never displayed. National sees every poll; chapter tokens see their own.
Ballots — export & independent verification
Download each contest as a standard .blt file (ballot weights included) and reproduce the result in software we don't control:
Pick a poll above, then
How to independently verify results
1 · Get the ballot files. Download the .blt for each
contest above. The format is the OpaVote/OpenSTV standard: first line
= candidates seats; each ballot line = weight
rank1 rank2 … 0 (1 0 is an abstention); then a
0 terminator, quoted candidate names, and the title.
2 · Recount in independent software. Any of:
upload to OpaVote (choose Scottish STV); run OpenSTV/Droop;
or run the tabulator that ships with this codebase:
python3 tools/stv_tabulate.py contest.blt — it prints the
same round-by-round table the Results tab charts. Yes/No contests are
1-seat files where the counts are directly visible.
3 · Delegate alternates (expanded count). Download the same contest with "recount" — identical ballots, seats set to delegates+alternates. Winners of the recount who aren't already delegates are the alternates, in order of election.
4 · Check the record itself. After certification the
close-out export publishes a tamper-evident hash chain over every
ballot (tools/build_chain.py, verified by
tools/verify.py); voters can confirm their own receipt at
/p/<poll>/verify?receipt=… and against the
aggregate used-code counts on the Voters tab.
Weighted polls: weights ride in the .blt weight column, so independent tabulators reproduce weighted results with no extra steps. Current weights are visible per voter on the Voters tab; every weight change is in the audit log.
Load any .blt file (e.g. one exported from the Results tab, or from another system), run a Scottish STV count, and see the same round-by-round chart. The ballot text is editable — tweak ballots, weights, or the seat count in the header and rerun to explore how the outcome responds. Nothing here touches stored election data.
Advanced — quota constraints (leadership elections)
The BLT ballot file format
RosaVote reads and writes the standard BLT format (also used by OpaVote and OpenSTV), so ballots move freely between systems:
- Line 1: two numbers — how many candidates, how many seats.
- Optional line 2: negative numbers mark withdrawn candidates
(
-2= candidate 2 dropped out; their rankings are skipped). This is how dropout recounts work. - Ballot lines: first number is the ballot weight (1 unless the
voter has a weighted vote, or ballots are packed so identical ballots share a
line), then candidate numbers in ranked order, ending with
0.1 0is an empty/abstain ballot. A-is a skipped ranking;3=2is an overvote (two candidates at one rank) — counting rules skip past both. - A lone
0ends the ballots. - Then each candidate's name in straight double quotes (one per line, in candidate-number order), and finally the contest title in quotes.
- Blank lines, extra spaces, and
#comments are ignored.
4 2 # 4 candidates, 2 seats -2 # candidate 2 withdrew 1 4 1 3 0 # Amy 1st, Diane 2nd, Chuck 3rd 6 4 3 0 # Amy 1st, Chuck 2nd — weight 6 1 0 # empty ballot 0 # end of ballots "Diane" "Bob" "Chuck" "Amy" "Demo Election"
Sealed provisionals: identity fields only — the ballot answers stay sealed. Verify needs the matched member ID; it burns the member's unused codes and promotes the sealed ballot. Reject records a note. If the member already voted by code, verification is refused.
Flags the ballot voided (kept forever, excluded from tallies) and issues the member a fresh code — shown once, deliver it securely. Open-window only; every action is audited.