|
| 1 | +.. _governance: |
| 2 | + |
| 3 | +============================== |
| 4 | +Governance and Decision Making |
| 5 | +============================== |
| 6 | + |
| 7 | +Abstract |
| 8 | +======== |
| 9 | + |
| 10 | +Nibabel is a consensus-based community project. Anyone with an interest in the |
| 11 | +project can join the community, contribute to the project design, and |
| 12 | +participate in the decision making process. This document describes how that |
| 13 | +participation takes place, how to find consensus, and how deadlocks are |
| 14 | +resolved. |
| 15 | + |
| 16 | +Roles And Responsibilities |
| 17 | +========================== |
| 18 | + |
| 19 | +The Community |
| 20 | +------------- |
| 21 | + |
| 22 | +The Nibabel community consists of anyone using or working with the project |
| 23 | +in any way. |
| 24 | + |
| 25 | +Contributors |
| 26 | +------------ |
| 27 | + |
| 28 | +Any community member can become a contributor by interacting directly with the |
| 29 | +project in concrete ways, such as: |
| 30 | + |
| 31 | +- proposing a change to the code or documentation via a GitHub pull request; |
| 32 | +- reporting issues on our |
| 33 | + `GitHub issues page <https://github.com/nipy/nibabel/issues>`_; |
| 34 | +- discussing the design of the library, website, or tutorials on the |
| 35 | + `mailing list <https://mail.python.org/mailman/listinfo/neuroimaging>`_, |
| 36 | + or in existing issues and pull requests; or |
| 37 | +- reviewing |
| 38 | + `open pull requests <https://github.com/nipy/nibabel/pulls>`_, |
| 39 | + |
| 40 | +among other possibilities. By contributing to the project, community members |
| 41 | +can directly help to shape its future. |
| 42 | + |
| 43 | +Contributors should read the :ref:`contributor_guide` and our :ref:`code_of_conduct`. |
| 44 | + |
| 45 | +Core Developers |
| 46 | +--------------- |
| 47 | + |
| 48 | +Core developers are community members that have demonstrated continued |
| 49 | +commitment to the project through ongoing contributions. They |
| 50 | +have shown they can be trusted to maintain Nibabel with care. Becoming a |
| 51 | +core developer allows contributors to merge approved pull requests, cast votes |
| 52 | +for and against merging a pull request, and be involved in deciding major |
| 53 | +changes to the API, and thereby more easily carry on with their project related |
| 54 | +activities. Core developers appear as team members on the `Nibabel Core Team |
| 55 | +page <https://github.com/orgs/nipy/teams/nibabel-core-developers/members>`_ and |
| 56 | +can be messaged ``@nipy/nibabel-core-developers``. We expect core developers to |
| 57 | +review code contributions while adhering to the :ref:`core_dev`. |
| 58 | + |
| 59 | +New core developers can be nominated by any existing core developer. Discussion |
| 60 | +about new core developer nominations is one of the few activities that takes |
| 61 | +place on the project's private management list. The decision to invite a new |
| 62 | +core developer must be made by “lazy consensus”, meaning unanimous agreement by |
| 63 | +all responding existing core developers. Invitation must take place at least |
| 64 | +one week after initial nomination, to allow existing members time to voice any |
| 65 | +objections. |
| 66 | + |
| 67 | +.. _steering_council: |
| 68 | + |
| 69 | +Steering Council |
| 70 | +---------------- |
| 71 | +The Steering Council (SC) members are core developers who have additional |
| 72 | +responsibilities to ensure the smooth running of the project. SC members are |
| 73 | +expected to participate in strategic planning, approve changes to the |
| 74 | +governance model, and make decisions about funding granted to the project |
| 75 | +itself. (Funding to community members is theirs to pursue and manage.) The |
| 76 | +purpose of the SC is to ensure smooth progress from the big-picture |
| 77 | +perspective. Changes that impact the full project require analysis informed by |
| 78 | +long experience with both the project and the larger ecosystem. When the core |
| 79 | +developer community (including the SC members) fails to reach such a consensus |
| 80 | +in a reasonable timeframe, the SC is the entity that resolves the issue. |
| 81 | + |
| 82 | +Steering Council members appear as team members on the `Nibabel Steering |
| 83 | +Council Team page |
| 84 | +<https://github.com/orgs/nipy/teams/nibabel-steering-council/members>`_ and |
| 85 | +can be messaged ``@nipy/nibabel-steering-council``. Core |
| 86 | + |
| 87 | +Decision Making Process |
| 88 | +======================= |
| 89 | + |
| 90 | +Decisions about the future of the project are made through discussion with all |
| 91 | +members of the community. All non-sensitive project management discussion takes |
| 92 | +place on the project |
| 93 | +`mailing list <https://mail.python.org/mailman/listinfo/neuroimaging>`_ |
| 94 | +and the `issue tracker <https://github.com/nipy/nibabel/issues>`_. |
| 95 | +Occasionally, sensitive discussion may occur on a private list. |
| 96 | + |
| 97 | +Decisions should be made in accordance with our :ref:`mission_and_values`. |
| 98 | + |
| 99 | +Nibabel uses a *consensus seeking* process for making decisions. The group |
| 100 | +tries to find a resolution that has no open objections among core developers. |
| 101 | +Core developers are expected to distinguish between fundamental objections to a |
| 102 | +proposal and minor perceived flaws that they can live with, and not hold up the |
| 103 | +decision making process for the latter. If no option can be found without |
| 104 | +an objection, the decision is escalated to the SC, which will itself use |
| 105 | +consensus seeking to come to a resolution. In the unlikely event that there is |
| 106 | +still a deadlock, the proposal will move forward if it has the support of a |
| 107 | +simple majority of the SC. Any proposal must be described by a Nibabel :ref:`biap`. |
| 108 | + |
| 109 | +Decisions (in addition to adding core developers and SC membership as above) |
| 110 | +are made according to the following rules: |
| 111 | + |
| 112 | +- **Minor documentation changes**, such as typo fixes, or addition / correction |
| 113 | + of a sentence (but no change of the Nibabel landing page or the “about” |
| 114 | + page), require approval by a core developer *and* no disagreement or |
| 115 | + requested changes by a core developer on the issue or pull request page (lazy |
| 116 | + consensus). We expect core developers to give “reasonable time” to others to |
| 117 | + give their opinion on the pull request if they’re not confident others would |
| 118 | + agree. |
| 119 | + |
| 120 | +- **Code changes and major documentation changes** require agreement by *one* |
| 121 | + core developer *and* no disagreement or requested changes by a core developer |
| 122 | + on the issue or pull-request page (lazy consensus). |
| 123 | + |
| 124 | +- **Changes to the API principles** require a :ref:`biap` and follow the |
| 125 | + decision-making process outlined above. |
| 126 | + |
| 127 | +- **Changes to this governance model or our mission and values** require |
| 128 | + a :ref:`biap` and follow the decision-making process outlined above, *unless* |
| 129 | + there is unanimous agreement from core developers on the change. |
| 130 | + |
| 131 | +If an objection is raised on a lazy consensus, the proposer can appeal to the |
| 132 | +community and core developers and the change can be approved or rejected by |
| 133 | +escalating to the SC, and if necessary, a BIAP (see below). |
| 134 | + |
| 135 | +.. _biap: |
| 136 | + |
| 137 | +Enhancement Proposals (BIAPs) |
| 138 | +============================= |
| 139 | + |
| 140 | +Any proposals for enhancements of Nibabel should be written as a formal BIAP |
| 141 | +following the template :doc:`biap-template`. The BIAP must be made public and |
| 142 | +discussed before any vote is taken. The discussion must be summarized by a key |
| 143 | +advocate of the proposal in the appropriate section of the BIAP. Once this |
| 144 | +summary is made public and after sufficient time to allow the core team to |
| 145 | +understand it, they vote. |
| 146 | + |
| 147 | +The workflow of a BIAP is detailed in :ref:`biap0`. |
| 148 | + |
| 149 | +A list of all existing BIAPs is available :ref:`here <biap_list>`. |
| 150 | + |
| 151 | +Acknowledgments |
| 152 | +=============== |
| 153 | + |
| 154 | +Many thanks to Jarrod Millman, Dan Schult and the Scikit-Image team for the |
| 155 | +`draft on which we based this document |
| 156 | +<https://networkx.github.io/documentation/latest/developer/nxeps/nxep-0001.html>`_. |
0 commit comments