..
   This work is licensed under a Creative Commons Attribution 3.0 Unported License.
   SPDX-License-Identifier: CC-BY-3.0

===============
Response Guide
===============

This is a :doc:`Code of Conduct<CodeOfConduct>` (CoC) incident response guide
used by the Code of Conduct Committee and LLVM event organizers.

Code of Conduct Committee
=========================

All responses to Code of Conduct reports will be managed by a Code of Conduct
Committee. 

Additional Code of Conduct Response Teams
=========================================

In-person events will have an additional response team to immediately respond
to an incident. For example:

* Each LLVM Developers' Meeting has a Code of Conduct response team.
* For LLVM meetups, the local organizers will be the first point of contact.
* Any other event funded by the LLVM Foundation or listed on the LLVM website,
  will have a code of conduct response team or point of contact for CoC 
  reports.

These teams should determine if an :ref:`immediate response<Immediate Response
Checklist>` is needed before sending the report to the Code of Conduct
committee.

.. _Receiving a report:

Receiving a Report
==================

Reports are typically received by email (conduct@llvm.org) or in person from
the reporter or event CoC response team.

When receiving a report by email, the CoC Committee should acknowledge receipt
within 24 hours.  The acknowledgement should be understanding and compassionate
but no commitment should be made on whether this is a violation or which action
will be taken. Specific guidance is in the checklist below.

For in-person events that have a violation reported, the report should be sent
to the Code of Conduct committee within 24 hours by the on-site CoC response
team. 


.. _Immediate Response Checklist:

Immediate Response Checklist
============================

The CoC committee generally works, decides, and communicates together. If the
report indicates that an immediate response is required and other committee
members are not available, any committee member may take the immediate action
they think is necessary. In-person Code of Conduct response teams should use
this checklist to determine if an immediate response is needed.

* If the incident involves physical danger, contact the appropriate law
  enforcement or event security immediately. Ensure the reporter feels safe and
  stay with them if possible until help arrives.
* If the act is ongoing and involves harassment or threats against someone in
  any space (online or physical), any appropriate response (e.g., ban, physical
  removal, or moderation) may be used to immediately stop it.
* For events that include talks, organizers should end talks early if the
  violations include harassment or violent threats. There may be talks where
  other types of code of conduct violations occur and organizers should do 
  their best to determine if a talk should be ended early or not. 

When undertaking an immediate response, document the action and notify the
committee within 24 hours. 


Response Procedure
==================

The following is a summary of the steps the committee takes when responding to
a reported incident. 

1. Determine if there is a need for an :ref:`immediate response<Immediate
   Response Checklist>`.

2. :ref:`Acknowledge the report<Receiving a report>` within 24 hours.

3. :ref:`Discuss the incident report<Incident Response Assessment>`, gather
   more information, and determine a :ref:`resolution<Resolutions>`.

4. During this process, the :ref:`reporter will be informed of the
   resolution<Following Up With the Reportee>` and feedback is requested. This
   feedback may or may not be used to re-evaluate the resolution.

5. Inform the reportee of the resolution. The reportee is provided options to
   :ref:`appeal<Appeal Process>`. 

6. The :ref:`resolution<Resolutions>` is implemented.

7. All reports, data, notes, and resolutions are logged in a private location
   (e.g., Google Drive or other database).

The committee will never make public statements about a resolution and will
only publish :ref:`transparency reports<Transparency Reports>`. If a public
statement is necessary and requested by the committee, it will be given by the
LLVM Foundation Board of Directors.

Report Acknowledgement
======================

When a report is received, the committee will reply to the reporter to confirm
receipt within 24 hours of the incident being reported. 

This acknowledgement will contain:

* Acknowledgement of the incident report
* Next steps of the committee for responding to the incident
* Reminder of confidentiality policy regarding the report and parties involved

All incident reports should be assessed if they require immediate response and
acted on accordingly.

.. _Incident Response Assessment:

Incident Response Assessment
============================

The committee will assess the incident and determine an appropriate response.
The assessment will be documented and retained in records. Here are some
guidelines for the process:

* Review report documentation to determine the content and context of the
  incident.

  * Request additional information if needed from the reporter.

* Determine if it occurred within the scope of the CoC.
* Determine if it violated the CoC and specifically which part.
* Consult documentation of past incidents for patterns of behavior (if
  available and applicable).
* Follow up with the reportee to get their view or any other additional
  information.
* Determine appropriate resolutions to the incident when all information has
  been gathered.
* Notify the reporter of the resolution and request feedback. This may or may
  not be used to reevaluate the resolution.

The committee will aim to have a resolution agreed upon within two weeks of
receipt of the incident report. In the event that a resolution cannot be
determined within that time, the CoC committee will respond to the reporter(s)
with an updated and projected timeline for resolution. 

.. _Following Up With the Reportee:

Following Up With the Reportee
==============================

When following up with the reportee, the committee will:

* Explain that an incident was reported that involves the reportee.
* In this explanation, the focus will be on the impact of their behavior, not
  their intent.
* Reiterate the Code of Conduct and that their behavior may be deemed
  inappropriate.
* Give them the opportunity to state their view of the incident.
* Explain the possible resolutions that may be enforced should the CoC
  committee determine there is a breach.

The reportee will be given a week to respond with the option to request
additional time if needed and subject to approval of the CoC Committee.

.. _Resolutions:

Resolutions
===========

The committee should agree unanimously on a resolution. In the event that the
committee cannot reach a unanimous resolution, the LLVM Foundation Board of
Directors will help resolve the situation and determine if the resolution can
proceed without a unanimous vote.

When deciding on a resolution, the goal is to address the report in an
appropriate way, while also looking to prevent or reduce the risk of continuing
harm in the future. Any action deemed necessary by the committee will be
taken, but below is a list of possible resolutions:

* Taking no further action as the incident was determined not to be a
  violation.
* A private verbal warning and/or reprimand from the committee to the
  individual(s) involved and request to stop this behavior. This conversation
  may happen in person, email, by phone, video chat, or IRC.
* Request that the reportee avoid any interaction with, and physical proximity
  to, another person for the remainder of the event.
* Refusal of alcoholic beverage purchases by the reportee at LLVM events.
* Ending a talk/tutorial/etc at an LLVM event early. See immediate response
  checklist for further clarification.
* Not publishing the video or slides of a talk.
* Not allowing a speaker to give (further) talks at LLVM events for a specified
  amount of time or ever.
* Requiring that the reportee immediately leave an event and not return.
* Immediately ending any volunteer responsibilities and privileges the reportee
  holds.
* An imposed suspension (e.g., asking someone to "take a week off" from mailing
  lists, bug tracker, IRC, Discord, repositories, or other communication
  forms). 
* A permanent or temporary ban from some or all LLVM Project spaces (online or
  in person).

Once a resolution is agreed upon, but before it is enacted, the committee will
contact the reporter and any other affected parties to explain the proposed
resolution. They will ask if this resolution is acceptable and must note
feedback for the record. However, the committee is not required to act on this
feedback.

.. _Appeal Process:

Appeal Process
===============

Any individual(s) determined to have violated the CoC have the right to appeal
a decision. An appeal can be made directly to the committee by sending an email
to conduct@llvm.org with subject line Code of Conduct Incident Appeal.

The email should include documentation related to the incident to support the
appeal. The said documentation may include, but does not have to be limited to:

* Information from the reportee justifying reasoning for the appeal.
* Statements from other individuals involved in the incident to support the
  appeal.

Appeals can be requested up to 30 days after a resolution has been communicated
to the individual(s). The committee will aim to evaluate appeals within two weeks of receipt. In the event that appeal can not be evaluated within that time, the CoC committee will respond with an updated and projected timeline. 


Conflicts of Interest
=====================

Committee members should declare any conflicts of interest as soon as possible
and before any official committee meetings. This can mean being friends with
one of the involved parties, or anything else that may make it harder to remain
neutral.

A conflict of interest does not inherently mean the committee member can no
longer participate in the process, as that would make it very hard for the team
to act on reports involving well-known people in the community. However, if a
report concerns a team member or someone they work directly with, they probably
should not take part in the process. The team will decide together on where to
draw this line in individual cases. Where possible, any conversations with
offenders should not be done by people who know them, as it can be very
unpleasant for everyone involved.

If a report is received concerning a committee member, that member must not be
involved in the response process. The rest of the committee will meet and
decide on the report without the reported committee member being present, and
will not share more information than they would have with a non-member. If a
member of the committee is found to have violated the CoC, they may no longer
be able to keep serving on the committee.

Confidentiality
===============

All reports will be kept confidential with details shared only with the Code of
Conduct committee members. However, the Code of Conduct Committee will always
comply with law enforcement when directed. In the case that a CoC committee
member is involved in a report, the member will be asked to recuse themselves
from ongoing conversations, and they will not have access to reports after the
enforcement decision has been made. 

In the event of a temporary suspension or ban, the appropriate people must be
notified of the ban in order to restrict access to infrastructure or events.
These individuals will only be notified of the person's name and the
restrictions imposed. They will be under a confidentiality clause and not
allowed to respond to questions regarding the ban and should direct all
questions to the CoC committee. 

.. _Transparency Reports:

Transparency Reports
====================

Lack of transparency in the outcomes of our Code of Conduct incidents leaves
our community without an understanding of how or if the organizers worked to
resolve incidents. The CoC committee should aim to publish transparency
reports, if reports are received, after major events (such as the LLVM
Developers' meetings) and on the following dates: Jan 15, April 15, July 15,
Oct 15. 

A transparency report consists of 2 parts:

* An overview of the reports received, and resolutions.
* A more detailed summary of each reported incident and the resolution while
  maintaining confidentiality.

These reports will be published on the LLVM website.

Thanks!
=======


This guide was created and inspired by the following: the `Django Project`_,
`Carpentries Response Guide`_, and the `Write The Docs Response Guide`_.

License
=======

All content on this page is licensed under a `Creative Commons Attribution 3.0
Unported License`_.


.. _Django Project: https://www.djangoproject.com/conduct/
.. _Carpentries Response Guide: https://docs.carpentries.org/topic_folders/policies/enforcement-guidelines.html
.. _Write The Docs Response Guide: https://www.writethedocs.org/code-of-conduct/#guidelines-for-reporting-incidents
.. _Creative Commons Attribution 3.0 Unported License: http://creativecommons.org/licenses/by/3.0/

