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

