diff --git a/metropolis/cli/dbg/main.go b/metropolis/cli/dbg/main.go
index 1845ad1..4a3d32e 100644
--- a/metropolis/cli/dbg/main.go
+++ b/metropolis/cli/dbg/main.go
@@ -77,24 +77,24 @@
 	case "logs":
 		logsCmd.Parse(os.Args[2:])
 		dn := logsCmd.Arg(0)
-		req := &apb.GetLogsRequest{
+		req := &apb.LogsRequest{
 			Dn:          dn,
-			BacklogMode: apb.GetLogsRequest_BACKLOG_MODE_DISABLE,
-			StreamMode:  apb.GetLogsRequest_STREAM_MODE_DISABLE,
+			BacklogMode: apb.LogsRequest_BACKLOG_MODE_DISABLE,
+			StreamMode:  apb.LogsRequest_STREAM_MODE_DISABLE,
 			Filters:     nil,
 		}
 
 		switch *logsTailN {
 		case 0:
 		case -1:
-			req.BacklogMode = apb.GetLogsRequest_BACKLOG_MODE_ALL
+			req.BacklogMode = apb.LogsRequest_BACKLOG_MODE_ALL
 		default:
-			req.BacklogMode = apb.GetLogsRequest_BACKLOG_MODE_COUNT
+			req.BacklogMode = apb.LogsRequest_BACKLOG_MODE_COUNT
 			req.BacklogCount = int64(*logsTailN)
 		}
 
 		if *logsStream {
-			req.StreamMode = apb.GetLogsRequest_STREAM_MODE_UNBUFFERED
+			req.StreamMode = apb.LogsRequest_STREAM_MODE_UNBUFFERED
 		}
 
 		if *logsRecursive {
@@ -103,7 +103,7 @@
 			})
 		}
 
-		stream, err := debugClient.GetLogs(ctx, req)
+		stream, err := debugClient.Logs(ctx, req)
 		if err != nil {
 			fmt.Fprintf(os.Stderr, "Failed to get logs: %v\n", err)
 			os.Exit(1)
diff --git a/metropolis/cli/metroctl/cmd_node_logs.go b/metropolis/cli/metroctl/cmd_node_logs.go
index 36ccd00..5baf2f6 100644
--- a/metropolis/cli/metroctl/cmd_node_logs.go
+++ b/metropolis/cli/metroctl/cmd_node_logs.go
@@ -97,9 +97,9 @@
 		}
 		nmgmt := api.NewNodeManagementClient(cl)
 
-		streamMode := api.GetLogsRequest_STREAM_MODE_DISABLE
+		streamMode := api.LogsRequest_STREAM_MODE_DISABLE
 		if logFlags.follow {
-			streamMode = api.GetLogsRequest_STREAM_MODE_UNBUFFERED
+			streamMode = api.LogsRequest_STREAM_MODE_UNBUFFERED
 		}
 		var filters []*cpb.LogFilter
 		if !logFlags.exact {
@@ -109,17 +109,17 @@
 				},
 			})
 		}
-		backlogMode := api.GetLogsRequest_BACKLOG_MODE_ALL
+		backlogMode := api.LogsRequest_BACKLOG_MODE_ALL
 		var backlogCount int64
 		switch {
 		case logFlags.backlog > 0:
-			backlogMode = api.GetLogsRequest_BACKLOG_MODE_COUNT
+			backlogMode = api.LogsRequest_BACKLOG_MODE_COUNT
 			backlogCount = int64(logFlags.backlog)
 		case logFlags.backlog == 0:
-			backlogMode = api.GetLogsRequest_BACKLOG_MODE_DISABLE
+			backlogMode = api.LogsRequest_BACKLOG_MODE_DISABLE
 		}
 
-		srv, err := nmgmt.Logs(ctx, &api.GetLogsRequest{
+		srv, err := nmgmt.Logs(ctx, &api.LogsRequest{
 			Dn:           logFlags.dn,
 			BacklogMode:  backlogMode,
 			BacklogCount: backlogCount,
diff --git a/metropolis/node/core/curator/impl_leader_aaa.go b/metropolis/node/core/curator/impl_leader_aaa.go
index 8813108..40e4c7e 100644
--- a/metropolis/node/core/curator/impl_leader_aaa.go
+++ b/metropolis/node/core/curator/impl_leader_aaa.go
@@ -98,10 +98,10 @@
 	pk := peerInfo.Unauthenticated.SelfSignedPublicKey
 	if pk == nil {
 		// No cert was presented, respond with REFRESH_CERTIFICATE request.
-		err := srv.Send(&apb.EscrowFromServer{
-			Needed: []*apb.EscrowFromServer_ProofRequest{
+		err := srv.Send(&apb.EscrowResponse{
+			Needed: []*apb.EscrowResponse_ProofRequest{
 				{
-					Kind: apb.EscrowFromServer_ProofRequest_KIND_REFRESH_CERTIFICATE,
+					Kind: apb.EscrowResponse_ProofRequest_KIND_REFRESH_CERTIFICATE,
 				},
 			},
 		})
@@ -141,10 +141,10 @@
 		return status.Errorf(codes.Unavailable, "ensuring new certificate failed: %v", err)
 	}
 
-	return srv.Send(&apb.EscrowFromServer{
-		Fulfilled: []*apb.EscrowFromServer_ProofRequest{
+	return srv.Send(&apb.EscrowResponse{
+		Fulfilled: []*apb.EscrowResponse_ProofRequest{
 			{
-				Kind: apb.EscrowFromServer_ProofRequest_KIND_REFRESH_CERTIFICATE,
+				Kind: apb.EscrowResponse_ProofRequest_KIND_REFRESH_CERTIFICATE,
 			},
 		},
 		EmittedCertificate: ocBytes,
diff --git a/metropolis/node/core/curator/impl_leader_curator.go b/metropolis/node/core/curator/impl_leader_curator.go
index addd789..bcf7d42 100644
--- a/metropolis/node/core/curator/impl_leader_curator.go
+++ b/metropolis/node/core/curator/impl_leader_curator.go
@@ -291,7 +291,7 @@
 		// Update the node's timestamp within the local Curator state.
 		l.ls.heartbeatTimestamps.Store(id, time.Now())
 
-		rsp := &ipb.HeartbeatUpdateResponse{}
+		rsp := &ipb.HeartbeatResponse{}
 		if err := stream.Send(rsp); err != nil {
 			return err
 		}
diff --git a/metropolis/node/core/curator/impl_leader_test.go b/metropolis/node/core/curator/impl_leader_test.go
index 59788e8..72c8658 100644
--- a/metropolis/node/core/curator/impl_leader_test.go
+++ b/metropolis/node/core/curator/impl_leader_test.go
@@ -1001,7 +1001,7 @@
 		t.Fatalf("While initializing heartbeat stream: %v", err)
 	}
 	for i := 0; i < 3; i++ {
-		if err := stream.Send(&ipb.HeartbeatUpdateRequest{}); err != nil {
+		if err := stream.Send(&ipb.HeartbeatRequest{}); err != nil {
 			t.Fatalf("While sending a heartbeat: %v", err)
 		}
 
diff --git a/metropolis/node/core/curator/proto/api/BUILD.bazel b/metropolis/node/core/curator/proto/api/BUILD.bazel
index 146c8d2..e5b826d 100644
--- a/metropolis/node/core/curator/proto/api/BUILD.bazel
+++ b/metropolis/node/core/curator/proto/api/BUILD.bazel
@@ -8,8 +8,7 @@
     except_rules = [
         "PACKAGE_VERSION_SUFFIX",
         "ENUM_ZERO_VALUE_SUFFIX",
-        "RPC_REQUEST_STANDARD_NAME",  # TODO: evaluate correctness
-        "RPC_RESPONSE_STANDARD_NAME",  # TODO: evaluate correctness
+        "RPC_RESPONSE_STANDARD_NAME",
         "SERVICE_SUFFIX",
     ],
     protos = [":api_proto"],
diff --git a/metropolis/node/core/curator/proto/api/api.proto b/metropolis/node/core/curator/proto/api/api.proto
index 9641c24..16b1ae1 100644
--- a/metropolis/node/core/curator/proto/api/api.proto
+++ b/metropolis/node/core/curator/proto/api/api.proto
@@ -50,7 +50,7 @@
 
     // Heartbeat is used by nodes to periodicall update their heartbeat
     // timestamps within the current Curator leader.
-    rpc Heartbeat(stream HeartbeatUpdateRequest) returns (stream HeartbeatUpdateResponse) {
+    rpc Heartbeat(stream HeartbeatRequest) returns (stream HeartbeatResponse) {
         option (metropolis.proto.ext.authorization) = {
             need: PERMISSION_UPDATE_NODE_SELF
         };
@@ -252,10 +252,10 @@
 message UpdateNodeStatusResponse {
 }
 
-message HeartbeatUpdateRequest {
+message HeartbeatRequest {
 }
 
-message HeartbeatUpdateResponse {
+message HeartbeatResponse {
 }
 
 message RegisterNodeRequest {
diff --git a/metropolis/node/core/debug_service_enabled.go b/metropolis/node/core/debug_service_enabled.go
index 4f8495f..ff20a55 100644
--- a/metropolis/node/core/debug_service_enabled.go
+++ b/metropolis/node/core/debug_service_enabled.go
@@ -85,7 +85,7 @@
 	}
 }
 
-func (s *debugService) GetLogs(req *apb.GetLogsRequest, srv apb.NodeDebugService_GetLogsServer) error {
+func (s *debugService) Logs(req *apb.LogsRequest, srv apb.NodeDebugService_LogsServer) error {
 	svc := mgmt.LogService{
 		LogTree: s.logtree,
 	}
diff --git a/metropolis/node/core/mgmt/svc_logs.go b/metropolis/node/core/mgmt/svc_logs.go
index 7a6ded5..ebc7800 100644
--- a/metropolis/node/core/mgmt/svc_logs.go
+++ b/metropolis/node/core/mgmt/svc_logs.go
@@ -62,7 +62,7 @@
 	return res
 }
 
-func (s *LogService) Logs(req *api.GetLogsRequest, srv api.NodeManagement_LogsServer) error {
+func (s *LogService) Logs(req *api.LogsRequest, srv api.NodeManagement_LogsServer) error {
 	if len(req.Filters) > logFilterMax {
 		return status.Errorf(codes.InvalidArgument, "requested %d filters, maximum permitted is %d", len(req.Filters), logFilterMax)
 	}
@@ -80,10 +80,10 @@
 
 	// Turn backlog mode into logtree option(s).
 	switch req.BacklogMode {
-	case api.GetLogsRequest_BACKLOG_MODE_DISABLE:
-	case api.GetLogsRequest_BACKLOG_MODE_ALL:
+	case api.LogsRequest_BACKLOG_MODE_DISABLE:
+	case api.LogsRequest_BACKLOG_MODE_ALL:
 		options = append(options, logtree.WithBacklog(logtree.BacklogAllAvailable))
-	case api.GetLogsRequest_BACKLOG_MODE_COUNT:
+	case api.LogsRequest_BACKLOG_MODE_COUNT:
 		count := int(req.BacklogCount)
 		if count <= 0 {
 			return status.Errorf(codes.InvalidArgument, "backlog_count must be > 0 if backlog_mode is BACKLOG_COUNT")
@@ -96,8 +96,8 @@
 	// Turn stream mode into logtree option(s).
 	streamEnable := false
 	switch req.StreamMode {
-	case api.GetLogsRequest_STREAM_MODE_DISABLE:
-	case api.GetLogsRequest_STREAM_MODE_UNBUFFERED:
+	case api.LogsRequest_STREAM_MODE_DISABLE:
+	case api.LogsRequest_STREAM_MODE_UNBUFFERED:
 		streamEnable = true
 		options = append(options, logtree.WithStream())
 	}
@@ -155,7 +155,7 @@
 		chunk = append(chunk, p)
 
 		if len(chunk) >= maxChunkSize {
-			err := srv.Send(&api.GetLogsResponse{
+			err := srv.Send(&api.LogsResponse{
 				BacklogEntries: sanitizedEntries(chunk),
 			})
 			if err != nil {
@@ -167,7 +167,7 @@
 
 	// Send last chunk of backlog, if present..
 	if len(chunk) > 0 {
-		err := srv.Send(&api.GetLogsResponse{
+		err := srv.Send(&api.LogsResponse{
 			BacklogEntries: sanitizedEntries(chunk),
 		})
 		if err != nil {
@@ -191,7 +191,7 @@
 			// TODO(q3k): log this once we have logtree/gRPC compatibility.
 			continue
 		}
-		err := srv.Send(&api.GetLogsResponse{
+		err := srv.Send(&api.LogsResponse{
 			StreamEntries: []*lpb.LogEntry{p},
 		})
 		if err != nil {
diff --git a/metropolis/node/core/mgmt/svc_logs_test.go b/metropolis/node/core/mgmt/svc_logs_test.go
index f778084..f650b4e 100644
--- a/metropolis/node/core/mgmt/svc_logs_test.go
+++ b/metropolis/node/core/mgmt/svc_logs_test.go
@@ -128,26 +128,26 @@
 	s.LogTree.MustLeveledFor("main.roleserver.controlplane").Infof("Starting etcd...")
 	s.LogTree.MustLeveledFor("main.weirdo").Infof("Here comes some invalid utf-8: a\xc5z")
 
-	mkReq := func(dn string, backlog int64) *api.GetLogsRequest {
-		var backlogMode api.GetLogsRequest_BacklogMode
+	mkReq := func(dn string, backlog int64) *api.LogsRequest {
+		var backlogMode api.LogsRequest_BacklogMode
 		var backlogCount int64
 		switch {
 		case backlog < 0:
-			backlogMode = api.GetLogsRequest_BACKLOG_MODE_ALL
+			backlogMode = api.LogsRequest_BACKLOG_MODE_ALL
 		case backlog > 0:
-			backlogMode = api.GetLogsRequest_BACKLOG_MODE_COUNT
+			backlogMode = api.LogsRequest_BACKLOG_MODE_COUNT
 			backlogCount = backlog
 		case backlog == 0:
-			backlogMode = api.GetLogsRequest_BACKLOG_MODE_DISABLE
+			backlogMode = api.LogsRequest_BACKLOG_MODE_DISABLE
 		}
-		return &api.GetLogsRequest{
+		return &api.LogsRequest{
 			Dn:           dn,
 			BacklogMode:  backlogMode,
 			BacklogCount: backlogCount,
-			StreamMode:   api.GetLogsRequest_STREAM_MODE_DISABLE,
+			StreamMode:   api.LogsRequest_STREAM_MODE_DISABLE,
 		}
 	}
-	mkRecursive := func(in *api.GetLogsRequest) *api.GetLogsRequest {
+	mkRecursive := func(in *api.LogsRequest) *api.LogsRequest {
 		in.Filters = append(in.Filters, &cpb.LogFilter{
 			Filter: &cpb.LogFilter_WithChildren_{
 				WithChildren: &cpb.LogFilter_WithChildren{},
@@ -156,7 +156,7 @@
 		return in
 	}
 	for i, te := range []struct {
-		req  *api.GetLogsRequest
+		req  *api.LogsRequest
 		want []*lpb.LogEntry
 	}{
 		{
@@ -221,10 +221,10 @@
 
 	// Start streaming all logs.
 	mgmt := api.NewNodeManagementClient(cl)
-	srv, err := mgmt.Logs(ctx, &api.GetLogsRequest{
+	srv, err := mgmt.Logs(ctx, &api.LogsRequest{
 		Dn:          "",
-		BacklogMode: api.GetLogsRequest_BACKLOG_MODE_ALL,
-		StreamMode:  api.GetLogsRequest_STREAM_MODE_UNBUFFERED,
+		BacklogMode: api.LogsRequest_BACKLOG_MODE_ALL,
+		StreamMode:  api.LogsRequest_STREAM_MODE_UNBUFFERED,
 		Filters: []*cpb.LogFilter{
 			{
 				Filter: &cpb.LogFilter_WithChildren_{
@@ -295,15 +295,15 @@
 	s.LogTree.MustLeveledFor("main").Errorf("Something failed very hard!")
 
 	for i, te := range []struct {
-		req  *api.GetLogsRequest
+		req  *api.LogsRequest
 		want []*lpb.LogEntry
 	}{
 		// Case 0: request given level
 		{
-			req: &api.GetLogsRequest{
+			req: &api.LogsRequest{
 				Dn:          "main",
-				BacklogMode: api.GetLogsRequest_BACKLOG_MODE_ALL,
-				StreamMode:  api.GetLogsRequest_STREAM_MODE_DISABLE,
+				BacklogMode: api.LogsRequest_BACKLOG_MODE_ALL,
+				StreamMode:  api.LogsRequest_STREAM_MODE_DISABLE,
 				Filters: []*cpb.LogFilter{
 					{
 						Filter: &cpb.LogFilter_LeveledWithMinimumSeverity_{
@@ -321,10 +321,10 @@
 		},
 		// Case 1: request raw only
 		{
-			req: &api.GetLogsRequest{
+			req: &api.LogsRequest{
 				Dn:          "main",
-				BacklogMode: api.GetLogsRequest_BACKLOG_MODE_ALL,
-				StreamMode:  api.GetLogsRequest_STREAM_MODE_DISABLE,
+				BacklogMode: api.LogsRequest_BACKLOG_MODE_ALL,
+				StreamMode:  api.LogsRequest_STREAM_MODE_DISABLE,
 				Filters: []*cpb.LogFilter{
 					{
 						Filter: &cpb.LogFilter_OnlyRaw_{
@@ -339,10 +339,10 @@
 		},
 		// Case 2: request leveled only
 		{
-			req: &api.GetLogsRequest{
+			req: &api.LogsRequest{
 				Dn:          "main",
-				BacklogMode: api.GetLogsRequest_BACKLOG_MODE_ALL,
-				StreamMode:  api.GetLogsRequest_STREAM_MODE_DISABLE,
+				BacklogMode: api.LogsRequest_BACKLOG_MODE_ALL,
+				StreamMode:  api.LogsRequest_STREAM_MODE_DISABLE,
 				Filters: []*cpb.LogFilter{
 					{
 						Filter: &cpb.LogFilter_OnlyLeveled_{
diff --git a/metropolis/node/core/roleserve/worker_heartbeat.go b/metropolis/node/core/roleserve/worker_heartbeat.go
index c31d203..bac11d9 100644
--- a/metropolis/node/core/roleserve/worker_heartbeat.go
+++ b/metropolis/node/core/roleserve/worker_heartbeat.go
@@ -45,7 +45,7 @@
 	}
 
 	for {
-		if err := stream.Send(&ipb.HeartbeatUpdateRequest{}); err != nil {
+		if err := stream.Send(&ipb.HeartbeatRequest{}); err != nil {
 			return fmt.Errorf("while sending a heartbeat: %w", err)
 		}
 		next := time.Now().Add(curator.HeartbeatTimeout)
diff --git a/metropolis/node/core/rpc/client.go b/metropolis/node/core/rpc/client.go
index f364c5a..74965c1 100644
--- a/metropolis/node/core/rpc/client.go
+++ b/metropolis/node/core/rpc/client.go
@@ -218,8 +218,8 @@
 		}
 		return nil, err
 	}
-	if err := srv.Send(&apb.EscrowFromClient{
-		Parameters: &apb.EscrowFromClient_Parameters{
+	if err := srv.Send(&apb.EscrowRequest{
+		Parameters: &apb.EscrowRequest_Parameters{
 			RequestedIdentityName: "owner",
 			PublicKey:             private.Public().(ed25519.PublicKey),
 		},
diff --git a/metropolis/proto/api/BUILD.bazel b/metropolis/proto/api/BUILD.bazel
index 28d1fb9..a849a07 100644
--- a/metropolis/proto/api/BUILD.bazel
+++ b/metropolis/proto/api/BUILD.bazel
@@ -8,9 +8,9 @@
     except_rules = [
         "PACKAGE_VERSION_SUFFIX",
         "ENUM_ZERO_VALUE_SUFFIX",
-        "RPC_REQUEST_RESPONSE_UNIQUE",  # TODO: evaluate correctness
-        "RPC_REQUEST_STANDARD_NAME",  # TODO: evaluate correctness
-        "RPC_RESPONSE_STANDARD_NAME",  # TODO: evaluate correctness
+        "RPC_REQUEST_RESPONSE_UNIQUE",
+        "RPC_REQUEST_STANDARD_NAME",
+        "RPC_RESPONSE_STANDARD_NAME",
         "SERVICE_SUFFIX",
     ],
     protos = [":api_proto"],
diff --git a/metropolis/proto/api/aaa.proto b/metropolis/proto/api/aaa.proto
index faf6dda..4cdfa18 100644
--- a/metropolis/proto/api/aaa.proto
+++ b/metropolis/proto/api/aaa.proto
@@ -45,7 +45,7 @@
     // channel opened from a given IP address or with a given existing TLS
     // certificate), and some dependent on external systems (eg. SSO).
     //
-    // If the requested identity within the first EscrowFromClient is not
+    // If the requested identity within the first EscrowRequest is not
     // defined, the server may:
     //
     //  - Abort the connection immediately with an error about an unknown
@@ -146,7 +146,7 @@
     // will lead to retrieving identities from with the same namespace of
     // entities.
     //
-    rpc Escrow(stream EscrowFromClient) returns (stream EscrowFromServer) {
+    rpc Escrow(stream EscrowRequest) returns (stream EscrowResponse) {
         option (metropolis.proto.ext.authorization) = {
             // The AAA implementation performs its own checks as needed, so the
             // RPC middleware should allow everything through.
@@ -155,9 +155,9 @@
     }
 }
 
-message EscrowFromClient {
+message EscrowRequest {
     // Parameters used for the entirety of the escrow flow. These must be set
-    // only during the first EscrowFromClient message, and are ignored in
+    // only during the first EscrowRequest message, and are ignored in
     // further messages.
     message Parameters {
         // The requested identity name. This is currently opaque and not defined,
@@ -178,7 +178,7 @@
 
     // Proofs. These should only be submitted by the client after the server
     // requests them, but if they are submitted within the first
-    // EscrowFromClientMessage they will be interpreted too. The problem with
+    // EscrowRequestMessage they will be interpreted too. The problem with
     // ahead of time proofs is that different a proof request from the server
     // might parametrize the request in a way that would elicit a different
     // answer from the client, so care must be taken to ensure that the
@@ -193,7 +193,7 @@
     Proofs proofs = 2;
 }
 
-message EscrowFromServer {
+message EscrowResponse {
     // A proof requested from the server. Within an Escrow RPC, proofs can be
     // either 'needed' or 'fulfilled'. Each proof has a kind, and kinds within
     // all proof requests (either needed or fulfilled) are unique.
@@ -209,7 +209,7 @@
             KIND_REFRESH_CERTIFICATE = 1;
             // The client needs to present a static, plaintext password/token.
             // This can be fulfilled by setting
-            // EscrowFromClient.proofs.plaintext_password.
+            // EscrowRequest.proofs.plaintext_password.
             // If the client presents an invalid password, the Escrow RPC will
             // fail.
             KIND_PLAINTEXT_PASSWORD = 2;
diff --git a/metropolis/proto/api/debug.proto b/metropolis/proto/api/debug.proto
index e5529f9..fba5470 100644
--- a/metropolis/proto/api/debug.proto
+++ b/metropolis/proto/api/debug.proto
@@ -29,7 +29,7 @@
 
     // A reimplementation of metropolis.api.NodeManagement.Logs that's available
     // before the node starts up the management service.
-    rpc GetLogs(GetLogsRequest) returns (stream GetLogsResponse);
+    rpc Logs(LogsRequest) returns (stream LogsResponse);
 
     // Trace enables tracing of Metropolis using the Linux ftrace infrastructure.
     rpc Trace(TraceRequest) returns (stream TraceEvent);
diff --git a/metropolis/proto/api/management.proto b/metropolis/proto/api/management.proto
index 59fd038..9a81082 100644
--- a/metropolis/proto/api/management.proto
+++ b/metropolis/proto/api/management.proto
@@ -377,7 +377,7 @@
 // NodeManagement runs on every node of the cluster and providers management
 // and troubleshooting RPCs to operators. All requests must be authenticated.
 service NodeManagement {
-  // GetLogs Returns historical and/or streaming logs for a given DN with given
+  // Logs Returns historical and/or streaming logs for a given DN with given
   // filters from the system global LogTree.
   //
   // For more information about this API, see //osbase/logtree. But, in
@@ -393,7 +393,7 @@
   //     example paths, see the console logs of a running Metropolis node, or
   //     request all logs (at DN "").
   //
-  rpc Logs(GetLogsRequest) returns (stream GetLogsResponse) {
+  rpc Logs(LogsRequest) returns (stream LogsResponse) {
     option (metropolis.proto.ext.authorization) = {
       need: PERMISSION_READ_NODE_LOGS
     };
@@ -418,7 +418,7 @@
   }
 }
 
-message GetLogsRequest {
+message LogsRequest {
   // DN from which to request logs. All supervised runnables live at `root.`,
   // the init code lives at `init.`.
   string dn = 1;
@@ -449,7 +449,7 @@
   StreamMode stream_mode = 5;
 }
 
-message GetLogsResponse {
+message LogsResponse {
   // Entries from the requested historical entries (via WithBackLog). They will
   // all be served before the first stream_entries are served (if any).
   repeated osbase.logtree.proto.LogEntry backlog_entries = 1;
