[Dbix-class] PROPOSAL: Governance and sustainability

Matt S Trout mst at shadowcat.co.uk
Mon Nov 7 21:30:56 GMT 2016


The updated bootstrap governance document appears below - basically I've
attempted to tweak it so that, while business as usual can occur without
needing the list to expend time getting involved, the community now gets
a clear veto - and there's a forcible recall method (forced vote) to defend
against the possibility of a rogue core team. I hope that said addition is
never required, but strongly believe there should be some final means of
redress in such a scenario.

Also, I'm encoding frew holding first-come, since I hold SQL::Abstract,
castaway SQL::Translator, and ilmari DBIx::Class::Schema::Loader, so it
seems like a sensible place to leave them.

I also want to give a rough idea of what I'm expecting to actually happen:

- The first days will be pure bugfixing while we get a handle on the codebase
- I don't intend to do a CPAN release at all without an RC release first to
  begin with, because (1) let's be careful (2) that means people can use the
  RC if they desperately need a bugfix sooner than the release vote will be
  completed
- I, personally, currently have no specific significant changes to propose,
  though that doesn't mean other people can't do so
- Once we do have a solid handle on the codebase, I expect any potential
  feature additions to be discussed before we start work, in order to ensure
  that the risk/reward trade-offs have been thoroughly covered
- I intend to prioritise letting people who want a specific feature work on
  it themselves, providing code review and design assistance, over doing so
  myself, so that we end up with a long-term viable team again
- There is absolutely increased short-term risk to doing it that way, but I
  believe that we need both stability and sustainability, since neither a
  broken nor a dead project is desirable in a core dependency
- If you don't think we've been sufficiently careful in that regard, you
  have the ability to veto both merges and releases. I've tried to bake
  "if in doubt, make the conservative choice" into the system itself
  intentionally, and would much rather have a rebellion before than after
  a release is shipped to CPAN.

With all that given, here's the updated governance document:

=begin GOVERNANCE

DBIx::Class Core Team and Voting System

Non normative section:

DBIx::Class originally operated under a BDFL system, but one where it was
expected that an informal core team would be maintained, and that where
consensus could not be pre-assumed, the core team and/or the user base
would be consulted publically such that measured decisions could be made.

This document is intended to formalise a form of this system, while still
providing room for the system to adapt later as required.

It is intended that this system provides confidence to the user base that
decisions will be made in the open and that their wishes will be taken into
account.

It is also intended that this system allows business as usual to happen
without unnecessary red tape.

It is not intended that this system becomes the primary decision making
process in and of itself; instead, it is intended that this system is used
to ratify consensus as formed by discussion, and only sparingly as a tie
breaking system when consensus cannot be reached.

Normative section:

Terms: VM - Voting Member - part of the benevolent dictatorship
       LS - List Subscriber - a subscriber to the mailing list
       LAV - List Aggregate Vote - the aggregate vote of the non-VM LSes

Voting Members are:

  Matt S Trout (mst) cpan:MSTROUT
  Dagfinn Ilmari Mansaker (ilmari) cpan:ILMARI
  Frew Schmidt (frew) cpan:FREW
  Jess Robinson (castaway) cpan:JROBINSON

PAUSE release perms are to be held by:

  Matt S Trout (mst) cpan:MSTROUT
  Dagfinn Ilmari Mansaker (ilmari) cpan:ILMARI
  Frew Schmidt (frew) cpan:FREW
  Jess Robinson (castaway) cpan:JROBINSON

First come permissions are to be held by FREW.

(the above two lists may or may not be identical at any given time)

A resolution must be proposed and then successfully voted upon to:

  - Make a PAUSE-indexed (i.e. non-dev) release of DBIx::Class
  - Make changes to the master and blead branches of the repository
  - Amend this document

This document is currently in bootstrap phase, and as such no merges will be
made to master or blead until this sentence is removed.

A resolution that amends the 'PAUSE release perms' list is to be assumed to
also intend the permission within PAUSE itself to be updated accordingly.

Adding or removing entries from the list of situations requiring resolutions
is absolutely a valid topic for resolutions.

A resolution may be proposed for reasons including, but not limited to:

  - Force/revert/block a branch merge
  - Add/remove a commit bit
  - Resolve a design discussion
  - Anything you like, under the assumption frivolous proposals will be
    voted down naturally anyway

Merges to topic branches and similar actions that do not have a resolution
attached may be made at the discretion of those with ability to do so, but
a developer unsure if the merge will be uncontroversial is expected to ping
the list first so a vote can be called if people believe it to be required.

Rules that restrict this "ask unless you're sure" trust-by-default position
are also absolutely a valid topic for resolutions.

Resolution proposal:

A resolution is proposed by starting a new thread entitled 'PROPOSAL: ...'

A resolution must be seconded before it is voted upon.

If a VM makes or seconds a proposal, they are required to abstain from
voting upon it.

If a non-VM LS makes or seconds a proposal, no such restriction applies.

Resolution voting:

Once a proposal is seconded, the initial proposer may start a new thread
entitled 'VOTE: ...' (voting does not automatically begin after seconding
in case other feedback leads the proposer to wish to alter and re-present
their proposal).

Each VM may cast one vote, either +1, -1 or abstain.

Each non-VM LS may post +1 or -1, and the aggregate of those form the LAV.

Voting closes after 72h from when the proposal was first posted.

A resolution passes if the VM total is at least +1 and the LAV is
non-negative, to avoid requiring the list members to expend time to vote on
business as usual while still providing them a veto.

Resolution forcing:

If a resolution gains a positive LAV, but is voted down by the VMs, a force
vote may be proposed. This requires two list members who did not propose or
second the initial resolution to propose and second the force vote.

A force vote also lasts 72h, and is LAV-only. If it receives at least 25%
more +1s than -1s, the resolution passes no matter the VM vote.

This mechanism is not intended to be needed on a regular basis, but exists
to permit the list to forcibly recall a VM if they believe it to be necessary.

Once a resolution has passed, the resolution will be carried out by those with
the power to do so.  It will not be reverted without a new resolution
amending or reversing the decision of the previous once.

Passed resolutions will be recorded in a RESOLUTIONS file maintained next
to this document.

=end GOVERNANCE

-- 
Matt S Trout - Shadowcat Systems - Perl consulting with a commit bit and a clue

http://shadowcat.co.uk/blog/matt-s-trout/   http://twitter.com/shadowcat_mst/

Email me now on mst (at) shadowcat.co.uk and let's chat about how our CPAN
commercial support, training and consultancy packages could help your team.



More information about the DBIx-Class mailing list