.. _OEP-54 Core Contributors:

OEP-54: Core Contributors
#########################

.. list-table::
   :widths: 25 75

   * - OEP
     - :ref:`OEP-54 <OEP-54 Core Contributors>`
   * - Title
     - Core Contributor Program
   * - Last Modified
     - 2023-11-28
   * - Authors
     - Sarina Canelake <sarina@axim.org>
       Edward Zarecor <ezarecor@axim.org>
   * - Arbiter
     - Xavier Antoviaque <xavier@opencraft.com>
   * - Status
     - Accepted
   * - Type
     - Process
   * - Created
     - 2021-12-20
   * - Review Period
     - 2022-01-05 - 2022-02-01

.. contents::
   :local:
   :depth: 3


Abstract
********

This document defines the Core Contributor (CC) Program, a program that grants
rights to individuals in the Open edX community that allow them to actively
participate in defining and deciding the direction of the platform.

Motivation
**********

The Open edX project benefits from a wide variety of perspectives at all levels.
Having an inclusive group of people participating in the project and helping to
shape its direction will lead to a more vibrant platform ecosystem that fosters
stronger innovative collaboration within the Open edX community, increased
velocity that accelerates platform advancement, and increased capacity to own
and maintain all aspects of the platform.

Specification
*************

The Open edX Core Contributor Program grants specific types of access rights to
Open edX community members, which enables them to further the development and
adoption of the Open edX platform. CCs earn these rights by sustained, active
participation in the Open edX community and by following the “3 Cs”: Commitment,
Conduct, Caliber. Core Contributors follow the `Code of Conduct`_, are
respectful of other community members, are polite and welcoming to all in the
community, and have shown the ability to deliver high quality work over time.

Core Contributor Roles
======================

There are many contributors to the Open edX platform that participate in a
variety of ways - writing code for the Open edX software, translating the
project, performing Quality Assurance tasks, participating in the Marketing
working group, writing documentation, and more. At the time of writing we have
identified the following roles: Project Manager, Translation Lead, Code
Contributors, Forum Moderators, UI/UX Designers, Marketing Team Members,
Documentation Writers, QA, and Product Managers.

All CCs are granted some Rights to the project as part of participating - the
ability to merge code, the final say on marketing copy, etc. In exchange for
these Rights to contribute, we ask that CCs abide by their Responsibilities. For
more on the CC roles, and Rights & Responsibilities, see `Core Contributor Role
Definitions <https://openedx.atlassian.net/wiki/spaces/COMM/pages/2759460357/Core+Contributor+Role+Definitions>`_.

Note that roles vary in what they need from members; the wiki will be the most
up to date source of what each role entails and what types of commitments are
expected.

.. _program administration:

Core Contributor Program Administration
=======================================

The Core Contributor Program is administered by Axim Collaborative.
One or more persons at Axim (the "Program administrator(s)")
work with the community to make sure the program runs smoothly: this entails
facilitating communication amongst community members, `selecting new members`_,
and ensuring that existing members renew their commitment to the community and
abide by the Code of Conduct. Program administrators are empowered to monitor
Core Contributor conduct, particularly whether they follow the "3 Cs"
(Commitment, Conduct, Caliber), and may issue reminders, suspensions, and even
removal from the Program. `Contact the Program Administrators`_ as needed.

The Axim administrator(s) are the point people for making sure that needed
agreements are signed. Foremost, this is a Program Agreement between the CC and
Axim (sent to you by a Program Administrator). Additionally, if the CC commits
code to a GitHub repo, a CLA is needed (which should have been signed when you
made your first PR). Finally, for new companies or organizations joining the
community, an Entity Contributor Agreement must be signed (please communicate
with a Program Administrator about this).

We are additionally asking that all companies and teams joining the Open edX
community sign the `Declaration of Commitment to the Core Contributor
Program`_ to
demonstrate that they are willing to engage with and commit resources to the
Open edX project. We encourage a commitment of 20 hours/month from each of an
organization's Core Contributors, however, we recognize that circumstances
differ and a different commitment may be more appropriate. Before signing the
agreement, please `Contact the Program Administrators`_ to discuss.

The scope of the work or contributions considered as part of the Core
Contributors duties, and counted towards an organization's commitments, is
defined at
`<https://openedx.atlassian.net/wiki/spaces/COMM/pages/3593502844/Core+Contributor+-+Work+Scope>`_

Questions about the Program can be directed to the Axim administrator(s) via
the ``#core-contributors`` Slack room in the `Open edX Slack
<https://openedx.slack.com/>`_.

Renewing Organizational and Personal Commitments
------------------------------------------------

The Program Administrators will conduct a yearly commitment renewal for both
organizations and individuals participating in the Core Contributor program.

Organizations will be asked to affirm and/or revise their commitment in the
`Declaration of Commitment to the Core Contributor Program`_ each year in December,
for the following calendar year (January through December).

Individuals will be asked to affirm their continued commitment to and
involvement in the program each year in January, for the following calendar year
(February through January). Individuals who are unable to affirm their
commitment will be removed from the program as described in `removing ccs`_, and
are more than welcome to re-join the Program if and when their time allows them
to.

.. _Declaration of Commitment to the Core Contributor Program: https://openedx.atlassian.net/wiki/spaces/COMM/pages/3216900524

.. _selecting new members:

Adding New Core Contributors
============================

New Core Contributors are determined via a nomination process - CCs may nominate
new members, or existing community members may put themselves forward for a
role.

Current CCs should always be on the lookout for contributors who demonstrate the
"3 Cs" (Commitment, Conduct, and Caliber), follow the `Code of Conduct`_, are
respectful of other community members, are polite and welcoming to all in the
community, and have been an overall active community member for some time. When
a person like this comes to the attention of a CC, the CC should reach out and
ask if that person would like to be nominated as a CC.

Community members who feel they fit these criteria listed above should feel
empowered to nominate themselves, as well.

Note that when a new Core Contributor role is being defined and piloted,
however, nominations should proceed only once the Program Administrator is
confident that new Core Contributors in that role can be supported. `Contact the
Program Administrators`_ when there is any uncertainty around the status of the
role.

At times, the Core Contributor program may suspend accepting new members, when
there is insufficient support for additional people in a given role. Program
Administrators will indicate this by posting in the `Core Contributors
discussion category
<https://discuss.openedx.org/c/working-groups/core-contributors/36>`_.

.. _new cc process:

New Core Contributor Nomination Process
---------------------------------------

The process for nomination is as follows:

#. An existing CC ("sponsor") chooses to nominate a community member ("sponsored
   candidate") for a new CC position (if they already hold a CC position, they
   should still be nominated for a new role). A current community member
   ("organic candidate") may also decide to put themselves forth for nomination.

#. The sponsor or organic candidate posts a new public nomination thread on
   Discourse, in the `Core Contributor discussion space
   <https://discuss.openedx.org/c/working-groups/core-contributors/36>`_ (one
   nomination thread per candidate, per role).

   #. This post introduces the candidate and describes in a few paragraphs why
      they are suited to join the program. Core Contributors in any role must
      demonstrate the "3C's" prior to joining the program, thus, the nomination
      thread must explain how the candidate has done so. This will include
      providing links to examples of previous Open edX work (for example, pull
      requests) that has been done for the community (as opposed to work done
      for a specific installation, that has not been contributed back to the
      larger community).

   #. The post should also indicate the candidate's expected commitment to
      contribution - if the candidate is part of an organization, this should be
      covered as part of the organization's signature to the Declaration of
      Commitment to the Core Contributor Program, as covered in the `program
      administration`_ section.

   #. This post should tag the maintainer(s) for the candidate repo(s) if they
      exist.

   #. Finally, the post must mention the date when the comment period ends,
      which is at least 2 weeks from the start of the thread. Please be mindful
      of times such as holiday breaks where people may have limited
      availability.

#. The sponsor or organic candidate posts a link to the Discourse post in the
   ``#core-contributors`` Slack room, as well as any other Slack rooms relevant
   to the CC role being discussed (for example, repo-specific rooms for coding
   contributors, translation team rooms, etc). **The messages must indicate the
   dates of the comment period.**

#. During the comment period, other CCs should weigh in on the thread. Core
   contributor posts should conclude with a definitive "yes" or "no" vote.
   While comments and support from the entire community are welcome, for the
   purposes of this process, CCs are the only authorized voters.  "Liking" the
   nomination post does not count as a vote.

   #. Any Core Contributor may vote on any CC nomination, regardless
      of their contributor role.

   #. In the case of Core Contributor nominations that involve granting commit
      access to repos, anyone who has commit access to any of the repos in
      question may also vote.

   #. All community members are welcome to provide comments on the thread.

   #. CoC violations or other behaviors not upholding the "Conduct" quality of
      the 3 Cs ought to be raised by anyone, whether in the Discourse thread or
      to the Program Admins.

   #. If anyone has concerns they feel cannot be raised publicly, they should
      `Contact the Program Administrators`_ to determine how to proceed. The
      Administrators should discuss the concerns and try to figure out a way the
      person could post those concerns themselves; if they cannot, the
      Administrators should post an anonymized version of the concerns on the
      Discourse thread.

   #. For those leaving a "no" vote: Remember to leave constructive criticism! A
      "no" vote should be interpreted as "candidate isn't ready yet". In this
      case, provide some tips as to how they could make it into the program. And
      please err on the side of leaving that feedback, rather than not replying
      at all. A good way to deliver this feedback is "Thank you for contributing
      to the Open edX community. However, I feel you are not quite ready for
      this role, for <reasons>. Some ways you could address these are <action
      items>"

#. Over the course of the comment period, the sponsor, sponsored candidate, or
   organic candidate should respond to all concerns that come in. It may also be
   necessary to periodically nudge other CCs to respond to the thread.

   #. At any time, the candidate may choose to withdraw from the process. The
      candidate should leave a note on the thread, and close it if they wish.

#. At the end of the comment period, a candidate is approved if there are at
   least 5 (five) affirmative "yes" votes from current CCs, and zero "no" votes.

   #. For sponsored candidates, the sponsor themselves counts as an implicit
      "yes" vote, if the sponsor is a current Core Contributor.

   #. Candidates coming from an organization must have support from someone
      outside their organization. This can be done by having a sponsor from
      outside their organization, or by receiving at least one "yes" vote from
      someone outside their organization. This is to ensure that core
      contributors are evaluated on their ability to communicate with the
      community, outside of their org.

   #. For roles with few existing members, it is encouraged to ask CCs of other
      roles to help evaluate the candidate.

#. If the candidate is approved, the candidate should follow the procedures
   outlined in the `onboarding runbooks
   <https://openedx.atlassian.net/wiki/spaces/COMM/pages/3359342743/Participant+Administrator+Runbooks>`_
   to get the access they need for their role.

#. If the candidate has not been approved, the sponsor (or Program
   Administrator, in the case of organic candidates) should discuss with the
   candidate what they need to work on to become a CC. We encourage the
   sponsor/Administrator to help the candidate develop a plan of action so that
   they can be successful in the future.

.. _expanding cc rights:

Expansion of Core Contributor Responsibilities
----------------------------------------------

Certain Core Contributor roles have multiple types of responsibilities, and a
given Core Contributor may only hold a subset of these. For example, a CC with
commit rights generally holds commit rights for only some of the 150+
``openedx`` code and document repositories.

Expanding a CC's responsibilities should follow the same process as establishing
a new contributor, although in most cases, the comment period need only be one
week. Here's an example of a `simple rights expansion for one existing CC`_.
In addition, for newly created repositories or similar situations, a
single forum thread can be used to nominate several existing CCs at once, provided they
already hold similar responsibilities (e.g. proposing several people who are
already coding CCs to get commit rights for a new repo). Here's an example
of a `bulk rights expansion for multiple contributors`_ who were already experienced
coding CCs.

However, in cases where the new responsibilities are greatly different
from the responsibilities currently held (for example, a coding contributor
having previously held only backend repo commit rights asking for permission to
a ``frontend-*`` repo), consider making the comment period the full 2 weeks,
and use a separate thread for each individual as usual.


.. _simple rights expansion for one existing CC: https://discuss.openedx.org/t/coding-cc-rights-expansion-jhony-avella/9638
.. _bulk rights expansion for multiple contributors: https://discuss.openedx.org/t/cc-rights-expansion-to-enable-raccoongang-to-maintain-frontend-component-cookie-policy-banner/10828

Where Do I Start?
-----------------

New community members interested in the Core Contributor program should `get in
touch with us! <https://open.edx.org/community/connect/>`_ First check out the
`discussion forums <https://discuss.openedx.org/>`_; there are a lot of
different categories, and we encourage new members to spend some time in the
forums, reading through to understand what's going on and jumping in to ask
questions.  The ``#core-contributors`` room in `Open edX Slack
<https://openedx.slack.com/>`_ can help guide people towards others working in
their area(s) of interest. For those joining Slack for the first time, `here's
an invite <http://openedx.org/slack>`_.

Existing community members who have a record of contributing to the Open edX
project should feel free to reach out to `current CCs
<https://openedx.atlassian.net/wiki/spaces/COMM/pages/3156344833/Current+Open+edX+Core+Contributors>`_
who have the role they're interested in. Engaging in conversation to see what
it's like to be that type of CC is invaluable. CCs might even be able to take a
look at work the community member has done, however, CCs may be pretty
overloaded, so offense shouldn't be taken if someone doesn't have time at that
moment to help.

If you don't know where to begin, try `joining a working group
<https://openedx.atlassian.net/wiki/spaces/COMM/pages/46793351/Working+groups>`_
- working groups may have tasks you can pick up to start showing off your
skills. Start participating on the `discussion forums
<https://discuss.openedx.org/>`_; some working groups have an active presence
there, and you'll get a chance to hone your Open edX expertise by answering
questions. And finally, you can find core contributors and ask questions about
the program and your interests directly either in the `Core Contributors
discussion category
<https://discuss.openedx.org/c/working-groups/core-contributors/36>`_ or in the
``#core-contributors`` room on Slack.

.. _removing ccs:

Removing Core Contributors
==========================

Occasionally, it may become necessary to remove an individual from the Core
Contributor program. Some reasons this may happen include:

* A CC leaves the project or changes employment and does not wish to continue
  participating
* A CC does not have the time or interest to continue in the role
* A CC is not fulfilling the responsibilities of the role
* A CC is not upholding the standards of the community

Trigger events for removing a CC would be:

* A CC informs the Program Administrators that they can no longer continue in
  the role, or are unable to renew their commitment for a given year
* A CC has not been able to fulfill the commitments made in the
  `Declaration of Commitment to the Core Contributor Program`_,
  or has been unreachable, for more than 6 months. See
  `fulfilling CC commitments`_
* A CC hasn't met project quality standards consistently despite feedback
* A CC has consistently shown poor judgement, such as merging PRs without
  due consideration or addressing outstanding concerns
* A CC has violated the project `Code of Conduct`_

For those wishing to indicate they are leaving the CC program, or to report a
Code of Conduct violation, please `Contact the Program Administrators`_.

Core Contributors who depart from the program are noted as Core Contributor
Alumni in the Core Contributor wiki page.

.. _fulfilling CC commitments:

Core contributors are responsible for reporting when they aren't able to
fulfill their commitments. Program administrators
will do regular checks, once per year, to identify CCs who are
unreachable or fall short of their commitments. In such cases, the program
administrator will reach out to the CC to discuss the best corrective actions
to take.

In case there is no reply, the inactive CC would be removed for security
reasons. Removed CCs may get in touch with Program Administrators to
fast-track getting their access back.

Contact the Program Administrators
==================================

Questions about the Program can be directed to the Axim administrator(s) via
the ``#core-contributors`` Slack room in the `Open edX Slack
<https://openedx.slack.com/>`_ or at ``cc-program-admins@axim.org``.

Appendix: What Are The 3 C's
****************************

The "3 Cs" (Commitment, Conduct, and Caliber) are the guiding principles of the
Core Contributor program. We expect all Core Contributors to exemplify these
values every day.

Change History
**************

2025-09-17
==========

* Clarify that the sponsor is a "yes" vote

2023-11-28
==========

* Add "3 C's" appendix.
* Update outdated wiki link.


2023-11-28
==========

* Clarify that CCs are the voters in this process and that 5 CC votes are
  required.


2023-02-20
==========

* Establish a streamlined process for assigning existing CCs to a newly created
  repo.

2022-07-18
==========

* Clarify that CC nominations must provide supporting evidence that candidate
  has demonstrated the 3C's
* `Pull request #355 <https://github.com/openedx/openedx-proposals/pull/355>`_

2022-06-08
==========

* Add link to the runbooks guide for onboarding new CCs
* `Pull request #335 <https://github.com/openedx/openedx-proposals/pull/335>`_

2022-02-28
==========

* Elaborate on CC's responsibilities to fulfill their commitment
* `Pull request #304 <https://github.com/openedx/openedx-proposals/pull/304>`_

2022-02-16
==========

* Added clarifications around the voting process for new CC members.
* `Pull request #293 <https://github.com/openedx/openedx-proposals/pull/293>`_

2022-02-11
==========

* Specify how to expand responsibilities for roles with fine-grained permissions
  (such as code committers)
* `Pull request #296 <https://github.com/openedx/openedx-proposals/pull/296>`_

2022-02-04
==========

* Procedures to remove CCs added.
* `Pull request #292 <https://github.com/openedx/openedx-proposals/pull/292>`_

2021-12-20
==========

* Document created.
* `Pull request #275 <https://github.com/openedx/openedx-proposals/pull/275>`_

.. _Code of Conduct: https://openedx.org/code-of-conduct/
