"Vote Free" cartoon

Mail User's Guide

Votorola is software for hosting open, continuous elections. This guide covers the use of its mail interface.

Incomplete. This is a copy of the old walk-through demonstration; it has yet to be placed in the form of a user's guide. As well, the feature set of the mail interface is somewhat behind that of the Web interface; and not expected to catch up until beta-two.

  1. Voting and Registration
  2. Help from the Subserver
  3. Help from the Register
  4. Help from an Election

Voting and Registration

Every election has its own mailbox. If you know its address, you can cast a vote.

Cast a vote.

Send a message to the election for Mayor <city-mayor@t.zelea.com>, saying who you wish to vote for. For instance, send a message consisting of the single line:

vote iray@prattslanding.ca

You can vote for anyone you choose. When your vote reaches the subserver, it responds with a challenge.

[-- Attachment #1: Confirmation Request --]
[-- Type: text/plain, Encoding: 7bit, Size: 0.4K --]

Did you recently send mail (original headers attached) to the
electoral server at zelea.com?

If yes, you did, please confirm by:

       Replying to this message
  or
       Sending a blank message to
       v-confirm-1197604078.29927.b6229c@t.zelea.com

If not, please ignore this message. Do not reply.

The original mail is on hold.  If you do not reply within 7 days,
it will be deleted.

[-- Attachment #2: Original Message Headers --]
[-- Type: text/rfc822-headers, Encoding: 7bit, Size: 0.9K --]

Return-Path: <mike@zelea.com>
Delivered-To: v-service@t.zelea.com
Received: (qmail 29922 invoked by alias) ...
  ~ ~ ~

The subserver is verifying that it was in fact you who sent the email message containing the vote. Anyone can send a message claiming to originate from your email address, but only you can receive mail at that address. When you reply to the challenge, the subserver will know that it can trust your original message. In future, we will support signed email, as an alternative to challenge/response authentication.

Reply to the challenge, and your vote is confirmed.

Reply as instructed. The subserver then acknowledges your original message, and confirms your vote:

To voter mike@zelea.com, in reply to your message dated Fri, 21 Mar 2008
13:44:38 -0400.

> vote iray@prattslanding.ca

Mayor

You were voting for:     nobody
You are now voting for:  iray@prattslanding.ca

    mike@zelea.com
        |
        |
        X

The trace is cut short, because of voter ineligibility.  Voter mike@zelea.com
is attempting to vote for iray@prattslanding.ca, but the vote does not count,
because mike@zelea.com is ineligible to vote in this election.  The problem
is as follows:  Voter not registered.  The electoral register has no
information on voter mike@zelea.com.

The final recipient of the vote is nobody.  The vote trace (above) is a
projection based on the results of the last count.  It includes subsequent
changes made by mike@zelea.com, but excludes the changes of other voters.
The changes of all voters will be included in the next count.

------------------------------------------------------------------------------
Older trace, from last count:

    mike@zelea.com

    (empty trace, nothing to show)

The vote trace (above) is from the last count: snap-2008-04-16 /
readyCount-2008-04-16.  It excludes subsequent changes made by voters.

The subserver replies with two vote traces. The second is from the most recent full count, of all the votes. We hadn't cast a vote at that time (of course, since this is our first vote), so the trace is empty.

The first trace is the one that matters. It acknowledges the vote, but informs us that it doesn't count. In order for it to count, we must register.

Register yourself.

The electoral register for the demonstration is register@t.zelea.com. Send it a message with these commands:

set name My Name

set residence 172 Main Street, M1M 1A1

set link http://mysite.ca/~me/

The subserver responds once again with a challenge. Reply to the challenge, and it answers:

> set name My Name

Old value:  none
New value:  My Name

> set residence 172 Main Street, M1M 1A1

Old value:  none
New value:  172 Main Street, M1M 1A1

> set link http://mysite.ca/~me/

Old value:  none
New value:  http://mysite.ca/~me/

These items are all optional, except for the residential address. It is required for eligibility purposes, in this particular election. Without it, your vote will not count.

A single registration will suffice for all elections, at all jurisdictional levels. Registration alone will not make you eligible for all elections — your eligibility for each will depend on your residential address, and other particulars — but you only have to register once for all elections.

How did registering affect your vote?

Send this simple message to the election city-mayor@t.zelea.com:

vote

The response might be:

> vote

Mayor

You are voting for:  iray@prattslanding.ca

    mike@zelea.com
    My Name
    http://mysite.ca/~me/
        |
        | 1
        |
        V
    iray@prattslanding.ca  --->  holding 1

The final recipient of the vote is iray@prattslanding.ca.  The vote trace
(above) is a projection based on the results of the last count.  It includes
subsequent changes made by mike@zelea.com, but excludes the changes of other
voters.  The changes of all voters will be included in the next count.
  ~ ~ ~

That's somewhat better. Your vote is now being counted. However, it appears that your candidate is unaware of the election. She has received no votes except yours (1), and has cast no vote of her own. So she probably hasn't registered either. We may be able to pre-register her, in that case.

Pre-register the candidate.

Send another message to register@t.zelea.com:

set name Indira Ray --alter=iray@prattslanding.ca

set link http://prattslanding.ca/~iray/ --alter=iray@prattslanding.ca

The subserver responds once again with a challenge. Reply to the challenge, and it answers:

> set name Indira Ray --alter=iray@prattslanding.ca

Old value:  none
New value:  Indira Ray

> set link http://prattslanding.ca/~iray/ --alter=iray@prattslanding.ca

Old value:  none
New value:  http://prattslanding.ca/~iray/

It worked, which means she hadn't registered herself (as we thought). If she had, then the commands would have been rejected. Instead they were accepted and a copy of the response was forwarded to her, along with her standing in the elections. [Actually not. Bootstrap notification of nominees has yet to be coded. If you wish to communicate with the candidate, you must send an email of your own.]

Check on the status of your vote.

Suppose it is a day later, and you wish to see how your vote is doing. Again, send this simple message to the election city-mayor@t.zelea.com:

vote

This time, the response might be:

> vote

Mayor

You are voting for:  iray@prattslanding.ca

    mike@zelea.com
    My Name
    http://mysite.ca/~me/
        |
        | 1
        |
        V
    iray@prattslanding.ca  --->  holding 1
    Indira Ray
    http://prattslanding.ca/~iray/
        |
        |
        X

The trace is cut short, because of voter ineligibility.  Voter
iray@prattslanding.ca is attempting to vote for marion@iquorum.net, but the
vote does not count, because iray@prattslanding.ca is ineligible to vote in
this election.  The problem is as follows:  Address unknown.  The register has
no residential address for voter iray@prattslanding.ca.

The final recipient of the vote is iray@prattslanding.ca.  The vote trace
(above) is from the last count: snap-2008-04-24 / readyCount-2008-04-24.  It
excludes subsequent changes made by voters.

Apparently she has tried to cast a vote. But it doesn't count, because she is not yet fully registered. Suppose we help by sending her an email message, explaining how to set her residential address; or even offering to set it ourselves, with her permission.

Once again, check on the status of your vote.

Another day goes by, and you check how your vote is doing. This time, the response from the subserver might be:

> vote

Mayor

You are voting for:  iray@prattslanding.ca

    mike@zelea.com
    My Name
    http://mysite.ca/~me/
        |
        | 1
        |
        V
    iray@prattslanding.ca
    Indira Ray
    http://prattslanding.ca/~iray/
        |
        | 2
        |
        |  __
        | /
        |/   8
        |
        V
    marion@iquorum.net
    Marion Hewitt
    http://iquorum.net/members/marion.htm
        |
        | 11
        |
        |  __
        | /
        |/   30
        |
        V
    raychong@kmail.com
    Raymond Chong
    http://charterhouse.ca/ray.xht
        |
        | 42
        |
        |  __
        | /
        |/   216
        |
        V
    alison.roberts@corona.ca  --->  holding 258
    Alison Roberts
    http://corona.ca/~alison.roberts/

The final recipient of the vote is alison.roberts@corona.ca.  The vote trace
(above) is from the last count: snap-2008-04-24-02 / readyCount-2008-04-24.
It excludes subsequent changes made by voters.

The voting mechanism here is a delegate cascade.

Help from the Subserver

An open electoral system consists of electoral offices, one for each local region (city, county, and so forth). Each electoral office runs an electoral subserver that stores the electoral data, and provides interfaces for user access. For the examples below, we'll use Toronto's subserver.

Contact the local subserver.

Send a message to Toronto <v@t.zelea.com>. Any message will do. For instance, send an empty message.

The subserver responds:

In reply to your message dated Fri, 16 May 2008 06:54:31 -0400.

You sent an empty message, having no content of type text/plain.  For help,
please send a message containing the single command:

    help

Let's try as it suggests:

Request instructions from the subserver.

help

It responds:

In reply to your message dated Fri, 16 May 2008 06:56:09 -0400.

> help

City of Toronto <v@t.zelea.com>
===============

Welcome to the open electoral subserver for Toronto - alpha version.  It
provides open, continuous elections for City Council, local members of the
Legislative Assembly of Ontario, and local members of the House of Commons,
Parliament of Canada.  The upcoming beta version will extend voting to City
bylaws, plans and policies.

This subserver provides multiple electoral services.  The service which
generated this message (v) is the meta-service for the whole subserver.
Other services include elections, and an electoral register.  They will be
listed further below.  First, we describe the few commands that are recognized
by this service.  [Note, this service is rate limited.  If you send it too
many messages, it will stop replying for a while.]

Below are the commands recognized by this service (v).  Command syntax is
summarized using these typographic conventions:

    item      literal, just type 'item' as shown

    ITEM      variable, subtitute your own value for 'ITEM'

    [item]    optional, type 'item' or nothing

    a | b     choice, type either 'a' or 'b'

hello
-----
    Say hello to the service.

        hello

        hello TEXT

    The service replies 'hello'.  Any TEXT arguments are ignored.  This
    command is used for testing.

help
----
    Request general information on the service, and instructions on using it.

        help

    The service replies with information and instructions.

    To request help for a specific command, try 'COMMAND --help'.

version
-------
    Ask what version of software the subserver is running.

        version

    The service replies with the version.

How To Communicate with the Subserver
=====================================

    To communicate with the subserver, simply send email messages.  In return,
    it sends replies.

    Your messages may contain commands.  Commands are typically sent in order
    to request information (such as election counts), or to change information
    (such as changing a vote).  Commands are typically sent one at a time, but
    you may also send multiple commands.  To send multiple commands use blank
    lines to separate them.  For example:

        hello this is one command

        hello this is
        a second command

        hello this a third command

    When the subserver receives your message it will first attempt to verify
    your identity.  It does this by sending a challenge.  After you reply to
    the challenge it will reply to your message.

    Listed below are the electoral services that are provided.  Each service
    has its own address.  To obtain further instructions, pick a service, and
    send it a message consisting of the command:

        help

Elections on the Subserver
==========================

    ward-19-councillor@t.zelea.com

        City Councillor for Ward 19

    city-mayor@t.zelea.com

        Mayor of Toronto

    trinity-spadina-mpp@t.zelea.com

        Member of Provincial Parliament for Trinity - Spadina

    trinity-spadina-mp@t.zelea.com

        Member of Parliament for Trinity - Spadina

    ward-20-councillor@t.zelea.com

        City Councillor for Ward 20

Other Services
==============

    register@t.zelea.com

        Electoral Register

    v@t.zelea.com

        City of Toronto

        (this is the service that created the help message you are currently
        reading)

The demo subserver offers two primary types of service (aside its meta-service): an electoral register, and elections. We can get further instructions from each. First the register:

Help from the Register

Send a help message directly to Electoral Register <register@t.zelea.com>.

help

It responds with a challenge, as we saw before. Reply to the challenge, and then it answers our help request, and details the commands it recognizes. Some were already described for the subserver (above), so we won't repeat them. The commands below are exclusive to the register:

> help

Electoral Register <register@t.zelea.com>
==================

This is the open electoral register for the City of Toronto (alpha
demonstration).

Below are the commands recognized by this service (register).  Command
syntax is summarized using these typographic conventions:

    item      literal, just type 'item' as shown

    ITEM      variable, subtitute your own value for 'ITEM'

    [item]    optional, type 'item' or nothing

    a | b     choice, type either 'a' or 'b'

doubt
-----
    Cast doubt on another voter.

        doubt VOTER-EMAIL [REASON]

        doubt [--alter VOTER-EMAIL]

    If an entry in the voter list appears to contain false information, then
    you may mark it as such by casting doubt on the voter.  For example:

        doubt falseVoter@domain.dom nobody lives at 7 Turncott, the building
        is empty

    You must be in the voter list yourself before your doubt will reach the
    other voter.  When it does reach her, it will not affect her own inclusion
    in the list, nor her eligibility to vote in the elections.  It will only
    serve to indicate your suspicion that her entry in the register is false.
    Other voters may then consider whether or not to withdraw their trust from
    her.

    To recall who you are doubting, simply send:

        doubt

    The service replies, identifying the doubted voters:

        You are casting doubt on 1 voter(s).

            falseVoter@domain.dom
                nobody lives at 7 Turncott, the building is empty

    Or, to see where another voter has cast doubt, send:

        doubt --alter VOTER-EMAIL

    To cast doubt on additional voters, use the 'doubt' command repeatedly.
    To withdraw it, use 'undoubt'.

    If your registration comes to be doubted by several voters, then you may
    wish to attach a note of explanation to it, as a defence.  See the command
    "set note".  [There is currently no easy way to discover who is doubting
    you, or to view registration details, except through the Web interface.
    This will be corrected in the beta-two release.]

set
---
    Set the value of a register field.

        set [--alter VOTER-EMAIL] name|residence|link|note VALUE

    The fields that may be set are:

        name
                set name James Madison

            Your proper name.  This field is optional, and may be left unset.

        residence

                set residence 14 Rappahannock Lane, 22485

            Your primary residential address.  This field is required to
            establish your eligibility to vote in specific electoral
            districts.  You may cast a vote in any election, but whether it
            counts or not will usually depend on the value of this field.  The
            postal code should come last.

        link
                set link http://~jim/emontpelier.net

            A Web link in standard URI format, pointing to further information
            about you.  This field is optional, and may be left unset.

        note
                set note My Internet connection may be down, but I'm still
                here.

            A short note explaining or commenting on your registration.  This
            field is optional, and may be left unset.

    Under certain conditions, you may be able to set the fields of a
    registrant other than yourself, by using the --alter option.  You may set
    the fields of another registrant, in this way, only if none were
    previously set by the registrant.  (Once a registrant sets or resets a
    single field in the register, she assumes exclusive control of all
    fields.)

        set --alter muller@wintermere.nz link http://~muller@wintermere.nz

    All fields in the register are in public view.  Once set, you may alter a
    field's value with another 'set' command, or erase it with 'unset'.

    [There is currently no easy way to view your register settings.  This will
    be corrected in the beta release.]

trust
-----
    Extend trust to another voter.

        trust VOTER-EMAIL

        trust [--alter VOTER-EMAIL]

    To be eligible to vote, you must have the trust of other voters in your
    neighbourhood.  A sufficient number of them (themselves trusted) must
    extend their trust to you.  Only then will your registration be included
    in the voter list, and your votes included in the election counts.  The
    exact amount of trust you require will usually be specified in the voter
    list.  [The list is currently posted only in the Web interface.]  The list
    is also a helpful resource for locating suitable neighbours prior to
    requesting their trust (by email, telephone, and so forth).

    Trust usually has a limited range, restricting it to the local
    neighbourhood.  The range is usually symmetric (the direction does not
    matter).  So, before requesting trust *from* a neighbour, you may wish to
    test your range by extending your own trust *to* that neighbour.  To
    extend your trust, use the 'trust' command.  For example:

        trust myNeighbour@somewhere.net

    If you cannot obtain trust because too few voters are registered in your
    neighbourhood, then you must contact your local registrar.  [Detailed
    instructions will be provided in future releases.]

    To recall who you are trusting, simply send:

        trust

    The service replies, identifying the recipients of your trust:

        You are trusting 1 voter(s).

            myNeighbour@somewhere.net

    Or, to see the recipients of another voter's trust, send:

        trust --alter VOTER-EMAIL

    To extend trust to additional voters, use the 'trust' command repeatedly.
    To withdraw it, use 'untrust'.

    [There is currently no easy way to discover your own trust level, or to
    see who is extending trust to you, except through the Web interface.  This
    will be corrected in the beta-two release.]

undoubt
-------
    Withdraw doubt that was previously cast on another voter

        undoubt VOTER-EMAIL

    The service replies, confirming the withdrawal:

        You were casting doubt on 1 voter(s).
        You are now casting doubt on 0 voter(s).

    If you change your mind later, and wish to re-cast your doubt, use the
    'doubt' command.

unset
-----
    Unset the value of a register field, erasing it.

        unset [--alter VOTER-EMAIL] name|residence|link|note

    For example:

        unset link

    The service replies, confirming the erasure:

        Old value:  http://~muller@wintermere.nz
        New value:  none

    If you change your mind later, and wish to set a value once again, use the
    'set' command.

    Under certain conditions, you may be able to erase the fields of a
    registrant other than yourself by using the --alter option.  See the 'set'
    command for details.

untrust
-------
    Withdraw trust that was previously extended to another voter

        untrust VOTER-EMAIL

    The service replies, confirming the withdrawal:

        You were trusting 1 voter(s).
        You are now trusting 0 voter(s).

    If you change your mind later, and wish to re-extend your trust, use the
    'trust' command.

Help from an Election

Send a help message to the election for Mayor of Toronto <city-mayor@t.zelea.com>.

help

Reply to the challenge as usual, and the election answers, detailing the commands it recognizes. The following commands are exclusive to elections:

> help

Mayor of Toronto <city-mayor@t.zelea.com>
================

This is an election for the Mayor of Toronto.

Below are the commands recognized by this service (city-mayor).  Command
syntax is summarized using these typographic conventions:

    item      literal, just type 'item' as shown

    ITEM      variable, subtitute your own value for 'ITEM'

    [item]    optional, type 'item' or nothing

    a | b     choice, type either 'a' or 'b'

unvote
------
    Withdraw a vote from an election.

        unvote

    The service replies, confirming the withdrawal:

        Mayor of Toronto

        You were voting for:     mychoice@somewhere.net
        You are now voting for:  nobody

    If you change your mind later, and wish to vote again, use the 'vote'
    command.

vote
----
    Cast a vote in an election.

        vote CANDIDATE-EMAIL

        vote [--alter VOTER-EMAIL]

    You can vote for anyone you choose.  All you need is a person's email
    address.  For example:

        vote myChoice@somewhere.net

    To recall who you last voted for, simply send:

        vote

    The service replies, identifying the recipient of your vote:

        Mayor of Toronto

        You are voting for:  myChoice@somewhere.net

    If that person also casts a vote, then your vote is carried with it.
    Whoever gets that person's vote also get yours.  And so on.  Your vote is
    carried until it reaches someone who does not vote.  This is called a
    'delegate cascade'.  At the end of the cascade, votes accumulate to reveal
    the favoured candidates.

    A trace of the cascade is included in the reply, so you can follow the
    path of your vote, and see who ultimately receives it.  Or you can mark
    the vote as non-cascading, so it stays put until you change it:

        vote --cascade no  (however, this option is not yet implemented)

    To see how another voter is voting, send:

        vote --alter VOTER-EMAIL

    To change your vote, send another 'vote' command.  Or withdraw it
    altogether using 'unvote'.

    [There is currently no easy way to see who is voting for you, or to view
    the overall results.  This will be corrected for the beta release.]

Bug Reports

Please report bugs to the mailing list.

maintainer Michael Allan

Copyright 2007-2008, Michael Allan. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Votorola Software"), to deal in the Votorola Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicence, and/or sell copies of the Votorola Software, and to permit persons to whom the Votorola Software is furnished to do so, subject to the following conditions: The preceding copyright notice and this permission notice shall be included in all copies or substantial portions of the Votorola Software. THE VOTOROLA SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE VOTOROLA SOFTWARE OR THE USE OR OTHER DEALINGS IN THE VOTOROLA SOFTWARE.