..
    This file is part of Invenio.
    Copyright (C) 2017-2018 CERN.

    Invenio is free software; you can redistribute it and/or modify it
    under the terms of the MIT License; see LICENSE file for more details.

Governance
==========
Invenio is governed by CERN for the benefit of the community. CERN strives to
make Invenio a collaborative, open and transparent project to ensure that
everyone can contribute and have their say on the directions of the project.

Invenio governance is in general informal and we try to strike a balance
between processes and agreed upon standards vs. the wild west where everyone do
as they see fit. The governance model is intended to allow that people
progressively take larger and larger responsibilities with support from the
existing leadership.

These following sections define the different roles and responsibilities in the
project, define how decisions are taken and how people are appointed to
different roles. Overall, we expect every person who participates in the
project to adhere to our :ref:`code-of-conduct`.

.. note::

    The currrent governance model puts in words how the collaboration currently
    works in practice today and sets a basic framework for  how we collaborate
    and take decisions in the project.

    If the nature of the community or contributors changes this governance
    model may be reviewed and changed if necessary.

Roles and responsibilities
--------------------------
The *product manager*, *coordinators*, *architects* and *maintainers* (as
defined below) make up the leadership of Invenio. The leaders of Invenio are
**service people** who:

- take an active role in driving the project forward,
- help newcomers as well as long-time contributors have great
  experience contributing to Invenio,
- help train members to progressive take larger responsibility in the project,
- are role models for the remaining community.

**Roles:**

* **Members**: Anyone using Invenio.
* **Contributors**: Anyone contributing to Invenio (in it widest possible
  interpretation, i.e. not only programmers).
* **Maintainers**: Anyone maintaining at least one repository. Maintainers are
  responsible for managing the issues and/or the code base of a repository
  according to Invenio's standards.
* **Architects**: Anyone maintaining 20+ repositories (though max 10 people).
  Architects are responsible for the overall Invenio technical architecture as
  well as managing and training maintainers on their respective repositories.
* **Coordinators**: Representatives of Invenio based services that would like
  to coordinate their Invenio development efforts with other services and
  provide input on the product road map.
* **Product manager**: Overall responsible for Invenio's vision, strategy and
  day-to-day management. Responsible for managing and training architects and
  coordinators.

Commit access on repositories are given to contributors, maintainers and
architects. Contributors can commit/merge to feature branches while only
maintainers and architects can commit/merge to master/maintenance branches
(meaning also only they can release packages to PyPI and NPM).

Decision making
---------------
We strive to take decisions openly and by consensus, though ultimately CERN
represented by the Invenio product manager has the final say on all decisions
in the project. In particular this means that there is no formal voting
procedure for Invenio.

**Leaders drive decision making**

The Invenio product manager, architects, coordinators and maintainers as the
leaders of the project are responsible for driving decision making in their
respective domains.

Driving decision making means:

- facilitating an open constructive discussion around a decision that matches
  the level of importance and impact of a decision,
- striving for reaching consensus on a decision and ensuring relevant other
  members are aware and included on the decision,
- ensuring decisions are in alignment with the overall Invenio vision,
  strategy, architecture and standards,
- coordinating the decision with the Invenio leadership (product manager,
  architects and coordinators),
- taking the decision.

**Leaders implement decisions**

Leaders are responsible for following up decisions they take by actual
implementation. Decision should not be considered final unless it is
actually implemented or documented publicly.

**Disagreements**

Leaders of the project should always strive for consensus. If that is not
possible the leader taking a decision should alert the Invenio product manager
prior to taking the decision.

Members who are disagreeing with a decision may ask the product manager to
review a specific decision and possible change it.

Members who are disagreeing with the Invenio product manager may escalate the
product manager's decision to their hierarchy at CERN.

Appointments
------------
The Invenio product manager is appointed by CERN. Architects, coordinators and
maintainers are appointed by the Invenio product manager in collaboration with
existing architects and coordinators.

Maintainers are appointed by the architects (e.g. a new Invenio module) or
coordinators (e.g. a new special interest group).

In general, appointments are made in an informal way, and usually anyone
volunteering that have been showing commitment to the project will get
appointed. Any member can volunteer or suggest other members for roles.

**Revoking of appointed roles**

The product manager may revoke appointed roles of a member for reasons such as
(but not limitied to):

- lack of activity
- violations of the code of conduct
- repeated infringements of the contribution, style or maintainer guides.

The product manager must give a warning to the member to allow them to correct
their behavior except in severe cases. Revoking roles should be a last measure,
and only serve the purpose to ensure that Invenio has a healthy community and
collaboration based on our :ref:`code-of-conduct`.

Working/Interest groups
-----------------------
Working/interest groups may be set up by the product manager on request of any
group of members who wish to address a particular area of Invenio (say MARC21
support or research data management). Working/interest groups help coordinate
the overall vision, strategy and architecture of a specific area of Invenio.
Each working/interest group must have chair that reports to the product
manager.
