---
title: "Code of Conduct"
permalink: codeofconduct.html
hide_sidebar: true
hide_navtoggle: true
toc: false
---

## Our Pledge

In the interest of fostering an open and welcoming environment, we as
contributors and maintainers pledge to making participation in our project and
our community a harassment-free experience for everyone, regardless of age, body
size, disability, ethnicity, gender identity and expression, level of
experience, education, socio-economic status, nationality, personal appearance,
race, religion, or sexual identity and orientation.

## Our Standards

Examples of behavior that contributes to creating a positive environment
include:

- Using welcoming and inclusive language
- Being respectful of differing viewpoints and experiences
- Gracefully accepting constructive criticism
- Focusing on what is best for the community
- Showing empathy towards other community members

Examples of unacceptable behavior by participants include:

- The use of sexualized language or imagery and unwelcome sexual attention or
  advances
- Trolling, insulting/derogatory comments, and personal or political attacks
- Public or private harassment
- Publishing others’ private information, such as a physical or electronic
  address, without explicit permission
- Other conduct which could reasonably be considered inappropriate in a
  professional setting

## Our Responsibilities

[Community Managers](/members.html#community-managers) are responsible for
clarifying the standards of acceptable behavior and are expected to take
appropriate and fair corrective action in response to any instances of
unacceptable behavior.

Community Managers have the right and responsibility to remove, edit, or reject
comments, commits, code, wiki edits, issues, and other contributions that are
not aligned to this Code of Conduct, or to ban temporarily or permanently any
contributor for other behaviors that they deem inappropriate, threatening,
offensive, or harmful.

## Scope

This Code of Conduct must be followed by everyone contributing to the Gerrit
project, regardless of affiliation or position.

It applies both within project spaces and in public spaces. This Code of Conduct
also applies outside the project spaces when the Community Managers have a
reasonable belief that an individual’s behavior may have a negative impact on
the project or its community.

## Conflict Resolution

We do not believe that all conflict is bad; healthy debate and disagreement
often yield positive results. However, it is never okay to be disrespectful or
to engage in behavior that violates the project’s code of conduct.

If you see someone violating the code of conduct, you are encouraged to address
the behavior directly with those involved. Many issues can be resolved quickly
and easily, and this gives people more control over the outcome of their
dispute. If you are unable to resolve the matter for any reason, or if the
behavior is threatening or harassing, report it. We are dedicated to providing
an environment where participants feel welcome and safe.

Reports should be directed to the [Community Managers](/members.html#community-managers).
It is their duty to receive and address reported violations of the code of
conduct. You can reach them via email at
[gerritcodereview-community-managers@googlegroups.com](mailto:gerritcodereview-community-managers@googlegroups.com).
This is a group that remains private between the individual community member and
community managers. If for any reason you are uncomfortable reaching out to the
community managers, you may also submit an anonymous report
[here](https://forms.gle/RH5KGwoAKipkR6tS7).

We will investigate every complaint, but you may not receive a direct response.
We will use our discretion in determining when and how to follow up on reported
incidents, which may range from not taking action to permanent expulsion from
the project and project-sponsored spaces. We will notify the accused of the
report and provide them an opportunity to discuss it before any action is taken.
The identity of the reporter will be omitted from the details of the report
supplied to the accused. In potentially harmful situations, such as ongoing
harassment or threats to anyone’s safety, we may take action without notice.

## Attribution

This Code of Conduct is adapted from the [Contributor Covenant, version
1.4](https://www.contributor-covenant.org/version/1/4/code-of-conduct.html), the
[Google Open Source Code of Conduct
template](https://opensource.google.com/docs/releasing/template/CODE_OF_CONDUCT/)
and the [Chromium Code of
Conduct](https://chromium.googlesource.com/chromium/src/+/master/CODE_OF_CONDUCT.md).

Except as otherwise noted, the content of this page is licensed under
[CC-BY-4.0](https://creativecommons.org/licenses/by/4.0/) license. Third-party
product names and logos may be the trademarks of their respective owners.
