..
   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 Discord.
* 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, 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 resolution 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.

This process is intended to consider new or different evidence from the 
initial incident investigation. 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, at least 2 times in a calendar year.

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/

