---
layout: default
title: Governance
---

The Tulsi project is led by a core group of contributors, initially Googlers,
and managed by the community. The group of core contributors is self-managing -
core contributors are added by two supporting votes from core contributors on
the mailing list and no veto within four business days. We expect that new
contributors will submit a number of patches before they become core
contributors.

## Accepting Contributions

Please also see our [contribution guidelines](contributing.html).

### Policy

We use the following rules for accepting code contributions. This is written
from the perspective that there is a group of people who cooperatively support
the project (the *core contributors*). In contrast, external contributors are
not actively supporting the project, but just contributing individual changes.
At this time, all core contributors work for Google (see below for the full
list), but this will hopefully change over time.

1. We require all contributors to sign [Google's Contributor License
   Agreement](https://cla.developers.google.com/).

1. We accept well-written, well-tested contributions.

1. We accept well-written, well-tested bug fixes.

1. We accept well-written, well-tested feature contributions if a core
   contributor assumes support responsibilities, i.e., readily answers support
   questions and works on bugs. This includes feature contributions from
   external contributors. If there is no core contributor to support a feature,
   then we will deprecate and subsequently delete the feature - we will give
   three months' notice in such cases.

1. We will not accept untested changes, except in very rare cases.

1. We require a pre-commit code review from a core contributor for all changes.

1. We will roll back changes if they break the internal development processes of
   any of the core contributors.

1. We will move towards an open governance model where multiple parties have
   commit access, roll-back rights, and can provide explicit support for
   features or rules.

### Core Contributors

Contact the core team at <a href="mailto:tulsi-dev@googlegroups.com">
tulsi-dev@googlegroups.com</a>.

The current group is:

 - [abaire](https://github.com/abaire)
 - [dmaclach](https://github.com/dmaclach)
 - [thomasvl](https://github.com/thomasvl)
