diff --git a/java/com/google/gerrit/plugins/checks/CheckerQuery.java b/java/com/google/gerrit/plugins/checks/CheckerQuery.java
index 4b7eed4..8cb18f6 100644
--- a/java/com/google/gerrit/plugins/checks/CheckerQuery.java
+++ b/java/com/google/gerrit/plugins/checks/CheckerQuery.java
@@ -88,7 +88,6 @@
           "added",
           "after",
           "age",
-          "assignee",
           "author",
           "before",
           "branch",
diff --git a/java/com/google/gerrit/plugins/checks/acceptance/testsuite/CheckerOperationsImpl.java b/java/com/google/gerrit/plugins/checks/acceptance/testsuite/CheckerOperationsImpl.java
index c242f68..a65bf95 100644
--- a/java/com/google/gerrit/plugins/checks/acceptance/testsuite/CheckerOperationsImpl.java
+++ b/java/com/google/gerrit/plugins/checks/acceptance/testsuite/CheckerOperationsImpl.java
@@ -16,6 +16,7 @@
 
 import static com.google.common.base.Preconditions.checkState;
 import static com.google.common.collect.ImmutableSet.toImmutableSet;
+import static com.google.gerrit.testing.TestActionRefUpdateContext.testRefAction;
 import static java.nio.charset.StandardCharsets.UTF_8;
 import static java.util.stream.Collectors.toList;
 import static org.eclipse.jgit.lib.Constants.OBJ_BLOB;
@@ -301,7 +302,7 @@
             TestRepository<Repository> testRepo = new TestRepository<>(repo)) {
           RefUpdate ru = testRepo.getRepository().updateRef(checkerUuid.toRefName(), true);
           ru.setForceUpdate(true);
-          ru.delete();
+          testRefAction(() -> ru.delete());
         }
       }
     }
diff --git a/java/com/google/gerrit/plugins/checks/db/CheckerRefMigration.java b/java/com/google/gerrit/plugins/checks/db/CheckerRefMigration.java
index 40eb858..e539fe7 100644
--- a/java/com/google/gerrit/plugins/checks/db/CheckerRefMigration.java
+++ b/java/com/google/gerrit/plugins/checks/db/CheckerRefMigration.java
@@ -13,11 +13,15 @@
 // limitations under the License.
 package com.google.gerrit.plugins.checks.db;
 
+import static com.google.gerrit.server.update.context.RefUpdateContext.RefUpdateType.OFFLINE_OPERATION;
+import static com.google.gerrit.server.update.context.RefUpdateContext.RefUpdateType.PLUGIN;
+
 import com.google.common.annotations.VisibleForTesting;
 import com.google.gerrit.entities.Project;
 import com.google.gerrit.pgm.init.api.AllProjectsNameOnInitProvider;
 import com.google.gerrit.plugins.checks.CheckerRef;
 import com.google.gerrit.server.git.GitRepositoryManager;
+import com.google.gerrit.server.update.context.RefUpdateContext;
 import com.google.inject.Inject;
 import com.google.inject.Singleton;
 import java.io.IOException;
@@ -49,7 +53,9 @@
   }
 
   public void migrate() throws Exception {
-    try (Repository repo = repoManager.openRepository(allProjectsName)) {
+    try (Repository repo = repoManager.openRepository(allProjectsName);
+        RefUpdateContext pluginCtx = RefUpdateContext.open(PLUGIN);
+        RefUpdateContext ctx = RefUpdateContext.open(OFFLINE_OPERATION)) {
 
       // This part is specifically for cases where the rename failed half-way last time.
       Ref ref = repo.exactRef(TMP_REF);
@@ -68,7 +74,8 @@
           ex.getMessage()
               + " Ensure that refs/tmp/checker-migration doesn't exist. Also,"
               + "ensure that refs/meta/checkers/ (with trailing '/') has been migrated to refs/meta/checkers (without "
-              + "trailing '/'). Consider documentation for updating refs manually: https://git-scm.com/docs/git-update-ref");
+              + "trailing '/'). Consider documentation for updating refs manually: https://git-scm.com/docs/git-update-ref",
+          ex);
     }
   }
 
diff --git a/java/com/google/gerrit/plugins/checks/db/NoteDbCheckersUpdate.java b/java/com/google/gerrit/plugins/checks/db/NoteDbCheckersUpdate.java
index e84e129..45f0952 100644
--- a/java/com/google/gerrit/plugins/checks/db/NoteDbCheckersUpdate.java
+++ b/java/com/google/gerrit/plugins/checks/db/NoteDbCheckersUpdate.java
@@ -14,6 +14,9 @@
 
 package com.google.gerrit.plugins.checks.db;
 
+import static com.google.gerrit.server.update.context.RefUpdateContext.RefUpdateType.PLUGIN;
+import static com.google.gerrit.server.update.context.RefUpdateContext.RefUpdateType.VERSIONED_META_DATA_CHANGE;
+
 import com.google.common.base.Throwables;
 import com.google.gerrit.entities.Project;
 import com.google.gerrit.exceptions.DuplicateKeyException;
@@ -32,6 +35,7 @@
 import com.google.gerrit.server.git.GitRepositoryManager;
 import com.google.gerrit.server.git.meta.MetaDataUpdate;
 import com.google.gerrit.server.update.RetryHelper;
+import com.google.gerrit.server.update.context.RefUpdateContext;
 import com.google.inject.assistedinject.Assisted;
 import com.google.inject.assistedinject.AssistedInject;
 import java.io.IOException;
@@ -181,12 +185,16 @@
       CheckersByRepositoryNotes checkersByRepositoryNotes)
       throws IOException {
     BatchRefUpdate batchRefUpdate = allProjectsRepo.getRefDatabase().newBatchUpdate();
-    try (MetaDataUpdate metaDataUpdate =
-        metaDataUpdateFactory.create(allProjectsName, allProjectsRepo, batchRefUpdate)) {
-      checkerConfig.commit(metaDataUpdate);
-      checkersByRepositoryNotes.commit(metaDataUpdate);
+    try (RefUpdateContext pluginCtx = RefUpdateContext.open(PLUGIN)) {
+      try (RefUpdateContext ctx = RefUpdateContext.open(VERSIONED_META_DATA_CHANGE)) {
+        try (MetaDataUpdate metaDataUpdate =
+            metaDataUpdateFactory.create(allProjectsName, allProjectsRepo, batchRefUpdate)) {
+          checkerConfig.commit(metaDataUpdate);
+          checkersByRepositoryNotes.commit(metaDataUpdate);
+        }
+        RefUpdateUtil.executeChecked(batchRefUpdate, allProjectsRepo);
+      }
     }
-    RefUpdateUtil.executeChecked(batchRefUpdate, allProjectsRepo);
 
     gitRefUpdated.fire(
         allProjectsName, batchRefUpdate, currentUser.map(user -> user.state()).orElse(null));
diff --git a/java/com/google/gerrit/plugins/checks/db/NoteDbChecksUpdate.java b/java/com/google/gerrit/plugins/checks/db/NoteDbChecksUpdate.java
index 47de092..11e822d 100644
--- a/java/com/google/gerrit/plugins/checks/db/NoteDbChecksUpdate.java
+++ b/java/com/google/gerrit/plugins/checks/db/NoteDbChecksUpdate.java
@@ -15,6 +15,8 @@
 package com.google.gerrit.plugins.checks.db;
 
 import static com.google.gerrit.plugins.checks.CheckerRef.checksRef;
+import static com.google.gerrit.server.update.context.RefUpdateContext.RefUpdateType.CHANGE_MODIFICATION;
+import static com.google.gerrit.server.update.context.RefUpdateContext.RefUpdateType.PLUGIN;
 import static java.nio.charset.StandardCharsets.UTF_8;
 import static org.eclipse.jgit.lib.Constants.OBJ_BLOB;
 
@@ -36,6 +38,7 @@
 import com.google.gerrit.server.git.GitRepositoryManager;
 import com.google.gerrit.server.notedb.ChangeNoteUtil;
 import com.google.gerrit.server.update.RetryHelper;
+import com.google.gerrit.server.update.context.RefUpdateContext;
 import com.google.inject.assistedinject.Assisted;
 import com.google.inject.assistedinject.AssistedInject;
 import java.io.ByteArrayOutputStream;
@@ -171,45 +174,49 @@
     if (operation == Operation.CREATE) {
       assertCheckerIsPresent(checkKey.checkerUuid());
     }
+    try (RefUpdateContext pluginCtx = RefUpdateContext.open(PLUGIN)) {
+      try (RefUpdateContext ctx = RefUpdateContext.open(CHANGE_MODIFICATION)) {
+        try (Repository repo = repoManager.openRepository(checkKey.repository());
+            ObjectInserter objectInserter = repo.newObjectInserter();
+            RevWalk rw = new RevWalk(repo)) {
+          Ref checkRef = repo.getRefDatabase().exactRef(checksRef(checkKey.patchSet().changeId()));
+          ObjectId parent = checkRef == null ? ObjectId.zeroId() : checkRef.getObjectId();
+          CommitBuilder cb;
+          String message;
+          if (operation == Operation.CREATE) {
+            message = "Insert check " + checkKey.checkerUuid();
+            cb = commitBuilder(message, parent);
+          } else {
+            message = "Update check " + checkKey.checkerUuid();
+            cb = commitBuilder(message, parent);
+          }
 
-    try (Repository repo = repoManager.openRepository(checkKey.repository());
-        ObjectInserter objectInserter = repo.newObjectInserter();
-        RevWalk rw = new RevWalk(repo)) {
-      Ref checkRef = repo.getRefDatabase().exactRef(checksRef(checkKey.patchSet().changeId()));
-      ObjectId parent = checkRef == null ? ObjectId.zeroId() : checkRef.getObjectId();
-      CommitBuilder cb;
-      String message;
-      if (operation == Operation.CREATE) {
-        message = "Insert check " + checkKey.checkerUuid();
-        cb = commitBuilder(message, parent);
-      } else {
-        message = "Update check " + checkKey.checkerUuid();
-        cb = commitBuilder(message, parent);
+          boolean dirty =
+              updateNotesMap(
+                  checkKey, checkUpdate, repo, rw, objectInserter, parent, cb, operation);
+          if (!dirty) {
+            // This update is a NoOp, so omit writing a commit with the same tree.
+            return readSingleCheck(checkKey, repo, rw, checkRef.getObjectId());
+          }
+
+          ObjectId newCommitId = objectInserter.insert(cb);
+          objectInserter.flush();
+
+          String refName = CheckerRef.checksRef(checkKey.patchSet().changeId());
+          RefUpdate refUpdate = repo.updateRef(refName);
+          refUpdate.setExpectedOldObjectId(parent);
+          refUpdate.setNewObjectId(newCommitId);
+          refUpdate.setRefLogIdent(personIdent);
+          refUpdate.setRefLogMessage(message, false);
+          refUpdate.update();
+          RefUpdateUtil.checkResult(refUpdate);
+
+          combinedCheckStateCache.updateIfNecessary(checkKey.repository(), checkKey.patchSet());
+          gitRefUpdated.fire(
+              checkKey.repository(), refUpdate, currentUser.map(user -> user.state()).orElse(null));
+          return readSingleCheck(checkKey, repo, rw, newCommitId);
+        }
       }
-
-      boolean dirty =
-          updateNotesMap(checkKey, checkUpdate, repo, rw, objectInserter, parent, cb, operation);
-      if (!dirty) {
-        // This update is a NoOp, so omit writing a commit with the same tree.
-        return readSingleCheck(checkKey, repo, rw, checkRef.getObjectId());
-      }
-
-      ObjectId newCommitId = objectInserter.insert(cb);
-      objectInserter.flush();
-
-      String refName = CheckerRef.checksRef(checkKey.patchSet().changeId());
-      RefUpdate refUpdate = repo.updateRef(refName);
-      refUpdate.setExpectedOldObjectId(parent);
-      refUpdate.setNewObjectId(newCommitId);
-      refUpdate.setRefLogIdent(personIdent);
-      refUpdate.setRefLogMessage(message, false);
-      refUpdate.update();
-      RefUpdateUtil.checkResult(refUpdate);
-
-      combinedCheckStateCache.updateIfNecessary(checkKey.repository(), checkKey.patchSet());
-      gitRefUpdated.fire(
-          checkKey.repository(), refUpdate, currentUser.map(user -> user.state()).orElse(null));
-      return readSingleCheck(checkKey, repo, rw, newCommitId);
     }
   }
 
diff --git a/javatests/com/google/gerrit/plugins/checks/acceptance/CheckerRefsIT.java b/javatests/com/google/gerrit/plugins/checks/acceptance/CheckerRefsIT.java
index e9cadf3..dfeeb11 100644
--- a/javatests/com/google/gerrit/plugins/checks/acceptance/CheckerRefsIT.java
+++ b/javatests/com/google/gerrit/plugins/checks/acceptance/CheckerRefsIT.java
@@ -21,6 +21,7 @@
 import static com.google.gerrit.acceptance.testsuite.project.TestProjectUpdate.allowLabel;
 import static com.google.gerrit.server.group.SystemGroupBackend.REGISTERED_USERS;
 import static com.google.gerrit.testing.GerritJUnit.assertThrows;
+import static com.google.gerrit.testing.TestActionRefUpdateContext.testRefAction;
 
 import com.google.gerrit.acceptance.PushOneCommit;
 import com.google.gerrit.acceptance.SkipProjectClone;
@@ -329,7 +330,7 @@
           updateFactory.create(project, identifiedUserFactory.create(admin.id()), TimeUtil.now())) {
         bu.setRepository(git, rw, oi);
         bu.insertChange(ins);
-        bu.execute();
+        testRefAction(() -> bu.execute());
       }
       return changeId.toString();
     }
diff --git a/resources/Documentation/rest-api-checkers.md b/resources/Documentation/rest-api-checkers.md
index 06aa276..a33658d 100644
--- a/resources/Documentation/rest-api-checkers.md
+++ b/resources/Documentation/rest-api-checkers.md
@@ -257,7 +257,7 @@
 
 Currently, the set of allowed query operators is:
 
-`added, after, age, assignee, author, before, branch, committer, deleted, delta,
+`added, after, age, author, before, branch, committer, deleted, delta,
 destination, dir, directory, ext, extension, f, file, footer, hashtag, intopic,
 label, onlyextensions, onlyexts, ownerin, path, r, ref, reviewer, reviewerin,
 size, status, submittable, topic, unresolved, wip`
diff --git a/web/gr-checkers-list.ts b/web/gr-checkers-list.ts
index ed24a2f..5fc912b 100644
--- a/web/gr-checkers-list.ts
+++ b/web/gr-checkers-list.ts
@@ -25,15 +25,6 @@
 
 const CHECKERS_PER_PAGE = 15;
 const GET_CHECKERS_URL = '/plugins/checks/checkers/';
-
-// TODO: This should be defined and exposed by @gerritcodereview/typescript-api
-// export for testing
-export type GrOverlay = Element & {
-  open(): void;
-  close(): void;
-  refit(): void;
-};
-
 function matches(target: string, keyword: string) {
   return target.toLowerCase().includes(keyword.toLowerCase().trim());
 }
@@ -53,13 +44,13 @@
   editModal?: GrCreateCheckersDialog;
 
   @query('#editOverlay')
-  editOverlay?: GrOverlay;
+  editOverlay?: HTMLDialogElement;
 
   @query('#createNewModal')
   createNewModal?: GrCreateCheckersDialog;
 
   @query('#createOverlay')
-  createOverlay?: GrOverlay;
+  createOverlay?: HTMLDialogElement;
 
   /** Guaranteed to be provided by the plugin endpoint. */
   @property()
@@ -92,6 +83,7 @@
 
   static override styles = [
     window.Gerrit.styles.table as CSSResult,
+    window.Gerrit.styles.modal as CSSResult,
     css`
       #container {
         width: 80vw;
@@ -175,7 +167,7 @@
         </table>
         <nav>${this.renderPrevButton()}${this.renderNextButton()}</nav>
       </div>
-      <gr-overlay id="createOverlay">
+      <dialog id="createOverlay" tabindex="-1">
         <gr-dialog
           .confirmLabel="Create"
           @confirm="${() => this.createNewModal?.handleCreateChecker()}"
@@ -191,8 +183,8 @@
             </gr-create-checkers-dialog>
           </div>
         </gr-dialog>
-      </gr-overlay>
-      <gr-overlay id="editOverlay">
+      </dialog>
+      <dialog id="editOverlay" tabindex="-1">
         <gr-dialog
           .confirmLabel="Save"
           @confirm="${() => this.editModal?.handleEditChecker()}"
@@ -209,14 +201,18 @@
             </gr-create-checkers-dialog>
           </div>
         </gr-dialog>
-      </gr-overlay>
+      </dialog>
     `;
   }
 
   private renderCreateNewButton() {
     return html`
       <div id="createNewContainer">
-        <gr-button primary link @click="${() => this.createOverlay?.open()}">
+        <gr-button
+          primary
+          link
+          @click="${() => this.createOverlay?.showModal()}"
+        >
           Create New
         </gr-button>
       </div>
@@ -255,7 +251,7 @@
   private renderCheckerRow(checker: Checker) {
     const edit = () => {
       this.checker = checker;
-      this.editOverlay?.open();
+      this.editOverlay?.showModal();
     };
     return html`
       <tr class="table">
