diff --git a/api/controller/artifacts_unittest.py b/api/controller/artifacts_unittest.py
index 7520acb..9630a6d 100644
--- a/api/controller/artifacts_unittest.py
+++ b/api/controller/artifacts_unittest.py
@@ -42,7 +42,8 @@
         if build_target:
             request.build_target.name = build_target
         if output_dir:
-            request.output_dir = output_dir
+            request.result_path.path.path = str(output_dir)
+            request.result_path.path.location = common_pb2.Path.Location.OUTSIDE
         if chroot:
             request.chroot.path = chroot
 
@@ -63,7 +64,8 @@
         if build_target:
             request.sysroot.build_target.name = build_target
         if output_dir:
-            request.output_dir = output_dir
+            request.result_path.path.path = output_dir
+            request.result_path.path.location = common_pb2.Path.Location.OUTSIDE
         if chroot:
             request.chroot.path = str(chroot)
         if chroot_out:
@@ -137,11 +139,11 @@
         patch.assert_not_called()
         self.assertEqual(len(self.response.artifacts), 2)
         self.assertEqual(
-            self.response.artifacts[0].path,
+            self.response.artifacts[0].artifact_path.path,
             os.path.join(self.output_dir, "path0.tar.xz"),
         )
         self.assertEqual(
-            self.response.artifacts[1].path,
+            self.response.artifacts[1].artifact_path.path,
             os.path.join(self.output_dir, "path1.tar.xz"),
         )
 
@@ -182,7 +184,7 @@
         )
 
         self.assertCountEqual(
-            expected, [a.path for a in self.response.artifacts]
+            expected, [a.artifact_path.path for a in self.response.artifacts]
         )
 
 
@@ -206,7 +208,7 @@
         patch.assert_not_called()
         self.assertEqual(len(self.response.artifacts), 1)
         self.assertEqual(
-            self.response.artifacts[0].path,
+            self.response.artifacts[0].artifact_path.path,
             os.path.join(self.output_dir, "image.zip"),
         )
 
@@ -220,7 +222,10 @@
             self.target_request, self.response, self.api_config
         )
         self.assertEqual(
-            [artifact.path for artifact in self.response.artifacts],
+            [
+                artifact.artifact_path.path
+                for artifact in self.response.artifacts
+            ],
             [os.path.join(self.output_dir, "image.zip")],
         )
 
@@ -261,7 +266,7 @@
         patch.assert_not_called()
         self.assertEqual(len(self.response.artifacts), 1)
         self.assertEqual(
-            self.response.artifacts[0].path,
+            self.response.artifacts[0].artifact_path.path,
             os.path.join(self.output_dir, "autotest-a.tar.gz"),
         )
 
@@ -287,7 +292,9 @@
 
         # Verify the output proto is being populated correctly.
         self.assertTrue(self.response.artifacts)
-        paths = [artifact.path for artifact in self.response.artifacts]
+        paths = [
+            artifact.artifact_path.path for artifact in self.response.artifacts
+        ]
         self.assertCountEqual(list(files.values()), paths)
 
     def testInvalidOutputDir(self):
@@ -344,7 +351,7 @@
         patch.assert_not_called()
         self.assertEqual(len(self.response.artifacts), 1)
         self.assertEqual(
-            self.response.artifacts[0].path,
+            self.response.artifacts[0].artifact_path.path,
             os.path.join(self.output_dir, "tast_bundles.tar.gz"),
         )
 
@@ -372,7 +379,9 @@
 
         # Make sure the artifact got recorded successfully.
         self.assertTrue(self.response.artifacts)
-        self.assertEqual(expected_archive, self.response.artifacts[0].path)
+        self.assertEqual(
+            expected_archive, self.response.artifacts[0].artifact_path.path
+        )
         # Make sure the service got called correctly.
         bundle_patch.assert_called_once_with(
             self.chroot, self.sysroot, self.output_dir
@@ -399,7 +408,7 @@
         patch.assert_not_called()
         self.assertEqual(len(self.response.artifacts), 1)
         self.assertEqual(
-            self.response.artifacts[0].path,
+            self.response.artifacts[0].artifact_path.path,
             os.path.join(self.output_dir, "firmware.tar.gz"),
         )
 
@@ -415,7 +424,10 @@
             self.sysroot_request, self.response, self.api_config
         )
         self.assertEqual(
-            [artifact.path for artifact in self.response.artifacts],
+            [
+                artifact.artifact_path.path
+                for artifact in self.response.artifacts
+            ],
             [os.path.join(self.output_dir, "firmware.tar.gz")],
         )
 
@@ -448,7 +460,7 @@
         patch.assert_not_called()
         self.assertEqual(len(self.response.artifacts), 1)
         self.assertEqual(
-            self.response.artifacts[0].path,
+            self.response.artifacts[0].artifact_path.path,
             os.path.join(self.output_dir, "fpmcu_unittests.tar.gz"),
         )
 
@@ -465,7 +477,10 @@
             self.sysroot_request, self.response, self.api_config
         )
         self.assertEqual(
-            [artifact.path for artifact in self.response.artifacts],
+            [
+                artifact.artifact_path.path
+                for artifact in self.response.artifacts
+            ],
             [os.path.join(self.output_dir, "fpmcu_unittests.tar.gz")],
         )
 
@@ -500,7 +515,7 @@
         patch.assert_not_called()
         self.assertEqual(len(self.response.artifacts), 1)
         self.assertEqual(
-            self.response.artifacts[0].path,
+            self.response.artifacts[0].artifact_path.path,
             os.path.join(self.output_dir, "ebuild-logs.tar.gz"),
         )
 
@@ -515,7 +530,10 @@
             self.sysroot_request, self.response, self.api_config
         )
         self.assertEqual(
-            [artifact.path for artifact in self.response.artifacts],
+            [
+                artifact.artifact_path.path
+                for artifact in self.response.artifacts
+            ],
             [os.path.join(self.output_dir, "ebuild-logs.tar.gz")],
         )
         self.assertEqual(
@@ -553,7 +571,7 @@
         patch.assert_not_called()
         self.assertEqual(len(self.response.artifacts), 1)
         self.assertEqual(
-            self.response.artifacts[0].path,
+            self.response.artifacts[0].artifact_path.path,
             os.path.join(self.output_dir, "config.yaml"),
         )
 
@@ -566,7 +584,10 @@
             self.sysroot_request, self.response, self.api_config
         )
         self.assertEqual(
-            [artifact.path for artifact in self.response.artifacts],
+            [
+                artifact.artifact_path.path
+                for artifact in self.response.artifacts
+            ],
             [os.path.join(self.output_dir, "config.yaml")],
         )
 
@@ -607,6 +628,11 @@
         self.input_proto = artifacts_pb2.BundleRequest()
         self.input_proto.build_target.name = self.target
         self.input_proto.output_dir = self.archive_root
+        self.input_proto.result_path.path.path = self.archive_root
+        self.input_proto.result_path.path.location = (
+            common_pb2.Path.Location.OUTSIDE
+        )
+
         self.output_proto = artifacts_pb2.BundleResponse()
 
         self.PatchObject(constants, "SOURCE_ROOT", new=self.source_root)
@@ -644,15 +670,15 @@
         patch.assert_not_called()
         self.assertEqual(len(self.output_proto.artifacts), 3)
         self.assertEqual(
-            self.output_proto.artifacts[0].path,
+            self.output_proto.artifacts[0].artifact_path.path,
             os.path.join(self.archive_root, "payload1.bin"),
         )
         self.assertEqual(
-            self.output_proto.artifacts[1].path,
+            self.output_proto.artifacts[1].artifact_path.path,
             os.path.join(self.archive_root, "payload1.json"),
         )
         self.assertEqual(
-            self.output_proto.artifacts[2].path,
+            self.output_proto.artifacts[2].artifact_path.path,
             os.path.join(self.archive_root, "payload1.log"),
         )
 
@@ -666,7 +692,7 @@
         )
 
         actual = [
-            os.path.relpath(artifact.path, self.archive_root)
+            os.path.relpath(artifact.artifact_path.path, self.archive_root)
             for artifact in self.output_proto.artifacts
         ]
         expected = ["payload1.bin", "payload2.bin"]
@@ -739,7 +765,12 @@
                 "path": chroot.path if chroot else None,
                 "out_path": str(chroot.out_path) if chroot else None,
             },
-            output_dir=output_dir,
+            result_path=common_pb2.ResultPath(
+                path=common_pb2.Path(
+                    path=output_dir,
+                    location=common_pb2.Path.OUTSIDE,
+                )
+            ),
         )
 
     def testValidateOnly(self):
@@ -771,7 +802,7 @@
         patch.assert_not_called()
         self.assertEqual(len(self.response.artifacts), 1)
         self.assertEqual(
-            self.response.artifacts[0].path,
+            self.response.artifacts[0].artifact_path.path,
             os.path.join(self.output_dir, "simple_chrome.txt"),
         )
 
@@ -862,7 +893,7 @@
 
         self.assertTrue(response.artifacts)
         self.assertCountEqual(
-            expected_files, [a.path for a in response.artifacts]
+            expected_files, [a.artifact_path.path for a in response.artifacts]
         )
 
 
@@ -1029,11 +1060,11 @@
         patch.assert_not_called()
         self.assertEqual(len(self.response.artifacts), 2)
         self.assertEqual(
-            self.response.artifacts[0].path,
+            self.response.artifacts[0].artifact_path.path,
             os.path.join(self.output_dir, "cpe_report.txt"),
         )
         self.assertEqual(
-            self.response.artifacts[1].path,
+            self.response.artifacts[1].artifact_path.path,
             os.path.join(self.output_dir, "cpe_warnings.txt"),
         )
 
@@ -1051,7 +1082,10 @@
         )
 
         for artifact in self.response.artifacts:
-            self.assertIn(artifact.path, [expected.report, expected.warnings])
+            self.assertIn(
+                artifact.artifact_path.path,
+                [expected.report, expected.warnings],
+            )
 
 
 class BundleGceTarballTest(BundleTestCase):
@@ -1074,7 +1108,7 @@
         patch.assert_not_called()
         self.assertEqual(len(self.response.artifacts), 1)
         self.assertEqual(
-            self.response.artifacts[0].path,
+            self.response.artifacts[0].artifact_path.path,
             os.path.join(self.output_dir, constants.TEST_IMAGE_GCE_TAR),
         )
 
@@ -1092,7 +1126,10 @@
             self.target_request, self.response, self.api_config
         )
         self.assertEqual(
-            [artifact.path for artifact in self.response.artifacts],
+            [
+                artifact.artifact_path.path
+                for artifact in self.response.artifacts
+            ],
             [os.path.join(self.output_dir, constants.TEST_IMAGE_GCE_TAR)],
         )
 
