diff --git a/Documentation/config-gerrit.txt b/Documentation/config-gerrit.txt
index dc0f346..0c63c9a 100644
--- a/Documentation/config-gerrit.txt
+++ b/Documentation/config-gerrit.txt
@@ -1507,7 +1507,7 @@
 
 [[change.commentSizeLimit]]change.commentSizeLimit::
 +
-Maximum allowed size in characters of a regular (non-robot) comment. Comments
+Maximum allowed size in characters of a comment. Comments
 which exceed this size will be rejected. Size computation is approximate and may
 be off by roughly 1%. Common unit suffixes of 'k', 'm', or 'g' are supported.
 The value must be positive.
@@ -1523,7 +1523,7 @@
 
 [[change.cumulativeCommentSizeLimit]]change.cumulativeCommentSizeLimit::
 +
-Maximum allowed size in characters of all comments (including robot comments)
+Maximum allowed size in characters of all comments
 and change messages. Size computation is approximate and may be off by roughly
 1%. Common unit suffixes of 'k', 'm', or 'g' are supported.
 +
@@ -1537,7 +1537,7 @@
 
 [[change.maxComments]]change.maxComments::
 +
-Maximum number of comments (regular plus robot) allowed per change. Additional
+Maximum number of comments allowed per change. Additional
 comments are rejected.
 +
 By default 5,000.
@@ -1570,7 +1570,7 @@
 [[change.maxUpdates]]change.maxUpdates::
 +
 Maximum number of updates to a change. Counts only updates to the main NoteDb
-meta ref; draft comments, robot comments, stars, etc. do not count towards the
+meta ref; draft comments, stars, etc. do not count towards the
 total.
 +
 Many NoteDb operations require walking the entire change meta ref and loading
@@ -1654,10 +1654,15 @@
 +
 By default `true`.
 
-[[change.enableRobotComments]]change.enableRobotComments::
+[[change.allowMarkdownBase64ImagesInComments]]change.allowMarkdownBase64ImagesInComments::
 +
-Are robot comments enabled in the Gerrit UI? This setting allows phasing out
-robot comments. Soon robot comments will be entirely removed.
+Allows Base64 encoded images, embedded via Markdown, to be rendered in Gerrit comments.
++
+This feature addresses the need for teams to share images directly within Gerrit comments. 
+Instead of relying on external image hosting, images are encoded into Base64 strings
+and included in the comment text using Markdown image syntax.
++
+When enabled, the Gerrit UI will detect and render these inline images.
 +
 By default `false`.
 
@@ -1690,15 +1695,6 @@
 than handling parsing errors gracefully, which can make Gerrit for impacted
 users unusable.
 
-[[change.robotCommentSizeLimit]]change.robotCommentSizeLimit::
-+
-Maximum allowed size in characters of a robot comment. Robot comments which
-exceed this size will be rejected on addition. Size computation is approximate
-and may be off by roughly 1%. Common unit suffixes of 'k', 'm', or 'g' are
-supported. Zero or negative values allow robot comments of unlimited size.
-+
-The default limit is 1MiB.
-
 [[change.sendNewPatchsetEmails]]change.sendNewPatchsetEmails::
 +
 When `false`, emails will not be sent to owners, reviewers, and cc for
@@ -4100,7 +4096,7 @@
 +
 Add patch set level comment as event comment. Without this option, patch set
 level comment will not be included in the event comment attribute. Given that
-currently patch set level, file and robot comments are not exposed in the
+currently patch set level and file comments are not exposed in the
 `comment-added` event type, those comments will be lost. One particular use
 case is to re-trigger CI build from the change screen by adding a comment with
 specific content, e.g.: `recheck`. Jenkins Gerrit Trigger plugin and Zuul CI
diff --git a/Documentation/config-robot-comments.txt b/Documentation/config-robot-comments.txt
deleted file mode 100644
index ef99d80..0000000
--- a/Documentation/config-robot-comments.txt
+++ /dev/null
@@ -1,50 +0,0 @@
-= Gerrit Code Review - Robot Comments
-
-[NOTE]
-Robot Comments are deprecated in favour of link:pg-plugin-checks-api.html[Checks API] and human
-comments.
-
-Gerrit has special support for inline comments that are generated by
-automated third-party systems, so called "robot comments". For example
-robot comments can be used to represent the results of code analyzers.
-
-In contrast to regular inline comments which are free-text comments,
-robot comments are more structured and can contain additional data,
-such as a robot ID, a robot run ID and a URL, see
-link:rest-api-changes.html#robot-comment-info[RobotCommentInfo] for
-details.
-
-It is planned to visualize robot comments differently in the web UI so
-that they can be easily distinguished from human comments. Users should
-also be able to use filtering on robot comments, so that only part of
-the robot comments or no robot comments are shown. In addition robot
-comments can contain fixes, that users can apply by a single click.
-
-== REST endpoints
-
-* Posting robot comments is done by the
-  link:rest-api-changes.html[Set Review] REST endpoint. The
-  link:rest-api-changes.html#review-input[input] for this REST endpoint
-  can contain robot comments in its `robot_comments` field.
-* link:rest-api-changes.html#list-robot-comments[List Robot Comments]
-* link:rest-api-changes.html#get-robot-comment[Get Robot Comment]
-
-== Storage
-
-Robot comments are stored per change in a
-`refs/changes/XX/YYYY/robot-comments` ref, where `XX/YYYY` is the
-sharded change ID.
-
-Robot comments can be dropped by deleting this ref.
-
-== Limitations
-
-* There is no support for draft robot comments, but robot comments are
-  always published and visible to everyone who can see the change.
-
-GERRIT
-------
-Part of link:index.html[Gerrit Code Review]
-
-SEARCHBOX
----------
diff --git a/Documentation/index.txt b/Documentation/index.txt
index 5d4a29b..cc9ac6c 100644
--- a/Documentation/index.txt
+++ b/Documentation/index.txt
@@ -63,7 +63,6 @@
 . link:config-hooks.html[Hooks]
 . link:config-mail.html[Mail Templates]
 . link:config-cla.html[Contributor Agreements]
-. link:config-robot-comments.html[Robot Comments]
 
 == Server Administration
 . link:install.html[Installation Guide]
diff --git a/Documentation/note-db.txt b/Documentation/note-db.txt
index 29c794c..5e883fc 100644
--- a/Documentation/note-db.txt
+++ b/Documentation/note-db.txt
@@ -91,12 +91,6 @@
     },
 ----
 
-Automated systems may post "robot comments" instead of normal
-comments, which are an extension of the previous comment, defined in
-the
-link:https://gerrit.googlesource.com/gerrit/\+/master/java/com/google/gerrit/entities/RobotComment.java[RobotComment]
-class.
-
 [[migration]]
 == Migration
 
diff --git a/Documentation/pg-plugin-endpoints.txt b/Documentation/pg-plugin-endpoints.txt
index 08be0bb..fa02fa4 100644
--- a/Documentation/pg-plugin-endpoints.txt
+++ b/Documentation/pg-plugin-endpoints.txt
@@ -124,18 +124,6 @@
 The end point contains the `<gr-formatted-text>` element holding the
 `CheckResult.message` (if any was set).
 
-=== robot-comment-controls
-The `robot-comment-controls` extension point is located inside each comment
-rendered on the diff page, and is only visible when the comment is a robot
-comment, specifically if the comment has a `robot_id` property.
-
-In addition to default parameters, the following are available:
-
-* `comment`
-+
-current comment displayed, an instance of
-link:rest-api-changes.html#comment-info[CommentInfo]
-
 === repo-command
 This endpoint is situated among the repository commands.
 
diff --git a/Documentation/rest-api-changes.txt b/Documentation/rest-api-changes.txt
index 023b5e3..0c30a73 100644
--- a/Documentation/rest-api-changes.txt
+++ b/Documentation/rest-api-changes.txt
@@ -2529,62 +2529,6 @@
   }
 ----
 
-[[list-change-robot-comments]]
-=== List Change Robot Comments (deprecated)
---
-'GET /changes/link:#change-id[\{change-id\}]/robotcomments'
---
-
-Lists the robot comments of all revisions of the change.
-
-Return a map that maps the file path to a list of
-link:#robot-comment-info[RobotCommentInfo] entries. The entries in the
-map are sorted by file path.
-
-.Request
-----
-  GET /changes/myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940/robotcomments/ HTTP/1.0
-----
-
-.Response
-----
-  HTTP/1.1 200 OK
-  Content-Disposition: attachment
-  Content-Type: application/json; charset=UTF-8
-
-  )]}'
-  {
-    "gerrit-server/src/main/java/com/google/gerrit/server/project/RefControl.java": [
-      {
-        "id": "TvcXrmjM",
-        "line": 23,
-        "message": "unused import",
-        "updated": "2016-02-26 15:40:43.986000000",
-        "author": {
-          "_account_id": 1000110,
-          "name": "Code Analyzer",
-          "email": "code.analyzer@example.com"
-        },
-        "robot_id": "importChecker",
-        "robot_run_id": "76b1375aa8626ea7149792831fe2ed85e80d9e04"
-      },
-      {
-        "id": "TveXwFiA",
-        "line": 49,
-        "message": "wrong indention",
-        "updated": "2016-02-26 15:40:45.328000000",
-        "author": {
-          "_account_id": 1000110,
-          "name": "Code Analyzer",
-          "email": "code.analyzer@example.com"
-        },
-        "robot_id": "styleChecker",
-        "robot_run_id": "5c606c425dd45184484f9d0a2ffd725a7607839b"
-      }
-    ]
-  }
-----
-
 [[list-change-drafts]]
 === List Change Drafts
 --
@@ -5571,102 +5515,6 @@
   }
 ----
 
-[[list-robot-comments]]
-=== List Robot Comments (deprecated)
---
-'GET /changes/link:#change-id[\{change-id\}]/revisions/link:#revision-id[\{revision-id\}]/robotcomments/'
---
-
-Lists the link:config-robot-comments.html[robot comments] of a
-revision.
-
-As result a map is returned that maps the file path to a list of
-link:#robot-comment-info[RobotCommentInfo] entries. The entries in the
-map are sorted by file path.
-
-.Request
-----
-  GET /changes/myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940/revisions/674ac754f91e64a0efb8087e59a176484bd534d1/robotcomments/ HTTP/1.0
-----
-
-.Response
-----
-  HTTP/1.1 200 OK
-  Content-Disposition: attachment
-  Content-Type: application/json; charset=UTF-8
-
-  )]}'
-  {
-    "gerrit-server/src/main/java/com/google/gerrit/server/project/RefControl.java": [
-      {
-        "id": "TvcXrmjM",
-        "line": 23,
-        "message": "unused import",
-        "updated": "2016-02-26 15:40:43.986000000",
-        "author": {
-          "_account_id": 1000110,
-          "name": "Code Analyzer",
-          "email": "code.analyzer@example.com"
-        },
-        "robot_id": "importChecker",
-        "robot_run_id": "76b1375aa8626ea7149792831fe2ed85e80d9e04"
-      },
-      {
-        "id": "TveXwFiA",
-        "line": 49,
-        "message": "wrong indention",
-        "updated": "2016-02-26 15:40:45.328000000",
-        "author": {
-          "_account_id": 1000110,
-          "name": "Code Analyzer",
-          "email": "code.analyzer@example.com"
-        },
-        "robot_id": "styleChecker",
-        "robot_run_id": "5c606c425dd45184484f9d0a2ffd725a7607839b"
-      }
-    ]
-  }
-----
-
-[[get-robot-comment]]
-=== Get Robot Comment (deprecated)
---
-'GET /changes/link:#change-id[\{change-id\}]/revisions/link:#revision-id[\{revision-id\}]/robotcomments/link:#comment-id[\{comment-id\}]'
---
-
-Retrieves a link:config-robot-comments.html[robot comment] of a
-revision.
-
-.Request
-----
-  GET /changes/myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940/revisions/674ac754f91e64a0efb8087e59a176484bd534d1/robotcomments/TvcXrmjM HTTP/1.0
-----
-
-As response a link:#robot-comment-info[RobotCommentInfo] entity is
-returned that describes the robot comment.
-
-.Response
-----
-  HTTP/1.1 200 OK
-  Content-Disposition: attachment
-  Content-Type: application/json; charset=UTF-8
-
-  )]}'
-  {
-    "id": "TvcXrmjM",
-    "line": 23,
-    "message": "unused import",
-    "updated": "2016-02-26 15:40:43.986000000",
-    "author": {
-      "_account_id": 1000110,
-      "name": "Code Analyzer",
-      "email": "code.analyzer@example.com"
-    },
-    "robot_id": "importChecker",
-    "robot_run_id": "76b1375aa8626ea7149792831fe2ed85e80d9e04"
-  }
-----
-
 [[list-ported-comments]]
 === List Ported Comments
 --
@@ -5680,10 +5528,8 @@
 comments are ported as that logic might change in the future. Instead, callers must be able to
 handle any smaller/larger set of comments returned by this endpoint.
 
-Typically, a comment thread is returned fully or excluded fully. However, draft comments and
-robot comments are ignored and not returned via this endpoint. Hence, it's possible to get ported
-comments from this endpoint which are a reply to a non-ported robot comment. Callers must be
-able to deal with this situation.
+Typically, a comment thread is returned fully or excluded fully. However, draft comments
+are ignored and not returned via this endpoint.
 
 The returned comments are organized in a map of file path to link:#comment-info[CommentInfo] entries
 in the same fashion as for the link:#list-comments[List Revision Comments] endpoint.
@@ -5766,7 +5612,7 @@
 Depending on the filtering rules, it's possible that this endpoint returns a draft comment which is
 a reply to a comment thread which is not returned by the
 link:#list-ported-comments[List Ported Comments] endpoint. That's intended behavior. Callers must be
-able to handle this situation. The same holds for drafts which are a reply to a robot comment.
+able to handle this situation.
 
 Different than the link:#list-ported-comments[List Ported Comments] endpoint, the `author` of the
 returned comments is not filled for this endpoint as only comments of the calling user are returned.
@@ -8199,6 +8045,10 @@
 |`new_mode`        |optional|File mode in octal (e.g. 100644) at the new commit.
 The first three digits indicate the file type and the last three digits contain
 the file permission bits. For deleted files, this field will not be present.
+|`old_sha`        |optional|SHA-1 of the file content at the old commit.
+For added files, this field will not be present.
+|`new_sha`        |optional|SHA-1 of the file content at the new commit.
+For deleted files, this field will not be present.
 |=============================
 
 [[fix-input]]
@@ -8859,9 +8709,6 @@
 |`comments`                             |optional|
 The comments that should be added as a map that maps a file path to a
 list of link:#comment-input[CommentInput] entities.
-|`robot_comments`                       |optional, deprecated|
-The robot comments that should be added as a map that maps a file path
-to a list of link:#robot-comment-input[RobotCommentInput] entities.
 |`drafts`                               |optional|
 Draft handling that defines how draft comments are handled that are
 already in the database but that were not also described in this
@@ -9124,58 +8971,6 @@
 by Gerrit operation).
 |===========================
 
-[[robot-comment-info]]
-=== RobotCommentInfo (deprecated)
-The `RobotCommentInfo` entity contains information about a robot inline
-comment.
-
-`RobotCommentInfo` has the same fields as <<comment-info,CommentInfo>>
-except for the `unresolved` field which doesn't exist for robot comments.
-In addition `RobotCommentInfo` has the following fields:
-
-[options="header",cols="1,^1,5"]
-|===========================
-|Field Name       ||Description
-|`robot_id`       ||The ID of the robot that generated this comment.
-|`robot_run_id`   ||An ID of the run of the robot.
-|`url`            |optional|URL to more information.
-|`properties`     |optional|Robot specific properties as map that maps arbitrary
-keys to values.
-|===========================
-
-[[robot-comment-input]]
-=== RobotCommentInput (deprecated)
-The `RobotCommentInput` entity contains information for creating an inline
-robot comment.
-
-[options="header",cols="1,^1,5"]
-|===========================
-|Field Name    ||Description
-|`path`        ||
-link:#file-id[The file path] for which the inline comment should be added.
-|`side`        |optional|
-The side on which the comment should be added. +
-Allowed values are `REVISION` and `PARENT`. +
-If not set, the default is `REVISION`.
-|`line`        |optional|
-The number of the line for which the comment should be added. +
-`0` if it is a file comment. +
-If neither line nor range is set, a file comment is added. +
-If range is set, this value is ignored in favor of the `end_line` of the range.
-|`range`       |optional|
-The range of the comment as a link:#comment-range[CommentRange]
-entity.
-|`in_reply_to` |optional|
-The URL encoded UUID of the comment to which this comment is a reply.
-|`message`     |optional|
-The comment message.
-|`robot_id`       ||The ID of the robot that generated this comment.
-|`robot_run_id`   ||An ID of the run of the robot.
-|`url`            |optional|URL to more information.
-|`properties`     |optional|Robot specific properties as map that maps arbitrary
-keys to values.
-|===========================
-
 [[rule-input]]
 === RuleInput
 The `RuleInput` entity contains information to test a Prolog rule.
diff --git a/Documentation/rest-api-config.txt b/Documentation/rest-api-config.txt
index 73cd1f1..ee6ed15 100644
--- a/Documentation/rest-api-config.txt
+++ b/Documentation/rest-api-config.txt
@@ -2047,10 +2047,10 @@
 configuration parameter] that controls whether the mergeability bit in
 link:rest-api-changes.html#change-info[ChangeInfo] will never be set and if the
 bit is indexed.
-|`enable_robot_comments`|not set if `false`|
-link:config-gerrit.html#change.enableRobotComments[Are robot comments enabled?].
 |`conflicts_predicate_enabled`|not set if `false`|
 link:config-gerrit.html#change.conflictsPredicateEnabled[Are conflicts enabled?].
+|`allow_markdown_base64_images_in_comments`|not set if `false`|
+link:config-gerrit.html#change.allowMarkdownBase64ImagesInComments[Are markdown base64 images in comments allowed?].
 |=============================
 
 [[change-index-config-info]]
diff --git a/java/com/google/gerrit/acceptance/testsuite/change/ChangeOperationsImpl.java b/java/com/google/gerrit/acceptance/testsuite/change/ChangeOperationsImpl.java
index a4f77a1..2d68974 100644
--- a/java/com/google/gerrit/acceptance/testsuite/change/ChangeOperationsImpl.java
+++ b/java/com/google/gerrit/acceptance/testsuite/change/ChangeOperationsImpl.java
@@ -471,7 +471,7 @@
 
   private ChangeInserter getChangeInserter(Change.Id changeId, String refName, ObjectId commitId) {
     ChangeInserter inserter = changeInserterFactory.create(changeId, commitId, refName);
-    inserter.setMessage(String.format("Uploaded patchset %d.", inserter.getPatchSetId().get()));
+    inserter.setMessage(String.format("Uploaded patch set %d.", inserter.getPatchSetId().get()));
     return inserter;
   }
 
@@ -667,7 +667,7 @@
       PatchSetInserter patchSetInserter =
           patchsetInserterFactory.create(changeNotes, patchsetId, newPatchsetCommit);
       patchSetInserter.setCheckAddPatchSetPermission(false);
-      patchSetInserter.setMessage(String.format("Uploaded patchset %d.", patchsetId.get()));
+      patchSetInserter.setMessage(String.format("Uploaded patch set %d.", patchsetId.get()));
       return patchSetInserter;
     }
 
diff --git a/java/com/google/gerrit/extensions/common/ChangeConfigInfo.java b/java/com/google/gerrit/extensions/common/ChangeConfigInfo.java
index 80bf130..dd4549f 100644
--- a/java/com/google/gerrit/extensions/common/ChangeConfigInfo.java
+++ b/java/com/google/gerrit/extensions/common/ChangeConfigInfo.java
@@ -23,4 +23,5 @@
   public String mergeabilityComputationBehavior;
   public Boolean enableRobotComments;
   public Boolean conflictsPredicateEnabled;
+  public Boolean allowMarkdownBase64ImagesInComments;
 }
diff --git a/java/com/google/gerrit/extensions/common/FileInfo.java b/java/com/google/gerrit/extensions/common/FileInfo.java
index 9526fbb..29a6d4f 100644
--- a/java/com/google/gerrit/extensions/common/FileInfo.java
+++ b/java/com/google/gerrit/extensions/common/FileInfo.java
@@ -20,6 +20,8 @@
   public Character status;
   public Integer oldMode;
   public Integer newMode;
+  public String oldSha;
+  public String newSha;
   public Boolean binary;
   public String oldPath;
   public Integer linesInserted;
@@ -32,6 +34,10 @@
     if (o instanceof FileInfo) {
       FileInfo fileInfo = (FileInfo) o;
       return Objects.equals(status, fileInfo.status)
+          && Objects.equals(oldMode, fileInfo.oldMode)
+          && Objects.equals(newMode, fileInfo.newMode)
+          && Objects.equals(oldSha, fileInfo.oldSha)
+          && Objects.equals(newSha, fileInfo.newSha)
           && Objects.equals(binary, fileInfo.binary)
           && Objects.equals(oldPath, fileInfo.oldPath)
           && Objects.equals(linesInserted, fileInfo.linesInserted)
@@ -52,6 +58,14 @@
     return "FileInfo{"
         + "status="
         + status
+        + ", oldMode="
+        + oldMode
+        + ", newMode="
+        + oldMode
+        + ", oldSha="
+        + oldSha
+        + ", newSha="
+        + oldSha
         + ", binary="
         + binary
         + ", oldPath="
diff --git a/java/com/google/gerrit/server/change/FileInfoJsonImpl.java b/java/com/google/gerrit/server/change/FileInfoJsonImpl.java
index d9c30d7..cda6191 100644
--- a/java/com/google/gerrit/server/change/FileInfoJsonImpl.java
+++ b/java/com/google/gerrit/server/change/FileInfoJsonImpl.java
@@ -112,6 +112,9 @@
           fileDiff.newMode().isPresent() && !fileDiff.newMode().get().equals(Patch.FileMode.MISSING)
               ? fileDiff.newMode().get().getMode()
               : null;
+      fileDiff.oldSha().ifPresent(sha -> fileInfo.oldSha = sha.name());
+      fileDiff.newSha().ifPresent(sha -> fileInfo.newSha = sha.name());
+
       if (fileDiff.patchType().get() == Patch.PatchType.BINARY) {
         fileInfo.binary = true;
       } else {
diff --git a/java/com/google/gerrit/server/change/ReviewerModifier.java b/java/com/google/gerrit/server/change/ReviewerModifier.java
index 6d454ae..6cc2f87 100644
--- a/java/com/google/gerrit/server/change/ReviewerModifier.java
+++ b/java/com/google/gerrit/server/change/ReviewerModifier.java
@@ -57,6 +57,10 @@
 import com.google.gerrit.server.account.AccountLoader;
 import com.google.gerrit.server.account.AccountResolver;
 import com.google.gerrit.server.account.GroupMembers;
+import com.google.gerrit.server.change.ReviewerModifier.FailureBehavior;
+import com.google.gerrit.server.change.ReviewerModifier.InternalReviewerInput;
+import com.google.gerrit.server.change.ReviewerModifier.ReviewerModification;
+import com.google.gerrit.server.change.ReviewerModifier.ReviewerModificationList;
 import com.google.gerrit.server.config.GerritServerConfig;
 import com.google.gerrit.server.group.GroupResolver;
 import com.google.gerrit.server.group.SystemGroupBackend;
@@ -287,7 +291,15 @@
         reviewerUser =
             accountResolver.resolveIncludeInactiveIgnoreVisibility(input.reviewer).asUniqueUser();
       } else {
-        reviewerUser = accountResolver.resolveIncludeInactive(input.reviewer).asUniqueUser();
+        // First search only active accounts to see if only one unique account is returned
+        AccountResolver.Result accountResolverResult = accountResolver.resolve(input.reviewer);
+
+        if (accountResolverResult.asList().isEmpty()) {
+          // Fallback to searching inactive account
+          accountResolverResult = accountResolver.resolveIncludeInactive(input.reviewer);
+        }
+
+        reviewerUser = accountResolverResult.asUniqueUser();
       }
       if (input.reviewer.equalsIgnoreCase(reviewerUser.getName())
           || input.reviewer.equals(String.valueOf(reviewerUser.getAccountId()))) {
diff --git a/java/com/google/gerrit/server/git/validators/CommitValidators.java b/java/com/google/gerrit/server/git/validators/CommitValidators.java
index 392f2ae..72d1d87 100644
--- a/java/com/google/gerrit/server/git/validators/CommitValidators.java
+++ b/java/com/google/gerrit/server/git/validators/CommitValidators.java
@@ -749,20 +749,20 @@
       PersonIdent committer = commit.getCommitterIdent();
       PersonIdent author = commit.getAuthorIdent();
 
-      boolean sboAuthor = false;
-      boolean sboCommitter = false;
-      boolean sboMe = false;
+      boolean signedOffByAuthor = false;
+      boolean signedOffByCommitter = false;
+      boolean signedOffByMe = false;
       for (FooterLine footer : commit.getFooterLines()) {
         if (footer.matches(FooterKey.SIGNED_OFF_BY)) {
           String e = footer.getEmailAddress();
           if (e != null) {
-            sboAuthor |= author.getEmailAddress().equals(e);
-            sboCommitter |= committer.getEmailAddress().equals(e);
-            sboMe |= user.hasEmailAddress(e);
+            signedOffByAuthor |= author.getEmailAddress().equals(e);
+            signedOffByCommitter |= committer.getEmailAddress().equals(e);
+            signedOffByMe |= user.hasEmailAddress(e);
           }
         }
       }
-      if (!sboAuthor && !sboCommitter && !sboMe) {
+      if (!signedOffByAuthor && !signedOffByCommitter && !signedOffByMe) {
         try {
           if (!perm.test(RefPermission.FORGE_COMMITTER)) {
             throw new CommitValidationException(
diff --git a/java/com/google/gerrit/server/patch/filediff/FileDiffCacheImpl.java b/java/com/google/gerrit/server/patch/filediff/FileDiffCacheImpl.java
index 82d7e93..d417fe3 100644
--- a/java/com/google/gerrit/server/patch/filediff/FileDiffCacheImpl.java
+++ b/java/com/google/gerrit/server/patch/filediff/FileDiffCacheImpl.java
@@ -70,6 +70,7 @@
 import org.eclipse.jgit.revwalk.RevCommit;
 import org.eclipse.jgit.revwalk.RevTree;
 import org.eclipse.jgit.revwalk.RevWalk;
+import org.eclipse.jgit.util.sha1.SHA1;
 
 /**
  * Cache for the single file diff between two commits for a single file path. This cache adds extra
@@ -97,7 +98,7 @@
         persist(DIFF, FileDiffCacheKey.class, FileDiffOutput.class)
             .maximumWeight(10 << 20)
             .weigher(FileDiffWeigher.class)
-            .version(9)
+            .version(10)
             .keySerializer(FileDiffCacheKey.Serializer.INSTANCE)
             .valueSerializer(FileDiffOutput.Serializer.INSTANCE)
             .loader(FileDiffLoader.class);
@@ -334,6 +335,12 @@
       byte[] rawHdr = getRawHeader(!comparisonType.isAgainstParentOrAutoMerge(), fileName);
       byte[] aContent = aText.getContent();
       byte[] bContent = bText.getContent();
+      SHA1 aContentDigest = SHA1.newInstance();
+      aContentDigest.update(aContent);
+      ObjectId aSha = ObjectId.fromRaw(aContentDigest.digest());
+      SHA1 bContentDigest = SHA1.newInstance();
+      bContentDigest.update(bContent);
+      ObjectId bSha = ObjectId.fromRaw(aContentDigest.digest());
       long size = bContent.length;
       long sizeDelta = size - aContent.length;
       RawText aRawText = new RawText(aContent);
@@ -348,6 +355,8 @@
           .comparisonType(comparisonType)
           .oldPath(FileHeaderUtil.getOldPath(fileHeader))
           .newPath(FileHeaderUtil.getNewPath(fileHeader))
+          .oldSha(Optional.of(aSha))
+          .newSha(Optional.of(bSha))
           .changeType(changeType)
           .patchType(Optional.of(FileHeaderUtil.getPatchType(fileHeader)))
           .headerLines(FileHeaderUtil.getHeaderLines(fileHeader))
@@ -415,22 +424,20 @@
         RevTree aTree = oldTreeId.equals(ObjectId.zeroId()) ? null : rw.parseTree(oldTreeId);
         RevTree bTree = rw.parseTree(allDiffs.mainDiff().gitKey().newTree());
 
-        Long oldSize =
+        FileSizeEvaluator aEvaluator = new FileSizeEvaluator(reader, aTree);
+        ObjectId oldSha =
             aTree != null && mainGitDiff.oldMode().isPresent() && mainGitDiff.oldPath().isPresent()
-                ? new FileSizeEvaluator(reader, aTree)
-                    .compute(
-                        mainGitDiff.oldId(),
-                        mainGitDiff.oldMode().get(),
-                        mainGitDiff.oldPath().get())
-                : 0;
-        Long newSize =
+                ? aEvaluator.getFileObjectId(
+                    mainGitDiff.oldId(), mainGitDiff.oldMode().get(), mainGitDiff.oldPath().get())
+                : ObjectId.zeroId();
+        Long oldSize = aEvaluator.compute(oldSha);
+        FileSizeEvaluator bEvaluator = new FileSizeEvaluator(reader, bTree);
+        ObjectId newSha =
             mainGitDiff.newMode().isPresent() && mainGitDiff.newPath().isPresent()
-                ? new FileSizeEvaluator(reader, bTree)
-                    .compute(
-                        mainGitDiff.newId(),
-                        mainGitDiff.newMode().get(),
-                        mainGitDiff.newPath().get())
-                : 0;
+                ? bEvaluator.getFileObjectId(
+                    mainGitDiff.newId(), mainGitDiff.newMode().get(), mainGitDiff.newPath().get())
+                : ObjectId.zeroId();
+        Long newSize = bEvaluator.compute(newSha);
 
         ObjectId oldCommit = augmentedKey.key().oldCommit();
         ObjectId newCommit = augmentedKey.key().newCommit();
@@ -445,6 +452,8 @@
                 .newPath(mainGitDiff.newPath())
                 .oldMode(mainGitDiff.oldMode())
                 .newMode(mainGitDiff.newMode())
+                .oldSha(!oldSha.equals(ObjectId.zeroId()) ? Optional.of(oldSha) : Optional.empty())
+                .newSha(!newSha.equals(ObjectId.zeroId()) ? Optional.of(newSha) : Optional.empty())
                 .headerLines(FileHeaderUtil.getHeaderLines(mainGitDiff.fileHeader()))
                 .edits(asTaggedEdits(mainGitDiff.edits(), rebaseEdits))
                 .size(newSize)
diff --git a/java/com/google/gerrit/server/patch/filediff/FileDiffOutput.java b/java/com/google/gerrit/server/patch/filediff/FileDiffOutput.java
index b7cd5e4..dd6b8d9 100644
--- a/java/com/google/gerrit/server/patch/filediff/FileDiffOutput.java
+++ b/java/com/google/gerrit/server/patch/filediff/FileDiffOutput.java
@@ -38,7 +38,7 @@
 /** File diff for a single file path. Produced as output of the {@link FileDiffCache}. */
 @AutoValue
 public abstract class FileDiffOutput implements Serializable {
-  private static final long serialVersionUID = 1L;
+  private static final long serialVersionUID = 2L;
 
   /**
    * The 20 bytes SHA-1 object ID of the old git commit used in the diff, or {@link
@@ -80,6 +80,20 @@
    */
   public abstract Optional<Patch.FileMode> newMode();
 
+  /**
+   * The SHA-1 of the old file at the old git tree diff identified by {@link #oldCommitId()} ()}.
+   *
+   * <p>Not populated if diffing was not performed (ie. error/timeout) or if the file is added.
+   */
+  public abstract Optional<ObjectId> oldSha();
+
+  /**
+   * The SHA-1 of the new file at the new git tree diff identified by {@link #newCommitId()} ()}.
+   *
+   * <p>Not populated if diffing was not performed (ie. error/timeout) or if the file is deleted.
+   */
+  public abstract Optional<ObjectId> newSha();
+
   /** The change type of the underlying file, e.g. added, deleted, renamed, etc... */
   public abstract Patch.ChangeType changeType();
 
@@ -223,6 +237,10 @@
 
     public abstract Builder newMode(Optional<Patch.FileMode> newMode);
 
+    public abstract Builder oldSha(Optional<ObjectId> oldSha);
+
+    public abstract Builder newSha(Optional<ObjectId> newSha);
+
     public abstract Builder changeType(ChangeType value);
 
     public abstract Builder patchType(Optional<PatchType> value);
@@ -264,6 +282,12 @@
     private static final FieldDescriptor NEW_MODE_DESCRIPTOR =
         FileDiffOutputProto.getDescriptor().findFieldByNumber(14);
 
+    private static final FieldDescriptor OLD_SHA_DESCRIPTOR =
+        FileDiffOutputProto.getDescriptor().findFieldByNumber(15);
+
+    private static final FieldDescriptor NEW_SHA_DESCRIPTOR =
+        FileDiffOutputProto.getDescriptor().findFieldByNumber(16);
+
     @Override
     public byte[] serialize(FileDiffOutput fileDiff) {
       ObjectIdConverter idConverter = ObjectIdConverter.create();
@@ -315,6 +339,14 @@
         builder.setNewMode(FILE_MODE_CONVERTER.reverse().convert(fileDiff.newMode().get()));
       }
 
+      if (fileDiff.oldSha().isPresent()) {
+        builder.setOldSha(idConverter.toByteString(fileDiff.oldSha().get()));
+      }
+
+      if (fileDiff.newSha().isPresent()) {
+        builder.setNewSha(idConverter.toByteString(fileDiff.newSha().get()));
+      }
+
       return Protos.toByteArray(builder.build());
     }
 
@@ -362,6 +394,12 @@
       if (proto.hasField(NEW_MODE_DESCRIPTOR)) {
         builder.newMode(Optional.of(FILE_MODE_CONVERTER.convert(proto.getNewMode())));
       }
+      if (proto.hasField(OLD_SHA_DESCRIPTOR)) {
+        builder.oldSha(Optional.of(idConverter.fromByteString(proto.getOldSha())));
+      }
+      if (proto.hasField(NEW_SHA_DESCRIPTOR)) {
+        builder.newSha(Optional.of(idConverter.fromByteString(proto.getNewSha())));
+      }
       return builder.build();
     }
   }
diff --git a/java/com/google/gerrit/server/patch/filediff/FileSizeEvaluator.java b/java/com/google/gerrit/server/patch/filediff/FileSizeEvaluator.java
index e2c1bc5..77c022e 100644
--- a/java/com/google/gerrit/server/patch/filediff/FileSizeEvaluator.java
+++ b/java/com/google/gerrit/server/patch/filediff/FileSizeEvaluator.java
@@ -41,15 +41,22 @@
   }
 
   /**
+   * Computes the file ObjectId (SHA-1) identified by the {@code path} parameter at the given git
+   * tree identified by {@code gitTreeId}.
+   */
+  ObjectId getFileObjectId(AbbreviatedObjectId gitTreeId, Patch.FileMode mode, String path)
+      throws IOException {
+    if (!isBlob(mode)) {
+      return ObjectId.zeroId();
+    }
+    return toObjectId(reader, gitTreeId).orElseGet(() -> lookupObjectId(reader, path, tree));
+  }
+
+  /**
    * Computes the file size identified by the {@code path} parameter at the given git tree
    * identified by {@code gitTreeId}.
    */
-  long compute(AbbreviatedObjectId gitTreeId, Patch.FileMode mode, String path) throws IOException {
-    if (!isBlob(mode)) {
-      return 0;
-    }
-    ObjectId fileId =
-        toObjectId(reader, gitTreeId).orElseGet(() -> lookupObjectId(reader, path, tree));
+  long compute(ObjectId fileId) throws IOException {
     if (ObjectId.zeroId().equals(fileId)) {
       return 0;
     }
diff --git a/java/com/google/gerrit/server/restapi/config/GetServerInfo.java b/java/com/google/gerrit/server/restapi/config/GetServerInfo.java
index 0b254ce..df94b54 100644
--- a/java/com/google/gerrit/server/restapi/config/GetServerInfo.java
+++ b/java/com/google/gerrit/server/restapi/config/GetServerInfo.java
@@ -228,6 +228,8 @@
     info.enableRobotComments = toBoolean(config.getBoolean("change", "enableRobotComments", false));
     info.conflictsPredicateEnabled =
         toBoolean(config.getBoolean("change", "conflictsPredicateEnabled", true));
+    info.allowMarkdownBase64ImagesInComments =
+        toBoolean(config.getBoolean("change", "allowMarkdownBase64ImagesInComments", false));
     return info;
   }
 
diff --git a/javatests/com/google/gerrit/acceptance/api/revision/RevisionIT.java b/javatests/com/google/gerrit/acceptance/api/revision/RevisionIT.java
index 634906e..c15b4c6 100644
--- a/javatests/com/google/gerrit/acceptance/api/revision/RevisionIT.java
+++ b/javatests/com/google/gerrit/acceptance/api/revision/RevisionIT.java
@@ -597,17 +597,56 @@
     ChangeApi change = gApi.changes().id(project.get() + "~master~" + r.getChangeId());
     CherryPickInput in = new CherryPickInput();
     in.destination = "master";
-    in.message = "it generates a new patch set\n\nChange-Id: " + r.getChangeId();
-    ChangeInfo cherryInfo = change.revision(r.getCommit().name()).cherryPick(in).get();
+    ChangeInfo cherryInfo = change.current().cherryPick(in).get();
     assertThat(cherryInfo.messages).hasSize(2);
-    Iterator<ChangeMessageInfo> cherryIt = cherryInfo.messages.iterator();
+    Iterator<ChangeMessageInfo> cherryMessageIt = cherryInfo.messages.iterator();
     assertThat(cherryInfo.cherryPickOfChange).isEqualTo(change.get()._number);
 
     // Existing change was updated.
     assertThat(cherryInfo._number).isEqualTo(change.get()._number);
+    assertThat(cherryInfo.cherryPickOfChange).isEqualTo(change.get()._number);
     assertThat(cherryInfo.cherryPickOfPatchSet).isEqualTo(1);
-    assertThat(cherryIt.next().message).isEqualTo("Uploaded patch set 1.");
-    assertThat(cherryIt.next().message).isEqualTo("Patch Set 2: Cherry Picked from branch master.");
+    assertThat(cherryMessageIt.next().message).isEqualTo("Uploaded patch set 1.");
+    assertThat(cherryMessageIt.next().message)
+        .isEqualTo("Patch Set 2: Cherry Picked from branch master.");
+  }
+
+  @Test
+  public void restoreOldPatchSetByCherryPickToSameBranch() throws Exception {
+    Change.Id changeId =
+        changeOperations.newChange().project(project).file("a.txt").content("aContent").create();
+    ChangeApi change = gApi.changes().id(project.get(), changeId.get());
+
+    // Amend the change, deleting file a.txt and adding file b.txt.
+    changeOperations
+        .change(changeId)
+        .newPatchset()
+        .file("a.txt")
+        .delete()
+        .file("b.txt")
+        .content("bContent")
+        .create();
+
+    // Restore patch set 1 by cherry-picking it.
+    CherryPickInput in = new CherryPickInput();
+    in.destination = "master";
+    ChangeInfo cherryInfo = change.revision(1).cherryPick(in).get();
+    assertThat(cherryInfo.messages).hasSize(3);
+    Iterator<ChangeMessageInfo> cherryMessageIt = cherryInfo.messages.iterator();
+    assertThat(cherryInfo.cherryPickOfChange).isEqualTo(change.get()._number);
+
+    // Existing change was updated.
+    assertThat(cherryInfo._number).isEqualTo(change.get()._number);
+    assertThat(cherryInfo.cherryPickOfChange).isEqualTo(change.get()._number);
+    assertThat(cherryInfo.cherryPickOfPatchSet).isEqualTo(1);
+    assertThat(cherryMessageIt.next().message).isEqualTo("Uploaded patch set 1.");
+    assertThat(cherryMessageIt.next().message).isEqualTo("Uploaded patch set 2.");
+    assertThat(cherryMessageIt.next().message)
+        .isEqualTo("Patch Set 3: Cherry Picked from branch master.");
+
+    // File a.txt has been restored and b.txt has been removed.
+    Map<String, FileInfo> files = change.current().files();
+    assertThat(files.keySet()).containsExactly("a.txt", COMMIT_MSG);
   }
 
   @Test
diff --git a/javatests/com/google/gerrit/acceptance/git/AbstractPushForReview.java b/javatests/com/google/gerrit/acceptance/git/AbstractPushForReview.java
index 1bf0f55..3a1acf8 100644
--- a/javatests/com/google/gerrit/acceptance/git/AbstractPushForReview.java
+++ b/javatests/com/google/gerrit/acceptance/git/AbstractPushForReview.java
@@ -108,6 +108,9 @@
 import com.google.gerrit.git.ObjectIds;
 import com.google.gerrit.server.ChangeMessagesUtil;
 import com.google.gerrit.server.PluginPushOption;
+import com.google.gerrit.server.ServerInitiated;
+import com.google.gerrit.server.account.AccountsUpdate;
+import com.google.gerrit.server.account.externalids.ExternalId;
 import com.google.gerrit.server.events.CommitReceivedEvent;
 import com.google.gerrit.server.git.receive.NoteDbPushOption;
 import com.google.gerrit.server.git.receive.PushOptionsValidator;
@@ -122,6 +125,7 @@
 import com.google.gerrit.testing.FakeEmailSender.Message;
 import com.google.gerrit.testing.TestTimeUtil;
 import com.google.inject.Inject;
+import com.google.inject.Provider;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
@@ -170,6 +174,7 @@
   @Inject private ProjectOperations projectOperations;
   @Inject private RequestScopeOperations requestScopeOperations;
   @Inject private ExtensionRegistry extensionRegistry;
+  @Inject private @ServerInitiated Provider<AccountsUpdate> accountsUpdateProvider;
 
   private static String NEW_CHANGE_INDICATOR = " [NEW]";
   private LabelType patchSetLock;
@@ -825,6 +830,46 @@
   }
 
   @Test
+  public void pushForMasterWithReviewerByEmailWithOneAccountInactive() throws Exception {
+    ConfigInput conf = new ConfigInput();
+    conf.enableReviewerByEmail = InheritableBoolean.TRUE;
+    gApi.projects().name(project.get()).config(conf);
+
+    TestAccount u1 = accountCreator.create("some.user", "some.user@example.com", "Some User", null);
+
+    // Delete the MailTo external ID from u1. We want to create u2 with the same externalId
+    // and without this, the account creation for u2 fails with
+    // com.google.gerrit.server.account.externalids.DuplicateExternalIdKeyException
+    ImmutableList<ExternalId> ids =
+        accounts.get(u1.id()).get().externalIds().stream()
+            .filter(id -> id.isScheme(ExternalId.SCHEME_MAILTO))
+            .collect(toImmutableList());
+    for (ExternalId externalId : ids) {
+      accountsUpdateProvider
+          .get()
+          .update("Delete External ID", u1.id(), u -> u.deleteExternalId(externalId));
+    }
+
+    TestAccount u2 =
+        accountCreator.create("some.user2", "some.user@example.com", "Some User2", null);
+
+    gApi.accounts().id(u1.id().get()).setActive(false);
+
+    PushOneCommit.Result r = pushTo("refs/for/master%r=some.user@example.com");
+    r.assertOkStatus();
+
+    ChangeInfo ci = get(r.getChangeId(), DETAILED_LABELS);
+    ImmutableList<AccountInfo> reviewers =
+        firstNonNull(ci.reviewers.get(ReviewerState.REVIEWER), ImmutableList.<AccountInfo>of())
+            .stream()
+            .sorted(comparing((AccountInfo a) -> a.email))
+            .collect(toImmutableList());
+
+    assertThat(reviewers).hasSize(1);
+    assertThat(reviewers.get(0)._accountId).isEqualTo(u2.id().get());
+  }
+
+  @Test
   public void pushForMasterWithReviewerGroup() throws Exception {
     TestAccount user2 = accountCreator.user2();
     String group = name("group");
diff --git a/javatests/com/google/gerrit/acceptance/rest/config/ServerInfoIT.java b/javatests/com/google/gerrit/acceptance/rest/config/ServerInfoIT.java
index 479baf3..8fd40c3 100644
--- a/javatests/com/google/gerrit/acceptance/rest/config/ServerInfoIT.java
+++ b/javatests/com/google/gerrit/acceptance/rest/config/ServerInfoIT.java
@@ -73,7 +73,7 @@
   @GerritConfig(name = "change.updateDelay", value = "50s")
   @GerritConfig(name = "change.disablePrivateChanges", value = "true")
   @GerritConfig(name = "change.enableRobotComments", value = "false")
-
+  @GerritConfig(name = "change.allowMarkdownBase64ImagesInComments", value = "false")
   // download
   @GerritConfig(
       name = "download.archive",
@@ -114,6 +114,7 @@
     assertThat(i.change.updateDelay).isEqualTo(50);
     assertThat(i.change.disablePrivateChanges).isTrue();
     assertThat(i.change.enableRobotComments).isNull();
+    assertThat(i.change.allowMarkdownBase64ImagesInComments).isNull();
 
     // download
     assertThat(i.download.archives).containsExactly("tar", "tbz2", "tgz", "txz");
diff --git a/package.json b/package.json
index 93123ee..a0ad116 100644
--- a/package.json
+++ b/package.json
@@ -7,24 +7,24 @@
     "@bazel/rollup": "^5.8.1",
     "@bazel/terser": "^5.8.1",
     "@bazel/typescript": "^5.8.1",
-    "@typescript-eslint/parser": "^5.62.0"
+    "@typescript-eslint/parser": "^8.32.0"
   },
   "devDependencies": {
     "@koa/cors": "^5.0.0",
     "@types/page": "^1.11.9",
-    "@typescript-eslint/eslint-plugin": "^5.62.0",
+    "@typescript-eslint/eslint-plugin": "^8.32.0",
     "@web/dev-server": "^0.1.38",
     "@web/dev-server-esbuild": "^0.3.6",
-    "eslint": "^8.57.1",
+    "eslint": "^9.26.0",
     "eslint-config-google": "^0.14.0",
-    "eslint-plugin-html": "^7.1.0",
+    "eslint-plugin-html": "^8.1.2",
     "eslint-plugin-import": "^2.31.0",
-    "eslint-plugin-jsdoc": "^44.2.7",
+    "eslint-plugin-jsdoc": "^50.6.11",
     "eslint-plugin-lit": "^1.15.0",
-    "eslint-plugin-node": "^11.1.0",
-    "eslint-plugin-prettier": "^4.2.1",
+    "eslint-plugin-n": "^17.17.0",
+    "eslint-plugin-prettier": "^5.4.0",
     "eslint-plugin-regex": "^1.10.0",
-    "gts": "^3.1.1",
+    "gts": "^6.0.2",
     "lit-analyzer": "^1.2.1",
     "npm-run-all": "^4.1.5",
     "prettier": "^2.8.8",
@@ -33,6 +33,11 @@
     "ts-lit-plugin": "^1.2.1",
     "typescript": "^4.9.5"
   },
+  "resolutions": {
+    "eslint": "^9.26.0",
+    "@typescript-eslint/eslint-plugin": "^8.32.0",
+    "@typescript-eslint/parser": "^8.32.0"
+  },
   "scripts": {
     "setup": "yarn && yarn --cwd=polygerrit-ui && yarn --cwd=polygerrit-ui/app",
     "clean": "git clean -fdx && bazel clean --expunge",
@@ -52,18 +57,13 @@
     "eslint": "npm run safe_bazelisk test polygerrit-ui/app:lint_test",
     "eslintfix": "npm run safe_bazelisk run polygerrit-ui/app:lint_bin -- -- --fix $(pwd)/polygerrit-ui/app",
     "litlint": "npm run safe_bazelisk run polygerrit-ui/app:lit_analysis",
-    "lint": "eslint -c polygerrit-ui/app/.eslintrc.js --ignore-path polygerrit-ui/app/.eslintignore polygerrit-ui/app",
+    "lint": "ESLINT_USE_FLAT_CONFIG=false eslint -c polygerrit-ui/app/.eslintrc.js --ignore-path polygerrit-ui/app/.eslintignore polygerrit-ui/app",
     "gjf": "./tools/gjf.sh run"
   },
   "repository": {
     "type": "git",
     "url": "https://gerrit.googlesource.com/gerrit"
   },
-  "resolutions": {
-    "eslint": "^8.57.1",
-    "@typescript-eslint/eslint-plugin": "^5.62.0",
-    "@typescript-eslint/parser": "^5.62.0"
-  },
   "author": "",
   "license": "Apache-2.0"
 }
\ No newline at end of file
diff --git a/plugins/codemirror-editor b/plugins/codemirror-editor
index 84f9c44..dfbd5c0 160000
--- a/plugins/codemirror-editor
+++ b/plugins/codemirror-editor
@@ -1 +1 @@
-Subproject commit 84f9c4452d1e4abaa969963c1a9d73d759a0c3c3
+Subproject commit dfbd5c04821a982f9e4a06cc8cbd568fabf7a629
diff --git a/plugins/webhooks b/plugins/webhooks
index 788cf1a..b00a2c2 160000
--- a/plugins/webhooks
+++ b/plugins/webhooks
@@ -1 +1 @@
-Subproject commit 788cf1a335c25a96874b99b74d7e4183b111d2f1
+Subproject commit b00a2c28eb1412312e03b541b6e2dbeefea0247a
diff --git a/polygerrit-ui/app/.eslintrc.js b/polygerrit-ui/app/.eslintrc.js
index e0fe3b5..83dc482 100644
--- a/polygerrit-ui/app/.eslintrc.js
+++ b/polygerrit-ui/app/.eslintrc.js
@@ -273,6 +273,7 @@
       files: ['**/*.ts'],
       extends: [require.resolve('gts/.eslintrc.json')],
       rules: {
+        'no-constant-binary-expression': 'off',
         'regex/invalid': [
           'error', [{
             regex: '\'lit/decorators\'',
@@ -296,6 +297,9 @@
           name: '@polymer/decorators/lib/decorators',
           message: 'Use @polymer/decorators instead',
         }],
+        '@typescript-eslint/no-empty-object-type': 'off',
+        '@typescript-eslint/no-floating-promises': 'off',
+        '@typescript-eslint/no-unsafe-function-type': 'off',
         '@typescript-eslint/no-explicit-any': 'error',
         // See https://github.com/GoogleChromeLabs/shadow-selection-polyfill/issues/9
         '@typescript-eslint/ban-ts-comment': 'off',
@@ -310,19 +314,21 @@
         ],
         '@typescript-eslint/no-unused-vars': [
           'error',
-          {argsIgnorePattern: '^_'},
+          {argsIgnorePattern: '^_', caughtErrors: 'none'},
         ],
+        '@typescript-eslint/no-unused-expressions': 'off',
+        '@typescript-eslint/no-unsafe-declaration-merging': 'off',
         // https://github.com/mysticatea/eslint-plugin-node/blob/master/docs/rules/no-unsupported-features/es-builtins.md
-        'node/no-unsupported-features/es-builtins': 'off',
+        'n/no-unsupported-features/es-builtins': 'off',
         // https://github.com/mysticatea/eslint-plugin-node/blob/master/docs/rules/no-unsupported-features/node-builtins.md
-        'node/no-unsupported-features/node-builtins': 'off',
+        'n/no-unsupported-features/node-builtins': 'off',
         // Disable no-invalid-this for ts files, because it incorrectly reports
         // errors in some cases (see https://github.com/typescript-eslint/typescript-eslint/issues/491)
         // At the same tigit llme, we are using typescript in a strict mode and
         // it catches almost all errors related to invalid usage of this.
         'no-invalid-this': 'off',
 
-        'node/no-extraneous-import': 'off',
+        'n/no-extraneous-import': 'off',
 
         // Typescript already checks for undef
         'no-undef': 'off',
diff --git a/polygerrit-ui/app/.prettierrc.js b/polygerrit-ui/app/.prettierrc.js
index 8f353bf..8920451 100644
--- a/polygerrit-ui/app/.prettierrc.js
+++ b/polygerrit-ui/app/.prettierrc.js
@@ -9,7 +9,8 @@
     {
       "files": ["**/*.ts"],
       "options": {
-          ...require('gts/.prettierrc.json')
+          ...require('gts/.prettierrc.json'),
+          "trailingComma": "es5"
       }
     }
   ]
diff --git a/polygerrit-ui/app/BUILD b/polygerrit-ui/app/BUILD
index 925820c..b33da20 100644
--- a/polygerrit-ui/app/BUILD
+++ b/polygerrit-ui/app/BUILD
@@ -165,6 +165,7 @@
         "@npm//eslint-plugin-import",
         "@npm//eslint-plugin-jsdoc",
         "@npm//eslint-plugin-lit",
+        "@npm//eslint-plugin-n",
         "@npm//eslint-plugin-prettier",
         "@npm//eslint-plugin-regex",
         "@npm//gts",
diff --git a/polygerrit-ui/app/api/rest-api.ts b/polygerrit-ui/app/api/rest-api.ts
index 34fca75..9238326 100644
--- a/polygerrit-ui/app/api/rest-api.ts
+++ b/polygerrit-ui/app/api/rest-api.ts
@@ -353,7 +353,6 @@
   disable_private_changes?: boolean;
   mergeability_computation_behavior: MergeabilityComputationBehavior;
   conflicts_predicate_enabled?: boolean;
-  enable_robot_comments?: boolean;
 }
 
 export type ChangeId = BrandType<string, '_changeId'>;
@@ -706,6 +705,8 @@
   size?: number; // in bytes
   old_mode?: number;
   new_mode?: number;
+  old_sha?: string;
+  new_sha?: string;
 }
 
 /**
diff --git a/polygerrit-ui/app/constants/constants.ts b/polygerrit-ui/app/constants/constants.ts
index 07af328..528eb59 100644
--- a/polygerrit-ui/app/constants/constants.ts
+++ b/polygerrit-ui/app/constants/constants.ts
@@ -59,10 +59,9 @@
 export enum Tab {
   FILES = 'files',
   /**
-   * When renaming 'comments' or 'findings', UrlFormatter.java must be updated.
+   * When renaming 'comments' UrlFormatter.java must be updated.
    */
   COMMENT_THREADS = 'comments',
-  FINDINGS = 'findings',
   CHECKS = 'checks',
 }
 
diff --git a/polygerrit-ui/app/constants/messages.ts b/polygerrit-ui/app/constants/messages.ts
deleted file mode 100644
index dca1e61..0000000
--- a/polygerrit-ui/app/constants/messages.ts
+++ /dev/null
@@ -1,9 +0,0 @@
-/**
- * @license
- * Copyright 2020 Google LLC
- * SPDX-License-Identifier: Apache-2.0
- */
-
-/** Message shown when no threads in gr-thread-list for robot comments */
-export const NO_ROBOT_COMMENTS_THREADS_MSG =
-  'There are no findings for this patchset.';
diff --git a/polygerrit-ui/app/constants/reporting.ts b/polygerrit-ui/app/constants/reporting.ts
index ee9b041..0c43686 100644
--- a/polygerrit-ui/app/constants/reporting.ts
+++ b/polygerrit-ui/app/constants/reporting.ts
@@ -113,7 +113,6 @@
   COMMENT_SAVED = 'comment-saved',
   DISCARD_COMMENT = 'discard-comment',
   COMMENT_DISCARDED = 'comment-discarded',
-  ROBOT_COMMENTS_STATS = 'robot-comments-stats',
   CHECKS_TAB_RENDERED = 'checks-tab-rendered',
   CHECKS_CHIP_CLICKED = 'checks-chip-clicked',
   CHECKS_CHIP_LINK_CLICKED = 'checks-chip-link-clicked',
diff --git a/polygerrit-ui/app/elements/admin/gr-access-section/gr-access-section.ts b/polygerrit-ui/app/elements/admin/gr-access-section/gr-access-section.ts
index 116c723..6b1d954 100644
--- a/polygerrit-ui/app/elements/admin/gr-access-section/gr-access-section.ts
+++ b/polygerrit-ui/app/elements/admin/gr-access-section/gr-access-section.ts
@@ -369,6 +369,13 @@
           id: 'labelAs-' + labelName,
         },
       });
+      labelOptions.push({
+        id: 'removeLabel-' + labelName,
+        value: {
+          name: `Remove Label ${labelName}`,
+          id: 'removeLabel-' + labelName,
+        },
+      });
     }
     return labelOptions;
   }
diff --git a/polygerrit-ui/app/elements/admin/gr-access-section/gr-access-section_test.ts b/polygerrit-ui/app/elements/admin/gr-access-section/gr-access-section_test.ts
index 60bcf8a..7656671 100644
--- a/polygerrit-ui/app/elements/admin/gr-access-section/gr-access-section_test.ts
+++ b/polygerrit-ui/app/elements/admin/gr-access-section/gr-access-section_test.ts
@@ -112,6 +112,9 @@
                     <option value="labelAs-Code-Review">
                       Label Code-Review (On Behalf Of)
                     </option>
+                    <option value="removeLabel-Code-Review">
+                      Remove Label Code-Review
+                    </option>
                     <option value="abandon">Abandon</option>
                     <option value="addPatchSet">Add Patch Set</option>
                     <option value="create">Create Reference</option>
@@ -203,6 +206,13 @@
             id: 'labelAs-Code-Review',
           },
         },
+        {
+          id: 'removeLabel-Code-Review',
+          value: {
+            name: 'Remove Label Code-Review',
+            id: 'removeLabel-Code-Review',
+          },
+        },
       ];
 
       assert.deepEqual(element.computeLabelOptions(), expectedLabelOptions);
@@ -254,6 +264,13 @@
             id: 'labelAs-Code-Review',
           },
         },
+        {
+          id: 'removeLabel-Code-Review',
+          value: {
+            name: 'Remove Label Code-Review',
+            id: 'removeLabel-Code-Review',
+          },
+        },
       ];
 
       element.section = {
diff --git a/polygerrit-ui/app/elements/admin/gr-admin-view/gr-admin-view.ts b/polygerrit-ui/app/elements/admin/gr-admin-view/gr-admin-view.ts
index 1e5736b..17b9e73 100644
--- a/polygerrit-ui/app/elements/admin/gr-admin-view/gr-admin-view.ts
+++ b/polygerrit-ui/app/elements/admin/gr-admin-view/gr-admin-view.ts
@@ -459,6 +459,7 @@
       <div class="main table breadcrumbs">
         <gr-repo-submit-requirements
           .repo=${this.repoViewState.repo}
+          .params=${this.repoViewState}
         ></gr-repo-submit-requirements>
       </div>
     `;
diff --git a/polygerrit-ui/app/elements/admin/gr-create-pointer-dialog/gr-create-pointer-dialog.ts b/polygerrit-ui/app/elements/admin/gr-create-pointer-dialog/gr-create-pointer-dialog.ts
index 27bb836..3615276 100644
--- a/polygerrit-ui/app/elements/admin/gr-create-pointer-dialog/gr-create-pointer-dialog.ts
+++ b/polygerrit-ui/app/elements/admin/gr-create-pointer-dialog/gr-create-pointer-dialog.ts
@@ -13,6 +13,7 @@
 import {LitElement, PropertyValues, css, html} from 'lit';
 import {customElement, property, state} from 'lit/decorators.js';
 import {BindValueChangeEvent} from '../../../types/events';
+import {ValueChangedEvent} from '../../../types/events';
 import {fireAlert, fire, fireReload} from '../../../utils/event-util';
 import {RepoDetailView} from '../../../models/views/repo';
 
@@ -45,6 +46,8 @@
   /* private but used in test */
   @state() itemAnnotation?: string;
 
+  @state() createEmptyCommit?: boolean;
+
   private readonly restApiService = getAppContext().restApiService;
 
   static override get styles() {
@@ -58,12 +61,6 @@
         input {
           width: 20em;
         }
-        /* Add css selector with #id to increase priority
-          (otherwise ".gr-form-styles section" rule wins) */
-        .hideItem,
-        #itemAnnotationSection.hideItem {
-          display: none;
-        }
       `,
     ];
   }
@@ -81,7 +78,30 @@
               <input placeholder="${this.detailType} Name" />
             </iron-input>
           </section>
-          <section id="itemRevisionSection">
+          <section
+            id="createEmptyCommitSection"
+            ?hidden=${this.itemDetail === RepoDetailView.TAGS}
+          >
+            <div>
+              <span class="title">Point to</span>
+            </div>
+            <div>
+              <span class="value">
+                <gr-select
+                  id="initialCommit"
+                  .bindValue=${this.createEmptyCommit}
+                  @bind-value-changed=${this
+                    .handleCreateEmptyCommitBindValueChanged}
+                >
+                  <select>
+                    <option value="false">Existing Revision</option>
+                    <option value="true">Initial empty commit</option>
+                  </select>
+                </gr-select>
+              </span>
+            </div>
+          </section>
+          <section id="itemRevisionSection" ?hidden=${!!this.createEmptyCommit}>
             <span class="title">Initial Revision</span>
             <iron-input
               .bindValue=${this.itemRevision}
@@ -92,9 +112,7 @@
           </section>
           <section
             id="itemAnnotationSection"
-            class=${this.itemDetail === RepoDetailView.BRANCHES
-              ? 'hideItem'
-              : ''}
+            ?hidden=${this.itemDetail === RepoDetailView.BRANCHES}
           >
             <span class="title">Annotation</span>
             <iron-input
@@ -126,10 +144,14 @@
     if (!this.itemName) {
       throw new Error('itemName name is not set');
     }
-    const USE_HEAD = this.itemRevision ? this.itemRevision : 'HEAD';
+    const useHead = this.itemRevision ? this.itemRevision : 'HEAD';
+    const createEmptyCommit = !!this.createEmptyCommit;
     if (this.itemDetail === RepoDetailView.BRANCHES) {
+      const createBranchInput = createEmptyCommit
+        ? {create_empty_commit: true}
+        : {revision: useHead};
       return this.restApiService
-        .createRepoBranch(this.repoName, this.itemName, {revision: USE_HEAD})
+        .createRepoBranch(this.repoName, this.itemName, createBranchInput)
         .then(itemRegistered => {
           if (itemRegistered.status === 201) {
             fireAlert(this, 'Branch created successfully. Reloading...');
@@ -139,7 +161,7 @@
     } else if (this.itemDetail === RepoDetailView.TAGS) {
       return this.restApiService
         .createRepoTag(this.repoName, this.itemName, {
-          revision: USE_HEAD,
+          revision: useHead,
           message: this.itemAnnotation || undefined,
         })
         .then(itemRegistered => {
@@ -163,4 +185,10 @@
   private handleItemAnnotationBindValueChanged(e: BindValueChangeEvent) {
     this.itemAnnotation = e.detail.value;
   }
+
+  private handleCreateEmptyCommitBindValueChanged(
+    e: ValueChangedEvent<string>
+  ) {
+    this.createEmptyCommit = e.detail.value === 'true';
+  }
 }
diff --git a/polygerrit-ui/app/elements/admin/gr-create-pointer-dialog/gr-create-pointer-dialog_test.ts b/polygerrit-ui/app/elements/admin/gr-create-pointer-dialog/gr-create-pointer-dialog_test.ts
index 9e455d1..96c3682 100644
--- a/polygerrit-ui/app/elements/admin/gr-create-pointer-dialog/gr-create-pointer-dialog_test.ts
+++ b/polygerrit-ui/app/elements/admin/gr-create-pointer-dialog/gr-create-pointer-dialog_test.ts
@@ -40,6 +40,21 @@
                 <input placeholder=" Name" />
               </iron-input>
             </section>
+            <section id="createEmptyCommitSection">
+              <div>
+                <span class="title">Point to</span>
+              </div>
+              <div>
+                <span class="value">
+                  <gr-select id="initialCommit">
+                    <select>
+                      <option value="false">Existing Revision</option>
+                      <option value="true">Initial empty commit</option>
+                    </select>
+                  </gr-select>
+                </span>
+              </div>
+            </section>
             <section id="itemRevisionSection">
               <span class="title"> Initial Revision </span>
               <iron-input>
diff --git a/polygerrit-ui/app/elements/admin/gr-create-repo-dialog/gr-create-repo-dialog.ts b/polygerrit-ui/app/elements/admin/gr-create-repo-dialog/gr-create-repo-dialog.ts
index 077ac94..7ddda89 100644
--- a/polygerrit-ui/app/elements/admin/gr-create-repo-dialog/gr-create-repo-dialog.ts
+++ b/polygerrit-ui/app/elements/admin/gr-create-repo-dialog/gr-create-repo-dialog.ts
@@ -145,6 +145,36 @@
               <input id="repoNameInput" autocomplete="on" />
             </iron-input>
           </section>
+          <section>
+            <div class="title-flex">
+              <span class="title">
+                <gr-tooltip-content
+                  has-tooltip
+                  title="Only serve as a parent repository for other repositories
+to inheright access rights and configs.
+If 'true', then you cannot push code to this repo.
+It will only have a 'refs/meta/config' branch."
+                >
+                  Parent Repo Only <gr-icon icon="info"></gr-icon>
+                </gr-tooltip-content>
+              </span>
+            </div>
+            <div class="value-flex">
+              <span class="value">
+                <gr-select
+                  id="parentRepo"
+                  .bindValue=${this.repoConfig.permissions_only}
+                  @bind-value-changed=${this
+                    .handlePermissionsOnlyBindValueChanged}
+                >
+                  <select>
+                    <option value="false">False</option>
+                    <option value="true">True</option>
+                  </select>
+                </gr-select>
+              </span>
+            </div>
+          </section>
           <section ?hidden=${!!this.repoConfig.permissions_only}>
             <div class="title-flex">
               <span class="title">Default Branch</span>
@@ -232,36 +262,6 @@
               </span>
             </div>
           </section>
-          <section>
-            <div class="title-flex">
-              <span class="title">
-                <gr-tooltip-content
-                  has-tooltip
-                  title="Only serve as a parent repository for other repositories
-to inheright access rights and configs.
-If 'true', then you cannot push code to this repo.
-It will only have a 'refs/meta/config' branch."
-                >
-                  Parent Repo Only <gr-icon icon="info"></gr-icon>
-                </gr-tooltip-content>
-              </span>
-            </div>
-            <div class="value-flex">
-              <span class="value">
-                <gr-select
-                  id="parentRepo"
-                  .bindValue=${this.repoConfig.permissions_only}
-                  @bind-value-changed=${this
-                    .handlePermissionsOnlyBindValueChanged}
-                >
-                  <select>
-                    <option value="false">False</option>
-                    <option value="true">True</option>
-                  </select>
-                </gr-select>
-              </span>
-            </div>
-          </section>
         </div>
       </div>
     `;
diff --git a/polygerrit-ui/app/elements/admin/gr-create-repo-dialog/gr-create-repo-dialog_test.ts b/polygerrit-ui/app/elements/admin/gr-create-repo-dialog/gr-create-repo-dialog_test.ts
index 289cd03..49787ce 100644
--- a/polygerrit-ui/app/elements/admin/gr-create-repo-dialog/gr-create-repo-dialog_test.ts
+++ b/polygerrit-ui/app/elements/admin/gr-create-repo-dialog/gr-create-repo-dialog_test.ts
@@ -41,6 +41,32 @@
             </section>
             <section>
               <div class="title-flex">
+                <span class="title">
+                  <gr-tooltip-content
+                    has-tooltip=""
+                    title="Only serve as a parent repository for other repositories
+to inheright access rights and configs.
+If 'true', then you cannot push code to this repo.
+It will only have a 'refs/meta/config' branch."
+                  >
+                    Parent Repo Only
+                    <gr-icon icon="info"> </gr-icon>
+                  </gr-tooltip-content>
+                </span>
+              </div>
+              <div class="value-flex">
+                <span class="value">
+                  <gr-select id="parentRepo">
+                    <select>
+                      <option value="false">False</option>
+                      <option value="true">True</option>
+                    </select>
+                  </gr-select>
+                </span>
+              </div>
+            </section>
+            <section>
+              <div class="title-flex">
                 <span class="title"> Default Branch </span>
               </div>
               <span class="value">
@@ -102,32 +128,6 @@
                 </span>
               </div>
             </section>
-            <section>
-              <div class="title-flex">
-                <span class="title">
-                  <gr-tooltip-content
-                    has-tooltip=""
-                    title="Only serve as a parent repository for other repositories
-to inheright access rights and configs.
-If 'true', then you cannot push code to this repo.
-It will only have a 'refs/meta/config' branch."
-                  >
-                    Parent Repo Only
-                    <gr-icon icon="info"> </gr-icon>
-                  </gr-tooltip-content>
-                </span>
-              </div>
-              <div class="value-flex">
-                <span class="value">
-                  <gr-select id="parentRepo">
-                    <select>
-                      <option value="false">False</option>
-                      <option value="true">True</option>
-                    </select>
-                  </gr-select>
-                </span>
-              </div>
-            </section>
           </div>
         </div>
       `
diff --git a/polygerrit-ui/app/elements/admin/gr-repo-access/gr-repo-access.ts b/polygerrit-ui/app/elements/admin/gr-repo-access/gr-repo-access.ts
index 17e24b5..66a461e 100644
--- a/polygerrit-ui/app/elements/admin/gr-repo-access/gr-repo-access.ts
+++ b/polygerrit-ui/app/elements/admin/gr-repo-access/gr-repo-access.ts
@@ -157,6 +157,7 @@
         .weblinks.show,
         .referenceContainer {
           display: block;
+          align-content: center;
         }
         .rightsText {
           margin-right: var(--spacing-s);
@@ -165,11 +166,15 @@
         .editing gr-button,
         .admin #editBtn {
           display: inline-block;
-          margin: var(--spacing-l) 0;
+          margin: var(--spacing-l);
         }
         .editing #editInheritFromInput {
           display: inline-block;
         }
+
+        .topLevelButtons {
+          display: flex;
+        }
       `,
     ];
   }
@@ -210,11 +215,40 @@
               }}
             ></gr-autocomplete>
           </h3>
-          <div class="weblinks ${this.weblinks?.length ? 'show' : ''}">
-            History:
-            ${this.weblinks?.map(
-              info => html`<gr-weblink .info=${info}></gr-weblink>`
-            )}
+          <div class="topLevelButtons">
+            <div class="weblinks ${this.weblinks?.length ? 'show' : ''}">
+              History:
+              ${this.weblinks?.map(
+                info => html`<gr-weblink .info=${info}></gr-weblink>`
+              )}
+            </div>
+            <div>
+              <gr-button
+                id="editBtn"
+                @click=${() => {
+                  this.handleEdit();
+                }}
+                >${this.editing ? 'Cancel' : 'Edit'}</gr-button
+              >
+              <gr-button
+                id="saveBtn"
+                class=${this.ownerOf && this.ownerOf.length === 0
+                  ? 'invisible'
+                  : ''}
+                primary
+                ?disabled=${!this.modified || this.disableSaveWithoutReview}
+                @click=${this.handleSave}
+                >Save</gr-button
+              >
+              <gr-button
+                id="saveReviewBtn"
+                class=${!this.canUpload ? 'invisible' : ''}
+                primary
+                ?disabled=${!this.modified}
+                @click=${this.handleSaveForReview}
+                >Save For Review</gr-button
+              >
+            </div>
           </div>
           ${this.sections?.map((section, index) =>
             this.renderPermissionSections(section, index)
@@ -226,33 +260,6 @@
               >Add Reference</gr-button
             >
           </div>
-          <div>
-            <gr-button
-              id="editBtn"
-              @click=${() => {
-                this.handleEdit();
-              }}
-              >${this.editing ? 'Cancel' : 'Edit'}</gr-button
-            >
-            <gr-button
-              id="saveBtn"
-              class=${this.ownerOf && this.ownerOf.length === 0
-                ? 'invisible'
-                : ''}
-              primary
-              ?disabled=${!this.modified || this.disableSaveWithoutReview}
-              @click=${this.handleSave}
-              >Save</gr-button
-            >
-            <gr-button
-              id="saveReviewBtn"
-              class=${!this.canUpload ? 'invisible' : ''}
-              primary
-              ?disabled=${!this.modified}
-              @click=${this.handleSaveForReview}
-              >Save For Review</gr-button
-            >
-          </div>
         </div>
       </div>
     `;
diff --git a/polygerrit-ui/app/elements/admin/gr-repo-access/gr-repo-access_test.ts b/polygerrit-ui/app/elements/admin/gr-repo-access/gr-repo-access_test.ts
index d5eb17a..6437e9f 100644
--- a/polygerrit-ui/app/elements/admin/gr-repo-access/gr-repo-access_test.ts
+++ b/polygerrit-ui/app/elements/admin/gr-repo-access/gr-repo-access_test.ts
@@ -137,7 +137,40 @@
               <a href="" id="inheritFromName" rel="noopener"> </a>
               <gr-autocomplete id="editInheritFromInput"> </gr-autocomplete>
             </h3>
-            <div class="weblinks">History:</div>
+            <div class="topLevelButtons">
+              <div class="weblinks">History:</div>
+              <div>
+                <gr-button
+                  aria-disabled="false"
+                  id="editBtn"
+                  role="button"
+                  tabindex="0"
+                >
+                  Edit
+                </gr-button>
+                <gr-button
+                  aria-disabled="true"
+                  disabled=""
+                  class="invisible"
+                  id="saveBtn"
+                  primary=""
+                  role="button"
+                  tabindex="-1"
+                >
+                  Save
+                </gr-button>
+                <gr-button
+                  aria-disabled="false"
+                  class="invisible"
+                  id="saveReviewBtn"
+                  primary=""
+                  role="button"
+                  tabindex="0"
+                >
+                  Save For Review
+                </gr-button>
+              </div>
+            </div>
             <div class="referenceContainer">
               <gr-button
                 aria-disabled="false"
@@ -148,37 +181,6 @@
                 Add Reference
               </gr-button>
             </div>
-            <div>
-              <gr-button
-                aria-disabled="false"
-                id="editBtn"
-                role="button"
-                tabindex="0"
-              >
-                Edit
-              </gr-button>
-              <gr-button
-                aria-disabled="true"
-                disabled=""
-                class="invisible"
-                id="saveBtn"
-                primary=""
-                role="button"
-                tabindex="-1"
-              >
-                Save
-              </gr-button>
-              <gr-button
-                aria-disabled="false"
-                class="invisible"
-                id="saveReviewBtn"
-                primary=""
-                role="button"
-                tabindex="0"
-              >
-                Save For Review
-              </gr-button>
-            </div>
           </div>
         </div>
       `
diff --git a/polygerrit-ui/app/elements/admin/gr-repo-detail-list/gr-repo-detail-list_test.ts b/polygerrit-ui/app/elements/admin/gr-repo-detail-list/gr-repo-detail-list_test.ts
index 8a0bac3..e36cb32 100644
--- a/polygerrit-ui/app/elements/admin/gr-repo-detail-list/gr-repo-detail-list_test.ts
+++ b/polygerrit-ui/app/elements/admin/gr-repo-detail-list/gr-repo-detail-list_test.ts
@@ -2193,7 +2193,7 @@
       });
 
       test('test for tag message in the list', async () => {
-        assert.equal((element.items as TagInfo[])![2].message, 'Annotated tag');
+        assert.equal((element.items as TagInfo[])[2].message, 'Annotated tag');
       });
 
       test('test for tagger in the tag list', async () => {
@@ -2203,7 +2203,7 @@
           date: '2017-09-19 14:54:00.000000000' as Timestamp,
         };
 
-        assert.deepEqual((element.items as TagInfo[])![2].tagger, tagger);
+        assert.deepEqual((element.items as TagInfo[])[2].tagger, tagger);
       });
 
       test('test for web links in the tags list', async () => {
diff --git a/polygerrit-ui/app/elements/admin/gr-repo-submit-requirements/gr-repo-submit-requirements.ts b/polygerrit-ui/app/elements/admin/gr-repo-submit-requirements/gr-repo-submit-requirements.ts
index 6de8705..fdd6a95 100644
--- a/polygerrit-ui/app/elements/admin/gr-repo-submit-requirements/gr-repo-submit-requirements.ts
+++ b/polygerrit-ui/app/elements/admin/gr-repo-submit-requirements/gr-repo-submit-requirements.ts
@@ -3,98 +3,243 @@
  * Copyright 2025 Google LLC
  * SPDX-License-Identifier: Apache-2.0
  */
-import {RepoName, SubmitRequirementInfo} from '../../../types/common';
+import {
+  RepoName,
+  SubmitRequirementInfo,
+  SubmitRequirementInput,
+} from '../../../types/common';
 import {firePageError} from '../../../utils/event-util';
 import {getAppContext} from '../../../services/app-context';
 import {ErrorCallback} from '../../../api/rest';
 import {sharedStyles} from '../../../styles/shared-styles';
 import {tableStyles} from '../../../styles/gr-table-styles';
-import {LitElement, css, html, PropertyValues} from 'lit';
-import {customElement, property, state} from 'lit/decorators.js';
+import {LitElement, css, html, PropertyValues, nothing} from 'lit';
+import {customElement, property, state, query} from 'lit/decorators.js';
 import {when} from 'lit/directives/when.js';
+import {grFormStyles} from '../../../styles/gr-form-styles';
+import {assertIsDefined} from '../../../utils/common-util';
+import {modalStyles} from '../../../styles/gr-modal-styles';
+import {userModelToken} from '../../../models/user/user-model';
+import {resolve} from '../../../models/dependency';
+import {subscribe} from '../../lit/subscription-controller';
+import '../../shared/gr-list-view/gr-list-view';
+import {
+  createRepoUrl,
+  RepoDetailView,
+  RepoViewState,
+} from '../../../models/views/repo';
+import '@polymer/iron-input/iron-input';
 
 @customElement('gr-repo-submit-requirements')
 export class GrRepoSubmitRequirements extends LitElement {
   @property({type: String})
   repo?: RepoName;
 
+  @property({type: Object})
+  params?: RepoViewState;
+
+  @query('#createDialog')
+  private readonly createDialog?: HTMLDialogElement;
+
+  @query('#deleteDialog')
+  private readonly deleteDialog?: HTMLDialogElement;
+
   @state()
   loading = true;
 
   @state()
   submitRequirements?: SubmitRequirementInfo[];
 
+  @state()
+  showCreateDialog = false;
+
+  @state() isAdmin = false;
+
+  @state()
+  newRequirement: SubmitRequirementInput = this.getEmptyRequirement();
+
+  @state() offset = 0;
+
+  @state() filter = '';
+
+  @state() itemsPerPage = 25;
+
+  @state() showDeleteDialog = false;
+
+  @state() requirementToDelete?: SubmitRequirementInfo;
+
   private readonly restApiService = getAppContext().restApiService;
 
+  private readonly getUserModel = resolve(this, userModelToken);
+
   static override get styles() {
     return [
       sharedStyles,
       tableStyles,
+      grFormStyles,
+      modalStyles,
       css`
         :host {
           display: block;
           margin-bottom: var(--spacing-xxl);
         }
+        .actions {
+          display: flex;
+          justify-content: flex-end;
+          margin-bottom: var(--spacing-m);
+          padding: var(--spacing-l);
+        }
+        .createButton {
+          margin-left: var(--spacing-m);
+        }
+        .deleteBtn {
+          --gr-button-padding: var(--spacing-s) var(--spacing-m);
+        }
+        div.title-flex,
+        div.value-flex {
+          display: flex;
+          flex-direction: column;
+          justify-content: center;
+        }
+        input {
+          width: 20em;
+          box-sizing: border-box;
+        }
+        div.gr-form-styles section {
+          margin: var(--spacing-m) 0;
+        }
+        div.gr-form-styles span.title {
+          width: 13em;
+        }
+        section .title gr-icon {
+          vertical-align: top;
+        }
+        textarea {
+          width: 20em;
+          min-height: 100px;
+          resize: vertical;
+          box-sizing: border-box;
+        }
+        gr-dialog {
+          width: 36em;
+        }
       `,
     ];
   }
 
+  constructor() {
+    super();
+    subscribe(
+      this,
+      () => this.getUserModel().isAdmin$,
+      x => (this.isAdmin = x)
+    );
+  }
+
   override render() {
-    return html` <table id="list" class="genericList">
-      <tbody>
-        <tr class="headerRow">
-          <th class="topHeader">Name</th>
-          <th class="topHeader">Description</th>
-          <th class="topHeader">Applicability Expression</th>
-          <th class="topHeader">Submittability Expression</th>
-          <th class="topHeader">Override Expression</th>
-          <th
-            class="topHeader"
-            title="Whether override is allowed in child projects"
-          >
-            Allow Override
-          </th>
-        </tr>
-      </tbody>
-      <tbody id="submit-requirements">
-        ${when(
-          this.loading,
-          () => html`<tr id="loadingContainer">
-            <td>Loading...</td>
-          </tr>`,
-          () =>
-            html` ${(this.submitRequirements ?? []).map(
-              item => html`
-                <tr class="table">
-                  <td class="name">${item.name}</td>
-                  <td class="desc">${item.description}</td>
-                  <td class="applicability">
-                    ${item.applicability_expression}
-                  </td>
-                  <td class="submittability">
-                    ${item.submittability_expression}
-                  </td>
-                  <td class="override">${item.override_expression}</td>
-                  <td class="allowOverride">
-                    ${this.renderCheckmark(
-                      item.allow_override_in_child_projects
-                    )}
-                  </td>
-                </tr>
-              `
-            )}`
-        )}
-      </tbody>
-    </table>`;
+    return html`
+      <gr-list-view
+        .createNew=${this.isAdmin}
+        .filter=${this.filter}
+        .itemsPerPage=${this.itemsPerPage}
+        .items=${this.submitRequirements}
+        .loading=${this.loading}
+        .offset=${this.offset}
+        .path=${createRepoUrl({
+          repo: this.repo,
+          detail: RepoDetailView.SUBMIT_REQUIREMENTS,
+        })}
+        @create-clicked=${() => this.handleCreateClick()}
+      >
+        <table id="list" class="genericList">
+          <tbody>
+            <tr class="headerRow">
+              <th class="topHeader">Name</th>
+              <th class="topHeader">Description</th>
+              <th class="topHeader">Applicability Expression</th>
+              <th class="topHeader">Submittability Expression</th>
+              <th class="topHeader">Override Expression</th>
+              <th
+                class="topHeader"
+                title="Whether override is allowed in child projects"
+              >
+                Allow Override
+              </th>
+              ${when(this.isAdmin, () => html`<th class="topHeader"></th>`)}
+            </tr>
+          </tbody>
+          <tbody id="submit-requirements">
+            ${when(
+              this.loading,
+              () => html`<tr id="loadingContainer">
+                <td>Loading...</td>
+              </tr>`,
+              () =>
+                html` ${(this.submitRequirements ?? []).map(
+                  item => html`
+                    <tr class="table">
+                      <td class="name">${item.name}</td>
+                      <td class="desc">${item.description}</td>
+                      <td class="applicability">
+                        ${item.applicability_expression}
+                      </td>
+                      <td class="submittability">
+                        ${item.submittability_expression}
+                      </td>
+                      <td class="override">${item.override_expression}</td>
+                      <td class="allowOverride">
+                        ${this.renderCheckmark(
+                          item.allow_override_in_child_projects
+                        )}
+                      </td>
+                      ${when(
+                        this.isAdmin,
+                        () => html`
+                          <td class="actions">
+                            <gr-button
+                              class="deleteBtn"
+                              link
+                              @click=${() => this.handleDeleteClick(item)}
+                            >
+                              Delete
+                            </gr-button>
+                          </td>
+                        `
+                      )}
+                    </tr>
+                  `
+                )}`
+            )}
+          </tbody>
+        </table>
+      </gr-list-view>
+
+      ${this.renderCreateDialog()} ${this.renderDeleteDialog()}
+    `;
   }
 
   override updated(changedProperties: PropertyValues) {
     if (changedProperties.has('repo')) {
-      this.repoChanged();
+      this.getSubmitRequirements();
     }
   }
 
-  private repoChanged() {
+  override willUpdate(changedProperties: PropertyValues) {
+    if (changedProperties.has('params')) {
+      this._paramsChanged();
+    }
+  }
+
+  async _paramsChanged() {
+    const params = this.params;
+    this.loading = true;
+    this.filter = params?.filter ?? '';
+    this.offset = Number(params?.offset ?? 0);
+
+    await this.getSubmitRequirements(this.filter, this.offset);
+  }
+
+  private getSubmitRequirements(filter?: string, offset?: number) {
     const repo = this.repo;
     this.loading = true;
     if (!repo) {
@@ -112,7 +257,13 @@
           return;
         }
 
-        this.submitRequirements = res;
+        this.submitRequirements = res
+          .filter(item =>
+            filter === undefined
+              ? true
+              : item.name.toLowerCase().includes(filter.toLowerCase())
+          )
+          .slice(offset ?? 0, (offset ?? 0) + this.itemsPerPage);
         this.loading = false;
       });
   }
@@ -120,6 +271,257 @@
   private renderCheckmark(check?: boolean) {
     return check ? '✓' : '';
   }
+
+  private handleCreateClick() {
+    assertIsDefined(this.createDialog, 'createDialog');
+    this.createDialog.showModal();
+  }
+
+  private handleCreateCancel() {
+    assertIsDefined(this.createDialog, 'createDialog');
+    this.createDialog.close();
+    this.newRequirement = this.getEmptyRequirement();
+  }
+
+  private handleCreateConfirm() {
+    if (!this.repo) return;
+    if (
+      !this.newRequirement.name ||
+      !this.newRequirement.submittability_expression
+    ) {
+      return;
+    }
+
+    const errFn: ErrorCallback = response => {
+      firePageError(response);
+    };
+
+    this.restApiService
+      .createSubmitRequirement(this.repo, this.newRequirement, errFn)
+      .then(() => {
+        this.createDialog?.close();
+        this.newRequirement = this.getEmptyRequirement();
+        this.getSubmitRequirements(this.filter, this.offset);
+      });
+  }
+
+  private getEmptyRequirement(): SubmitRequirementInput {
+    return {
+      name: '',
+      description: '',
+      applicability_expression: '',
+      submittability_expression: '',
+      override_expression: '',
+      allow_override_in_child_projects: false,
+    };
+  }
+
+  private renderCreateDialog() {
+    if (!this.isAdmin) return nothing;
+
+    return html`
+      <dialog id="createDialog" tabindex="-1">
+        <gr-dialog
+          confirm-label="Create"
+          cancel-label="Cancel"
+          ?disabled=${!this.newRequirement.name ||
+          !this.newRequirement.submittability_expression}
+          @confirm=${this.handleCreateConfirm}
+          @cancel=${this.handleCreateCancel}
+        >
+          <div class="header" slot="header">Create Submit Requirement</div>
+          <div class="main" slot="main">
+            <div class="gr-form-styles">
+              <div id="form">
+                <section>
+                  <div class="title-flex">
+                    <span class="title">Name</span>
+                  </div>
+                  <div class="value-flex">
+                    <span class="value">
+                      <iron-input
+                        .bindValue=${this.newRequirement.name}
+                        @bind-value-changed=${(e: Event) => {
+                          this.newRequirement = {
+                            ...this.newRequirement,
+                            name: (e as CustomEvent).detail.value,
+                          };
+                        }}
+                      >
+                        <input id="name" type="text" required />
+                      </iron-input>
+                    </span>
+                  </div>
+                </section>
+                <section>
+                  <div class="title-flex">
+                    <span class="title">Description</span>
+                  </div>
+                  <div class="value-flex">
+                    <span class="value">
+                      <textarea
+                        id="description"
+                        .value=${this.newRequirement.description}
+                        placeholder="Optional"
+                      ></textarea>
+                    </span>
+                  </div>
+                </section>
+                <section>
+                  <div class="title-flex">
+                    <span class="title">Applicability Expression</span>
+                  </div>
+                  <div class="value-flex">
+                    <span class="value">
+                      <iron-input
+                        .bindValue=${this.newRequirement
+                          .applicability_expression}
+                        @bind-value-changed=${(e: Event) => {
+                          this.newRequirement = {
+                            ...this.newRequirement,
+                            applicability_expression: (e as CustomEvent).detail
+                              .value,
+                          };
+                        }}
+                      >
+                        <input
+                          id="applicability"
+                          type="text"
+                          placeholder="Optional"
+                        />
+                      </iron-input>
+                    </span>
+                  </div>
+                </section>
+                <section>
+                  <div class="title-flex">
+                    <span class="title">Submittability Expression</span>
+                  </div>
+                  <div class="value-flex">
+                    <span class="value">
+                      <iron-input
+                        .bindValue=${this.newRequirement
+                          .submittability_expression}
+                        @bind-value-changed=${(e: Event) => {
+                          this.newRequirement = {
+                            ...this.newRequirement,
+                            submittability_expression: (e as CustomEvent).detail
+                              .value,
+                          };
+                        }}
+                      >
+                        <input id="submittability" type="text" required />
+                      </iron-input>
+                    </span>
+                  </div>
+                </section>
+                <section>
+                  <div class="title-flex">
+                    <span class="title">Override Expression</span>
+                  </div>
+                  <div class="value-flex">
+                    <span class="value">
+                      <iron-input
+                        .bindValue=${this.newRequirement.override_expression}
+                        @bind-value-changed=${(e: Event) => {
+                          this.newRequirement = {
+                            ...this.newRequirement,
+                            override_expression: (e as CustomEvent).detail
+                              .value,
+                          };
+                        }}
+                      >
+                        <input
+                          id="override"
+                          type="text"
+                          placeholder="Optional"
+                        />
+                      </iron-input>
+                    </span>
+                  </div>
+                </section>
+                <section>
+                  <div class="title-flex">
+                    <span class="title">Allow Override in Child Projects</span>
+                  </div>
+                  <div class="value-flex">
+                    <span class="value">
+                      <gr-select
+                        id="allowOverride"
+                        .bindValue=${this.newRequirement
+                          .allow_override_in_child_projects}
+                        @bind-value-changed=${(e: Event) => {
+                          this.newRequirement = {
+                            ...this.newRequirement,
+                            allow_override_in_child_projects:
+                              (e as CustomEvent).detail.value === 'true',
+                          };
+                        }}
+                      >
+                        <select>
+                          <option value="true">True</option>
+                          <option value="false">False</option>
+                        </select>
+                      </gr-select>
+                    </span>
+                  </div>
+                </section>
+              </div>
+            </div>
+          </div>
+        </gr-dialog>
+      </dialog>
+    `;
+  }
+
+  private renderDeleteDialog() {
+    if (!this.isAdmin) return nothing;
+
+    return html`
+      <dialog id="deleteDialog" tabindex="-1">
+        <gr-dialog
+          confirm-label="Delete"
+          cancel-label="Cancel"
+          @confirm=${this.handleDeleteConfirm}
+          @cancel=${this.handleDeleteCancel}
+        >
+          <div class="header" slot="header">Delete Submit Requirement</div>
+          <div class="main" slot="main">
+            Are you sure you want to delete the submit requirement
+            "${this.requirementToDelete?.name}"?
+          </div>
+        </gr-dialog>
+      </dialog>
+    `;
+  }
+
+  private handleDeleteClick(requirement: SubmitRequirementInfo) {
+    this.requirementToDelete = requirement;
+    assertIsDefined(this.deleteDialog, 'deleteDialog');
+    this.deleteDialog.showModal();
+  }
+
+  private handleDeleteCancel() {
+    assertIsDefined(this.deleteDialog, 'deleteDialog');
+    this.deleteDialog.close();
+    this.requirementToDelete = undefined;
+  }
+
+  private handleDeleteConfirm() {
+    if (!this.repo || !this.requirementToDelete) return;
+
+    const errFn: ErrorCallback = response => {
+      firePageError(response);
+    };
+
+    this.restApiService
+      .deleteSubmitRequirement(this.repo, this.requirementToDelete.name, errFn)
+      .then(() => {
+        this.deleteDialog?.close();
+        this.requirementToDelete = undefined;
+        this.getSubmitRequirements(this.filter, this.offset);
+      });
+  }
 }
 
 declare global {
diff --git a/polygerrit-ui/app/elements/admin/gr-repo-submit-requirements/gr-repo-submit-requirements_test.ts b/polygerrit-ui/app/elements/admin/gr-repo-submit-requirements/gr-repo-submit-requirements_test.ts
index f438a68..cad812a 100644
--- a/polygerrit-ui/app/elements/admin/gr-repo-submit-requirements/gr-repo-submit-requirements_test.ts
+++ b/polygerrit-ui/app/elements/admin/gr-repo-submit-requirements/gr-repo-submit-requirements_test.ts
@@ -38,36 +38,7 @@
       element.repo = 'test2' as RepoName;
       assert.shadowDom.equal(
         element,
-        /* HTML */ `<table class="genericList" id="list">
-          <tbody>
-            <tr class="headerRow">
-              <th class="topHeader">Name</th>
-              <th class="topHeader">Description</th>
-              <th class="topHeader">Applicability Expression</th>
-              <th class="topHeader">Submittability Expression</th>
-              <th class="topHeader">Override Expression</th>
-              <th
-                class="topHeader"
-                title="Whether override is allowed in child projects"
-              >
-                Allow Override
-              </th>
-            </tr>
-          </tbody>
-          <tbody id="submit-requirements">
-            <tr id="loadingContainer">
-              <td>Loading...</td>
-            </tr>
-          </tbody>
-        </table>`
-      );
-    });
-
-    test('render', async () => {
-      await waitEventLoop();
-      assert.shadowDom.equal(
-        element,
-        /* HTML */ `
+        /* HTML */ `<gr-list-view>
           <table class="genericList" id="list">
             <tbody>
               <tr class="headerRow">
@@ -85,20 +56,250 @@
               </tr>
             </tbody>
             <tbody id="submit-requirements">
-              <tr class="table">
-                <td class="name">Verified</td>
-                <td class="desc">
-                  CI result status for build and tests is passing
-                </td>
-                <td class="applicability"></td>
-                <td class="submittability">
-                  label:Verified=MAX AND -label:Verified=MIN
-                </td>
-                <td class="override"></td>
-                <td class="allowOverride"></td>
+              <tr id="loadingContainer">
+                <td>Loading...</td>
               </tr>
             </tbody>
           </table>
+        </gr-list-view>`
+      );
+    });
+
+    test('render', async () => {
+      await waitEventLoop();
+      assert.shadowDom.equal(
+        element,
+        /* HTML */ `
+          <gr-list-view>
+            <table class="genericList" id="list">
+              <tbody>
+                <tr class="headerRow">
+                  <th class="topHeader">Name</th>
+                  <th class="topHeader">Description</th>
+                  <th class="topHeader">Applicability Expression</th>
+                  <th class="topHeader">Submittability Expression</th>
+                  <th class="topHeader">Override Expression</th>
+                  <th
+                    class="topHeader"
+                    title="Whether override is allowed in child projects"
+                  >
+                    Allow Override
+                  </th>
+                </tr>
+              </tbody>
+              <tbody id="submit-requirements">
+                <tr class="table">
+                  <td class="name">Verified</td>
+                  <td class="desc">
+                    CI result status for build and tests is passing
+                  </td>
+                  <td class="applicability"></td>
+                  <td class="submittability">
+                    label:Verified=MAX AND -label:Verified=MIN
+                  </td>
+                  <td class="override"></td>
+                  <td class="allowOverride"></td>
+                </tr>
+              </tbody>
+            </table>
+          </gr-list-view>
+        `
+      );
+    });
+
+    test('render as admin', async () => {
+      await waitEventLoop();
+      element.isAdmin = true;
+      await element.updateComplete;
+      assert.shadowDom.equal(
+        element,
+        /* HTML */ `
+          <gr-list-view>
+            <table class="genericList" id="list">
+              <tbody>
+                <tr class="headerRow">
+                  <th class="topHeader">Name</th>
+                  <th class="topHeader">Description</th>
+                  <th class="topHeader">Applicability Expression</th>
+                  <th class="topHeader">Submittability Expression</th>
+                  <th class="topHeader">Override Expression</th>
+                  <th
+                    class="topHeader"
+                    title="Whether override is allowed in child projects"
+                  >
+                    Allow Override
+                  </th>
+                  <th class="topHeader"></th>
+                </tr>
+              </tbody>
+              <tbody id="submit-requirements">
+                <tr class="table">
+                  <td class="name">Verified</td>
+                  <td class="desc">
+                    CI result status for build and tests is passing
+                  </td>
+                  <td class="applicability"></td>
+                  <td class="submittability">
+                    label:Verified=MAX AND -label:Verified=MIN
+                  </td>
+                  <td class="override"></td>
+                  <td class="allowOverride"></td>
+                  <td class="actions">
+                    <gr-button
+                      aria-disabled="false"
+                      class="deleteBtn"
+                      link=""
+                      role="button"
+                      tabindex="0"
+                    >
+                      Delete
+                    </gr-button>
+                  </td>
+                </tr>
+              </tbody>
+            </table>
+          </gr-list-view>
+          <dialog id="createDialog" tabindex="-1">
+            <gr-dialog cancel-label="Cancel" confirm-label="Create" disabled="">
+              <div class="header" slot="header">Create Submit Requirement</div>
+              <div class="main" slot="main">
+                <div class="gr-form-styles">
+              <div id="form">
+                <section>
+                  <div class="title-flex">
+                    <span class="title">
+                      Name
+                    </span>
+                  </div>
+                  <div class="value-flex">
+                    <span class="value">
+                      <iron-input>
+                        <input
+                          id="name"
+                          required=""
+                          type="text"
+                        >
+                      </iron-input>
+                    </span>
+                  </div>
+                </section>
+                <section>
+                  <div class="title-flex">
+                    <span class="title">
+                      Description
+                    </span>
+                  </div>
+                  <div class="value-flex">
+                    <span class="value">
+                      <textarea
+                        id="description"
+                        placeholder="Optional"
+                      >
+                      </textarea>
+                    </span>
+                  </div>
+                </section>
+                <section>
+                  <div class="title-flex">
+                    <span class="title">
+                      Applicability Expression
+                    </span>
+                  </div>
+                  <div class="value-flex">
+                    <span class="value">
+                      <iron-input>
+                      <input
+                        id="applicability"
+                        placeholder="Optional"
+                        type="text"
+                      >
+                      </iron-input>
+                    </span>
+                  </div>
+                </section>
+                <section>
+                  <div class="title-flex">
+                    <span class="title">
+                      Submittability Expression
+                    </span>
+                  </div>
+                  <div class="value-flex">
+                    <span class="value">
+                      <iron-input>
+                      <input
+                        id="submittability"
+                        required=""
+                        type="text"
+                        >
+                      </iron-input>
+                    </span>
+                  </div>
+                </section>
+                <section>
+                  <div class="title-flex">
+                    <span class="title">
+                      Override Expression
+                    </span>
+                  </div>
+                  <div class="value-flex">
+                    <span class="value">
+                      <iron-input>
+                        <input
+                          id="override"
+                          placeholder="Optional"
+                          type="text"
+                        >
+                      </iron-input>
+                    </span>
+                  </div>
+                </section>
+                <section>
+                  <div class="title-flex">
+                    <span class="title">
+                      Allow Override in Child Projects
+                    </span>
+                  </div>
+                  <div class="value-flex">
+                    <span class="value">
+                      <gr-select id="allowOverride">
+                        <select>
+                          <option value="true">
+                            True
+                          </option>
+                          <option value="false">
+                            False
+                          </option>
+                        </select>
+                      </gr-select>
+                    </span>
+                  </div>
+                </section>
+              </div>
+            </gr-dialog>
+          </dialog>
+          <dialog
+        id="deleteDialog"
+        tabindex="-1"
+      >
+        <gr-dialog
+          cancel-label="Cancel"
+          confirm-label="Delete"
+        >
+          <div
+            class="header"
+            slot="header"
+          >
+            Delete Submit Requirement
+          </div>
+          <div
+            class="main"
+            slot="main"
+          >
+          Are you sure you want to delete the submit requirement
+            ""?
+          </div>
+        </gr-dialog>
+      </dialog>
         `
       );
     });
diff --git a/polygerrit-ui/app/elements/change-list/gr-change-list/gr-change-list.ts b/polygerrit-ui/app/elements/change-list/gr-change-list/gr-change-list.ts
index 37b19b2..b6a834e 100644
--- a/polygerrit-ui/app/elements/change-list/gr-change-list/gr-change-list.ts
+++ b/polygerrit-ui/app/elements/change-list/gr-change-list/gr-change-list.ts
@@ -20,7 +20,7 @@
 import {ColumnNames, ScrollMode} from '../../../constants/constants';
 import {
   getRequirements,
-  orderSubmitRequirements,
+  orderSubmitRequirementNames,
 } from '../../../utils/label-util';
 import {Key} from '../../../utils/dom-util';
 import {assertIsDefined, unique} from '../../../utils/common-util';
@@ -369,11 +369,11 @@
     }
     const changes = sections.map(section => section.results).flat();
     const labels = (changes ?? [])
-      .map(change => orderSubmitRequirements(getRequirements(change)))
+      .map(change => getRequirements(change))
       .flat()
       .map(requirement => requirement.name)
       .filter(unique);
-    return labels.sort();
+    return orderSubmitRequirementNames(labels);
   }
 
   private changesChanged() {
diff --git a/polygerrit-ui/app/elements/change-list/gr-change-list/gr-change-list_test.ts b/polygerrit-ui/app/elements/change-list/gr-change-list/gr-change-list_test.ts
index 30d3455..ef4e1a0 100644
--- a/polygerrit-ui/app/elements/change-list/gr-change-list/gr-change-list_test.ts
+++ b/polygerrit-ui/app/elements/change-list/gr-change-list/gr-change-list_test.ts
@@ -6,7 +6,11 @@
 import * as sinon from 'sinon';
 import '../../../test/common-test-setup';
 import './gr-change-list';
-import {GrChangeList, computeRelativeIndex} from './gr-change-list';
+import {
+  ChangeListSection,
+  GrChangeList,
+  computeRelativeIndex,
+} from './gr-change-list';
 import {navigationToken} from '../../core/gr-navigation/gr-navigation';
 import {
   pressKey,
@@ -174,58 +178,53 @@
   });
 
   test('computed fields', () => {
-    assert.equal(
-      element.computeLabelNames([
-        {
+    const createTestSubmitReqs = (
+      labelLists: string[][]
+    ): ChangeListSection[] => {
+      let changeNumber = 0;
+      const sections: ChangeListSection[] = [];
+      for (const labelList of labelLists) {
+        sections.push({
           results: [
-            {...createChange(), _number: 0 as NumericChangeId, labels: {}},
+            {
+              ...createChange(),
+              _number: changeNumber++ as NumericChangeId,
+              submit_requirements: labelList.map(label => {
+                return {
+                  ...createSubmitRequirementResultInfo(),
+                  name: label,
+                };
+              }),
+            },
           ],
-        },
-      ]).length,
+        });
+      }
+      return sections;
+    };
+
+    assert.equal(
+      element.computeLabelNames(createTestSubmitReqs([[]])).length,
       0
     );
-    assert.equal(
-      element.computeLabelNames([
-        {
-          results: [
-            {
-              ...createChange(),
-              _number: 0 as NumericChangeId,
-              submit_requirements: [
-                {
-                  ...createSubmitRequirementResultInfo(),
-                  name: 'Verified',
-                },
-              ],
-            },
-            {
-              ...createChange(),
-              _number: 1 as NumericChangeId,
-              submit_requirements: [
-                {
-                  ...createSubmitRequirementResultInfo(),
-                  name: 'Verified',
-                },
-                {
-                  ...createSubmitRequirementResultInfo(),
-                  name: 'Code-Review',
-                },
-              ],
-            },
-            {
-              ...createChange(),
-              _number: 2 as NumericChangeId,
-              submit_requirements: [
-                {
-                  ...createSubmitRequirementResultInfo(),
-                  name: 'Library-Compliance',
-                },
-              ],
-            },
-          ],
-        },
-      ]).length,
-      3
+    assert.deepEqual(
+      element.computeLabelNames(
+        createTestSubmitReqs([
+          ['Verified'],
+          ['Verified', 'Code-Review'],
+          ['Library-Compliance'],
+        ])
+      ),
+      ['Code-Review', 'Library-Compliance', 'Verified']
+    );
+
+    assert.deepEqual(
+      element.computeLabelNames(
+        createTestSubmitReqs([
+          ['Verified', 'A-Label'],
+          ['Verified', 'Code-Review'],
+        ])
+      ),
+      ['Code-Review', 'A-Label', 'Verified']
     );
   });
 
@@ -434,7 +433,7 @@
         const elementClass = '.' + column.trim().toLowerCase();
         const section = queryAndAssert(element, 'gr-change-list-section');
         assert.isFalse(
-          queryAndAssert<HTMLElement>(section, elementClass)!.hidden
+          queryAndAssert<HTMLElement>(section, elementClass).hidden
         );
       }
     });
diff --git a/polygerrit-ui/app/elements/change/gr-change-actions/gr-change-actions.ts b/polygerrit-ui/app/elements/change/gr-change-actions/gr-change-actions.ts
index 6b1c925..12e9a43 100644
--- a/polygerrit-ui/app/elements/change/gr-change-actions/gr-change-actions.ts
+++ b/polygerrit-ui/app/elements/change/gr-change-actions/gr-change-actions.ts
@@ -1780,7 +1780,7 @@
       '/edit:publish',
       assertUIActionInfo(this.actions.publishEdit),
       false,
-      {notify: NotifyType.NONE}
+      {notify: NotifyType.OWNER_REVIEWERS}
     );
     this.sendPublishEditEvent();
   }
@@ -1852,7 +1852,7 @@
     action: UIActionInfo,
     revAction: boolean,
     payload?: RequestPayload,
-    toReport?: Object
+    toReport?: object
   ) {
     const cleanupFn = this.setLoadingOnButtonWithKey(action);
     this.reporting.reportInteraction(Interaction.CHANGE_ACTION_FIRED, {
diff --git a/polygerrit-ui/app/elements/change/gr-change-actions/gr-change-actions_test.ts b/polygerrit-ui/app/elements/change/gr-change-actions/gr-change-actions_test.ts
index a26d37f8f..b9495cd 100644
--- a/polygerrit-ui/app/elements/change/gr-change-actions/gr-change-actions_test.ts
+++ b/polygerrit-ui/app/elements/change/gr-change-actions/gr-change-actions_test.ts
@@ -398,7 +398,7 @@
         )
       );
       assert.equal(
-        (element.revisionActions['plugin~action'] as UIActionInfo)!.__url,
+        (element.revisionActions['plugin~action'] as UIActionInfo).__url,
         'the-url'
       );
     });
@@ -416,7 +416,7 @@
         stub.calledWith(element.changeNum, undefined, '/plugin~action')
       );
       assert.equal(
-        (element.actions['plugin~action'] as UIActionInfo)!.__url,
+        (element.actions['plugin~action'] as UIActionInfo).__url,
         'the-url'
       );
     });
diff --git a/polygerrit-ui/app/elements/change/gr-change-summary/gr-summary-chip.ts b/polygerrit-ui/app/elements/change/gr-change-summary/gr-summary-chip.ts
index 5588f40..a61d41f 100644
--- a/polygerrit-ui/app/elements/change/gr-change-summary/gr-summary-chip.ts
+++ b/polygerrit-ui/app/elements/change/gr-change-summary/gr-summary-chip.ts
@@ -35,7 +35,7 @@
   category?: CommentTabState;
 
   @property({type: Boolean})
-  clickable?: Boolean;
+  clickable?: boolean;
 
   private readonly reporting = getAppContext().reportingService;
 
diff --git a/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view.ts b/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view.ts
index 147d012..63ecf8f 100644
--- a/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view.ts
+++ b/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view.ts
@@ -3,7 +3,7 @@
  * Copyright 2015 Google LLC
  * SPDX-License-Identifier: Apache-2.0
  */
-import {BehaviorSubject, combineLatest} from 'rxjs';
+import {BehaviorSubject} from 'rxjs';
 import '../gr-copy-links/gr-copy-links';
 import '@polymer/paper-tabs/paper-tabs';
 import '../../../styles/gr-a11y-styles';
@@ -34,7 +34,7 @@
 import '../../checks/gr-checks-tab';
 import {ChangeStarToggleStarDetail} from '../../shared/gr-change-star/gr-change-star';
 import {GrEditConstants} from '../../edit/gr-edit-constants';
-import {pluralize} from '../../../utils/string-util';
+import {pluralize, trimWithEllipsis} from '../../../utils/string-util';
 import {untilRendered, whenVisible} from '../../../utils/dom-util';
 import {navigationToken} from '../../core/gr-navigation/gr-navigation';
 import {ChangeStatus, Tab, DiffViewMode} from '../../../constants/constants';
@@ -66,13 +66,11 @@
   LabelNameToInfoMap,
   NumericChangeId,
   PARENT,
-  PatchSetNum,
   QuickLabelInfo,
   RevisionInfo,
   RevisionPatchSetNum,
   ServerInfo,
   UrlEncodedCommentId,
-  isRobot,
 } from '../../../types/common';
 import {FocusTarget, GrReplyDialog} from '../gr-reply-dialog/gr-reply-dialog';
 import {GrIncludedInDialog} from '../gr-included-in-dialog/gr-included-in-dialog';
@@ -166,8 +164,6 @@
 
 const PREFIX = '#message-';
 
-const ROBOT_COMMENTS_LIMIT = 10;
-
 const ReloadToastMessage = {
   NEWER_REVISION: 'A newer patch set has been uploaded',
   RESTORED: 'This change has been restored',
@@ -359,9 +355,6 @@
   @state()
   private pluginTabsContentEndpoints: string[] = [];
 
-  @state()
-  private currentRobotCommentsPatchSet?: PatchSetNum;
-
   /**
    * This can be a string only for plugin provided tabs.
    */
@@ -373,12 +366,6 @@
   unresolvedOnly = true;
 
   @state()
-  private showAllRobotComments = false;
-
-  @state()
-  private showRobotCommentsButton = false;
-
-  @state()
   draftCount = 0;
 
   private throttledToggleChangeStar?: (e: KeyboardEvent) => void;
@@ -386,10 +373,6 @@
   @state()
   private showChecksTab = false;
 
-  // visible for testing
-  @state()
-  showFindingsTab = false;
-
   @state()
   private isViewCurrent = false;
 
@@ -596,17 +579,6 @@
     );
     subscribe(
       this,
-      () =>
-        combineLatest([
-          this.getConfigModel().enableRobotComments$,
-          this.getCommentsModel().robotCommentCount$,
-        ]),
-      ([enableRobotComments, count]) => {
-        this.showFindingsTab = enableRobotComments && count > 0;
-      }
-    );
-    subscribe(
-      this,
       () => this.getViewModel().childView$,
       childView => {
         this.isViewCurrent = childView === ChangeChildView.OVERVIEW;
@@ -1131,9 +1103,6 @@
         .patch-set-dropdown {
           margin: var(--spacing-m) 0 0 var(--spacing-m);
         }
-        .show-robot-comments {
-          margin: var(--spacing-m);
-        }
         .tabContent gr-thread-list::part(threads) {
           padding: var(--spacing-l);
         }
@@ -1245,7 +1214,9 @@
           >${this.change?._number}</a
         >
       </gr-button>
-      <span class="headerSubject">${this.change?.subject}</span>
+      <div class="headerSubject">
+        ${trimWithEllipsis(this.change?.subject, 80)}
+      </div>
       <gr-copy-clipboard
         class="changeCopyClipboard"
         hideInput=""
@@ -1429,14 +1400,6 @@
             </paper-tab>
           `
         )}
-        ${when(
-          this.showFindingsTab,
-          () => html`
-            <paper-tab data-name=${Tab.FINDINGS} @click=${this.onPaperTabClick}>
-              <span>Findings</span>
-            </paper-tab>
-          `
-        )}
       </paper-tabs>
     `;
   }
@@ -1445,8 +1408,7 @@
     return html`
       <section class="tabContent">
         ${this.renderFilesTab()} ${this.renderCommentsTab()}
-        ${this.renderChecksTab()} ${this.renderFindingsTab()}
-        ${this.renderPluginTab()}
+        ${this.renderChecksTab()} ${this.renderPluginTab()}
       </section>
     `;
   }
@@ -1501,7 +1463,6 @@
       <gr-thread-list
         .threads=${this.commentThreads}
         .commentTabState=${this.tabState}
-        only-show-robot-comments-with-human-reply
         .unresolvedOnly=${this.unresolvedOnly}
         .scrollCommentId=${this.scrollCommentId}
         show-comment-context
@@ -1517,36 +1478,6 @@
     `;
   }
 
-  private renderFindingsTab() {
-    if (this.activeTab !== Tab.FINDINGS) return nothing;
-    if (!this.showFindingsTab) return nothing;
-    const robotCommentThreads = this.computeRobotCommentThreads();
-    const robotCommentsPatchSetDropdownItems =
-      this.computeRobotCommentsPatchSetDropdownItems();
-    return html`
-      <gr-dropdown-list
-        class="patch-set-dropdown"
-        .items=${robotCommentsPatchSetDropdownItems}
-        .value=${this.currentRobotCommentsPatchSet}
-        @value-change=${this.handleRobotCommentPatchSetChanged}
-      >
-      </gr-dropdown-list>
-      <gr-thread-list .threads=${robotCommentThreads} hide-dropdown>
-      </gr-thread-list>
-      ${when(
-        this.showRobotCommentsButton,
-        () => html`
-          <gr-button
-            class="show-robot-comments"
-            @click=${this.toggleShowRobotComments}
-          >
-            ${this.showAllRobotComments ? 'Show Less' : 'Show More'}
-          </gr-button>
-        `
-      )}
-    `;
-  }
-
   private renderPluginTab() {
     const i = this.pluginTabsHeaderEndpoints.findIndex(
       t => this.activeTab === t
@@ -1753,76 +1684,6 @@
     return false;
   }
 
-  // Private but used in tests.
-  robotCommentCountPerPatchSet(threads: CommentThread[]) {
-    return threads.reduce((robotCommentCountMap, thread) => {
-      const comments = thread.comments;
-      const robotCommentsCount = comments.reduce(
-        (acc, comment) => (isRobot(comment) ? acc + 1 : acc),
-        0
-      );
-      if (comments[0].patch_set)
-        robotCommentCountMap[`${comments[0].patch_set}`] =
-          (robotCommentCountMap[`${comments[0].patch_set}`] || 0) +
-          robotCommentsCount;
-      return robotCommentCountMap;
-    }, {} as {[patchset: string]: number});
-  }
-
-  // Private but used in tests.
-  computeText(
-    patch: RevisionInfo | EditRevisionInfo,
-    commentThreads: CommentThread[]
-  ) {
-    const commentCount = this.robotCommentCountPerPatchSet(commentThreads);
-    const commentCnt = commentCount[patch._number] || 0;
-    if (commentCnt === 0) return `Patchset ${patch._number}`;
-    return `Patchset ${patch._number} (${pluralize(commentCnt, 'finding')})`;
-  }
-
-  private computeRobotCommentsPatchSetDropdownItems() {
-    if (!this.change || !this.commentThreads || !this.change.revisions)
-      return [];
-
-    return Object.values(this.change.revisions)
-      .filter(patch => patch._number !== EDIT)
-      .map(patch => {
-        return {
-          text: this.computeText(patch, this.commentThreads!),
-          value: patch._number,
-        };
-      })
-      .sort((a, b) => (b.value as number) - (a.value as number));
-  }
-
-  private handleRobotCommentPatchSetChanged(e: CustomEvent<{value: string}>) {
-    const patchSet = Number(e.detail.value) as PatchSetNum;
-    if (patchSet === this.currentRobotCommentsPatchSet) return;
-    this.currentRobotCommentsPatchSet = patchSet;
-  }
-
-  private toggleShowRobotComments() {
-    this.showAllRobotComments = !this.showAllRobotComments;
-  }
-
-  // Private but used in tests.
-  computeRobotCommentThreads() {
-    if (!this.commentThreads || !this.currentRobotCommentsPatchSet) return [];
-    const threads = this.commentThreads.filter(thread => {
-      const comments = thread.comments || [];
-      return (
-        comments.length &&
-        isRobot(comments[0]) &&
-        comments[0].patch_set === this.currentRobotCommentsPatchSet
-      );
-    });
-    this.showRobotCommentsButton = threads.length > ROBOT_COMMENTS_LIMIT;
-    return threads.slice(
-      0,
-      this.showAllRobotComments ? undefined : ROBOT_COMMENTS_LIMIT
-    );
-  }
-
   private computeTotalCommentCounts() {
     const unresolvedCount = this.change?.unresolved_comment_count ?? 0;
     const draftCount = this.draftCount;
@@ -2012,14 +1873,6 @@
     this.allPatchSets = computeAllPatchSets(this.change);
     if (!this.change) return;
     this.labelsChanged(oldChange?.labels, this.change.labels);
-    if (
-      this.change.current_revision &&
-      this.change.revisions &&
-      this.change.revisions[this.change.current_revision]
-    ) {
-      this.currentRobotCommentsPatchSet =
-        this.change.revisions[this.change.current_revision]._number;
-    }
   }
 
   /**
diff --git a/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view_test.ts b/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view_test.ts
index 1ffe720..d075ea6 100644
--- a/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view_test.ts
+++ b/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view_test.ts
@@ -50,8 +50,6 @@
   NumericChangeId,
   PARENT,
   RevisionPatchSetNum,
-  RobotId,
-  RobotCommentInfo,
   Timestamp,
   UrlEncodedCommentId,
   RepoName,
@@ -72,7 +70,6 @@
 import {assertIsDefined} from '../../../utils/common-util';
 import {fixture, html, assert} from '@open-wc/testing';
 import {Modifier} from '../../../utils/dom-util';
-import {GrButton} from '../../shared/gr-button/gr-button';
 import {GrCopyLinks} from '../gr-copy-links/gr-copy-links';
 import {
   ChangeChildView,
@@ -90,8 +87,6 @@
   let userModel: UserModel;
   let changeModel: ChangeModel;
 
-  const ROBOT_COMMENTS_LIMIT = 10;
-
   // TODO: should have a mock service to generate VALID fake data
   const THREADS: CommentThread[] = [
     {
@@ -103,21 +98,6 @@
             name: 'user',
             username: 'user',
           },
-          patch_set: 2 as RevisionPatchSetNum,
-          robot_id: 'rb1' as RobotId,
-          id: 'ecf0b9fa_fe1a5f62' as UrlEncodedCommentId,
-          line: 5,
-          updated: '2018-02-08 18:49:18.000000000' as Timestamp,
-          message: 'test',
-          unresolved: true,
-        },
-        {
-          path: '/COMMIT_MSG',
-          author: {
-            _account_id: 1000000 as AccountId,
-            name: 'user',
-            username: 'user',
-          },
           patch_set: 4 as RevisionPatchSetNum,
           id: 'ecf0b9fa_fe1a5f62_1' as UrlEncodedCommentId,
           line: 5,
@@ -146,21 +126,6 @@
     {
       comments: [
         {
-          path: '/COMMIT_MSG',
-          author: {
-            _account_id: 1000000 as AccountId,
-            name: 'user',
-            username: 'user',
-          },
-          patch_set: 3 as RevisionPatchSetNum,
-          id: 'ecf0b9fa_fe5f62' as UrlEncodedCommentId,
-          robot_id: 'rb2' as RobotId,
-          line: 5,
-          updated: '2018-02-08 18:49:18.000000000' as Timestamp,
-          message: 'test',
-          unresolved: true,
-        },
-        {
           path: 'test.txt',
           author: {
             _account_id: 1000000 as AccountId,
@@ -247,23 +212,7 @@
       commentSide: CommentSide.REVISION,
     },
     {
-      comments: [
-        {
-          path: '/COMMIT_MSG',
-          author: {
-            _account_id: 1000000 as AccountId,
-            name: 'user',
-            username: 'user',
-          },
-          patch_set: 4 as RevisionPatchSetNum,
-          id: 'rc1' as UrlEncodedCommentId,
-          line: 5,
-          updated: '2019-02-08 18:49:18.000000000' as Timestamp,
-          message: 'test',
-          unresolved: true,
-          robot_id: 'rc1' as RobotId,
-        },
-      ],
+      comments: [],
       patchNum: 4 as RevisionPatchSetNum,
       path: '/COMMIT_MSG',
       line: 5,
@@ -280,21 +229,6 @@
             username: 'user',
           },
           patch_set: 4 as RevisionPatchSetNum,
-          id: 'rc2' as UrlEncodedCommentId,
-          line: 5,
-          updated: '2019-03-08 18:49:18.000000000' as Timestamp,
-          message: 'test',
-          unresolved: true,
-          robot_id: 'rc2' as RobotId,
-        },
-        {
-          path: '/COMMIT_MSG',
-          author: {
-            _account_id: 1000000 as AccountId,
-            name: 'user',
-            username: 'user',
-          },
-          patch_set: 4 as RevisionPatchSetNum,
           id: 'c2_1' as UrlEncodedCommentId,
           line: 5,
           updated: '2019-03-08 18:49:18.000000000' as Timestamp,
@@ -332,7 +266,6 @@
       Promise.resolve(createAccountDetailWithId(5))
     );
     stubRestApi('getDiffComments').returns(Promise.resolve({}));
-    stubRestApi('getDiffRobotComments').returns(Promise.resolve({}));
     stubRestApi('getDiffDrafts').returns(Promise.resolve({}));
 
     window.Gerrit.install(
@@ -391,7 +324,7 @@
                   ><gr-change-star id="changeStar"> </gr-change-star>
                   <a aria-label="Change undefined" class="changeNumber"> </a>
                 </gr-button>
-                <span class="headerSubject"> </span>
+                <div class="headerSubject"></div>
                 <gr-copy-clipboard
                   class="changeCopyClipboard"
                   hideinput=""
@@ -965,112 +898,6 @@
     });
   });
 
-  suite('Findings robot-comment tab', () => {
-    setup(async () => {
-      element.changeNum = TEST_NUMERIC_CHANGE_ID;
-      element.change = {
-        ...createChangeViewChange(),
-        revisions: {
-          rev2: createRevision(2),
-          rev1: createRevision(1),
-          rev13: createRevision(13),
-          rev3: createRevision(3),
-          rev4: createRevision(4),
-        },
-        current_revision: 'rev4' as CommitId,
-      };
-      element.commentThreads = THREADS;
-      element.showFindingsTab = true;
-      await element.updateComplete;
-      const paperTabs = element.shadowRoot!.querySelector('#tabs')!;
-      const tabs = paperTabs.querySelectorAll('paper-tab');
-      assert.isTrue(tabs.length > 3);
-      assert.equal(tabs[3].dataset.name, 'findings');
-      tabs[3].click();
-      await element.updateComplete;
-    });
-
-    test('robot comments count per patchset', () => {
-      const count = element.robotCommentCountPerPatchSet(THREADS);
-      const expectedCount = {
-        2: 1,
-        3: 1,
-        4: 2,
-      };
-      assert.deepEqual(count, expectedCount);
-      assert.equal(
-        element.computeText(createRevision(2), THREADS),
-        'Patchset 2 (1 finding)'
-      );
-      assert.equal(
-        element.computeText(createRevision(4), THREADS),
-        'Patchset 4 (2 findings)'
-      );
-      assert.equal(
-        element.computeText(createRevision(5), THREADS),
-        'Patchset 5'
-      );
-    });
-
-    test('only robot comments are rendered', () => {
-      assert.equal(element.computeRobotCommentThreads().length, 2);
-      assert.equal(
-        (
-          element.computeRobotCommentThreads()[0]
-            .comments[0] as RobotCommentInfo
-        ).robot_id,
-        'rc1'
-      );
-      assert.equal(
-        (
-          element.computeRobotCommentThreads()[1]
-            .comments[0] as RobotCommentInfo
-        ).robot_id,
-        'rc2'
-      );
-    });
-
-    test('changing patchsets resets robot comments', async () => {
-      assertIsDefined(element.change);
-      const newChange = {...element.change};
-      newChange.current_revision = 'rev3' as CommitId;
-      element.change = newChange;
-      await element.updateComplete;
-      assert.equal(element.computeRobotCommentThreads().length, 1);
-    });
-
-    test('Show more button is hidden', () => {
-      assert.isNull(element.shadowRoot!.querySelector('.show-robot-comments'));
-    });
-
-    suite('robot comments show more button', () => {
-      setup(async () => {
-        const arr = [];
-        for (let i = 0; i <= 30; i++) {
-          arr.push(...THREADS);
-        }
-        element.commentThreads = arr;
-        await element.updateComplete;
-      });
-
-      test('Show more button is rendered', () => {
-        assert.isOk(element.shadowRoot!.querySelector('.show-robot-comments'));
-        assert.equal(
-          element.computeRobotCommentThreads().length,
-          ROBOT_COMMENTS_LIMIT
-        );
-      });
-
-      test('Clicking show more button renders all comments', async () => {
-        element
-          .shadowRoot!.querySelector<GrButton>('.show-robot-comments')!
-          .click();
-        await element.updateComplete;
-        assert.equal(element.computeRobotCommentThreads().length, 62);
-      });
-    });
-  });
-
   test('reply button is a login button when logged out', async () => {
     assertIsDefined(element.replyBtn);
     element.loggedIn = false;
@@ -1536,7 +1363,7 @@
     const stub = sinon.stub(element, 'handleToggleStar');
 
     const changeStar = queryAndAssert<GrChangeStar>(element, '#changeStar');
-    queryAndAssert<HTMLButtonElement>(changeStar, 'button')!.click();
+    queryAndAssert<HTMLButtonElement>(changeStar, 'button').click();
     assert.isTrue(stub.called);
   });
 
diff --git a/polygerrit-ui/app/elements/change/gr-comments-summary/gr-comments-summary.ts b/polygerrit-ui/app/elements/change/gr-comments-summary/gr-comments-summary.ts
index 9123cd6..ac5c7b1 100644
--- a/polygerrit-ui/app/elements/change/gr-comments-summary/gr-comments-summary.ts
+++ b/polygerrit-ui/app/elements/change/gr-comments-summary/gr-comments-summary.ts
@@ -10,9 +10,7 @@
 import {customElement, property, state} from 'lit/decorators.js';
 import {
   getFirstComment,
-  hasHumanReply,
   isResolved,
-  isRobotThread,
   isUnresolved,
 } from '../../../utils/comment-util';
 import {pluralize} from '../../../utils/string-util';
@@ -96,9 +94,7 @@
   }
 
   override render() {
-    const commentThreads =
-      this.commentThreads?.filter(t => !isRobotThread(t) || hasHumanReply(t)) ??
-      [];
+    const commentThreads = this.commentThreads ?? [];
     const countResolvedComments = commentThreads.filter(isResolved).length;
     const unresolvedThreads = commentThreads.filter(isUnresolved);
     const countUnresolvedComments = unresolvedThreads.length;
diff --git a/polygerrit-ui/app/elements/change/gr-confirm-cherrypick-conflict-dialog/gr-confirm-cherrypick-conflict-dialog_test.ts b/polygerrit-ui/app/elements/change/gr-confirm-cherrypick-conflict-dialog/gr-confirm-cherrypick-conflict-dialog_test.ts
index 61cc227..d46a57c 100644
--- a/polygerrit-ui/app/elements/change/gr-confirm-cherrypick-conflict-dialog/gr-confirm-cherrypick-conflict-dialog_test.ts
+++ b/polygerrit-ui/app/elements/change/gr-confirm-cherrypick-conflict-dialog/gr-confirm-cherrypick-conflict-dialog_test.ts
@@ -57,7 +57,7 @@
     queryAndAssert<GrButton>(
       queryAndAssert<GrDialog>(element, 'gr-dialog'),
       'gr-button#cancel'
-    )!.click();
+    ).click();
     await element.updateComplete;
 
     assert.isTrue(cancelHandler.called);
diff --git a/polygerrit-ui/app/elements/change/gr-confirm-cherrypick-dialog/gr-confirm-cherrypick-dialog.ts b/polygerrit-ui/app/elements/change/gr-confirm-cherrypick-dialog/gr-confirm-cherrypick-dialog.ts
index b6fba85..0f8d045 100644
--- a/polygerrit-ui/app/elements/change/gr-confirm-cherrypick-dialog/gr-confirm-cherrypick-dialog.ts
+++ b/polygerrit-ui/app/elements/change/gr-confirm-cherrypick-dialog/gr-confirm-cherrypick-dialog.ts
@@ -34,6 +34,7 @@
 } from '../../../constants/constants';
 import {subscribe} from '../../lit/subscription-controller';
 import {fire, fireNoBubble} from '../../../utils/event-util';
+import {trimWithEllipsis} from '../../../utils/string-util';
 import {css, html, LitElement, PropertyValues} from 'lit';
 import {sharedStyles} from '../../../styles/shared-styles';
 import {choose} from 'lit/directives/choose.js';
@@ -414,7 +415,9 @@
                 <td><span> ${this.getChangeId(item)} </span></td>
                 <td><span> ${item.status} </span></td>
                 <td>
-                  <span> ${this.getTrimmedChangeSubject(item.subject)} </span>
+                  <span>
+                    ${trimWithEllipsis(item.subject, CHANGE_SUBJECT_LIMIT)}
+                  </span>
                 </td>
                 <td><span> ${item.project} </span></td>
                 <td>
@@ -523,12 +526,6 @@
     return change.change_id.substring(0, 10);
   }
 
-  private getTrimmedChangeSubject(subject: string) {
-    if (!subject) return '';
-    if (subject.length < CHANGE_SUBJECT_LIMIT) return subject;
-    return subject.substring(0, CHANGE_SUBJECT_LIMIT) + '...';
-  }
-
   private computeCancelLabel() {
     const isRunningChange = Object.values(this.statuses).some(
       v => v.status === ProgressStatus.RUNNING
diff --git a/polygerrit-ui/app/elements/change/gr-file-list/gr-file-list_test.ts b/polygerrit-ui/app/elements/change/gr-file-list/gr-file-list_test.ts
index 8bcd053..db135df 100644
--- a/polygerrit-ui/app/elements/change/gr-file-list/gr-file-list_test.ts
+++ b/polygerrit-ui/app/elements/change/gr-file-list/gr-file-list_test.ts
@@ -97,7 +97,6 @@
   suite('basic tests', async () => {
     setup(async () => {
       stubRestApi('getDiffComments').returns(Promise.resolve({}));
-      stubRestApi('getDiffRobotComments').returns(Promise.resolve({}));
       stubRestApi('getDiffDrafts').returns(Promise.resolve({}));
       stubRestApi('getAccountCapabilities').returns(Promise.resolve({}));
       stubElement('gr-diff-host', 'reload').callsFake(() => Promise.resolve());
@@ -2010,7 +2009,6 @@
     setup(async () => {
       stubRestApi('getPreferences').returns(Promise.resolve(undefined));
       stubRestApi('getDiffComments').returns(Promise.resolve({}));
-      stubRestApi('getDiffRobotComments').returns(Promise.resolve({}));
       stubRestApi('getDiffDrafts').returns(Promise.resolve({}));
       stubRestApi('getDiff').callsFake(() => Promise.resolve(createDiff()));
       stubElement('gr-diff-host', 'prefetchDiff').callsFake(() => {});
diff --git a/polygerrit-ui/app/elements/change/gr-included-in-dialog/gr-included-in-dialog_test.ts b/polygerrit-ui/app/elements/change/gr-included-in-dialog/gr-included-in-dialog_test.ts
index 3851255..d3692ed 100644
--- a/polygerrit-ui/app/elements/change/gr-included-in-dialog/gr-included-in-dialog_test.ts
+++ b/polygerrit-ui/app/elements/change/gr-included-in-dialog/gr-included-in-dialog_test.ts
@@ -92,7 +92,7 @@
   });
 
   test('computeGroups with .bindValue', async () => {
-    queryAndAssert<IronInputElement>(element, '#filterInput')!.bindValue =
+    queryAndAssert<IronInputElement>(element, '#filterInput').bindValue =
       'stable-3.2';
     element.includedIn = {branches: [], tags: []} as IncludedInInfo;
     element.includedIn.branches.push(
diff --git a/polygerrit-ui/app/elements/change/gr-message-scores/gr-message-scores.ts b/polygerrit-ui/app/elements/change/gr-message-scores/gr-message-scores.ts
index 09ca036..60fb1df 100644
--- a/polygerrit-ui/app/elements/change/gr-message-scores/gr-message-scores.ts
+++ b/polygerrit-ui/app/elements/change/gr-message-scores/gr-message-scores.ts
@@ -4,9 +4,10 @@
  * SPDX-License-Identifier: Apache-2.0
  */
 import '../gr-trigger-vote/gr-trigger-vote';
-import {LitElement, css, html} from 'lit';
-import {customElement, property} from 'lit/decorators.js';
-import {ChangeInfo} from '../../../api/rest-api';
+import '../../checks/gr-checks-chip-for-label';
+import {LitElement, css, html, nothing} from 'lit';
+import {customElement, property, state} from 'lit/decorators.js';
+import {ChangeInfo, PatchSetNumber} from '../../../api/rest-api';
 import {
   LabelExtreme,
   PATCH_SET_PREFIX_PATTERN,
@@ -14,6 +15,10 @@
 import {hasOwnProperty} from '../../../utils/common-util';
 import {getTriggerVotes} from '../../../utils/label-util';
 import {ChangeMessage} from '../../../types/common';
+import {CheckRun} from '../../../api/checks';
+import {subscribe} from '../../lit/subscription-controller';
+import {resolve} from '../../../models/dependency';
+import {changeModelToken} from '../../../models/change/change-model';
 
 const VOTE_RESET_TEXT = '0 (vote reset)';
 
@@ -36,6 +41,10 @@
   @property({type: Object})
   change?: ChangeInfo;
 
+  @state() runs: CheckRun[] = [];
+
+  @state() latestPatchNum?: PatchSetNumber;
+
   static override get styles() {
     return css`
       .score,
@@ -86,9 +95,26 @@
           min-width: 0px;
         }
       }
+
+      gr-checks-chip-for-label {
+        /* .checksChip has top: 2px, this is canceling it */
+        position: relative;
+        top: -2px;
+      }
     `;
   }
 
+  private readonly getChangeModel = resolve(this, changeModelToken);
+
+  constructor() {
+    super();
+    subscribe(
+      this,
+      () => this.getChangeModel().latestPatchNum$,
+      x => (this.latestPatchNum = x)
+    );
+  }
+
   override render() {
     const scores = this._getScores(this.message, this.labelExtremes);
     const triggerVotes = getTriggerVotes(this.change);
@@ -113,10 +139,22 @@
       </gr-trigger-vote>`;
     }
     return html`<span
-      class="score ${this._computeScoreClass(score, this.labelExtremes)}"
-    >
-      ${score.label} ${score.value}
-    </span>`;
+        class="score ${this._computeScoreClass(score, this.labelExtremes)}"
+      >
+        ${score.label} ${score.value} </span
+      >${this.renderChecks(score)}`;
+  }
+
+  renderChecks(score: Score) {
+    const labelName = score.label;
+    if (!labelName) return nothing;
+    if (Number(score.value) >= 0) return nothing;
+    if (this.latestPatchNum !== this.message?._revision_number) return nothing;
+
+    return html`<gr-checks-chip-for-label
+      .labels=${[labelName]}
+      .showRunning=${false}
+    ></gr-checks-chip-for-label>`;
   }
 
   _computeScoreClass(score?: Score, labelExtremes?: LabelExtreme) {
diff --git a/polygerrit-ui/app/elements/change/gr-message-scores/gr-message-scores_test.ts b/polygerrit-ui/app/elements/change/gr-message-scores/gr-message-scores_test.ts
index a757b37..63a7f17 100644
--- a/polygerrit-ui/app/elements/change/gr-message-scores/gr-message-scores_test.ts
+++ b/polygerrit-ui/app/elements/change/gr-message-scores/gr-message-scores_test.ts
@@ -13,6 +13,7 @@
 import {queryAll, stubFlags} from '../../../test/test-utils';
 import {GrMessageScores} from './gr-message-scores';
 import {fixture, html, assert} from '@open-wc/testing';
+import {PatchSetNumber} from '../../../api/rest-api';
 
 suite('gr-message-score tests', () => {
   let element: GrMessageScores;
@@ -40,6 +41,7 @@
       /* HTML */ `
         <span class="max positive score"> Verified +1 </span>
         <span class="min negative score"> Code-Review -2 </span>
+        <gr-checks-chip-for-label></gr-checks-chip-for-label>
         <span class="positive score"> Trybot-Label3 +1 </span>
       `
     );
@@ -192,4 +194,28 @@
       `
     );
   });
+
+  test('shows checks chip', async () => {
+    element.message = {
+      ...createChangeMessage(),
+      author: {},
+      expanded: false,
+      message: 'Patch Set 1: Verified-1',
+      _revision_number: 1 as PatchSetNumber,
+    };
+    element.labelExtremes = {
+      Verified: {max: 1, min: -1},
+    };
+    element.latestPatchNum = 1 as PatchSetNumber;
+
+    await element.updateComplete;
+
+    assert.shadowDom.equal(
+      element,
+      /* HTML */ `
+        <span class="min negative score"> Verified -1 </span
+        ><gr-checks-chip-for-label></gr-checks-chip-for-label>
+      `
+    );
+  });
 });
diff --git a/polygerrit-ui/app/elements/change/gr-messages-list/gr-messages-list.ts b/polygerrit-ui/app/elements/change/gr-messages-list/gr-messages-list.ts
index 3c2b792..fb8e905 100644
--- a/polygerrit-ui/app/elements/change/gr-messages-list/gr-messages-list.ts
+++ b/polygerrit-ui/app/elements/change/gr-messages-list/gr-messages-list.ts
@@ -20,7 +20,6 @@
   NumericChangeId,
   PatchSetNum,
   VotingRangeInfo,
-  isRobot,
   PatchSetNumber,
 } from '../../../types/common';
 import {GrMessage, MessageAnchorTapDetail} from '../gr-message/gr-message';
@@ -102,27 +101,18 @@
  * a message is initially hidden or not, see isImportant(). So we are applying
  * some "magic" rules here in order to hide exactly the right messages.
  *
- * 1. If a message does not have a tag, but is associated with robot comments,
- * then it gets a tag.
- *
- * 2. Use the same tag for some of Gerrit's standard events, if they should be
+ * 1. Use the same tag for some of Gerrit's standard events, if they should be
  * considered one group, e.g. normal and wip patchset uploads.
  *
- * 3. Everything beyond the ~ character is cut off from the tag. That gives
+ * 2. Everything beyond the ~ character is cut off from the tag. That gives
  * tools control over which messages will be hidden.
  *
- * 4. (Non-WIP) patchset uploads get a separate tag when they invalidate any
+ * 3. (Non-WIP) patchset uploads get a separate tag when they invalidate any
  * votes.
  */
 function computeTag(message: CombinedMessage) {
   if (!message.tag) {
-    const threads = message.commentThreads || [];
-    const messageId = getMessageId(message);
-    const comments = threads.map(t =>
-      t.comments.find(c => c.change_message_id === messageId)
-    );
-    const hasRobotComments = comments.some(isRobot);
-    return hasRobotComments ? 'autogenerated:has-robot-comments' : undefined;
+    return undefined;
   }
 
   if (message.tag === MessageTag.TAG_NEW_PATCHSET) {
@@ -388,7 +378,7 @@
           .commentThreads=${message.commentThreads}
           @message-anchor-tap=${this.handleAnchorClick}
           .labelExtremes=${labelExtremes}
-          data-message-id=${ifDefined(getMessageId(message) as String)}
+          data-message-id=${ifDefined(getMessageId(message) as string)}
         ></gr-message>`
       )}`;
   }
diff --git a/polygerrit-ui/app/elements/change/gr-messages-list/gr-messages-list_test.ts b/polygerrit-ui/app/elements/change/gr-messages-list/gr-messages-list_test.ts
index d4c7b63..2bce8a4 100644
--- a/polygerrit-ui/app/elements/change/gr-messages-list/gr-messages-list_test.ts
+++ b/polygerrit-ui/app/elements/change/gr-messages-list/gr-messages-list_test.ts
@@ -137,7 +137,6 @@
     setup(async () => {
       stubRestApi('getLoggedIn').returns(Promise.resolve(false));
       stubRestApi('getDiffComments').returns(Promise.resolve(comments));
-      stubRestApi('getDiffRobotComments').returns(Promise.resolve({}));
       stubRestApi('getDiffDrafts').returns(Promise.resolve({}));
 
       messages = generateRandomMessages(3);
@@ -384,21 +383,6 @@
       assert.equal(TEST_ONLY.computeTag(m), 'something');
     });
 
-    test('updateTag with robot comments', () => {
-      const m = randomMessage();
-      (m as any).commentThreads = [
-        {
-          comments: [
-            {
-              robot_id: 'id314',
-              change_message_id: m.id,
-            },
-          ],
-        },
-      ];
-      assert.notEqual(TEST_ONLY.computeTag(m), undefined);
-    });
-
     test('setRevisionNumber nothing to change', () => {
       const m1 = randomMessage();
       const m2 = randomMessage();
@@ -546,7 +530,6 @@
     setup(async () => {
       stubRestApi('getLoggedIn').returns(Promise.resolve(false));
       stubRestApi('getDiffComments').returns(Promise.resolve({}));
-      stubRestApi('getDiffRobotComments').returns(Promise.resolve({}));
       stubRestApi('getDiffDrafts').returns(Promise.resolve({}));
 
       messages = [
diff --git a/polygerrit-ui/app/elements/change/gr-reply-dialog/gr-reply-dialog_test.ts b/polygerrit-ui/app/elements/change/gr-reply-dialog/gr-reply-dialog_test.ts
index 3b76eda..999f657 100644
--- a/polygerrit-ui/app/elements/change/gr-reply-dialog/gr-reply-dialog_test.ts
+++ b/polygerrit-ui/app/elements/change/gr-reply-dialog/gr-reply-dialog_test.ts
@@ -2438,7 +2438,7 @@
   test('isSendDisabled_existingVote', async () => {
     const account = createAccountWithId();
     (
-      element.change!.labels![StandardLabels.CODE_REVIEW]! as DetailedLabelInfo
+      element.change!.labels![StandardLabels.CODE_REVIEW] as DetailedLabelInfo
     ).all = [account];
     element.canBeStarted = false;
     element.draftCommentThreads = [{...createCommentThread([createComment()])}];
@@ -2849,7 +2849,6 @@
       };
       commentsModel.setState({
         comments: {},
-        robotComments: {},
         drafts: {
           a: [draft],
         },
@@ -2884,7 +2883,6 @@
       };
       commentsModel.setState({
         comments: {},
-        robotComments: {},
         drafts: {
           a: [draft],
         },
@@ -2924,7 +2922,6 @@
       };
       commentsModel.setState({
         comments: {},
-        robotComments: {},
         drafts: {
           a: [draft],
         },
@@ -2984,7 +2981,6 @@
 
       commentsModel.setState({
         comments: {},
-        robotComments: {},
         drafts: {
           a: [
             {
@@ -3021,7 +3017,6 @@
       stubRestApi('getAccountDetails').returns(Promise.resolve(account));
       commentsModel.setState({
         comments: {},
-        robotComments: {},
         drafts: {
           a: [
             {
diff --git a/polygerrit-ui/app/elements/change/gr-submit-requirements/gr-submit-requirements.ts b/polygerrit-ui/app/elements/change/gr-submit-requirements/gr-submit-requirements.ts
index d950941..61e569a 100644
--- a/polygerrit-ui/app/elements/change/gr-submit-requirements/gr-submit-requirements.ts
+++ b/polygerrit-ui/app/elements/change/gr-submit-requirements/gr-submit-requirements.ts
@@ -10,6 +10,7 @@
 import '../gr-change-summary/gr-change-summary';
 import '../../shared/gr-limited-text/gr-limited-text';
 import '../../shared/gr-vote-chip/gr-vote-chip';
+import '../../checks/gr-checks-chip-for-label';
 import {LitElement, css, html, TemplateResult, nothing} from 'lit';
 import {customElement, property, state} from 'lit/decorators.js';
 import {ParsedChangeInfo} from '../../../types/types';
@@ -36,16 +37,15 @@
 } from '../../../utils/label-util';
 import {fontStyles} from '../../../styles/gr-font-styles';
 import {capitalizeFirstLetter, charsOnly} from '../../../utils/string-util';
-import {subscribe} from '../../lit/subscription-controller';
-import {CheckRun} from '../../../models/checks/checks-model';
-import {getResultsOf, hasResultsOf} from '../../../models/checks/checks-util';
-import {Category, RunStatus} from '../../../api/checks';
-import {fireShowTab} from '../../../utils/event-util';
-import {Tab} from '../../../constants/constants';
 import {submitRequirementsStyles} from '../../../styles/gr-submit-requirements-styles';
 import {resolve} from '../../../models/dependency';
-import {checksModelToken} from '../../../models/checks/checks-model';
+import {CheckRun, checksModelToken} from '../../../models/checks/checks-model';
 import {map} from 'lit/directives/map.js';
+import {
+  countErrorRunsForLabel,
+  countRunningRunsForLabel,
+} from '../../checks/gr-checks-util';
+import {subscribe} from '../../lit/subscription-controller';
 
 /**
  * @attr {Boolean} suppress-title - hide titles, currently for hovercard view
@@ -125,7 +125,7 @@
         gr-vote-chip {
           margin-right: var(--spacing-s);
         }
-        gr-checks-chip {
+        gr-checks-chip-for-label {
           /* .checksChip has top: 2px, this is canceling it */
           margin-top: -2px;
         }
@@ -373,73 +373,43 @@
   }
 
   renderChecks(requirement: SubmitRequirementResultInfo, labelName?: string) {
-    const requirementLabels = extractAssociatedLabels(requirement);
-    const errorRuns = this.runs
-      .filter(run => hasResultsOf(run, Category.ERROR))
-      .filter(run => {
-        if (labelName) {
-          return labelName === run.labelName;
-        } else {
-          return run.labelName && requirementLabels.includes(run.labelName);
-        }
-      });
-    const errorRunsCount = errorRuns.reduce(
-      (sum, run) => sum + getResultsOf(run, Category.ERROR).length,
-      0
+    // This method includes preliminary checks before rendering the
+    // <gr-checks-chip-for-label> component. These checks are necessary
+    // because:
+    // 1. We only want to display the checks chip for specific conditions
+    //    relevant to message scores (e.g., negative scores on the latest
+    //    patchset for which the message was posted).
+    // 2. It's programmatically difficult for a parent component to know if a
+    //    child Lit component (like <gr-checks-chip-for-label>) will internally
+    //    render 'nothing'. If the child component were rendered unconditionally
+    //    and then its own logic led it to render 'nothing', we might still
+    //    have an empty custom element in the DOM or face challenges in
+    //    conditionally rendering alternative UI elements that depend on the
+    //    child's visibility
+    // These upfront checks ensure that <gr-checks-chip-for-label> is only
+    // instantiated and rendered when it's genuinely appropriate and likely
+    // to display meaningful information, avoiding an empty or superfluous element.
+    const targetLabels = labelName
+      ? [labelName]
+      : requirement
+      ? extractAssociatedLabels(requirement)
+      : [];
+
+    // If there are no labels to filter by, then no checks can be associated.
+    if (targetLabels.length === 0) return undefined;
+
+    const {errorRunsCount} = countErrorRunsForLabel(this.runs, targetLabels);
+    const {runningRunsCount} = countRunningRunsForLabel(
+      this.runs,
+      targetLabels
     );
-    if (errorRunsCount > 0) {
-      return this.renderChecksCategoryChip(
-        errorRuns,
-        errorRunsCount,
-        Category.ERROR
-      );
-    }
-    const runningRuns = this.runs
-      .filter(r => r.isLatestAttempt)
-      .filter(
-        r => r.status === RunStatus.RUNNING || r.status === RunStatus.SCHEDULED
-      )
-      .filter(run => {
-        if (labelName) {
-          return labelName === run.labelName;
-        } else {
-          return run.labelName && requirementLabels.includes(run.labelName);
-        }
-      });
 
-    const runningRunsCount = runningRuns.length;
-    if (runningRunsCount > 0) {
-      return this.renderChecksCategoryChip(
-        runningRuns,
-        runningRunsCount,
-        RunStatus.RUNNING
-      );
-    }
-    return;
-  }
-
-  renderChecksCategoryChip(
-    runs: CheckRun[],
-    runsCount: Number,
-    category: Category | RunStatus
-  ) {
-    if (runsCount === 0) return;
-    const links = [];
-    if (runs.length === 1 && runs[0].statusLink) {
-      links.push(runs[0].statusLink);
-    }
-    return html`<gr-checks-chip
-      .text=${`${runsCount}`}
-      .links=${links}
-      .statusOrCategory=${category}
-      @click=${() => {
-        fireShowTab(this, Tab.CHECKS, false, {
-          checksTab: {
-            statusOrCategory: category,
-          },
-        });
-      }}
-    ></gr-checks-chip>`;
+    if (errorRunsCount <= 0 && runningRunsCount <= 0) return undefined;
+    return html`<gr-checks-chip-for-label
+      .requirement=${requirement}
+      .labels=${targetLabels}
+      .showRunning=${true}
+    ></gr-checks-chip-for-label>`;
   }
 
   renderTriggerVotes() {
diff --git a/polygerrit-ui/app/elements/change/gr-submit-requirements/gr-submit-requirements_test.ts b/polygerrit-ui/app/elements/change/gr-submit-requirements/gr-submit-requirements_test.ts
index a5a336c..47d1800 100644
--- a/polygerrit-ui/app/elements/change/gr-submit-requirements/gr-submit-requirements_test.ts
+++ b/polygerrit-ui/app/elements/change/gr-submit-requirements/gr-submit-requirements_test.ts
@@ -157,7 +157,7 @@
 
     test('without label to vote on', async () => {
       const modifiedChange = {...change};
-      modifiedChange.submit_requirements![0]!.submittability_expression_result.expression =
+      modifiedChange.submit_requirements![0].submittability_expression_result.expression =
         'hasfooter:"Release-Notes"';
       element.change = modifiedChange;
       await element.updateComplete;
@@ -185,7 +185,7 @@
             <div class="votes">
               <div class="votes-line">
                 <gr-vote-chip> </gr-vote-chip>
-                <gr-checks-chip> </gr-checks-chip>
+                <gr-checks-chip-for-label> </gr-checks-chip-for-label>
               </div>
             </div>
           </div>
@@ -211,7 +211,7 @@
             <div class="votes">
               <div class="votes-line">
                 <gr-vote-chip> </gr-vote-chip>
-                <gr-checks-chip> </gr-checks-chip>
+                <gr-checks-chip-for-label> </gr-checks-chip-for-label>
               </div>
             </div>
           </div>
diff --git a/polygerrit-ui/app/elements/change/gr-thread-list/gr-thread-list.ts b/polygerrit-ui/app/elements/change/gr-thread-list/gr-thread-list.ts
index 86bf1b2..8906426 100644
--- a/polygerrit-ui/app/elements/change/gr-thread-list/gr-thread-list.ts
+++ b/polygerrit-ui/app/elements/change/gr-thread-list/gr-thread-list.ts
@@ -19,10 +19,8 @@
 import {
   getCommentAuthors,
   getMentionedThreads,
-  hasHumanReply,
   isDraftThread,
   isMentionedThread,
-  isRobotThread,
   isUnresolved,
   lastUpdated,
 } from '../../../utils/comment-util';
@@ -142,8 +140,7 @@
    * ATTENTION! this.threads should never be used directly within the component.
    *
    * Either use getAllThreads(), which applies filters that are inherent to what
-   * the component is supposed to render,
-   * e.g. onlyShowRobotCommentsWithHumanReply.
+   * the component is supposed to render.
    *
    * Or use getDisplayedThreads(), which applies the currently selected filters
    * on top.
@@ -158,12 +155,6 @@
   @property({type: Boolean, attribute: 'unresolved-only'})
   unresolvedOnly = false;
 
-  @property({
-    type: Boolean,
-    attribute: 'only-show-robot-comments-with-human-reply',
-  })
-  onlyShowRobotCommentsWithHumanReply = false;
-
   @property({type: Boolean, attribute: 'hide-dropdown'})
   hideDropdown = false;
 
@@ -522,12 +513,7 @@
    */
   // private, but visible for testing
   getAllThreads() {
-    return this.threads.filter(
-      t =>
-        !this.onlyShowRobotCommentsWithHumanReply ||
-        !isRobotThread(t) ||
-        hasHumanReply(t)
-    );
+    return this.threads;
   }
 
   /**
@@ -566,11 +552,6 @@
       if (!hasACommentFromASelectedAuthor) return false;
     }
 
-    // This is probably redundant, because getAllThreads() filters this out.
-    if (this.onlyShowRobotCommentsWithHumanReply) {
-      if (isRobotThread(thread) && !hasHumanReply(thread)) return false;
-    }
-
     if (this.mentionsOnly && !isMentionedThread(thread, this.account))
       return false;
 
diff --git a/polygerrit-ui/app/elements/change/gr-thread-list/gr-thread-list_test.ts b/polygerrit-ui/app/elements/change/gr-thread-list/gr-thread-list_test.ts
index 3a06f8d..95bfa1d 100644
--- a/polygerrit-ui/app/elements/change/gr-thread-list/gr-thread-list_test.ts
+++ b/polygerrit-ui/app/elements/change/gr-thread-list/gr-thread-list_test.ts
@@ -29,7 +29,6 @@
   Timestamp,
 } from '../../../api/rest-api';
 import {
-  RobotId,
   UrlEncodedCommentId,
   RevisionPatchSetNum,
   CommentThread,
@@ -222,7 +221,6 @@
             updated: '2015-12-08 15:16:15.000000000' as Timestamp,
             message: 'test',
             unresolved: true,
-            robot_id: 'rc1' as RobotId,
           },
         ],
         patchNum: 4 as RevisionPatchSetNum,
@@ -247,7 +245,6 @@
             updated: '2015-12-09 15:16:15.000000000' as Timestamp,
             message: 'test',
             unresolved: true,
-            robot_id: 'rc2' as RobotId,
           },
           {
             path: '/COMMIT_MSG',
diff --git a/polygerrit-ui/app/elements/checks/gr-checks-chip-for-label.ts b/polygerrit-ui/app/elements/checks/gr-checks-chip-for-label.ts
new file mode 100644
index 0000000..5656cfb
--- /dev/null
+++ b/polygerrit-ui/app/elements/checks/gr-checks-chip-for-label.ts
@@ -0,0 +1,97 @@
+/**
+ * @license
+ * Copyright 2025 Google LLC
+ * SPDX-License-Identifier: Apache-2.0
+ */
+import '../change/gr-change-summary/gr-checks-chip';
+import {LitElement, html, nothing} from 'lit';
+import {customElement, property, state} from 'lit/decorators.js';
+import {Category, RunStatus} from '../../api/checks';
+import {Tab} from '../../constants/constants';
+import {fireShowTab} from '../../utils/event-util';
+import {CheckRun, checksModelToken} from '../../models/checks/checks-model';
+import {resolve} from '../../models/dependency';
+import {subscribe} from '../lit/subscription-controller';
+import {
+  countErrorRunsForLabel,
+  countRunningRunsForLabel,
+} from './gr-checks-util';
+
+@customElement('gr-checks-chip-for-label')
+export class GrChecksChipForLabel extends LitElement {
+  @property({type: Array})
+  labels: string[] = [];
+
+  @property({type: Boolean})
+  showRunning = false;
+
+  @state() runs: CheckRun[] = [];
+
+  private readonly getChecksModel = resolve(this, checksModelToken);
+
+  constructor() {
+    super();
+    subscribe(
+      this,
+      () => this.getChecksModel().allRunsLatestPatchsetLatestAttempt$,
+      x => (this.runs = x)
+    );
+  }
+
+  override render() {
+    const {errorRuns, errorRunsCount} = countErrorRunsForLabel(
+      this.runs,
+      this.labels
+    );
+    if (errorRunsCount > 0) {
+      return this.renderChecksCategoryChip(
+        errorRuns,
+        errorRunsCount,
+        Category.ERROR
+      );
+    }
+    if (!this.showRunning) return nothing;
+    const {runningRuns, runningRunsCount} = countRunningRunsForLabel(
+      this.runs,
+      this.labels
+    );
+    if (runningRunsCount > 0) {
+      return this.renderChecksCategoryChip(
+        runningRuns,
+        runningRunsCount,
+        RunStatus.RUNNING
+      );
+    }
+    return nothing;
+  }
+
+  private renderChecksCategoryChip(
+    runs: CheckRun[],
+    runsCount: number,
+    category: Category | RunStatus
+  ) {
+    if (runsCount === 0) return;
+    const links = [];
+    if (runs.length === 1 && runs[0].statusLink) {
+      links.push(runs[0].statusLink);
+    }
+    return html`<gr-checks-chip
+      .text=${`${runsCount}`}
+      .links=${links}
+      .statusOrCategory=${category}
+      @click=${() => {
+        fireShowTab(this, Tab.CHECKS, false, {
+          checksTab: {
+            statusOrCategory: category,
+          },
+        });
+      }}
+    ></gr-checks-chip>`;
+  }
+}
+
+declare global {
+  interface HTMLElementTagNameMap {
+    'gr-checks-chip-for-label': GrChecksChipForLabel;
+  }
+}
diff --git a/polygerrit-ui/app/elements/checks/gr-checks-chip-for-label_test.ts b/polygerrit-ui/app/elements/checks/gr-checks-chip-for-label_test.ts
new file mode 100644
index 0000000..7e35c89
--- /dev/null
+++ b/polygerrit-ui/app/elements/checks/gr-checks-chip-for-label_test.ts
@@ -0,0 +1,61 @@
+/**
+ * @license
+ * Copyright 2025 Google LLC
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+import {Category} from '../../api/checks';
+import '../../test/common-test-setup';
+import {createCheckResult, createRun} from '../../test/test-data-generators';
+import {queryAndAssert} from '../../utils/common-util';
+import {GrChecksChip} from '../change/gr-change-summary/gr-checks-chip';
+import './gr-checks-chip-for-label';
+import {GrChecksChipForLabel} from './gr-checks-chip-for-label';
+import {fixture, assert} from '@open-wc/testing';
+import {html} from 'lit';
+
+suite('gr-checks-chip-for-label test', () => {
+  let element: GrChecksChipForLabel;
+
+  setup(async () => {
+    element = await fixture<GrChecksChipForLabel>(
+      html`<gr-checks-chip-for-label></gr-checks-chip-for-label>`
+    );
+    element.runs = [
+      createRun({
+        labelName: 'Verified',
+
+        results: [
+          createCheckResult({
+            category: Category.ERROR,
+          }),
+        ],
+      }),
+    ];
+    await element.updateComplete;
+
+    element.labels = ['Verified'];
+    await element.updateComplete;
+  });
+
+  test('renders loading', async () => {
+    assert.shadowDom.equal(
+      element,
+      /* HTML */ '<gr-checks-chip></gr-checks-chip>'
+    );
+
+    const checksChip = queryAndAssert<GrChecksChip>(element, 'gr-checks-chip');
+    assert.shadowDom.equal(
+      checksChip,
+      /* HTML */ `<div
+        aria-label="1 error result"
+        class="checksChip error font-small"
+        role="link"
+        tabindex="0"
+      >
+        <gr-icon filled="" icon="error"> </gr-icon>
+        <div class="text">1</div>
+      </div>`
+    );
+  });
+});
diff --git a/polygerrit-ui/app/elements/checks/gr-checks-runs.ts b/polygerrit-ui/app/elements/checks/gr-checks-runs.ts
index d68cdbf..662c560 100644
--- a/polygerrit-ui/app/elements/checks/gr-checks-runs.ts
+++ b/polygerrit-ui/app/elements/checks/gr-checks-runs.ts
@@ -212,6 +212,9 @@
   @state()
   shouldRender = false;
 
+  @state()
+  runs: CheckRun[] = [];
+
   private readonly reporting = getAppContext().reportingService;
 
   private getChecksModel = resolve(this, checksModelToken);
@@ -223,6 +226,13 @@
       () => this.getChecksModel().checksSelectedAttemptNumber$,
       x => (this.selectedAttempt = x)
     );
+    subscribe(
+      this,
+      () => this.getChecksModel().allRunsSelectedPatchset$,
+      x => {
+        this.runs = x;
+      }
+    );
   }
 
   override firstUpdated() {
@@ -296,6 +306,18 @@
       attempt !== ALL_ATTEMPTS;
     const selected = this.selectedAttempt === attempt;
     return html`<div class="attemptDetail">
+      ${when(
+        typeof attempt === 'number',
+        () => html` <gr-hovercard-run
+          .run=${this.runs.find(
+            r =>
+              r.attempt === attempt &&
+              r.checkName === this.run?.checkName &&
+              r.pluginName === this.run?.pluginName
+          )}
+          .attempt=${attempt}
+        ></gr-hovercard-run>`
+      )}
       <input
         type="radio"
         id=${id}
diff --git a/polygerrit-ui/app/elements/checks/gr-checks-util.ts b/polygerrit-ui/app/elements/checks/gr-checks-util.ts
index f1a3fb9..0f844ae 100644
--- a/polygerrit-ui/app/elements/checks/gr-checks-util.ts
+++ b/polygerrit-ui/app/elements/checks/gr-checks-util.ts
@@ -3,10 +3,13 @@
  * Copyright 2021 Google LLC
  * SPDX-License-Identifier: Apache-2.0
  */
+import {Category, RunStatus} from '../../api/checks';
 import {CheckRun, RunResult} from '../../models/checks/checks-model';
 import {
   ALL_ATTEMPTS,
   AttemptChoice,
+  getResultsOf,
+  hasResultsOf,
   LATEST_ATTEMPT,
 } from '../../models/checks/checks-util';
 import {fire} from '../../utils/event-util';
@@ -44,3 +47,32 @@
     regExp.test(result.message ?? '')
   );
 }
+
+export function countErrorRunsForLabel(
+  runs: CheckRun[],
+  labels: string[]
+): {errorRuns: CheckRun[]; errorRunsCount: number} {
+  const errorRuns = runs
+    .filter(run => hasResultsOf(run, Category.ERROR))
+    .filter(run => run.labelName && labels.includes(run.labelName));
+  const errorRunsCount = errorRuns.reduce(
+    (sum, run) => sum + getResultsOf(run, Category.ERROR).length,
+    0
+  );
+  return {errorRuns, errorRunsCount};
+}
+
+export function countRunningRunsForLabel(
+  runs: CheckRun[],
+  labels: string[]
+): {runningRuns: CheckRun[]; runningRunsCount: number} {
+  const runningRuns = runs
+    .filter(r => r.isLatestAttempt)
+    .filter(
+      r => r.status === RunStatus.RUNNING || r.status === RunStatus.SCHEDULED
+    )
+    .filter(run => run.labelName && labels.includes(run.labelName));
+
+  const runningRunsCount = runningRuns.length;
+  return {runningRuns, runningRunsCount};
+}
diff --git a/polygerrit-ui/app/elements/checks/gr-hovercard-run.ts b/polygerrit-ui/app/elements/checks/gr-hovercard-run.ts
index cc3ce77..b38a30e 100644
--- a/polygerrit-ui/app/elements/checks/gr-hovercard-run.ts
+++ b/polygerrit-ui/app/elements/checks/gr-hovercard-run.ts
@@ -20,6 +20,7 @@
 import {HovercardMixin} from '../../mixins/hovercard-mixin/hovercard-mixin';
 import {css, html, LitElement} from 'lit';
 import {checksStyles} from './gr-checks-styles';
+import {when} from 'lit/directives/when.js';
 
 // This avoids JSC_DYNAMIC_EXTENDS_WITHOUT_JSDOC closure compiler error.
 const base = HovercardMixin(LitElement);
@@ -29,6 +30,9 @@
   @property({type: Object})
   run?: RunResult | CheckRun;
 
+  @property({type: Number})
+  attempt?: number;
+
   static override get styles() {
     return [
       fontStyles,
@@ -146,6 +150,7 @@
           <div class="sectionContent">
             <h3 class="name heading-3">
               <span>${this.run.checkName}</span>
+              ${when(this.attempt, () => html`(Attempt ${this.attempt})`)}
             </h3>
           </div>
         </div>
@@ -196,6 +201,8 @@
   }
 
   private renderAttemptSection() {
+    // If an attempt is specified, we don't need to render the attempt section.
+    if (this.attempt) return;
     if (this.hideAttempts()) return;
     const attempts = this.computeAttempts();
     return html`
diff --git a/polygerrit-ui/app/elements/core/gr-router/gr-router.ts b/polygerrit-ui/app/elements/core/gr-router/gr-router.ts
index 9f87d99..8d4de31 100644
--- a/polygerrit-ui/app/elements/core/gr-router/gr-router.ts
+++ b/polygerrit-ui/app/elements/core/gr-router/gr-router.ts
@@ -167,7 +167,8 @@
   // Matches /admin/repos/<repos>,access.
   REPO_DASHBOARDS: /^\/admin\/repos\/(.+),dashboards$/,
 
-  REPO_SUBMIT_REQUIREMENTS: /^\/admin\/repos\/(.+),submit-requirements$/,
+  REPO_SUBMIT_REQUIREMENTS:
+    /^\/admin\/repos\/(.+),submit-requirements\/?(?:\/q\/filter:(.*?))?(?:,(\d+))?$/,
 
   // Matches /admin/plugins with optional filter and offset.
   PLUGIN_LIST: /^\/admin\/plugins\/?(?:\/q\/filter:(.*?))?(?:,(\d+))?$/,
@@ -1229,6 +1230,8 @@
       view: GerritView.REPO,
       detail: RepoDetailView.SUBMIT_REQUIREMENTS,
       repo,
+      filter: ctx.params[1] ?? null,
+      offset: ctx.params[2] ?? '0',
     };
     // Note that router model view must be updated before view models.
     this.setState(state);
@@ -1389,16 +1392,14 @@
     const commentId = ctx.params[2] as UrlEncodedCommentId;
 
     this.restApiService.addRepoNameToCache(changeNum, repo);
-    const [comments, robotComments, drafts, change] = await Promise.all([
+    const [comments, drafts, change] = await Promise.all([
       this.restApiService.getDiffComments(changeNum),
-      this.restApiService.getDiffRobotComments(changeNum),
       this.restApiService.getDiffDrafts(changeNum),
       this.restApiService.getChangeDetail(changeNum),
     ]);
 
     const comment =
       findComment(addPath(comments), commentId) ??
-      findComment(addPath(robotComments), commentId) ??
       findComment(addPath(drafts), commentId);
     const path = comment?.path;
     const patchsets = computeAllPatchSets(change);
diff --git a/polygerrit-ui/app/elements/core/gr-router/gr-router_test.ts b/polygerrit-ui/app/elements/core/gr-router/gr-router_test.ts
index d33fa1d..ec2e48d 100644
--- a/polygerrit-ui/app/elements/core/gr-router/gr-router_test.ts
+++ b/polygerrit-ui/app/elements/core/gr-router/gr-router_test.ts
@@ -734,6 +734,8 @@
           ...createRepoViewState(),
           detail: RepoDetailView.SUBMIT_REQUIREMENTS,
           repo: '4321' as RepoName,
+          filter: '',
+          offset: '',
         });
       });
 
diff --git a/polygerrit-ui/app/elements/diff/gr-apply-fix-dialog/gr-apply-fix-dialog.ts b/polygerrit-ui/app/elements/diff/gr-apply-fix-dialog/gr-apply-fix-dialog.ts
index 34200a4..f746d13 100644
--- a/polygerrit-ui/app/elements/diff/gr-apply-fix-dialog/gr-apply-fix-dialog.ts
+++ b/polygerrit-ui/app/elements/diff/gr-apply-fix-dialog/gr-apply-fix-dialog.ts
@@ -354,14 +354,6 @@
           this.patchNum,
           fixSuggestion.replacements
         );
-      } else {
-        // TODO(b/227463363) Remove once Robot Comments are deprecated.
-        // We don't use this for user suggestions or comments.fix_suggestions.
-        res = await this.restApiService.getRobotCommentFixPreview(
-          this.changeNum,
-          this.patchNum,
-          fixSuggestion.fix_id
-        );
       }
       if (res) {
         this.currentPreviews = Object.keys(res).map(key => {
@@ -488,23 +480,6 @@
           errorText,
         });
       }
-      // Robot Comments are deprecated
-    } else {
-      res = await this.restApiService.applyRobotFixSuggestion(
-        changeNum,
-        patchNum,
-        this.currentFix.fix_id
-      );
-      this.reporting.timeEnd(Timing.APPLY_FIX_LOAD, {
-        method: 'apply-fix-dialog',
-        description: this.fixSuggestions?.[0].description,
-        isRobotComment: true,
-        fileExtension: getFileExtension(
-          this.fixSuggestions?.[0].replacements?.[0].path ?? ''
-        ),
-        success: res.ok,
-        status: res.status,
-      });
     }
     if (res?.ok) {
       this.getNavigation().setUrl(
diff --git a/polygerrit-ui/app/elements/diff/gr-apply-fix-dialog/gr-apply-fix-dialog_test.ts b/polygerrit-ui/app/elements/diff/gr-apply-fix-dialog/gr-apply-fix-dialog_test.ts
index 955305e..39066f3 100644
--- a/polygerrit-ui/app/elements/diff/gr-apply-fix-dialog/gr-apply-fix-dialog_test.ts
+++ b/polygerrit-ui/app/elements/diff/gr-apply-fix-dialog/gr-apply-fix-dialog_test.ts
@@ -21,7 +21,6 @@
   getCurrentRevision,
 } from '../../../test/test-data-generators';
 import {createDefaultDiffPrefs} from '../../../constants/constants';
-import {DiffInfo} from '../../../types/diff';
 import {OpenFixPreviewEventDetail} from '../../../types/events';
 import {GrButton} from '../../shared/gr-button/gr-button';
 import {fixture, html, assert} from '@open-wc/testing';
@@ -90,71 +89,13 @@
 
   suite('dialog open', () => {
     setup(() => {
-      const diffInfo1: DiffInfo = {
-        meta_a: {
-          name: 'f1',
-          content_type: 'text',
-          lines: 10,
-        },
-        meta_b: {
-          name: 'f1',
-          content_type: 'text',
-          lines: 12,
-        },
-        content: [
-          {
-            ab: ['loqlwkqll'],
-          },
-          {
-            b: ['qwqqsqw'],
-          },
-          {
-            ab: ['qwqqsqw', 'qweqeqweqeq', 'qweqweq'],
-          },
-        ],
-        change_type: 'MODIFIED',
-        intraline_status: 'OK',
-      };
-
-      const diffInfo2: DiffInfo = {
-        meta_a: {
-          name: 'f2',
-          content_type: 'text',
-          lines: 10,
-        },
-        meta_b: {
-          name: 'f2',
-          content_type: 'text',
-          lines: 12,
-        },
-        content: [
-          {
-            ab: ['eqweqweqwex'],
-          },
-          {
-            b: ['zassdasd'],
-          },
-          {
-            ab: ['zassdasd', 'dasdasda', 'asdasdad'],
-          },
-        ],
-        change_type: 'MODIFIED',
-        intraline_status: 'OK',
-      };
-
-      stubRestApi('getRobotCommentFixPreview').returns(
-        Promise.resolve({
-          f1: diffInfo1,
-          f2: diffInfo2,
-        })
-      );
       sinon.stub(element.applyFixModal!, 'showModal');
     });
 
     test('dialog opens fetch and sets previews', async () => {
       await open(TWO_FIXES);
       assert.equal(element.currentFix!.fix_id, 'fix_1');
-      assert.equal(element.currentPreviews.length, 2);
+      assert.equal(element.currentPreviews.length, 0);
       const button = getConfirmButton();
       assert.isFalse(button.hasAttribute('disabled'));
       assert.equal(button.getAttribute('title'), '');
@@ -175,7 +116,7 @@
       element,
       /* HTML */ `
         <dialog id="applyFixModal" tabindex="-1" open="">
-          <gr-dialog id="applyFixDialog" role="dialog" loading="">
+          <gr-dialog id="applyFixDialog" role="dialog">
             <div slot="header">Fix fix_1</div>
             <div slot="main"></div>
             <div class="fix-picker" slot="footer">
@@ -206,8 +147,6 @@
   });
 
   test('next button state updated when suggestions changed', async () => {
-    stubRestApi('getRobotCommentFixPreview').returns(Promise.resolve({}));
-
     await open(ONE_FIX);
     await element.updateComplete;
     assert.notOk(element.nextFix);
@@ -218,63 +157,6 @@
     assert.notOk(element.nextFix.disabled);
   });
 
-  test('preview endpoint throws error should reset dialog', async () => {
-    stubRestApi('getRobotCommentFixPreview').returns(
-      Promise.reject(new Error('backend error'))
-    );
-    try {
-      await open(TWO_FIXES);
-    } catch (error) {
-      // expected
-    }
-    assert.equal(element.currentFix, undefined);
-  });
-
-  test('apply fix button should call apply, navigate to change view and fire close', async () => {
-    const applyRobotFixSuggestionStub = stubRestApi(
-      'applyRobotFixSuggestion'
-    ).returns(Promise.resolve(new Response(null, {status: 200})));
-    element.currentFix = createFixSuggestionInfo('123');
-    element.hasEdit = true;
-
-    const closeFixPreviewEventSpy = sinon.spy();
-    element.onCloseFixPreviewCallbacks.push(closeFixPreviewEventSpy);
-
-    await element.handleApplyFix(new CustomEvent('confirm'));
-
-    sinon.assert.calledOnceWithExactly(
-      applyRobotFixSuggestionStub,
-      element.change!._number,
-      2 as PatchSetNum,
-      '123'
-    );
-    assert.isTrue(setUrlStub.called);
-    assert.equal(setUrlStub.lastCall.firstArg, '/c/test-project/+/42/2..edit');
-
-    sinon.assert.calledOnceWithExactly(closeFixPreviewEventSpy, true);
-    // reset gr-apply-fix-dialog and close
-    assert.equal(element.currentFix, undefined);
-    assert.equal(element.currentPreviews.length, 0);
-  });
-
-  test('should not navigate to change view if incorect reponse', async () => {
-    const applyRobotFixSuggestionStub = stubRestApi(
-      'applyRobotFixSuggestion'
-    ).returns(Promise.resolve(new Response(null, {status: 500})));
-    element.currentFix = createFixSuggestionInfo('fix_123');
-
-    await element.handleApplyFix(new CustomEvent('confirm'));
-
-    sinon.assert.calledWithExactly(
-      applyRobotFixSuggestionStub,
-      element.change!._number,
-      2 as PatchSetNum,
-      'fix_123'
-    );
-    assert.isFalse(setUrlStub.called);
-    assert.equal(element.isApplyFixLoading, false);
-  });
-
   test('select fix forward and back of multiple suggested fixes', async () => {
     sinon.stub(element.applyFixModal!, 'showModal');
 
@@ -285,24 +167,6 @@
     assert.equal(element.currentFix!.fix_id, 'fix_1');
   });
 
-  test('server-error should throw for failed apply call', async () => {
-    stubRestApi('applyRobotFixSuggestion').returns(
-      Promise.reject(new Error('backend error'))
-    );
-    element.currentFix = createFixSuggestionInfo('fix_123');
-
-    const closeFixPreviewEventSpy = sinon.spy();
-    element.onCloseFixPreviewCallbacks.push(closeFixPreviewEventSpy);
-
-    let expectedError;
-    await element.handleApplyFix(new CustomEvent('click')).catch(e => {
-      expectedError = e;
-    });
-    assert.isOk(expectedError);
-    assert.isFalse(setUrlStub.called);
-    sinon.assert.notCalled(closeFixPreviewEventSpy);
-  });
-
   test('onCancel fires close with correct parameters', () => {
     const closeFixPreviewEventSpy = sinon.spy();
     element.onCloseFixPreviewCallbacks.push(closeFixPreviewEventSpy);
diff --git a/polygerrit-ui/app/elements/diff/gr-comment-api/gr-comment-api.ts b/polygerrit-ui/app/elements/diff/gr-comment-api/gr-comment-api.ts
index aedeb6d..56a4b64 100644
--- a/polygerrit-ui/app/elements/diff/gr-comment-api/gr-comment-api.ts
+++ b/polygerrit-ui/app/elements/diff/gr-comment-api/gr-comment-api.ts
@@ -6,7 +6,6 @@
 import {
   PatchRange,
   PatchSetNum,
-  RobotCommentInfo,
   FileInfo,
   PARENT,
   CommentThread,
@@ -33,8 +32,6 @@
 export class ChangeComments {
   private readonly _comments: {[path: string]: CommentInfo[]};
 
-  private readonly _robotComments: {[path: string]: RobotCommentInfo[]};
-
   private readonly _drafts: {[path: string]: DraftInfo[]};
 
   private readonly _portedComments: {[path: string]: CommentInfo[]};
@@ -43,13 +40,11 @@
 
   constructor(
     comments?: {[path: string]: CommentInfo[]},
-    robotComments?: {[path: string]: RobotCommentInfo[]},
     drafts?: {[path: string]: DraftInfo[]},
     portedComments?: {[path: string]: CommentInfo[]},
     portedDrafts?: {[path: string]: DraftInfo[]}
   ) {
     this._comments = addPath(comments);
-    this._robotComments = addPath(robotComments);
     this._drafts = addPath(drafts);
     this._portedComments = portedComments || {};
     this._portedDrafts = portedDrafts || {};
@@ -61,8 +56,7 @@
 
   /**
    * Get an object mapping file paths to a boolean representing whether that
-   * path contains diff comments in the given patch set (including drafts and
-   * robot comments).
+   * path contains diff comments in the given patch set (including drafts).
    *
    * Paths with comments are mapped to true, whereas paths without comments
    * are not mapped.
@@ -74,7 +68,6 @@
     const responses: {[path: string]: Comment[]}[] = [
       this._comments,
       this.drafts,
-      this._robotComments,
     ];
     const commentMap: CommentMap = {};
     for (const response of responses) {
@@ -91,14 +84,14 @@
   }
 
   /**
-   * Gets all the comments and robot comments for the given change.
+   * Gets all the comments for the given change.
    */
   getAllPublishedComments(patchNum?: PatchSetNum) {
     return this.getAllComments(false, patchNum);
   }
 
   /**
-   * Gets all the comments and robot comments for the given change.
+   * Gets all the comments for the given change.
    */
   getAllComments(includeDrafts?: boolean, patchNum?: PatchSetNum) {
     const paths = this.getPaths();
@@ -126,7 +119,7 @@
   }
 
   /**
-   * Get the comments (robot comments) for a path and optional patch num.
+   * Get the comments for a path and optional patch num.
    *
    * This method will always return a new shallow copy of all comments,
    * so manipulation on one copy won't affect other copies.
@@ -137,9 +130,7 @@
     patchNum?: PatchSetNum,
     includeDrafts?: boolean
   ): Comment[] {
-    const comments: Comment[] = this._comments[path] || [];
-    const robotComments = this._robotComments[path] || [];
-    let allComments = comments.concat(robotComments);
+    let allComments: Comment[] = this._comments[path] || [];
     if (includeDrafts) {
       const drafts = this.getAllDraftsForPath(path);
       allComments = allComments.concat(drafts);
@@ -153,7 +144,7 @@
   }
 
   /**
-   * Get the comments (robot comments) for a file.
+   * Get the comments for a file.
    *
    * // TODO(taoalpha): maybe merge in *ForPath
    */
@@ -203,7 +194,7 @@
   }
 
   /**
-   * Get the comments (with drafts and robot comments) for a path and
+   * Get the comments (with drafts) for a path and
    * patch-range. Returns an array containing comments from either side of the
    * patch range for that path.
    *
@@ -213,18 +204,14 @@
   getCommentsForPath(path: string, patchRange: PatchRange): Comment[] {
     let comments: Comment[] = [];
     let drafts: DraftInfo[] = [];
-    let robotComments: RobotCommentInfo[] = [];
     if (this._comments && this._comments[path]) {
       comments = this._comments[path];
     }
     if (this.drafts && this.drafts[path]) {
       drafts = this.drafts[path];
     }
-    if (this._robotComments && this._robotComments[path]) {
-      robotComments = this._robotComments[path];
-    }
 
-    const all = comments.concat(drafts).concat(robotComments);
+    const all = comments.concat(drafts);
     const final = all
       .filter(c => isInPatchRange(c, patchRange))
       .map(c => {
@@ -284,10 +271,7 @@
     const allComments: Comment[] = this.getAllCommentsForFile(file, true);
 
     return createCommentThreads(allComments).filter(thread => {
-      // Robot comments and drafts are not ported over. A human reply to
-      // the robot comment will be ported over, therefore it's possible to
-      // have the root comment of the thread not be ported, hence loop over
-      // entire thread
+      // Drafts are not ported over.
       const portedComment = portedComments.find(portedComment =>
         thread.comments.some(c => id(portedComment) === id(c))
       );
@@ -338,7 +322,7 @@
   }
 
   /**
-   * Get the comments (with drafts and robot comments) for a file and
+   * Get the comments (with drafts) for a file and
    * patch-range. Returns an object with left and right properties mapping to
    * arrays of comments in on either side of the patch range for that path.
    *
diff --git a/polygerrit-ui/app/elements/diff/gr-comment-api/gr-comment-api_test.ts b/polygerrit-ui/app/elements/diff/gr-comment-api/gr-comment-api_test.ts
index 0a0c922..3bf2ac35 100644
--- a/polygerrit-ui/app/elements/diff/gr-comment-api/gr-comment-api_test.ts
+++ b/polygerrit-ui/app/elements/diff/gr-comment-api/gr-comment-api_test.ts
@@ -18,7 +18,6 @@
   createChangeComments,
   createCommentThread,
   createFileInfo,
-  createRobotComment,
 } from '../../../test/test-data-generators';
 import {CommentSide, FileInfoStatus} from '../../../constants/constants';
 import {
@@ -30,7 +29,6 @@
   PatchRange,
   PatchSetNum,
   RevisionPatchSetNum,
-  RobotCommentInfo,
   Timestamp,
   UrlEncodedCommentId,
 } from '../../../types/common';
@@ -43,7 +41,6 @@
   suite('_changeComment methods', () => {
     setup(() => {
       stubRestApi('getDiffComments').resolves({});
-      stubRestApi('getDiffRobotComments').resolves({});
       stubRestApi('getDiffDrafts').resolves({});
     });
 
@@ -124,7 +121,6 @@
               comment1,
             ],
           },
-          {} /* robot comments */,
           {} /* drafts */,
           portedComments,
           {} /* ported drafts */
@@ -202,7 +198,6 @@
             // comment that is not ported over
             'karma.conf.js': [comment2],
           },
-          {} /* robot comments */,
           {
             /* drafts */ 'karma.conf.js': [draft2],
           },
@@ -234,7 +229,6 @@
             // comment left on Base
             'karma.conf.js': [comment3],
           },
-          {} /* robot comments */,
           {
             /* drafts */ 'karma.conf.js': [draft2],
           },
@@ -288,7 +282,6 @@
             // comment left on Base
             'karma.conf.js': [comment4],
           },
-          {} /* robot comments */,
           {
             /* drafts */ 'karma.conf.js': [draft2],
           },
@@ -359,7 +352,6 @@
       test('drafts are ported over', () => {
         changeComments = new ChangeComments(
           {} /* comments */,
-          {} /* robotComments */,
           {
             /* drafts */
             // draft1: resolved draft that will be ported over to ps 4
@@ -460,29 +452,14 @@
     suite('comment ranges and paths', () => {
       const comments = [
         {
-          ...createRobotComment(),
+          // legacy from when we were still supporting robot comments
+          ...createComment(),
           id: '01' as UrlEncodedCommentId,
-          patch_set: 2 as RevisionPatchSetNum,
-          path: 'file/1',
-          side: CommentSide.PARENT,
-          line: 1,
-          updated: makeTime(1),
-          range: {
-            start_line: 1,
-            start_character: 2,
-            end_line: 2,
-            end_character: 2,
-          },
         },
         {
-          ...createRobotComment(),
+          // legacy from when we were still supporting robot comments
+          ...createComment(),
           id: '02' as UrlEncodedCommentId,
-          in_reply_to: '04' as UrlEncodedCommentId,
-          patch_set: 2 as RevisionPatchSetNum,
-          path: 'file/1',
-          unresolved: true,
-          line: 1,
-          updated: makeTime(3),
         },
         {
           ...createComment(),
@@ -589,9 +566,6 @@
         'file/1': [comments[11], comments[12]],
         'file/2': [comments[13]],
       };
-      const robotComments: {[path: string]: RobotCommentInfo[]} = {
-        'file/1': [comments[0], comments[1]],
-      };
       const commentsByFile: {[path: string]: CommentInfo[]} = {
         'file/1': [comments[2], comments[3]],
         'file/2': [comments[4], comments[5]],
@@ -606,7 +580,6 @@
       setup(() => {
         changeComments = new ChangeComments(
           commentsByFile,
-          robotComments,
           drafts,
           {} /* portedComments */,
           {} /* portedDrafts */
@@ -697,7 +670,7 @@
       test('getAllCommentsForPath', () => {
         let path = 'file/1';
         let comments = changeComments.getAllCommentsForPath(path);
-        assert.equal(comments.length, 4);
+        assert.equal(comments.length, 2);
         path = 'file/2';
         comments = changeComments.getAllCommentsForPath(path, 2 as PatchSetNum);
         assert.equal(comments.length, 1);
@@ -916,7 +889,7 @@
             patchNum: 2 as PatchSetNum,
             path: 'file/1',
           }).length,
-          3
+          2
         );
         assert.deepEqual(
           changeComments.computeCommentThreads({
@@ -979,32 +952,32 @@
       test('getAllPublishedComments', () => {
         let publishedComments = changeComments.getAllPublishedComments();
         assert.equal(Object.keys(publishedComments).length, 4);
-        assert.equal(Object.keys(publishedComments['file/1']).length, 4);
+        assert.equal(Object.keys(publishedComments['file/1']).length, 2);
         assert.equal(Object.keys(publishedComments['file/2']).length, 2);
         publishedComments = changeComments.getAllPublishedComments(
           2 as PatchSetNum
         );
-        assert.equal(Object.keys(publishedComments['file/1']).length, 4);
+        assert.equal(Object.keys(publishedComments['file/1']).length, 2);
         assert.equal(Object.keys(publishedComments['file/2']).length, 1);
       });
 
       test('getAllComments', () => {
         let comments = changeComments.getAllComments();
         assert.equal(Object.keys(comments).length, 4);
-        assert.equal(Object.keys(comments['file/1']).length, 4);
+        assert.equal(Object.keys(comments['file/1']).length, 2);
         assert.equal(Object.keys(comments['file/2']).length, 2);
         comments = changeComments.getAllComments(false, 2 as PatchSetNum);
         assert.equal(Object.keys(comments).length, 4);
-        assert.equal(Object.keys(comments['file/1']).length, 4);
+        assert.equal(Object.keys(comments['file/1']).length, 2);
         assert.equal(Object.keys(comments['file/2']).length, 1);
         // Include drafts
         comments = changeComments.getAllComments(true);
         assert.equal(Object.keys(comments).length, 4);
-        assert.equal(Object.keys(comments['file/1']).length, 6);
+        assert.equal(Object.keys(comments['file/1']).length, 4);
         assert.equal(Object.keys(comments['file/2']).length, 3);
         comments = changeComments.getAllComments(true, 2 as PatchSetNum);
         assert.equal(Object.keys(comments).length, 4);
-        assert.equal(Object.keys(comments['file/1']).length, 6);
+        assert.equal(Object.keys(comments['file/1']).length, 4);
         assert.equal(Object.keys(comments['file/2']).length, 1);
       });
 
@@ -1013,7 +986,6 @@
           {
             ...createCommentThread([
               {...comments[3], path: 'file/1'},
-              {...comments[1], path: 'file/1'},
               {...comments[12], path: 'file/1'},
             ]),
           },
@@ -1021,9 +993,6 @@
             ...createCommentThread([{...comments[11], path: 'file/1'}]),
           },
           {
-            ...createCommentThread([{...comments[0], path: 'file/1'}]),
-          },
-          {
             ...createCommentThread([{...comments[2], path: 'file/1'}]),
           },
           {
diff --git a/polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view.ts b/polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view.ts
index 1cba745..07cea33 100644
--- a/polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view.ts
+++ b/polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view.ts
@@ -107,6 +107,7 @@
 import {formStyles} from '../../../styles/form-styles';
 import {NormalizedFileInfo} from '../../change/gr-file-list/gr-file-list';
 import {configModelToken} from '../../../models/config/config-model';
+import {trimWithEllipsis} from '../../../utils/string-util';
 
 const LOADING_BLAME = 'Loading blame information. This may take a while ...';
 const LOADED_BLAME = 'Blame loaded';
@@ -889,7 +890,9 @@
         <a href=${ifDefined(this.getChangeModel().changeUrl())}
           >${this.changeNum}</a
         ><span class="changeNumberColon">:</span>
-        <span class="headerSubject">${this.change?.subject}</span>
+        <span class="headerSubject"
+          >${trimWithEllipsis(this.change?.subject, 80)}</span
+        >
         <input
           id="reviewed"
           class="reviewed hideOnEdit"
diff --git a/polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view_test.ts b/polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view_test.ts
index 1899778..a805e9c 100644
--- a/polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view_test.ts
+++ b/polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view_test.ts
@@ -134,7 +134,6 @@
       stubRestApi('saveFileReviewed').returns(Promise.resolve(new Response()));
       diffCommentsStub = stubRestApi('getDiffComments');
       diffCommentsStub.returns(Promise.resolve({}));
-      stubRestApi('getDiffRobotComments').returns(Promise.resolve({}));
       stubRestApi('getDiffDrafts').returns(Promise.resolve({}));
       stubRestApi('getPortedComments').returns(Promise.resolve({}));
 
@@ -167,7 +166,6 @@
 
       commentsModel.setState({
         comments: {},
-        robotComments: {},
         drafts: {},
         portedComments: {},
         portedDrafts: {},
diff --git a/polygerrit-ui/app/elements/diff/gr-patch-range-select/gr-patch-range-select.ts b/polygerrit-ui/app/elements/diff/gr-patch-range-select/gr-patch-range-select.ts
index 5c7ab03..0997d69 100644
--- a/polygerrit-ui/app/elements/diff/gr-patch-range-select/gr-patch-range-select.ts
+++ b/polygerrit-ui/app/elements/diff/gr-patch-range-select/gr-patch-range-select.ts
@@ -47,7 +47,11 @@
 import {commentsModelToken} from '../../../models/comments/comments-model';
 import {resolve} from '../../../models/dependency';
 import {ValueChangedEvent} from '../../../types/events';
-import {changeModelToken} from '../../../models/change/change-model';
+import {
+  changeModelToken,
+  RevisionFileUpdateStatus,
+  RevisionUpdatedFiles,
+} from '../../../models/change/change-model';
 import {changeViewModelToken} from '../../../models/views/change';
 import {fireNoBubbleNoCompose} from '../../../utils/event-util';
 import {FlagsService, KnownExperimentId} from '../../../services/flags/flags';
@@ -119,6 +123,9 @@
   @state()
   changeComments?: ChangeComments;
 
+  @state()
+  revisionUpdatedFiles?: RevisionUpdatedFiles;
+
   private readonly reporting: ReportingService =
     getAppContext().reportingService;
 
@@ -167,6 +174,11 @@
       () => this.getCommentsModel().changeComments$,
       x => (this.changeComments = x)
     );
+    subscribe(
+      this,
+      () => this.getChangeModel().revisionUpdatedFiles$,
+      x => (this.revisionUpdatedFiles = x)
+    );
   }
 
   static override get styles() {
@@ -268,7 +280,7 @@
       const entry: DropdownItem = this.createDropdownEntry(
         basePatchNum,
         'Patchset ',
-        shorten(basePatch.sha)!
+        basePatch.sha
       );
       dropdownContent.push({
         ...entry,
@@ -325,7 +337,7 @@
       const entry = this.createDropdownEntry(
         patchNum,
         patchNum === EDIT ? '' : 'Patchset ',
-        shorten(patch.sha)!
+        patch.sha
       );
       dropdownContent.push({
         ...entry,
@@ -343,7 +355,7 @@
   createDropdownEntry(patchNum: PatchSetNum, prefix: string, sha: string) {
     const entry: DropdownItem = {
       triggerText: `${prefix}${patchNum}`,
-      text: this.computeText(patchNum, prefix, sha),
+      text: this.computeText(patchNum, prefix, shorten(sha)!),
       mobileText: this.computeMobileText(patchNum),
       bottomText: `${this.computePatchSetDescription(patchNum)}`,
       value: patchNum,
@@ -355,6 +367,7 @@
         // don't ignore patchset level comments if the path is not set
         !!this.path /* ignorePatchsetLevelComments*/
       ),
+      deemphasizeReason: this.computeDeemphasizeReason(sha),
     };
     const date = this.computePatchSetDate(patchNum);
     if (date) {
@@ -363,6 +376,17 @@
     return entry;
   }
 
+  private computeDeemphasizeReason(sha: string) {
+    if (!this.path || !this.revisionUpdatedFiles) {
+      return undefined;
+    }
+
+    return this.revisionUpdatedFiles[sha]?.[this.path] ===
+      RevisionFileUpdateStatus.SAME
+      ? 'unmodified'
+      : undefined;
+  }
+
   /**
    * The basePatchNum should always be <= patchNum -- because sortedRevisions
    * is sorted in reverse order (higher patchset nums first), invalid base
@@ -467,6 +491,7 @@
     addFrontSpace?: boolean
   ) {
     const rev = getRevisionByPatchNum(this.sortedRevisions, patchNum);
+
     return rev?.description
       ? (addFrontSpace ? ' ' : '') +
           rev.description.substring(0, PATCH_DESC_MAX_LENGTH)
diff --git a/polygerrit-ui/app/elements/diff/gr-patch-range-select/gr-patch-range-select_test.ts b/polygerrit-ui/app/elements/diff/gr-patch-range-select/gr-patch-range-select_test.ts
index 1400882..2dd4443 100644
--- a/polygerrit-ui/app/elements/diff/gr-patch-range-select/gr-patch-range-select_test.ts
+++ b/polygerrit-ui/app/elements/diff/gr-patch-range-select/gr-patch-range-select_test.ts
@@ -42,7 +42,10 @@
 import {fixture, html, assert} from '@open-wc/testing';
 import {testResolver} from '../../../test/common-test-setup';
 import {changeViewModelToken} from '../../../models/views/change';
-import {changeModelToken} from '../../../models/change/change-model';
+import {
+  changeModelToken,
+  RevisionFileUpdateStatus,
+} from '../../../models/change/change-model';
 
 type RevIdToRevisionInfo = {
   [revisionId: string]: RevisionInfo | EditRevisionInfo;
@@ -149,6 +152,7 @@
         bottomText: '',
         value: EDIT,
         commentThreads: [],
+        deemphasizeReason: undefined,
       },
       {
         disabled: true,
@@ -159,6 +163,7 @@
         value: 3,
         date: '2020-02-01 01:02:03.000000000' as Timestamp,
         commentThreads: [],
+        deemphasizeReason: undefined,
       } as DropdownItem,
       {
         disabled: true,
@@ -169,6 +174,7 @@
         value: 2,
         date: '2020-02-01 01:02:03.000000000' as Timestamp,
         commentThreads: [],
+        deemphasizeReason: undefined,
       } as DropdownItem,
       {
         disabled: true,
@@ -179,6 +185,7 @@
         value: 1,
         date: '2020-02-01 01:02:03.000000000' as Timestamp,
         commentThreads: [],
+        deemphasizeReason: undefined,
       } as DropdownItem,
       {
         text: 'Base | ',
@@ -295,6 +302,7 @@
         bottomText: '',
         value: EDIT,
         commentThreads: [],
+        deemphasizeReason: undefined,
       },
       {
         disabled: false,
@@ -305,6 +313,7 @@
         value: 3,
         date: '2020-02-01 01:02:03.000000000' as Timestamp,
         commentThreads: [],
+        deemphasizeReason: undefined,
       } as DropdownItem,
       {
         disabled: false,
@@ -315,6 +324,7 @@
         value: 2,
         date: '2020-02-01 01:02:03.000000000' as Timestamp,
         commentThreads: [],
+        deemphasizeReason: undefined,
       } as DropdownItem,
       {
         disabled: true,
@@ -325,6 +335,7 @@
         value: 1,
         date: '2020-02-01 01:02:03.000000000' as Timestamp,
         commentThreads: [],
+        deemphasizeReason: undefined,
       } as DropdownItem,
     ];
 
@@ -530,4 +541,66 @@
       'Should ignore patchset level comments when path is defined'
     );
   });
+
+  test('revisions without modification are deemphasized', async () => {
+    element.availablePatches = [
+      {num: 3, sha: 'sha3'} as PatchSet,
+      {num: 2, sha: 'sha2'} as PatchSet,
+      {num: 1, sha: 'sha1'} as PatchSet,
+    ];
+    element.sortedRevisions = [
+      createRevision(3),
+      createRevision(2),
+      createRevision(1),
+    ];
+    element.revisionUpdatedFiles = {
+      sha1: {
+        foo: RevisionFileUpdateStatus.MODIFIED,
+        bar: RevisionFileUpdateStatus.MODIFIED,
+      },
+      sha2: {
+        foo: RevisionFileUpdateStatus.SAME,
+        bar: RevisionFileUpdateStatus.MODIFIED,
+      },
+      sha3: {
+        foo: RevisionFileUpdateStatus.UNKNOWN,
+        bar: RevisionFileUpdateStatus.SAME,
+      },
+    };
+    element.path = 'foo';
+    element.revisionInfo = getInfo(element.sortedRevisions);
+    element.patchNum = 3 as PatchSetNumber;
+    element.basePatchNum = PARENT;
+    await element.updateComplete;
+
+    const expectedResult: {triggerText: string; deemphasizeReason?: string}[] =
+      [
+        {
+          triggerText: 'Patchset 3',
+          deemphasizeReason: undefined,
+        },
+        {
+          triggerText: 'Patchset 2',
+          deemphasizeReason: 'unmodified',
+        },
+        {
+          triggerText: 'Patchset 1',
+          deemphasizeReason: undefined,
+        },
+        {
+          triggerText: 'Base',
+          deemphasizeReason: undefined,
+        },
+      ];
+    assert.deepEqual(
+      element.computeBaseDropdownContent().map(
+        x =>
+          ({
+            triggerText: x.triggerText,
+            deemphasizeReason: x.deemphasizeReason,
+          } as {triggerText: string; deemphasizeReason?: string})
+      ),
+      expectedResult
+    );
+  });
 });
diff --git a/polygerrit-ui/app/elements/edit/gr-edit-controls/gr-edit-controls_test.ts b/polygerrit-ui/app/elements/edit/gr-edit-controls/gr-edit-controls_test.ts
index 0e9985d..00c0863 100644
--- a/polygerrit-ui/app/elements/edit/gr-edit-controls/gr-edit-controls_test.ts
+++ b/polygerrit-ui/app/elements/edit/gr-edit-controls/gr-edit-controls_test.ts
@@ -468,7 +468,7 @@
 
     test('restore hidden by default', () => {
       assert.isTrue(
-        queryAndAssert(element, '#restore').classList.contains('invisible')!
+        queryAndAssert(element, '#restore').classList.contains('invisible')
       );
     });
 
diff --git a/polygerrit-ui/app/elements/edit/gr-editor-view/gr-editor-view.ts b/polygerrit-ui/app/elements/edit/gr-editor-view/gr-editor-view.ts
index 7f35f04..5731522 100644
--- a/polygerrit-ui/app/elements/edit/gr-editor-view/gr-editor-view.ts
+++ b/polygerrit-ui/app/elements/edit/gr-editor-view/gr-editor-view.ts
@@ -510,7 +510,7 @@
           HttpMethod.POST,
           '/edit:publish',
           undefined,
-          {notify: NotifyType.NONE},
+          {notify: NotifyType.OWNER_REVIEWERS},
           handleError
         )
         .then(res => {
diff --git a/polygerrit-ui/app/elements/settings/gr-identities/gr-identities_test.ts b/polygerrit-ui/app/elements/settings/gr-identities/gr-identities_test.ts
index e96fa39..f3c0976 100644
--- a/polygerrit-ui/app/elements/settings/gr-identities/gr-identities_test.ts
+++ b/polygerrit-ui/app/elements/settings/gr-identities/gr-identities_test.ts
@@ -123,7 +123,7 @@
 
     assert.equal(rows.length, 2);
 
-    const nameCells = rows.map(row => queryAll(row, 'td')[1]!.textContent);
+    const nameCells = rows.map(row => queryAll(row, 'td')[1].textContent);
 
     assert.equal(nameCells[0]!, 'gerrit@example.com');
     assert.equal(nameCells[1]!, 'gerrit2@example.com');
diff --git a/polygerrit-ui/app/elements/settings/gr-preferences/gr-preferences_test.ts b/polygerrit-ui/app/elements/settings/gr-preferences/gr-preferences_test.ts
index 26964a0..09b7c1b 100644
--- a/polygerrit-ui/app/elements/settings/gr-preferences/gr-preferences_test.ts
+++ b/polygerrit-ui/app/elements/settings/gr-preferences/gr-preferences_test.ts
@@ -297,7 +297,7 @@
     assert.equal(
       Number(
         (
-          valueOf('Changes per page', 'preferences')!
+          valueOf('Changes per page', 'preferences')
             .firstElementChild as GrSelect
         ).bindValue
       ),
@@ -308,51 +308,49 @@
       preferences.theme
     );
     assert.equal(
-      (
-        valueOf('Date/time format', 'preferences')!
-          .firstElementChild as GrSelect
-      ).bindValue,
+      (valueOf('Date/time format', 'preferences').firstElementChild as GrSelect)
+        .bindValue,
       preferences.date_format
     );
     assert.equal(
-      (valueOf('Date/time format', 'preferences')!.lastElementChild as GrSelect)
+      (valueOf('Date/time format', 'preferences').lastElementChild as GrSelect)
         .bindValue,
       preferences.time_format
     );
     assert.equal(
       (
-        valueOf('Email notifications', 'preferences')!
+        valueOf('Email notifications', 'preferences')
           .firstElementChild as GrSelect
       ).bindValue,
       preferences.email_strategy
     );
     assert.equal(
-      (valueOf('Email format', 'preferences')!.firstElementChild as GrSelect)
+      (valueOf('Email format', 'preferences').firstElementChild as GrSelect)
         .bindValue,
       preferences.email_format
     );
     assert.equal(
       (
-        valueOf('Show Relative Dates In Changes Table', 'preferences')!
+        valueOf('Show Relative Dates In Changes Table', 'preferences')
           .firstElementChild as HTMLInputElement
       ).checked,
       false
     );
     assert.equal(
-      (valueOf('Diff view', 'preferences')!.firstElementChild as GrSelect)
+      (valueOf('Diff view', 'preferences').firstElementChild as GrSelect)
         .bindValue,
       preferences.diff_view
     );
     assert.equal(
       (
-        valueOf('Show size bars in file list', 'preferences')!
+        valueOf('Show size bars in file list', 'preferences')
           .firstElementChild as HTMLInputElement
       ).checked,
       true
     );
     assert.equal(
       (
-        valueOf('Publish comments on push', 'preferences')!
+        valueOf('Publish comments on push', 'preferences')
           .firstElementChild as HTMLInputElement
       ).checked,
       false
@@ -362,13 +360,13 @@
         valueOf(
           'Set new changes to "work in progress" by default',
           'preferences'
-        )!.firstElementChild as HTMLInputElement
+        ).firstElementChild as HTMLInputElement
       ).checked,
       false
     );
     assert.equal(
       (
-        valueOf('Disable token highlighting on hover', 'preferences')!
+        valueOf('Disable token highlighting on hover', 'preferences')
           .firstElementChild as HTMLInputElement
       ).checked,
       false
@@ -378,7 +376,7 @@
         valueOf(
           'Insert Signed-off-by Footer For Inline Edit Changes',
           'preferences'
-        )!.firstElementChild as HTMLInputElement
+        ).firstElementChild as HTMLInputElement
       ).checked,
       false
     );
@@ -400,7 +398,7 @@
       })
     );
 
-    const publishOnPush = valueOf('Publish comments on push', 'preferences')!
+    const publishOnPush = valueOf('Publish comments on push', 'preferences')
       .firstElementChild! as HTMLSpanElement;
 
     publishOnPush.click();
@@ -437,7 +435,7 @@
     const publishCommentsOnPush = valueOf(
       'Publish comments on push',
       'preferences'
-    )!.firstElementChild! as HTMLSpanElement;
+    ).firstElementChild! as HTMLSpanElement;
     publishCommentsOnPush.click();
 
     assert.isTrue(element.hasUnsavedChanges());
@@ -458,7 +456,7 @@
     const newChangesWorkInProgress = valueOf(
       'Set new changes to "work in progress" by default',
       'preferences'
-    )!.firstElementChild! as HTMLSpanElement;
+    ).firstElementChild! as HTMLSpanElement;
     newChangesWorkInProgress.click();
 
     assert.isTrue(element.hasUnsavedChanges());
diff --git a/polygerrit-ui/app/elements/shared/gr-comment-thread/gr-comment-thread.ts b/polygerrit-ui/app/elements/shared/gr-comment-thread/gr-comment-thread.ts
index 89b2a6e..ab649b7 100644
--- a/polygerrit-ui/app/elements/shared/gr-comment-thread/gr-comment-thread.ts
+++ b/polygerrit-ui/app/elements/shared/gr-comment-thread/gr-comment-thread.ts
@@ -38,7 +38,6 @@
   Comment,
   CommentThread,
   isDraft,
-  isRobot,
   NumericChangeId,
   RepoName,
   UrlEncodedCommentId,
@@ -404,9 +403,6 @@
         .comment-box.unresolved {
           background-color: var(--unresolved-comment-background-color);
         }
-        .comment-box.robotComment {
-          background-color: var(--robot-comment-background-color);
-        }
         #actionsContainer {
           display: flex;
         }
@@ -492,7 +488,6 @@
   override render() {
     if (!this.thread) return;
     const dynamicBoxClasses = {
-      robotComment: this.isRobotComment(),
       unresolved: this.unresolved,
       saving: this.saving,
     };
@@ -557,7 +552,6 @@
 
   private renderComment(comment?: Comment) {
     if (!comment) return nothing;
-    const robotButtonDisabled = !this.account || this.isDraft();
     const isFirstComment = this.getFirstComment() === comment;
     const initiallyCollapsed =
       !isDraft(comment) &&
@@ -570,7 +564,6 @@
         .comment=${comment}
         .comments=${this.thread!.comments}
         ?initially-collapsed=${initiallyCollapsed}
-        ?robot-button-disabled=${robotButtonDisabled}
         ?show-patchset=${this.showPatchset}
         ?show-ported-comment=${this.showPortedComment && isFirstComment}
         @reply-to-comment=${this.handleReplyToComment}
@@ -598,7 +591,7 @@
   }
 
   renderActions() {
-    if (!this.account || this.isDraft() || this.isRobotComment()) return;
+    if (!this.account || this.isDraft()) return;
     return html`
       <div id="actionsContainer">
         <span id="unresolvedLabel">${
@@ -881,10 +874,6 @@
     return '';
   }
 
-  private isRobotComment() {
-    return isRobot(this.getLastComment());
-  }
-
   private getFirstComment() {
     assertIsDefined(this.thread);
     return getFirstComment(this.thread);
diff --git a/polygerrit-ui/app/elements/shared/gr-comment-thread/gr-comment-thread_test.ts b/polygerrit-ui/app/elements/shared/gr-comment-thread/gr-comment-thread_test.ts
index ababd89..44c8646 100644
--- a/polygerrit-ui/app/elements/shared/gr-comment-thread/gr-comment-thread_test.ts
+++ b/polygerrit-ui/app/elements/shared/gr-comment-thread/gr-comment-thread_test.ts
@@ -134,20 +134,14 @@
             <gr-comment
               collapsed=""
               initially-collapsed=""
-              robot-button-disabled=""
               show-patchset=""
             ></gr-comment>
             <gr-comment
               collapsed=""
               initially-collapsed=""
-              robot-button-disabled=""
               show-patchset=""
             ></gr-comment>
-            <gr-comment
-              class="draft"
-              robot-button-disabled=""
-              show-patchset=""
-            ></gr-comment>
+            <gr-comment class="draft" show-patchset=""></gr-comment>
           </div>
         </div>
       `
@@ -172,11 +166,7 @@
         <div id="container">
           <h3 class="assistive-tech-only">Draft Comment thread by Yoda</h3>
           <div class="comment-box" tabindex="0">
-            <gr-comment
-              class="draft"
-              robot-button-disabled=""
-              show-patchset=""
-            ></gr-comment>
+            <gr-comment class="draft" show-patchset=""></gr-comment>
           </div>
         </div>
       `
diff --git a/polygerrit-ui/app/elements/shared/gr-comment/gr-comment.ts b/polygerrit-ui/app/elements/shared/gr-comment/gr-comment.ts
index a11c148..660b014 100644
--- a/polygerrit-ui/app/elements/shared/gr-comment/gr-comment.ts
+++ b/polygerrit-ui/app/elements/shared/gr-comment/gr-comment.ts
@@ -26,9 +26,7 @@
   DraftInfo,
   NumericChangeId,
   RepoName,
-  RobotCommentInfo,
   Comment,
-  isRobot,
   isSaving,
   isError,
   isDraft,
@@ -43,7 +41,6 @@
   hasUserSuggestion,
   id,
   isFileLevelComment,
-  NEWLINE_PATTERN,
   USER_SUGGESTION_START_PATTERN,
 } from '../../../utils/comment-util';
 import {
@@ -178,7 +175,7 @@
   comment?: Comment;
 
   // TODO: Move this out of gr-comment. gr-comment should not have a comments
-  // property. This is only used for hasHumanReply at the moment.
+  // property.
   @property({type: Array})
   comments?: Comment[];
 
@@ -202,9 +199,6 @@
   @property({type: Boolean, reflect: true})
   collapsed?: boolean;
 
-  @property({type: Boolean, attribute: 'robot-button-disabled'})
-  robotButtonDisabled = false;
-
   @property({type: String})
   messagePlaceholder?: string;
 
@@ -392,9 +386,6 @@
         this.save();
       });
     }
-    this.addEventListener('apply-user-suggestion', () => {
-      this.handleAppliedFix();
-    });
     this.addEventListener('open-user-suggest-preview', e => {
       this.handleShowFix(e.detail.code);
     });
@@ -561,18 +552,11 @@
         span.date:hover {
           text-decoration: underline;
         }
-        .actions,
-        .robotActions {
+        .actions {
           display: flex;
           justify-content: space-between;
           padding-top: 0;
         }
-        .robotActions {
-          /* Better than the negative margin would be to remove the gr-button
-       * padding, but then we would also need to fix the buttons that are
-       * inserted by plugins. :-/ */
-          margin: 4px 0 -4px;
-        }
         .action {
           margin-left: var(--spacing-l);
         }
@@ -593,16 +577,6 @@
         .show-hide {
           margin-left: var(--spacing-s);
         }
-        .robotId {
-          color: var(--deemphasized-text-color);
-          margin-bottom: var(--spacing-m);
-        }
-        .robotRun {
-          margin-left: var(--spacing-m);
-        }
-        .robotRunLink {
-          margin-left: var(--spacing-m);
-        }
         /* just for a11y */
         input.show-hide {
           display: none;
@@ -737,10 +711,9 @@
         <div id="container" class=${classMap(classes)}>
           ${this.renderHeader()}
           <div class="body">
-            ${this.renderRobotAuthor()} ${this.renderEditingTextarea()}
-            ${this.renderCommentMessage()}
+            ${this.renderEditingTextarea()} ${this.renderCommentMessage()}
             <gr-endpoint-slot name="above-actions"></gr-endpoint-slot>
-            ${this.renderHumanActions()} ${this.renderRobotActions()}
+            ${this.renderHumanActions()}
           </div>
           ${/* if this.editing */ this.renderGeneratedSuggestionPreview()}
           ${/* if !this.editing */ this.renderFixSuggestionPreview()}
@@ -763,19 +736,15 @@
           ${this.renderDraftLabel()}
         </div>
         <div class="headerMiddle">${this.renderCollapsedContent()}</div>
-        ${this.renderSuggestEditButton()} ${this.renderRunDetails()}
-        ${this.renderDeleteButton()} ${this.renderPatchset()}
-        ${this.renderSeparator()} ${this.renderDate()} ${this.renderToggle()}
+        ${this.renderSuggestEditButton()} ${this.renderDeleteButton()}
+        ${this.renderPatchset()} ${this.renderSeparator()} ${this.renderDate()}
+        ${this.renderToggle()}
       </div>
     `;
   }
 
   private renderAuthor() {
     if (isDraft(this.comment)) return;
-    if (isRobot(this.comment)) {
-      const id = this.comment.robot_id;
-      return html`<span class="robotName">${id}</span>`;
-    }
     return html`
       <gr-account-label .account=${this.comment?.author ?? this.account}>
       </gr-account-label>
@@ -825,26 +794,12 @@
     `;
   }
 
-  private renderRunDetails() {
-    if (!isRobot(this.comment)) return;
-    if (!this.comment?.url || this.collapsed) return;
-    return html`
-      <div class="runIdMessage message">
-        <div class="runIdInformation">
-          <a class="robotRunLink" href=${this.comment.url}>
-            <span class="robotRun link">Run Details</span>
-          </a>
-        </div>
-      </div>
-    `;
-  }
-
   /**
    * Deleting a comment is an admin feature. It means more than just discarding
    * a draft. It is an action applied to published comments.
    */
   private renderDeleteButton() {
-    if (!this.isAdmin || isDraft(this.comment) || isRobot(this.comment)) return;
+    if (!this.isAdmin || isDraft(this.comment)) return;
     if (this.collapsed) return;
     return html`
       <gr-button
@@ -918,11 +873,6 @@
     `;
   }
 
-  private renderRobotAuthor() {
-    if (!isRobot(this.comment) || this.collapsed) return;
-    return html`<div class="robotId">${this.comment.author?.name}</div>`;
-  }
-
   private renderEditingTextarea() {
     if (!this.editing || this.collapsed) return;
     return html`
@@ -1056,7 +1006,7 @@
   }
 
   private renderHumanActions() {
-    if (!this.account || isRobot(this.comment)) return;
+    if (!this.account) return;
     if (this.collapsed || !isDraft(this.comment)) return;
     return html`
       <div class="actions">
@@ -1158,13 +1108,9 @@
   }
 
   private renderFixSuggestionPreview() {
-    if (
-      !this.comment?.fix_suggestions ||
-      this.editing ||
-      isRobot(this.comment) ||
-      this.collapsed
-    )
+    if (!this.comment?.fix_suggestions || this.editing || this.collapsed) {
       return nothing;
+    }
     return html`<gr-fix-suggestions
       .comment=${this.comment}
     ></gr-fix-suggestions>`;
@@ -1345,51 +1291,6 @@
     };
   }
 
-  private renderRobotActions() {
-    if (!this.account || !isRobot(this.comment)) return;
-    const endpoint = html`
-      <gr-endpoint-decorator name="robot-comment-controls">
-        <gr-endpoint-param name="comment" .value=${this.comment}>
-        </gr-endpoint-param>
-      </gr-endpoint-decorator>
-    `;
-    return html`
-      <div class="robotActions">
-        ${this.renderCopyLinkIcon()} ${endpoint} ${this.renderShowFixButton()}
-        ${this.renderPleaseFixButton()}
-      </div>
-    `;
-  }
-
-  private renderShowFixButton() {
-    const fix_suggestions = (this.comment as RobotCommentInfo)?.fix_suggestions;
-    if (!fix_suggestions || fix_suggestions.length === 0) return;
-    return html`
-      <gr-button
-        link
-        secondary
-        class="action show-fix"
-        @click=${() => this.handleShowFix()}
-      >
-        Show Fix
-      </gr-button>
-    `;
-  }
-
-  private renderPleaseFixButton() {
-    if (this.hasHumanReply()) return;
-    return html`
-      <gr-button
-        link
-        ?disabled=${this.robotButtonDisabled}
-        class="action fix"
-        @click=${this.handlePleaseFix}
-      >
-        Please Fix
-      </gr-button>
-    `;
-  }
-
   private renderConfirmDialog() {
     return html`
       <dialog id="confirmDeleteModal" tabindex="-1">
@@ -1506,15 +1407,6 @@
     this.messageText = quote + this.messageText;
   }
 
-  // TODO: Move this out of gr-comment. gr-comment should not have a comments
-  // property.
-  private hasHumanReply() {
-    if (!this.comment || !this.comments) return false;
-    return this.comments.some(
-      c => c.in_reply_to && c.in_reply_to === this.comment?.id && !isRobot(c)
-    );
-  }
-
   // private, but visible for testing
   async createFixPreview(
     replacement?: string
@@ -1550,23 +1442,6 @@
         ],
       };
     }
-    if (
-      isRobot(this.comment) &&
-      this.comment.fix_suggestions &&
-      this.comment.fix_suggestions.length > 0
-    ) {
-      const id = this.comment.robot_id;
-      return {
-        fixSuggestions: this.comment.fix_suggestions.map(s => {
-          return {
-            ...s,
-            description: `${id ?? ''} - ${s.description ?? ''}`,
-          };
-        }),
-        patchNum: this.comment.patch_set,
-        onCloseFixPreviewCallbacks: [],
-      };
-    }
     throw new Error('unable to create preview fix event');
   }
 
@@ -1623,19 +1498,6 @@
     }
   }
 
-  private handlePleaseFix() {
-    const message = this.comment?.message;
-    assert(!!message, 'empty message');
-    const quoted = message.replace(NEWLINE_PATTERN, '\n> ');
-    const eventDetail: ReplyToCommentEventDetail = {
-      content: `> ${quoted}\n\nPlease fix.`,
-      userWantsToEdit: false,
-      unresolved: true,
-    };
-    // Handled by <gr-comment-thread>.
-    fire(this, 'reply-to-comment', eventDetail);
-  }
-
   private handleAppliedFix() {
     const message = this.comment?.message;
     assert(!!message, 'empty message');
diff --git a/polygerrit-ui/app/elements/shared/gr-comment/gr-comment_test.ts b/polygerrit-ui/app/elements/shared/gr-comment/gr-comment_test.ts
index 41c7c4e..7d3d38b 100644
--- a/polygerrit-ui/app/elements/shared/gr-comment/gr-comment_test.ts
+++ b/polygerrit-ui/app/elements/shared/gr-comment/gr-comment_test.ts
@@ -12,7 +12,6 @@
   stubRestApi,
   query,
   pressKey,
-  listenOnce,
   mockPromise,
   waitUntilCalled,
   dispatch,
@@ -34,10 +33,8 @@
 import {
   createComment,
   createDraft,
-  createRobotComment,
   createNewDraft,
 } from '../../../test/test-data-generators';
-import {ReplyToCommentEvent} from '../../../types/events';
 import {GrConfirmDeleteCommentDialog} from '../gr-confirm-delete-comment-dialog/gr-confirm-delete-comment-dialog';
 import {assertIsDefined} from '../../../utils/common-util';
 import {Key, Modifier} from '../../../utils/dom-util';
@@ -176,82 +173,6 @@
       );
     });
 
-    test('renders expanded robot', async () => {
-      element.initiallyCollapsed = false;
-      element.comment = createRobotComment();
-      await element.updateComplete;
-      assert.shadowDom.equal(
-        element,
-        /* HTML */ `
-          <gr-endpoint-decorator name="comment">
-            <gr-endpoint-param name="comment"></gr-endpoint-param>
-            <gr-endpoint-param name="editing"></gr-endpoint-param>
-            <gr-endpoint-param name="message"></gr-endpoint-param>
-            <gr-endpoint-param name="isDraft"></gr-endpoint-param>
-            <div class="container" id="container">
-              <div class="header" id="header">
-                <div class="headerLeft">
-                  <span class="robotName">robot-id-123</span>
-                </div>
-                <div class="headerMiddle"></div>
-                <span class="patchset-text">Patchset 1</span>
-                <span class="separator"></span>
-                <span class="date" tabindex="0">
-                  <gr-date-formatter withtooltip=""></gr-date-formatter>
-                </span>
-                <div class="show-hide" tabindex="0">
-                  <label aria-label="Collapse" class="show-hide">
-                    <input class="show-hide" type="checkbox" />
-                    <gr-icon id="icon" icon="expand_less"></gr-icon>
-                  </label>
-                </div>
-              </div>
-              <div class="body">
-                <div class="robotId"></div>
-                <gr-formatted-text class="message"></gr-formatted-text>
-                <gr-endpoint-slot name="above-actions"></gr-endpoint-slot>
-                <div class="robotActions">
-                  <gr-icon
-                    icon="link"
-                    class="copy link-icon"
-                    role="button"
-                    tabindex="0"
-                    title="Copy link to this comment"
-                  ></gr-icon>
-                  <gr-endpoint-decorator name="robot-comment-controls">
-                    <gr-endpoint-param name="comment"></gr-endpoint-param>
-                  </gr-endpoint-decorator>
-                  <gr-button
-                    aria-disabled="false"
-                    class="action show-fix"
-                    link=""
-                    role="button"
-                    secondary=""
-                    tabindex="0"
-                  >
-                    Show Fix
-                  </gr-button>
-                  <gr-button
-                    aria-disabled="false"
-                    class="action fix"
-                    link=""
-                    role="button"
-                    tabindex="0"
-                  >
-                    Please Fix
-                  </gr-button>
-                </div>
-              </div>
-            </div>
-          </gr-endpoint-decorator>
-          <dialog id="confirmDeleteModal" tabindex="-1">
-            <gr-confirm-delete-comment-dialog id="confirmDeleteCommentDialog">
-            </gr-confirm-delete-comment-dialog>
-          </dialog>
-        `
-      );
-    });
-
     test('renders expanded admin', async () => {
       element.initiallyCollapsed = false;
       element.isAdmin = true;
@@ -784,41 +705,6 @@
       assert.isTrue(discardStub.called);
       assert.isFalse(saveStub.called);
     });
-
-    test('handlePleaseFix fires reply-to-comment event', async () => {
-      const listener = listenOnce<ReplyToCommentEvent>(
-        element,
-        'reply-to-comment'
-      );
-      element.comment = createRobotComment();
-      element.comments = [element.comment];
-      await element.updateComplete;
-
-      queryAndAssert<GrButton>(element, '.fix').click();
-
-      const e = await listener;
-      assert.equal(e.detail.unresolved, true);
-      assert.equal(e.detail.userWantsToEdit, false);
-      assert.isTrue(e.detail.content.includes('Please fix.'));
-    });
-
-    test('do not show Please Fix button if human reply exists', async () => {
-      element.initiallyCollapsed = false;
-      const robotComment = createRobotComment();
-      element.comment = robotComment;
-      await element.updateComplete;
-
-      let actions = query(element, '.robotActions gr-button.fix');
-      assert.isOk(actions);
-
-      element.comments = [
-        robotComment,
-        {...createComment(), in_reply_to: robotComment.id},
-      ];
-      await element.updateComplete;
-      actions = query(element, '.robotActions gr-button.fix');
-      assert.isNotOk(actions);
-    });
   });
 
   suite('auto saving', () => {
diff --git a/polygerrit-ui/app/elements/shared/gr-dropdown-list/gr-dropdown-list.ts b/polygerrit-ui/app/elements/shared/gr-dropdown-list/gr-dropdown-list.ts
index f3160fb..9a402e8 100644
--- a/polygerrit-ui/app/elements/shared/gr-dropdown-list/gr-dropdown-list.ts
+++ b/polygerrit-ui/app/elements/shared/gr-dropdown-list/gr-dropdown-list.ts
@@ -24,6 +24,7 @@
 import {when} from 'lit/directives/when.js';
 import {isMagicPath} from '../../../utils/path-list-util';
 import {fireNoBubble} from '../../../utils/event-util';
+import {classMap} from 'lit/directives/class-map.js';
 
 /**
  * Required values are text and value. mobileText and triggerText will
@@ -44,6 +45,7 @@
   disabled?: boolean;
   file?: NormalizedFileInfo;
   commentThreads?: CommentThread[];
+  deemphasizeReason?: string;
 }
 
 declare global {
@@ -168,6 +170,9 @@
             --selection-background-color
           );
         }
+        .topContent.deemphasized {
+          color: var(--deemphasized-text-color);
+        }
         gr-comments-summary {
           padding-left: var(--spacing-s);
         }
@@ -258,10 +263,19 @@
   private renderPaperItem(item: DropdownItem) {
     return html`
       <paper-item ?disabled=${item.disabled} data-value=${item.value}>
-        <div class="topContent">
+        <div
+          class=${classMap({
+            topContent: true,
+            deemphasized: !!item.deemphasizeReason,
+          })}
+        >
           <div>
             <span>${item.text}</span>
             ${when(
+              !!item.deemphasizeReason,
+              () => html`<span>| ${item.deemphasizeReason}</span>`
+            )}
+            ${when(
               item.commentThreads,
               () => html`<gr-comments-summary
                 .commentThreads=${item.commentThreads}
diff --git a/polygerrit-ui/app/elements/shared/gr-editable-content/gr-editable-content.ts b/polygerrit-ui/app/elements/shared/gr-editable-content/gr-editable-content.ts
index 490f31b..ff702b6 100644
--- a/polygerrit-ui/app/elements/shared/gr-editable-content/gr-editable-content.ts
+++ b/polygerrit-ui/app/elements/shared/gr-editable-content/gr-editable-content.ts
@@ -51,6 +51,7 @@
   formatCommitMessageString,
   FormattingError,
 } from '../../../utils/commit-message-formatter-util';
+import {modalStyles} from '../../../styles/gr-modal-styles';
 
 const RESTORED_MESSAGE = 'Content restored from a previous edit.';
 const STORAGE_DEBOUNCE_INTERVAL_MS = 400;
@@ -78,6 +79,9 @@
   @query('iron-autogrow-textarea')
   private textarea?: IronAutogrowTextareaElement;
 
+  @query('#uploaderConfirmDialog')
+  private readonly uploaderConfirmDialog?: HTMLDialogElement;
+
   @property({type: String})
   content?: string;
 
@@ -125,6 +129,8 @@
 
   @state() patchNum?: RevisionPatchSetNum;
 
+  @state() isUploader = false;
+
   private readonly restApiService = getAppContext().restApiService;
 
   private readonly getChangeModel = resolve(this, changeModelToken);
@@ -178,6 +184,11 @@
       () => this.getChangeModel().patchNum$,
       x => (this.patchNum = x)
     );
+    subscribe(
+      this,
+      () => this.getChangeModel().isUploader$,
+      x => (this.isUploader = x)
+    );
   }
 
   override disconnectedCallback() {
@@ -205,6 +216,7 @@
       sharedStyles,
       formStyles,
       fontStyles,
+      modalStyles,
       css`
         :host {
           display: block;
@@ -303,6 +315,7 @@
         ${this.renderViewer()} ${this.renderEditor()} ${this.renderButtons()}
         <gr-endpoint-slot name="above-actions"></gr-endpoint-slot>
       </gr-endpoint-decorator>
+      ${this.renderUploaderConfirmDialog()}
     `;
   }
 
@@ -438,6 +451,31 @@
     `;
   }
 
+  private renderUploaderConfirmDialog() {
+    if (this.isUploader) return nothing;
+    return html`
+      <dialog id="uploaderConfirmDialog" tabindex="-1">
+        <gr-dialog
+          confirm-label="Continue"
+          @confirm=${this.handleUploaderConfirm}
+          @cancel=${this.handleUploaderCancel}
+        >
+          <div class="header" slot="header">Become Uploader</div>
+          <div class="main" slot="main">
+            <p>
+              By editing the commit message, you will become the uploader of
+              the<br />
+              new patch set. This means that your own approvals will be
+              ignored<br />
+              for submit requirements that ignore uploader approvals.
+            </p>
+            <p>Do you want to continue?</p>
+          </div>
+        </gr-dialog>
+      </dialog>
+    `;
+  }
+
   contentChanged() {
     /* A changed content means that either a different change has been loaded
      * or new content was saved. Either way, let's reset the component.
@@ -604,13 +642,17 @@
           patchNum: this.patchNum,
         })
       );
-
       return;
     }
+
     await this.loadEmails();
-    this.editing = true;
-    await this.updateComplete;
-    this.focusTextarea();
+
+    if (!this.isUploader) {
+      assertIsDefined(this.uploaderConfirmDialog, 'uploaderConfirmDialog');
+      this.uploaderConfirmDialog.showModal();
+    } else {
+      this.startEditing();
+    }
   }
 
   async loadEmails() {
@@ -741,4 +783,22 @@
       return true;
     });
   }
+
+  private handleUploaderConfirm() {
+    assertIsDefined(this.uploaderConfirmDialog, 'uploaderConfirmDialog');
+    this.uploaderConfirmDialog.close();
+    this.startEditing();
+  }
+
+  private handleUploaderCancel() {
+    assertIsDefined(this.uploaderConfirmDialog, 'uploaderConfirmDialog');
+    this.uploaderConfirmDialog.close();
+  }
+
+  private startEditing() {
+    this.editing = true;
+    this.updateComplete.then(() => {
+      this.focusTextarea();
+    });
+  }
 }
diff --git a/polygerrit-ui/app/elements/shared/gr-editable-content/gr-editable-content_test.ts b/polygerrit-ui/app/elements/shared/gr-editable-content/gr-editable-content_test.ts
index 323bf11..d45a34b 100644
--- a/polygerrit-ui/app/elements/shared/gr-editable-content/gr-editable-content_test.ts
+++ b/polygerrit-ui/app/elements/shared/gr-editable-content/gr-editable-content_test.ts
@@ -23,6 +23,7 @@
 } from '../../../api/rest-api';
 import {changeViewModelToken} from '../../../models/views/change';
 import {IronAutogrowTextareaElement} from '@polymer/iron-autogrow-textarea/iron-autogrow-textarea';
+import {GrDialog} from '../gr-dialog/gr-dialog';
 
 const emails = [
   {
@@ -41,6 +42,7 @@
 
   setup(async () => {
     element = await fixture(html`<gr-editable-content></gr-editable-content>`);
+    element.isUploader = true;
     await element.updateComplete;
     storageService = testResolver(storageServiceToken);
   });
@@ -463,4 +465,38 @@
       assert.include(formatButton.title, 'Automatically fixes formatting');
     });
   });
+
+  suite('uploader confirm dialog', () => {
+    test('shows when user is not uploader', async () => {
+      element.isUploader = false;
+      element.editing = true;
+      await element.updateComplete;
+      const dialog = queryAndAssert<GrDialog>(
+        element,
+        '#uploaderConfirmDialog'
+      );
+      assert.dom.equal(
+        dialog,
+        `
+          <dialog id="uploaderConfirmDialog" tabindex="-1">
+            <gr-dialog confirm-label="Continue">
+              <div class="header" slot="header">Become Uploader</div>
+              <div class="main" slot="main">
+                <p>
+                  By editing the commit message, you will become the uploader of
+              the
+                  <br />
+                  new patch set. This means that your own approvals will be
+              ignored
+                  <br />
+                  for submit requirements that ignore uploader approvals.
+                </p>
+                <p>Do you want to continue?</p>
+              </div>
+            </gr-dialog>
+          </dialog>
+        `
+      );
+    });
+  });
 });
diff --git a/polygerrit-ui/app/elements/shared/gr-fix-suggestions/gr-fix-suggestions.ts b/polygerrit-ui/app/elements/shared/gr-fix-suggestions/gr-fix-suggestions.ts
index 63ec4d1..c25af83 100644
--- a/polygerrit-ui/app/elements/shared/gr-fix-suggestions/gr-fix-suggestions.ts
+++ b/polygerrit-ui/app/elements/shared/gr-fix-suggestions/gr-fix-suggestions.ts
@@ -26,6 +26,7 @@
 import {getAppContext} from '../../../services/app-context';
 import {Interaction} from '../../../constants/reporting';
 import {ChangeStatus, FixSuggestionInfo} from '../../../api/rest-api';
+import {ReportSource} from '../../../services/suggestions/suggestions-service';
 
 export const COLLAPSE_SUGGESTION_STORAGE_KEY = 'collapseSuggestionStorageKey';
 
@@ -295,7 +296,11 @@
         fixApplied => {
           if (fixApplied)
             fire(this, 'apply-user-suggestion', {
-              fixSuggestion: fixSuggestions?.[0],
+              fixSuggestion: fixSuggestions?.[0]?.description?.includes(
+                ReportSource.GET_AI_FIX_FOR_COMMENT
+              )
+                ? fixSuggestions?.[0]
+                : undefined,
             });
         },
       ],
diff --git a/polygerrit-ui/app/elements/shared/gr-formatted-text/gr-formatted-text.ts b/polygerrit-ui/app/elements/shared/gr-formatted-text/gr-formatted-text.ts
index fa2a4ff..7454655 100644
--- a/polygerrit-ui/app/elements/shared/gr-formatted-text/gr-formatted-text.ts
+++ b/polygerrit-ui/app/elements/shared/gr-formatted-text/gr-formatted-text.ts
@@ -131,6 +131,47 @@
           link: '$1',
           enabled: true,
         };
+
+        // List of common TLDs to specifically match for schemeless URLs.
+        const TLD_REGEX = [
+          'com',
+          'org',
+          'net',
+          'edu',
+          'gov',
+          'co',
+          'jp',
+          'de',
+          'uk',
+          'fr',
+          'us',
+          'io',
+        ].join('|');
+
+        // Linkify schemeless URLs with proper domain structures.
+        this.repoCommentLinks['ALWAYS_LINK_SCHEMELESS'] = {
+          // (?<=\s|^|[('":[])   // Ensure the match is preceded by whitespace,
+          //                     // start of line, or one of ( ' " : [
+          // (                   // Start capture group 1
+          //   (?:               // Start non-capturing domain group
+          //     [\w-]+\.        //   Sequence of words/hyphens with dot, e.g. "a-b."
+          //   )+                // End domain group. Require at least one match
+          //   (?:${TLD_REGEX})  // Ensure the match ends with a common TLD
+          //   (?=.*?/)          // Positive lookahead to ensure a '/' exists in the path/query/fragment
+          //   (?:               // Start non-capturing path/query/fragment group
+          //     [/?#]           //   Start with one of / ? #
+          //     [^\s'"]*        //   Followed by some chars that are not whitespace,
+          //                     //   ' or " (to not grab trailing quotes)
+          //   )                 // End path/query/fragment group
+          // )                   // End capture group 1
+          // (?=\s|$|[)'"!?.,])  // Ensure the match is followed by whitespace,
+          //                     // end of line, or one of ) ' " ! ? . ,
+          match: `(?<=\\s|^|[('":[])((?:[\\w-]+\\.)+(?:${TLD_REGEX})(?=.*?/)(?:[/?#][^\\s'"]*))(?=\\s|$|[)'"!?.,])`,
+          // Prepend http:// for the link href otherwise it will be treated as
+          // a relative URL.
+          link: 'http://$1',
+          enabled: true,
+        };
       }
     );
   }
diff --git a/polygerrit-ui/app/elements/shared/gr-formatted-text/gr-formatted-text_test.ts b/polygerrit-ui/app/elements/shared/gr-formatted-text/gr-formatted-text_test.ts
index 723267e..1694fcd 100644
--- a/polygerrit-ui/app/elements/shared/gr-formatted-text/gr-formatted-text_test.ts
+++ b/polygerrit-ui/app/elements/shared/gr-formatted-text/gr-formatted-text_test.ts
@@ -16,7 +16,11 @@
 import './gr-formatted-text';
 import {GrFormattedText} from './gr-formatted-text';
 import {createComment, createConfig} from '../../../test/test-data-generators';
-import {queryAndAssert, waitUntilObserved} from '../../../test/test-utils';
+import {
+  query,
+  queryAndAssert,
+  waitUntilObserved,
+} from '../../../test/test-utils';
 import {CommentLinks, EmailAddress} from '../../../api/rest-api';
 import {testResolver} from '../../../test/common-test-setup';
 import {GrAccountChip} from '../gr-account-chip/gr-account-chip';
@@ -236,12 +240,28 @@
     });
 
     test('does default linking', async () => {
-      const checkLinking = async (url: string) => {
+      const checkLinking = async (url: string, expectLinkified = true) => {
         element.content = url;
         await element.updateComplete;
-        const a = queryAndAssert<HTMLElement>(element, 'a');
-        assert.equal(a.getAttribute('href'), url);
-        assert.equal(a.innerText, url);
+        const a = query<HTMLElement>(element, 'a');
+
+        if (expectLinkified) {
+          assert.isDefined<HTMLElement | undefined>(a);
+          // URLs without scheme are upgraded to https:// by the
+          // ALWAYS_LINK_SCHEMELESS rule. URLs with http:// or https://
+          // are preserved by the ALWAYS_LINK_HTTP rule.
+          const isSchemeless =
+            !url.startsWith('http://') &&
+            !url.startsWith('https://') &&
+            !url.startsWith('mailto:') &&
+            !url.startsWith('/');
+          const expectedHref = isSchemeless ? `http://${url}` : url;
+
+          assert.equal(a.getAttribute('href'), expectedHref);
+          assert.equal(a.innerText, url);
+        } else {
+          assert.isUndefined(a);
+        }
       };
 
       await checkLinking('http://www.google.com');
@@ -254,6 +274,18 @@
       await checkLinking(
         'https://google.com/traces/list?project=gerrit&tid=123'
       );
+
+      await checkLinking('www.google.com/path');
+      await checkLinking('www.google-foo.com/path');
+      await checkLinking('google.co.uk/path?q=1#frag');
+
+      // Do not linkify URLs without `/`.
+      await checkLinking('google.com', false);
+      await checkLinking('com.google.gerrit.server.Event', false);
+
+      // Do not linkify URLs without a recognized TLD.
+      await checkLinking('google.foogle/path', false);
+      await checkLinking('google.com.blah/path', false);
     });
   });
 
@@ -743,13 +775,29 @@
     });
 
     test('does default linking', async () => {
-      const checkLinking = async (url: string) => {
+      const checkLinking = async (url: string, expectLinkified = true) => {
         element.content = url;
         await element.updateComplete;
-        const a = queryAndAssert<HTMLElement>(element, 'a');
+        const a = query<HTMLElement>(element, 'a');
         const p = queryAndAssert<HTMLElement>(element, 'p');
-        assert.equal(a.getAttribute('href'), url);
         assert.equal(p.innerText, url);
+
+        if (expectLinkified) {
+          assert.isDefined<HTMLElement | undefined>(a);
+          // URLs without scheme are upgraded to https:// by the
+          // ALWAYS_LINK_SCHEMELESS rule. URLs with http:// or https://
+          // are preserved by the ALWAYS_LINK_HTTP rule.
+          const isSchemeless =
+            !url.startsWith('http://') &&
+            !url.startsWith('https://') &&
+            !url.startsWith('mailto:') &&
+            !url.startsWith('/');
+          const expectedHref = isSchemeless ? `http://${url}` : url;
+
+          assert.equal(a.getAttribute('href'), expectedHref);
+        } else {
+          assert.isUndefined(a);
+        }
       };
 
       await checkLinking('http://www.google.com');
@@ -759,6 +807,18 @@
       await checkLinking(
         'https://google.com/traces/list?project=gerrit&tid=123'
       );
+
+      await checkLinking('www.google.com/path');
+      await checkLinking('www.google-foo.com/path');
+      await checkLinking('google.co.uk/path?q=1#frag');
+
+      // Do not linkify URLs without `/`.
+      await checkLinking('google.com', false);
+      await checkLinking('com.google.gerrit.server.Event', false);
+
+      // Do not linkify URLs without a recognized TLD.
+      await checkLinking('google.foogle/path', false);
+      await checkLinking('google.com.blah/path', false);
     });
 
     suite('user suggest fix', () => {
diff --git a/polygerrit-ui/app/elements/shared/gr-shell-command/gr-shell-command_test.ts b/polygerrit-ui/app/elements/shared/gr-shell-command/gr-shell-command_test.ts
index b2fed78..c766c26 100644
--- a/polygerrit-ui/app/elements/shared/gr-shell-command/gr-shell-command_test.ts
+++ b/polygerrit-ui/app/elements/shared/gr-shell-command/gr-shell-command_test.ts
@@ -38,7 +38,7 @@
 
   test('focusOnCopy', async () => {
     const focusStub = sinon.stub(
-      queryAndAssert<GrCopyClipboard>(element, 'gr-copy-clipboard')!,
+      queryAndAssert<GrCopyClipboard>(element, 'gr-copy-clipboard'),
       'focusOnCopy'
     );
     await element.focusOnCopy();
diff --git a/polygerrit-ui/app/elements/shared/gr-suggestion-diff-preview/gr-suggestion-diff-preview.ts b/polygerrit-ui/app/elements/shared/gr-suggestion-diff-preview/gr-suggestion-diff-preview.ts
index 6d5172eb..c451bc2 100644
--- a/polygerrit-ui/app/elements/shared/gr-suggestion-diff-preview/gr-suggestion-diff-preview.ts
+++ b/polygerrit-ui/app/elements/shared/gr-suggestion-diff-preview/gr-suggestion-diff-preview.ts
@@ -34,6 +34,7 @@
 import {createChangeUrl} from '../../../models/views/change';
 import {getFileExtension} from '../../../utils/file-util';
 import {throwingErrorCallback} from '../gr-rest-api-interface/gr-rest-apis/gr-rest-api-helper';
+import {ReportSource} from '../../../services/suggestions/suggestions-service';
 
 export interface PreviewLoadedDetail {
   previewLoadedFor?: FixSuggestionInfo;
@@ -314,7 +315,13 @@
         })
       );
       fire(this, 'reload-diff', {path: fixSuggestion.replacements[0].path});
-      fire(this, 'apply-user-suggestion', {fixSuggestion});
+      fire(this, 'apply-user-suggestion', {
+        fixSuggestion: fixSuggestion.description.includes(
+          ReportSource.GET_AI_FIX_FOR_COMMENT
+        )
+          ? fixSuggestion
+          : undefined,
+      });
     }
   }
 
diff --git a/polygerrit-ui/app/elements/shared/gr-tooltip/gr-tooltip_test.ts b/polygerrit-ui/app/elements/shared/gr-tooltip/gr-tooltip_test.ts
index 265ffb7..03daa81 100644
--- a/polygerrit-ui/app/elements/shared/gr-tooltip/gr-tooltip_test.ts
+++ b/polygerrit-ui/app/elements/shared/gr-tooltip/gr-tooltip_test.ts
@@ -44,21 +44,21 @@
 
   test('the correct arrow is displayed', async () => {
     assert.equal(
-      getComputedStyle(queryAndAssert(element, '.arrowPositionBelow')!).display,
+      getComputedStyle(queryAndAssert(element, '.arrowPositionBelow')).display,
       'none'
     );
     assert.notEqual(
-      getComputedStyle(queryAndAssert(element, '.arrowPositionAbove')!).display,
+      getComputedStyle(queryAndAssert(element, '.arrowPositionAbove')).display,
       'none'
     );
     element.positionBelow = true;
     await element.updateComplete;
     assert.notEqual(
-      getComputedStyle(queryAndAssert(element, '.arrowPositionBelow')!).display,
+      getComputedStyle(queryAndAssert(element, '.arrowPositionBelow')).display,
       'none'
     );
     assert.equal(
-      getComputedStyle(queryAndAssert(element, '.arrowPositionAbove')!).display,
+      getComputedStyle(queryAndAssert(element, '.arrowPositionAbove')).display,
       'none'
     );
   });
diff --git a/polygerrit-ui/app/models/change/change-model.ts b/polygerrit-ui/app/models/change/change-model.ts
index bd42baf..6febeff 100644
--- a/polygerrit-ui/app/models/change/change-model.ts
+++ b/polygerrit-ui/app/models/change/change-model.ts
@@ -18,6 +18,7 @@
   RevisionInfo,
   ListChangesOption,
   ChangeViewChangeInfo,
+  FileInfo,
 } from '../../types/common';
 import {ChangeStatus, DefaultBase} from '../../constants/constants';
 import {combineLatest, from, Observable, forkJoin, of} from 'rxjs';
@@ -35,7 +36,12 @@
   findEdit,
   sortRevisions,
 } from '../../utils/patch-set-util';
-import {isDefined, LoadingStatus, ParsedChangeInfo} from '../../types/types';
+import {
+  EditRevisionInfo,
+  isDefined,
+  LoadingStatus,
+  ParsedChangeInfo,
+} from '../../types/types';
 import {fireAlert, fireTitleChange} from '../../utils/event-util';
 import {RestApiService} from '../../services/gr-rest-api/gr-rest-api';
 import {select} from '../../utils/observable-util';
@@ -43,7 +49,11 @@
 import {Model} from '../base/model';
 import {UserModel} from '../user/user-model';
 import {define} from '../dependency';
-import {isOwner, listChangesOptionsToHex} from '../../utils/change-util';
+import {
+  isOwner,
+  isUploader,
+  listChangesOptionsToHex,
+} from '../../utils/change-util';
 import {
   ChangeChildView,
   ChangeViewModel,
@@ -81,6 +91,101 @@
   mergeable?: boolean;
 }
 
+export enum RevisionFileUpdateStatus {
+  // Indicates request error.
+  UNKNOWN = 'UNKNOWN',
+  // File is identical to previous patchset
+  SAME = 'SAME',
+  // File has been changed in comparison to previous patchset.
+  MODIFIED = 'MODIFIED',
+}
+
+export type RevisionUpdatedFiles = {
+  [revisionId: string]: {[filename: string]: RevisionFileUpdateStatus};
+};
+
+/**
+ * Calculates whether the file is modified in relation to the previous patchset.
+ *
+ * The comparison is done based on SHA-1 of file contents.
+ */
+function computeRevisionFileUpdateStatus(
+  filename: string,
+  info: FileInfo | undefined,
+  prevRevId: string | undefined,
+  fileInfos: {[revId: string]: {[filename: string]: FileInfo}}
+) {
+  // The file info is missing means it's not changed vs. patchset base.
+  if (!info) {
+    if (!prevRevId) {
+      return RevisionFileUpdateStatus.SAME;
+    } else {
+      // Check if modified in previous patchset, but not in current.
+      return filename in fileInfos[prevRevId]
+        ? RevisionFileUpdateStatus.MODIFIED
+        : RevisionFileUpdateStatus.SAME;
+    }
+  }
+
+  if (!prevRevId || !(filename in fileInfos[prevRevId])) {
+    return RevisionFileUpdateStatus.MODIFIED;
+  }
+
+  const prevSha = fileInfos[prevRevId][filename].new_sha;
+  if (!!info.new_sha && !!prevSha) {
+    return info.new_sha === prevSha
+      ? RevisionFileUpdateStatus.SAME
+      : RevisionFileUpdateStatus.MODIFIED;
+  }
+  return RevisionFileUpdateStatus.UNKNOWN;
+}
+
+/**
+ * For every revision and every file calculates if that file is modified when
+ * compared to the previous revision.
+ *
+ * The comparison is done based on SHA-1 of file contents.
+ *
+ * @param fileInfos for every revision contains the list FileInfo of files which
+ *   are modified compared to the revision's parent.
+ */
+export function computeRevisionUpdatedFiles(
+  change: ParsedChangeInfo | undefined,
+  fileInfos: {[revId: string]: {[filename: string]: FileInfo}} | undefined
+): RevisionUpdatedFiles | undefined {
+  if (!change || !fileInfos) {
+    // We set change to undefined when user navigates away from change
+    // page. So we should reset state to undefined in this case.
+    return undefined;
+  }
+  const patchsetToRevision: {[ps: number]: string} = {};
+  const revisionToPatchset: {[revId: string]: number} = {};
+  const allFiles = new Set<string>();
+  for (const [revId, rev] of Object.entries<RevisionInfo | EditRevisionInfo>(
+    change.revisions
+  )) {
+    revisionToPatchset[revId] = rev._number as number;
+    patchsetToRevision[rev._number as number] = revId;
+    Object.keys(fileInfos[revId] ?? {}).forEach(x => allFiles.add(x));
+  }
+  const revisionUpdatedFiles: RevisionUpdatedFiles = {};
+  for (const [revId, files] of Object.entries(fileInfos)) {
+    revisionUpdatedFiles[revId] = {};
+    const ps = revisionToPatchset[revId];
+    const prevRevId = ps === 1 ? undefined : patchsetToRevision[ps - 1];
+    for (const filename of allFiles) {
+      const info = files[filename];
+      revisionUpdatedFiles[revId][filename] = computeRevisionFileUpdateStatus(
+        filename,
+        info,
+        prevRevId,
+        fileInfos
+      );
+    }
+  }
+  return revisionUpdatedFiles;
+}
+
 /**
  * `change.revisions` is a dictionary mapping the revision sha to RevisionInfo,
  * but the info object itself does not contain the sha, which is a problem when
@@ -273,6 +378,28 @@
   );
 
   /**
+   * For every filename F and every revision R (corresponding to patchset P),
+   * stores whether the file is modified in relation to patchset P - 1 (or base
+   * if P = 1).
+   */
+  public readonly revisionUpdatedFiles$: Observable<
+    RevisionUpdatedFiles | undefined
+  > = select(
+    this.change$.pipe(
+      switchMap(change => {
+        if (!change) {
+          return of([change, undefined]);
+        }
+        return forkJoin([
+          Promise.resolve(change),
+          this.restApiService.getAllRevisionFiles(change._number),
+        ]);
+      })
+    ),
+    ([change, fileInfos]) => computeRevisionUpdatedFiles(change, fileInfos)
+  );
+
+  /**
    * Emits the current patchset number. If the route does not define the current
    * patchset num, then this selector waits for the change to be defined and
    * returns the number of the latest patchset.
@@ -316,6 +443,8 @@
 
   public readonly isOwner$: Observable<boolean>;
 
+  public readonly isUploader$: Observable<boolean>;
+
   public readonly messages$;
 
   public readonly revertingChangeIds$;
@@ -386,6 +515,10 @@
       combineLatest([this.change$, this.userModel.account$]),
       ([change, account]) => isOwner(change, account)
     );
+    this.isUploader$ = select(
+      combineLatest([this.change$, this.userModel.account$]),
+      ([change, account]) => isUploader(change, account)
+    );
     this.messages$ = select(this.change$, change => change?.messages);
     this.revertingChangeIds$ = select(this.messages$, messages =>
       getRevertCreatedChangeIds(messages ?? [])
diff --git a/polygerrit-ui/app/models/change/change-model_test.ts b/polygerrit-ui/app/models/change/change-model_test.ts
index 29113bc..854ad50 100644
--- a/polygerrit-ui/app/models/change/change-model_test.ts
+++ b/polygerrit-ui/app/models/change/change-model_test.ts
@@ -13,6 +13,7 @@
   createChangeMessageInfo,
   createChangeViewState,
   createEditInfo,
+  createFileInfo,
   createMergeable,
   createParsedChange,
   createRevision,
@@ -40,6 +41,8 @@
 import {getAppContext} from '../../services/app-context';
 import {
   ChangeState,
+  computeRevisionUpdatedFiles,
+  RevisionFileUpdateStatus,
   updateChangeWithEdit,
   updateRevisionsWithCommitShas,
 } from './change-model';
@@ -99,6 +102,122 @@
   });
 });
 
+suite('computeRevisionUpdatedFiles() tests', () => {
+  test('undefined change', async () => {
+    assert.isUndefined(updateChangeWithEdit());
+  });
+
+  test('calculate status for all files and revisions', async () => {
+    const change = {
+      ...createChange(),
+      revisions: {
+        rev1: createRevision(1),
+        rev2: createRevision(2),
+        rev3: createRevision(3),
+      },
+      current_revision: 'rev3' as CommitId,
+    };
+    const fileInfos = {
+      rev1: {
+        'a.txt': {
+          ...createFileInfo('a.txt'),
+          old_sha: 'sha00',
+          new_sha: 'sha01',
+        },
+        'c.txt': {
+          ...createFileInfo('c.txt'),
+          old_sha: 'sha20',
+          new_sha: 'sha21',
+        },
+      },
+      rev2: {
+        'a.txt': {
+          ...createFileInfo('a.txt'),
+          old_sha: 'sha00',
+          new_sha: 'sha01',
+        },
+        'b.txt': {
+          ...createFileInfo('b.txt'),
+          old_sha: 'sha10',
+          new_sha: 'sha11',
+        },
+      },
+      rev3: {
+        'a.txt': {
+          ...createFileInfo('a.txt'),
+          old_sha: 'sha00',
+          new_sha: 'sha02',
+        },
+        'b.txt': {
+          ...createFileInfo('b.txt'),
+          old_sha: 'sha10',
+          new_sha: 'sha11',
+        },
+        'c.txt': {
+          ...createFileInfo('c.txt'),
+          old_sha: 'sha20',
+          new_sha: 'sha21',
+        },
+      },
+    };
+    const result = computeRevisionUpdatedFiles(change, fileInfos);
+    assert.deepEqual(result, {
+      rev1: {
+        'a.txt': RevisionFileUpdateStatus.MODIFIED,
+        'b.txt': RevisionFileUpdateStatus.SAME,
+        'c.txt': RevisionFileUpdateStatus.MODIFIED,
+      },
+      rev2: {
+        'a.txt': RevisionFileUpdateStatus.SAME,
+        'b.txt': RevisionFileUpdateStatus.MODIFIED,
+        'c.txt': RevisionFileUpdateStatus.MODIFIED,
+      },
+      rev3: {
+        'a.txt': RevisionFileUpdateStatus.MODIFIED,
+        'b.txt': RevisionFileUpdateStatus.SAME,
+        'c.txt': RevisionFileUpdateStatus.MODIFIED,
+      },
+    });
+  });
+
+  test('no known sha, status unknown', async () => {
+    const change = {
+      ...createChange(),
+      revisions: {
+        rev1: createRevision(1),
+        rev2: createRevision(2),
+      },
+      current_revision: 'rev2' as CommitId,
+    };
+    const fileInfos = {
+      rev1: {
+        'a.txt': {
+          ...createFileInfo('a.txt'),
+          old_sha: undefined,
+          new_sha: undefined,
+        },
+      },
+      rev2: {
+        'a.txt': {
+          ...createFileInfo('a.txt'),
+          old_sha: 'sha00',
+          new_sha: 'sha01',
+        },
+      },
+    };
+    const result = computeRevisionUpdatedFiles(change, fileInfos);
+    assert.deepEqual(result, {
+      rev1: {
+        // Presence in fileInfos indicate change against BASE
+        'a.txt': RevisionFileUpdateStatus.MODIFIED,
+      },
+      rev2: {
+        'a.txt': RevisionFileUpdateStatus.UNKNOWN,
+      },
+    });
+  });
+});
+
 suite('change model tests', () => {
   let changeViewModel: ChangeViewModel;
   let changeModel: ChangeModel;
diff --git a/polygerrit-ui/app/models/checks/checks-model_test.ts b/polygerrit-ui/app/models/checks/checks-model_test.ts
index fdaacd2..8a0f8e3 100644
--- a/polygerrit-ui/app/models/checks/checks-model_test.ts
+++ b/polygerrit-ui/app/models/checks/checks-model_test.ts
@@ -281,7 +281,7 @@
     );
     assert.equal(
       current.runs[0].results![0].summary,
-      RUNS[0]!.results![0].summary
+      RUNS[0].results![0].summary
     );
     const result = RUNS[0].results![0];
     const updatedResult = {...result, summary: 'new'};
diff --git a/polygerrit-ui/app/models/comments/comments-model.ts b/polygerrit-ui/app/models/comments/comments-model.ts
index f11e352..2a59c27 100644
--- a/polygerrit-ui/app/models/comments/comments-model.ts
+++ b/polygerrit-ui/app/models/comments/comments-model.ts
@@ -9,8 +9,6 @@
   NumericChangeId,
   RevisionId,
   UrlEncodedCommentId,
-  RobotCommentInfo,
-  PathToRobotCommentsInfoMap,
   AccountInfo,
   DraftInfo,
   Comment,
@@ -74,8 +72,6 @@
 export interface CommentState {
   /** undefined means 'still loading' */
   comments?: {[path: string]: CommentInfo[]};
-  /** undefined means 'still loading' */
-  robotComments?: {[path: string]: RobotCommentInfo[]};
   // All drafts are DraftInfo objects and have `state` state set.
   /** undefined means 'still loading' */
   drafts?: {[path: string]: DraftInfo[]};
@@ -106,7 +102,6 @@
 
 const initialState: CommentState = {
   comments: undefined,
-  robotComments: undefined,
   drafts: undefined,
   portedComments: undefined,
   portedDrafts: undefined,
@@ -168,19 +163,6 @@
 }
 
 // Private but used in tests.
-export function setRobotComments(
-  state: CommentState,
-  robotComments?: {
-    [path: string]: RobotCommentInfo[];
-  }
-): CommentState {
-  if (deepEqual(robotComments, state.robotComments)) return state;
-  const nextState = {...state};
-  nextState.robotComments = addPath(robotComments) || {};
-  return nextState;
-}
-
-// Private but used in tests.
 export function setDrafts(
   state: CommentState,
   drafts?: {[path: string]: DraftInfo[]}
@@ -291,9 +273,7 @@
   public readonly commentsLoading$ = select(
     this.state$,
     commentState =>
-      commentState.comments === undefined ||
-      commentState.robotComments === undefined ||
-      commentState.drafts === undefined
+      commentState.comments === undefined || commentState.drafts === undefined
   );
 
   public readonly comments$ = select(
@@ -301,16 +281,6 @@
     commentState => commentState.comments
   );
 
-  public readonly robotComments$ = select(
-    this.state$,
-    commentState => commentState.robotComments
-  );
-
-  public readonly robotCommentCount$ = select(
-    this.robotComments$,
-    robotComments => Object.values(robotComments ?? {}).flat().length
-  );
-
   public readonly drafts$ = select(
     this.state$,
     commentState => commentState.drafts
@@ -416,7 +386,6 @@
     commentState =>
       new ChangeComments(
         commentState.comments,
-        commentState.robotComments,
         commentState.drafts,
         commentState.portedComments,
         commentState.portedDrafts
@@ -534,16 +503,13 @@
             if (!changeNum) return of([undefined, undefined, undefined]);
             return forkJoin([
               this.restApiService.getDiffComments(changeNum),
-              this.restApiService.getDiffRobotComments(changeNum),
               this.restApiService.getDiffDrafts(changeNum),
             ]);
           })
         )
-        .subscribe(([comments, robotComments, drafts]) => {
-          this.reportRobotCommentStats(robotComments);
+        .subscribe(([comments, drafts]) => {
           this.modifyState(s => {
             s = setComments(s, comments);
-            s = setRobotComments(s, robotComments);
             return setDrafts(s, drafts);
           });
         })
@@ -598,34 +564,6 @@
     this.setState(reducer({...this.getState()}));
   }
 
-  private reportRobotCommentStats(obj?: PathToRobotCommentsInfoMap) {
-    if (!obj) return;
-    const comments = Object.values(obj).flat();
-    if (comments.length === 0) return;
-    const ids = comments.map(c => c.robot_id);
-    const latestPatchset = comments.reduce(
-      (latestPs, comment) =>
-        Math.max(latestPs, (comment?.patch_set as number) ?? 0),
-      0
-    );
-    const commentsLatest = comments.filter(c => c.patch_set === latestPatchset);
-    const commentsFixes = comments
-      .map(c => c.fix_suggestions?.length ?? 0)
-      .filter(l => l > 0);
-    const details = {
-      firstId: ids[0],
-      ids: [...new Set(ids)],
-      count: comments.length,
-      countLatest: commentsLatest.length,
-      countFixes: commentsFixes.length,
-    };
-    this.reporting.reportInteraction(
-      Interaction.ROBOT_COMMENTS_STATS,
-      details,
-      {deduping: Deduping.EVENT_ONCE_PER_CHANGE}
-    );
-  }
-
   private reportCommentStats(
     obj?: {[path: string]: CommentInfo[]},
     latestPatchset?: PatchSetNumber
diff --git a/polygerrit-ui/app/models/comments/comments-model_test.ts b/polygerrit-ui/app/models/comments/comments-model_test.ts
index b3dbc08..3b516eb 100644
--- a/polygerrit-ui/app/models/comments/comments-model_test.ts
+++ b/polygerrit-ui/app/models/comments/comments-model_test.ts
@@ -39,7 +39,6 @@
     draft.id = '1' as UrlEncodedCommentId;
     const state = {
       comments: {},
-      robotComments: {},
       drafts: {
         [draft.path!]: [draft],
       },
@@ -50,7 +49,6 @@
     const output = deleteDraft(state, draft);
     assert.deepEqual(output, {
       comments: {},
-      robotComments: {},
       drafts: {
         'abc.txt': [],
       },
@@ -83,9 +81,6 @@
     const diffCommentsSpy = stubRestApi('getDiffComments').returns(
       Promise.resolve({'foo.c': [createComment()]})
     );
-    const diffRobotCommentsSpy = stubRestApi('getDiffRobotComments').returns(
-      Promise.resolve({})
-    );
     const diffDraftsSpy = stubRestApi('getDiffDrafts').returns(
       Promise.resolve({})
     );
@@ -106,7 +101,6 @@
     testResolver(changeModelToken).updateStateChange(createParsedChange());
 
     await waitUntilCalled(diffCommentsSpy, 'diffCommentsSpy');
-    await waitUntilCalled(diffRobotCommentsSpy, 'diffRobotCommentsSpy');
     await waitUntilCalled(diffDraftsSpy, 'diffDraftsSpy');
     await waitUntilCalled(portedCommentsSpy, 'portedCommentsSpy');
     await waitUntilCalled(portedDraftsSpy, 'portedDraftsSpy');
diff --git a/polygerrit-ui/app/models/config/config-model.ts b/polygerrit-ui/app/models/config/config-model.ts
index 1636ad4..dd7828b6 100644
--- a/polygerrit-ui/app/models/config/config-model.ts
+++ b/polygerrit-ui/app/models/config/config-model.ts
@@ -57,11 +57,6 @@
     serverConfig => serverConfig?.change?.mergeability_computation_behavior
   );
 
-  public enableRobotComments$ = select(
-    this.serverConfig$,
-    serverConfig => !!serverConfig?.change?.enable_robot_comments
-  );
-
   public docsBaseUrl$ = select(
     this.serverConfig$.pipe(
       switchMap(serverConfig => from(this.getDocsBaseUrl(serverConfig)))
diff --git a/polygerrit-ui/app/services/gr-rest-api/gr-rest-api-impl.ts b/polygerrit-ui/app/services/gr-rest-api/gr-rest-api-impl.ts
index 4601bd2..16f05be 100644
--- a/polygerrit-ui/app/services/gr-rest-api/gr-rest-api-impl.ts
+++ b/polygerrit-ui/app/services/gr-rest-api/gr-rest-api-impl.ts
@@ -54,7 +54,6 @@
   EncodedGroupId,
   FileNameToFileInfoMap,
   FilePathToDiffInfoMap,
-  FixId,
   GitRef,
   GpgKeyId,
   GpgKeyInfo,
@@ -78,7 +77,6 @@
   Password,
   PatchRange,
   PatchSetNum,
-  PathToRobotCommentsInfoMap,
   PluginInfo,
   PreferencesInfo,
   PreferencesInput,
@@ -107,17 +105,14 @@
   ListChangesOption,
   ReviewResult,
   SubmitRequirementInfo,
+  SubmitRequirementInput,
 } from '../../types/common';
 import {
   DiffInfo,
   DiffPreferencesInfo,
   IgnoreWhitespaceType,
 } from '../../types/diff';
-import {
-  GetDiffCommentsOutput,
-  GetDiffRobotCommentsOutput,
-  RestApiService,
-} from './gr-rest-api';
+import {GetDiffCommentsOutput, RestApiService} from './gr-rest-api';
 import {
   CommentSide,
   createDefaultDiffPrefs,
@@ -135,7 +130,7 @@
 import {escapeAndWrapSearchOperatorValue} from '../../utils/string-util';
 import {FlagsService, KnownExperimentId} from '../flags/flags';
 import {RetryScheduler} from '../scheduler/retry-scheduler';
-import {FixReplacementInfo} from '../../api/rest-api';
+import {FileInfo, FixReplacementInfo} from '../../api/rest-api';
 import {
   FetchParams,
   FetchPromisesCache,
@@ -1333,6 +1328,31 @@
     );
   }
 
+  async getAllRevisionFiles(
+    changeNum?: NumericChangeId
+  ): Promise<
+    {[revisionId: string]: {[filename: string]: FileInfo}} | undefined
+  > {
+    if (!changeNum) return;
+    const optionsHex = listChangesOptionsToHex(
+      ListChangesOption.ALL_REVISIONS,
+      ListChangesOption.ALL_FILES
+    );
+
+    const change = await this.getChange(changeNum, undefined, optionsHex);
+    if (!change?.revisions) {
+      return undefined;
+    }
+    const result: {[revisionId: string]: {[filename: string]: FileInfo}} = {};
+    for (const revId in change.revisions) {
+      if (!change.revisions[revId]?.files) {
+        continue;
+      }
+      result[revId] = change.revisions[revId].files!;
+    }
+    return result;
+  }
+
   private getListChangesOptionsHex() {
     if (
       window.DEFAULT_DETAIL_HEXES &&
@@ -1785,6 +1805,40 @@
     }) as Promise<SubmitRequirementInfo[] | undefined>;
   }
 
+  createSubmitRequirement(
+    repoName: RepoName,
+    input: SubmitRequirementInput,
+    errFn?: ErrorCallback
+  ): Promise<SubmitRequirementInfo | undefined> {
+    return this._restApiHelper.fetchJSON({
+      url: `/projects/${encodeURIComponent(
+        repoName
+      )}/submit_requirements/${encodeURIComponent(input.name)}`,
+      fetchOptions: getFetchOptions({
+        method: HttpMethod.PUT,
+        body: input,
+      }),
+      errFn,
+      anonymizedUrl: '/projects/*/submit_requirements/*',
+    }) as Promise<SubmitRequirementInfo | undefined>;
+  }
+
+  deleteSubmitRequirement(
+    repoName: RepoName,
+    submitRequirementName: string,
+    errFn?: ErrorCallback
+  ): Promise<Response> {
+    return this._restApiHelper.fetch({
+      fetchOptions: {method: HttpMethod.DELETE},
+      url: `/projects/${encodeURIComponent(
+        repoName
+      )}/submit_requirements/${encodeURIComponent(submitRequirementName)}`,
+      errFn,
+      anonymizedUrl: '/projects/*/submit_requirements/*',
+      reportServerError: true,
+    });
+  }
+
   getRepoAccessRights(
     repoName: RepoName,
     errFn?: ErrorCallback
@@ -2401,19 +2455,6 @@
     }) as Promise<FilePathToDiffInfoMap | undefined>;
   }
 
-  async getRobotCommentFixPreview(
-    changeNum: NumericChangeId,
-    patchNum: PatchSetNum,
-    fixId: FixId
-  ): Promise<FilePathToDiffInfoMap | undefined> {
-    const url = await this._changeBaseURL(changeNum, patchNum);
-    const endpoint = `/fixes/${encodeURIComponent(fixId)}/preview`;
-    return this._restApiHelper.fetchJSON({
-      url: `${url}${endpoint}`,
-      anonymizedUrl: `${ANONYMIZED_REVISION_BASE_URL}${endpoint}`,
-    }) as Promise<FilePathToDiffInfoMap | undefined>;
-  }
-
   async applyFixSuggestion(
     changeNum: NumericChangeId,
     fixPatchNum: PatchSetNum,
@@ -2447,21 +2488,6 @@
     });
   }
 
-  async applyRobotFixSuggestion(
-    changeNum: NumericChangeId,
-    patchNum: PatchSetNum,
-    fixId: string
-  ): Promise<Response> {
-    const url = await this._changeBaseURL(changeNum, patchNum);
-    const endpoint = `/fixes/${encodeURIComponent(fixId)}/apply`;
-    return this._restApiHelper.fetch({
-      fetchOptions: {method: HttpMethod.POST},
-      url: `${url}${endpoint}`,
-      anonymizedUrl: `${ANONYMIZED_REVISION_BASE_URL}${endpoint}`,
-      reportServerError: true,
-    });
-  }
-
   async publishChangeEdit(changeNum: NumericChangeId) {
     const url = await this._changeBaseURL(changeNum);
     return this._restApiHelper.fetch({
@@ -2633,37 +2659,6 @@
     );
   }
 
-  getDiffRobotComments(
-    changeNum: NumericChangeId
-  ): Promise<PathToRobotCommentsInfoMap | undefined>;
-
-  getDiffRobotComments(
-    changeNum: NumericChangeId,
-    basePatchNum: BasePatchSetNum,
-    patchNum: PatchSetNum,
-    path: string
-  ): Promise<GetDiffRobotCommentsOutput>;
-
-  getDiffRobotComments(
-    changeNum: NumericChangeId,
-    basePatchNum?: BasePatchSetNum,
-    patchNum?: PatchSetNum,
-    path?: string
-  ) {
-    if (!basePatchNum && !patchNum && !path) {
-      return this._getDiffComments(changeNum, '/robotcomments');
-    }
-
-    return this._getDiffComments(
-      changeNum,
-      '/robotcomments',
-      undefined,
-      basePatchNum,
-      patchNum,
-      path
-    );
-  }
-
   async getDiffDrafts(
     changeNum: NumericChangeId
   ): Promise<{[path: string]: DraftInfo[]} | undefined> {
@@ -2707,11 +2702,6 @@
 
   _getDiffComments(
     changeNum: NumericChangeId,
-    endpoint: '/robotcomments'
-  ): Promise<PathToRobotCommentsInfoMap | undefined>;
-
-  _getDiffComments(
-    changeNum: NumericChangeId,
     endpoint: '/comments' | '/drafts',
     params?: FetchParams,
     basePatchNum?: BasePatchSetNum,
@@ -2719,15 +2709,6 @@
     path?: string
   ): Promise<GetDiffCommentsOutput>;
 
-  _getDiffComments(
-    changeNum: NumericChangeId,
-    endpoint: '/robotcomments',
-    params?: FetchParams,
-    basePatchNum?: BasePatchSetNum,
-    patchNum?: PatchSetNum,
-    path?: string
-  ): Promise<GetDiffRobotCommentsOutput>;
-
   /**
    * Fetches the comments for a given patchNum.
    * Helper function to make promises more legible.
@@ -2740,11 +2721,7 @@
     patchNum?: PatchSetNum,
     path?: string
   ): Promise<
-    | GetDiffCommentsOutput
-    | GetDiffRobotCommentsOutput
-    | {[path: string]: CommentInfo[]}
-    | PathToRobotCommentsInfoMap
-    | undefined
+    GetDiffCommentsOutput | {[path: string]: CommentInfo[]} | undefined
   > {
     // We don't want to add accept header, since preloading of comments is
     // working only without accept header.
@@ -2759,9 +2736,7 @@
           },
           noAcceptHeader
         )
-      ) as Promise<
-        {[path: string]: CommentInfo[]} | PathToRobotCommentsInfoMap | undefined
-      >;
+      ) as Promise<{[path: string]: CommentInfo[]} | undefined>;
 
     if (!basePatchNum && !patchNum && !path) {
       return fetchComments();
@@ -3329,7 +3304,7 @@
 
   getChange(
     changeNum: ChangeId | NumericChangeId,
-    errFn: ErrorCallback,
+    errFn?: ErrorCallback,
     optionsHex?: string
   ): Promise<ChangeInfo | undefined> {
     if (changeNum in this._projectLookup) {
diff --git a/polygerrit-ui/app/services/gr-rest-api/gr-rest-api-impl_test.ts b/polygerrit-ui/app/services/gr-rest-api/gr-rest-api-impl_test.ts
index bafb397..7a1ecfe 100644
--- a/polygerrit-ui/app/services/gr-rest-api/gr-rest-api-impl_test.ts
+++ b/polygerrit-ui/app/services/gr-rest-api/gr-rest-api-impl_test.ts
@@ -50,7 +50,6 @@
   PatchSetNum,
   RepoName,
   RevisionPatchSetNum,
-  RobotCommentInfo,
   Timestamp,
   UrlEncodedCommentId,
 } from '../../types/common';
@@ -128,13 +127,13 @@
       message: 'how did this work in the first place?',
       path: 'sieve.go',
       updated: '2017-02-03 22:33:28.000000000' as Timestamp,
-    } as RobotCommentInfo);
+    } as CommentInfo);
     assert.equal(obj.comments.length, 1);
     assert.deepEqual(obj.comments[0], {
       message: 'this isn’t quite right',
       path: 'sieve.go',
       updated: '2017-02-03 22:32:28.000000000' as Timestamp,
-    } as RobotCommentInfo);
+    } as CommentInfo);
   });
 
   test('_setRange', () => {
@@ -296,18 +295,18 @@
       message: 'this isn’t quite right',
       path: 'sieve.go',
       updated: '2017-02-03 22:32:28.000000000' as Timestamp,
-    } as RobotCommentInfo);
+    } as CommentInfo);
     assert.equal(obj.comments.length, 2);
     assert.deepEqual(obj.comments[0], {
       message: 'What on earth are you thinking, here?',
       path: 'sieve.go',
       updated: '2017-02-03 22:32:28.000000000' as Timestamp,
-    } as RobotCommentInfo);
+    } as CommentInfo);
     assert.deepEqual(obj.comments[1], {
       message: '¯\\_(ツ)_/¯',
       path: 'sieve.go',
       updated: '2017-02-04 22:33:28.000000000' as Timestamp,
-    } as RobotCommentInfo);
+    } as CommentInfo);
   });
 
   test('legacy n,z key in change url is replaced', async () => {
@@ -627,9 +626,11 @@
       {username: 'john'}
     );
     assert.deepEqual(
-      (element._cache.get(
-        '/accounts/self/detail'
-      ) as unknown as AccountDetailInfo)!.username,
+      (
+        element._cache.get(
+          '/accounts/self/detail'
+        ) as unknown as AccountDetailInfo
+      ).username,
       'john'
     );
   });
@@ -649,9 +650,11 @@
       HttpMethod.PUT
     );
     assert.isUndefined(
-      (element._cache.get(
-        '/accounts/self/detail'
-      ) as unknown as AccountDetailInfo)!.username
+      (
+        element._cache.get(
+          '/accounts/self/detail'
+        ) as unknown as AccountDetailInfo
+      ).username
     );
   });
 
@@ -675,9 +678,11 @@
       {display_name: 'john'}
     );
     assert.deepEqual(
-      (element._cache.get(
-        '/accounts/self/detail'
-      ) as unknown as AccountDetailInfo)!.display_name,
+      (
+        element._cache.get(
+          '/accounts/self/detail'
+        ) as unknown as AccountDetailInfo
+      ).display_name,
       'john'
     );
   });
@@ -697,9 +702,11 @@
       HttpMethod.PUT
     );
     assert.isUndefined(
-      (element._cache.get(
-        '/accounts/self/detail'
-      ) as unknown as AccountDetailInfo)!.display_name
+      (
+        element._cache.get(
+          '/accounts/self/detail'
+        ) as unknown as AccountDetailInfo
+      ).display_name
     );
   });
 
@@ -723,9 +730,11 @@
       {name: 'john'}
     );
     assert.deepEqual(
-      (element._cache.get(
-        '/accounts/self/detail'
-      ) as unknown as AccountDetailInfo)!.name,
+      (
+        element._cache.get(
+          '/accounts/self/detail'
+        ) as unknown as AccountDetailInfo
+      ).name,
       'john'
     );
   });
@@ -745,9 +754,11 @@
       HttpMethod.PUT
     );
     assert.isUndefined(
-      (element._cache.get(
-        '/accounts/self/detail'
-      ) as unknown as AccountDetailInfo)!.name
+      (
+        element._cache.get(
+          '/accounts/self/detail'
+        ) as unknown as AccountDetailInfo
+      ).name
     );
   });
 
@@ -771,9 +782,11 @@
       {status: 'OOO'}
     );
     assert.deepEqual(
-      (element._cache.get(
-        '/accounts/self/detail'
-      ) as unknown as AccountDetailInfo)!.status,
+      (
+        element._cache.get(
+          '/accounts/self/detail'
+        ) as unknown as AccountDetailInfo
+      ).status,
       'OOO'
     );
   });
@@ -793,9 +806,11 @@
       HttpMethod.PUT
     );
     assert.isUndefined(
-      (element._cache.get(
-        '/accounts/self/detail'
-      ) as unknown as AccountDetailInfo)!.status
+      (
+        element._cache.get(
+          '/accounts/self/detail'
+        ) as unknown as AccountDetailInfo
+      ).status
     );
   });
 
@@ -1604,7 +1619,7 @@
     });
     assert.isTrue(fetchStub.calledOnce);
     assert.sameDeepMembers(
-      JSON.parse(fetchStub.lastCall.args[0].fetchOptions?.body as string).add!,
+      JSON.parse(fetchStub.lastCall.args[0].fetchOptions?.body as string).add,
       ['foo-bar']
     );
   });
diff --git a/polygerrit-ui/app/services/gr-rest-api/gr-rest-api.ts b/polygerrit-ui/app/services/gr-rest-api/gr-rest-api.ts
index ea6451a..36684cb 100644
--- a/polygerrit-ui/app/services/gr-rest-api/gr-rest-api.ts
+++ b/polygerrit-ui/app/services/gr-rest-api/gr-rest-api.ts
@@ -40,7 +40,6 @@
   EncodedGroupId,
   FileNameToFileInfoMap,
   FilePathToDiffInfoMap,
-  FixId,
   GitRef,
   GpgKeyId,
   GpgKeyInfo,
@@ -62,7 +61,6 @@
   Password,
   PatchRange,
   PatchSetNum,
-  PathToRobotCommentsInfoMap,
   PluginInfo,
   PreferencesInfo,
   PreferencesInput,
@@ -78,7 +76,6 @@
   RequestPayload,
   ReviewInput,
   RevisionId,
-  RobotCommentInfo,
   ServerInfo,
   ValidationOptionsInfo,
   SshKeyInfo,
@@ -92,6 +89,7 @@
   DraftInfo,
   ReviewResult,
   SubmitRequirementInfo,
+  SubmitRequirementInput,
 } from '../../types/common';
 import {
   DiffInfo,
@@ -100,18 +98,13 @@
 } from '../../types/diff';
 import {Finalizable, ParsedChangeInfo} from '../../types/types';
 import {ErrorCallback} from '../../api/rest';
-import {FixReplacementInfo} from '../../api/rest-api';
+import {FileInfo, FixReplacementInfo} from '../../api/rest-api';
 
 export interface GetDiffCommentsOutput {
   baseComments: CommentInfo[];
   comments: CommentInfo[];
 }
 
-export interface GetDiffRobotCommentsOutput {
-  baseComments: RobotCommentInfo[];
-  comments: RobotCommentInfo[];
-}
-
 export interface RestApiService extends Finalizable {
   getConfig(
     noCache?: boolean,
@@ -204,6 +197,16 @@
   ): Promise<ParsedChangeInfo | undefined>;
 
   /**
+   * For every revision of the change returns the list of FileInfo for files
+   * which are modified compared to revision's parent.
+   */
+  getAllRevisionFiles(
+    changeNum?: NumericChangeId
+  ): Promise<
+    {[revisionId: string]: {[filename: string]: FileInfo}} | undefined
+  >;
+
+  /**
    * Given a changeNum, gets the change.
    *
    * If the project is known for the specified changeNum uses
@@ -291,6 +294,18 @@
     errFn?: ErrorCallback
   ): Promise<SubmitRequirementInfo[] | undefined>;
 
+  createSubmitRequirement(
+    repoName: RepoName,
+    input: SubmitRequirementInput,
+    errFn?: ErrorCallback
+  ): Promise<SubmitRequirementInfo | undefined>;
+
+  deleteSubmitRequirement(
+    repoName: RepoName,
+    submitRequirementName: string,
+    errFn?: ErrorCallback
+  ): Promise<Response>;
+
   getRepoAccessRights(
     repoName: RepoName,
     errFn?: ErrorCallback
@@ -449,24 +464,6 @@
     | Promise<{[path: string]: CommentInfo[]} | undefined>
     | Promise<GetDiffCommentsOutput>;
 
-  getDiffRobotComments(
-    changeNum: NumericChangeId
-  ): Promise<PathToRobotCommentsInfoMap | undefined>;
-  getDiffRobotComments(
-    changeNum: NumericChangeId,
-    basePatchNum: PatchSetNum,
-    patchNum: PatchSetNum,
-    path: string
-  ): Promise<GetDiffRobotCommentsOutput>;
-  getDiffRobotComments(
-    changeNum: NumericChangeId,
-    basePatchNum?: BasePatchSetNum,
-    patchNum?: PatchSetNum,
-    path?: string
-  ):
-    | Promise<GetDiffRobotCommentsOutput>
-    | Promise<PathToRobotCommentsInfoMap | undefined>;
-
   /**
    * If the user is logged in, fetch the user's draft diff comments. If there
    * is no logged in user, the request is not made and the promise yields an
@@ -707,17 +704,6 @@
   awaitPendingDiffDrafts(): Promise<void>;
 
   /**
-   * Preview Stored Fix
-   * Gets the diffs of all files for a certain {fix-id} associated with apply fix.
-   * https://gerrit-review.googlesource.com/Documentation/rest-api-changes.html#preview-stored-fix
-   */
-  getRobotCommentFixPreview(
-    changeNum: NumericChangeId,
-    patchNum: PatchSetNum,
-    fixId: FixId
-  ): Promise<FilePathToDiffInfoMap | undefined>;
-
-  /**
    * Preview Provided fix
    * Gets the diffs of all files for a provided fix replacements infos
    * https://gerrit-review.googlesource.com/Documentation/rest-api-changes.html#preview-provided-fix
@@ -741,16 +727,6 @@
   ): Promise<Response>;
 
   /**
-   * Apply Stored Fix
-   * https://gerrit-review.googlesource.com/Documentation/rest-api-changes.html#apply-stored-fix
-   */
-  applyRobotFixSuggestion(
-    changeNum: NumericChangeId,
-    patchNum: PatchSetNum,
-    fixId: string
-  ): Promise<Response>;
-
-  /**
    * @param basePatchNum Negative values specify merge parent
    * index.
    * @param whitespace the ignore-whitespace level for the diff
diff --git a/polygerrit-ui/app/services/service-worker-installer.ts b/polygerrit-ui/app/services/service-worker-installer.ts
index 2bede59..a4d0732 100644
--- a/polygerrit-ui/app/services/service-worker-installer.ts
+++ b/polygerrit-ui/app/services/service-worker-installer.ts
@@ -46,12 +46,12 @@
 }
 
 export class ServiceWorkerInstaller extends Model<ServiceWorkerInstallerState> {
-  readonly initialized$: Observable<Boolean | undefined> = select(
+  readonly initialized$: Observable<boolean | undefined> = select(
     this.state$,
     state => state.initialized
   );
 
-  readonly shouldShowPrompt$: Observable<Boolean | undefined> = select(
+  readonly shouldShowPrompt$: Observable<boolean | undefined> = select(
     this.initialized$,
     _ => this.shouldShowPrompt()
   );
diff --git a/polygerrit-ui/app/styles/themes/app-theme.ts b/polygerrit-ui/app/styles/themes/app-theme.ts
index 97993c1..8f69e26 100644
--- a/polygerrit-ui/app/styles/themes/app-theme.ts
+++ b/polygerrit-ui/app/styles/themes/app-theme.ts
@@ -313,7 +313,6 @@
 
     /* comment background colors */
     --comment-background-color: var(--gray-200);
-    --robot-comment-background-color: var(--blue-50);
     --unresolved-comment-background-color: #fef7e0;
 
 
diff --git a/polygerrit-ui/app/styles/themes/dark-theme.ts b/polygerrit-ui/app/styles/themes/dark-theme.ts
index 635d246..ee43f15 100644
--- a/polygerrit-ui/app/styles/themes/dark-theme.ts
+++ b/polygerrit-ui/app/styles/themes/dark-theme.ts
@@ -136,7 +136,6 @@
 
     /* comment background colors */
     --comment-background-color: #3c3f43;
-    --robot-comment-background-color: #1e3a5f;
     --unresolved-comment-background-color: #614a19;
 
     /* Suggest edits */
diff --git a/polygerrit-ui/app/test/mocks/gr-rest-api_mock.ts b/polygerrit-ui/app/test/mocks/gr-rest-api_mock.ts
index 95f160d..2effc94 100644
--- a/polygerrit-ui/app/test/mocks/gr-rest-api_mock.ts
+++ b/polygerrit-ui/app/test/mocks/gr-rest-api_mock.ts
@@ -96,9 +96,6 @@
   applyFixSuggestion(): Promise<Response> {
     return Promise.resolve(new Response());
   },
-  applyRobotFixSuggestion(): Promise<Response> {
-    return Promise.resolve(new Response());
-  },
   awaitPendingDiffDrafts(): Promise<void> {
     return Promise.resolve();
   },
@@ -206,6 +203,9 @@
   getAccountStatus(): Promise<string | undefined> {
     return Promise.resolve('');
   },
+  getAllRevisionFiles() {
+    return Promise.resolve(undefined);
+  },
   getAvatarChangeUrl(): Promise<string | undefined> {
     return Promise.resolve('');
   },
@@ -315,11 +315,6 @@
   getDiffPreferences(): Promise<DiffPreferencesInfo | undefined> {
     return Promise.resolve(createDefaultDiffPrefs());
   },
-  getDiffRobotComments() {
-    // NOTE: This method can not be typed properly due to overloads.
-    // eslint-disable-next-line @typescript-eslint/no-explicit-any
-    return Promise.resolve({}) as any;
-  },
   getDocumentationSearches(): Promise<DocResult[] | undefined> {
     return Promise.resolve([]);
   },
@@ -397,6 +392,12 @@
   getRepoSubmitRequirements(): Promise<SubmitRequirementInfo[] | undefined> {
     return Promise.resolve([]);
   },
+  createSubmitRequirement(): Promise<SubmitRequirementInfo | undefined> {
+    return Promise.resolve(undefined);
+  },
+  deleteSubmitRequirement(): Promise<Response> {
+    return Promise.resolve(new Response());
+  },
   getRepoAccessRights(): Promise<ProjectAccessInfo | undefined> {
     return Promise.resolve(undefined);
   },
@@ -418,9 +419,6 @@
   getFixPreview(): Promise<FilePathToDiffInfoMap | undefined> {
     return Promise.resolve({});
   },
-  getRobotCommentFixPreview(): Promise<FilePathToDiffInfoMap | undefined> {
-    return Promise.resolve({});
-  },
   queryAccounts(): Promise<AccountInfo[] | undefined> {
     return Promise.resolve([]);
   },
diff --git a/polygerrit-ui/app/test/test-data-generators.ts b/polygerrit-ui/app/test/test-data-generators.ts
index 5f40cad..2fa7368 100644
--- a/polygerrit-ui/app/test/test-data-generators.ts
+++ b/polygerrit-ui/app/test/test-data-generators.ts
@@ -57,9 +57,6 @@
   Reviewers,
   RevisionInfo,
   RevisionPatchSetNum,
-  RobotCommentInfo,
-  RobotId,
-  RobotRunId,
   SchemesInfoMap,
   ServerInfo,
   SubmittedTogetherInfo,
@@ -906,36 +903,6 @@
   };
 }
 
-export function createRobotComment(
-  extra: Partial<CommentInfo> = {}
-): RobotCommentInfo {
-  return {
-    ...createComment(),
-    robot_id: 'robot-id-123' as RobotId,
-    robot_run_id: 'robot-run-id-456' as RobotRunId,
-    properties: {},
-    fix_suggestions: [
-      {
-        fix_id: 'robot-run-id-456-fix' as FixId,
-        description: 'Robot suggestion',
-        replacements: [
-          {
-            path: 'abc.txt'!,
-            range: {
-              start_line: 0,
-              start_character: 0,
-              end_line: 1,
-              end_character: 10,
-            },
-            replacement: 'replacement',
-          },
-        ],
-      },
-    ],
-    ...extra,
-  };
-}
-
 export function createChangeComments(): ChangeComments {
   const comments = {
     '/COMMIT_MSG': [
@@ -1036,7 +1003,7 @@
       },
     ],
   };
-  return new ChangeComments(comments, {}, drafts, {}, {});
+  return new ChangeComments(comments, drafts, {}, {});
 }
 
 export function createThread(
diff --git a/polygerrit-ui/app/types/common.ts b/polygerrit-ui/app/types/common.ts
index 47669f4..32b2465 100644
--- a/polygerrit-ui/app/types/common.ts
+++ b/polygerrit-ui/app/types/common.ts
@@ -238,10 +238,6 @@
  */
 export type ParsedJSON = BrandType<unknown, '_parsedJSON'>;
 
-export type RobotId = BrandType<string, '_robotId'>;
-
-export type RobotRunId = BrandType<string, '_robotRunId'>;
-
 // RevisionId '0' is the same as 'current'. However, we want to avoid '0'
 // in our code, so it is not added here as a possible value.
 export type RevisionId = 'current' | CommitId | PatchSetNum;
@@ -592,22 +588,16 @@
 }
 
 /**
- * This is what human, robot and draft comments can agree upon.
+ * This is what published and draft comments can agree upon.
  *
  * Note that `id` and `updated` must be considered optional, because we might
  * be dealing with unsaved draft comments.
  */
-export type Comment = DraftInfo | CommentInfo | RobotCommentInfo;
+export type Comment = DraftInfo | CommentInfo;
 
 // TODO: Replace the CommentMap type with just an array of paths.
 export type CommentMap = {[path: string]: boolean};
 
-export function isRobot<T extends Comment>(
-  x: T | RobotCommentInfo | undefined
-): x is RobotCommentInfo {
-  return !!x && !!(x as RobotCommentInfo).robot_id;
-}
-
 export function isDraft<T extends Comment>(
   x: T | DraftInfo | undefined
 ): x is DraftInfo {
@@ -740,6 +730,19 @@
 }
 
 /**
+ * The SubmitRequirementInput entity describes a submit requirement input.
+ * https://gerrit-review.googlesource.com/Documentation/rest-api-projects.html#submit-requirement-input
+ */
+export interface SubmitRequirementInput {
+  name: string;
+  description?: string;
+  applicability_expression?: string;
+  submittability_expression: string;
+  override_expression?: string;
+  allow_override_in_child_projects?: boolean;
+}
+
+/**
  * The ProjectAccessInfo entity contains information about the access rights for
  * a project.
  * https://gerrit-review.googlesource.com/Documentation/rest-api-access.html#project-access-info
@@ -1126,7 +1129,6 @@
   tag?: ReviewInputTag;
   labels?: LabelNameToValueMap;
   comments?: PathToCommentsInputMap;
-  robot_comments?: PathToRobotCommentsMap;
   drafts?: DraftsAction;
   notify?: NotifyType;
   notify_details?: RecipientTypeToNotifyInfoMap;
@@ -1169,30 +1171,11 @@
 
 export type LabelNameToValueMap = {[labelName: string]: number};
 export type PathToCommentsInputMap = {[path: string]: CommentInput[]};
-export type PathToRobotCommentsMap = {[path: string]: RobotCommentInput[]};
 export type RecipientTypeToNotifyInfoMap = {
   [recepientType: string]: NotifyInfo;
 };
 
 /**
- * The RobotCommentInput entity contains information for creating an inline robot comment
- * https://gerrit-review.googlesource.com/Documentation/rest-api-changes.html#robot-comment-input
- */
-export type RobotCommentInput = RobotCommentInfo;
-
-/**
- * The RobotCommentInfo entity contains information about a robot inline comment
- * https://gerrit-review.googlesource.com/Documentation/rest-api-changes.html#robot-comment-info
- */
-export interface RobotCommentInfo extends CommentInfo {
-  robot_id: RobotId;
-  robot_run_id: RobotRunId;
-  url?: string;
-  properties: {[propertyName: string]: string};
-}
-export type PathToRobotCommentsInfoMap = {[path: string]: RobotCommentInfo[]};
-
-/**
  * The ApplyProvidedFixInput entity contains information for applying fixes, provided in the
  * request body, to a revision.
  * https://gerrit-review.googlesource.com/Documentation/rest-api-changes.html#apply-provided-fix
diff --git a/polygerrit-ui/app/utils/comment-util.ts b/polygerrit-ui/app/utils/comment-util.ts
index ecc3c99..36dc12e 100644
--- a/polygerrit-ui/app/utils/comment-util.ts
+++ b/polygerrit-ui/app/utils/comment-util.ts
@@ -21,7 +21,6 @@
   CommentThread,
   DraftInfo,
   ChangeMessage,
-  isRobot,
   isDraft,
   Comment,
   CommentIdToCommentThreadMap,
@@ -337,10 +336,6 @@
     .includes(account.email);
 }
 
-export function isRobotThread(thread: CommentThread): boolean {
-  return isRobot(getFirstComment(thread));
-}
-
 export function hasSuggestion(thread: CommentThread): boolean {
   const firstComment = getFirstComment(thread);
   if (!firstComment) return false;
@@ -350,10 +345,6 @@
   );
 }
 
-export function hasHumanReply(thread: CommentThread): boolean {
-  return countComments(thread) > 1 && !isRobot(getLastComment(thread));
-}
-
 export function lastUpdated(thread: CommentThread): Date | undefined {
   // We don't want to re-sort comments when you save a draft reply, so
   // we stick to the timestampe of the last *published* comment.
@@ -557,9 +548,7 @@
 
 // This can either mean a user or a checks provided fix.
 // "Provided" means that the fix is sent along with the request
-// when previewing and applying the fix. This is in contrast to
-// robot comment fixes, which are stored in the backend, and they
-// are referenced by a unique `FixId`;
+// when previewing and applying the fix.
 export const PROVIDED_FIX_ID = 'provided_fix' as FixId;
 
 export function hasUserSuggestion(comment: Comment) {
diff --git a/polygerrit-ui/app/utils/label-util.ts b/polygerrit-ui/app/utils/label-util.ts
index e34e96b..dd1c894 100644
--- a/polygerrit-ui/app/utils/label-util.ts
+++ b/polygerrit-ui/app/utils/label-util.ts
@@ -362,6 +362,16 @@
   return priorityRequirementList.concat(nonPriorityRequirements);
 }
 
+export function orderSubmitRequirementNames(names: string[]) {
+  const result = PRIORITY_REQUIREMENTS_ORDER.filter(label =>
+    names.includes(label)
+  );
+  const nonPriorityRequirements = names
+    .filter(name => !PRIORITY_REQUIREMENTS_ORDER.includes(name))
+    .sort();
+  return result.concat(nonPriorityRequirements);
+}
+
 function getStringLabelValue(
   labels: LabelNameToInfoMap,
   labelName: string,
diff --git a/polygerrit-ui/app/utils/label-util_test.ts b/polygerrit-ui/app/utils/label-util_test.ts
index a0b6c50..4e29079 100644
--- a/polygerrit-ui/app/utils/label-util_test.ts
+++ b/polygerrit-ui/app/utils/label-util_test.ts
@@ -27,6 +27,8 @@
   hasVotes,
   hasVoted,
   extractLabelsWithCountFrom,
+  orderSubmitRequirements,
+  StandardLabels,
 } from './label-util';
 import {
   AccountId,
@@ -901,4 +903,57 @@
       assert.isTrue(hasVoted(quickLabelInfo, account));
     });
   });
+
+  suite('orderSubmitRequirements', () => {
+    test('orders priority requirements first', () => {
+      const codeReview = {
+        ...createSubmitRequirementResultInfo(),
+        name: StandardLabels.CODE_REVIEW,
+      };
+      const codeOwners = {
+        ...createSubmitRequirementResultInfo(),
+        name: StandardLabels.CODE_OWNERS,
+      };
+      const presubmitVerified = {
+        ...createSubmitRequirementResultInfo(),
+        name: StandardLabels.PRESUBMIT_VERIFIED,
+      };
+      const customLabel = createSubmitRequirementResultInfo('Custom-Label');
+
+      const requirements = [
+        customLabel,
+        codeReview,
+        presubmitVerified,
+        codeOwners,
+      ];
+      const ordered = orderSubmitRequirements(requirements);
+
+      assert.deepEqual(ordered, [
+        codeReview,
+        codeOwners,
+        presubmitVerified,
+        customLabel,
+      ]);
+    });
+
+    test('preserves order of non-priority requirements', () => {
+      const customLabel1 = {
+        ...createSubmitRequirementResultInfo(),
+        name: 'Custom-Label-1',
+      };
+      const customLabel2 = {
+        ...createSubmitRequirementResultInfo(),
+        name: 'Custom-Label-2',
+      };
+      const customLabel3 = {
+        ...createSubmitRequirementResultInfo(),
+        name: 'Custom-Label-3',
+      };
+
+      const requirements = [customLabel2, customLabel1, customLabel3];
+      const ordered = orderSubmitRequirements(requirements);
+
+      assert.deepEqual(ordered, requirements);
+    });
+  });
 });
diff --git a/polygerrit-ui/app/utils/string-util.ts b/polygerrit-ui/app/utils/string-util.ts
index abc5529..41ca9d1 100644
--- a/polygerrit-ui/app/utils/string-util.ts
+++ b/polygerrit-ui/app/utils/string-util.ts
@@ -56,6 +56,15 @@
   return str.charAt(0).toUpperCase() + str.slice(1);
 }
 
+export function trimWithEllipsis(
+  s: string | undefined,
+  maxLength: number
+): string {
+  if (!s) return '';
+  if (s.length <= maxLength) return s;
+  return s.substring(0, maxLength - 3) + '...';
+}
+
 /**
  * Converts the items into a sentence-friendly format. Examples:
  * listForSentence(["Foo", "Bar", "Baz"])
diff --git a/polygerrit-ui/app/utils/string-util_test.ts b/polygerrit-ui/app/utils/string-util_test.ts
index d6c4187..6ba3354 100644
--- a/polygerrit-ui/app/utils/string-util_test.ts
+++ b/polygerrit-ui/app/utils/string-util_test.ts
@@ -11,6 +11,7 @@
   listForSentence,
   diffFilePaths,
   escapeAndWrapSearchOperatorValue,
+  trimWithEllipsis,
 } from './string-util';
 
 suite('string-util tests', () => {
@@ -42,6 +43,14 @@
     assert.equal(listForSentence([]), '');
   });
 
+  test('trimWithEllipsis', () => {
+    assert.equal(trimWithEllipsis('asdf', 10), 'asdf');
+    assert.equal(trimWithEllipsis('asdf', 4), 'asdf');
+    assert.equal(trimWithEllipsis('asdf', 3), '...');
+    assert.equal(trimWithEllipsis('asdf qwer', 5), 'as...');
+    assert.equal(trimWithEllipsis('asdf qwer', 8), 'asdf ...');
+  });
+
   test('diffFilePaths', () => {
     const path = 'some/new/path/to/foo.js';
 
diff --git a/proto/cache.proto b/proto/cache.proto
index cfdbd4e..4717f1d 100644
--- a/proto/cache.proto
+++ b/proto/cache.proto
@@ -715,7 +715,7 @@
 
 // Serialized form of
 // com.google.gerrit.server.patch.filediff.FileDiffOutput
-// Next ID: 15
+// Next ID: 17
 message FileDiffOutputProto {
   // Next ID: 5
   message Edit {
@@ -749,4 +749,6 @@
   bool negative = 12;
   string old_mode = 13; // ENUM as string
   string new_mode = 14; // ENUM as string
+  bytes old_sha = 15;
+  bytes new_sha = 16;
 }
diff --git a/tools/js/eslint.bzl b/tools/js/eslint.bzl
index 320f8da..7dc73bb 100644
--- a/tools/js/eslint.bzl
+++ b/tools/js/eslint.bzl
@@ -41,6 +41,7 @@
             "@npm//eslint-plugin-import",
             "@npm//eslint-plugin-jsdoc",
             "@npm//eslint-plugin-lit",
+            "@npm//eslint-plugin-n",
             "@npm//eslint-plugin-prettier",
             "@npm//eslint-plugin-regex",
             "@npm//gts",
@@ -122,6 +123,11 @@
             "*_test_loader.js",
             "./",  # Relative to the config file location
         ],
+        # Needed for eslint 9+.
+        # Remove this when migrating the config to flat config.
+        env = {
+            "ESLINT_USE_FLAT_CONFIG": "false",
+        },
         # Should not run sandboxed.
         tags = [
             "local",
@@ -143,4 +149,7 @@
             "--ignore-pattern",
             "*_bin_loader.js",
         ],
+        env = {
+            "ESLINT_USE_FLAT_CONFIG": "false",
+        },
     )
diff --git a/yarn.lock b/yarn.lock
index 9a3b4a2..d585791 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -77,14 +77,14 @@
   dependencies:
     google-protobuf "^3.6.1"
 
-"@es-joy/jsdoccomment@~0.39.4":
-  version "0.39.4"
-  resolved "https://registry.yarnpkg.com/@es-joy/jsdoccomment/-/jsdoccomment-0.39.4.tgz#6b8a62e9b3077027837728818d3c4389a898b392"
-  integrity sha512-Jvw915fjqQct445+yron7Dufix9A+m9j1fCJYlCo1FWlRvTxa3pjJelxdSTdaLWcTwRU6vbL+NYjO4YuNIS5Qg==
+"@es-joy/jsdoccomment@~0.49.0":
+  version "0.49.0"
+  resolved "https://registry.yarnpkg.com/@es-joy/jsdoccomment/-/jsdoccomment-0.49.0.tgz#e5ec1eda837c802eca67d3b29e577197f14ba1db"
+  integrity sha512-xjZTSFgECpb9Ohuk5yMX5RhUEbfeQcuOp8IF60e+wyzWEF0M5xeSgqsfLtvPEX8BIyOX9saZqzuGPmZ8oWc+5Q==
   dependencies:
-    comment-parser "1.3.1"
-    esquery "^1.5.0"
-    jsdoc-type-pratt-parser "~4.0.0"
+    comment-parser "1.4.1"
+    esquery "^1.6.0"
+    jsdoc-type-pratt-parser "~4.1.0"
 
 "@esbuild/android-arm64@0.17.19":
   version "0.17.19"
@@ -196,6 +196,13 @@
   resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz#8cfaf2ff603e9aabb910e9c0558c26cf32744061"
   integrity sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==
 
+"@eslint-community/eslint-utils@^4.1.2", "@eslint-community/eslint-utils@^4.5.0", "@eslint-community/eslint-utils@^4.7.0":
+  version "4.7.0"
+  resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz#607084630c6c033992a082de6e6fbc1a8b52175a"
+  integrity sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==
+  dependencies:
+    eslint-visitor-keys "^3.4.3"
+
 "@eslint-community/eslint-utils@^4.2.0":
   version "4.4.1"
   resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz#d1145bf2c20132d6400495d6df4bf59362fd9d56"
@@ -203,54 +210,92 @@
   dependencies:
     eslint-visitor-keys "^3.4.3"
 
-"@eslint-community/regexpp@^4.4.0":
-  version "4.10.0"
-  resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.10.0.tgz#548f6de556857c8bb73bbee70c35dc82a2e74d63"
-  integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==
-
-"@eslint-community/regexpp@^4.6.1":
+"@eslint-community/regexpp@^4.10.0", "@eslint-community/regexpp@^4.11.0", "@eslint-community/regexpp@^4.12.1":
   version "4.12.1"
   resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.12.1.tgz#cfc6cffe39df390a3841cde2abccf92eaa7ae0e0"
   integrity sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==
 
-"@eslint/eslintrc@^2.1.4":
-  version "2.1.4"
-  resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz#388a269f0f25c1b6adc317b5a2c55714894c70ad"
-  integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==
+"@eslint/config-array@^0.20.0":
+  version "0.20.0"
+  resolved "https://registry.yarnpkg.com/@eslint/config-array/-/config-array-0.20.0.tgz#7a1232e82376712d3340012a2f561a2764d1988f"
+  integrity sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==
+  dependencies:
+    "@eslint/object-schema" "^2.1.6"
+    debug "^4.3.1"
+    minimatch "^3.1.2"
+
+"@eslint/config-helpers@^0.2.1":
+  version "0.2.2"
+  resolved "https://registry.yarnpkg.com/@eslint/config-helpers/-/config-helpers-0.2.2.tgz#3779f76b894de3a8ec4763b79660e6d54d5b1010"
+  integrity sha512-+GPzk8PlG0sPpzdU5ZvIRMPidzAnZDl/s9L+y13iodqvb8leL53bTannOrQ/Im7UkpsmFU5Ily5U60LWixnmLg==
+
+"@eslint/core@^0.13.0":
+  version "0.13.0"
+  resolved "https://registry.yarnpkg.com/@eslint/core/-/core-0.13.0.tgz#bf02f209846d3bf996f9e8009db62df2739b458c"
+  integrity sha512-yfkgDw1KR66rkT5A8ci4irzDysN7FRpq3ttJolR88OqQikAWqwA8j5VZyas+vjyBNFIJ7MfybJ9plMILI2UrCw==
+  dependencies:
+    "@types/json-schema" "^7.0.15"
+
+"@eslint/eslintrc@^3.3.1":
+  version "3.3.1"
+  resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-3.3.1.tgz#e55f7f1dd400600dd066dbba349c4c0bac916964"
+  integrity sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==
   dependencies:
     ajv "^6.12.4"
     debug "^4.3.2"
-    espree "^9.6.0"
-    globals "^13.19.0"
+    espree "^10.0.1"
+    globals "^14.0.0"
     ignore "^5.2.0"
     import-fresh "^3.2.1"
     js-yaml "^4.1.0"
     minimatch "^3.1.2"
     strip-json-comments "^3.1.1"
 
-"@eslint/js@8.57.1":
-  version "8.57.1"
-  resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.1.tgz#de633db3ec2ef6a3c89e2f19038063e8a122e2c2"
-  integrity sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==
+"@eslint/js@9.26.0":
+  version "9.26.0"
+  resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.26.0.tgz#1e13126b67a3db15111d2dcc61f69a2acff70bd5"
+  integrity sha512-I9XlJawFdSMvWjDt6wksMCrgns5ggLNfFwFvnShsleWruvXM514Qxk8V246efTw+eo9JABvVz+u3q2RiAowKxQ==
 
-"@humanwhocodes/config-array@^0.13.0":
-  version "0.13.0"
-  resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.13.0.tgz#fb907624df3256d04b9aa2df50d7aa97ec648748"
-  integrity sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==
+"@eslint/object-schema@^2.1.6":
+  version "2.1.6"
+  resolved "https://registry.yarnpkg.com/@eslint/object-schema/-/object-schema-2.1.6.tgz#58369ab5b5b3ca117880c0f6c0b0f32f6950f24f"
+  integrity sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==
+
+"@eslint/plugin-kit@^0.2.8":
+  version "0.2.8"
+  resolved "https://registry.yarnpkg.com/@eslint/plugin-kit/-/plugin-kit-0.2.8.tgz#47488d8f8171b5d4613e833313f3ce708e3525f8"
+  integrity sha512-ZAoA40rNMPwSm+AeHpCq8STiNAwzWLJuP8Xv4CHIc9wv/PSuExjMrmjfYNj682vW0OOiZ1HKxzvjQr9XZIisQA==
   dependencies:
-    "@humanwhocodes/object-schema" "^2.0.3"
-    debug "^4.3.1"
-    minimatch "^3.0.5"
+    "@eslint/core" "^0.13.0"
+    levn "^0.4.1"
+
+"@humanfs/core@^0.19.1":
+  version "0.19.1"
+  resolved "https://registry.yarnpkg.com/@humanfs/core/-/core-0.19.1.tgz#17c55ca7d426733fe3c561906b8173c336b40a77"
+  integrity sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==
+
+"@humanfs/node@^0.16.6":
+  version "0.16.6"
+  resolved "https://registry.yarnpkg.com/@humanfs/node/-/node-0.16.6.tgz#ee2a10eaabd1131987bf0488fd9b820174cd765e"
+  integrity sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==
+  dependencies:
+    "@humanfs/core" "^0.19.1"
+    "@humanwhocodes/retry" "^0.3.0"
 
 "@humanwhocodes/module-importer@^1.0.1":
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c"
   integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==
 
-"@humanwhocodes/object-schema@^2.0.3":
-  version "2.0.3"
-  resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz#4a2868d75d6d6963e423bcf90b7fd1be343409d3"
-  integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==
+"@humanwhocodes/retry@^0.3.0":
+  version "0.3.1"
+  resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.3.1.tgz#c72a5c76a9fbaf3488e231b13dc52c0da7bab42a"
+  integrity sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==
+
+"@humanwhocodes/retry@^0.4.2":
+  version "0.4.2"
+  resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.4.2.tgz#1860473de7dfa1546767448f333db80cb0ff2161"
+  integrity sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==
 
 "@jridgewell/gen-mapping@^0.3.5":
   version "0.3.8"
@@ -304,6 +349,22 @@
   resolved "https://registry.yarnpkg.com/@mdn/browser-compat-data/-/browser-compat-data-4.2.1.tgz#1fead437f3957ceebe2e8c3f46beccdb9bc575b8"
   integrity sha512-EWUguj2kd7ldmrF9F+vI5hUOralPd+sdsUnYbRy33vZTuZkduC1shE9TtEMEjAQwyfyMb4ole5KtjF8MsnQOlA==
 
+"@modelcontextprotocol/sdk@^1.8.0":
+  version "1.11.0"
+  resolved "https://registry.yarnpkg.com/@modelcontextprotocol/sdk/-/sdk-1.11.0.tgz#9f1762efe6f3365f0bf3b019cc9bd1629d19bc50"
+  integrity sha512-k/1pb70eD638anoi0e8wUGAlbMJXyvdV4p62Ko+EZ7eBe1xMx8Uhak1R5DgfoofsK5IBBnRwsYGTaLZl+6/+RQ==
+  dependencies:
+    content-type "^1.0.5"
+    cors "^2.8.5"
+    cross-spawn "^7.0.3"
+    eventsource "^3.0.2"
+    express "^5.0.1"
+    express-rate-limit "^7.5.0"
+    pkce-challenge "^5.0.0"
+    raw-body "^3.0.0"
+    zod "^3.23.8"
+    zod-to-json-schema "^3.24.1"
+
 "@mrmlnc/readdir-enhanced@^2.2.1":
   version "2.2.1"
   resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde"
@@ -330,7 +391,7 @@
   resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b"
   integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==
 
-"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8":
+"@nodelib/fs.walk@^1.2.3":
   version "1.2.8"
   resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a"
   integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==
@@ -338,6 +399,16 @@
     "@nodelib/fs.scandir" "2.1.5"
     fastq "^1.6.0"
 
+"@pkgr/core@^0.1.0":
+  version "0.1.2"
+  resolved "https://registry.yarnpkg.com/@pkgr/core/-/core-0.1.2.tgz#1cf95080bb7072fafaa3cb13b442fab4695c3893"
+  integrity sha512-fdDH1LSGfZdTH2sxdpVMw31BanV28K/Gry0cVFxaNP77neJSkd82mM8ErPNYs9e+0O7SdHBLTDzDgwUuy18RnQ==
+
+"@pkgr/core@^0.2.3":
+  version "0.2.4"
+  resolved "https://registry.yarnpkg.com/@pkgr/core/-/core-0.2.4.tgz#d897170a2b0ba51f78a099edccd968f7b103387c"
+  integrity sha512-ROFF39F6ZrnzSUEmQQZUar0Jt4xVoP9WnDRdWwF4NNcXs3xBTLgBUDoOwW141y1jP+S8nahIbdxbFC7IShw9Iw==
+
 "@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2":
   version "1.1.2"
   resolved "https://registry.yarnpkg.com/@protobufjs/aspromise/-/aspromise-1.1.2.tgz#9b8b0cc663d669a7d8f6f5d0893a14d348f30fbf"
@@ -564,7 +635,7 @@
   resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f"
   integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==
 
-"@types/estree@1.0.7":
+"@types/estree@1.0.7", "@types/estree@^1.0.6":
   version "1.0.7"
   resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.7.tgz#4158d3105276773d5b7695cd4834b1722e4f37a8"
   integrity sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==
@@ -599,7 +670,7 @@
   resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.4.tgz#7eb47726c391b7345a6ec35ad7f4de469cf5ba4f"
   integrity sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==
 
-"@types/json-schema@^7.0.9":
+"@types/json-schema@^7.0.15":
   version "7.0.15"
   resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841"
   integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==
@@ -699,11 +770,6 @@
   dependencies:
     "@types/node" "*"
 
-"@types/semver@^7.3.12":
-  version "7.5.6"
-  resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.6.tgz#c65b2bfce1bec346582c07724e3f8c1017a20339"
-  integrity sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==
-
 "@types/send@*":
   version "0.17.4"
   resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.4.tgz#6619cd24e7270793702e4e6a4b958a9010cfc57a"
@@ -728,94 +794,86 @@
   dependencies:
     "@types/node" "*"
 
-"@typescript-eslint/eslint-plugin@^4.2.0", "@typescript-eslint/eslint-plugin@^5.62.0":
-  version "5.62.0"
-  resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz#aeef0328d172b9e37d9bab6dbc13b87ed88977db"
-  integrity sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==
+"@typescript-eslint/eslint-plugin@5.62.0", "@typescript-eslint/eslint-plugin@^8.32.0":
+  version "8.32.0"
+  resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.32.0.tgz#86630dd3084f9d6c4239bbcd6a7ee1a7ee844f7f"
+  integrity sha512-/jU9ettcntkBFmWUzzGgsClEi2ZFiikMX5eEQsmxIAWMOn4H3D4rvHssstmAHGVvrYnaMqdWWWg0b5M6IN/MTQ==
   dependencies:
-    "@eslint-community/regexpp" "^4.4.0"
-    "@typescript-eslint/scope-manager" "5.62.0"
-    "@typescript-eslint/type-utils" "5.62.0"
-    "@typescript-eslint/utils" "5.62.0"
-    debug "^4.3.4"
+    "@eslint-community/regexpp" "^4.10.0"
+    "@typescript-eslint/scope-manager" "8.32.0"
+    "@typescript-eslint/type-utils" "8.32.0"
+    "@typescript-eslint/utils" "8.32.0"
+    "@typescript-eslint/visitor-keys" "8.32.0"
     graphemer "^1.4.0"
-    ignore "^5.2.0"
-    natural-compare-lite "^1.4.0"
-    semver "^7.3.7"
-    tsutils "^3.21.0"
+    ignore "^5.3.1"
+    natural-compare "^1.4.0"
+    ts-api-utils "^2.1.0"
 
-"@typescript-eslint/parser@^4.2.0", "@typescript-eslint/parser@^5.62.0":
-  version "5.62.0"
-  resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.62.0.tgz#1b63d082d849a2fcae8a569248fbe2ee1b8a56c7"
-  integrity sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==
+"@typescript-eslint/parser@5.62.0", "@typescript-eslint/parser@^8.32.0":
+  version "8.32.0"
+  resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.32.0.tgz#fe840ecb2726a82fa9f5562837ec40503ae71caf"
+  integrity sha512-B2MdzyWxCE2+SqiZHAjPphft+/2x2FlO9YBx7eKE1BCb+rqBlQdhtAEhzIEdozHd55DXPmxBdpMygFJjfjjA9A==
   dependencies:
-    "@typescript-eslint/scope-manager" "5.62.0"
-    "@typescript-eslint/types" "5.62.0"
-    "@typescript-eslint/typescript-estree" "5.62.0"
+    "@typescript-eslint/scope-manager" "8.32.0"
+    "@typescript-eslint/types" "8.32.0"
+    "@typescript-eslint/typescript-estree" "8.32.0"
+    "@typescript-eslint/visitor-keys" "8.32.0"
     debug "^4.3.4"
 
-"@typescript-eslint/scope-manager@5.62.0":
-  version "5.62.0"
-  resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz#d9457ccc6a0b8d6b37d0eb252a23022478c5460c"
-  integrity sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==
+"@typescript-eslint/scope-manager@8.32.0":
+  version "8.32.0"
+  resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.32.0.tgz#6be89f652780f0d3d19d58dc0ee107b1a9e3282c"
+  integrity sha512-jc/4IxGNedXkmG4mx4nJTILb6TMjL66D41vyeaPWvDUmeYQzF3lKtN15WsAeTr65ce4mPxwopPSo1yUUAWw0hQ==
   dependencies:
-    "@typescript-eslint/types" "5.62.0"
-    "@typescript-eslint/visitor-keys" "5.62.0"
+    "@typescript-eslint/types" "8.32.0"
+    "@typescript-eslint/visitor-keys" "8.32.0"
 
-"@typescript-eslint/type-utils@5.62.0":
-  version "5.62.0"
-  resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz#286f0389c41681376cdad96b309cedd17d70346a"
-  integrity sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==
+"@typescript-eslint/type-utils@8.32.0":
+  version "8.32.0"
+  resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.32.0.tgz#5e0882393e801963f749bea38888e716045fe895"
+  integrity sha512-t2vouuYQKEKSLtJaa5bB4jHeha2HJczQ6E5IXPDPgIty9EqcJxpr1QHQ86YyIPwDwxvUmLfP2YADQ5ZY4qddZg==
   dependencies:
-    "@typescript-eslint/typescript-estree" "5.62.0"
-    "@typescript-eslint/utils" "5.62.0"
+    "@typescript-eslint/typescript-estree" "8.32.0"
+    "@typescript-eslint/utils" "8.32.0"
     debug "^4.3.4"
-    tsutils "^3.21.0"
+    ts-api-utils "^2.1.0"
 
-"@typescript-eslint/types@5.62.0":
-  version "5.62.0"
-  resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.62.0.tgz#258607e60effa309f067608931c3df6fed41fd2f"
-  integrity sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==
+"@typescript-eslint/types@8.32.0":
+  version "8.32.0"
+  resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.32.0.tgz#a4a66b8876b8391970cf069b49572e43f1fc957a"
+  integrity sha512-O5Id6tGadAZEMThM6L9HmVf5hQUXNSxLVKeGJYWNhhVseps/0LddMkp7//VDkzwJ69lPL0UmZdcZwggj9akJaA==
 
-"@typescript-eslint/typescript-estree@5.62.0":
-  version "5.62.0"
-  resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz#7d17794b77fabcac615d6a48fb143330d962eb9b"
-  integrity sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==
+"@typescript-eslint/typescript-estree@8.32.0":
+  version "8.32.0"
+  resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.32.0.tgz#11d45f47bfabb141206a3da6c7b91a9d869ff32d"
+  integrity sha512-pU9VD7anSCOIoBFnhTGfOzlVFQIA1XXiQpH/CezqOBaDppRwTglJzCC6fUQGpfwey4T183NKhF1/mfatYmjRqQ==
   dependencies:
-    "@typescript-eslint/types" "5.62.0"
-    "@typescript-eslint/visitor-keys" "5.62.0"
+    "@typescript-eslint/types" "8.32.0"
+    "@typescript-eslint/visitor-keys" "8.32.0"
     debug "^4.3.4"
-    globby "^11.1.0"
+    fast-glob "^3.3.2"
     is-glob "^4.0.3"
-    semver "^7.3.7"
-    tsutils "^3.21.0"
+    minimatch "^9.0.4"
+    semver "^7.6.0"
+    ts-api-utils "^2.1.0"
 
-"@typescript-eslint/utils@5.62.0":
-  version "5.62.0"
-  resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.62.0.tgz#141e809c71636e4a75daa39faed2fb5f4b10df86"
-  integrity sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==
+"@typescript-eslint/utils@8.32.0":
+  version "8.32.0"
+  resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.32.0.tgz#24570f68cf845d198b73a7f94ca88d8c2505ba47"
+  integrity sha512-8S9hXau6nQ/sYVtC3D6ISIDoJzS1NsCK+gluVhLN2YkBPX+/1wkwyUiDKnxRh15579WoOIyVWnoyIf3yGI9REw==
   dependencies:
-    "@eslint-community/eslint-utils" "^4.2.0"
-    "@types/json-schema" "^7.0.9"
-    "@types/semver" "^7.3.12"
-    "@typescript-eslint/scope-manager" "5.62.0"
-    "@typescript-eslint/types" "5.62.0"
-    "@typescript-eslint/typescript-estree" "5.62.0"
-    eslint-scope "^5.1.1"
-    semver "^7.3.7"
+    "@eslint-community/eslint-utils" "^4.7.0"
+    "@typescript-eslint/scope-manager" "8.32.0"
+    "@typescript-eslint/types" "8.32.0"
+    "@typescript-eslint/typescript-estree" "8.32.0"
 
-"@typescript-eslint/visitor-keys@5.62.0":
-  version "5.62.0"
-  resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz#2174011917ce582875954ffe2f6912d5931e353e"
-  integrity sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==
+"@typescript-eslint/visitor-keys@8.32.0":
+  version "8.32.0"
+  resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.32.0.tgz#0cca2cac046bc71cc40ce8214bac2850d6ecf4a6"
+  integrity sha512-1rYQTCLFFzOI5Nl0c8LUpJT8HxpwVRn9E4CkMsYfuN6ctmQqExjSTzzSk0Tz2apmXy7WU6/6fyaZVVA/thPN+w==
   dependencies:
-    "@typescript-eslint/types" "5.62.0"
-    eslint-visitor-keys "^3.3.0"
-
-"@ungap/structured-clone@^1.2.0":
-  version "1.2.0"
-  resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406"
-  integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==
+    "@typescript-eslint/types" "8.32.0"
+    eslint-visitor-keys "^4.2.0"
 
 "@web/config-loader@^0.1.3":
   version "0.1.3"
@@ -907,21 +965,24 @@
     mime-types "~2.1.34"
     negotiator "0.6.3"
 
+accepts@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/accepts/-/accepts-2.0.0.tgz#bbcf4ba5075467f3f2131eab3cffc73c2f5d7895"
+  integrity sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==
+  dependencies:
+    mime-types "^3.0.0"
+    negotiator "^1.0.0"
+
 acorn-jsx@^5.3.2:
   version "5.3.2"
   resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937"
   integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==
 
-acorn@^8.8.2:
+acorn@^8.14.0, acorn@^8.8.2:
   version "8.14.1"
   resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.14.1.tgz#721d5dc10f7d5b5609a891773d47731796935dfb"
   integrity sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==
 
-acorn@^8.9.0:
-  version "8.14.0"
-  resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.14.0.tgz#063e2c70cac5fb4f6467f0b11152e04c682795b0"
-  integrity sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==
-
 ajv@^6.12.4:
   version "6.12.6"
   resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
@@ -1021,11 +1082,6 @@
     get-intrinsic "^1.2.4"
     is-string "^1.0.7"
 
-array-union@^2.1.0:
-  version "2.1.0"
-  resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d"
-  integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==
-
 array-unique@^0.3.2:
   version "0.3.2"
   resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428"
@@ -1129,6 +1185,21 @@
   resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d"
   integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==
 
+body-parser@^2.2.0:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-2.2.0.tgz#f7a9656de305249a715b549b7b8fd1ab9dfddcfa"
+  integrity sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==
+  dependencies:
+    bytes "^3.1.2"
+    content-type "^1.0.5"
+    debug "^4.4.0"
+    http-errors "^2.0.0"
+    iconv-lite "^0.6.3"
+    on-finished "^2.4.1"
+    qs "^6.14.0"
+    raw-body "^3.0.0"
+    type-is "^2.0.0"
+
 brace-expansion@^1.1.7:
   version "1.1.11"
   resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
@@ -1137,6 +1208,13 @@
     balanced-match "^1.0.0"
     concat-map "0.0.1"
 
+brace-expansion@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae"
+  integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==
+  dependencies:
+    balanced-match "^1.0.0"
+
 braces@^2.3.1:
   version "2.3.2"
   resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729"
@@ -1160,6 +1238,13 @@
   dependencies:
     fill-range "^7.0.1"
 
+braces@^3.0.3:
+  version "3.0.3"
+  resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789"
+  integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==
+  dependencies:
+    fill-range "^7.1.1"
+
 buffer-from@^1.0.0:
   version "1.1.2"
   resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5"
@@ -1170,6 +1255,18 @@
   resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.3.0.tgz#cae62812b89801e9656336e46223e030386be7b6"
   integrity sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==
 
+builtins@^5.0.1:
+  version "5.1.0"
+  resolved "https://registry.yarnpkg.com/builtins/-/builtins-5.1.0.tgz#6d85eeb360c4ebc166c3fdef922a15aa7316a5e8"
+  integrity sha512-SW9lzGTLvWTP1AY8xeAMZimqDrIaSdLQUcVr9DMef51niJ022Ri87SwRRKYm4A6iHfkPaiVUu/Duw2Wc4J7kKg==
+  dependencies:
+    semver "^7.0.0"
+
+bytes@3.1.2, bytes@^3.1.2:
+  version "3.1.2"
+  resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5"
+  integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==
+
 cache-base@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2"
@@ -1193,6 +1290,14 @@
     mime-types "^2.1.18"
     ylru "^1.2.0"
 
+call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6"
+  integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==
+  dependencies:
+    es-errors "^1.3.0"
+    function-bind "^1.1.2"
+
 call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6, call-bind@^1.0.7:
   version "1.0.7"
   resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9"
@@ -1204,6 +1309,14 @@
     get-intrinsic "^1.2.4"
     set-function-length "^1.2.1"
 
+call-bound@^1.0.2:
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.4.tgz#238de935d2a2a692928c538c7ccfa91067fd062a"
+  integrity sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==
+  dependencies:
+    call-bind-apply-helpers "^1.0.2"
+    get-intrinsic "^1.3.0"
+
 call-me-maybe@^1.0.1:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.2.tgz#03f964f19522ba643b1b0693acb9152fe2074baa"
@@ -1375,10 +1488,10 @@
   resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
   integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
 
-comment-parser@1.3.1:
-  version "1.3.1"
-  resolved "https://registry.yarnpkg.com/comment-parser/-/comment-parser-1.3.1.tgz#3d7ea3adaf9345594aedee6563f422348f165c1b"
-  integrity sha512-B52sN2VNghyq5ofvUsqZjmk6YkihBX5vMSChmSK9v4ShjKf3Vk5Xcmgpw4o+iIgtrnM/u5FiMpz9VKb8lpBveA==
+comment-parser@1.4.1:
+  version "1.4.1"
+  resolved "https://registry.yarnpkg.com/comment-parser/-/comment-parser-1.4.1.tgz#bdafead37961ac079be11eb7ec65c4d021eaf9cc"
+  integrity sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==
 
 component-emitter@^1.2.1:
   version "1.3.1"
@@ -1390,6 +1503,13 @@
   resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
   integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==
 
+content-disposition@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-1.0.0.tgz#844426cb398f934caefcbb172200126bc7ceace2"
+  integrity sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==
+  dependencies:
+    safe-buffer "5.2.1"
+
 content-disposition@~0.5.2:
   version "0.5.4"
   resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe"
@@ -1397,11 +1517,21 @@
   dependencies:
     safe-buffer "5.2.1"
 
-content-type@^1.0.4:
+content-type@^1.0.4, content-type@^1.0.5:
   version "1.0.5"
   resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918"
   integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==
 
+cookie-signature@^1.2.1:
+  version "1.2.2"
+  resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.2.2.tgz#57c7fc3cc293acab9fec54d73e15690ebe4a1793"
+  integrity sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==
+
+cookie@^0.7.1:
+  version "0.7.2"
+  resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.7.2.tgz#556369c472a2ba910f2979891b526b3436237ed7"
+  integrity sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==
+
 cookies@~0.9.0:
   version "0.9.1"
   resolved "https://registry.yarnpkg.com/cookies/-/cookies-0.9.1.tgz#3ffed6f60bb4fb5f146feeedba50acc418af67e3"
@@ -1415,6 +1545,14 @@
   resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d"
   integrity sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==
 
+cors@^2.8.5:
+  version "2.8.5"
+  resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29"
+  integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==
+  dependencies:
+    object-assign "^4"
+    vary "^1"
+
 cross-spawn@^6.0.5:
   version "6.0.5"
   resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4"
@@ -1426,7 +1564,7 @@
     shebang-command "^1.2.0"
     which "^1.2.9"
 
-cross-spawn@^7.0.2, cross-spawn@^7.0.3:
+cross-spawn@^7.0.3:
   version "7.0.3"
   resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
   integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
@@ -1435,6 +1573,15 @@
     shebang-command "^2.0.0"
     which "^2.0.1"
 
+cross-spawn@^7.0.6:
+  version "7.0.6"
+  resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f"
+  integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==
+  dependencies:
+    path-key "^3.1.0"
+    shebang-command "^2.0.0"
+    which "^2.0.1"
+
 data-view-buffer@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/data-view-buffer/-/data-view-buffer-1.0.1.tgz#8ea6326efec17a2e42620696e671d7d5a8bc66b2"
@@ -1495,6 +1642,13 @@
   dependencies:
     ms "^2.1.3"
 
+debug@^4.3.5, debug@^4.3.6, debug@^4.4.0:
+  version "4.4.0"
+  resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.0.tgz#2b3f2aea2ffeb776477460267377dc8710faba8a"
+  integrity sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==
+  dependencies:
+    ms "^2.1.3"
+
 decamelize-keys@^1.1.0:
   version "1.1.1"
   resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.1.tgz#04a2d523b2f18d80d0158a43b895d56dff8d19d8"
@@ -1578,7 +1732,7 @@
   resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
   integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==
 
-depd@^2.0.0, depd@~2.0.0:
+depd@2.0.0, depd@^2.0.0, depd@~2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df"
   integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==
@@ -1602,13 +1756,6 @@
     leven "^3.1.0"
     lodash.deburr "^4.1.0"
 
-dir-glob@^3.0.1:
-  version "3.0.1"
-  resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f"
-  integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==
-  dependencies:
-    path-type "^4.0.0"
-
 doctrine@^2.1.0:
   version "2.1.0"
   resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d"
@@ -1616,13 +1763,6 @@
   dependencies:
     esutils "^2.0.2"
 
-doctrine@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961"
-  integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==
-  dependencies:
-    esutils "^2.0.2"
-
 dom-serializer@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53"
@@ -1644,15 +1784,24 @@
   dependencies:
     domelementtype "^2.3.0"
 
-domutils@^3.0.1:
-  version "3.1.0"
-  resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.1.0.tgz#c47f551278d3dc4b0b1ab8cbb42d751a6f0d824e"
-  integrity sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==
+domutils@^3.1.0:
+  version "3.2.2"
+  resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.2.2.tgz#edbfe2b668b0c1d97c24baf0f1062b132221bc78"
+  integrity sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==
   dependencies:
     dom-serializer "^2.0.0"
     domelementtype "^2.3.0"
     domhandler "^5.0.3"
 
+dunder-proto@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a"
+  integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==
+  dependencies:
+    call-bind-apply-helpers "^1.0.1"
+    es-errors "^1.3.0"
+    gopd "^1.2.0"
+
 ee-first@1.1.1:
   version "1.1.1"
   resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
@@ -1668,7 +1817,20 @@
   resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
   integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==
 
-entities@^4.2.0, entities@^4.4.0:
+encodeurl@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-2.0.0.tgz#7b8ea898077d7e409d3ac45474ea38eaf0857a58"
+  integrity sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==
+
+enhanced-resolve@^5.17.1:
+  version "5.18.1"
+  resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz#728ab082f8b7b6836de51f1637aab5d3b9568faf"
+  integrity sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==
+  dependencies:
+    graceful-fs "^4.2.4"
+    tapable "^2.2.0"
+
+entities@^4.2.0, entities@^4.5.0:
   version "4.5.0"
   resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48"
   integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==
@@ -1739,6 +1901,11 @@
   dependencies:
     get-intrinsic "^1.2.4"
 
+es-define-property@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa"
+  integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==
+
 es-errors@^1.2.1, es-errors@^1.3.0:
   version "1.3.0"
   resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f"
@@ -1756,6 +1923,13 @@
   dependencies:
     es-errors "^1.3.0"
 
+es-object-atoms@^1.1.1:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz#1c4f2c4837327597ce69d2ca190a7fdd172338c1"
+  integrity sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==
+  dependencies:
+    es-errors "^1.3.0"
+
 es-set-tostringtag@^2.0.3:
   version "2.0.3"
   resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz#8bb60f0a440c2e4281962428438d58545af39777"
@@ -1824,15 +1998,22 @@
   resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
   integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
 
+eslint-compat-utils@^0.5.1:
+  version "0.5.1"
+  resolved "https://registry.yarnpkg.com/eslint-compat-utils/-/eslint-compat-utils-0.5.1.tgz#7fc92b776d185a70c4070d03fd26fde3d59652e4"
+  integrity sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q==
+  dependencies:
+    semver "^7.5.4"
+
 eslint-config-google@^0.14.0:
   version "0.14.0"
   resolved "https://registry.yarnpkg.com/eslint-config-google/-/eslint-config-google-0.14.0.tgz#4f5f8759ba6e11b424294a219dbfa18c508bcc1a"
   integrity sha512-WsbX4WbjuMvTdeVL6+J3rK1RGhCTqjsFjX7UMSMgZiyxxaNLkoJENbrGExzERFeoTpGw3F3FypTiWAP9ZXzkEw==
 
-eslint-config-prettier@^7.0.0:
-  version "7.2.0"
-  resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-7.2.0.tgz#f4a4bd2832e810e8cc7c1411ec85b3e85c0c53f9"
-  integrity sha512-rV4Qu0C3nfJKPOAhFujFxB7RMP+URFyQqqOZW9DMRD7ZDTFyjaIlETU3xzHELt++4ugC0+Jm084HQYkkJe+Ivg==
+eslint-config-prettier@9.1.0:
+  version "9.1.0"
+  resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz#31af3d94578645966c082fcb71a5846d3c94867f"
+  integrity sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==
 
 eslint-import-resolver-node@^0.3.9:
   version "0.3.9"
@@ -1850,20 +2031,29 @@
   dependencies:
     debug "^3.2.7"
 
-eslint-plugin-es@^3.0.0:
-  version "3.0.1"
-  resolved "https://registry.yarnpkg.com/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz#75a7cdfdccddc0589934aeeb384175f221c57893"
-  integrity sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==
+eslint-plugin-es-x@^7.8.0:
+  version "7.8.0"
+  resolved "https://registry.yarnpkg.com/eslint-plugin-es-x/-/eslint-plugin-es-x-7.8.0.tgz#a207aa08da37a7923f2a9599e6d3eb73f3f92b74"
+  integrity sha512-7Ds8+wAAoV3T+LAKeu39Y5BzXCrGKrcISfgKEqTS4BDN8SFEDQd0S43jiQ8vIa3wUKD07qitZdfzlenSi8/0qQ==
+  dependencies:
+    "@eslint-community/eslint-utils" "^4.1.2"
+    "@eslint-community/regexpp" "^4.11.0"
+    eslint-compat-utils "^0.5.1"
+
+eslint-plugin-es@^4.1.0:
+  version "4.1.0"
+  resolved "https://registry.yarnpkg.com/eslint-plugin-es/-/eslint-plugin-es-4.1.0.tgz#f0822f0c18a535a97c3e714e89f88586a7641ec9"
+  integrity sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==
   dependencies:
     eslint-utils "^2.0.0"
     regexpp "^3.0.0"
 
-eslint-plugin-html@^7.1.0:
-  version "7.1.0"
-  resolved "https://registry.yarnpkg.com/eslint-plugin-html/-/eslint-plugin-html-7.1.0.tgz#aec2a3772b40ccf51a5be4f972f07600539d3b3e"
-  integrity sha512-fNLRraV/e6j8e3XYOC9xgND4j+U7b1Rq+OygMlLcMg+wI/IpVbF+ubQa3R78EjKB9njT6TQOlcK5rFKBVVtdfg==
+eslint-plugin-html@^8.1.2:
+  version "8.1.2"
+  resolved "https://registry.yarnpkg.com/eslint-plugin-html/-/eslint-plugin-html-8.1.2.tgz#3a7a092d1e19e7e494014ed0747c5873856d7e1c"
+  integrity sha512-pbRchDV2SmqbCi/Ev/q3aAikzG9BcFe0IjjqjtMn8eTLq71ZUggyJB6CDmuwGAXmYZHrXI12XTfCqvgcnPRqGw==
   dependencies:
-    htmlparser2 "^8.0.1"
+    htmlparser2 "^9.1.0"
 
 eslint-plugin-import@^2.31.0:
   version "2.31.0"
@@ -1890,19 +2080,21 @@
     string.prototype.trimend "^1.0.8"
     tsconfig-paths "^3.15.0"
 
-eslint-plugin-jsdoc@^44.2.7:
-  version "44.2.7"
-  resolved "https://registry.yarnpkg.com/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-44.2.7.tgz#5ecdb46ddfca209ecd58fff972a4eb74b8dde599"
-  integrity sha512-PcAJO7Wh4xIHPT+StBRpEbWgwCpIrYk75zL31RMbduVVHpgiy3Y8aXQ6pdbRJOq0fxHuepWSEAve8ZrPWTSKRg==
+eslint-plugin-jsdoc@^50.6.11:
+  version "50.6.11"
+  resolved "https://registry.yarnpkg.com/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-50.6.11.tgz#36733620dafe03e8666df4cff449c7e9a8e1b1da"
+  integrity sha512-k4+MnBCGR8cuIB5MZ++FGd4gbXxjob2rX1Nq0q3nWFF4xSGZENTgTLZSjb+u9B8SAnP6lpGV2FJrBjllV3pVSg==
   dependencies:
-    "@es-joy/jsdoccomment" "~0.39.4"
+    "@es-joy/jsdoccomment" "~0.49.0"
     are-docs-informative "^0.0.2"
-    comment-parser "1.3.1"
-    debug "^4.3.4"
+    comment-parser "1.4.1"
+    debug "^4.3.6"
     escape-string-regexp "^4.0.0"
-    esquery "^1.5.0"
-    semver "^7.5.1"
-    spdx-expression-parse "^3.0.1"
+    espree "^10.1.0"
+    esquery "^1.6.0"
+    parse-imports-exports "^0.2.4"
+    semver "^7.6.3"
+    spdx-expression-parse "^4.0.0"
 
 eslint-plugin-lit@^1.15.0:
   version "1.15.0"
@@ -1913,49 +2105,59 @@
     parse5-htmlparser2-tree-adapter "^6.0.1"
     requireindex "^1.2.0"
 
-eslint-plugin-node@^11.1.0:
-  version "11.1.0"
-  resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz#c95544416ee4ada26740a30474eefc5402dc671d"
-  integrity sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==
+eslint-plugin-n@15.7.0:
+  version "15.7.0"
+  resolved "https://registry.yarnpkg.com/eslint-plugin-n/-/eslint-plugin-n-15.7.0.tgz#e29221d8f5174f84d18f2eb94765f2eeea033b90"
+  integrity sha512-jDex9s7D/Qial8AGVIHq4W7NswpUD5DPDL2RH8Lzd9EloWUuvUkHfv4FRLMipH5q2UtyurorBkPeNi1wVWNh3Q==
   dependencies:
-    eslint-plugin-es "^3.0.0"
-    eslint-utils "^2.0.0"
+    builtins "^5.0.1"
+    eslint-plugin-es "^4.1.0"
+    eslint-utils "^3.0.0"
     ignore "^5.1.1"
-    minimatch "^3.0.4"
-    resolve "^1.10.1"
-    semver "^6.1.0"
+    is-core-module "^2.11.0"
+    minimatch "^3.1.2"
+    resolve "^1.22.1"
+    semver "^7.3.8"
 
-eslint-plugin-prettier@^3.1.4:
-  version "3.4.1"
-  resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.1.tgz#e9ddb200efb6f3d05ffe83b1665a716af4a387e5"
-  integrity sha512-htg25EUYUeIhKHXjOinK4BgCcDwtLHjqaxCDsMy5nbnUMkKFvIhMVCp+5GFUXQ4Nr8lBsPqtGAqBenbpFqAA2g==
+eslint-plugin-n@^17.17.0:
+  version "17.17.0"
+  resolved "https://registry.yarnpkg.com/eslint-plugin-n/-/eslint-plugin-n-17.17.0.tgz#6644433d395c2ecae0b2fe58018807e85d8e0724"
+  integrity sha512-2VvPK7Mo73z1rDFb6pTvkH6kFibAmnTubFq5l83vePxu0WiY1s0LOtj2WHb6Sa40R3w4mnh8GFYbHBQyMlotKw==
+  dependencies:
+    "@eslint-community/eslint-utils" "^4.5.0"
+    enhanced-resolve "^5.17.1"
+    eslint-plugin-es-x "^7.8.0"
+    get-tsconfig "^4.8.1"
+    globals "^15.11.0"
+    ignore "^5.3.2"
+    minimatch "^9.0.5"
+    semver "^7.6.3"
+
+eslint-plugin-prettier@5.2.1:
+  version "5.2.1"
+  resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.1.tgz#d1c8f972d8f60e414c25465c163d16f209411f95"
+  integrity sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==
   dependencies:
     prettier-linter-helpers "^1.0.0"
+    synckit "^0.9.1"
 
-eslint-plugin-prettier@^4.2.1:
-  version "4.2.1"
-  resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz#651cbb88b1dab98bfd42f017a12fa6b2d993f94b"
-  integrity sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==
+eslint-plugin-prettier@^5.4.0:
+  version "5.4.0"
+  resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-5.4.0.tgz#54d4748904e58eaf1ffe26c4bffa4986ca7f952b"
+  integrity sha512-BvQOvUhkVQM1i63iMETK9Hjud9QhqBnbtT1Zc642p9ynzBuCe5pybkOnvqZIBypXmMlsGcnU4HZ8sCTPfpAexA==
   dependencies:
     prettier-linter-helpers "^1.0.0"
+    synckit "^0.11.0"
 
 eslint-plugin-regex@^1.10.0:
   version "1.10.0"
   resolved "https://registry.yarnpkg.com/eslint-plugin-regex/-/eslint-plugin-regex-1.10.0.tgz#d182cedbeb89eb03cd8e53f750f6f92e14fa6f9c"
   integrity sha512-C8/qYKkkbIb0epxKzaz4aw7oVAOmm19fJpR/moUrUToq/vc4xW4sEKMlTQqH6EtNGpvLjYsbbZRlWNWwQGeTSA==
 
-eslint-scope@^5.1.1:
-  version "5.1.1"
-  resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c"
-  integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==
-  dependencies:
-    esrecurse "^4.3.0"
-    estraverse "^4.1.1"
-
-eslint-scope@^7.2.2:
-  version "7.2.2"
-  resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f"
-  integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==
+eslint-scope@^8.3.0:
+  version "8.3.0"
+  resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-8.3.0.tgz#10cd3a918ffdd722f5f3f7b5b83db9b23c87340d"
+  integrity sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==
   dependencies:
     esrecurse "^4.3.0"
     estraverse "^5.2.0"
@@ -1967,75 +2169,84 @@
   dependencies:
     eslint-visitor-keys "^1.1.0"
 
+eslint-utils@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672"
+  integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==
+  dependencies:
+    eslint-visitor-keys "^2.0.0"
+
 eslint-visitor-keys@^1.1.0:
   version "1.3.0"
   resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e"
   integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==
 
-eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3:
+eslint-visitor-keys@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303"
+  integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==
+
+eslint-visitor-keys@^3.4.3:
   version "3.4.3"
   resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800"
   integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==
 
-eslint@^7.10.0, eslint@^8.57.1:
-  version "8.57.1"
-  resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.57.1.tgz#7df109654aba7e3bbe5c8eae533c5e461d3c6ca9"
-  integrity sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==
+eslint-visitor-keys@^4.2.0:
+  version "4.2.0"
+  resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz#687bacb2af884fcdda8a6e7d65c606f46a14cd45"
+  integrity sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==
+
+eslint@8.57.1, eslint@^9.26.0:
+  version "9.26.0"
+  resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.26.0.tgz#978fe029adc2aceed28ab437bca876e83461c3b4"
+  integrity sha512-Hx0MOjPh6uK9oq9nVsATZKE/Wlbai7KFjfCuw9UHaguDW3x+HF0O5nIi3ud39TWgrTjTO5nHxmL3R1eANinWHQ==
   dependencies:
     "@eslint-community/eslint-utils" "^4.2.0"
-    "@eslint-community/regexpp" "^4.6.1"
-    "@eslint/eslintrc" "^2.1.4"
-    "@eslint/js" "8.57.1"
-    "@humanwhocodes/config-array" "^0.13.0"
+    "@eslint-community/regexpp" "^4.12.1"
+    "@eslint/config-array" "^0.20.0"
+    "@eslint/config-helpers" "^0.2.1"
+    "@eslint/core" "^0.13.0"
+    "@eslint/eslintrc" "^3.3.1"
+    "@eslint/js" "9.26.0"
+    "@eslint/plugin-kit" "^0.2.8"
+    "@humanfs/node" "^0.16.6"
     "@humanwhocodes/module-importer" "^1.0.1"
-    "@nodelib/fs.walk" "^1.2.8"
-    "@ungap/structured-clone" "^1.2.0"
+    "@humanwhocodes/retry" "^0.4.2"
+    "@modelcontextprotocol/sdk" "^1.8.0"
+    "@types/estree" "^1.0.6"
+    "@types/json-schema" "^7.0.15"
     ajv "^6.12.4"
     chalk "^4.0.0"
-    cross-spawn "^7.0.2"
+    cross-spawn "^7.0.6"
     debug "^4.3.2"
-    doctrine "^3.0.0"
     escape-string-regexp "^4.0.0"
-    eslint-scope "^7.2.2"
-    eslint-visitor-keys "^3.4.3"
-    espree "^9.6.1"
-    esquery "^1.4.2"
+    eslint-scope "^8.3.0"
+    eslint-visitor-keys "^4.2.0"
+    espree "^10.3.0"
+    esquery "^1.5.0"
     esutils "^2.0.2"
     fast-deep-equal "^3.1.3"
-    file-entry-cache "^6.0.1"
+    file-entry-cache "^8.0.0"
     find-up "^5.0.0"
     glob-parent "^6.0.2"
-    globals "^13.19.0"
-    graphemer "^1.4.0"
     ignore "^5.2.0"
     imurmurhash "^0.1.4"
     is-glob "^4.0.0"
-    is-path-inside "^3.0.3"
-    js-yaml "^4.1.0"
     json-stable-stringify-without-jsonify "^1.0.1"
-    levn "^0.4.1"
     lodash.merge "^4.6.2"
     minimatch "^3.1.2"
     natural-compare "^1.4.0"
     optionator "^0.9.3"
-    strip-ansi "^6.0.1"
-    text-table "^0.2.0"
+    zod "^3.24.2"
 
-espree@^9.6.0, espree@^9.6.1:
-  version "9.6.1"
-  resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f"
-  integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==
+espree@^10.0.1, espree@^10.1.0, espree@^10.3.0:
+  version "10.3.0"
+  resolved "https://registry.yarnpkg.com/espree/-/espree-10.3.0.tgz#29267cf5b0cb98735b65e64ba07e0ed49d1eed8a"
+  integrity sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==
   dependencies:
-    acorn "^8.9.0"
+    acorn "^8.14.0"
     acorn-jsx "^5.3.2"
-    eslint-visitor-keys "^3.4.1"
-
-esquery@^1.4.2:
-  version "1.6.0"
-  resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.6.0.tgz#91419234f804d852a82dceec3e16cdc22cf9dae7"
-  integrity sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==
-  dependencies:
-    estraverse "^5.1.0"
+    eslint-visitor-keys "^4.2.0"
 
 esquery@^1.5.0:
   version "1.5.0"
@@ -2044,6 +2255,13 @@
   dependencies:
     estraverse "^5.1.0"
 
+esquery@^1.6.0:
+  version "1.6.0"
+  resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.6.0.tgz#91419234f804d852a82dceec3e16cdc22cf9dae7"
+  integrity sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==
+  dependencies:
+    estraverse "^5.1.0"
+
 esrecurse@^4.3.0:
   version "4.3.0"
   resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921"
@@ -2051,11 +2269,6 @@
   dependencies:
     estraverse "^5.2.0"
 
-estraverse@^4.1.1:
-  version "4.3.0"
-  resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d"
-  integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==
-
 estraverse@^5.1.0, estraverse@^5.2.0:
   version "5.3.0"
   resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123"
@@ -2076,6 +2289,18 @@
   resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887"
   integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==
 
+eventsource-parser@^3.0.1:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/eventsource-parser/-/eventsource-parser-3.0.1.tgz#5e358dba9a55ba64ca90da883c4ca35bd82467bd"
+  integrity sha512-VARTJ9CYeuQYb0pZEPbzi740OWFgpHe7AYJ2WFZVnUDUQp5Dk2yJUgF36YsZ81cOyxT0QxmXD2EQpapAouzWVA==
+
+eventsource@^3.0.2:
+  version "3.0.6"
+  resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-3.0.6.tgz#5c4b24cd70c0323eed2651a5ee07bd4bc391e656"
+  integrity sha512-l19WpE2m9hSuyP06+FbuUUf1G+R0SFLrtQfbRb9PRr+oimOfxQhgGCbVaXg5IvZyyTThJsxh6L/srkMiCeBPDA==
+  dependencies:
+    eventsource-parser "^3.0.1"
+
 execa@^5.0.0:
   version "5.1.1"
   resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd"
@@ -2104,6 +2329,44 @@
     snapdragon "^0.8.1"
     to-regex "^3.0.1"
 
+express-rate-limit@^7.5.0:
+  version "7.5.0"
+  resolved "https://registry.yarnpkg.com/express-rate-limit/-/express-rate-limit-7.5.0.tgz#6a67990a724b4fbbc69119419feef50c51e8b28f"
+  integrity sha512-eB5zbQh5h+VenMPM3fh+nw1YExi5nMr6HUCR62ELSP11huvxm/Uir1H1QEyTkk5QX6A58pX6NmaTMceKZ0Eodg==
+
+express@^5.0.1:
+  version "5.1.0"
+  resolved "https://registry.yarnpkg.com/express/-/express-5.1.0.tgz#d31beaf715a0016f0d53f47d3b4d7acf28c75cc9"
+  integrity sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==
+  dependencies:
+    accepts "^2.0.0"
+    body-parser "^2.2.0"
+    content-disposition "^1.0.0"
+    content-type "^1.0.5"
+    cookie "^0.7.1"
+    cookie-signature "^1.2.1"
+    debug "^4.4.0"
+    encodeurl "^2.0.0"
+    escape-html "^1.0.3"
+    etag "^1.8.1"
+    finalhandler "^2.1.0"
+    fresh "^2.0.0"
+    http-errors "^2.0.0"
+    merge-descriptors "^2.0.0"
+    mime-types "^3.0.0"
+    on-finished "^2.4.1"
+    once "^1.4.0"
+    parseurl "^1.3.3"
+    proxy-addr "^2.0.7"
+    qs "^6.14.0"
+    range-parser "^1.2.1"
+    router "^2.2.0"
+    send "^1.1.0"
+    serve-static "^2.2.0"
+    statuses "^2.0.1"
+    type-is "^2.0.1"
+    vary "^1.1.2"
+
 extend-shallow@^2.0.1:
   version "2.0.1"
   resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f"
@@ -2164,7 +2427,7 @@
     merge2 "^1.2.3"
     micromatch "^3.1.10"
 
-fast-glob@^3.2.2, fast-glob@^3.2.9:
+fast-glob@^3.2.2:
   version "3.3.2"
   resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129"
   integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==
@@ -2175,6 +2438,17 @@
     merge2 "^1.3.0"
     micromatch "^4.0.4"
 
+fast-glob@^3.3.2:
+  version "3.3.3"
+  resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.3.tgz#d06d585ce8dba90a16b0505c543c3ccfb3aeb818"
+  integrity sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==
+  dependencies:
+    "@nodelib/fs.stat" "^2.0.2"
+    "@nodelib/fs.walk" "^1.2.3"
+    glob-parent "^5.1.2"
+    merge2 "^1.3.0"
+    micromatch "^4.0.8"
+
 fast-json-stable-stringify@^2.0.0:
   version "2.1.0"
   resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
@@ -2199,12 +2473,12 @@
   dependencies:
     escape-string-regexp "^1.0.5"
 
-file-entry-cache@^6.0.1:
-  version "6.0.1"
-  resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027"
-  integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==
+file-entry-cache@^8.0.0:
+  version "8.0.0"
+  resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-8.0.0.tgz#7787bddcf1131bffb92636c69457bbc0edd6d81f"
+  integrity sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==
   dependencies:
-    flat-cache "^3.0.4"
+    flat-cache "^4.0.0"
 
 fill-range@^4.0.0:
   version "4.0.0"
@@ -2223,6 +2497,25 @@
   dependencies:
     to-regex-range "^5.0.1"
 
+fill-range@^7.1.1:
+  version "7.1.1"
+  resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292"
+  integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==
+  dependencies:
+    to-regex-range "^5.0.1"
+
+finalhandler@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-2.1.0.tgz#72306373aa89d05a8242ed569ed86a1bff7c561f"
+  integrity sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==
+  dependencies:
+    debug "^4.4.0"
+    encodeurl "^2.0.0"
+    escape-html "^1.0.3"
+    on-finished "^2.4.1"
+    parseurl "^1.3.3"
+    statuses "^2.0.1"
+
 find-replace@^3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/find-replace/-/find-replace-3.0.0.tgz#3e7e23d3b05167a76f770c9fbd5258b0def68c38"
@@ -2246,14 +2539,13 @@
     locate-path "^6.0.0"
     path-exists "^4.0.0"
 
-flat-cache@^3.0.4:
-  version "3.2.0"
-  resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee"
-  integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==
+flat-cache@^4.0.0:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-4.0.1.tgz#0ece39fcb14ee012f4b0410bd33dd9c1f011127c"
+  integrity sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==
   dependencies:
     flatted "^3.2.9"
-    keyv "^4.5.3"
-    rimraf "^3.0.2"
+    keyv "^4.5.4"
 
 flatted@^3.2.9:
   version "3.3.1"
@@ -2272,6 +2564,11 @@
   resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
   integrity sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==
 
+forwarded@0.2.0:
+  version "0.2.0"
+  resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811"
+  integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==
+
 fragment-cache@^0.2.1:
   version "0.2.1"
   resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19"
@@ -2279,6 +2576,11 @@
   dependencies:
     map-cache "^0.2.2"
 
+fresh@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/fresh/-/fresh-2.0.0.tgz#8dd7df6a1b3a1b3a5cf186c05a5dd267622635a4"
+  integrity sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==
+
 fresh@~0.5.2:
   version "0.5.2"
   resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7"
@@ -2330,6 +2632,30 @@
     has-symbols "^1.0.3"
     hasown "^2.0.0"
 
+get-intrinsic@^1.2.5, get-intrinsic@^1.3.0:
+  version "1.3.0"
+  resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01"
+  integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==
+  dependencies:
+    call-bind-apply-helpers "^1.0.2"
+    es-define-property "^1.0.1"
+    es-errors "^1.3.0"
+    es-object-atoms "^1.1.1"
+    function-bind "^1.1.2"
+    get-proto "^1.0.1"
+    gopd "^1.2.0"
+    has-symbols "^1.1.0"
+    hasown "^2.0.2"
+    math-intrinsics "^1.1.0"
+
+get-proto@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1"
+  integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==
+  dependencies:
+    dunder-proto "^1.0.1"
+    es-object-atoms "^1.0.0"
+
 get-stream@^6.0.0:
   version "6.0.1"
   resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7"
@@ -2344,6 +2670,13 @@
     es-errors "^1.3.0"
     get-intrinsic "^1.2.4"
 
+get-tsconfig@^4.8.1:
+  version "4.10.0"
+  resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.10.0.tgz#403a682b373a823612475a4c2928c7326fc0f6bb"
+  integrity sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==
+  dependencies:
+    resolve-pkg-maps "^1.0.0"
+
 get-value@^2.0.3, get-value@^2.0.6:
   version "2.0.6"
   resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28"
@@ -2388,12 +2721,15 @@
     once "^1.3.0"
     path-is-absolute "^1.0.0"
 
-globals@^13.19.0:
-  version "13.24.0"
-  resolved "https://registry.yarnpkg.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171"
-  integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==
-  dependencies:
-    type-fest "^0.20.2"
+globals@^14.0.0:
+  version "14.0.0"
+  resolved "https://registry.yarnpkg.com/globals/-/globals-14.0.0.tgz#898d7413c29babcf6bafe56fcadded858ada724e"
+  integrity sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==
+
+globals@^15.11.0:
+  version "15.15.0"
+  resolved "https://registry.yarnpkg.com/globals/-/globals-15.15.0.tgz#7c4761299d41c32b075715a4ce1ede7897ff72a8"
+  integrity sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==
 
 globalthis@^1.0.3:
   version "1.0.4"
@@ -2403,18 +2739,6 @@
     define-properties "^1.2.1"
     gopd "^1.0.1"
 
-globby@^11.1.0:
-  version "11.1.0"
-  resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b"
-  integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==
-  dependencies:
-    array-union "^2.1.0"
-    dir-glob "^3.0.1"
-    fast-glob "^3.2.9"
-    ignore "^5.2.0"
-    merge2 "^1.4.1"
-    slash "^3.0.0"
-
 google-protobuf@^3.6.1:
   version "3.21.2"
   resolved "https://registry.yarnpkg.com/google-protobuf/-/google-protobuf-3.21.2.tgz#4580a2bea8bbb291ee579d1fefb14d6fa3070ea4"
@@ -2427,7 +2751,12 @@
   dependencies:
     get-intrinsic "^1.1.3"
 
-graceful-fs@^4.1.2:
+gopd@^1.2.0:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1"
+  integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==
+
+graceful-fs@^4.1.2, graceful-fs@^4.2.4:
   version "4.2.11"
   resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3"
   integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==
@@ -2437,26 +2766,26 @@
   resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6"
   integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==
 
-gts@^3.1.1:
-  version "3.1.1"
-  resolved "https://registry.yarnpkg.com/gts/-/gts-3.1.1.tgz#c7347cf8f8ea32577909659b22bf698ac5ca8082"
-  integrity sha512-Jw44aBbzMnd1vtZs7tZt3LMstKQukCBg7N4CKVGzviIQ45Cz5b9lxDJGXVKj/9ySuGv6TYEeijZJGbiiVcM27w==
+gts@^6.0.2:
+  version "6.0.2"
+  resolved "https://registry.yarnpkg.com/gts/-/gts-6.0.2.tgz#f7ff83fd786de92384740da4409f954261a0a62c"
+  integrity sha512-lp9+eDzzm6TYqiBpgGY00EInxBHFTJiU5brsVp11qXCJEw7Q6WNNngja0spZeqSFWSquaRuHQUuWxdZLaxnKmw==
   dependencies:
-    "@typescript-eslint/eslint-plugin" "^4.2.0"
-    "@typescript-eslint/parser" "^4.2.0"
-    chalk "^4.1.0"
-    eslint "^7.10.0"
-    eslint-config-prettier "^7.0.0"
-    eslint-plugin-node "^11.1.0"
-    eslint-plugin-prettier "^3.1.4"
+    "@typescript-eslint/eslint-plugin" "5.62.0"
+    "@typescript-eslint/parser" "5.62.0"
+    chalk "^4.1.2"
+    eslint "8.57.1"
+    eslint-config-prettier "9.1.0"
+    eslint-plugin-n "15.7.0"
+    eslint-plugin-prettier "5.2.1"
     execa "^5.0.0"
     inquirer "^7.3.3"
     json5 "^2.1.3"
     meow "^9.0.0"
     ncp "^2.0.0"
-    prettier "^2.1.2"
-    rimraf "^3.0.2"
-    write-file-atomic "^3.0.3"
+    prettier "3.3.3"
+    rimraf "3.0.2"
+    write-file-atomic "^4.0.0"
 
 hard-rejection@^2.1.0:
   version "2.1.0"
@@ -2495,6 +2824,11 @@
   resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8"
   integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==
 
+has-symbols@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338"
+  integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==
+
 has-tostringtag@^1.0.0, has-tostringtag@^1.0.2:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc"
@@ -2552,15 +2886,15 @@
   dependencies:
     lru-cache "^6.0.0"
 
-htmlparser2@^8.0.1:
-  version "8.0.2"
-  resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-8.0.2.tgz#f002151705b383e62433b5cf466f5b716edaec21"
-  integrity sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==
+htmlparser2@^9.1.0:
+  version "9.1.0"
+  resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-9.1.0.tgz#cdb498d8a75a51f739b61d3f718136c369bc8c23"
+  integrity sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ==
   dependencies:
     domelementtype "^2.3.0"
     domhandler "^5.0.3"
-    domutils "^3.0.1"
-    entities "^4.4.0"
+    domutils "^3.1.0"
+    entities "^4.5.0"
 
 http-assert@^1.3.0:
   version "1.5.0"
@@ -2570,6 +2904,17 @@
     deep-equal "~1.0.1"
     http-errors "~1.8.0"
 
+http-errors@2.0.0, http-errors@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3"
+  integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==
+  dependencies:
+    depd "2.0.0"
+    inherits "2.0.4"
+    setprototypeof "1.2.0"
+    statuses "2.0.1"
+    toidentifier "1.0.1"
+
 http-errors@^1.6.3, http-errors@^1.7.3, http-errors@~1.8.0:
   version "1.8.1"
   resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.8.1.tgz#7c3f28577cbc8a207388455dbd62295ed07bd68c"
@@ -2596,6 +2941,13 @@
   resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0"
   integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==
 
+iconv-lite@0.6.3, iconv-lite@^0.6.3:
+  version "0.6.3"
+  resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501"
+  integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==
+  dependencies:
+    safer-buffer ">= 2.1.2 < 3.0.0"
+
 iconv-lite@^0.4.24:
   version "0.4.24"
   resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
@@ -2608,7 +2960,7 @@
   resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.0.tgz#67418ae40d34d6999c95ff56016759c718c82f78"
   integrity sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==
 
-ignore@^5.2.0:
+ignore@^5.2.0, ignore@^5.3.1, ignore@^5.3.2:
   version "5.3.2"
   resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5"
   integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==
@@ -2682,6 +3034,11 @@
   resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.8.tgz#ae05948f6b075435ed3307acce04629da8cdbf48"
   integrity sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==
 
+ipaddr.js@1.9.1:
+  version "1.9.1"
+  resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3"
+  integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==
+
 is-accessor-descriptor@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.1.tgz#3223b10628354644b86260db29b3e693f5ceedd4"
@@ -2741,6 +3098,13 @@
   resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055"
   integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==
 
+is-core-module@^2.11.0, is-core-module@^2.16.0:
+  version "2.16.1"
+  resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.16.1.tgz#2a98801a849f43e2add644fbb6bc6229b19a4ef4"
+  integrity sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==
+  dependencies:
+    hasown "^2.0.2"
+
 is-core-module@^2.13.0, is-core-module@^2.15.1:
   version "2.15.1"
   resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.15.1.tgz#a7363a25bee942fefab0de13bf6aa372c82dcc37"
@@ -2869,11 +3233,6 @@
   resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
   integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
 
-is-path-inside@^3.0.3:
-  version "3.0.3"
-  resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283"
-  integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==
-
 is-plain-obj@^1.1.0:
   version "1.1.0"
   resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e"
@@ -2886,6 +3245,11 @@
   dependencies:
     isobject "^3.0.1"
 
+is-promise@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-4.0.0.tgz#42ff9f84206c1991d26debf520dd5c01042dd2f3"
+  integrity sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==
+
 is-regex@^1.1.4:
   version "1.1.4"
   resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958"
@@ -2927,11 +3291,6 @@
   dependencies:
     which-typed-array "^1.1.14"
 
-is-typedarray@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
-  integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==
-
 is-weakref@^1.0.2:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2"
@@ -2995,10 +3354,10 @@
   dependencies:
     argparse "^2.0.1"
 
-jsdoc-type-pratt-parser@~4.0.0:
-  version "4.0.0"
-  resolved "https://registry.yarnpkg.com/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.0.0.tgz#136f0571a99c184d84ec84662c45c29ceff71114"
-  integrity sha512-YtOli5Cmzy3q4dP26GraSOeAhqecewG04hoO8DY56CH4KJ9Fvv5qKWUCCo3HZob7esJQHCv6/+bnTy72xZZaVQ==
+jsdoc-type-pratt-parser@~4.1.0:
+  version "4.1.0"
+  resolved "https://registry.yarnpkg.com/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.1.0.tgz#ff6b4a3f339c34a6c188cbf50a16087858d22113"
+  integrity sha512-Hicd6JK5Njt2QB6XYFS7ok9e37O8AYk3jTcppG4YVQnYjOemymvTcmc7OWsmq/Qqj5TdRFO5/x/tIPmBeRtGHg==
 
 json-buffer@3.0.1:
   version "3.0.1"
@@ -3044,7 +3403,7 @@
   dependencies:
     tsscmp "1.0.6"
 
-keyv@^4.5.3:
+keyv@^4.5.4:
   version "4.5.4"
   resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93"
   integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==
@@ -3251,11 +3610,21 @@
   dependencies:
     object-visit "^1.0.0"
 
+math-intrinsics@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9"
+  integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==
+
 media-typer@0.3.0:
   version "0.3.0"
   resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
   integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==
 
+media-typer@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-1.1.0.tgz#6ab74b8f2d3320f2064b2a87a38e7931ff3a5561"
+  integrity sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==
+
 memorystream@^0.3.1:
   version "0.3.1"
   resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2"
@@ -3279,12 +3648,17 @@
     type-fest "^0.18.0"
     yargs-parser "^20.2.3"
 
+merge-descriptors@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-2.0.0.tgz#ea922f660635a2249ee565e0449f951e6b603808"
+  integrity sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==
+
 merge-stream@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"
   integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==
 
-merge2@^1.2.3, merge2@^1.3.0, merge2@^1.4.1:
+merge2@^1.2.3, merge2@^1.3.0:
   version "1.4.1"
   resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae"
   integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
@@ -3316,11 +3690,24 @@
     braces "^3.0.2"
     picomatch "^2.3.1"
 
+micromatch@^4.0.8:
+  version "4.0.8"
+  resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202"
+  integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==
+  dependencies:
+    braces "^3.0.3"
+    picomatch "^2.3.1"
+
 mime-db@1.52.0:
   version "1.52.0"
   resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70"
   integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==
 
+mime-db@^1.54.0:
+  version "1.54.0"
+  resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.54.0.tgz#cddb3ee4f9c64530dff640236661d42cb6a314f5"
+  integrity sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==
+
 mime-types@^2.1.18, mime-types@^2.1.27, mime-types@~2.1.24, mime-types@~2.1.34:
   version "2.1.35"
   resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a"
@@ -3328,6 +3715,13 @@
   dependencies:
     mime-db "1.52.0"
 
+mime-types@^3.0.0, mime-types@^3.0.1:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-3.0.1.tgz#b1d94d6997a9b32fd69ebaed0db73de8acb519ce"
+  integrity sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==
+  dependencies:
+    mime-db "^1.54.0"
+
 mimic-fn@^2.1.0:
   version "2.1.0"
   resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
@@ -3338,13 +3732,20 @@
   resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869"
   integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==
 
-minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2:
+minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2:
   version "3.1.2"
   resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
   integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
   dependencies:
     brace-expansion "^1.1.7"
 
+minimatch@^9.0.4, minimatch@^9.0.5:
+  version "9.0.5"
+  resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5"
+  integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==
+  dependencies:
+    brace-expansion "^2.0.1"
+
 minimist-options@4.1.0:
   version "4.1.0"
   resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619"
@@ -3416,11 +3817,6 @@
     snapdragon "^0.8.1"
     to-regex "^3.0.1"
 
-natural-compare-lite@^1.4.0:
-  version "1.4.0"
-  resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4"
-  integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==
-
 natural-compare@^1.4.0:
   version "1.4.0"
   resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
@@ -3436,6 +3832,11 @@
   resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd"
   integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==
 
+negotiator@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-1.0.0.tgz#b6c91bb47172d69f93cfd7c357bbb529019b5f6a"
+  integrity sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==
+
 nice-try@^1.0.4:
   version "1.0.5"
   resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366"
@@ -3488,6 +3889,11 @@
   dependencies:
     path-key "^3.0.0"
 
+object-assign@^4:
+  version "4.1.1"
+  resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
+  integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==
+
 object-copy@^0.1.0:
   version "0.1.0"
   resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c"
@@ -3502,6 +3908,11 @@
   resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.2.tgz#dea0088467fb991e67af4058147a24824a3043ff"
   integrity sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==
 
+object-inspect@^1.13.3:
+  version "1.13.4"
+  resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.4.tgz#8375265e21bc20d0fa582c22e1b13485d6e00213"
+  integrity sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==
+
 object-keys@^1.1.1:
   version "1.1.1"
   resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
@@ -3559,14 +3970,14 @@
     define-properties "^1.2.1"
     es-object-atoms "^1.0.0"
 
-on-finished@^2.3.0:
+on-finished@^2.3.0, on-finished@^2.4.1:
   version "2.4.1"
   resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f"
   integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==
   dependencies:
     ee-first "1.1.1"
 
-once@^1.3.0:
+once@^1.3.0, once@^1.4.0:
   version "1.4.0"
   resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
   integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==
@@ -3651,6 +4062,13 @@
   dependencies:
     callsites "^3.0.0"
 
+parse-imports-exports@^0.2.4:
+  version "0.2.4"
+  resolved "https://registry.yarnpkg.com/parse-imports-exports/-/parse-imports-exports-0.2.4.tgz#e3fb3b5e264cfb55c25b5dfcbe7f410f8dc4e7af"
+  integrity sha512-4s6vd6dx1AotCx/RCI2m7t7GCh5bDRUtGNvRfHSP2wbBQdMi67pPe7mtzmgwcaQ8VKK/6IB7Glfyu3qdZJPybQ==
+  dependencies:
+    parse-statements "1.0.11"
+
 parse-json@^4.0.0:
   version "4.0.0"
   resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0"
@@ -3669,6 +4087,11 @@
     json-parse-even-better-errors "^2.3.0"
     lines-and-columns "^1.1.6"
 
+parse-statements@1.0.11:
+  version "1.0.11"
+  resolved "https://registry.yarnpkg.com/parse-statements/-/parse-statements-1.0.11.tgz#8787c5d383ae5746568571614be72b0689584344"
+  integrity sha512-HlsyYdMBnbPQ9Jr/VgJ1YF4scnldvJpJxCVx6KgqPL4dxppsWrJHCIIxQXMJrqGnsRkNPATbeMJ8Yxu7JMsYcA==
+
 parse5-htmlparser2-tree-adapter@^6.0.1:
   version "6.0.1"
   resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz#2cdf9ad823321140370d4dbf5d3e92c7c8ddc6e6"
@@ -3686,7 +4109,7 @@
   resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b"
   integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==
 
-parseurl@^1.3.2:
+parseurl@^1.3.2, parseurl@^1.3.3:
   version "1.3.3"
   resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4"
   integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==
@@ -3726,6 +4149,11 @@
   resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
   integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
 
+path-to-regexp@^8.0.0:
+  version "8.2.0"
+  resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-8.2.0.tgz#73990cc29e57a3ff2a0d914095156df5db79e8b4"
+  integrity sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==
+
 path-type@^3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f"
@@ -3733,11 +4161,6 @@
   dependencies:
     pify "^3.0.0"
 
-path-type@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
-  integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
-
 picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.3.1:
   version "2.3.1"
   resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
@@ -3753,6 +4176,11 @@
   resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176"
   integrity sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==
 
+pkce-challenge@^5.0.0:
+  version "5.0.0"
+  resolved "https://registry.yarnpkg.com/pkce-challenge/-/pkce-challenge-5.0.0.tgz#c3a405cb49e272094a38e890a2b51da0228c4d97"
+  integrity sha512-ueGLflrrnvwB3xuo/uGob5pd5FN7l0MsLf0Z87o/UQmRtwjvfylfc9MurIxRAWywCYTgrvpXBcqjV4OfCYGCIQ==
+
 portfinder@^1.0.32:
   version "1.0.32"
   resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.32.tgz#2fe1b9e58389712429dc2bea5beb2146146c7f81"
@@ -3784,7 +4212,12 @@
   dependencies:
     fast-diff "^1.1.2"
 
-prettier@^2.1.2, prettier@^2.8.8:
+prettier@3.3.3:
+  version "3.3.3"
+  resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.3.3.tgz#30c54fe0be0d8d12e6ae61dbb10109ea00d53105"
+  integrity sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==
+
+prettier@^2.8.8:
   version "2.8.8"
   resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da"
   integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==
@@ -3808,11 +4241,26 @@
     "@types/node" "^10.1.0"
     long "^4.0.0"
 
+proxy-addr@^2.0.7:
+  version "2.0.7"
+  resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025"
+  integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==
+  dependencies:
+    forwarded "0.2.0"
+    ipaddr.js "1.9.1"
+
 punycode@^2.1.0, punycode@^2.1.1:
   version "2.3.1"
   resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5"
   integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==
 
+qs@^6.14.0:
+  version "6.14.0"
+  resolved "https://registry.yarnpkg.com/qs/-/qs-6.14.0.tgz#c63fa40680d2c5c941412a0e899c89af60c0a930"
+  integrity sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==
+  dependencies:
+    side-channel "^1.1.0"
+
 queue-microtask@^1.2.2:
   version "1.2.3"
   resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
@@ -3823,6 +4271,21 @@
   resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f"
   integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==
 
+range-parser@^1.2.1:
+  version "1.2.1"
+  resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031"
+  integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==
+
+raw-body@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-3.0.0.tgz#25b3476f07a51600619dae3fe82ddc28a36e5e0f"
+  integrity sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==
+  dependencies:
+    bytes "3.1.2"
+    http-errors "2.0.0"
+    iconv-lite "0.6.3"
+    unpipe "1.0.0"
+
 read-pkg-up@^7.0.1:
   version "7.0.1"
   resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507"
@@ -3932,12 +4395,17 @@
     http-errors "~1.6.2"
     path-is-absolute "1.0.1"
 
+resolve-pkg-maps@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz#616b3dc2c57056b5588c31cdf4b3d64db133720f"
+  integrity sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==
+
 resolve-url@^0.2.1:
   version "0.2.1"
   resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a"
   integrity sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==
 
-resolve@^1.10.0, resolve@^1.10.1, resolve@^1.19.0, resolve@^1.22.4:
+resolve@^1.10.0, resolve@^1.19.0, resolve@^1.22.4:
   version "1.22.8"
   resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d"
   integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==
@@ -3946,6 +4414,15 @@
     path-parse "^1.0.7"
     supports-preserve-symlinks-flag "^1.0.0"
 
+resolve@^1.22.1:
+  version "1.22.10"
+  resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.10.tgz#b663e83ffb09bbf2386944736baae803029b8b39"
+  integrity sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==
+  dependencies:
+    is-core-module "^2.16.0"
+    path-parse "^1.0.7"
+    supports-preserve-symlinks-flag "^1.0.0"
+
 restore-cursor@^3.1.0:
   version "3.1.0"
   resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e"
@@ -3964,7 +4441,7 @@
   resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"
   integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==
 
-rimraf@^3.0.2:
+rimraf@3.0.2:
   version "3.0.2"
   resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
   integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==
@@ -4007,6 +4484,17 @@
     "@rollup/rollup-win32-x64-msvc" "4.40.0"
     fsevents "~2.3.2"
 
+router@^2.2.0:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/router/-/router-2.2.0.tgz#019be620b711c87641167cc79b99090f00b146ef"
+  integrity sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==
+  dependencies:
+    debug "^4.4.0"
+    depd "^2.0.0"
+    is-promise "^4.0.0"
+    parseurl "^1.3.3"
+    path-to-regexp "^8.0.0"
+
 run-async@^2.4.0:
   version "2.4.1"
   resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455"
@@ -4057,7 +4545,7 @@
   dependencies:
     ret "~0.1.10"
 
-"safer-buffer@>= 2.1.2 < 3":
+"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0":
   version "2.1.2"
   resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
   integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
@@ -4072,18 +4560,50 @@
   resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004"
   integrity sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==
 
-semver@^6.1.0, semver@^6.3.1:
+semver@^6.3.1:
   version "6.3.1"
   resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4"
   integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==
 
-semver@^7.3.4, semver@^7.3.7, semver@^7.5.1:
+semver@^7.0.0, semver@^7.3.8, semver@^7.5.4, semver@^7.6.0, semver@^7.6.3:
+  version "7.7.1"
+  resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.1.tgz#abd5098d82b18c6c81f6074ff2647fd3e7220c9f"
+  integrity sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==
+
+semver@^7.3.4:
   version "7.5.4"
   resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e"
   integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==
   dependencies:
     lru-cache "^6.0.0"
 
+send@^1.1.0, send@^1.2.0:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/send/-/send-1.2.0.tgz#32a7554fb777b831dfa828370f773a3808d37212"
+  integrity sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==
+  dependencies:
+    debug "^4.3.5"
+    encodeurl "^2.0.0"
+    escape-html "^1.0.3"
+    etag "^1.8.1"
+    fresh "^2.0.0"
+    http-errors "^2.0.0"
+    mime-types "^3.0.1"
+    ms "^2.1.3"
+    on-finished "^2.4.1"
+    range-parser "^1.2.1"
+    statuses "^2.0.1"
+
+serve-static@^2.2.0:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-2.2.0.tgz#9c02564ee259bdd2251b82d659a2e7e1938d66f9"
+  integrity sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==
+  dependencies:
+    encodeurl "^2.0.0"
+    escape-html "^1.0.3"
+    parseurl "^1.3.3"
+    send "^1.2.0"
+
 set-blocking@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
@@ -4160,6 +4680,35 @@
   resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.1.tgz#6dbf4db75515ad5bac63b4f1894c3a154c766680"
   integrity sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==
 
+side-channel-list@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/side-channel-list/-/side-channel-list-1.0.0.tgz#10cb5984263115d3b7a0e336591e290a830af8ad"
+  integrity sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==
+  dependencies:
+    es-errors "^1.3.0"
+    object-inspect "^1.13.3"
+
+side-channel-map@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/side-channel-map/-/side-channel-map-1.0.1.tgz#d6bb6b37902c6fef5174e5f533fab4c732a26f42"
+  integrity sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==
+  dependencies:
+    call-bound "^1.0.2"
+    es-errors "^1.3.0"
+    get-intrinsic "^1.2.5"
+    object-inspect "^1.13.3"
+
+side-channel-weakmap@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz#11dda19d5368e40ce9ec2bdc1fb0ecbc0790ecea"
+  integrity sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==
+  dependencies:
+    call-bound "^1.0.2"
+    es-errors "^1.3.0"
+    get-intrinsic "^1.2.5"
+    object-inspect "^1.13.3"
+    side-channel-map "^1.0.1"
+
 side-channel@^1.0.4:
   version "1.0.6"
   resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2"
@@ -4170,16 +4719,22 @@
     get-intrinsic "^1.2.4"
     object-inspect "^1.13.1"
 
-signal-exit@^3.0.2, signal-exit@^3.0.3:
+side-channel@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.1.0.tgz#c3fcff9c4da932784873335ec9765fa94ff66bc9"
+  integrity sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==
+  dependencies:
+    es-errors "^1.3.0"
+    object-inspect "^1.13.3"
+    side-channel-list "^1.0.0"
+    side-channel-map "^1.0.1"
+    side-channel-weakmap "^1.0.2"
+
+signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7:
   version "3.0.7"
   resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9"
   integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==
 
-slash@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
-  integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==
-
 snapdragon-node@^2.0.1:
   version "2.1.1"
   resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b"
@@ -4265,7 +4820,7 @@
   resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d"
   integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==
 
-spdx-expression-parse@^3.0.0, spdx-expression-parse@^3.0.1:
+spdx-expression-parse@^3.0.0:
   version "3.0.1"
   resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679"
   integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==
@@ -4273,6 +4828,14 @@
     spdx-exceptions "^2.1.0"
     spdx-license-ids "^3.0.0"
 
+spdx-expression-parse@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-4.0.0.tgz#a23af9f3132115465dac215c099303e4ceac5794"
+  integrity sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==
+  dependencies:
+    spdx-exceptions "^2.1.0"
+    spdx-license-ids "^3.0.0"
+
 spdx-license-ids@^3.0.0:
   version "3.0.16"
   resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz#a14f64e0954f6e25cc6587bd4f392522db0d998f"
@@ -4293,6 +4856,11 @@
     define-property "^0.2.5"
     object-copy "^0.1.0"
 
+statuses@2.0.1, statuses@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63"
+  integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==
+
 "statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2", statuses@^1.5.0:
   version "1.5.0"
   resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c"
@@ -4397,6 +4965,22 @@
   resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09"
   integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
 
+synckit@^0.11.0:
+  version "0.11.4"
+  resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.11.4.tgz#48972326b59723fc15b8d159803cf8302b545d59"
+  integrity sha512-Q/XQKRaJiLiFIBNN+mndW7S/RHxvwzuZS6ZwmRzUBqJBv/5QIKCEwkBC8GBf8EQJKYnaFs0wOZbKTXBPj8L9oQ==
+  dependencies:
+    "@pkgr/core" "^0.2.3"
+    tslib "^2.8.1"
+
+synckit@^0.9.1:
+  version "0.9.2"
+  resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.9.2.tgz#a3a935eca7922d48b9e7d6c61822ee6c3ae4ec62"
+  integrity sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==
+  dependencies:
+    "@pkgr/core" "^0.1.0"
+    tslib "^2.6.2"
+
 table-layout@^3.0.0:
   version "3.0.2"
   resolved "https://registry.yarnpkg.com/table-layout/-/table-layout-3.0.2.tgz#69c2be44388a5139b48c59cf21e73b488021769a"
@@ -4410,6 +4994,11 @@
     typical "^7.1.1"
     wordwrapjs "^5.1.0"
 
+tapable@^2.2.0:
+  version "2.2.1"
+  resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0"
+  integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==
+
 terser@~5.39.0:
   version "5.39.0"
   resolved "https://registry.yarnpkg.com/terser/-/terser-5.39.0.tgz#0e82033ed57b3ddf1f96708d123cca717d86ca3a"
@@ -4420,11 +5009,6 @@
     commander "^2.20.0"
     source-map-support "~0.5.20"
 
-text-table@^0.2.0:
-  version "0.2.0"
-  resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
-  integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==
-
 through@^2.3.6:
   version "2.3.8"
   resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
@@ -4486,6 +5070,11 @@
   resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.1.tgz#260a5d962d8b752425b32f3a7db0dcacd176c144"
   integrity sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==
 
+ts-api-utils@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-2.1.0.tgz#595f7094e46eed364c13fd23e75f9513d29baf91"
+  integrity sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==
+
 ts-lit-plugin@^1.2.1:
   version "1.2.1"
   resolved "https://registry.yarnpkg.com/ts-lit-plugin/-/ts-lit-plugin-1.2.1.tgz#7fca17a454645c14911917fa7f17ade582fa3056"
@@ -4513,12 +5102,17 @@
   resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
   integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
 
+tslib@^2.6.2, tslib@^2.8.1:
+  version "2.8.1"
+  resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f"
+  integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==
+
 tsscmp@1.0.6:
   version "1.0.6"
   resolved "https://registry.yarnpkg.com/tsscmp/-/tsscmp-1.0.6.tgz#85b99583ac3589ec4bfef825b5000aa911d605eb"
   integrity sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==
 
-tsutils@3.21.0, tsutils@^3.21.0:
+tsutils@3.21.0:
   version "3.21.0"
   resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623"
   integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==
@@ -4537,11 +5131,6 @@
   resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.18.1.tgz#db4bc151a4a2cf4eebf9add5db75508db6cc841f"
   integrity sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==
 
-type-fest@^0.20.2:
-  version "0.20.2"
-  resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4"
-  integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==
-
 type-fest@^0.21.3:
   version "0.21.3"
   resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37"
@@ -4565,6 +5154,15 @@
     media-typer "0.3.0"
     mime-types "~2.1.24"
 
+type-is@^2.0.0, type-is@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/type-is/-/type-is-2.0.1.tgz#64f6cf03f92fce4015c2b224793f6bdd4b068c97"
+  integrity sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==
+  dependencies:
+    content-type "^1.0.5"
+    media-typer "^1.1.0"
+    mime-types "^3.0.0"
+
 typed-array-buffer@^1.0.2:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz#1867c5d83b20fcb5ccf32649e5e2fc7424474ff3"
@@ -4609,13 +5207,6 @@
     is-typed-array "^1.1.13"
     possible-typed-array-names "^1.0.0"
 
-typedarray-to-buffer@^3.1.5:
-  version "3.1.5"
-  resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080"
-  integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==
-  dependencies:
-    is-typedarray "^1.0.0"
-
 typescript@^3.8.3:
   version "3.9.10"
   resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.10.tgz#70f3910ac7a51ed6bef79da7800690b19bf778b8"
@@ -4666,6 +5257,11 @@
     is-extendable "^0.1.1"
     set-value "^2.0.1"
 
+unpipe@1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
+  integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==
+
 unset-value@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559"
@@ -4699,7 +5295,7 @@
     spdx-correct "^3.0.0"
     spdx-expression-parse "^3.0.0"
 
-vary@^1.1.2:
+vary@^1, vary@^1.1.2:
   version "1.1.2"
   resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
   integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==
@@ -4832,15 +5428,13 @@
   resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
   integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==
 
-write-file-atomic@^3.0.3:
-  version "3.0.3"
-  resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8"
-  integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==
+write-file-atomic@^4.0.0:
+  version "4.0.2"
+  resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd"
+  integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==
   dependencies:
     imurmurhash "^0.1.4"
-    is-typedarray "^1.0.0"
-    signal-exit "^3.0.2"
-    typedarray-to-buffer "^3.1.5"
+    signal-exit "^3.0.7"
 
 ws@^7.4.2:
   version "7.5.9"
@@ -4896,3 +5490,13 @@
   version "0.1.0"
   resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"
   integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==
+
+zod-to-json-schema@^3.24.1:
+  version "3.24.5"
+  resolved "https://registry.yarnpkg.com/zod-to-json-schema/-/zod-to-json-schema-3.24.5.tgz#d1095440b147fb7c2093812a53c54df8d5df50a3"
+  integrity sha512-/AuWwMP+YqiPbsJx5D6TfgRTc4kTLjsh5SOcd4bLsfUg2RcEXrFMJl1DGgdHy2aCfsIA/cr/1JM0xcB2GZji8g==
+
+zod@^3.23.8, zod@^3.24.2:
+  version "3.24.4"
+  resolved "https://registry.yarnpkg.com/zod/-/zod-3.24.4.tgz#e2e2cca5faaa012d76e527d0d36622e0a90c315f"
+  integrity sha512-OdqJE9UDRPwWsrHjLN2F8bPxvwJBK22EHLWtanu0LSYr5YqzsaaW3RMgmjwr8Rypg5k+meEJdSPXJZXE/yqOMg==
