diff --git a/y2020/control_loops/drivetrain/localizer.cc b/y2020/control_loops/drivetrain/localizer.cc
index d4d5f72..505a598 100644
--- a/y2020/control_loops/drivetrain/localizer.cc
+++ b/y2020/control_loops/drivetrain/localizer.cc
@@ -199,7 +199,7 @@
         builder.MakeBuilder<LocalizerDebug>();
     debug_builder.add_matches(vector_offset);
     debug_builder.add_statistics(stats_offset);
-    CHECK(builder.Send(debug_builder.Finish()));
+    builder.CheckOk(builder.Send(debug_builder.Finish()));
   }
 }
 
@@ -303,7 +303,8 @@
     ImageMatchDebug::Builder builder(*fbb);
     builder.add_camera(camera_index);
     builder.add_pose_index(index);
-    builder.add_local_image_capture_time_ns(result.image_monotonic_timestamp_ns());
+    builder.add_local_image_capture_time_ns(
+        result.image_monotonic_timestamp_ns());
     builder.add_roborio_image_capture_time_ns(
         capture_time.time_since_epoch().count());
     builder.add_image_age_sec(aos::time::DurationInSeconds(now - capture_time));
@@ -390,8 +391,8 @@
                                  (2.0 * dt_config_.robot_radius) +
                              (is_turret ? turret_data.velocity : 0.0));
 
-    // Pay less attention to cameras that aren't actually on the turret, since they
-    // are less useful when it comes to actually making shots.
+    // Pay less attention to cameras that aren't actually on the turret, since
+    // they are less useful when it comes to actually making shots.
     if (!is_turret) {
       noises *= 3.0;
     } else {
diff --git a/y2020/control_loops/drivetrain/localizer_test.cc b/y2020/control_loops/drivetrain/localizer_test.cc
index 8ccb55c..18df813 100644
--- a/y2020/control_loops/drivetrain/localizer_test.cc
+++ b/y2020/control_loops/drivetrain/localizer_test.cc
@@ -192,7 +192,8 @@
           auto statistics_builder =
               builder.MakeBuilder<aos::message_bridge::ServerStatistics>();
           statistics_builder.add_connections(connections_offset);
-          builder.Send(statistics_builder.Finish());
+          CHECK_EQ(builder.Send(statistics_builder.Finish()),
+                   aos::RawSender::Error::kOk);
         },
         chrono::milliseconds(500));
 
@@ -210,7 +211,8 @@
           auto turret_offset = turret_builder.Finish();
           auto status_builder = builder.MakeBuilder<superstructure::Status>();
           status_builder.add_turret(turret_offset);
-          builder.Send(status_builder.Finish());
+          CHECK_EQ(builder.Send(status_builder.Finish()),
+                   aos::RawSender::Error::kOk);
         },
         chrono::milliseconds(5));
 
@@ -341,8 +343,10 @@
            std::get<0>(camera_delay_queue_.front()) <
                monotonic_now() - camera_latency) {
       auto builder = camera_sender_.MakeBuilder();
-      ASSERT_TRUE(builder.Send(ImageMatchResult::Pack(
-          *builder.fbb(), std::get<1>(camera_delay_queue_.front()).get())));
+      ASSERT_EQ(
+          builder.Send(ImageMatchResult::Pack(
+              *builder.fbb(), std::get<1>(camera_delay_queue_.front()).get())),
+          aos::RawSender::Error::kOk);
       camera_delay_queue_.pop();
     }
   }
@@ -402,7 +406,8 @@
     drivetrain_builder.add_left_goal(left);
     drivetrain_builder.add_right_goal(right);
 
-    EXPECT_TRUE(builder.Send(drivetrain_builder.Finish()));
+    EXPECT_EQ(builder.Send(drivetrain_builder.Finish()),
+              aos::RawSender::Error::kOk);
   }
 
  private:
@@ -608,8 +613,8 @@
       [this](int) {
         auto builder = camera_sender_.MakeBuilder();
         ImageMatchResultT image;
-        ASSERT_TRUE(
-            builder.Send(ImageMatchResult::Pack(*builder.fbb(), &image)));
+        ASSERT_EQ(builder.Send(ImageMatchResult::Pack(*builder.fbb(), &image)),
+                  aos::RawSender::Error::kOk);
       },
       std::chrono::milliseconds(40));
   test_event_loop_
