GithubHelp home page GithubHelp logo

memberbot's People

Contributors

agnauck avatar legastero avatar linkmauve avatar mwild1 avatar neustradamus avatar ppjet6 avatar

Stargazers

 avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

memberbot's Issues

Abstain function not working correctly when recasting votes

Description:
Abstain only exists for board&council ballots. Therefore this bug happens only for board&council ballots.

When a voter is recasting the votes, and voters don't want to use all of their 5 YES votes again and submit the abstain command, Memberbot may still include "yes" votes from the previous voting session. It seems to delete only the previous vote at the position you abstain. Some other previous yes votes remain in the results.

The described issue only when in the previous voting session more YES votes were used then in the recast session.

I think the problem is here in the Abstain function where is deletes only 1 YES vote:

def abstain_vote(self, jid, section, item):
session = self.get_session(jid)
votes = session['votes']
if item in votes[section]:
del votes[section][item]
fulfilled = session['fulfilled']
fulfilled[section] = sum([1 for (name, vote) in votes[section].items() if vote == 'yes'])
self.redis.hset('%s:session:%s:%s' % (self.key_prefix, self.current_ballot, jid.bare), 'votes', votes)
self.redis.hset('%s:session:%s:%s' % (self.key_prefix, self.current_ballot, jid.bare), 'fulfilled', fulfilled)
return self.get_session(jid)

In the context of a board and council election abstain means:
I do not want to elect more applicants into either board or council

So I think we need to delete the current and all subsequent array items. Or change the whole logic and clear the previous votes completely at the right time in the recast session.

Update board&council voting to match XSF bylaws

Section 3.13 Voting Procedure for Election of Board and Council. Election
of individuals to serve on the Board of Directors and on the XMPP Council
shall proceed as follows. First, the number of individuals to serve on each
body shall be limited beforehand by the Members as specified in Section 4.4
and Section 8.1 of these Bylaws for the Board and Council, respectively.
Second, the Members shall vote on the candidates standing for election in
accordance with Section 3.9 of these Bylaws. Third, the individuals elected
shall be those receiving the highest percentage of votes cast, up to the
limit set by the Members and with the proviso that no individual receiving
less than a majority of votes cast shall be elected. Fourth, in the case of
a tie for the final remaining position, the final individual shall be
chosen in accordance with the procedures defined in “RFC 3797: Publicly
Verifiable Nominations Committee (NomCom) Random Selection” published by
the Internet Engineering Task Force.

This means that in principle, a Member may vote for all the candidates. The
memberbot limits the number of votes a Member has to the number of
positions available, ie, 5.

see also the board minutes from December 2020 here:
https://mail.jabber.org/pipermail/members/2020-December/009210.html

Expand member bot as information service

The memberbot could work towards:

  • Informing members about important topics
  • Announcing meeting dates and reminders
  • Inform about XEP developments
  • Sending the newsletter

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.