////
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.

[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:

* link:https://www.apache.org/dev/new-committers-guide.html[Apache Committer Guide]
* link:http://www.apache.org/dev/committers.html[Apache Committer FAQ]
* link:https://tinkerpop.apache.org/docs/current/dev/developer/[TinkerPop Developer Documentation]
** Bring specific attention to the "committer" section which describes our general policies.

== 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. Provide
the board 72 hours to respond with objection before extending the invite to the new PMC member. Once that time has
elapsed, 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 maybe 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. The report has the
following format:

[source,text]
----
## Description:
 Apache TinkerPop is a graph computing framework for both graph databases
 (OLTP) and graph analytic systems (OLAP).

## Activity:
 <discuss general project health, project direction, community growth/activity, etc.>

## Issues:
 There are no issues requiring board attention at this time.

## Releases:
 - x.y.z (<month> <day>, <year>)
 - x.y.z (<month> <day>, <year>)

## PMC/Committer:

 - Last PMC addition was <name> - <month> <year>
 - Last committer addition was <name> - <month> <year>

## Links

[1] <hyperlink to external reference, if a reference was made in the report>
----

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 should be sent in plain-text format to `board@apache.org` and should be
committed to the appropriate meeting agenda in SVN at:

[source,text]
https://svn.apache.org/repos/private/foundation/board

