Here I suggest that we explicitly specify what those rules are so they can be referenced in one page and placed on our BlackBox Center Wiki.
I believe our current voting procedure is given by (in pseudo code)
Code: Select all
PROCEDURE CurrentVote* (VAR option: INTEGER): BOOLEAN;
BEGIN
Zero(count);
REPEAT UNTIL Quorum(count);
RETURN Preference(option, count)
END CurrentVote;
Josef has pointed out that termination of a poll when a quorum is reached is not the correct thing to do because the missing members (2) could change the preference of the vote. For example if the counts are
ABSTAIN=1
YES=4
NO=4
a Quorum (9) has been reached but there is no preference and so a vote by the missing members can change the outcome of the vote.
Hence the CurrentVote is inadequate (buggy) and does not work for all cases. If the missing members never vote then the poll continues forever. That is not an acceptable voting rule.
(0) I propose that a finite poll duration always be used and the duration range from 1 day to 1 month with a standard duration of 7 days (1 week) used. The duration is determined by the creator of the poll. A duration of '0' (never ending) is invalid. endtime := starttime + duration.
(1) The number of voting members (numMem: INTEGER) (currently 11) of the center is used to determine a quorum.
(2) The fraction (qFraction: REAL) (currently 0.80) of numMem is used to determine a quorum.
(3) A quorum (qVal: INTEGER) (currently 9) is given by qVal := Ceiling(qFraction*numMem).
(4) Each poll has a number of options (numOps: INTEGER) (depends upon poll) which is 2 or greater.
(5) A poll has a category called ABSTAIN (used in determining the number of votes).
(6) A count (count: ARRAY 1+numOps) is used to record the number of votes for each option. count[0] is ABSTAIN.
(7) The number of votes (votes: INTEGER) is give by votes := Sum(0,numOps, count).
(8) Missing (missing: INTEGER) is given by numMem-votes.
(9) A rank (rank: ARRAY 1 TO numOps OF INTEGER) satisfies rank >= rank[i+1] and is given by Rank(rank, count).
(10) The spread (spread: INTEGER) of a vote is given by spread := rank[1]-rank[2].
(11) A poll can succeed (succeed: BOOLEAN) (succeed=TRUE) if any of the following hold
(a) spread > missing (short cut voting)
(b) endtime is reached and quorum is reached and spread > 0.
Otherwise the poll fails (succeed=FALSE).
(12) The result of a successful poll is the option(option: INTEGER) corresponding to rank 1.
option := Option(count, rank[1]).
I propose that those 13 rules be used to specify what constitutes a Center vote.