api: regenerate python bindings

Keeping them current.

BUG=chromium:1086714
TEST=compile

Change-Id: I8c248d32ee1521357795fa96204ae8b60ec9e5b7
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/chromite/+/2382618
Commit-Queue: LaMont Jones <lamontjones@chromium.org>
Commit-Queue: Mike Frysinger <vapier@chromium.org>
Tested-by: LaMont Jones <lamontjones@chromium.org>
Auto-Submit: LaMont Jones <lamontjones@chromium.org>
Reviewed-by: Mike Frysinger <vapier@chromium.org>
diff --git a/api/gen/chromite/api/packages_pb2.py b/api/gen/chromite/api/packages_pb2.py
index db87b44..adf62c5 100644
--- a/api/gen/chromite/api/packages_pb2.py
+++ b/api/gen/chromite/api/packages_pb2.py
@@ -23,7 +23,7 @@
   package='chromite.api',
   syntax='proto3',
   serialized_options=_b('Z6go.chromium.org/chromiumos/infra/proto/go/chromite/api'),
-  serialized_pb=_b('\n\x1b\x63hromite/api/packages.proto\x12\x0c\x63hromite.api\x1a\x1a\x63hromite/api/binhost.proto\x1a\x1c\x63hromite/api/build_api.proto\x1a\x1a\x63hromite/api/sysroot.proto\x1a\x17\x63hromiumos/common.proto\"\x93\x01\n\x13\x42uildsChromeRequest\x12\"\n\x06\x63hroot\x18\x01 \x01(\x0b\x32\x12.chromiumos.Chroot\x12-\n\x0c\x62uild_target\x18\x02 \x01(\x0b\x32\x17.chromiumos.BuildTarget\x12)\n\x08packages\x18\x03 \x03(\x0b\x32\x17.chromiumos.PackageInfo\"-\n\x14\x42uildsChromeResponse\x12\x15\n\rbuilds_chrome\x18\x01 \x01(\x08\"x\n\x15GetBestVisibleRequest\x12\x0c\n\x04\x61tom\x18\x01 \x01(\t\x12\"\n\x06\x63hroot\x18\x02 \x01(\x0b\x32\x12.chromiumos.Chroot\x12-\n\x0c\x62uild_target\x18\x03 \x01(\x0b\x32\x17.chromiumos.BuildTarget\"G\n\x16GetBestVisibleResponse\x12-\n\x0cpackage_info\x18\x01 \x01(\x0b\x32\x17.chromiumos.PackageInfo\"l\n\x17GetChromeVersionRequest\x12\"\n\x06\x63hroot\x18\x01 \x01(\x0b\x32\x12.chromiumos.Chroot\x12-\n\x0c\x62uild_target\x18\x02 \x01(\x0b\x32\x17.chromiumos.BuildTarget\"+\n\x18GetChromeVersionResponse\x12\x0f\n\x07version\x18\x01 \x01(\t\"m\n\x18GetTargetVersionsRequest\x12\"\n\x06\x63hroot\x18\x01 \x01(\x0b\x32\x12.chromiumos.Chroot\x12-\n\x0c\x62uild_target\x18\x02 \x01(\x0b\x32\x17.chromiumos.BuildTarget\"\xd7\x01\n\x19GetTargetVersionsResponse\x12\x17\n\x0f\x61ndroid_version\x18\x01 \x01(\t\x12\x1e\n\x16\x61ndroid_branch_version\x18\x02 \x01(\t\x12\x1e\n\x16\x61ndroid_target_version\x18\x03 \x01(\t\x12\x16\n\x0e\x63hrome_version\x18\x04 \x01(\t\x12\x14\n\x0c\x66ull_version\x18\x05 \x01(\t\x12\x19\n\x11milestone_version\x18\x06 \x01(\t\x12\x18\n\x10platform_version\x18\x07 \x01(\t\"n\n\x19GetBuilderMetadataRequest\x12\"\n\x06\x63hroot\x18\x01 \x01(\x0b\x32\x12.chromiumos.Chroot\x12-\n\x0c\x62uild_target\x18\x02 \x01(\x0b\x32\x17.chromiumos.BuildTarget\"\x8a\x05\n\x1aGetBuilderMetadataResponse\x12[\n\x15\x62uild_target_metadata\x18\x01 \x03(\x0b\x32<.chromite.api.GetBuilderMetadataResponse.BuildTargetMetadata\x12N\n\x0emodel_metadata\x18\x02 \x03(\x0b\x32\x36.chromite.api.GetBuilderMetadataResponse.ModelMetadata\x1a\xaa\x01\n\rModelMetadata\x12\x12\n\nmodel_name\x18\x01 \x01(\t\x12\x1b\n\x13\x65\x63_firmware_version\x18\x02 \x01(\t\x12\x17\n\x0f\x66irmware_key_id\x18\x03 \x01(\t\x12&\n\x1emain_readonly_firmware_version\x18\x04 \x01(\t\x12\'\n\x1fmain_readwrite_firmware_version\x18\x05 \x01(\t\x1a\x91\x02\n\x13\x42uildTargetMetadata\x12\x14\n\x0c\x62uild_target\x18\x01 \x01(\t\x12 \n\x18\x61ndroid_container_branch\x18\x02 \x01(\t\x12 \n\x18\x61ndroid_container_target\x18\x03 \x01(\t\x12!\n\x19\x61ndroid_container_version\x18\x04 \x01(\t\x12\x13\n\x0b\x61rc_use_set\x18\x05 \x01(\x08\x12\x1b\n\x13\x65\x63_firmware_version\x18\x06 \x01(\t\x12\x14\n\x0c\x66ingerprints\x18\x07 \x03(\t\x12\x16\n\x0ekernel_version\x18\x08 \x01(\t\x12\x1d\n\x15main_firmware_version\x18\t \x01(\t\"}\n\x18HasChromePrebuiltRequest\x12\"\n\x06\x63hroot\x18\x01 \x01(\x0b\x32\x12.chromiumos.Chroot\x12-\n\x0c\x62uild_target\x18\x02 \x01(\x0b\x32\x17.chromiumos.BuildTarget\x12\x0e\n\x06\x63hrome\x18\x03 \x01(\x08\"1\n\x19HasChromePrebuiltResponse\x12\x14\n\x0chas_prebuilt\x18\x01 \x01(\x08\"Y\n\x18NeedsChromeSourceRequest\x12=\n\x0finstall_request\x18\x01 \x01(\x0b\x32$.chromite.api.InstallPackagesRequest\"\x92\x02\n\x19NeedsChromeSourceResponse\x12\x1b\n\x13needs_chrome_source\x18\x01 \x01(\x08\x12?\n\x07reasons\x18\x02 \x03(\x0e\x32..chromite.api.NeedsChromeSourceResponse.Reason\x12)\n\x08packages\x18\x03 \x03(\x0b\x32\x17.chromiumos.PackageInfo\"l\n\x06Reason\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\x0f\n\x0bNO_PREBUILT\x10\x01\x12\x12\n\x0e\x43OMPILE_SOURCE\x10\x02\x12\x0f\n\x0bLOCAL_UPREV\x10\x03\x12\x1b\n\x17\x46OLLOWER_LACKS_PREBUILT\x10\x04\"\xa6\x01\n\x12HasPrebuiltRequest\x12\"\n\x06\x63hroot\x18\x01 \x01(\x0b\x32\x12.chromiumos.Chroot\x12-\n\x0c\x62uild_target\x18\x02 \x01(\x0b\x32\x17.chromiumos.BuildTarget\x12\x0e\n\x06\x63hrome\x18\x03 \x01(\x08\x12-\n\x0cpackage_info\x18\x04 \x01(\x0b\x32\x17.chromiumos.PackageInfo\"+\n\x13HasPrebuiltResponse\x12\x14\n\x0chas_prebuilt\x18\x01 \x01(\x08\"\xaf\x01\n\x14UprevPackagesRequest\x12\"\n\x06\x63hroot\x18\x01 \x01(\x0b\x32\x12.chromiumos.Chroot\x12.\n\rbuild_targets\x18\x02 \x03(\x0b\x32\x17.chromiumos.BuildTarget\x12/\n\x0coverlay_type\x18\x03 \x01(\x0e\x32\x19.chromite.api.OverlayType\x12\x12\n\noutput_dir\x18\x04 \x01(\t\"\xa3\x02\n\x1cUprevVersionedPackageRequest\x12\"\n\x06\x63hroot\x18\x01 \x01(\x0b\x32\x12.chromiumos.Chroot\x12-\n\x0cpackage_info\x18\x02 \x01(\x0b\x32\x17.chromiumos.PackageInfo\x12\x43\n\x08versions\x18\x03 \x03(\x0b\x32\x31.chromite.api.UprevVersionedPackageRequest.GitRef\x12.\n\rbuild_targets\x18\x04 \x03(\x0b\x32\x17.chromiumos.BuildTarget\x1a;\n\x06GitRef\x12\x12\n\nrepository\x18\x01 \x01(\t\x12\x0b\n\x03ref\x18\x02 \x01(\t\x12\x10\n\x08revision\x18\x03 \x01(\t\"\x86\x01\n\x15UprevPackagesResponse\x12\x44\n\x10modified_ebuilds\x18\x01 \x03(\x0b\x32*.chromite.api.UprevPackagesResponse.Ebuild\x12\x0f\n\x07version\x18\x02 \x01(\t\x1a\x16\n\x06\x45\x62uild\x12\x0c\n\x04path\x18\x01 \x01(\t\"W\n\x1dUprevVersionedPackageResponse\x12\x36\n\tresponses\x18\x01 \x03(\x0b\x32#.chromite.api.UprevPackagesResponse2\x96\x07\n\x0ePackageService\x12U\n\x0c\x42uildsChrome\x12!.chromite.api.BuildsChromeRequest\x1a\".chromite.api.BuildsChromeResponse\x12[\n\x0eGetBestVisible\x12#.chromite.api.GetBestVisibleRequest\x1a$.chromite.api.GetBestVisibleResponse\x12\x61\n\x10GetChromeVersion\x12%.chromite.api.GetChromeVersionRequest\x1a&.chromite.api.GetChromeVersionResponse\x12\x64\n\x11GetTargetVersions\x12&.chromite.api.GetTargetVersionsRequest\x1a\'.chromite.api.GetTargetVersionsResponse\x12g\n\x12GetBuilderMetadata\x12\'.chromite.api.GetBuilderMetadataRequest\x1a(.chromite.api.GetBuilderMetadataResponse\x12\x64\n\x11HasChromePrebuilt\x12&.chromite.api.HasChromePrebuiltRequest\x1a\'.chromite.api.HasChromePrebuiltResponse\x12R\n\x0bHasPrebuilt\x12 .chromite.api.HasPrebuiltRequest\x1a!.chromite.api.HasPrebuiltResponse\x12X\n\x05Uprev\x12\".chromite.api.UprevPackagesRequest\x1a#.chromite.api.UprevPackagesResponse\"\x06\xc2\xed\x1a\x02\x10\x02\x12x\n\x15UprevVersionedPackage\x12*.chromite.api.UprevVersionedPackageRequest\x1a+.chromite.api.UprevVersionedPackageResponse\"\x06\xc2\xed\x1a\x02\x10\x02\x1a\x10\xc2\xed\x1a\x0c\n\x08packages\x10\x01\x42\x38Z6go.chromium.org/chromiumos/infra/proto/go/chromite/apib\x06proto3')
+  serialized_pb=_b('\n\x1b\x63hromite/api/packages.proto\x12\x0c\x63hromite.api\x1a\x1a\x63hromite/api/binhost.proto\x1a\x1c\x63hromite/api/build_api.proto\x1a\x1a\x63hromite/api/sysroot.proto\x1a\x17\x63hromiumos/common.proto\"\x93\x01\n\x13\x42uildsChromeRequest\x12\"\n\x06\x63hroot\x18\x01 \x01(\x0b\x32\x12.chromiumos.Chroot\x12-\n\x0c\x62uild_target\x18\x02 \x01(\x0b\x32\x17.chromiumos.BuildTarget\x12)\n\x08packages\x18\x03 \x03(\x0b\x32\x17.chromiumos.PackageInfo\"-\n\x14\x42uildsChromeResponse\x12\x15\n\rbuilds_chrome\x18\x01 \x01(\x08\"x\n\x15GetBestVisibleRequest\x12\x0c\n\x04\x61tom\x18\x01 \x01(\t\x12\"\n\x06\x63hroot\x18\x02 \x01(\x0b\x32\x12.chromiumos.Chroot\x12-\n\x0c\x62uild_target\x18\x03 \x01(\x0b\x32\x17.chromiumos.BuildTarget\"G\n\x16GetBestVisibleResponse\x12-\n\x0cpackage_info\x18\x01 \x01(\x0b\x32\x17.chromiumos.PackageInfo\"l\n\x17GetChromeVersionRequest\x12\"\n\x06\x63hroot\x18\x01 \x01(\x0b\x32\x12.chromiumos.Chroot\x12-\n\x0c\x62uild_target\x18\x02 \x01(\x0b\x32\x17.chromiumos.BuildTarget\"+\n\x18GetChromeVersionResponse\x12\x0f\n\x07version\x18\x01 \x01(\t\"m\n\x18GetTargetVersionsRequest\x12\"\n\x06\x63hroot\x18\x01 \x01(\x0b\x32\x12.chromiumos.Chroot\x12-\n\x0c\x62uild_target\x18\x02 \x01(\x0b\x32\x17.chromiumos.BuildTarget\"\xd7\x01\n\x19GetTargetVersionsResponse\x12\x17\n\x0f\x61ndroid_version\x18\x01 \x01(\t\x12\x1e\n\x16\x61ndroid_branch_version\x18\x02 \x01(\t\x12\x1e\n\x16\x61ndroid_target_version\x18\x03 \x01(\t\x12\x16\n\x0e\x63hrome_version\x18\x04 \x01(\t\x12\x14\n\x0c\x66ull_version\x18\x05 \x01(\t\x12\x19\n\x11milestone_version\x18\x06 \x01(\t\x12\x18\n\x10platform_version\x18\x07 \x01(\t\"n\n\x19GetBuilderMetadataRequest\x12\"\n\x06\x63hroot\x18\x01 \x01(\x0b\x32\x12.chromiumos.Chroot\x12-\n\x0c\x62uild_target\x18\x02 \x01(\x0b\x32\x17.chromiumos.BuildTarget\"\x8a\x05\n\x1aGetBuilderMetadataResponse\x12[\n\x15\x62uild_target_metadata\x18\x01 \x03(\x0b\x32<.chromite.api.GetBuilderMetadataResponse.BuildTargetMetadata\x12N\n\x0emodel_metadata\x18\x02 \x03(\x0b\x32\x36.chromite.api.GetBuilderMetadataResponse.ModelMetadata\x1a\xaa\x01\n\rModelMetadata\x12\x12\n\nmodel_name\x18\x01 \x01(\t\x12\x1b\n\x13\x65\x63_firmware_version\x18\x02 \x01(\t\x12\x17\n\x0f\x66irmware_key_id\x18\x03 \x01(\t\x12&\n\x1emain_readonly_firmware_version\x18\x04 \x01(\t\x12\'\n\x1fmain_readwrite_firmware_version\x18\x05 \x01(\t\x1a\x91\x02\n\x13\x42uildTargetMetadata\x12\x14\n\x0c\x62uild_target\x18\x01 \x01(\t\x12 \n\x18\x61ndroid_container_branch\x18\x02 \x01(\t\x12 \n\x18\x61ndroid_container_target\x18\x03 \x01(\t\x12!\n\x19\x61ndroid_container_version\x18\x04 \x01(\t\x12\x13\n\x0b\x61rc_use_set\x18\x05 \x01(\x08\x12\x1b\n\x13\x65\x63_firmware_version\x18\x06 \x01(\t\x12\x14\n\x0c\x66ingerprints\x18\x07 \x03(\t\x12\x16\n\x0ekernel_version\x18\x08 \x01(\t\x12\x1d\n\x15main_firmware_version\x18\t \x01(\t\"}\n\x18HasChromePrebuiltRequest\x12\"\n\x06\x63hroot\x18\x01 \x01(\x0b\x32\x12.chromiumos.Chroot\x12-\n\x0c\x62uild_target\x18\x02 \x01(\x0b\x32\x17.chromiumos.BuildTarget\x12\x0e\n\x06\x63hrome\x18\x03 \x01(\x08\"1\n\x19HasChromePrebuiltResponse\x12\x14\n\x0chas_prebuilt\x18\x01 \x01(\x08\"Y\n\x18NeedsChromeSourceRequest\x12=\n\x0finstall_request\x18\x01 \x01(\x0b\x32$.chromite.api.InstallPackagesRequest\"\xa9\x02\n\x19NeedsChromeSourceResponse\x12\x1b\n\x13needs_chrome_source\x18\x01 \x01(\x08\x12?\n\x07reasons\x18\x02 \x03(\x0e\x32..chromite.api.NeedsChromeSourceResponse.Reason\x12)\n\x08packages\x18\x03 \x03(\x0b\x32\x17.chromiumos.PackageInfo\x12\x15\n\rbuilds_chrome\x18\x04 \x01(\x08\"l\n\x06Reason\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\x0f\n\x0bNO_PREBUILT\x10\x01\x12\x12\n\x0e\x43OMPILE_SOURCE\x10\x02\x12\x0f\n\x0bLOCAL_UPREV\x10\x03\x12\x1b\n\x17\x46OLLOWER_LACKS_PREBUILT\x10\x04\"\xa6\x01\n\x12HasPrebuiltRequest\x12\"\n\x06\x63hroot\x18\x01 \x01(\x0b\x32\x12.chromiumos.Chroot\x12-\n\x0c\x62uild_target\x18\x02 \x01(\x0b\x32\x17.chromiumos.BuildTarget\x12\x0e\n\x06\x63hrome\x18\x03 \x01(\x08\x12-\n\x0cpackage_info\x18\x04 \x01(\x0b\x32\x17.chromiumos.PackageInfo\"+\n\x13HasPrebuiltResponse\x12\x14\n\x0chas_prebuilt\x18\x01 \x01(\x08\"\xaf\x01\n\x14UprevPackagesRequest\x12\"\n\x06\x63hroot\x18\x01 \x01(\x0b\x32\x12.chromiumos.Chroot\x12.\n\rbuild_targets\x18\x02 \x03(\x0b\x32\x17.chromiumos.BuildTarget\x12/\n\x0coverlay_type\x18\x03 \x01(\x0e\x32\x19.chromite.api.OverlayType\x12\x12\n\noutput_dir\x18\x04 \x01(\t\"\xa3\x02\n\x1cUprevVersionedPackageRequest\x12\"\n\x06\x63hroot\x18\x01 \x01(\x0b\x32\x12.chromiumos.Chroot\x12-\n\x0cpackage_info\x18\x02 \x01(\x0b\x32\x17.chromiumos.PackageInfo\x12\x43\n\x08versions\x18\x03 \x03(\x0b\x32\x31.chromite.api.UprevVersionedPackageRequest.GitRef\x12.\n\rbuild_targets\x18\x04 \x03(\x0b\x32\x17.chromiumos.BuildTarget\x1a;\n\x06GitRef\x12\x12\n\nrepository\x18\x01 \x01(\t\x12\x0b\n\x03ref\x18\x02 \x01(\t\x12\x10\n\x08revision\x18\x03 \x01(\t\"\x86\x01\n\x15UprevPackagesResponse\x12\x44\n\x10modified_ebuilds\x18\x01 \x03(\x0b\x32*.chromite.api.UprevPackagesResponse.Ebuild\x12\x0f\n\x07version\x18\x02 \x01(\t\x1a\x16\n\x06\x45\x62uild\x12\x0c\n\x04path\x18\x01 \x01(\t\"W\n\x1dUprevVersionedPackageResponse\x12\x36\n\tresponses\x18\x01 \x03(\x0b\x32#.chromite.api.UprevPackagesResponse2\x96\x07\n\x0ePackageService\x12U\n\x0c\x42uildsChrome\x12!.chromite.api.BuildsChromeRequest\x1a\".chromite.api.BuildsChromeResponse\x12[\n\x0eGetBestVisible\x12#.chromite.api.GetBestVisibleRequest\x1a$.chromite.api.GetBestVisibleResponse\x12\x61\n\x10GetChromeVersion\x12%.chromite.api.GetChromeVersionRequest\x1a&.chromite.api.GetChromeVersionResponse\x12\x64\n\x11GetTargetVersions\x12&.chromite.api.GetTargetVersionsRequest\x1a\'.chromite.api.GetTargetVersionsResponse\x12g\n\x12GetBuilderMetadata\x12\'.chromite.api.GetBuilderMetadataRequest\x1a(.chromite.api.GetBuilderMetadataResponse\x12\x64\n\x11HasChromePrebuilt\x12&.chromite.api.HasChromePrebuiltRequest\x1a\'.chromite.api.HasChromePrebuiltResponse\x12R\n\x0bHasPrebuilt\x12 .chromite.api.HasPrebuiltRequest\x1a!.chromite.api.HasPrebuiltResponse\x12X\n\x05Uprev\x12\".chromite.api.UprevPackagesRequest\x1a#.chromite.api.UprevPackagesResponse\"\x06\xc2\xed\x1a\x02\x10\x02\x12x\n\x15UprevVersionedPackage\x12*.chromite.api.UprevVersionedPackageRequest\x1a+.chromite.api.UprevVersionedPackageResponse\"\x06\xc2\xed\x1a\x02\x10\x02\x1a\x10\xc2\xed\x1a\x0c\n\x08packages\x10\x01\x42\x38Z6go.chromium.org/chromiumos/infra/proto/go/chromite/apib\x06proto3')
   ,
   dependencies=[chromite_dot_api_dot_binhost__pb2.DESCRIPTOR,chromite_dot_api_dot_build__api__pb2.DESCRIPTOR,chromite_dot_api_dot_sysroot__pb2.DESCRIPTOR,chromiumos_dot_common__pb2.DESCRIPTOR,])
 
@@ -58,8 +58,8 @@
   ],
   containing_type=None,
   serialized_options=None,
-  serialized_start=2233,
-  serialized_end=2341,
+  serialized_start=2256,
+  serialized_end=2364,
 )
 _sym_db.RegisterEnumDescriptor(_NEEDSCHROMESOURCERESPONSE_REASON)
 
@@ -751,6 +751,13 @@
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='builds_chrome', full_name='chromite.api.NeedsChromeSourceResponse.builds_chrome', index=3,
+      number=4, type=8, cpp_type=7, label=1,
+      has_default_value=False, default_value=False,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
   ],
   extensions=[
   ],
@@ -765,7 +772,7 @@
   oneofs=[
   ],
   serialized_start=2067,
-  serialized_end=2341,
+  serialized_end=2364,
 )
 
 
@@ -816,8 +823,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=2344,
-  serialized_end=2510,
+  serialized_start=2367,
+  serialized_end=2533,
 )
 
 
@@ -847,8 +854,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=2512,
-  serialized_end=2555,
+  serialized_start=2535,
+  serialized_end=2578,
 )
 
 
@@ -899,8 +906,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=2558,
-  serialized_end=2733,
+  serialized_start=2581,
+  serialized_end=2756,
 )
 
 
@@ -944,8 +951,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=2968,
-  serialized_end=3027,
+  serialized_start=2991,
+  serialized_end=3050,
 )
 
 _UPREVVERSIONEDPACKAGEREQUEST = _descriptor.Descriptor(
@@ -995,8 +1002,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=2736,
-  serialized_end=3027,
+  serialized_start=2759,
+  serialized_end=3050,
 )
 
 
@@ -1026,8 +1033,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=3142,
-  serialized_end=3164,
+  serialized_start=3165,
+  serialized_end=3187,
 )
 
 _UPREVPACKAGESRESPONSE = _descriptor.Descriptor(
@@ -1063,8 +1070,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=3030,
-  serialized_end=3164,
+  serialized_start=3053,
+  serialized_end=3187,
 )
 
 
@@ -1094,8 +1101,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=3166,
-  serialized_end=3253,
+  serialized_start=3189,
+  serialized_end=3276,
 )
 
 _BUILDSCHROMEREQUEST.fields_by_name['chroot'].message_type = chromiumos_dot_common__pb2._CHROOT
@@ -1337,8 +1344,8 @@
   file=DESCRIPTOR,
   index=0,
   serialized_options=_b('\302\355\032\014\n\010packages\020\001'),
-  serialized_start=3256,
-  serialized_end=4174,
+  serialized_start=3279,
+  serialized_end=4197,
   methods=[
   _descriptor.MethodDescriptor(
     name='BuildsChrome',
diff --git a/api/gen/client/client_id_pb2.py b/api/gen/client/client_id_pb2.py
deleted file mode 100644
index 3a08063..0000000
--- a/api/gen/client/client_id_pb2.py
+++ /dev/null
@@ -1,70 +0,0 @@
-# Generated by the protocol buffer compiler.  DO NOT EDIT!
-# source: client/client_id.proto
-
-import sys
-_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
-from google.protobuf import descriptor as _descriptor
-from google.protobuf import message as _message
-from google.protobuf import reflection as _reflection
-from google.protobuf import symbol_database as _symbol_database
-# @@protoc_insertion_point(imports)
-
-_sym_db = _symbol_database.Default()
-
-
-
-
-DESCRIPTOR = _descriptor.FileDescriptor(
-  name='client/client_id.proto',
-  package='client',
-  syntax='proto3',
-  serialized_options=_b('Z0go.chromium.org/chromiumos/infra/proto/go/client'),
-  serialized_pb=_b('\n\x16\x63lient/client_id.proto\x12\x06\x63lient\"\x16\n\x08\x43lientId\x12\n\n\x02id\x18\x01 \x01(\tB2Z0go.chromium.org/chromiumos/infra/proto/go/clientb\x06proto3')
-)
-
-
-
-
-_CLIENTID = _descriptor.Descriptor(
-  name='ClientId',
-  full_name='client.ClientId',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='id', full_name='client.ClientId.id', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=34,
-  serialized_end=56,
-)
-
-DESCRIPTOR.message_types_by_name['ClientId'] = _CLIENTID
-_sym_db.RegisterFileDescriptor(DESCRIPTOR)
-
-ClientId = _reflection.GeneratedProtocolMessageType('ClientId', (_message.Message,), dict(
-  DESCRIPTOR = _CLIENTID,
-  __module__ = 'client.client_id_pb2'
-  # @@protoc_insertion_point(class_scope:client.ClientId)
-  ))
-_sym_db.RegisterMessage(ClientId)
-
-
-DESCRIPTOR._options = None
-# @@protoc_insertion_point(module_scope)
diff --git a/api/gen/client/client_pb2.py b/api/gen/client/client_pb2.py
deleted file mode 100644
index 60172d3..0000000
--- a/api/gen/client/client_pb2.py
+++ /dev/null
@@ -1,80 +0,0 @@
-# Generated by the protocol buffer compiler.  DO NOT EDIT!
-# source: client/client.proto
-
-import sys
-_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
-from google.protobuf import descriptor as _descriptor
-from google.protobuf import message as _message
-from google.protobuf import reflection as _reflection
-from google.protobuf import symbol_database as _symbol_database
-# @@protoc_insertion_point(imports)
-
-_sym_db = _symbol_database.Default()
-
-
-from chromite.api.gen.client import client_id_pb2 as client_dot_client__id__pb2
-
-
-DESCRIPTOR = _descriptor.FileDescriptor(
-  name='client/client.proto',
-  package='client',
-  syntax='proto3',
-  serialized_options=_b('Z0go.chromium.org/chromiumos/infra/proto/go/client'),
-  serialized_pb=_b('\n\x13\x63lient/client.proto\x12\x06\x63lient\x1a\x16\x63lient/client_id.proto\"4\n\x06\x43lient\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x1c\n\x02id\x18\x02 \x01(\x0b\x32\x10.client.ClientIdB2Z0go.chromium.org/chromiumos/infra/proto/go/clientb\x06proto3')
-  ,
-  dependencies=[client_dot_client__id__pb2.DESCRIPTOR,])
-
-
-
-
-_CLIENT = _descriptor.Descriptor(
-  name='Client',
-  full_name='client.Client',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='name', full_name='client.Client.name', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='id', full_name='client.Client.id', index=1,
-      number=2, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=55,
-  serialized_end=107,
-)
-
-_CLIENT.fields_by_name['id'].message_type = client_dot_client__id__pb2._CLIENTID
-DESCRIPTOR.message_types_by_name['Client'] = _CLIENT
-_sym_db.RegisterFileDescriptor(DESCRIPTOR)
-
-Client = _reflection.GeneratedProtocolMessageType('Client', (_message.Message,), dict(
-  DESCRIPTOR = _CLIENT,
-  __module__ = 'client.client_pb2'
-  # @@protoc_insertion_point(class_scope:client.Client)
-  ))
-_sym_db.RegisterMessage(Client)
-
-
-DESCRIPTOR._options = None
-# @@protoc_insertion_point(module_scope)
diff --git a/api/gen/client/profile_id_pb2.py b/api/gen/client/profile_id_pb2.py
deleted file mode 100644
index ead5cec..0000000
--- a/api/gen/client/profile_id_pb2.py
+++ /dev/null
@@ -1,80 +0,0 @@
-# Generated by the protocol buffer compiler.  DO NOT EDIT!
-# source: client/profile_id.proto
-
-import sys
-_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
-from google.protobuf import descriptor as _descriptor
-from google.protobuf import message as _message
-from google.protobuf import reflection as _reflection
-from google.protobuf import symbol_database as _symbol_database
-# @@protoc_insertion_point(imports)
-
-_sym_db = _symbol_database.Default()
-
-
-from chromite.api.gen.client import client_id_pb2 as client_dot_client__id__pb2
-
-
-DESCRIPTOR = _descriptor.FileDescriptor(
-  name='client/profile_id.proto',
-  package='client',
-  syntax='proto3',
-  serialized_options=_b('Z0go.chromium.org/chromiumos/infra/proto/go/client'),
-  serialized_pb=_b('\n\x17\x63lient/profile_id.proto\x12\x06\x63lient\x1a\x16\x63lient/client_id.proto\"<\n\tProfileId\x12\n\n\x02id\x18\x01 \x01(\t\x12#\n\tclient_id\x18\x02 \x01(\x0b\x32\x10.client.ClientIdB2Z0go.chromium.org/chromiumos/infra/proto/go/clientb\x06proto3')
-  ,
-  dependencies=[client_dot_client__id__pb2.DESCRIPTOR,])
-
-
-
-
-_PROFILEID = _descriptor.Descriptor(
-  name='ProfileId',
-  full_name='client.ProfileId',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='id', full_name='client.ProfileId.id', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='client_id', full_name='client.ProfileId.client_id', index=1,
-      number=2, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=59,
-  serialized_end=119,
-)
-
-_PROFILEID.fields_by_name['client_id'].message_type = client_dot_client__id__pb2._CLIENTID
-DESCRIPTOR.message_types_by_name['ProfileId'] = _PROFILEID
-_sym_db.RegisterFileDescriptor(DESCRIPTOR)
-
-ProfileId = _reflection.GeneratedProtocolMessageType('ProfileId', (_message.Message,), dict(
-  DESCRIPTOR = _PROFILEID,
-  __module__ = 'client.profile_id_pb2'
-  # @@protoc_insertion_point(class_scope:client.ProfileId)
-  ))
-_sym_db.RegisterMessage(ProfileId)
-
-
-DESCRIPTOR._options = None
-# @@protoc_insertion_point(module_scope)
diff --git a/api/gen/client/profile_pb2.py b/api/gen/client/profile_pb2.py
deleted file mode 100644
index 88b579e..0000000
--- a/api/gen/client/profile_pb2.py
+++ /dev/null
@@ -1,433 +0,0 @@
-# Generated by the protocol buffer compiler.  DO NOT EDIT!
-# source: client/profile.proto
-
-import sys
-_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
-from google.protobuf import descriptor as _descriptor
-from google.protobuf import message as _message
-from google.protobuf import reflection as _reflection
-from google.protobuf import symbol_database as _symbol_database
-# @@protoc_insertion_point(imports)
-
-_sym_db = _symbol_database.Default()
-
-
-from chromite.api.gen.client import profile_id_pb2 as client_dot_profile__id__pb2
-from google.protobuf import duration_pb2 as google_dot_protobuf_dot_duration__pb2
-
-
-DESCRIPTOR = _descriptor.FileDescriptor(
-  name='client/profile.proto',
-  package='client',
-  syntax='proto3',
-  serialized_options=_b('Z0go.chromium.org/chromiumos/infra/proto/go/client'),
-  serialized_pb=_b('\n\x14\x63lient/profile.proto\x12\x06\x63lient\x1a\x17\x63lient/profile_id.proto\x1a\x1egoogle/protobuf/duration.proto\"r\n\x07Profile\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x1d\n\x02id\x18\x02 \x01(\x0b\x32\x11.client.ProfileId\x12:\n\x15test_platform_profile\x18\x03 \x01(\x0b\x32\x1b.client.TestPlatformProfile\"\xbf\x01\n\x13TestPlatformProfile\x12+\n\tscheduler\x18\x01 \x01(\x0b\x32\x18.client.SchedulerProfile\x12#\n\x05retry\x18\x02 \x01(\x0b\x32\x14.client.RetryProfile\x12\'\n\x07timeout\x18\x03 \x01(\x0b\x32\x16.client.TimeoutProfile\x12-\n\nmonitoring\x18\x04 \x01(\x0b\x32\x19.client.MonitoringProfile\"\x97\x03\n\x10SchedulerProfile\x12<\n\x0cmanaged_pool\x18\x01 \x01(\x0e\x32$.client.SchedulerProfile.ManagedPoolH\x00\x12\x18\n\x0eunmanaged_pool\x18\x02 \x01(\tH\x00\x12\x10\n\x08priority\x18\x03 \x01(\r\x12\x15\n\rquota_account\x18\x04 \x01(\t\"\xf9\x01\n\x0bManagedPool\x12\x1c\n\x18MANAGED_POOL_UNSPECIFIED\x10\x00\x12\x13\n\x0fMANAGED_POOL_CQ\x10\x01\x12\x14\n\x10MANAGED_POOL_BVT\x10\x02\x12\x17\n\x13MANAGED_POOL_SUITES\x10\x03\x12\x14\n\x10MANAGED_POOL_CTS\x10\x04\x12\x1d\n\x19MANAGED_POOL_CTS_PERBUILD\x10\x05\x12\x1b\n\x17MANAGED_POOL_CONTINUOUS\x10\x06\x12\x1e\n\x1aMANAGED_POOL_ARC_PRESUBMIT\x10\x07\x12\x16\n\x12MANAGED_POOL_QUOTA\x10\x08\x42\x06\n\x04pool\"*\n\x0cRetryProfile\x12\r\n\x05\x61llow\x18\x01 \x01(\x08\x12\x0b\n\x03max\x18\x02 \x01(\r\"E\n\x0eTimeoutProfile\x12\x33\n\x10maximum_duration\x18\x01 \x01(\x0b\x32\x19.google.protobuf.Duration\"f\n\x11MonitoringProfile\x12Q\n!test_platform_alerting_thresholds\x18\x01 \x01(\x0b\x32&.client.TestPlatformAlertingThresholds\" \n\x1eTestPlatformAlertingThresholdsB2Z0go.chromium.org/chromiumos/infra/proto/go/clientb\x06proto3')
-  ,
-  dependencies=[client_dot_profile__id__pb2.DESCRIPTOR,google_dot_protobuf_dot_duration__pb2.DESCRIPTOR,])
-
-
-
-_SCHEDULERPROFILE_MANAGEDPOOL = _descriptor.EnumDescriptor(
-  name='ManagedPool',
-  full_name='client.SchedulerProfile.ManagedPool',
-  filename=None,
-  file=DESCRIPTOR,
-  values=[
-    _descriptor.EnumValueDescriptor(
-      name='MANAGED_POOL_UNSPECIFIED', index=0, number=0,
-      serialized_options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='MANAGED_POOL_CQ', index=1, number=1,
-      serialized_options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='MANAGED_POOL_BVT', index=2, number=2,
-      serialized_options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='MANAGED_POOL_SUITES', index=3, number=3,
-      serialized_options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='MANAGED_POOL_CTS', index=4, number=4,
-      serialized_options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='MANAGED_POOL_CTS_PERBUILD', index=5, number=5,
-      serialized_options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='MANAGED_POOL_CONTINUOUS', index=6, number=6,
-      serialized_options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='MANAGED_POOL_ARC_PRESUBMIT', index=7, number=7,
-      serialized_options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='MANAGED_POOL_QUOTA', index=8, number=8,
-      serialized_options=None,
-      type=None),
-  ],
-  containing_type=None,
-  serialized_options=None,
-  serialized_start=550,
-  serialized_end=799,
-)
-_sym_db.RegisterEnumDescriptor(_SCHEDULERPROFILE_MANAGEDPOOL)
-
-
-_PROFILE = _descriptor.Descriptor(
-  name='Profile',
-  full_name='client.Profile',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='name', full_name='client.Profile.name', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='id', full_name='client.Profile.id', index=1,
-      number=2, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='test_platform_profile', full_name='client.Profile.test_platform_profile', index=2,
-      number=3, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=89,
-  serialized_end=203,
-)
-
-
-_TESTPLATFORMPROFILE = _descriptor.Descriptor(
-  name='TestPlatformProfile',
-  full_name='client.TestPlatformProfile',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='scheduler', full_name='client.TestPlatformProfile.scheduler', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='retry', full_name='client.TestPlatformProfile.retry', index=1,
-      number=2, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='timeout', full_name='client.TestPlatformProfile.timeout', index=2,
-      number=3, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='monitoring', full_name='client.TestPlatformProfile.monitoring', index=3,
-      number=4, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=206,
-  serialized_end=397,
-)
-
-
-_SCHEDULERPROFILE = _descriptor.Descriptor(
-  name='SchedulerProfile',
-  full_name='client.SchedulerProfile',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='managed_pool', full_name='client.SchedulerProfile.managed_pool', index=0,
-      number=1, type=14, cpp_type=8, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='unmanaged_pool', full_name='client.SchedulerProfile.unmanaged_pool', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='priority', full_name='client.SchedulerProfile.priority', index=2,
-      number=3, type=13, cpp_type=3, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='quota_account', full_name='client.SchedulerProfile.quota_account', index=3,
-      number=4, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-    _SCHEDULERPROFILE_MANAGEDPOOL,
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-    _descriptor.OneofDescriptor(
-      name='pool', full_name='client.SchedulerProfile.pool',
-      index=0, containing_type=None, fields=[]),
-  ],
-  serialized_start=400,
-  serialized_end=807,
-)
-
-
-_RETRYPROFILE = _descriptor.Descriptor(
-  name='RetryProfile',
-  full_name='client.RetryProfile',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='allow', full_name='client.RetryProfile.allow', index=0,
-      number=1, type=8, cpp_type=7, label=1,
-      has_default_value=False, default_value=False,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='max', full_name='client.RetryProfile.max', index=1,
-      number=2, type=13, cpp_type=3, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=809,
-  serialized_end=851,
-)
-
-
-_TIMEOUTPROFILE = _descriptor.Descriptor(
-  name='TimeoutProfile',
-  full_name='client.TimeoutProfile',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='maximum_duration', full_name='client.TimeoutProfile.maximum_duration', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=853,
-  serialized_end=922,
-)
-
-
-_MONITORINGPROFILE = _descriptor.Descriptor(
-  name='MonitoringProfile',
-  full_name='client.MonitoringProfile',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='test_platform_alerting_thresholds', full_name='client.MonitoringProfile.test_platform_alerting_thresholds', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=924,
-  serialized_end=1026,
-)
-
-
-_TESTPLATFORMALERTINGTHRESHOLDS = _descriptor.Descriptor(
-  name='TestPlatformAlertingThresholds',
-  full_name='client.TestPlatformAlertingThresholds',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1028,
-  serialized_end=1060,
-)
-
-_PROFILE.fields_by_name['id'].message_type = client_dot_profile__id__pb2._PROFILEID
-_PROFILE.fields_by_name['test_platform_profile'].message_type = _TESTPLATFORMPROFILE
-_TESTPLATFORMPROFILE.fields_by_name['scheduler'].message_type = _SCHEDULERPROFILE
-_TESTPLATFORMPROFILE.fields_by_name['retry'].message_type = _RETRYPROFILE
-_TESTPLATFORMPROFILE.fields_by_name['timeout'].message_type = _TIMEOUTPROFILE
-_TESTPLATFORMPROFILE.fields_by_name['monitoring'].message_type = _MONITORINGPROFILE
-_SCHEDULERPROFILE.fields_by_name['managed_pool'].enum_type = _SCHEDULERPROFILE_MANAGEDPOOL
-_SCHEDULERPROFILE_MANAGEDPOOL.containing_type = _SCHEDULERPROFILE
-_SCHEDULERPROFILE.oneofs_by_name['pool'].fields.append(
-  _SCHEDULERPROFILE.fields_by_name['managed_pool'])
-_SCHEDULERPROFILE.fields_by_name['managed_pool'].containing_oneof = _SCHEDULERPROFILE.oneofs_by_name['pool']
-_SCHEDULERPROFILE.oneofs_by_name['pool'].fields.append(
-  _SCHEDULERPROFILE.fields_by_name['unmanaged_pool'])
-_SCHEDULERPROFILE.fields_by_name['unmanaged_pool'].containing_oneof = _SCHEDULERPROFILE.oneofs_by_name['pool']
-_TIMEOUTPROFILE.fields_by_name['maximum_duration'].message_type = google_dot_protobuf_dot_duration__pb2._DURATION
-_MONITORINGPROFILE.fields_by_name['test_platform_alerting_thresholds'].message_type = _TESTPLATFORMALERTINGTHRESHOLDS
-DESCRIPTOR.message_types_by_name['Profile'] = _PROFILE
-DESCRIPTOR.message_types_by_name['TestPlatformProfile'] = _TESTPLATFORMPROFILE
-DESCRIPTOR.message_types_by_name['SchedulerProfile'] = _SCHEDULERPROFILE
-DESCRIPTOR.message_types_by_name['RetryProfile'] = _RETRYPROFILE
-DESCRIPTOR.message_types_by_name['TimeoutProfile'] = _TIMEOUTPROFILE
-DESCRIPTOR.message_types_by_name['MonitoringProfile'] = _MONITORINGPROFILE
-DESCRIPTOR.message_types_by_name['TestPlatformAlertingThresholds'] = _TESTPLATFORMALERTINGTHRESHOLDS
-_sym_db.RegisterFileDescriptor(DESCRIPTOR)
-
-Profile = _reflection.GeneratedProtocolMessageType('Profile', (_message.Message,), dict(
-  DESCRIPTOR = _PROFILE,
-  __module__ = 'client.profile_pb2'
-  # @@protoc_insertion_point(class_scope:client.Profile)
-  ))
-_sym_db.RegisterMessage(Profile)
-
-TestPlatformProfile = _reflection.GeneratedProtocolMessageType('TestPlatformProfile', (_message.Message,), dict(
-  DESCRIPTOR = _TESTPLATFORMPROFILE,
-  __module__ = 'client.profile_pb2'
-  # @@protoc_insertion_point(class_scope:client.TestPlatformProfile)
-  ))
-_sym_db.RegisterMessage(TestPlatformProfile)
-
-SchedulerProfile = _reflection.GeneratedProtocolMessageType('SchedulerProfile', (_message.Message,), dict(
-  DESCRIPTOR = _SCHEDULERPROFILE,
-  __module__ = 'client.profile_pb2'
-  # @@protoc_insertion_point(class_scope:client.SchedulerProfile)
-  ))
-_sym_db.RegisterMessage(SchedulerProfile)
-
-RetryProfile = _reflection.GeneratedProtocolMessageType('RetryProfile', (_message.Message,), dict(
-  DESCRIPTOR = _RETRYPROFILE,
-  __module__ = 'client.profile_pb2'
-  # @@protoc_insertion_point(class_scope:client.RetryProfile)
-  ))
-_sym_db.RegisterMessage(RetryProfile)
-
-TimeoutProfile = _reflection.GeneratedProtocolMessageType('TimeoutProfile', (_message.Message,), dict(
-  DESCRIPTOR = _TIMEOUTPROFILE,
-  __module__ = 'client.profile_pb2'
-  # @@protoc_insertion_point(class_scope:client.TimeoutProfile)
-  ))
-_sym_db.RegisterMessage(TimeoutProfile)
-
-MonitoringProfile = _reflection.GeneratedProtocolMessageType('MonitoringProfile', (_message.Message,), dict(
-  DESCRIPTOR = _MONITORINGPROFILE,
-  __module__ = 'client.profile_pb2'
-  # @@protoc_insertion_point(class_scope:client.MonitoringProfile)
-  ))
-_sym_db.RegisterMessage(MonitoringProfile)
-
-TestPlatformAlertingThresholds = _reflection.GeneratedProtocolMessageType('TestPlatformAlertingThresholds', (_message.Message,), dict(
-  DESCRIPTOR = _TESTPLATFORMALERTINGTHRESHOLDS,
-  __module__ = 'client.profile_pb2'
-  # @@protoc_insertion_point(class_scope:client.TestPlatformAlertingThresholds)
-  ))
-_sym_db.RegisterMessage(TestPlatformAlertingThresholds)
-
-
-DESCRIPTOR._options = None
-# @@protoc_insertion_point(module_scope)
diff --git a/api/gen/client/request_id_pb2.py b/api/gen/client/request_id_pb2.py
deleted file mode 100644
index 0794ded..0000000
--- a/api/gen/client/request_id_pb2.py
+++ /dev/null
@@ -1,80 +0,0 @@
-# Generated by the protocol buffer compiler.  DO NOT EDIT!
-# source: client/request_id.proto
-
-import sys
-_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
-from google.protobuf import descriptor as _descriptor
-from google.protobuf import message as _message
-from google.protobuf import reflection as _reflection
-from google.protobuf import symbol_database as _symbol_database
-# @@protoc_insertion_point(imports)
-
-_sym_db = _symbol_database.Default()
-
-
-from chromite.api.gen.client import client_id_pb2 as client_dot_client__id__pb2
-
-
-DESCRIPTOR = _descriptor.FileDescriptor(
-  name='client/request_id.proto',
-  package='client',
-  syntax='proto3',
-  serialized_options=_b('Z0go.chromium.org/chromiumos/infra/proto/go/client'),
-  serialized_pb=_b('\n\x17\x63lient/request_id.proto\x12\x06\x63lient\x1a\x16\x63lient/client_id.proto\"<\n\tRequestId\x12\n\n\x02id\x18\x01 \x01(\t\x12#\n\tclient_id\x18\x02 \x01(\x0b\x32\x10.client.ClientIdB2Z0go.chromium.org/chromiumos/infra/proto/go/clientb\x06proto3')
-  ,
-  dependencies=[client_dot_client__id__pb2.DESCRIPTOR,])
-
-
-
-
-_REQUESTID = _descriptor.Descriptor(
-  name='RequestId',
-  full_name='client.RequestId',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='id', full_name='client.RequestId.id', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='client_id', full_name='client.RequestId.client_id', index=1,
-      number=2, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=59,
-  serialized_end=119,
-)
-
-_REQUESTID.fields_by_name['client_id'].message_type = client_dot_client__id__pb2._CLIENTID
-DESCRIPTOR.message_types_by_name['RequestId'] = _REQUESTID
-_sym_db.RegisterFileDescriptor(DESCRIPTOR)
-
-RequestId = _reflection.GeneratedProtocolMessageType('RequestId', (_message.Message,), dict(
-  DESCRIPTOR = _REQUESTID,
-  __module__ = 'client.request_id_pb2'
-  # @@protoc_insertion_point(class_scope:client.RequestId)
-  ))
-_sym_db.RegisterMessage(RequestId)
-
-
-DESCRIPTOR._options = None
-# @@protoc_insertion_point(module_scope)
diff --git a/api/gen/device/config_pb2.py b/api/gen/device/config_pb2.py
index f5faa66..6fe3a52 100644
--- a/api/gen/device/config_pb2.py
+++ b/api/gen/device/config_pb2.py
@@ -20,7 +20,7 @@
   package='device',
   syntax='proto3',
   serialized_options=_b('Z0go.chromium.org/chromiumos/infra/proto/go/device'),
-  serialized_pb=_b('\n\x13\x64\x65vice/config.proto\x12\x06\x64\x65vice\x1a\x16\x64\x65vice/config_id.proto\"\xc4\x17\n\x06\x43onfig\x12\x1c\n\x02id\x18\x01 \x01(\x0b\x32\x10.device.ConfigId\x12.\n\x0b\x66orm_factor\x18\x03 \x01(\x0e\x32\x19.device.Config.FormFactor\x12\x12\n\ngpu_family\x18\x04 \x01(\t\x12)\n\x08graphics\x18\x05 \x01(\x0e\x32\x17.device.Config.Graphics\x12\x39\n\x11hardware_features\x18\x06 \x03(\x0e\x32\x1e.device.Config.HardwareFeature\x12)\n\x05power\x18\x08 \x01(\x0e\x32\x1a.device.Config.PowerSupply\x12\'\n\x07storage\x18\t \x01(\x0e\x32\x16.device.Config.Storage\x12\x45\n\x1bvideo_acceleration_supports\x18\n \x03(\x0e\x32 .device.Config.VideoAcceleration\x12\x1f\n\x03soc\x18\x0b \x01(\x0e\x32\x12.device.Config.SOC\x12\x0b\n\x03tam\x18\x0c \x03(\t\x12\n\n\x02\x65\x65\x18\r \x03(\t\x12\x1f\n\x03odm\x18\x0e \x01(\x0e\x32\x12.device.Config.ODM\x12\x17\n\x0fodm_email_group\x18\x0f \x01(\t\x12\x1f\n\x03oem\x18\x10 \x01(\x0e\x32\x12.device.Config.OEM\x12\x17\n\x0foem_email_group\x18\x11 \x01(\t\x12\x17\n\x0fsoc_email_group\x18\x12 \x01(\t\x12\x1e\n\x16\x66irmware_configuration\x18\x13 \x01(\r\x12(\n\x03\x63pu\x18\x14 \x01(\x0e\x32\x1b.device.Config.Architecture\"\xec\x01\n\nFormFactor\x12\x1b\n\x17\x46ORM_FACTOR_UNSPECIFIED\x10\x00\x12\x19\n\x15\x46ORM_FACTOR_CLAMSHELL\x10\x01\x12\x1b\n\x17\x46ORM_FACTOR_CONVERTIBLE\x10\x02\x12\x1a\n\x16\x46ORM_FACTOR_DETACHABLE\x10\x03\x12\x1a\n\x16\x46ORM_FACTOR_CHROMEBASE\x10\x04\x12\x19\n\x15\x46ORM_FACTOR_CHROMEBOX\x10\x05\x12\x19\n\x15\x46ORM_FACTOR_CHROMEBIT\x10\x06\x12\x1b\n\x17\x46ORM_FACTOR_CHROMESLATE\x10\x07\"G\n\x08Graphics\x12\x18\n\x14GRAPHICS_UNSPECIFIED\x10\x00\x12\x0f\n\x0bGRAPHICS_GL\x10\x01\x12\x10\n\x0cGRAPHICS_GLE\x10\x02\"\xa3\x03\n\x0fHardwareFeature\x12 \n\x1cHARDWARE_FEATURE_UNSPECIFIED\x10\x00\x12\x1e\n\x1aHARDWARE_FEATURE_BLUETOOTH\x10\x01\x12\x1d\n\x19HARDWARE_FEATURE_FLASHROM\x10\x02\x12\x1f\n\x1bHARDWARE_FEATURE_HOTWORDING\x10\x03\x12%\n!HARDWARE_FEATURE_INTERNAL_DISPLAY\x10\x04\x12 \n\x1cHARDWARE_FEATURE_LUCID_SLEEP\x10\x05\x12\x1b\n\x17HARDWARE_FEATURE_WEBCAM\x10\x06\x12\x1b\n\x17HARDWARE_FEATURE_STYLUS\x10\x07\x12\x1d\n\x19HARDWARE_FEATURE_TOUCHPAD\x10\x08\x12 \n\x1cHARDWARE_FEATURE_TOUCHSCREEN\x10\t\x12(\n$HARDWARE_FEATURE_DETACHABLE_KEYBOARD\x10\n\x12 \n\x1cHARDWARE_FEATURE_FINGERPRINT\x10\x0b\"_\n\x0bPowerSupply\x12\x1c\n\x18POWER_SUPPLY_UNSPECIFIED\x10\x00\x12\x18\n\x14POWER_SUPPLY_BATTERY\x10\x01\x12\x18\n\x14POWER_SUPPLY_AC_ONLY\x10\x02\"x\n\x07Storage\x12\x17\n\x13STORAGE_UNSPECIFIED\x10\x00\x12\x0f\n\x0bSTORAGE_SSD\x10\x01\x12\x0f\n\x0bSTORAGE_HDD\x10\x02\x12\x0f\n\x0bSTORAGE_MMC\x10\x03\x12\x10\n\x0cSTORAGE_NVME\x10\x04\x12\x0f\n\x0bSTORAGE_UFS\x10\x05\"\x9c\x03\n\x11VideoAcceleration\x12\x15\n\x11VIDEO_UNSPECIFIED\x10\x00\x12\x1b\n\x17VIDEO_ACCELERATION_H264\x10\x01\x12\x1f\n\x1bVIDEO_ACCELERATION_ENC_H264\x10\x02\x12\x1a\n\x16VIDEO_ACCELERATION_VP8\x10\x03\x12\x1e\n\x1aVIDEO_ACCELERATION_ENC_VP8\x10\x04\x12\x1a\n\x16VIDEO_ACCELERATION_VP9\x10\x05\x12\x1e\n\x1aVIDEO_ACCELERATION_ENC_VP9\x10\x06\x12\x1c\n\x18VIDEO_ACCELERATION_VP9_2\x10\x07\x12 \n\x1cVIDEO_ACCELERATION_ENC_VP9_2\x10\x08\x12\x1b\n\x17VIDEO_ACCELERATION_H265\x10\t\x12\x1f\n\x1bVIDEO_ACCELERATION_ENC_H265\x10\n\x12\x1b\n\x17VIDEO_ACCELERATION_MJPG\x10\x0b\x12\x1f\n\x1bVIDEO_ACCELERATION_ENC_MJPG\x10\x0c\"\x99\x05\n\x03SOC\x12\x13\n\x0fSOC_UNSPECIFIED\x10\x00\x12\x13\n\x0fSOC_AMBERLAKE_Y\x10\x01\x12\x13\n\x0fSOC_APOLLO_LAKE\x10\x02\x12\x11\n\rSOC_BAY_TRAIL\x10\x03\x12\x10\n\x0cSOC_BRASWELL\x10\x04\x12\x11\n\rSOC_BROADWELL\x10\x05\x12\x15\n\x11SOC_CANNON_LAKE_Y\x10\x06\x12\x14\n\x10SOC_COMET_LAKE_U\x10\x07\x12\x13\n\x0fSOC_EXYNOS_5250\x10\x08\x12\x13\n\x0fSOC_EXYNOS_5420\x10\t\x12\x13\n\x0fSOC_GEMINI_LAKE\x10\n\x12\x0f\n\x0bSOC_HASWELL\x10\x0b\x12\x12\n\x0eSOC_ICE_LAKE_Y\x10\x0c\x12\x12\n\x0eSOC_IVY_BRIDGE\x10\r\x12\x12\n\x0eSOC_KABYLAKE_U\x10\x0e\x12\x14\n\x10SOC_KABYLAKE_U_R\x10\x0f\x12\x12\n\x0eSOC_KABYLAKE_Y\x10\x10\x12\x0e\n\nSOC_MT8173\x10\x11\x12\x0e\n\nSOC_MT8176\x10\x12\x12\x0e\n\nSOC_MT8183\x10\x13\x12\x0f\n\x0bSOC_PICASSO\x10\x14\x12\x12\n\x0eSOC_PINE_TRAIL\x10\x15\x12\x0e\n\nSOC_RK3288\x10\x16\x12\x0e\n\nSOC_RK3399\x10\x17\x12\x14\n\x10SOC_SANDY_BRIDGE\x10\x18\x12\x0e\n\nSOC_SDM845\x10\x19\x12\x11\n\rSOC_SKYLAKE_U\x10\x1a\x12\x11\n\rSOC_SKYLAKE_Y\x10\x1b\x12\x14\n\x10SOC_STONEY_RIDGE\x10\x1c\x12\x10\n\x0cSOC_TEGRA_K1\x10\x1d\x12\x16\n\x12SOC_WHISKEY_LAKE_U\x10\x1e\x12\x0e\n\nSOC_SC7180\x10\x1f\x12\x13\n\x0fSOC_JASPER_LAKE\x10 \x12\x12\n\x0eSOC_TIGER_LAKE\x10!\"n\n\x03ODM\x12\x13\n\x0fODM_UNSPECIFIED\x10\x00\x12\x0e\n\nODM_QUANTA\x10\x01\x12\x0f\n\x0bODM_BITLAND\x10\x02\x12\x0f\n\x0bODM_SAMSUNG\x10\x03\x12\x10\n\x0cODM_PEGATRON\x10\x04\x12\x0e\n\nODM_COMPAL\x10\x05\"~\n\x03OEM\x12\x13\n\x0fOEM_UNSPECIFIED\x10\x00\x12\x0c\n\x08OEM_ACER\x10\x01\x12\x0c\n\x08OEM_DELL\x10\x02\x12\x0f\n\x0bOEM_SAMSUNG\x10\x03\x12\n\n\x06OEM_HP\x10\x04\x12\x0e\n\nOEM_LENOVO\x10\x05\x12\x0c\n\x08OEM_ASUS\x10\x06\x12\x0b\n\x07OEM_NEC\x10\x07\"S\n\x0c\x41rchitecture\x12\x1a\n\x16\x41RCHITECTURE_UNDEFINED\x10\x00\x12\x07\n\x03X86\x10\x01\x12\n\n\x06X86_64\x10\x02\x12\x07\n\x03\x41RM\x10\x03\x12\t\n\x05\x41RM64\x10\x04J\x04\x08\x02\x10\x03R\x07\x63\x61rrier\"-\n\nAllConfigs\x12\x1f\n\x07\x63onfigs\x18\x01 \x03(\x0b\x32\x0e.device.ConfigB2Z0go.chromium.org/chromiumos/infra/proto/go/deviceb\x06proto3')
+  serialized_pb=_b('\n\x13\x64\x65vice/config.proto\x12\x06\x64\x65vice\x1a\x16\x64\x65vice/config_id.proto\"\x9a\x18\n\x06\x43onfig\x12\x1c\n\x02id\x18\x01 \x01(\x0b\x32\x10.device.ConfigId\x12.\n\x0b\x66orm_factor\x18\x03 \x01(\x0e\x32\x19.device.Config.FormFactor\x12\x12\n\ngpu_family\x18\x04 \x01(\t\x12)\n\x08graphics\x18\x05 \x01(\x0e\x32\x17.device.Config.Graphics\x12\x39\n\x11hardware_features\x18\x06 \x03(\x0e\x32\x1e.device.Config.HardwareFeature\x12)\n\x05power\x18\x08 \x01(\x0e\x32\x1a.device.Config.PowerSupply\x12\'\n\x07storage\x18\t \x01(\x0e\x32\x16.device.Config.Storage\x12\x45\n\x1bvideo_acceleration_supports\x18\n \x03(\x0e\x32 .device.Config.VideoAcceleration\x12\x1f\n\x03soc\x18\x0b \x01(\x0e\x32\x12.device.Config.SOC\x12\x0b\n\x03tam\x18\x0c \x03(\t\x12\n\n\x02\x65\x65\x18\r \x03(\t\x12\x1f\n\x03odm\x18\x0e \x01(\x0e\x32\x12.device.Config.ODM\x12\x17\n\x0fodm_email_group\x18\x0f \x01(\t\x12\x1f\n\x03oem\x18\x10 \x01(\x0e\x32\x12.device.Config.OEM\x12\x17\n\x0foem_email_group\x18\x11 \x01(\t\x12\x17\n\x0fsoc_email_group\x18\x12 \x01(\t\x12\x1e\n\x16\x66irmware_configuration\x18\x13 \x01(\r\x12(\n\x03\x63pu\x18\x14 \x01(\x0e\x32\x1b.device.Config.Architecture\x12\x1d\n\x02\x65\x63\x18\x15 \x01(\x0e\x32\x11.device.Config.EC\"\xec\x01\n\nFormFactor\x12\x1b\n\x17\x46ORM_FACTOR_UNSPECIFIED\x10\x00\x12\x19\n\x15\x46ORM_FACTOR_CLAMSHELL\x10\x01\x12\x1b\n\x17\x46ORM_FACTOR_CONVERTIBLE\x10\x02\x12\x1a\n\x16\x46ORM_FACTOR_DETACHABLE\x10\x03\x12\x1a\n\x16\x46ORM_FACTOR_CHROMEBASE\x10\x04\x12\x19\n\x15\x46ORM_FACTOR_CHROMEBOX\x10\x05\x12\x19\n\x15\x46ORM_FACTOR_CHROMEBIT\x10\x06\x12\x1b\n\x17\x46ORM_FACTOR_CHROMESLATE\x10\x07\"G\n\x08Graphics\x12\x18\n\x14GRAPHICS_UNSPECIFIED\x10\x00\x12\x0f\n\x0bGRAPHICS_GL\x10\x01\x12\x10\n\x0cGRAPHICS_GLE\x10\x02\"\xa3\x03\n\x0fHardwareFeature\x12 \n\x1cHARDWARE_FEATURE_UNSPECIFIED\x10\x00\x12\x1e\n\x1aHARDWARE_FEATURE_BLUETOOTH\x10\x01\x12\x1d\n\x19HARDWARE_FEATURE_FLASHROM\x10\x02\x12\x1f\n\x1bHARDWARE_FEATURE_HOTWORDING\x10\x03\x12%\n!HARDWARE_FEATURE_INTERNAL_DISPLAY\x10\x04\x12 \n\x1cHARDWARE_FEATURE_LUCID_SLEEP\x10\x05\x12\x1b\n\x17HARDWARE_FEATURE_WEBCAM\x10\x06\x12\x1b\n\x17HARDWARE_FEATURE_STYLUS\x10\x07\x12\x1d\n\x19HARDWARE_FEATURE_TOUCHPAD\x10\x08\x12 \n\x1cHARDWARE_FEATURE_TOUCHSCREEN\x10\t\x12(\n$HARDWARE_FEATURE_DETACHABLE_KEYBOARD\x10\n\x12 \n\x1cHARDWARE_FEATURE_FINGERPRINT\x10\x0b\"_\n\x0bPowerSupply\x12\x1c\n\x18POWER_SUPPLY_UNSPECIFIED\x10\x00\x12\x18\n\x14POWER_SUPPLY_BATTERY\x10\x01\x12\x18\n\x14POWER_SUPPLY_AC_ONLY\x10\x02\"x\n\x07Storage\x12\x17\n\x13STORAGE_UNSPECIFIED\x10\x00\x12\x0f\n\x0bSTORAGE_SSD\x10\x01\x12\x0f\n\x0bSTORAGE_HDD\x10\x02\x12\x0f\n\x0bSTORAGE_MMC\x10\x03\x12\x10\n\x0cSTORAGE_NVME\x10\x04\x12\x0f\n\x0bSTORAGE_UFS\x10\x05\"\x9c\x03\n\x11VideoAcceleration\x12\x15\n\x11VIDEO_UNSPECIFIED\x10\x00\x12\x1b\n\x17VIDEO_ACCELERATION_H264\x10\x01\x12\x1f\n\x1bVIDEO_ACCELERATION_ENC_H264\x10\x02\x12\x1a\n\x16VIDEO_ACCELERATION_VP8\x10\x03\x12\x1e\n\x1aVIDEO_ACCELERATION_ENC_VP8\x10\x04\x12\x1a\n\x16VIDEO_ACCELERATION_VP9\x10\x05\x12\x1e\n\x1aVIDEO_ACCELERATION_ENC_VP9\x10\x06\x12\x1c\n\x18VIDEO_ACCELERATION_VP9_2\x10\x07\x12 \n\x1cVIDEO_ACCELERATION_ENC_VP9_2\x10\x08\x12\x1b\n\x17VIDEO_ACCELERATION_H265\x10\t\x12\x1f\n\x1bVIDEO_ACCELERATION_ENC_H265\x10\n\x12\x1b\n\x17VIDEO_ACCELERATION_MJPG\x10\x0b\x12\x1f\n\x1bVIDEO_ACCELERATION_ENC_MJPG\x10\x0c\"\x99\x05\n\x03SOC\x12\x13\n\x0fSOC_UNSPECIFIED\x10\x00\x12\x13\n\x0fSOC_AMBERLAKE_Y\x10\x01\x12\x13\n\x0fSOC_APOLLO_LAKE\x10\x02\x12\x11\n\rSOC_BAY_TRAIL\x10\x03\x12\x10\n\x0cSOC_BRASWELL\x10\x04\x12\x11\n\rSOC_BROADWELL\x10\x05\x12\x15\n\x11SOC_CANNON_LAKE_Y\x10\x06\x12\x14\n\x10SOC_COMET_LAKE_U\x10\x07\x12\x13\n\x0fSOC_EXYNOS_5250\x10\x08\x12\x13\n\x0fSOC_EXYNOS_5420\x10\t\x12\x13\n\x0fSOC_GEMINI_LAKE\x10\n\x12\x0f\n\x0bSOC_HASWELL\x10\x0b\x12\x12\n\x0eSOC_ICE_LAKE_Y\x10\x0c\x12\x12\n\x0eSOC_IVY_BRIDGE\x10\r\x12\x12\n\x0eSOC_KABYLAKE_U\x10\x0e\x12\x14\n\x10SOC_KABYLAKE_U_R\x10\x0f\x12\x12\n\x0eSOC_KABYLAKE_Y\x10\x10\x12\x0e\n\nSOC_MT8173\x10\x11\x12\x0e\n\nSOC_MT8176\x10\x12\x12\x0e\n\nSOC_MT8183\x10\x13\x12\x0f\n\x0bSOC_PICASSO\x10\x14\x12\x12\n\x0eSOC_PINE_TRAIL\x10\x15\x12\x0e\n\nSOC_RK3288\x10\x16\x12\x0e\n\nSOC_RK3399\x10\x17\x12\x14\n\x10SOC_SANDY_BRIDGE\x10\x18\x12\x0e\n\nSOC_SDM845\x10\x19\x12\x11\n\rSOC_SKYLAKE_U\x10\x1a\x12\x11\n\rSOC_SKYLAKE_Y\x10\x1b\x12\x14\n\x10SOC_STONEY_RIDGE\x10\x1c\x12\x10\n\x0cSOC_TEGRA_K1\x10\x1d\x12\x16\n\x12SOC_WHISKEY_LAKE_U\x10\x1e\x12\x0e\n\nSOC_SC7180\x10\x1f\x12\x13\n\x0fSOC_JASPER_LAKE\x10 \x12\x12\n\x0eSOC_TIGER_LAKE\x10!\"n\n\x03ODM\x12\x13\n\x0fODM_UNSPECIFIED\x10\x00\x12\x0e\n\nODM_QUANTA\x10\x01\x12\x0f\n\x0bODM_BITLAND\x10\x02\x12\x0f\n\x0bODM_SAMSUNG\x10\x03\x12\x10\n\x0cODM_PEGATRON\x10\x04\x12\x0e\n\nODM_COMPAL\x10\x05\"~\n\x03OEM\x12\x13\n\x0fOEM_UNSPECIFIED\x10\x00\x12\x0c\n\x08OEM_ACER\x10\x01\x12\x0c\n\x08OEM_DELL\x10\x02\x12\x0f\n\x0bOEM_SAMSUNG\x10\x03\x12\n\n\x06OEM_HP\x10\x04\x12\x0e\n\nOEM_LENOVO\x10\x05\x12\x0c\n\x08OEM_ASUS\x10\x06\x12\x0b\n\x07OEM_NEC\x10\x07\"S\n\x0c\x41rchitecture\x12\x1a\n\x16\x41RCHITECTURE_UNDEFINED\x10\x00\x12\x07\n\x03X86\x10\x01\x12\n\n\x06X86_64\x10\x02\x12\x07\n\x03\x41RM\x10\x03\x12\t\n\x05\x41RM64\x10\x04\"5\n\x02\x45\x43\x12\x12\n\x0e\x45\x43_UNSPECIFIED\x10\x00\x12\r\n\tEC_CHROME\x10\x01\x12\x0c\n\x08\x45\x43_WILCO\x10\x02J\x04\x08\x02\x10\x03R\x07\x63\x61rrier\"-\n\nAllConfigs\x12\x1f\n\x07\x63onfigs\x18\x01 \x03(\x0b\x32\x0e.device.ConfigB2Z0go.chromium.org/chromiumos/infra/proto/go/deviceb\x06proto3')
   ,
   dependencies=[device_dot_config__id__pb2.DESCRIPTOR,])
 
@@ -67,8 +67,8 @@
   ],
   containing_type=None,
   serialized_options=None,
-  serialized_start=695,
-  serialized_end=931,
+  serialized_start=726,
+  serialized_end=962,
 )
 _sym_db.RegisterEnumDescriptor(_CONFIG_FORMFACTOR)
 
@@ -93,8 +93,8 @@
   ],
   containing_type=None,
   serialized_options=None,
-  serialized_start=933,
-  serialized_end=1004,
+  serialized_start=964,
+  serialized_end=1035,
 )
 _sym_db.RegisterEnumDescriptor(_CONFIG_GRAPHICS)
 
@@ -155,8 +155,8 @@
   ],
   containing_type=None,
   serialized_options=None,
-  serialized_start=1007,
-  serialized_end=1426,
+  serialized_start=1038,
+  serialized_end=1457,
 )
 _sym_db.RegisterEnumDescriptor(_CONFIG_HARDWAREFEATURE)
 
@@ -181,8 +181,8 @@
   ],
   containing_type=None,
   serialized_options=None,
-  serialized_start=1428,
-  serialized_end=1523,
+  serialized_start=1459,
+  serialized_end=1554,
 )
 _sym_db.RegisterEnumDescriptor(_CONFIG_POWERSUPPLY)
 
@@ -219,8 +219,8 @@
   ],
   containing_type=None,
   serialized_options=None,
-  serialized_start=1525,
-  serialized_end=1645,
+  serialized_start=1556,
+  serialized_end=1676,
 )
 _sym_db.RegisterEnumDescriptor(_CONFIG_STORAGE)
 
@@ -285,8 +285,8 @@
   ],
   containing_type=None,
   serialized_options=None,
-  serialized_start=1648,
-  serialized_end=2060,
+  serialized_start=1679,
+  serialized_end=2091,
 )
 _sym_db.RegisterEnumDescriptor(_CONFIG_VIDEOACCELERATION)
 
@@ -435,8 +435,8 @@
   ],
   containing_type=None,
   serialized_options=None,
-  serialized_start=2063,
-  serialized_end=2728,
+  serialized_start=2094,
+  serialized_end=2759,
 )
 _sym_db.RegisterEnumDescriptor(_CONFIG_SOC)
 
@@ -473,8 +473,8 @@
   ],
   containing_type=None,
   serialized_options=None,
-  serialized_start=2730,
-  serialized_end=2840,
+  serialized_start=2761,
+  serialized_end=2871,
 )
 _sym_db.RegisterEnumDescriptor(_CONFIG_ODM)
 
@@ -519,8 +519,8 @@
   ],
   containing_type=None,
   serialized_options=None,
-  serialized_start=2842,
-  serialized_end=2968,
+  serialized_start=2873,
+  serialized_end=2999,
 )
 _sym_db.RegisterEnumDescriptor(_CONFIG_OEM)
 
@@ -553,11 +553,37 @@
   ],
   containing_type=None,
   serialized_options=None,
-  serialized_start=2970,
-  serialized_end=3053,
+  serialized_start=3001,
+  serialized_end=3084,
 )
 _sym_db.RegisterEnumDescriptor(_CONFIG_ARCHITECTURE)
 
+_CONFIG_EC = _descriptor.EnumDescriptor(
+  name='EC',
+  full_name='device.Config.EC',
+  filename=None,
+  file=DESCRIPTOR,
+  values=[
+    _descriptor.EnumValueDescriptor(
+      name='EC_UNSPECIFIED', index=0, number=0,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='EC_CHROME', index=1, number=1,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='EC_WILCO', index=2, number=2,
+      serialized_options=None,
+      type=None),
+  ],
+  containing_type=None,
+  serialized_options=None,
+  serialized_start=3086,
+  serialized_end=3139,
+)
+_sym_db.RegisterEnumDescriptor(_CONFIG_EC)
+
 
 _CONFIG = _descriptor.Descriptor(
   name='Config',
@@ -692,6 +718,13 @@
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='ec', full_name='device.Config.ec', index=18,
+      number=21, type=14, cpp_type=8, label=1,
+      has_default_value=False, default_value=0,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
   ],
   extensions=[
   ],
@@ -707,6 +740,7 @@
     _CONFIG_ODM,
     _CONFIG_OEM,
     _CONFIG_ARCHITECTURE,
+    _CONFIG_EC,
   ],
   serialized_options=None,
   is_extendable=False,
@@ -715,7 +749,7 @@
   oneofs=[
   ],
   serialized_start=56,
-  serialized_end=3068,
+  serialized_end=3154,
 )
 
 
@@ -745,8 +779,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=3070,
-  serialized_end=3115,
+  serialized_start=3156,
+  serialized_end=3201,
 )
 
 _CONFIG.fields_by_name['id'].message_type = device_dot_config__id__pb2._CONFIGID
@@ -760,6 +794,7 @@
 _CONFIG.fields_by_name['odm'].enum_type = _CONFIG_ODM
 _CONFIG.fields_by_name['oem'].enum_type = _CONFIG_OEM
 _CONFIG.fields_by_name['cpu'].enum_type = _CONFIG_ARCHITECTURE
+_CONFIG.fields_by_name['ec'].enum_type = _CONFIG_EC
 _CONFIG_FORMFACTOR.containing_type = _CONFIG
 _CONFIG_GRAPHICS.containing_type = _CONFIG
 _CONFIG_HARDWAREFEATURE.containing_type = _CONFIG
@@ -770,6 +805,7 @@
 _CONFIG_ODM.containing_type = _CONFIG
 _CONFIG_OEM.containing_type = _CONFIG
 _CONFIG_ARCHITECTURE.containing_type = _CONFIG
+_CONFIG_EC.containing_type = _CONFIG
 _ALLCONFIGS.fields_by_name['configs'].message_type = _CONFIG
 DESCRIPTOR.message_types_by_name['Config'] = _CONFIG
 DESCRIPTOR.message_types_by_name['AllConfigs'] = _ALLCONFIGS
diff --git a/api/gen/test_platform/request_pb2.py b/api/gen/test_platform/request_pb2.py
index bd865a3..f8c6b2a 100644
--- a/api/gen/test_platform/request_pb2.py
+++ b/api/gen/test_platform/request_pb2.py
@@ -13,8 +13,6 @@
 
 
 from chromite.api.gen.chromite.api import test_metadata_pb2 as chromite_dot_api_dot_test__metadata__pb2
-from chromite.api.gen.client import request_id_pb2 as client_dot_request__id__pb2
-from chromite.api.gen.client import profile_id_pb2 as client_dot_profile__id__pb2
 from chromite.api.gen.chromiumos import common_pb2 as chromiumos_dot_common__pb2
 from google.protobuf import duration_pb2 as google_dot_protobuf_dot_duration__pb2
 
@@ -24,9 +22,9 @@
   package='test_platform',
   syntax='proto3',
   serialized_options=_b('Z7go.chromium.org/chromiumos/infra/proto/go/test_platform'),
-  serialized_pb=_b('\n\x1btest_platform/request.proto\x12\rtest_platform\x1a chromite/api/test_metadata.proto\x1a\x17\x63lient/request_id.proto\x1a\x17\x63lient/profile_id.proto\x1a\x17\x63hromiumos/common.proto\x1a\x1egoogle/protobuf/duration.proto\"\xcd\x16\n\x07Request\x12-\n\x06params\x18\x01 \x01(\x0b\x32\x1d.test_platform.Request.Params\x12\x32\n\ttest_plan\x18\x05 \x01(\x0b\x32\x1f.test_platform.Request.TestPlan\x12,\n\x11\x63lient_request_id\x18\x06 \x01(\x0b\x32\x11.client.RequestId\x12,\n\x11\x63lient_profile_id\x18\x07 \x01(\x0b\x32\x11.client.ProfileId\x1a\xd5\x0f\n\x06Params\x12M\n\x13hardware_attributes\x18\x01 \x01(\x0b\x32\x30.test_platform.Request.Params.HardwareAttributes\x12M\n\x13software_attributes\x18\x02 \x01(\x0b\x32\x30.test_platform.Request.Params.SoftwareAttributes\x12M\n\x13\x66reeform_attributes\x18\t \x01(\x0b\x32\x30.test_platform.Request.Params.FreeformAttributes\x12O\n\x15software_dependencies\x18\x03 \x03(\x0b\x32\x30.test_platform.Request.Params.SoftwareDependency\x12<\n\nscheduling\x18\x04 \x01(\x0b\x32(.test_platform.Request.Params.Scheduling\x12\x32\n\x05retry\x18\x05 \x01(\x0b\x32#.test_platform.Request.Params.Retry\x12\x38\n\x08metadata\x18\x06 \x01(\x0b\x32&.test_platform.Request.Params.Metadata\x12\x30\n\x04time\x18\x07 \x01(\x0b\x32\".test_platform.Request.Params.Time\x12>\n\x0b\x64\x65\x63orations\x18\x08 \x01(\x0b\x32).test_platform.Request.Params.Decorations\x12\x34\n\x06legacy\x18\n \x01(\x0b\x32$.test_platform.Request.Params.Legacy\x12@\n\x0cnotification\x18\x0b \x01(\x0b\x32*.test_platform.Request.Params.Notification\x12<\n\nmigrations\x18\x0c \x01(\x0b\x32(.test_platform.Request.Params.Migrations\x1a#\n\x12HardwareAttributes\x12\r\n\x05model\x18\x01 \x01(\t\x1a\x43\n\x12SoftwareAttributes\x12-\n\x0c\x62uild_target\x18\x02 \x01(\x0b\x32\x17.chromiumos.BuildTarget\x1a\x31\n\x12\x46reeformAttributes\x12\x1b\n\x13swarming_dimensions\x18\x01 \x03(\t\x1ao\n\x12SoftwareDependency\x12\x18\n\x0e\x63hromeos_build\x18\x03 \x01(\tH\x00\x12\x1b\n\x11ro_firmware_build\x18\x04 \x01(\tH\x00\x12\x1b\n\x11rw_firmware_build\x18\x05 \x01(\tH\x00\x42\x05\n\x03\x64\x65p\x1a\xbb\x03\n\nScheduling\x12L\n\x0cmanaged_pool\x18\x01 \x01(\x0e\x32\x34.test_platform.Request.Params.Scheduling.ManagedPoolH\x00\x12\x18\n\x0eunmanaged_pool\x18\x02 \x01(\tH\x00\x12\x1b\n\rquota_account\x18\x03 \x01(\tB\x02\x18\x01H\x00\x12\x10\n\x08priority\x18\x04 \x01(\x03\x12\x12\n\nqs_account\x18\x05 \x01(\t\"\xf9\x01\n\x0bManagedPool\x12\x1c\n\x18MANAGED_POOL_UNSPECIFIED\x10\x00\x12\x13\n\x0fMANAGED_POOL_CQ\x10\x01\x12\x14\n\x10MANAGED_POOL_BVT\x10\x02\x12\x17\n\x13MANAGED_POOL_SUITES\x10\x03\x12\x14\n\x10MANAGED_POOL_CTS\x10\x04\x12\x1d\n\x19MANAGED_POOL_CTS_PERBUILD\x10\x05\x12\x1b\n\x17MANAGED_POOL_CONTINUOUS\x10\x06\x12\x1e\n\x1aMANAGED_POOL_ARC_PRESUBMIT\x10\x07\x12\x16\n\x12MANAGED_POOL_QUOTA\x10\x08\x42\x06\n\x04pool\x1a#\n\x05Retry\x12\r\n\x05\x61llow\x18\x01 \x01(\x08\x12\x0b\n\x03max\x18\x02 \x01(\x05\x1aH\n\x08Metadata\x12\x19\n\x11test_metadata_url\x18\x01 \x01(\t\x12!\n\x19\x64\x65\x62ug_symbols_archive_url\x18\x02 \x01(\t\x1a;\n\x04Time\x12\x33\n\x10maximum_duration\x18\x01 \x01(\x0b\x32\x19.google.protobuf.Duration\x1a\xad\x01\n\x0b\x44\x65\x63orations\x12X\n\x10\x61utotest_keyvals\x18\x01 \x03(\x0b\x32>.test_platform.Request.Params.Decorations.AutotestKeyvalsEntry\x12\x0c\n\x04tags\x18\x02 \x03(\t\x1a\x36\n\x14\x41utotestKeyvalsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1a \n\x06Legacy\x12\x16\n\x0e\x61utotest_suite\x18\x01 \x01(\t\x1a$\n\x0cNotification\x12\x14\n\x0cpubsub_topic\x18\x01 \x01(\t\x1aI\n\nMigrations\x12\x17\n\x0fuse_test_runner\x18\x01 \x01(\x08\x12\"\n\x1a\x65nable_synchronous_offload\x18\x02 \x01(\x08\x1a\x15\n\x05Suite\x12\x0c\n\x04name\x18\x01 \x01(\t\x1a\x8e\x01\n\x04Test\x12\x38\n\x08\x61utotest\x18\x01 \x01(\x0b\x32$.test_platform.Request.Test.AutotestH\x00\x1a\x41\n\x08\x41utotest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x11\n\ttest_args\x18\x02 \x01(\t\x12\x14\n\x0c\x64isplay_name\x18\x03 \x01(\tB\t\n\x07harness\x1a\xe4\x02\n\x0b\x45numeration\x12S\n\x14\x61utotest_invocations\x18\x02 \x03(\x0b\x32\x35.test_platform.Request.Enumeration.AutotestInvocation\x1a\xff\x01\n\x12\x41utotestInvocation\x12(\n\x04test\x18\x01 \x01(\x0b\x32\x1a.chromite.api.AutotestTest\x12\x11\n\ttest_args\x18\x02 \x01(\t\x12\x14\n\x0c\x64isplay_name\x18\x03 \x01(\t\x12`\n\x0eresult_keyvals\x18\x04 \x03(\x0b\x32H.test_platform.Request.Enumeration.AutotestInvocation.ResultKeyvalsEntry\x1a\x34\n\x12ResultKeyvalsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1a\x9b\x01\n\x08TestPlan\x12+\n\x05suite\x18\x01 \x03(\x0b\x32\x1c.test_platform.Request.Suite\x12)\n\x04test\x18\x02 \x03(\x0b\x32\x1b.test_platform.Request.Test\x12\x37\n\x0b\x65numeration\x18\x03 \x01(\x0b\x32\".test_platform.Request.EnumerationB9Z7go.chromium.org/chromiumos/infra/proto/go/test_platformb\x06proto3')
+  serialized_pb=_b('\n\x1btest_platform/request.proto\x12\rtest_platform\x1a chromite/api/test_metadata.proto\x1a\x17\x63hromiumos/common.proto\x1a\x1egoogle/protobuf/duration.proto\"\x9f\x16\n\x07Request\x12-\n\x06params\x18\x01 \x01(\x0b\x32\x1d.test_platform.Request.Params\x12\x32\n\ttest_plan\x18\x05 \x01(\x0b\x32\x1f.test_platform.Request.TestPlan\x1a\xf7\x0f\n\x06Params\x12M\n\x13hardware_attributes\x18\x01 \x01(\x0b\x32\x30.test_platform.Request.Params.HardwareAttributes\x12M\n\x13software_attributes\x18\x02 \x01(\x0b\x32\x30.test_platform.Request.Params.SoftwareAttributes\x12M\n\x13\x66reeform_attributes\x18\t \x01(\x0b\x32\x30.test_platform.Request.Params.FreeformAttributes\x12O\n\x15software_dependencies\x18\x03 \x03(\x0b\x32\x30.test_platform.Request.Params.SoftwareDependency\x12<\n\nscheduling\x18\x04 \x01(\x0b\x32(.test_platform.Request.Params.Scheduling\x12\x32\n\x05retry\x18\x05 \x01(\x0b\x32#.test_platform.Request.Params.Retry\x12\x38\n\x08metadata\x18\x06 \x01(\x0b\x32&.test_platform.Request.Params.Metadata\x12\x30\n\x04time\x18\x07 \x01(\x0b\x32\".test_platform.Request.Params.Time\x12>\n\x0b\x64\x65\x63orations\x18\x08 \x01(\x0b\x32).test_platform.Request.Params.Decorations\x12\x34\n\x06legacy\x18\n \x01(\x0b\x32$.test_platform.Request.Params.Legacy\x12@\n\x0cnotification\x18\x0b \x01(\x0b\x32*.test_platform.Request.Params.Notification\x12<\n\nmigrations\x18\x0c \x01(\x0b\x32(.test_platform.Request.Params.Migrations\x1a#\n\x12HardwareAttributes\x12\r\n\x05model\x18\x01 \x01(\t\x1a\x43\n\x12SoftwareAttributes\x12-\n\x0c\x62uild_target\x18\x02 \x01(\x0b\x32\x17.chromiumos.BuildTarget\x1a\x31\n\x12\x46reeformAttributes\x12\x1b\n\x13swarming_dimensions\x18\x01 \x03(\t\x1ao\n\x12SoftwareDependency\x12\x18\n\x0e\x63hromeos_build\x18\x03 \x01(\tH\x00\x12\x1b\n\x11ro_firmware_build\x18\x04 \x01(\tH\x00\x12\x1b\n\x11rw_firmware_build\x18\x05 \x01(\tH\x00\x42\x05\n\x03\x64\x65p\x1a\xbb\x03\n\nScheduling\x12L\n\x0cmanaged_pool\x18\x01 \x01(\x0e\x32\x34.test_platform.Request.Params.Scheduling.ManagedPoolH\x00\x12\x18\n\x0eunmanaged_pool\x18\x02 \x01(\tH\x00\x12\x1b\n\rquota_account\x18\x03 \x01(\tB\x02\x18\x01H\x00\x12\x10\n\x08priority\x18\x04 \x01(\x03\x12\x12\n\nqs_account\x18\x05 \x01(\t\"\xf9\x01\n\x0bManagedPool\x12\x1c\n\x18MANAGED_POOL_UNSPECIFIED\x10\x00\x12\x13\n\x0fMANAGED_POOL_CQ\x10\x01\x12\x14\n\x10MANAGED_POOL_BVT\x10\x02\x12\x17\n\x13MANAGED_POOL_SUITES\x10\x03\x12\x14\n\x10MANAGED_POOL_CTS\x10\x04\x12\x1d\n\x19MANAGED_POOL_CTS_PERBUILD\x10\x05\x12\x1b\n\x17MANAGED_POOL_CONTINUOUS\x10\x06\x12\x1e\n\x1aMANAGED_POOL_ARC_PRESUBMIT\x10\x07\x12\x16\n\x12MANAGED_POOL_QUOTA\x10\x08\x42\x06\n\x04pool\x1a#\n\x05Retry\x12\r\n\x05\x61llow\x18\x01 \x01(\x08\x12\x0b\n\x03max\x18\x02 \x01(\x05\x1aH\n\x08Metadata\x12\x19\n\x11test_metadata_url\x18\x01 \x01(\t\x12!\n\x19\x64\x65\x62ug_symbols_archive_url\x18\x02 \x01(\t\x1a;\n\x04Time\x12\x33\n\x10maximum_duration\x18\x01 \x01(\x0b\x32\x19.google.protobuf.Duration\x1a\xad\x01\n\x0b\x44\x65\x63orations\x12X\n\x10\x61utotest_keyvals\x18\x01 \x03(\x0b\x32>.test_platform.Request.Params.Decorations.AutotestKeyvalsEntry\x12\x0c\n\x04tags\x18\x02 \x03(\t\x1a\x36\n\x14\x41utotestKeyvalsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1a \n\x06Legacy\x12\x16\n\x0e\x61utotest_suite\x18\x01 \x01(\t\x1a$\n\x0cNotification\x12\x14\n\x0cpubsub_topic\x18\x01 \x01(\t\x1ak\n\nMigrations\x12\x17\n\x0fuse_test_runner\x18\x01 \x01(\x08\x12\"\n\x1a\x65nable_synchronous_offload\x18\x02 \x01(\x08\x12 \n\x18notificationless_offload\x18\x03 \x01(\x08\x1a\x15\n\x05Suite\x12\x0c\n\x04name\x18\x01 \x01(\t\x1a\x8e\x01\n\x04Test\x12\x38\n\x08\x61utotest\x18\x01 \x01(\x0b\x32$.test_platform.Request.Test.AutotestH\x00\x1a\x41\n\x08\x41utotest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x11\n\ttest_args\x18\x02 \x01(\t\x12\x14\n\x0c\x64isplay_name\x18\x03 \x01(\tB\t\n\x07harness\x1a\xe4\x02\n\x0b\x45numeration\x12S\n\x14\x61utotest_invocations\x18\x02 \x03(\x0b\x32\x35.test_platform.Request.Enumeration.AutotestInvocation\x1a\xff\x01\n\x12\x41utotestInvocation\x12(\n\x04test\x18\x01 \x01(\x0b\x32\x1a.chromite.api.AutotestTest\x12\x11\n\ttest_args\x18\x02 \x01(\t\x12\x14\n\x0c\x64isplay_name\x18\x03 \x01(\t\x12`\n\x0eresult_keyvals\x18\x04 \x03(\x0b\x32H.test_platform.Request.Enumeration.AutotestInvocation.ResultKeyvalsEntry\x1a\x34\n\x12ResultKeyvalsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1a\x9b\x01\n\x08TestPlan\x12+\n\x05suite\x18\x01 \x03(\x0b\x32\x1c.test_platform.Request.Suite\x12)\n\x04test\x18\x02 \x03(\x0b\x32\x1b.test_platform.Request.Test\x12\x37\n\x0b\x65numeration\x18\x03 \x01(\x0b\x32\".test_platform.Request.EnumerationJ\x04\x08\x06\x10\x07J\x04\x08\x07\x10\x08\x42\x39Z7go.chromium.org/chromiumos/infra/proto/go/test_platformb\x06proto3')
   ,
-  dependencies=[chromite_dot_api_dot_test__metadata__pb2.DESCRIPTOR,client_dot_request__id__pb2.DESCRIPTOR,client_dot_profile__id__pb2.DESCRIPTOR,chromiumos_dot_common__pb2.DESCRIPTOR,google_dot_protobuf_dot_duration__pb2.DESCRIPTOR,])
+  dependencies=[chromite_dot_api_dot_test__metadata__pb2.DESCRIPTOR,chromiumos_dot_common__pb2.DESCRIPTOR,google_dot_protobuf_dot_duration__pb2.DESCRIPTOR,])
 
 
 
@@ -75,8 +73,8 @@
   ],
   containing_type=None,
   serialized_options=None,
-  serialized_start=1644,
-  serialized_end=1893,
+  serialized_start=1502,
+  serialized_end=1751,
 )
 _sym_db.RegisterEnumDescriptor(_REQUEST_PARAMS_SCHEDULING_MANAGEDPOOL)
 
@@ -107,8 +105,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=1187,
-  serialized_end=1222,
+  serialized_start=1045,
+  serialized_end=1080,
 )
 
 _REQUEST_PARAMS_SOFTWAREATTRIBUTES = _descriptor.Descriptor(
@@ -137,8 +135,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=1224,
-  serialized_end=1291,
+  serialized_start=1082,
+  serialized_end=1149,
 )
 
 _REQUEST_PARAMS_FREEFORMATTRIBUTES = _descriptor.Descriptor(
@@ -167,8 +165,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=1293,
-  serialized_end=1342,
+  serialized_start=1151,
+  serialized_end=1200,
 )
 
 _REQUEST_PARAMS_SOFTWAREDEPENDENCY = _descriptor.Descriptor(
@@ -214,8 +212,8 @@
       name='dep', full_name='test_platform.Request.Params.SoftwareDependency.dep',
       index=0, containing_type=None, fields=[]),
   ],
-  serialized_start=1344,
-  serialized_end=1455,
+  serialized_start=1202,
+  serialized_end=1313,
 )
 
 _REQUEST_PARAMS_SCHEDULING = _descriptor.Descriptor(
@@ -276,8 +274,8 @@
       name='pool', full_name='test_platform.Request.Params.Scheduling.pool',
       index=0, containing_type=None, fields=[]),
   ],
-  serialized_start=1458,
-  serialized_end=1901,
+  serialized_start=1316,
+  serialized_end=1759,
 )
 
 _REQUEST_PARAMS_RETRY = _descriptor.Descriptor(
@@ -313,8 +311,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=1903,
-  serialized_end=1938,
+  serialized_start=1761,
+  serialized_end=1796,
 )
 
 _REQUEST_PARAMS_METADATA = _descriptor.Descriptor(
@@ -350,8 +348,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=1940,
-  serialized_end=2012,
+  serialized_start=1798,
+  serialized_end=1870,
 )
 
 _REQUEST_PARAMS_TIME = _descriptor.Descriptor(
@@ -380,8 +378,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=2014,
-  serialized_end=2073,
+  serialized_start=1872,
+  serialized_end=1931,
 )
 
 _REQUEST_PARAMS_DECORATIONS_AUTOTESTKEYVALSENTRY = _descriptor.Descriptor(
@@ -417,8 +415,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=2195,
-  serialized_end=2249,
+  serialized_start=2053,
+  serialized_end=2107,
 )
 
 _REQUEST_PARAMS_DECORATIONS = _descriptor.Descriptor(
@@ -454,8 +452,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=2076,
-  serialized_end=2249,
+  serialized_start=1934,
+  serialized_end=2107,
 )
 
 _REQUEST_PARAMS_LEGACY = _descriptor.Descriptor(
@@ -484,8 +482,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=2251,
-  serialized_end=2283,
+  serialized_start=2109,
+  serialized_end=2141,
 )
 
 _REQUEST_PARAMS_NOTIFICATION = _descriptor.Descriptor(
@@ -514,8 +512,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=2285,
-  serialized_end=2321,
+  serialized_start=2143,
+  serialized_end=2179,
 )
 
 _REQUEST_PARAMS_MIGRATIONS = _descriptor.Descriptor(
@@ -539,6 +537,13 @@
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='notificationless_offload', full_name='test_platform.Request.Params.Migrations.notificationless_offload', index=2,
+      number=3, type=8, cpp_type=7, label=1,
+      has_default_value=False, default_value=False,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
   ],
   extensions=[
   ],
@@ -551,8 +556,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=2323,
-  serialized_end=2396,
+  serialized_start=2181,
+  serialized_end=2288,
 )
 
 _REQUEST_PARAMS = _descriptor.Descriptor(
@@ -658,8 +663,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=391,
-  serialized_end=2396,
+  serialized_start=249,
+  serialized_end=2288,
 )
 
 _REQUEST_SUITE = _descriptor.Descriptor(
@@ -688,8 +693,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=2398,
-  serialized_end=2419,
+  serialized_start=2290,
+  serialized_end=2311,
 )
 
 _REQUEST_TEST_AUTOTEST = _descriptor.Descriptor(
@@ -732,8 +737,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=2488,
-  serialized_end=2553,
+  serialized_start=2380,
+  serialized_end=2445,
 )
 
 _REQUEST_TEST = _descriptor.Descriptor(
@@ -765,8 +770,8 @@
       name='harness', full_name='test_platform.Request.Test.harness',
       index=0, containing_type=None, fields=[]),
   ],
-  serialized_start=2422,
-  serialized_end=2564,
+  serialized_start=2314,
+  serialized_end=2456,
 )
 
 _REQUEST_ENUMERATION_AUTOTESTINVOCATION_RESULTKEYVALSENTRY = _descriptor.Descriptor(
@@ -802,8 +807,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=2871,
-  serialized_end=2923,
+  serialized_start=2763,
+  serialized_end=2815,
 )
 
 _REQUEST_ENUMERATION_AUTOTESTINVOCATION = _descriptor.Descriptor(
@@ -853,8 +858,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=2668,
-  serialized_end=2923,
+  serialized_start=2560,
+  serialized_end=2815,
 )
 
 _REQUEST_ENUMERATION = _descriptor.Descriptor(
@@ -883,8 +888,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=2567,
-  serialized_end=2923,
+  serialized_start=2459,
+  serialized_end=2815,
 )
 
 _REQUEST_TESTPLAN = _descriptor.Descriptor(
@@ -927,8 +932,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=2926,
-  serialized_end=3081,
+  serialized_start=2818,
+  serialized_end=2973,
 )
 
 _REQUEST = _descriptor.Descriptor(
@@ -952,20 +957,6 @@
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='client_request_id', full_name='test_platform.Request.client_request_id', index=2,
-      number=6, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='client_profile_id', full_name='test_platform.Request.client_profile_id', index=3,
-      number=7, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
   ],
   extensions=[
   ],
@@ -978,8 +969,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=188,
-  serialized_end=3081,
+  serialized_start=138,
+  serialized_end=2985,
 )
 
 _REQUEST_PARAMS_HARDWAREATTRIBUTES.containing_type = _REQUEST_PARAMS
@@ -1050,8 +1041,6 @@
 _REQUEST_TESTPLAN.containing_type = _REQUEST
 _REQUEST.fields_by_name['params'].message_type = _REQUEST_PARAMS
 _REQUEST.fields_by_name['test_plan'].message_type = _REQUEST_TESTPLAN
-_REQUEST.fields_by_name['client_request_id'].message_type = client_dot_request__id__pb2._REQUESTID
-_REQUEST.fields_by_name['client_profile_id'].message_type = client_dot_profile__id__pb2._PROFILEID
 DESCRIPTOR.message_types_by_name['Request'] = _REQUEST
 _sym_db.RegisterFileDescriptor(DESCRIPTOR)
 
diff --git a/api/gen/test_platform/result_flow/publish_pb2.py b/api/gen/test_platform/result_flow/publish_pb2.py
index 9420bcf..c003eca 100644
--- a/api/gen/test_platform/result_flow/publish_pb2.py
+++ b/api/gen/test_platform/result_flow/publish_pb2.py
@@ -21,7 +21,7 @@
   package='test_platform.result_flow',
   syntax='proto3',
   serialized_options=_b('ZCgo.chromium.org/chromiumos/infra/proto/go/test_platform/result_flow'),
-  serialized_pb=_b('\n\'test_platform/result_flow/publish.proto\x12\x19test_platform.result_flow\x1a&test_platform/result_flow/common.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"\xdd\x01\n\x0ePublishRequest\x12\x10\n\x08\x62uild_id\x18\x01 \x01(\x03\x12\x17\n\x0fparent_build_id\x18\x02 \x01(\x03\x12\x34\n\x03\x63tp\x18\x03 \x01(\x0b\x32\'.test_platform.result_flow.PubSubConfig\x12<\n\x0btest_runner\x18\x04 \x01(\x0b\x32\'.test_platform.result_flow.PubSubConfig\x12,\n\x08\x64\x65\x61\x64line\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\"B\n\x0fPublishResponse\x12/\n\x05state\x18\x01 \x01(\x0e\x32 .test_platform.result_flow.StateBEZCgo.chromium.org/chromiumos/infra/proto/go/test_platform/result_flowb\x06proto3')
+  serialized_pb=_b('\n\'test_platform/result_flow/publish.proto\x12\x19test_platform.result_flow\x1a&test_platform/result_flow/common.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"\x99\x02\n\x0ePublishRequest\x12\x10\n\x08\x62uild_id\x18\x01 \x01(\x03\x12\x1b\n\x0fparent_build_id\x18\x02 \x01(\x03\x42\x02\x18\x01\x12\x34\n\x03\x63tp\x18\x03 \x01(\x0b\x32\'.test_platform.result_flow.PubSubConfig\x12<\n\x0btest_runner\x18\x04 \x01(\x0b\x32\'.test_platform.result_flow.PubSubConfig\x12,\n\x08\x64\x65\x61\x64line\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\"\n\x1ashould_poll_for_completion\x18\x06 \x01(\x08\x12\x12\n\nparent_uid\x18\x07 \x01(\t\"B\n\x0fPublishResponse\x12/\n\x05state\x18\x01 \x01(\x0e\x32 .test_platform.result_flow.StateBEZCgo.chromium.org/chromiumos/infra/proto/go/test_platform/result_flowb\x06proto3')
   ,
   dependencies=[test__platform_dot_result__flow_dot_common__pb2.DESCRIPTOR,google_dot_protobuf_dot_timestamp__pb2.DESCRIPTOR,])
 
@@ -48,7 +48,7 @@
       has_default_value=False, default_value=0,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=_b('\030\001'), file=DESCRIPTOR),
     _descriptor.FieldDescriptor(
       name='ctp', full_name='test_platform.result_flow.PublishRequest.ctp', index=2,
       number=3, type=11, cpp_type=10, label=1,
@@ -70,6 +70,20 @@
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='should_poll_for_completion', full_name='test_platform.result_flow.PublishRequest.should_poll_for_completion', index=5,
+      number=6, type=8, cpp_type=7, label=1,
+      has_default_value=False, default_value=False,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='parent_uid', full_name='test_platform.result_flow.PublishRequest.parent_uid', index=6,
+      number=7, type=9, cpp_type=9, label=1,
+      has_default_value=False, default_value=_b("").decode('utf-8'),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
   ],
   extensions=[
   ],
@@ -83,7 +97,7 @@
   oneofs=[
   ],
   serialized_start=144,
-  serialized_end=365,
+  serialized_end=425,
 )
 
 
@@ -113,8 +127,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=367,
-  serialized_end=433,
+  serialized_start=427,
+  serialized_end=493,
 )
 
 _PUBLISHREQUEST.fields_by_name['ctp'].message_type = test__platform_dot_result__flow_dot_common__pb2._PUBSUBCONFIG
@@ -141,4 +155,5 @@
 
 
 DESCRIPTOR._options = None
+_PUBLISHREQUEST.fields_by_name['parent_build_id']._options = None
 # @@protoc_insertion_point(module_scope)
diff --git a/api/gen/test_platform/skylab_local_state/common_pb2.py b/api/gen/test_platform/skylab_local_state/common_pb2.py
index 0de2cb6..5b4e52b 100644
--- a/api/gen/test_platform/skylab_local_state/common_pb2.py
+++ b/api/gen/test_platform/skylab_local_state/common_pb2.py
@@ -19,7 +19,7 @@
   package='test_platform.skylab_local_state',
   syntax='proto3',
   serialized_options=_b('ZJgo.chromium.org/chromiumos/infra/proto/go/test_platform/skylab_local_state'),
-  serialized_pb=_b('\n-test_platform/skylab_local_state/common.proto\x12 test_platform.skylab_local_state\"U\n\x06\x43onfig\x12\x15\n\radmin_service\x18\x01 \x01(\t\x12\x14\n\x0c\x61utotest_dir\x18\x02 \x01(\t\x12\x1e\n\x16\x63ros_inventory_service\x18\x03 \x01(\tBLZJgo.chromium.org/chromiumos/infra/proto/go/test_platform/skylab_local_stateb\x06proto3')
+  serialized_pb=_b('\n-test_platform/skylab_local_state/common.proto\x12 test_platform.skylab_local_state\"o\n\x06\x43onfig\x12\x15\n\radmin_service\x18\x01 \x01(\t\x12\x14\n\x0c\x61utotest_dir\x18\x02 \x01(\t\x12\x1e\n\x16\x63ros_inventory_service\x18\x03 \x01(\t\x12\x18\n\x10\x63ros_ufs_service\x18\x04 \x01(\tBLZJgo.chromium.org/chromiumos/infra/proto/go/test_platform/skylab_local_stateb\x06proto3')
 )
 
 
@@ -53,6 +53,13 @@
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='cros_ufs_service', full_name='test_platform.skylab_local_state.Config.cros_ufs_service', index=3,
+      number=4, type=9, cpp_type=9, label=1,
+      has_default_value=False, default_value=_b("").decode('utf-8'),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
   ],
   extensions=[
   ],
@@ -66,7 +73,7 @@
   oneofs=[
   ],
   serialized_start=83,
-  serialized_end=168,
+  serialized_end=194,
 )
 
 DESCRIPTOR.message_types_by_name['Config'] = _CONFIG
diff --git a/api/gen/test_platform/skylab_test_runner/config_pb2.py b/api/gen/test_platform/skylab_test_runner/config_pb2.py
index ab4fa0c..59ef5a8 100644
--- a/api/gen/test_platform/skylab_test_runner/config_pb2.py
+++ b/api/gen/test_platform/skylab_test_runner/config_pb2.py
@@ -19,7 +19,7 @@
   package='test_platform.skylab_test_runner',
   syntax='proto3',
   serialized_options=_b('ZJgo.chromium.org/chromiumos/infra/proto/go/test_platform/skylab_test_runner'),
-  serialized_pb=_b('\n-test_platform/skylab_test_runner/config.proto\x12 test_platform.skylab_test_runner\"\xa1\x03\n\x06\x43onfig\x12\x39\n\x03lab\x18\x01 \x01(\x0b\x32,.test_platform.skylab_test_runner.Config.Lab\x12\x41\n\x07harness\x18\x02 \x01(\x0b\x32\x30.test_platform.skylab_test_runner.Config.Harness\x12?\n\x06output\x18\x03 \x01(\x0b\x32/.test_platform.skylab_test_runner.Config.Output\x1a<\n\x03Lab\x12\x15\n\radmin_service\x18\x01 \x01(\t\x12\x1e\n\x16\x63ros_inventory_service\x18\x02 \x01(\t\x1a{\n\x07Harness\x12\x14\n\x0c\x61utotest_dir\x18\x01 \x01(\t\x12\x1c\n\x14synch_offload_subdir\x18\x02 \x01(\t\x12\x1b\n\x13ssp_base_image_name\x18\x03 \x01(\t\x12\x1f\n\x17prejob_deadline_seconds\x18\x04 \x01(\x03\x1a\x1d\n\x06Output\x12\x13\n\x0bgs_root_dir\x18\x01 \x01(\tBLZJgo.chromium.org/chromiumos/infra/proto/go/test_platform/skylab_test_runnerb\x06proto3')
+  serialized_pb=_b('\n-test_platform/skylab_test_runner/config.proto\x12 test_platform.skylab_test_runner\"\xb2\x04\n\x06\x43onfig\x12\x39\n\x03lab\x18\x01 \x01(\x0b\x32,.test_platform.skylab_test_runner.Config.Lab\x12\x41\n\x07harness\x18\x02 \x01(\x0b\x32\x30.test_platform.skylab_test_runner.Config.Harness\x12?\n\x06output\x18\x03 \x01(\x0b\x32/.test_platform.skylab_test_runner.Config.Output\x12K\n\x12result_flow_pubsub\x18\x04 \x01(\x0b\x32/.test_platform.skylab_test_runner.Config.PubSub\x1aV\n\x03Lab\x12\x15\n\radmin_service\x18\x01 \x01(\t\x12\x1e\n\x16\x63ros_inventory_service\x18\x02 \x01(\t\x12\x18\n\x10\x63ros_ufs_service\x18\x03 \x01(\t\x1a{\n\x07Harness\x12\x14\n\x0c\x61utotest_dir\x18\x01 \x01(\t\x12\x1c\n\x14synch_offload_subdir\x18\x02 \x01(\t\x12\x1b\n\x13ssp_base_image_name\x18\x03 \x01(\t\x12\x1f\n\x17prejob_deadline_seconds\x18\x04 \x01(\x03\x1a\x1d\n\x06Output\x12\x13\n\x0bgs_root_dir\x18\x01 \x01(\t\x1a(\n\x06PubSub\x12\x0f\n\x07project\x18\x01 \x01(\t\x12\r\n\x05topic\x18\x02 \x01(\tBLZJgo.chromium.org/chromiumos/infra/proto/go/test_platform/skylab_test_runnerb\x06proto3')
 )
 
 
@@ -46,6 +46,13 @@
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='cros_ufs_service', full_name='test_platform.skylab_test_runner.Config.Lab.cros_ufs_service', index=2,
+      number=3, type=9, cpp_type=9, label=1,
+      has_default_value=False, default_value=_b("").decode('utf-8'),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
   ],
   extensions=[
   ],
@@ -58,8 +65,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=285,
-  serialized_end=345,
+  serialized_start=362,
+  serialized_end=448,
 )
 
 _CONFIG_HARNESS = _descriptor.Descriptor(
@@ -109,8 +116,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=347,
-  serialized_end=470,
+  serialized_start=450,
+  serialized_end=573,
 )
 
 _CONFIG_OUTPUT = _descriptor.Descriptor(
@@ -139,8 +146,45 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=472,
-  serialized_end=501,
+  serialized_start=575,
+  serialized_end=604,
+)
+
+_CONFIG_PUBSUB = _descriptor.Descriptor(
+  name='PubSub',
+  full_name='test_platform.skylab_test_runner.Config.PubSub',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='project', full_name='test_platform.skylab_test_runner.Config.PubSub.project', index=0,
+      number=1, type=9, cpp_type=9, label=1,
+      has_default_value=False, default_value=_b("").decode('utf-8'),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='topic', full_name='test_platform.skylab_test_runner.Config.PubSub.topic', index=1,
+      number=2, type=9, cpp_type=9, label=1,
+      has_default_value=False, default_value=_b("").decode('utf-8'),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=606,
+  serialized_end=646,
 )
 
 _CONFIG = _descriptor.Descriptor(
@@ -171,10 +215,17 @@
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='result_flow_pubsub', full_name='test_platform.skylab_test_runner.Config.result_flow_pubsub', index=3,
+      number=4, type=11, cpp_type=10, label=1,
+      has_default_value=False, default_value=None,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
   ],
   extensions=[
   ],
-  nested_types=[_CONFIG_LAB, _CONFIG_HARNESS, _CONFIG_OUTPUT, ],
+  nested_types=[_CONFIG_LAB, _CONFIG_HARNESS, _CONFIG_OUTPUT, _CONFIG_PUBSUB, ],
   enum_types=[
   ],
   serialized_options=None,
@@ -184,15 +235,17 @@
   oneofs=[
   ],
   serialized_start=84,
-  serialized_end=501,
+  serialized_end=646,
 )
 
 _CONFIG_LAB.containing_type = _CONFIG
 _CONFIG_HARNESS.containing_type = _CONFIG
 _CONFIG_OUTPUT.containing_type = _CONFIG
+_CONFIG_PUBSUB.containing_type = _CONFIG
 _CONFIG.fields_by_name['lab'].message_type = _CONFIG_LAB
 _CONFIG.fields_by_name['harness'].message_type = _CONFIG_HARNESS
 _CONFIG.fields_by_name['output'].message_type = _CONFIG_OUTPUT
+_CONFIG.fields_by_name['result_flow_pubsub'].message_type = _CONFIG_PUBSUB
 DESCRIPTOR.message_types_by_name['Config'] = _CONFIG
 _sym_db.RegisterFileDescriptor(DESCRIPTOR)
 
@@ -218,6 +271,13 @@
     # @@protoc_insertion_point(class_scope:test_platform.skylab_test_runner.Config.Output)
     ))
   ,
+
+  PubSub = _reflection.GeneratedProtocolMessageType('PubSub', (_message.Message,), dict(
+    DESCRIPTOR = _CONFIG_PUBSUB,
+    __module__ = 'test_platform.skylab_test_runner.config_pb2'
+    # @@protoc_insertion_point(class_scope:test_platform.skylab_test_runner.Config.PubSub)
+    ))
+  ,
   DESCRIPTOR = _CONFIG,
   __module__ = 'test_platform.skylab_test_runner.config_pb2'
   # @@protoc_insertion_point(class_scope:test_platform.skylab_test_runner.Config)
@@ -226,6 +286,7 @@
 _sym_db.RegisterMessage(Config.Lab)
 _sym_db.RegisterMessage(Config.Harness)
 _sym_db.RegisterMessage(Config.Output)
+_sym_db.RegisterMessage(Config.PubSub)
 
 
 DESCRIPTOR._options = None
diff --git a/api/gen/test_platform/skylab_test_runner/request_pb2.py b/api/gen/test_platform/skylab_test_runner/request_pb2.py
index df7cea4..25600a0 100644
--- a/api/gen/test_platform/skylab_test_runner/request_pb2.py
+++ b/api/gen/test_platform/skylab_test_runner/request_pb2.py
@@ -21,7 +21,7 @@
   package='test_platform.skylab_test_runner',
   syntax='proto3',
   serialized_options=_b('ZJgo.chromium.org/chromiumos/infra/proto/go/test_platform/skylab_test_runner'),
-  serialized_pb=_b('\n.test_platform/skylab_test_runner/request.proto\x12 test_platform.skylab_test_runner\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1btest_platform/request.proto\"\x81\x07\n\x07Request\x12@\n\x06prejob\x18\x01 \x01(\x0b\x32\x30.test_platform.skylab_test_runner.Request.Prejob\x12<\n\x04test\x18\x02 \x01(\x0b\x32..test_platform.skylab_test_runner.Request.Test\x12,\n\x08\x64\x65\x61\x64line\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x1a\x82\x02\n\x06Prejob\x12S\n\x15software_dependencies\x18\x01 \x03(\x0b\x32\x30.test_platform.Request.Params.SoftwareDependencyB\x02\x18\x01\x12g\n\x14provisionable_labels\x18\x02 \x03(\x0b\x32I.test_platform.skylab_test_runner.Request.Prejob.ProvisionableLabelsEntry\x1a:\n\x18ProvisionableLabelsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1a\xc2\x03\n\x04Test\x12K\n\x08\x61utotest\x18\x01 \x01(\x0b\x32\x37.test_platform.skylab_test_runner.Request.Test.AutotestH\x00\x12N\n\x07offload\x18\x02 \x01(\x0b\x32=.test_platform.skylab_test_runner.Request.Test.OffloadOptions\x1a\xe0\x01\n\x08\x41utotest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x11\n\ttest_args\x18\x02 \x01(\t\x12U\n\x07keyvals\x18\x03 \x03(\x0b\x32\x44.test_platform.skylab_test_runner.Request.Test.Autotest.KeyvalsEntry\x12\x16\n\x0eis_client_test\x18\x04 \x01(\x08\x12\x14\n\x0c\x64isplay_name\x18\x05 \x01(\t\x1a.\n\x0cKeyvalsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1a/\n\x0eOffloadOptions\x12\x1d\n\x15synchronous_gs_enable\x18\x01 \x01(\x08\x42\t\n\x07harnessBLZJgo.chromium.org/chromiumos/infra/proto/go/test_platform/skylab_test_runnerb\x06proto3')
+  serialized_pb=_b('\n.test_platform/skylab_test_runner/request.proto\x12 test_platform.skylab_test_runner\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1btest_platform/request.proto\"\xb6\x07\n\x07Request\x12@\n\x06prejob\x18\x01 \x01(\x0b\x32\x30.test_platform.skylab_test_runner.Request.Prejob\x12<\n\x04test\x18\x02 \x01(\x0b\x32..test_platform.skylab_test_runner.Request.Test\x12,\n\x08\x64\x65\x61\x64line\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x1a\n\x12parent_request_uid\x18\x04 \x01(\t\x12\x17\n\x0fparent_build_id\x18\x05 \x01(\x03\x1a\x82\x02\n\x06Prejob\x12S\n\x15software_dependencies\x18\x01 \x03(\x0b\x32\x30.test_platform.Request.Params.SoftwareDependencyB\x02\x18\x01\x12g\n\x14provisionable_labels\x18\x02 \x03(\x0b\x32I.test_platform.skylab_test_runner.Request.Prejob.ProvisionableLabelsEntry\x1a:\n\x18ProvisionableLabelsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1a\xc2\x03\n\x04Test\x12K\n\x08\x61utotest\x18\x01 \x01(\x0b\x32\x37.test_platform.skylab_test_runner.Request.Test.AutotestH\x00\x12N\n\x07offload\x18\x02 \x01(\x0b\x32=.test_platform.skylab_test_runner.Request.Test.OffloadOptions\x1a\xe0\x01\n\x08\x41utotest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x11\n\ttest_args\x18\x02 \x01(\t\x12U\n\x07keyvals\x18\x03 \x03(\x0b\x32\x44.test_platform.skylab_test_runner.Request.Test.Autotest.KeyvalsEntry\x12\x16\n\x0eis_client_test\x18\x04 \x01(\x08\x12\x14\n\x0c\x64isplay_name\x18\x05 \x01(\t\x1a.\n\x0cKeyvalsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1a/\n\x0eOffloadOptions\x12\x1d\n\x15synchronous_gs_enable\x18\x01 \x01(\x08\x42\t\n\x07harnessBLZJgo.chromium.org/chromiumos/infra/proto/go/test_platform/skylab_test_runnerb\x06proto3')
   ,
   dependencies=[google_dot_protobuf_dot_timestamp__pb2.DESCRIPTOR,test__platform_dot_request__pb2.DESCRIPTOR,])
 
@@ -61,8 +61,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=533,
-  serialized_end=591,
+  serialized_start=586,
+  serialized_end=644,
 )
 
 _REQUEST_PREJOB = _descriptor.Descriptor(
@@ -98,8 +98,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=333,
-  serialized_end=591,
+  serialized_start=386,
+  serialized_end=644,
 )
 
 _REQUEST_TEST_AUTOTEST_KEYVALSENTRY = _descriptor.Descriptor(
@@ -135,8 +135,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=938,
-  serialized_end=984,
+  serialized_start=991,
+  serialized_end=1037,
 )
 
 _REQUEST_TEST_AUTOTEST = _descriptor.Descriptor(
@@ -193,8 +193,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=760,
-  serialized_end=984,
+  serialized_start=813,
+  serialized_end=1037,
 )
 
 _REQUEST_TEST_OFFLOADOPTIONS = _descriptor.Descriptor(
@@ -223,8 +223,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=986,
-  serialized_end=1033,
+  serialized_start=1039,
+  serialized_end=1086,
 )
 
 _REQUEST_TEST = _descriptor.Descriptor(
@@ -263,8 +263,8 @@
       name='harness', full_name='test_platform.skylab_test_runner.Request.Test.harness',
       index=0, containing_type=None, fields=[]),
   ],
-  serialized_start=594,
-  serialized_end=1044,
+  serialized_start=647,
+  serialized_end=1097,
 )
 
 _REQUEST = _descriptor.Descriptor(
@@ -295,6 +295,20 @@
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='parent_request_uid', full_name='test_platform.skylab_test_runner.Request.parent_request_uid', index=3,
+      number=4, type=9, cpp_type=9, label=1,
+      has_default_value=False, default_value=_b("").decode('utf-8'),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='parent_build_id', full_name='test_platform.skylab_test_runner.Request.parent_build_id', index=4,
+      number=5, type=3, cpp_type=2, label=1,
+      has_default_value=False, default_value=0,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
   ],
   extensions=[
   ],
@@ -308,7 +322,7 @@
   oneofs=[
   ],
   serialized_start=147,
-  serialized_end=1044,
+  serialized_end=1097,
 )
 
 _REQUEST_PREJOB_PROVISIONABLELABELSENTRY.containing_type = _REQUEST_PREJOB