diff --git a/recipe_proto/go.chromium.org/luci/analysis/proto/README.md b/recipe_proto/go.chromium.org/luci/analysis/proto/README.md
index 1b411d1..563b472 100644
--- a/recipe_proto/go.chromium.org/luci/analysis/proto/README.md
+++ b/recipe_proto/go.chromium.org/luci/analysis/proto/README.md
@@ -1,3 +1,3 @@
 // Generated by update.py. DO NOT EDIT.
 These protos were copied from:
-https://chromium.googlesource.com/infra/luci/luci-go/+/67ab78b154933e5685261a4d8015beaba7bf7bb4/analysis/proto
+https://chromium.googlesource.com/infra/luci/luci-go/+/682fdfd5962f25c000dc9495a5e2a006f7e2fa20/analysis/proto
diff --git a/recipe_proto/go.chromium.org/luci/analysis/proto/bq/test_result_row.proto b/recipe_proto/go.chromium.org/luci/analysis/proto/bq/test_result_row.proto
new file mode 100644
index 0000000..4a80625
--- /dev/null
+++ b/recipe_proto/go.chromium.org/luci/analysis/proto/bq/test_result_row.proto
@@ -0,0 +1,183 @@
+// Copyright 2024 The LUCI Authors.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+syntax = "proto3";
+
+package luci.analysis.bq;
+
+import "google/protobuf/timestamp.proto";
+
+import "go.chromium.org/luci/analysis/proto/v1/common.proto";
+import "go.chromium.org/luci/analysis/proto/v1/failure_reason.proto";
+import "go.chromium.org/luci/analysis/proto/v1/sources.proto";
+import "go.chromium.org/luci/analysis/proto/v1/test_metadata.proto";
+import "go.chromium.org/luci/analysis/proto/v1/test_verdict.proto";
+import "go.chromium.org/luci/common/bq/pb/options.proto";
+
+option go_package = "go.chromium.org/luci/analysis/proto/bq;bqpb";
+
+// Represents a test result exported to BigQuery.
+//
+// A test result is the outcome of a single execution of a test variant
+// (a way of running a test) in an invocation (a container of test
+// results, such as a build).
+//
+// BigQuery tables using this schema will use the following settings:
+// - Partition by TIMESTAMP_TRUNC(partition_time, DAY),
+//   retain data for 510 days.
+// - Cluster by project, test_id.
+//
+// NextId: 23
+message TestResultRow {
+  // The LUCI Project. E.g. "chromium".
+  string project = 1;
+
+  // Is a unique identifier of the test in a LUCI project.
+  // Refer to TestResult.test_id for details.
+  string test_id = 2;
+
+  // Describes one specific way of running the test,
+  // e.g. a specific bucket, builder and a test suite.
+  //
+  // This will be encoded as a JSON object like
+  // {"builder":"linux-rel","os":"Ubuntu-18.04",...}
+  // to take advantage of BigQuery's JSON support, so that
+  // the query will only be billed for the variant
+  // keys it reads.
+  //
+  // In the protocol buffer, it must be a string as per
+  // https://cloud.google.com/bigquery/docs/write-api#data_type_conversions
+  string variant = 3 [(bqschema.options).bq_type = "JSON"];
+
+  // A hash of the variant, encoded as lowercase hexadecimal characters.
+  // The computation is an implementation detail of ResultDB.
+  string variant_hash = 4;
+
+  message InvocationRecord {
+    // The ID of the invocation.
+    string id = 1;
+
+    // The LUCI Realm the invocation exists under.
+    // For example, "chromium:try".
+    string realm = 2;
+  }
+
+  // Invocation is the ResultDB invocation marked is_export_root
+  // that the test result is being exported under.
+  //
+  // Note: The test result may not have been directly uploaded to
+  // this invocation, but rather one of its included invocations.
+  // See `parent`.
+  InvocationRecord invocation = 5;
+
+  // Partition_time is used to partition the table.
+  // It is the time when exported invocation was created in Spanner.
+  // Note: it is NOT the time when the row is inserted into BigQuery table.
+  // https://cloud.google.com/bigquery/docs/creating-column-partitions#limitations
+  // mentions "The partitioning column must be a top-level field."
+  // So we keep this column here instead of adding the CreateTime to InvocationRecord.
+  google.protobuf.Timestamp partition_time = 6;
+
+  // ParentInvocationRecord for a test result is the immediate parent invocation
+  // that directly contains the test result.
+  message ParentInvocationRecord {
+    // The ID of the invocation.
+    string id = 1;
+
+    // Tags represents Invocation-level string key-value pairs.
+    // A key can be repeated.
+    repeated luci.analysis.v1.StringPair tags = 2;
+
+    // The LUCI Realm the invocation exists under.
+    // For example, "chromium:try".
+    string realm = 3;
+
+    // Arbitrary JSON object that contains structured, domain-specific properties
+    // of the invocation. Stored here stringified as this is the only protocol
+    // buffer type that maps to the JSON BigQuery type:
+    // https://cloud.google.com/bigquery/docs/write-api#data_type_conversions
+    string properties = 4 [(bqschema.options).bq_type = "JSON"];
+  }
+
+  // Parent contains info of the result's immediate parent invocation.
+  ParentInvocationRecord parent = 7;
+
+  // The global identifier of a test result in ResultDB.
+  // Format:
+  // "invocations/{INVOCATION_ID}/tests/{URL_ESCAPED_TEST_ID}/results/{RESULT_ID}".
+  string name = 8;
+
+  // Identifies a test result in a given invocation and test id.
+  string result_id = 9;
+
+  // Expected is a flag indicating whether the result of test case execution is
+  // expected. Refer to TestResult.Expected for details.
+  bool expected = 10;
+
+  // Status of the test result.
+  luci.analysis.v1.TestResultStatus status = 11;
+
+  // A human-readable explanation of the result, in HTML.
+  // MUST be sanitized before rendering in the browser.
+  string summary_html = 12;
+
+  // The point in time when the test case started to execute.
+  google.protobuf.Timestamp start_time = 13;
+
+  // Duration of the test case execution in seconds.
+  double duration_secs = 14;
+
+  // Tags contains metadata for this test result.
+  // It might describe this particular execution or the test case.
+  repeated luci.analysis.v1.StringPair tags = 15;
+
+  // Information about failed tests.
+  // e.g. the assertion failure message.
+  luci.analysis.v1.FailureReason failure_reason = 16;
+
+  // Reasoning behind a test skip, in machine-readable form.
+  // Only set when status is SKIP.
+  // It is the string representation of luci.analysis.v1.SkipReason when
+  // specified and "" when the skip reason is unspecified.
+  string skip_reason = 17;
+
+  // Arbitrary JSON object that contains structured, domain-specific properties
+  // of the test result. Stored here stringified as this is the only protocol
+  // buffer type that maps to the JSON BigQuery type:
+  // https://cloud.google.com/bigquery/docs/write-api#data_type_conversions
+  string properties = 18 [(bqschema.options).bq_type = "JSON"];
+
+  // The code sources tested. Obtained from one of the verdict's test results.
+  // If the invocation which contained the test result
+  // specified that code sources directly, this is those sources.
+  // If the code sources were marked as are inherited from the including
+  // invocation, this is the resolved code sources (if they could be resolved).
+  // Unset otherwise.
+  luci.analysis.v1.Sources sources = 19;
+
+  // The branch in source control that was tested, if known.
+  // For example, the `refs/heads/main` branch in the `chromium/src` repo
+  // hosted by `chromium.googlesource.com`.
+  // This is a subset of the information in the `sources` field.
+  luci.analysis.v1.SourceRef source_ref = 20;
+
+  // Hash of the source_ref field, as 16 lowercase hexadecimal characters.
+  // Can be used to uniquely identify a branch in a source code
+  // version control system.
+  string source_ref_hash = 21;
+
+  // Metadata of the test case,
+  // e.g. the original test name and test location.
+  luci.analysis.v1.TestMetadata test_metadata = 22;
+}
diff --git a/recipe_proto/go.chromium.org/luci/analysis/proto/bq/test_verdict_row.proto b/recipe_proto/go.chromium.org/luci/analysis/proto/bq/test_verdict_row.proto
index 2a0fd73..af897e6 100644
--- a/recipe_proto/go.chromium.org/luci/analysis/proto/bq/test_verdict_row.proto
+++ b/recipe_proto/go.chromium.org/luci/analysis/proto/bq/test_verdict_row.proto
@@ -35,7 +35,7 @@
 //
 // BigQuery tables using this schema will use the following settings:
 // - Partition by TIMESTAMP_TRUNC(partition_time, DAY),
-//   retain data for 540 days.
+//   retain data for 510 days.
 // - Cluster by project, test_id.
 //
 // NextId: 17
diff --git a/recipe_proto/go.chromium.org/luci/analysis/proto/v1/clusters.proto b/recipe_proto/go.chromium.org/luci/analysis/proto/v1/clusters.proto
index 13691cc..5037dd6 100644
--- a/recipe_proto/go.chromium.org/luci/analysis/proto/v1/clusters.proto
+++ b/recipe_proto/go.chromium.org/luci/analysis/proto/v1/clusters.proto
@@ -507,7 +507,7 @@
         // Identity of the presubmit run that contains this test result.
         // This should be unique per "CQ+1"/"CQ+2" attempt on gerrit.
         //
-        // One presumbit run MAY have many ingested invocation IDs (e.g. for its
+        // One presubmit run MAY have many ingested invocation IDs (e.g. for its
         // various tryjobs), but every ingested invocation ID only ever has one
         // presubmit run ID (if any).
         //
diff --git a/recipe_proto/go.chromium.org/luci/analysis/proto/v1/test_variant_branches.proto b/recipe_proto/go.chromium.org/luci/analysis/proto/v1/test_variant_branches.proto
index 817ba00..05f408a 100644
--- a/recipe_proto/go.chromium.org/luci/analysis/proto/v1/test_variant_branches.proto
+++ b/recipe_proto/go.chromium.org/luci/analysis/proto/v1/test_variant_branches.proto
@@ -41,6 +41,9 @@
   // Retrieves the current state of segments of test variant branch analysis in batches.
   rpc BatchGet(BatchGetTestVariantBranchRequest) returns (
     BatchGetTestVariantBranchResponse) {};
+  // Query queries test variant branches for a given test id and ref.
+  rpc Query(QueryTestVariantBranchRequest) returns (
+    QueryTestVariantBranchResponse) {};
   // Lists commits and the test verdicts at these commits, starting from a source position.
   rpc QuerySourcePositions(QuerySourcePositionsRequest) returns (QuerySourcePositionsResponse) {};
 }
@@ -203,6 +206,42 @@
   repeated TestVariantBranch test_variant_branches = 1;
 }
 
+// A request message for `TestVariantBranches.Query` RPC.
+message QueryTestVariantBranchRequest {
+  // Required. The LUCI project of the test variant branch.
+  string project = 1;
+
+  // Required. The test id of test variant branches.
+  string test_id = 2;
+
+  // Required. The source ref of test variant branches.
+  luci.analysis.v1.SourceRef ref = 3;
+
+  // The maximum number of entries to return.
+  //
+  // The service may return fewer than this value.
+  // If unspecified, at most 100 variants will be returned.
+  // The maximum value is 1000; values above 1000 will be coerced to 1000.
+  int32 page_size = 4;
+
+  // A page token, received from a previous call.
+  // Provide this to retrieve the subsequent page.
+  //
+  // When paginating, all other parameters provided to the next call MUST
+  // match the call that provided the page token.
+  string page_token = 5;
+}
+
+message QueryTestVariantBranchResponse {
+  // The list of test variant branches ordered by `variant_hash` ASC.
+  repeated TestVariantBranch test_variant_branch = 1;
+
+  // This field will be set if there are more results to return.
+  // To get the next page of data, send the same request again, but include this
+  // token.
+  string next_page_token = 2;
+}
+
 // Represents changepoint analysis for a particular (project, test, variant, ref).
 message TestVariantBranch {
   // The name of the test variant branch.
diff --git a/recipe_proto/go.chromium.org/luci/buildbucket/proto/README.md b/recipe_proto/go.chromium.org/luci/buildbucket/proto/README.md
index bf04f3e..d88d727 100644
--- a/recipe_proto/go.chromium.org/luci/buildbucket/proto/README.md
+++ b/recipe_proto/go.chromium.org/luci/buildbucket/proto/README.md
@@ -1,3 +1,3 @@
 // Generated by update.py. DO NOT EDIT.
 These protos were copied from:
-https://chromium.googlesource.com/infra/luci/luci-go/+/7712304dc5b2da150ad97181dcd71f31c2280f60/buildbucket/proto
+https://chromium.googlesource.com/infra/luci/luci-go/+/536ac16045acc49762b9f1053abb9e7fa5acd2b1/buildbucket/proto
diff --git a/recipe_proto/go.chromium.org/luci/buildbucket/proto/service_config.proto b/recipe_proto/go.chromium.org/luci/buildbucket/proto/service_config.proto
index 432ef0a..f4c34d9 100644
--- a/recipe_proto/go.chromium.org/luci/buildbucket/proto/service_config.proto
+++ b/recipe_proto/go.chromium.org/luci/buildbucket/proto/service_config.proto
@@ -19,6 +19,7 @@
 package buildbucket;
 
 import "google/protobuf/duration.proto";
+
 import "go.chromium.org/luci/buildbucket/proto/project_config.proto";
 
 option go_package = "go.chromium.org/luci/buildbucket/proto;buildbucketpb";
@@ -49,6 +50,13 @@
   // derive a backend config from swarming related configs.
   // So we could control the migration process behind the scene.
   map<string, string> swarming_backends = 8;
+
+  // Custom metrics.
+  //
+  // Global config to register custom build metrics that more than one LUCI
+  // projects may report data to.
+  // Therefore, the metric names must be unique globally.
+  repeated CustomMetric custom_metrics = 9;
 }
 
 // Backend setting.
@@ -334,3 +342,73 @@
   // Source of the cipd package itself
   Source source = 2;
 }
+
+// A CustomBuildMetricBase tells the base metric of a given custom metric.
+//
+// Buildbucket will determine what to report to and the annotation for
+// a given CustomMetric, based on the specified metric base. Visit
+// http://shortn/_6bc0aXIouD to find all the supported metric bases.
+enum CustomBuildMetricBase {
+  CUSTOM_BUILD_METRIC_BASE_UNSET = 0;
+  CUSTOM_BUILD_METRIC_BASE_CREATED = 1;
+  CUSTOM_BUILD_METRIC_BASE_STARTED = 2;
+  CUSTOM_BUILD_METRIC_BASE_COMPLETED = 3;
+  CUSTOM_BUILD_METRIC_BASE_CYCLE_DURATIONS = 4;
+  CUSTOM_BUILD_METRIC_BASE_RUN_DURATIONS = 5;
+  CUSTOM_BUILD_METRIC_BASE_SCHEDULING_DURATIONS = 6;
+  CUSTOM_BUILD_METRIC_BASE_MAX_AGE_SCHEDULED = 7;
+  CUSTOM_BUILD_METRIC_BASE_COUNT = 8;
+  CUSTOM_BUILD_METRIC_BASE_CONSECUTIVE_FAILURE_COUNT = 9;
+}
+
+// CustomMetric is a metric object that collects a series of data
+// exported by a given metric class.
+//
+// All metrics are using luci.Builder schema at https://source.chromium.org/chromium/infra/infra/+/main:go/src/go.chromium.org/luci/buildbucket/metrics/builder.go;l=26-48;drc=b77d0c2bd4bbb536f8e349e993e3ca18818c51e7.
+//
+// Builders can then reference a custom metric by name to report their build
+// metrics.
+message CustomMetric {
+  // Name of the metric.
+  //
+  // Must be unique globally across all LUCI projects.
+  // Must conform to ^(/[a-zA-Z0-9_-]+)+$ (See
+  // https://source.chromium.org/chromium/infra/infra/+/main:go/src/go.chromium.org/luci/common/tsmon/registry/registry.go;l=33;drc=b77d0c2bd4bbb536f8e349e993e3ca18818c51e7).
+  string name = 1;
+
+  // Description of the metric.
+  string description = 2;
+
+  // Metric field names.
+  //
+  // Each builder uses this metric must specify how to populate the values of
+  // each field in their configurations.
+  //
+  // The value type of all metric fields is always string.
+  // Each Field must conform to ^[A-Za-z_][A-Za-z0-9_]*$ (See
+  // https://source.chromium.org/chromium/infra/infra/+/main:go/src/go.chromium.org/luci/common/tsmon/registry/registry.go;l=34;drc=b77d0c2bd4bbb536f8e349e993e3ca18818c51e7).
+  //
+  // Note that the possible values of each field should be bounded.
+  // So below fields should not be included:
+  // * build id
+  // * any timestamp (e.g. build's creation time)
+  // * any markdown strings (e.g. build's summary_markdown)
+  // * any log strings (e.g. build's output logs)
+  // * any PII
+  // * build's gitiles commit hash
+  // * build's gerrit change number
+  // * etc
+  repeated string fields = 3;
+
+  // True if the metric is disabled.
+  //
+  // This is useful for pausing a metric report pipeline temporary
+  // in an emergency situation.
+  bool disabled = 4;
+
+  // Metric class determines which data to be collected and reported
+  // to the metric.
+  oneof class {
+      CustomBuildMetricBase metric_base = 5;
+  }
+}
diff --git a/recipe_proto/go.chromium.org/luci/common/proto/README.md b/recipe_proto/go.chromium.org/luci/common/proto/README.md
index 03a2191..9301da3 100644
--- a/recipe_proto/go.chromium.org/luci/common/proto/README.md
+++ b/recipe_proto/go.chromium.org/luci/common/proto/README.md
@@ -1,3 +1,3 @@
 // Generated by update.py. DO NOT EDIT.
 These protos were copied from:
-https://chromium.googlesource.com/infra/luci/luci-go/+/48c6a8d100046ff2c4d757b8437e20a82bc49f20/common/proto
+https://chromium.googlesource.com/infra/luci/luci-go/+/2f65c88b328168d7f181be4392cb844ec93252a8/common/proto
diff --git a/recipe_proto/go.chromium.org/luci/gce/api/config/v1/README.md b/recipe_proto/go.chromium.org/luci/gce/api/config/v1/README.md
index 37c25d9..a325c30 100644
--- a/recipe_proto/go.chromium.org/luci/gce/api/config/v1/README.md
+++ b/recipe_proto/go.chromium.org/luci/gce/api/config/v1/README.md
@@ -1,3 +1,3 @@
 // Generated by update.py. DO NOT EDIT.
 These protos were copied from:
-https://chromium.googlesource.com/infra/luci/luci-go/+/952e9f226faf10f2e5a07ab120edb72da333d576/gce/api/config/v1
+https://chromium.googlesource.com/infra/luci/luci-go/+/79437eaa818b8cbe59d46513489191591fc82078/gce/api/config/v1
diff --git a/recipe_proto/go.chromium.org/luci/gce/api/config/v1/config.proto b/recipe_proto/go.chromium.org/luci/gce/api/config/v1/config.proto
index 9abe28a..00ffcd0 100644
--- a/recipe_proto/go.chromium.org/luci/gce/api/config/v1/config.proto
+++ b/recipe_proto/go.chromium.org/luci/gce/api/config/v1/config.proto
@@ -287,6 +287,10 @@
   // The hostname of the Swarming server these VMs should connect to.
   string swarming = 6;
 
+  // The Swarming pools are assosiated with prefix.
+  // Any prefix is expected to be mapped to one Swarming pool.
+  repeated string swarming_pools = 11;
+
   // The timeout of these VMs.
   // If no Swarming bot has connected by the timeout,
   // the VM is deleted and replaced.
diff --git a/recipe_proto/go.chromium.org/luci/resultdb/proto/README.md b/recipe_proto/go.chromium.org/luci/resultdb/proto/README.md
index ebc7ffe..b9d47da 100644
--- a/recipe_proto/go.chromium.org/luci/resultdb/proto/README.md
+++ b/recipe_proto/go.chromium.org/luci/resultdb/proto/README.md
@@ -1,3 +1,3 @@
 // Generated by update.py. DO NOT EDIT.
 These protos were copied from:
-https://chromium.googlesource.com/infra/luci/luci-go/+/7f43881f4ef7ff3189fc5ddc69a0938da8774463/resultdb/proto
+https://chromium.googlesource.com/infra/luci/luci-go/+/7d4b2270d09cc446fb7aa67de93b3ec49bef190d/resultdb/proto
diff --git a/recipe_proto/go.chromium.org/luci/resultdb/proto/v1/invocation.proto b/recipe_proto/go.chromium.org/luci/resultdb/proto/v1/invocation.proto
index 1ea2b32..d751707 100644
--- a/recipe_proto/go.chromium.org/luci/resultdb/proto/v1/invocation.proto
+++ b/recipe_proto/go.chromium.org/luci/resultdb/proto/v1/invocation.proto
@@ -30,7 +30,7 @@
 // buildbucket build, CQ attempt.
 // Composable: can include other invocations, see inclusion.proto.
 //
-// Next id: 22.
+// Next id: 23.
 message Invocation {
   reserved 3; // bool interrupted, crbug.com/1078696.
 
@@ -241,6 +241,31 @@
   // Only useful for a build-level invocation.
   // It contains all instructions of steps which belong to the build.
   Instructions step_instructions = 18;
+
+  // Additional JSON object(s) that contain additional structured data about the
+  // invocation. Unlike `properties` this field is not included (denormalized)
+  // in the test results export, it is only available in the finalized
+  // invocations BigQuery export.
+  //
+  // All google.protobuf.Struct values must contain a field '@type' at the
+  // top-level that defines the fully-qualified name of the source protocol
+  // buffer that was used to populate this field (e.g. some.package.MyMessage).
+  //
+  // ResultDB will not validate the contents with respect to this schema, but
+  // downstream systems may depend on the '@type' field to inform how the
+  // contents are interpreted.
+  //
+  // Each key is limited to 63 characters matching
+  // ^[a-z]([a-z0-9_]{0,61}[a-z0-9])?$.
+  // The size of each value is limited to <= 20,000 bytes.
+  // The total size of the map (as measured by proto.Size())
+  // is limited to <= 100,000 bytes.
+  //
+  // Valid field masks:
+  //  * extended_properties
+  //  * extended_properties.exception_occurances
+  //  * extended_properties.test_script_metrics
+  map<string, google.protobuf.Struct> extended_properties = 22;
 }
 
 // BigQueryExport indicates that results in this invocation should be exported
diff --git a/recipe_proto/go.chromium.org/luci/resultdb/proto/v1/resultdb.proto b/recipe_proto/go.chromium.org/luci/resultdb/proto/v1/resultdb.proto
index 509c387..047be9f 100644
--- a/recipe_proto/go.chromium.org/luci/resultdb/proto/v1/resultdb.proto
+++ b/recipe_proto/go.chromium.org/luci/resultdb/proto/v1/resultdb.proto
@@ -97,7 +97,7 @@
   // Supports invocation inclusions.
   rpc QueryArtifacts(QueryArtifactsRequest) returns (QueryArtifactsResponse) {};
 
-  // Retrieves test variants for a test run. A test run comprises only
+  // Retrieves test verdicts for a test run. A test run comprises only
   // the test results from a single invocation and not its included
   // invocations.
   //
@@ -112,9 +112,9 @@
   //
   // To use, the caller must have `resultdb.testResults.list` permission
   // on the queried invocation.
-  rpc QueryRunTestVariants(QueryRunTestVariantsRequest) returns (QueryRunTestVariantsResponse) {};
+  rpc QueryRunTestVerdicts(QueryRunTestVerdictsRequest) returns (QueryRunTestVerdictsResponse) {};
 
-  // Retrieves test variants from an invocation, recursively.
+  // Retrieves test verdicts from an invocation, recursively.
   // Supports invocation inclusions.
   rpc QueryTestVariants(QueryTestVariantsRequest) returns (QueryTestVariantsResponse) {};
 
@@ -399,7 +399,7 @@
 // A request message for QueryTestVariants RPC.
 // Next id: 9.
 message QueryTestVariantsRequest {
-  // Retrieve test variants included in these invocations, directly or indirectly
+  // Retrieve test verdicts included in these invocations, directly or indirectly
   // (via Invocation.included_invocations).
   //
   // As of April 2024, a maximum of one invocation may be specified.
@@ -469,9 +469,9 @@
   map<string, Sources> sources = 3;
 }
 
-// Request message for QueryRunTestVariants RPC.
-message QueryRunTestVariantsRequest {
-  // Retrieve test variants for the test run represented by this invocation.
+// Request message for QueryRunTestVerdicts RPC.
+message QueryRunTestVerdictsRequest {
+  // Retrieve test verdicts for the test run represented by this invocation.
   // Format: invocations/{INVOCATION_ID}.
   string invocation = 1;
 
@@ -493,29 +493,21 @@
   // the server.
   int32 page_size = 3;
 
-  // A page token, received from a previous `QueryRunTestVariants` call.
+  // A page token, received from a previous `QueryRunTestVerdicts` call.
   // Provide this to retrieve the subsequent page.
   //
   // When paginating, all other parameters provided to
-  // `QueryRunTestVariants` MUST match the call that provided the page
+  // `QueryRunTestVerdicts` MUST match the call that provided the page
   // token.
   string page_token = 4;
 }
 
-// A response message for QueryRunTestVariants RPC.
-message QueryRunTestVariantsResponse {
-  // Test variants for the run.
-  //
-  // Exonerations will be unset, as it is verdict-level concept and not
-  // a test run-level concept.
-  //
-  // Sources will also be unset, as this RPC is only querying a particular
-  // test run and there is no opportunity to resolve inherited test sources.
-  // When used in conjunction with the invocation-ready-for-export pub/sub,
-  // sources can be obtained from that pub/sub instead.
+// A response message for QueryRunTestVerdicts RPC.
+message QueryRunTestVerdictsResponse {
+  // Test verdicts for the run.
   //
   // Ordered by test_id, then variant_hash.
-  repeated TestVariant test_variants = 1;
+  repeated RunTestVerdict run_test_verdicts = 1;
 
   // A token, which can be sent as `page_token` to retrieve the next page.
   // If this field is omitted, there were no subsequent pages at the time of
@@ -536,7 +528,7 @@
   }
 
   // Name of the invocation that the test variants are in.
-   string invocation = 1;
+  string invocation = 1;
 
   // A list of test IDs and variant hashes, identifying the requested test
   // variants. Size is limited to 500. Any request for more than 500 variants
diff --git a/recipe_proto/go.chromium.org/luci/resultdb/proto/v1/test_variant.proto b/recipe_proto/go.chromium.org/luci/resultdb/proto/v1/test_variant.proto
index cc3bcf6..92b745f 100644
--- a/recipe_proto/go.chromium.org/luci/resultdb/proto/v1/test_variant.proto
+++ b/recipe_proto/go.chromium.org/luci/resultdb/proto/v1/test_variant.proto
@@ -24,6 +24,7 @@
 option go_package = "go.chromium.org/luci/resultdb/proto/v1;resultpb";
 
 // Represents a matching test variant with its outcomes.
+// Also known as a test verdict.
 message TestVariant {
   // A unique identifier of the test in a LUCI project.
   // Regex: ^[[::print::]]{1,256}$
@@ -109,3 +110,31 @@
   // A test variant must have this status.
   TestVariantStatus status = 1;
 }
+
+// The outcome of a test variant in a test run (a single invocation,
+// excluding any included invocations).
+message RunTestVerdict {
+  // A unique identifier of the test in a LUCI project.
+  // Regex: ^[[::print::]]{1,256}$
+  //
+  // Refer to TestResult.test_id for details.
+  string test_id = 1;
+
+  // Description of one specific way of running the test,
+  // e.g. a specific bucket, builder and a test suite.
+  Variant variant = 2;
+
+  // Hash of the variant.
+  // hex(sha256(sorted(''.join('%s:%s\n' for k, v in variant.items())))).
+  string variant_hash = 3;
+
+  // Outcomes of the test variant.
+  repeated TestResultBundle results = 4;
+
+  // Information about the test at the time of its execution.
+  //
+  // All test results of the same test variant should report the same test
+  // metadata. This RPC relies on this rule and returns test metadata from
+  // *arbitrary* result of the test variant.
+  TestMetadata test_metadata = 5;
+}
