Mail User's Guide

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

Rough draft, out of date. The development of the mail interface lags behind the web interface.

  1. Voting and Registration
  2. Help from the Vote-Server
  3. Help from the Register
  4. Help from a Poll

Voting and Registration

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

Cast a vote.

Send a message to the poll for Mayor <v-Tor/p/m@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 vote-server, 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
vote-server at zelea.com?

If yes, you did, please confirm by:

       Replying to this message
  or
       Sending a blank message to
       v-confirm-1241938979.10978.50372c@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: 1.0K --]

Return-Path: <mike@zelea.com>
Delivered-To: v-service@zelea.com
Received: (qmail 10973 invoked by uid 1006) ...
  ~ ~ ~

The vote-server 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 vote-server 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 vote-server then acknowledges your original message, and confirms your vote:

To voter mike@zelea.com, in reply to your message dated Sun, 10 May 2009
03:05:49 -0400.

> vote iray@prattslanding.ca

Mayor of Toronto

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 poll.  The problem is as
follows:  Voter not registered.  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 latest 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 latest count:

    mike@zelea.com

    (empty trace, nothing to show)

The vote trace (above) is from the latest count: snap-2009-59-1 /
readyCount-1.  It excludes subsequent changes made by voters.

The vote-server 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 voter register for the demonstration is v-register@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 vote-server 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 poll. Without it, your vote will not count.

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

How did registering affect your vote?

Send this simple message to the poll v-Tor/p/m@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 poll. 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 v-register@zelea.com:

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

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

The vote-server 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 polls. [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 poll v-Tor/p/m@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 poll.  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 vote-server 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 Vote-Server

Votorola is deployed in a network of deployment areas, one for each local region (city, county, and so forth). Each deployment area runs a vote-server that stores the voter data, and provides interfaces for user access. For the examples below, we'll use Toronto's vote-server.

Contact the local vote-server.

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

The vote-server 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 vote-server.

help

It responds:

In reply to your message dated Sun, 10 May 2009 03:25:53 -0400.

> help

City of Toronto
===============

    Service:  mail meta-service

    Access:   City of Toronto <v@zelea.com>

Welcome to the vote-server for Toronto (alpha test prototype).  It hosts
primary elections for City Council, local members of the Legislative Assembly
of Ontario, and local members of the House of Commons, Parliament of Canada.
An upcoming beta will extend voting to city bylaws, plans and policies.

This vote-server provides multiple voter services.  The service which generated
this message (mail) is the meta-service for the whole vote-server.  Other
services include polls, and a voter register.  They will be listed farther
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.  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 vote-server is running.

        version

    The service replies with the version.

How To Communicate with the Vote-Server
=======================================

    To communicate with the vote-server, 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 poll 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 vote-server 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 voter 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

Polls on the Vote-Server
========================

    Tor/p/m

        Mayor of Toronto
        v-Tor/p/m@zelea.com

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

    register

        Voter Register
        v-register@zelea.com

    mail

        City of Toronto
        v@zelea.com

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

The demo vote-server offers two primary types of service (aside its meta-service): a voter register, and polls. We can get further instructions from each. First the register:

Help from the Register

Send a help message directly to Voter Register <v-register@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 vote-server (above), so we won't repeat them. The commands below are exclusive to the register:

> help

Voter Register <v-register@zelea.com>
==============

This is the open voter 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 polls.  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 attribute.

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

    The attributes that may be set are:

        name
                set name James Madison

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

        residence

                set residence 14 Rappahannock Lane, 22485

            Your primary residential address.  This attribute is required to
            establish your eligibility to vote in specific electoral
            districts.  You may cast a vote in any poll, but whether it
            counts or not will usually depend on the value of this attribute.  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 attribute 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
            attribute is optional, and may be left unset.

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

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

    All attributes in the register are in public view.  Once set, you may alter a
    attribute'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 poll 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 attribute, 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 attributes 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 a Poll

Send a help message to the poll for Mayor of Toronto <v-Tor/p/m@zelea.com>.

help

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

> help

Mayor of Toronto <v-Tor/p/m@zelea.com>
================

This is an election for the Mayor of Toronto.

Below are the commands recognized by this service (Tor/p/m).  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 a poll.

        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 a poll.

        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.