= Gerrit Code Review - Attention Set

[[whose-turn]]
== Whose turn is it?

Code Review is a turn-based workflow going back and forth between the change
owner and reviewers. For every change Gerrit maintains an "Attention Set" with
users that are currently expected to act on the change. Both on the dashboard
and on the change page, this is expressed by an arrow icon before a (bolded)
user name:

image::images/user-attention-set-icon.png["account chip with attention icon", align="center"]

While the attention set brings clarity to the process it also comes with
responsibilities and expectations. To provide the best outcome for all users, we
suggest following these principles:

* Reviewers are expected to respond in a timely manner when it is their turn. If
  you don't plan to respond within ~24h, then you should either remove yourself
  from the attention set or you should at least send a clarification message to
  the change owner.
* Change owners are expected to manage the attention set of their changes
  carefully. They should make sure that reviewers are only in the attention set
  when the owner waits for a response from them.

On the plus side you can strictly ignore everyone else's changes, if you are not
in the attention set. :-)

=== Rules

To help with the back and forth, Gerrit applies some basic automated rules for
changing the attention set:

* If reviewers are added to a change, then they are added to the attention set.
  ** Exception: A reviewer adding themselves along with a comment or vote.
* If an active change is submitted, abandoned or reset to "work in progress",
  then all users are removed from the attention set.
* Replying (commenting, voting or just writing a change message) removes the
  replying user from the attention set. And it adds all participants of comment
  conversations that the user is replying to. Specifically
  ** If owner is replying and thread is resolved: all participants who have not
  given Code-Review yet, are added to the attention set.
  ** If owner is replying and thread is unresolved: all participants are added
  to the attention set.
  ** If non-owner is replying and thread is unresolved: only owner is added to
  the attention set.
  ** If non-owner is replying and thread is resolved: all participants who have
  not given Code-Review yet, are added to the attention set.
* If a *reviewer* replies, then the change owner (and uploader) are added to the
  attention set.
* For merged and abandoned changes the owner is added only when a human creates
  an unresolved comment.
* If another user removed a user's vote, the user with the deleted vote will be
  added to the attention set.
* If a vote becomes outdated by uploading a new patch set (vote is not sticky),
  the user whose vote has been removed is added to the attention set, as they
  need to re-review the change and vote newly.
* Only owner, uploader, reviewers and ccs can be in the attention set.
* The rules for service accounts are different, see link:#bots[Bots].
* Users are not added by automatic rules when the change is work in progress.

*!IMPORTANT!* These rules are not meant to be super smart and to always do the
right thing, e.g. if the change owner sends a reply, then they are often
expected to individually select whose turn it is.

Note that just uploading a new patchset is not a relevant event for the
attention set to change.

=== Interaction

There are three ways to interact with the attention set: The attention icon,
the hovercard of owner and reviewer chips and the "Reply" dialog.

*The attention icon* can be used to quickly remove yourself (or someone else)
from the attention set. Just click the icon, and it will disappear:

image::images/user-attention-set-icon-click.png["attention set icon with tooltip", align="center"]

*The hovercard* (on both the Dashboard and Change page) contains information
about whether, why and when a user was added to the attention set. It also
contains an action for adding/removing the user to/from the attention set.

image::images/user-attention-set-hovercard.png["user hovercard with info and action", align="center"]

*The reply dialog* contains a section for controlling to whom the turn should be
passed.

image::images/user-attention-set-reply-modify.png["reply dialog section for modifying", align="center"]

If you click "MODIFY", then the section will
expand and you can select and de-select users by clicking on their chips.
Whatever you select here will be the new state of the attention set for this
change. As a change owner make sure to remove reviewers that you don't expect to
take action.

image::images/user-attention-set-reply-select.png["reply dialog section for selecting users", align="center"]

=== Bots [[bots]]

The attention set is meant for human reviews only. Triggering bots and reacting
to their results is a different workflow and not in scope of the attenion set.
Thus members of the "Service Users" group will never be added to the
attention set. And replies by such users will only add the change owner (and
uploader) to the attention set, if it comes along with a negative vote.

=== Dashboard

The default *dashboard* contains a new section at the top called "Your turn". It
lists all changes where the logged-in user is in the attention set. When you are
a reviewer, the change is highlighted and is shown at the top of the section.
The "Waiting" column indicates how long the owner has already been waiting for
you to act.

image::images/user-attention-set-dashboard.png["dashboard with Your turn section", align="center"]

As an active developer, one of your daily goals will be to iterate over this
list and clear it.

image::images/user-attention-set-dashboard-empty.png["dashboard with empty Your turn section", align="center"]

Note that you can also navigate to other users' dashboards to check their
"Your turn" section.

=== Emails

Every email begins with `Attention is currently required from: ...`, so you can
identify at a glance whether you are expected to act.

You can even change your email notification preferences in the user settings to
only receive emails when you are in the attention set of a change:

image::images/user-attention-set-user-prefs.png["user preference for email notifications", align="center"]

If you prefer setting up customized filters in your mail client, then you can
make use of the `Gerrit-Attention:` footer lines that are added for every user
in the attention set, e.g.

----
Gerrit-Attention: Marian Harbach <mharbach@google.com>
----

=== Browser notifications

You'll automatically get notifications when you are in the attention set. You
must enable desktop notifications on your browser to see them.

image::images/browser-notification-example.png["browser notification example", align="center"]

You can turn off automatic notifications in user preferences. They are enabled
by default.

image::images/browser-notification-preference.png["user preference for browser notifications", align="center"]

The notifications work only when Gerrit is open in one of the browser tabs.
The latency to get the notification is up to 5 minutes.

If you are not getting notifications:
 - Check your user preferences - Allow browser notification setting
 - Make sure notifications are turned on for the Gerrit site in the browser
 - Make sure browser notifications are turned on in your operating system
 - Your host can have browser notifications disabled for some user groups

=== Bold Changes / Mark Reviewed

Before the attention set feature, changes were bolded in the dashboard when
*something* happened and you could explicitly "mark a change reviewed" on the
change page. This former way of keeping track of what you should look at has
been replaced by the attention set.

=== For Gerrit Admins

The Attention Set has been available since the 3.3 release (late 2020).

=== Important note for all host owners, project owners, and bot owners

If you are a host/project owner, please make sure all bots that run against your
host/project are part of the link:access-control.html#service_users[Service Users] group.

If you are a bot owner, please make sure your bot is part of the "Service Users"
group on all hosts it runs on.

To add users to the "Service Users" group, first ensure that the group exists on
your host. If it doesn't, create it. The name must exactly be "Service Users".

To create a group, use the Gerrit UI; BROWSE -> Groups -> CREATE NEW.

Then, add the bots as members in this group. Alternatively, add an existing
group that has multiple bots as a subgroup of "Service Users".

To add members or subgroups, use the Gerrit UI; BROWSE -> Groups ->
search for "Service Users" -> Members.

GERRIT
------
Part of link:index.html[Gerrit Code Review]

SEARCHBOX
---------

=== Auto readd owner [[auto-readd-owner]]

This job automatically readds the change owner to the attention-set for open non-WIP/private
changes that have been inactive for a defined time. Gerrit administrators may configure
link:config-gerrit.html#auto-readd[this]

Readding the owner to the attention-set of an inactive change has the advantages:

* It signals the change owner that the review is not progressing and that the owner
may need to adjust the attention-set or indicate a need for a priority review.
* It may prevent changes where no one is in the attention-set from getting forgotten.
* It makes people set changes in WIP or private for changes that should not
be actively reviewed.

