diff --git a/go/test/rtd/v1/invocation.pb.go b/go/test/rtd/v1/invocation.pb.go
index 3957b01..adb760a 100644
--- a/go/test/rtd/v1/invocation.pb.go
+++ b/go/test/rtd/v1/invocation.pb.go
@@ -237,30 +237,30 @@
 
 // Per-request Remote Test Server environment configuration.
 type Request_Environment struct {
-	// Absolute path to a directory where prod-critical log-data may be written.
+	// Absolute path to a directory for writing arbitrary files.
 	//
 	// This directory must be created by Remote Test Server prior to the Remote
-	// Test Driver invocation and its contents must be successfully offloaded to
-	// the requested long-term storage for the request to be considered
-	// successful.
+	// Test Driver invocation.
 	//
-	// Note: Remote Test Drivers should use
-	// test.invocation.ProgressClient.ReportLogData() to report logs whenever
-	// possible. This log-data reporting feature is grandfathered into the
-	// current API to support test-specific critical log-data reporting.
-	CriticalLogDataPath string `protobuf:"bytes,1,opt,name=critical_log_data_path,json=criticalLogDataPath,proto3" json:"critical_log_data_path,omitempty"`
-	// Absolute path to a directory where non prod-critical log-data may be
-	// written.
+	// * Remote Test Drivers should use
+	// test.invocation.ProgressClient.ReportLog() to report logs.
+	// * Remote Test Drivers should use
+	// test.invocation.ProgressClient.ArchiveArtifact() to archive critical
+	// artifacts.
 	//
-	// This directory must be created by Remote Test Server prior to the Remote
-	// Test Driver invocation. It's contents may be offloaded to long-term
+	// Remote Test Servers may archive the work_dir contents to non-ephemeral
 	// storage as a best effort asynchronous task.
+	WorkDir string `protobuf:"bytes,1,opt,name=work_dir,json=workDir,proto3" json:"work_dir,omitempty"`
+	// Absolute path to a directory for writing temporary files.
 	//
-	// Note: Remote Test Drivers should use
-	// test.invocation.ProgressClient.ReportLogData() to report logs whenever
-	// possible. This log-data reporting feature is grandfathered into the
-	// current API to support test-specific log files.
-	LogDataPath          string   `protobuf:"bytes,2,opt,name=log_data_path,json=logDataPath,proto3" json:"log_data_path,omitempty"`
+	// This directory must be created by Remote Test Server prior to the Remote
+	// Test Driver invocation.
+	//
+	// Remote Test Drivers must use this directory for temporary files and must
+	// not attempt to use defaults like /tmp or the TMP environment variable.
+	//
+	// See also: Environment.work_dir
+	TempDir              string   `protobuf:"bytes,2,opt,name=temp_dir,json=tempDir,proto3" json:"temp_dir,omitempty"`
 	XXX_NoUnkeyedLiteral struct{} `json:"-"`
 	XXX_unrecognized     []byte   `json:"-"`
 	XXX_sizecache        int32    `json:"-"`
@@ -291,16 +291,16 @@
 
 var xxx_messageInfo_Request_Environment proto.InternalMessageInfo
 
-func (m *Request_Environment) GetCriticalLogDataPath() string {
+func (m *Request_Environment) GetWorkDir() string {
 	if m != nil {
-		return m.CriticalLogDataPath
+		return m.WorkDir
 	}
 	return ""
 }
 
-func (m *Request_Environment) GetLogDataPath() string {
+func (m *Request_Environment) GetTempDir() string {
 	if m != nil {
-		return m.LogDataPath
+		return m.TempDir
 	}
 	return ""
 }
@@ -315,35 +315,35 @@
 func init() { proto.RegisterFile("test/rtd/v1/invocation.proto", fileDescriptor_8ce9aeaf734a34de) }
 
 var fileDescriptor_8ce9aeaf734a34de = []byte{
-	// 478 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x93, 0xd1, 0x6e, 0xd3, 0x30,
-	0x14, 0x86, 0x95, 0xb5, 0x1a, 0xcc, 0x01, 0x69, 0xf2, 0x18, 0x0a, 0x85, 0x8b, 0xa8, 0x02, 0xa9,
-	0x12, 0x92, 0xcd, 0xba, 0x2b, 0xc4, 0xdd, 0x16, 0x2e, 0x90, 0x26, 0x54, 0xa5, 0xdb, 0x0d, 0x37,
-	0x96, 0x93, 0xb8, 0xa9, 0x35, 0xc7, 0x0e, 0xb6, 0x93, 0x67, 0xe0, 0x2d, 0x78, 0x32, 0xde, 0x05,
-	0xe5, 0x24, 0x59, 0x53, 0x09, 0xee, 0x9c, 0xf3, 0x7f, 0xe7, 0x9c, 0x3f, 0x7f, 0x1c, 0xf4, 0xce,
-	0x0b, 0xe7, 0xa9, 0xf5, 0x05, 0x6d, 0xaf, 0xa8, 0xd4, 0xad, 0xc9, 0xb9, 0x97, 0x46, 0x93, 0xda,
-	0x1a, 0x6f, 0x70, 0xd8, 0xa9, 0xc4, 0xfa, 0x82, 0xb4, 0x57, 0x8b, 0x4b, 0xc5, 0x33, 0x5a, 0x0b,
-	0x2b, 0xeb, 0xbd, 0xb0, 0x5c, 0xb9, 0x9e, 0x59, 0xbc, 0xe9, 0xca, 0x4e, 0xd8, 0x56, 0xe6, 0xc2,
-	0xd1, 0x5c, 0x49, 0xa1, 0xfd, 0x20, 0x45, 0x30, 0x3c, 0x37, 0x55, 0x65, 0x34, 0x2d, 0x44, 0x47,
-	0x0c, 0xca, 0x62, 0xba, 0xb6, 0xb6, 0xa6, 0xb4, 0xc2, 0x0d, 0x03, 0x97, 0xbf, 0x4f, 0x10, 0xfa,
-	0xf6, 0xe4, 0x04, 0x17, 0xe8, 0xed, 0x08, 0x30, 0x27, 0xf5, 0x23, 0xeb, 0x57, 0xb0, 0xdc, 0xe8,
-	0x9d, 0x2c, 0xa3, 0x20, 0x0e, 0x56, 0xe1, 0xfa, 0x03, 0x99, 0x38, 0x25, 0x9b, 0x81, 0xdf, 0x4a,
-	0xfd, 0x78, 0x0b, 0xf4, 0x2d, 0xc0, 0x69, 0x54, 0xff, 0x47, 0xc1, 0xef, 0xd1, 0xbc, 0x68, 0xbc,
-	0x8b, 0x4e, 0xe2, 0xd9, 0x2a, 0x5c, 0x9f, 0x1f, 0x8d, 0x4b, 0x1e, 0xee, 0x53, 0x50, 0xf1, 0x27,
-	0xf4, 0xdc, 0x8a, 0x9f, 0x8d, 0x70, 0xde, 0x45, 0x33, 0x20, 0x5f, 0x1d, 0x91, 0x69, 0x2f, 0xa6,
-	0x4f, 0x14, 0xde, 0x22, 0x08, 0x81, 0x29, 0x9e, 0xb1, 0x31, 0xa4, 0xd1, 0xfa, 0x1c, 0xac, 0x2f,
-	0x88, 0xe2, 0x19, 0x19, 0x35, 0x72, 0xe4, 0xf7, 0xb2, 0xeb, 0xbd, 0xe3, 0xd9, 0x76, 0x50, 0xfb,
-	0xf2, 0xf2, 0x57, 0x80, 0x66, 0xc9, 0xc3, 0x3d, 0xfe, 0x88, 0x4e, 0xfb, 0x54, 0x87, 0x14, 0x2e,
-	0x7a, 0x33, 0x7d, 0xe0, 0x24, 0x01, 0x29, 0x1d, 0x10, 0xbc, 0x46, 0xe1, 0xe4, 0xe3, 0x45, 0x27,
-	0xd0, 0x71, 0x0e, 0xcb, 0x37, 0x87, 0x7a, 0x3a, 0x85, 0x70, 0x8c, 0x5e, 0x78, 0xe5, 0x58, 0xd1,
-	0x78, 0xa6, 0x79, 0x25, 0xa2, 0x59, 0x1c, 0xac, 0xce, 0x52, 0xe4, 0x95, 0x4b, 0x1a, 0xff, 0x9d,
-	0x57, 0x62, 0xf9, 0x27, 0x40, 0xcf, 0x86, 0xb7, 0xc6, 0x18, 0xcd, 0x81, 0x0a, 0x80, 0x82, 0x73,
-	0x57, 0xeb, 0x3c, 0xc1, 0xba, 0xb3, 0x14, 0xce, 0xf8, 0x06, 0x85, 0x42, 0xb7, 0xd2, 0x1a, 0x5d,
-	0x09, 0xed, 0x61, 0x68, 0xb8, 0x8e, 0xff, 0x15, 0x24, 0xf9, 0x7a, 0xe0, 0xd2, 0x69, 0xd3, 0x62,
-	0x87, 0xc2, 0x89, 0x86, 0xaf, 0xd1, 0xeb, 0xdc, 0x4a, 0x2f, 0x73, 0xae, 0x98, 0x32, 0x25, 0x2b,
-	0xb8, 0xe7, 0xac, 0xe6, 0x7e, 0x3f, 0x98, 0xb9, 0x18, 0xd5, 0x3b, 0x53, 0x26, 0xdc, 0xf3, 0x0d,
-	0xf7, 0x7b, 0xbc, 0x44, 0x2f, 0x8f, 0xd9, 0xde, 0x64, 0xa8, 0x0e, 0xcc, 0xcd, 0x97, 0x1f, 0x9f,
-	0x4b, 0x43, 0xf2, 0xbd, 0x35, 0x95, 0x6c, 0x2a, 0x62, 0x6c, 0x49, 0xc7, 0x07, 0xe3, 0xa8, 0xd4,
-	0x3b, 0xcb, 0x29, 0x5c, 0x5b, 0x5a, 0x1a, 0x0a, 0x97, 0xfa, 0xf0, 0x13, 0x65, 0xa7, 0xa0, 0x5c,
-	0xff, 0x0d, 0x00, 0x00, 0xff, 0xff, 0x72, 0xaa, 0x71, 0x83, 0x65, 0x03, 0x00, 0x00,
+	// 465 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x93, 0xdf, 0x6e, 0xd3, 0x30,
+	0x14, 0x87, 0x95, 0xb6, 0x5a, 0x37, 0x87, 0x8b, 0xc9, 0x30, 0x29, 0x0b, 0x5c, 0x44, 0x15, 0x48,
+	0x95, 0x90, 0x6c, 0x56, 0xae, 0x10, 0x77, 0x6b, 0xb8, 0x40, 0x42, 0x68, 0x4a, 0xb7, 0x1b, 0x6e,
+	0xa2, 0xfc, 0xf1, 0x32, 0xab, 0x89, 0x1d, 0x6c, 0x27, 0xbc, 0x02, 0x6f, 0xc1, 0x7b, 0xf0, 0x74,
+	0xc8, 0x27, 0x4e, 0x9b, 0x4a, 0xec, 0x2e, 0x3e, 0xdf, 0xe7, 0x73, 0x7e, 0x3d, 0x4d, 0xd0, 0x1b,
+	0xc3, 0xb4, 0xa1, 0xca, 0x94, 0xb4, 0xbf, 0xa1, 0x5c, 0xf4, 0xb2, 0xc8, 0x0c, 0x97, 0x82, 0xb4,
+	0x4a, 0x1a, 0x89, 0x7d, 0x4b, 0x89, 0x32, 0x25, 0xe9, 0x6f, 0xc2, 0xab, 0x3a, 0xcb, 0x69, 0xcb,
+	0x14, 0x6f, 0x9f, 0x98, 0xca, 0x6a, 0x3d, 0x38, 0xe1, 0xb5, 0x2d, 0x6b, 0xa6, 0x7a, 0x5e, 0x30,
+	0x4d, 0x8b, 0x9a, 0x33, 0x61, 0x1c, 0x0a, 0xa0, 0x79, 0x21, 0x9b, 0x46, 0x0a, 0x5a, 0x32, 0x6b,
+	0x38, 0x12, 0x4e, 0xc7, 0xb6, 0x4a, 0x56, 0x8a, 0x69, 0xd7, 0x70, 0xf5, 0x67, 0x86, 0xd0, 0xd7,
+	0x43, 0x12, 0x5c, 0xa2, 0xd7, 0xa3, 0x90, 0x6a, 0x2e, 0xf6, 0xe9, 0x30, 0x22, 0x2d, 0xa4, 0x78,
+	0xe4, 0x55, 0xe0, 0x45, 0xde, 0xda, 0xdf, 0xbc, 0x23, 0x93, 0xa4, 0xe4, 0xce, 0xf9, 0x3b, 0x2e,
+	0xf6, 0x5b, 0xb0, 0xb7, 0x20, 0x27, 0x41, 0xfb, 0x0c, 0xc1, 0x6f, 0xd1, 0xa2, 0xec, 0x8c, 0x0e,
+	0x66, 0xd1, 0x7c, 0xed, 0x6f, 0x2e, 0x4f, 0xda, 0xc5, 0x0f, 0xf7, 0x09, 0x50, 0xfc, 0x01, 0x9d,
+	0x2b, 0xf6, 0xb3, 0x63, 0xda, 0xe8, 0x60, 0x0e, 0xe6, 0xab, 0x13, 0x33, 0x19, 0x60, 0x72, 0xb0,
+	0xf0, 0x0e, 0xc1, 0x12, 0xd2, 0x3a, 0xcb, 0xd3, 0x71, 0x49, 0x63, 0xf4, 0x05, 0x44, 0x0f, 0x49,
+	0x9d, 0xe5, 0x64, 0x64, 0xe4, 0x24, 0xef, 0x95, 0xbd, 0xfb, 0x2d, 0xcb, 0x77, 0x8e, 0x0e, 0xe5,
+	0xd5, 0x6f, 0x0f, 0xcd, 0xe3, 0x87, 0x7b, 0xfc, 0x1e, 0x9d, 0x0d, 0x5b, 0x75, 0x5b, 0x78, 0x39,
+	0x84, 0x19, 0x16, 0x4e, 0x62, 0x40, 0x89, 0x53, 0xf0, 0x06, 0xf9, 0x93, 0x3f, 0x2f, 0x98, 0xc1,
+	0x8d, 0x4b, 0x18, 0x7e, 0x77, 0xac, 0x27, 0x53, 0x09, 0x47, 0xe8, 0x85, 0xa9, 0x75, 0x5a, 0x76,
+	0x26, 0x15, 0x59, 0xc3, 0x82, 0x79, 0xe4, 0xad, 0x2f, 0x12, 0x64, 0x6a, 0x1d, 0x77, 0xe6, 0x7b,
+	0xd6, 0xb0, 0xd5, 0x5f, 0x0f, 0x2d, 0xdd, 0xaf, 0xc6, 0x18, 0x2d, 0xc0, 0xf2, 0xc0, 0x82, 0x67,
+	0x5b, 0xb3, 0x99, 0x60, 0xdc, 0x45, 0x02, 0xcf, 0xf8, 0x16, 0xf9, 0x4c, 0xf4, 0x5c, 0x49, 0xd1,
+	0x30, 0x61, 0xa0, 0xa9, 0xbf, 0x89, 0xfe, 0xb7, 0x48, 0xf2, 0xe5, 0xe8, 0x25, 0xd3, 0x4b, 0xe1,
+	0x16, 0xf9, 0x13, 0x86, 0xaf, 0xd1, 0xf9, 0x2f, 0xa9, 0xf6, 0x69, 0xc9, 0x95, 0x1b, 0xbf, 0xb4,
+	0xe7, 0x98, 0x2b, 0x8b, 0x0c, 0x6b, 0x5a, 0x40, 0x43, 0x8a, 0xa5, 0x3d, 0xc7, 0x5c, 0xdd, 0x7e,
+	0xfe, 0xf1, 0xa9, 0x92, 0xa4, 0x78, 0x52, 0xb2, 0xe1, 0x5d, 0x43, 0xa4, 0xaa, 0xe8, 0x78, 0x90,
+	0x9a, 0x72, 0xf1, 0xa8, 0x32, 0x0a, 0xef, 0x24, 0xad, 0x24, 0x85, 0x37, 0xf6, 0xf8, 0x85, 0xe4,
+	0x67, 0x40, 0x3e, 0xfe, 0x0b, 0x00, 0x00, 0xff, 0xff, 0xb2, 0x32, 0x0a, 0x48, 0x42, 0x03, 0x00,
+	0x00,
 }
diff --git a/go/test/rtd/v1/progress.pb.go b/go/test/rtd/v1/progress.pb.go
index 708dae2..0c95d54 100644
--- a/go/test/rtd/v1/progress.pb.go
+++ b/go/test/rtd/v1/progress.pb.go
@@ -486,6 +486,103 @@
 
 var xxx_messageInfo_ReportLogResponse proto.InternalMessageInfo
 
+type ArchiveArtifactRequest struct {
+	// Name for the archived artifact.
+	//
+	// name may be interpreted as a local file path or part of a URL. name must be
+	// a valid resource name per https://aip.dev/122 and must be a valid POSIX
+	// file path.
+	//
+	// name must be unique across all artifacts archived from a single invocation
+	// request.
+	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+	// The request to archive artifacts for, identified by the
+	// Invocation.Request.name field.
+	Request string `protobuf:"bytes,2,opt,name=request,proto3" json:"request,omitempty"`
+	// Absolute path to a file or directory to archive.
+	LocalPath            string   `protobuf:"bytes,3,opt,name=local_path,json=localPath,proto3" json:"local_path,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ArchiveArtifactRequest) Reset()         { *m = ArchiveArtifactRequest{} }
+func (m *ArchiveArtifactRequest) String() string { return proto.CompactTextString(m) }
+func (*ArchiveArtifactRequest) ProtoMessage()    {}
+func (*ArchiveArtifactRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_53459f08935e9319, []int{6}
+}
+
+func (m *ArchiveArtifactRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ArchiveArtifactRequest.Unmarshal(m, b)
+}
+func (m *ArchiveArtifactRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ArchiveArtifactRequest.Marshal(b, m, deterministic)
+}
+func (m *ArchiveArtifactRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ArchiveArtifactRequest.Merge(m, src)
+}
+func (m *ArchiveArtifactRequest) XXX_Size() int {
+	return xxx_messageInfo_ArchiveArtifactRequest.Size(m)
+}
+func (m *ArchiveArtifactRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_ArchiveArtifactRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ArchiveArtifactRequest proto.InternalMessageInfo
+
+func (m *ArchiveArtifactRequest) GetName() string {
+	if m != nil {
+		return m.Name
+	}
+	return ""
+}
+
+func (m *ArchiveArtifactRequest) GetRequest() string {
+	if m != nil {
+		return m.Request
+	}
+	return ""
+}
+
+func (m *ArchiveArtifactRequest) GetLocalPath() string {
+	if m != nil {
+		return m.LocalPath
+	}
+	return ""
+}
+
+type ArchiveArtifactResponse struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ArchiveArtifactResponse) Reset()         { *m = ArchiveArtifactResponse{} }
+func (m *ArchiveArtifactResponse) String() string { return proto.CompactTextString(m) }
+func (*ArchiveArtifactResponse) ProtoMessage()    {}
+func (*ArchiveArtifactResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_53459f08935e9319, []int{7}
+}
+
+func (m *ArchiveArtifactResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ArchiveArtifactResponse.Unmarshal(m, b)
+}
+func (m *ArchiveArtifactResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ArchiveArtifactResponse.Marshal(b, m, deterministic)
+}
+func (m *ArchiveArtifactResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ArchiveArtifactResponse.Merge(m, src)
+}
+func (m *ArchiveArtifactResponse) XXX_Size() int {
+	return xxx_messageInfo_ArchiveArtifactResponse.Size(m)
+}
+func (m *ArchiveArtifactResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_ArchiveArtifactResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ArchiveArtifactResponse proto.InternalMessageInfo
+
 func init() {
 	proto.RegisterEnum("test.rtd.v1.Result_State", Result_State_name, Result_State_value)
 	proto.RegisterEnum("test.rtd.v1.Result_Error_Source", Result_Error_Source_name, Result_Error_Source_value)
@@ -497,50 +594,57 @@
 	proto.RegisterType((*ReportResultResponse)(nil), "test.rtd.v1.ReportResultResponse")
 	proto.RegisterType((*ReportLogRequest)(nil), "test.rtd.v1.ReportLogRequest")
 	proto.RegisterType((*ReportLogResponse)(nil), "test.rtd.v1.ReportLogResponse")
+	proto.RegisterType((*ArchiveArtifactRequest)(nil), "test.rtd.v1.ArchiveArtifactRequest")
+	proto.RegisterType((*ArchiveArtifactResponse)(nil), "test.rtd.v1.ArchiveArtifactResponse")
 }
 
 func init() { proto.RegisterFile("test/rtd/v1/progress.proto", fileDescriptor_53459f08935e9319) }
 
 var fileDescriptor_53459f08935e9319 = []byte{
-	// 608 bytes of a gzipped FileDescriptorProto
+	// 678 bytes of a gzipped FileDescriptorProto
 	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x94, 0x61, 0x6f, 0xda, 0x3c,
-	0x10, 0xc7, 0x9f, 0x40, 0xa1, 0x70, 0xf0, 0x54, 0xa9, 0xdb, 0x6d, 0x0c, 0x75, 0x13, 0xcb, 0x2b,
-	0xa4, 0x49, 0x8e, 0x60, 0x7b, 0xb1, 0x69, 0xd2, 0x26, 0x1a, 0xdc, 0x29, 0x1a, 0xa3, 0xc8, 0x4e,
-	0x99, 0xba, 0x37, 0x28, 0x05, 0x37, 0x8d, 0x06, 0x31, 0xb3, 0x0d, 0xd2, 0x3e, 0xc1, 0x3e, 0xcf,
-	0xbe, 0xc9, 0x3e, 0xd2, 0x14, 0x27, 0xb4, 0xac, 0x6b, 0xfb, 0xee, 0x72, 0xf7, 0xfb, 0x9f, 0xef,
-	0x72, 0x67, 0x43, 0x53, 0x73, 0xa5, 0x5d, 0xa9, 0x67, 0xee, 0xba, 0xe3, 0x2e, 0xa5, 0x88, 0x24,
-	0x57, 0x0a, 0x2f, 0xa5, 0xd0, 0x02, 0xd5, 0xd2, 0x18, 0x96, 0x7a, 0x86, 0xd7, 0x9d, 0xe6, 0x51,
-	0x24, 0x44, 0x34, 0xe7, 0xae, 0x09, 0x5d, 0xac, 0x2e, 0x5d, 0xa5, 0xe5, 0x6a, 0xaa, 0x33, 0xd4,
-	0xc1, 0xd0, 0x18, 0xe5, 0x62, 0x16, 0x27, 0xdf, 0xbc, 0x79, 0xcc, 0x13, 0xed, 0x89, 0xe4, 0x32,
-	0x8e, 0x10, 0x82, 0x9d, 0xa5, 0x90, 0xba, 0x61, 0xb5, 0xac, 0x76, 0x89, 0x1a, 0xdb, 0x19, 0xc3,
-	0x01, 0xe5, 0xa9, 0x45, 0xb9, 0x5a, 0xcd, 0x35, 0xe5, 0xdf, 0x57, 0x5c, 0xe9, 0x14, 0x4d, 0xc2,
-	0x05, 0x37, 0x68, 0x95, 0x1a, 0x1b, 0xbd, 0x84, 0xb2, 0x34, 0x50, 0xa3, 0xd0, 0xb2, 0xda, 0xb5,
-	0xee, 0x01, 0xde, 0x2a, 0x0b, 0xe7, 0xfa, 0x1c, 0x71, 0x7e, 0xee, 0x40, 0x39, 0x73, 0x21, 0x17,
-	0x4a, 0x4a, 0x87, 0x3a, 0x4b, 0xb6, 0xd7, 0x7d, 0x7a, 0x87, 0x0c, 0xb3, 0x14, 0xa0, 0x19, 0x87,
-	0x3a, 0x50, 0xe6, 0x52, 0x0a, 0xa9, 0x1a, 0x85, 0x56, 0xb1, 0x5d, 0xbb, 0x5b, 0x41, 0x52, 0x82,
-	0xe6, 0x60, 0xf3, 0x77, 0x01, 0x4a, 0xc6, 0x83, 0xde, 0x40, 0x59, 0x89, 0x95, 0x9c, 0x6e, 0x8e,
-	0x6b, 0xdd, 0x2b, 0xc6, 0xcc, 0x70, 0x34, 0xe7, 0xd1, 0x7b, 0xa8, 0x28, 0xbe, 0xe6, 0x32, 0xd6,
-	0x3f, 0x4c, 0x87, 0x7b, 0x5d, 0xe7, 0x01, 0x6d, 0x4e, 0xd2, 0x6b, 0x0d, 0xea, 0xc0, 0xee, 0x8c,
-	0xeb, 0x30, 0x9e, 0xab, 0x46, 0xd1, 0xfc, 0xa0, 0x27, 0x38, 0x1b, 0x15, 0xde, 0x8c, 0x0a, 0x33,
-	0x33, 0x2a, 0xba, 0xe1, 0x9c, 0x73, 0x28, 0x67, 0x45, 0xa0, 0xc7, 0x80, 0xd8, 0xe9, 0x19, 0xf5,
-	0xc8, 0xe4, 0x6c, 0xc8, 0x46, 0xc4, 0xf3, 0x4f, 0x7c, 0xd2, 0xb7, 0xff, 0x43, 0x15, 0xd8, 0x09,
-	0x08, 0x0b, 0x6c, 0x2b, 0x25, 0x28, 0xf9, 0x7c, 0x1a, 0x90, 0x49, 0xea, 0x98, 0xf4, 0xa9, 0x3f,
-	0x26, 0xd4, 0x2e, 0xa0, 0x47, 0xb0, 0x6f, 0x1c, 0x83, 0xde, 0xf1, 0x84, 0x11, 0x3a, 0xf6, 0x3d,
-	0xc2, 0xec, 0xa2, 0xf3, 0x01, 0x2a, 0x9b, 0x1a, 0x51, 0x03, 0x0e, 0x19, 0x19, 0x13, 0xea, 0x07,
-	0xe7, 0xb7, 0xd2, 0xd7, 0xa1, 0xe2, 0x51, 0x3f, 0xf0, 0xbd, 0xde, 0xc0, 0xb6, 0x50, 0x0d, 0x76,
-	0xbf, 0xf4, 0xe8, 0xd0, 0x1f, 0x7e, 0xb4, 0x0b, 0xce, 0x09, 0x94, 0xcc, 0x54, 0xd2, 0x03, 0x58,
-	0xd0, 0x0b, 0x6e, 0x57, 0xf6, 0x3f, 0x54, 0xd9, 0x99, 0xe7, 0x11, 0xd2, 0x27, 0x7d, 0xdb, 0x42,
-	0x00, 0xe5, 0x93, 0x9e, 0x3f, 0x20, 0x7d, 0xbb, 0x90, 0xe6, 0x61, 0x9f, 0xfc, 0xd1, 0x88, 0xf4,
-	0xed, 0xa2, 0xf3, 0x1a, 0x0e, 0xff, 0xde, 0x30, 0xb5, 0x14, 0x89, 0xe2, 0xe8, 0x08, 0xaa, 0x9a,
-	0xcb, 0x45, 0x9c, 0x6c, 0x56, 0xa3, 0x42, 0x6f, 0x1c, 0xce, 0x10, 0xec, 0x4c, 0x35, 0x10, 0xd1,
-	0x43, 0x4b, 0x99, 0xee, 0x74, 0xa8, 0xaf, 0xcc, 0xc0, 0xaa, 0xd4, 0xd8, 0xa9, 0x6f, 0x16, 0xea,
-	0xd0, 0x4c, 0xa1, 0x4e, 0x8d, 0xed, 0x1c, 0xc0, 0xfe, 0x56, 0xbe, 0xac, 0x84, 0xee, 0x2f, 0x0b,
-	0xea, 0xdb, 0xb7, 0x05, 0x31, 0xa8, 0x6f, 0xd7, 0x8a, 0x6e, 0x2f, 0xcf, 0x3f, 0x17, 0xa5, 0xf9,
-	0xe2, 0x01, 0x22, 0x6f, 0x74, 0x00, 0xd5, 0xeb, 0xa3, 0xd1, 0xb3, 0x3b, 0xf8, 0x9b, 0x16, 0x9b,
-	0xcf, 0xef, 0x0b, 0x67, 0xb9, 0xda, 0xd6, 0xf1, 0xbb, 0xaf, 0x6f, 0x23, 0x81, 0xa7, 0x57, 0x52,
-	0x2c, 0xe2, 0xd5, 0x02, 0x0b, 0x19, 0xb9, 0x9b, 0x0f, 0xa1, 0xdc, 0x38, 0xb9, 0x94, 0x61, 0xf6,
-	0x34, 0xb8, 0x91, 0x70, 0xcd, 0x9b, 0x12, 0x27, 0x6b, 0x31, 0x0d, 0x75, 0x2c, 0x92, 0x8b, 0xb2,
-	0x89, 0xbc, 0xfa, 0x13, 0x00, 0x00, 0xff, 0xff, 0x44, 0x4e, 0x6d, 0x70, 0x6d, 0x04, 0x00, 0x00,
+	0x10, 0xc7, 0x1f, 0xa0, 0x50, 0x38, 0x78, 0xba, 0xd4, 0xed, 0x5a, 0x8a, 0xda, 0x89, 0x65, 0x7b,
+	0x81, 0x34, 0x29, 0x11, 0x6c, 0x2f, 0x36, 0x4d, 0xda, 0x44, 0x83, 0x3b, 0x45, 0x63, 0x14, 0x39,
+	0x94, 0xa9, 0xd3, 0x24, 0x94, 0x82, 0x09, 0xd1, 0x20, 0x66, 0xb6, 0x41, 0xda, 0x27, 0xd8, 0xcb,
+	0x7d, 0xb5, 0x7d, 0xa4, 0x29, 0x4e, 0xd2, 0x52, 0x4a, 0x79, 0x77, 0xb9, 0xfb, 0xfd, 0xcf, 0xe7,
+	0xbb, 0x8b, 0xa1, 0x22, 0xa9, 0x90, 0x26, 0x97, 0x23, 0x73, 0x59, 0x37, 0xe7, 0x9c, 0x79, 0x9c,
+	0x0a, 0x61, 0xcc, 0x39, 0x93, 0x0c, 0x15, 0xc3, 0x98, 0xc1, 0xe5, 0xc8, 0x58, 0xd6, 0x2b, 0xa7,
+	0x1e, 0x63, 0xde, 0x94, 0x9a, 0x2a, 0x74, 0xb3, 0x18, 0x9b, 0x42, 0xf2, 0xc5, 0x50, 0x46, 0xa8,
+	0x6e, 0x40, 0xb9, 0x1b, 0x8b, 0x1d, 0x3f, 0xf8, 0x61, 0x4d, 0x7d, 0x1a, 0x48, 0x8b, 0x05, 0x63,
+	0xdf, 0x43, 0x08, 0x76, 0xe6, 0x8c, 0xcb, 0x72, 0xaa, 0x9a, 0xaa, 0x65, 0x89, 0xb2, 0xf5, 0x3e,
+	0x1c, 0x10, 0x1a, 0x5a, 0x84, 0x8a, 0xc5, 0x54, 0x12, 0xfa, 0x73, 0x41, 0x85, 0x0c, 0xd1, 0xc0,
+	0x9d, 0x51, 0x85, 0x16, 0x88, 0xb2, 0xd1, 0x2b, 0xc8, 0x71, 0x05, 0x95, 0xd3, 0xd5, 0x54, 0xad,
+	0xd8, 0x38, 0x30, 0x56, 0xca, 0x32, 0x62, 0x7d, 0x8c, 0xe8, 0xbf, 0x77, 0x20, 0x17, 0xb9, 0x90,
+	0x09, 0x59, 0x21, 0x5d, 0x19, 0x25, 0xdb, 0x6b, 0x9c, 0x6c, 0x90, 0x19, 0x4e, 0x08, 0x90, 0x88,
+	0x43, 0x75, 0xc8, 0x51, 0xce, 0x19, 0x17, 0xe5, 0x74, 0x35, 0x53, 0x2b, 0x6e, 0x56, 0xe0, 0x90,
+	0x20, 0x31, 0x58, 0xf9, 0x9b, 0x86, 0xac, 0xf2, 0xa0, 0xb7, 0x90, 0x13, 0x6c, 0xc1, 0x87, 0xc9,
+	0x71, 0xd5, 0x47, 0xc5, 0x86, 0xa3, 0x38, 0x12, 0xf3, 0xe8, 0x03, 0xe4, 0x05, 0x5d, 0x52, 0xee,
+	0xcb, 0x5f, 0xea, 0x86, 0x7b, 0x0d, 0x7d, 0x8b, 0x36, 0x26, 0xc9, 0xad, 0x06, 0xd5, 0x61, 0x77,
+	0x44, 0xa5, 0xeb, 0x4f, 0x45, 0x39, 0xa3, 0x1a, 0x74, 0x6c, 0x44, 0xa3, 0x32, 0x92, 0x51, 0x19,
+	0x8e, 0x1a, 0x15, 0x49, 0x38, 0xfd, 0x1a, 0x72, 0x51, 0x11, 0xe8, 0x08, 0x90, 0x73, 0x79, 0x45,
+	0x2c, 0x3c, 0xb8, 0xea, 0x38, 0x5d, 0x6c, 0xd9, 0x17, 0x36, 0x6e, 0x69, 0xff, 0xa1, 0x3c, 0xec,
+	0xf4, 0xb0, 0xd3, 0xd3, 0x52, 0x21, 0x41, 0xf0, 0x97, 0xcb, 0x1e, 0x1e, 0x84, 0x8e, 0x41, 0x8b,
+	0xd8, 0x7d, 0x4c, 0xb4, 0x34, 0x7a, 0x0a, 0xfb, 0xca, 0xd1, 0x6e, 0x9e, 0x0f, 0x1c, 0x4c, 0xfa,
+	0xb6, 0x85, 0x1d, 0x2d, 0xa3, 0x7f, 0x84, 0x7c, 0x52, 0x23, 0x2a, 0xc3, 0xa1, 0x83, 0xfb, 0x98,
+	0xd8, 0xbd, 0xeb, 0xb5, 0xf4, 0x25, 0xc8, 0x5b, 0xc4, 0xee, 0xd9, 0x56, 0xb3, 0xad, 0xa5, 0x50,
+	0x11, 0x76, 0xbf, 0x36, 0x49, 0xc7, 0xee, 0x7c, 0xd2, 0xd2, 0xfa, 0x05, 0x64, 0xd5, 0x54, 0xc2,
+	0x03, 0x9c, 0x5e, 0xb3, 0xb7, 0x5e, 0xd9, 0xff, 0x50, 0x70, 0xae, 0x2c, 0x0b, 0xe3, 0x16, 0x6e,
+	0x69, 0x29, 0x04, 0x90, 0xbb, 0x68, 0xda, 0x6d, 0xdc, 0xd2, 0xd2, 0x61, 0x1e, 0xe7, 0xb3, 0xdd,
+	0xed, 0xe2, 0x96, 0x96, 0xd1, 0xdf, 0xc0, 0xe1, 0xfd, 0x0d, 0x13, 0x73, 0x16, 0x08, 0x8a, 0x4e,
+	0xa1, 0x20, 0x29, 0x9f, 0xf9, 0x41, 0xb2, 0x1a, 0x79, 0x72, 0xe7, 0xd0, 0x3b, 0xa0, 0x45, 0xaa,
+	0x36, 0xf3, 0xb6, 0x2d, 0x65, 0xb8, 0xd3, 0xae, 0x9c, 0xa8, 0x81, 0x15, 0x88, 0xb2, 0x43, 0xdf,
+	0xc8, 0x95, 0xae, 0x9a, 0x42, 0x89, 0x28, 0x5b, 0x3f, 0x80, 0xfd, 0x95, 0x7c, 0x51, 0x09, 0x3a,
+	0x85, 0xa3, 0x26, 0x1f, 0x4e, 0xfc, 0x25, 0x6d, 0x72, 0xe9, 0x8f, 0xdd, 0xe1, 0xd6, 0xfd, 0x2f,
+	0xc3, 0x2e, 0x8f, 0xc2, 0xf1, 0x69, 0xc9, 0x27, 0x3a, 0x03, 0x98, 0xb2, 0xa1, 0x3b, 0x1d, 0xa8,
+	0x52, 0x32, 0x2a, 0x58, 0x50, 0x9e, 0xae, 0x2b, 0x27, 0xfa, 0x09, 0x1c, 0x3f, 0x38, 0x26, 0xaa,
+	0xa0, 0xf1, 0x27, 0x0d, 0xa5, 0xd5, 0xff, 0x15, 0x39, 0x50, 0x5a, 0xed, 0x16, 0x5a, 0x5f, 0xdf,
+	0x07, 0xbf, 0x6a, 0xe5, 0xf9, 0x16, 0x22, 0x6e, 0x75, 0x1b, 0x0a, 0xb7, 0x97, 0x47, 0x67, 0x1b,
+	0xf8, 0xbb, 0x26, 0x57, 0x9e, 0x3d, 0x16, 0x8e, 0x72, 0xd5, 0x52, 0xe8, 0x3b, 0x3c, 0x59, 0xbb,
+	0x0e, 0x7a, 0x71, 0x4f, 0xb4, 0xb9, 0xa7, 0x95, 0x97, 0xdb, 0xa1, 0x28, 0xff, 0xf9, 0xfb, 0x6f,
+	0xef, 0x3c, 0x66, 0x0c, 0x27, 0x9c, 0xcd, 0xfc, 0xc5, 0xcc, 0x60, 0xdc, 0x33, 0x93, 0x0f, 0x26,
+	0x4c, 0x3f, 0x18, 0x73, 0x37, 0x7a, 0xfa, 0x4c, 0x8f, 0x99, 0xea, 0xcd, 0xf4, 0x83, 0x25, 0x1b,
+	0xba, 0xd2, 0x67, 0xc1, 0x4d, 0x4e, 0x45, 0x5e, 0xff, 0x0b, 0x00, 0x00, 0xff, 0xff, 0x9e, 0x65,
+	0xb2, 0xc2, 0x4d, 0x05, 0x00, 0x00,
 }
 
 // Reference imports to suppress errors if they are not otherwise used.
@@ -565,6 +669,18 @@
 	// calls. Data received from concurrent methods calls for the same log file
 	// may be interleved arbitrarily.
 	ReportLog(ctx context.Context, opts ...grpc.CallOption) (ProgressSink_ReportLogClient, error)
+	// Archive test artifacts to non-ephemeral storage.
+	//
+	// Different Test Lab Environments may use very different non-ephemeral
+	// storage technologies. Remote Test Servers must archive the artifacts to
+	// final storage synchronously and return an error if the archival fails.
+	//
+	// Note: Remote Test Drivers should use ReportLog() to report logs.
+	// ArchiveArtifact() should be used to report structured or binary data only.
+	//
+	// Remote Test Server may limit the size of artifacts that may be offloaded
+	// per request and may fail further requests with RESOURCE_EXHAUSTED.
+	ArchiveArtifact(ctx context.Context, in *ArchiveArtifactRequest, opts ...grpc.CallOption) (*ArchiveArtifactResponse, error)
 }
 
 type progressSinkClient struct {
@@ -618,6 +734,15 @@
 	return m, nil
 }
 
+func (c *progressSinkClient) ArchiveArtifact(ctx context.Context, in *ArchiveArtifactRequest, opts ...grpc.CallOption) (*ArchiveArtifactResponse, error) {
+	out := new(ArchiveArtifactResponse)
+	err := c.cc.Invoke(ctx, "/test.rtd.v1.ProgressSink/ArchiveArtifact", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
 // ProgressSinkServer is the server API for ProgressSink service.
 type ProgressSinkServer interface {
 	// A Remote Test Driver invocation must call ReportResult exactly once per
@@ -630,6 +755,18 @@
 	// calls. Data received from concurrent methods calls for the same log file
 	// may be interleved arbitrarily.
 	ReportLog(ProgressSink_ReportLogServer) error
+	// Archive test artifacts to non-ephemeral storage.
+	//
+	// Different Test Lab Environments may use very different non-ephemeral
+	// storage technologies. Remote Test Servers must archive the artifacts to
+	// final storage synchronously and return an error if the archival fails.
+	//
+	// Note: Remote Test Drivers should use ReportLog() to report logs.
+	// ArchiveArtifact() should be used to report structured or binary data only.
+	//
+	// Remote Test Server may limit the size of artifacts that may be offloaded
+	// per request and may fail further requests with RESOURCE_EXHAUSTED.
+	ArchiveArtifact(context.Context, *ArchiveArtifactRequest) (*ArchiveArtifactResponse, error)
 }
 
 // UnimplementedProgressSinkServer can be embedded to have forward compatible implementations.
@@ -642,6 +779,9 @@
 func (*UnimplementedProgressSinkServer) ReportLog(srv ProgressSink_ReportLogServer) error {
 	return status.Errorf(codes.Unimplemented, "method ReportLog not implemented")
 }
+func (*UnimplementedProgressSinkServer) ArchiveArtifact(ctx context.Context, req *ArchiveArtifactRequest) (*ArchiveArtifactResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method ArchiveArtifact not implemented")
+}
 
 func RegisterProgressSinkServer(s *grpc.Server, srv ProgressSinkServer) {
 	s.RegisterService(&_ProgressSink_serviceDesc, srv)
@@ -691,6 +831,24 @@
 	return m, nil
 }
 
+func _ProgressSink_ArchiveArtifact_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(ArchiveArtifactRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(ProgressSinkServer).ArchiveArtifact(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/test.rtd.v1.ProgressSink/ArchiveArtifact",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(ProgressSinkServer).ArchiveArtifact(ctx, req.(*ArchiveArtifactRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
 var _ProgressSink_serviceDesc = grpc.ServiceDesc{
 	ServiceName: "test.rtd.v1.ProgressSink",
 	HandlerType: (*ProgressSinkServer)(nil),
@@ -699,6 +857,10 @@
 			MethodName: "ReportResult",
 			Handler:    _ProgressSink_ReportResult_Handler,
 		},
+		{
+			MethodName: "ArchiveArtifact",
+			Handler:    _ProgressSink_ArchiveArtifact_Handler,
+		},
 	},
 	Streams: []grpc.StreamDesc{
 		{
diff --git a/src/test/rtd/v1/invocation.proto b/src/test/rtd/v1/invocation.proto
index 5853607..467a671 100644
--- a/src/test/rtd/v1/invocation.proto
+++ b/src/test/rtd/v1/invocation.proto
@@ -76,31 +76,31 @@
 
   // Per-request Remote Test Server environment configuration.
   message Environment {
-    // Absolute path to a directory where prod-critical log-data may be written.
+    // Absolute path to a directory for writing arbitrary files.
     //
     // This directory must be created by Remote Test Server prior to the Remote
-    // Test Driver invocation and its contents must be successfully offloaded to
-    // the requested long-term storage for the request to be considered
-    // successful.
+    // Test Driver invocation.
     //
-    // Note: Remote Test Drivers should use
-    // test.invocation.ProgressClient.ReportLogData() to report logs whenever
-    // possible. This log-data reporting feature is grandfathered into the
-    // current API to support test-specific critical log-data reporting.
-    string critical_log_data_path = 1;
-
-    // Absolute path to a directory where non prod-critical log-data may be
-    // written.
+    // * Remote Test Drivers should use
+    // test.invocation.ProgressClient.ReportLog() to report logs.
+    // * Remote Test Drivers should use
+    // test.invocation.ProgressClient.ArchiveArtifact() to archive critical
+    // artifacts.
     //
-    // This directory must be created by Remote Test Server prior to the Remote
-    // Test Driver invocation. It's contents may be offloaded to long-term
+    // Remote Test Servers may archive the work_dir contents to non-ephemeral
     // storage as a best effort asynchronous task.
+    string work_dir = 1;
+
+    // Absolute path to a directory for writing temporary files.
     //
-    // Note: Remote Test Drivers should use
-    // test.invocation.ProgressClient.ReportLogData() to report logs whenever
-    // possible. This log-data reporting feature is grandfathered into the
-    // current API to support test-specific log files.
-    string log_data_path = 2;
+    // This directory must be created by Remote Test Server prior to the Remote
+    // Test Driver invocation.
+    //
+    // Remote Test Drivers must use this directory for temporary files and must
+    // not attempt to use defaults like /tmp or the TMP environment variable.
+    //
+    // See also: Environment.work_dir
+    string temp_dir = 2;
   }
 
   // Environment configuration set by the Remote Test Server for a specific
diff --git a/src/test/rtd/v1/progress.proto b/src/test/rtd/v1/progress.proto
index 2e5173b..4092e0e 100644
--- a/src/test/rtd/v1/progress.proto
+++ b/src/test/rtd/v1/progress.proto
@@ -42,6 +42,19 @@
   // calls. Data received from concurrent methods calls for the same log file
   // may be interleved arbitrarily.
   rpc ReportLog(stream ReportLogRequest) returns (ReportLogResponse);
+
+  // Archive test artifacts to non-ephemeral storage.
+  //
+  // Different Test Lab Environments may use very different non-ephemeral
+  // storage technologies. Remote Test Servers must archive the artifacts to
+  // final storage synchronously and return an error if the archival fails.
+  //
+  // Note: Remote Test Drivers should use ReportLog() to report logs.
+  // ArchiveArtifact() should be used to report structured or binary data only.
+  //
+  // Remote Test Server may limit the size of artifacts that may be offloaded
+  // per request and may fail further requests with RESOURCE_EXHAUSTED.
+  rpc ArchiveArtifact(ArchiveArtifactRequest) returns (ArchiveArtifactResponse);
 }
 
 message ReportResultRequest {
@@ -150,4 +163,25 @@
   bytes data = 3;
 }
 
-message ReportLogResponse {}
\ No newline at end of file
+message ReportLogResponse {}
+
+message ArchiveArtifactRequest {
+  // Name for the archived artifact.
+  //
+  // name may be interpreted as a local file path or part of a URL. name must be
+  // a valid resource name per https://aip.dev/122 and must be a valid POSIX
+  // file path.
+  //
+  // name must be unique across all artifacts archived from a single invocation
+  // request.
+  string name = 1;
+
+  // The request to archive artifacts for, identified by the
+  // Invocation.Request.name field.
+  string request = 2;
+
+  // Absolute path to a file or directory to archive.
+  string local_path = 3;
+}
+
+message ArchiveArtifactResponse {}
\ No newline at end of file
