////
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements.  See the NOTICE file
distributed with this work for additional information
regarding copyright ownership.  The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License.  You may obtain a copy of the License at

  http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied.  See the License for the
specific language governing permissions and limitations
under the License.
////
= Administration

== New Committers

When a candidate is identified by a PMC member as someone who might be a good official committer to TinkerPop, the
PMC member should open a DISCUSS thread on the private TinkerPop mailing list.  The thread should provide some
background and reasoning for why that member believes the candidate would be a good committer.  Given enough time for
feedback on the candidate and presuming there is still positive interest in doing so, a VOTE thread on the private
TinkerPop mailing list is started to get the official stance.  As per usual, the VOTE will be made open for no less
than 72 hours.

If the VOTE closes with a successful positive vote to make the candidate a committer, then send the following email
to the candidate and copy the private TinkerPop mailing list:

[source,text]
----
SUBJECT: Invitation to become TinkerPop committer: [candidate name]

Hello,

The TinkerPop Project Management Committee (PMC) hereby offers you committer
privileges to the project. These privileges are offered on the understanding
that you'll use them reasonably and with common sense. We like to work on
trust rather than unnecessary constraints.

Being a committer enables you to more easily make changes without needing to
go through the patch submission process.

Being a committer does not require you to participate any more than you already
do. It does tend to make one even more committed.  You will probably find that
you spend more time here.

Of course, you can decline and instead remain as a contributor, participating
as you do now.

A. This personal invitation is a chance for you to accept or decline in
private.  Either way, please let us know in reply to the
private@tinkerpop.apache.org address only.

B. If you are accepting, the next step is to register an iCLA with the Apache
Software Foundation:
  1. Details of the iCLA and the forms are found through this link:
     http://www.apache.org/licenses/#clas.

  2. The form (text or PDF version) provides instructions for its completion
     and return to the Secretary of the ASF at secretary@apache.org.

  3. When you complete iCLA ensure that you include "Apache TinkerPop" in the
     "notify project" project field and choose a preferred unique Apache id.
     Look to see if your preferred id is already taken at
     http://people.apache.org/committer-index.html. This will allow the
     Secretary to notify the PMC when your iCLA has been recorded.

When recording of your iCLA is noticed, you will receive a follow-up message
with the next steps for establishing you as a committer.
----

Assuming the iCLA included items from step 3, the secretary will handle account creation, otherwise it will be up to
the PMC chair to link:http://www.apache.org/dev/pmc.html#newcommitter[handle such things]. Once the account is
established the PMC chair will then need to:

. Validate that the iCLA is on file either through link:https://svn.apache.org/repos/private/foundation/officers/[svn]
or through link:http://people.apache.org/committer-index.html[people.apache.org].
. Request that the account be created. The PMC Chair may do this through the link:https://whimsy.apache.org/officers/acreq[Account Request Form].
. Once verified, provide the new committer access to the repository, which is most easily done through
link:https://whimsy.apache.org/roster/committee/[Whimsy].
. Send an announcement email to the developer and user mailing lists with the template below.
. Update JIRA to include this person in the "committers" group.

[source,text]
----
SUBJECT: New Committer: [committer name]

The Project Management Committee (PMC) for Apache TinkerPop has asked
[committer name] to become a committer and we are pleased to announce their
acceptance.

[describe the nature of the committer's work in the community]

Being a committer enables easier contribution to the project since there is no
need to work via the patch submission process. This should enable better
productivity.
----

Finally, new committers should be sent an email that covers some of the administrative elements of their new role.
Generally speaking the email can largely just point them to the <<initial-setup,Initial Setup>> section of this
documentation.

== New PMC Members

The process for bringing on new PMC members is not so different from the one for new committers. The process begins
with a DISCUSS thread to the private mailing list for building consensus followed by a VOTE thread to confirm.
Presuming the new PMC member is a committer already (which is mostly likely for TinkerPop), there should be no need for
any additional paperwork. On successful vote however, a NOTICE should be sent to the board@apache.org (copying
private@tinkerpop.apache.org):

[source,text]
----
SUBJECT: [NOTICE] [name of PMC new member] for Apache TinkerPop PMC

Apache TinkerPop proposes to invite [name of PMC new member] ([ApacheId]) to join the PMC.

The vote result is available here:

[include the link to the vote result thread from private]
----

If the candidate does not (yet) have an Apache account, then please note that fact in the notification email.
It is important to verify that this NOTICE was actually included in the
link:https://mail-search.apache.org/members/private-arch/board[board archive] to ensure that is has been delivered to the board.
After verifying this, the invite may be sent to the new PMC member. The following template may be used for the invitation (be sure
to copy private@ when sending the email):

[source,text]
----
SUBJECT: Invitation to join the Apache TinkerPop PMC: [name of PMC new member]

In recognition of your contributions to Apache TinkerPop, the TinkerPop PMC has voted to make you a PMC member. If you are unfamiliar with what the PMC does, please see this link to be sure you are comfortable with the responsibilities:

https://www.apache.org/dev/pmc.html

As you have already signed an ICLA and have an Apache account no additional paperwork is required by you other than replying to this email (ensuring to include private@ which is CC'd) to say if you accept or reject the invitation. Obviously there is no requirement to accept - you may simply choose to continue working in the capacity of a committer as you are now. We're happy to answer any questions you might have.

Thank you for your efforts on the project.
----

If they accept, then the PMC chair should refer to the
link:http://www.apache.org/dev/pmc.html#newpmc[How to Add a New PMC Member] section in the Apache docs for how to
complete the process. Use link:https://whimsy.apache.org/roster/committee/[Whimsy] to update PMC membership.

== Board Reports

The PMC Chair is responsible for submitting a link:http://www.apache.org/foundation/board/reporting[report to the board]
on a quarterly basis. TinkerPop reports on the following months: January, April, July, October.

A draft of the report should be sent to the TinkerPop developer mailing list for review at least three days prior to
submitting to the board. The final report can be submitted via link:https://whimsy.apache.org/board/agenda/[Whimsy] or
via the link:https://reporter.apache.org[Apache Reporter Service] which already provides a template for the report and
explains the different sections.

[[contributor-listing]]
== Contributor Listing

Contributions can come in <<ways-to-contribute,many forms>> and extend well beyond code contributions. TinkerPop
strives to ensure that contributions are honestly and accurately recognized for the benefit of the individuals who
help make TinkerPop possible.

One of the ways in which this recognition is supported is by way of the
link:https://tinkerpop.apache.org/#contributors[Contributor Listing] on the TinkerPop home page, which list those who
have contributed to the project in some way. It lists both committers and PMC members and provides a short "bio"
(i.e. a description of their contributions) as well as an indication of whether they are currently participating in
the project or not, i.e. active or inactive.  The bios have a slightly different form depending on that status:

* An _active_ bio should be reflective of current contributions, roughly representing the past six months and the
following six months of the update.
* An _inactive_ bio for those not currently contributing to the project, should reflect the full scope of all
contributions made by that individual during their active periods.

IMPORTANT: Irrespective of being active or inactive, the contributor's name and tenure accomplishments remain present
on the front page of the web site. Being "inactive" does *not* affect the contributors status as an Apache committer or
PMC member - that remains unchanged. Should a contributor become "inactive" at some point, there is no special process
to become "active" again - they simply update their bio to do so.

Committers and PMC members can keep this information up to date themselves as they have direct access to the Git
repository. Reminders to update this information will be sent to the dev list on each release as part of code freeze
week. Those who have not shown an update to their bio in git in the past year or have otherwise not replied to the dev
list email to indicate their status in that time will be assumed "inactive" for the purpose of the listing.

The following is a template for the "Bio Update" email:

[source,text]
----
Subject: Apache TinkerPop Bio Update

To Committers/PMC Members,

As an Apache TinkerPop committer and/or PMC member, your name is listed on the TinkerPop home page in the Contributor List[1] with your "bio". If you are active on the project, your "bio" reflects what you have been working on and what you expect to be working on with respect to TinkerPop for recent times (i.e. for the previous six months and the following six months). If you are currently inactive on the project, your "bio" reflects the full scope of all your contributions throughout your active periods. You can refer to the contributor listing policy[2] for full details.

Please take a moment to update your bio directly in Git[3] or, if you would prefer, please reply to this email with your bio update and it will be added for you. If no changes are required, please reply to this email to confirm that this is the case.

[1] https://tinkerpop.apache.org/#contributors
[2] https://tinkerpop.apache.org/docs/current/dev/developer/#contributor-listing
[3] https://github.com/apache/tinkerpop/blob/master/docs/site/home/index.html
----
