Fix or update references to pwbug/387

- Fix all references to pwbug/387 in tests by checking the statuses with
  ASSERT_EQ.
- Update other references to pwbug/387 to refer to the new bug
  b/242598609.

Fixes: b/242050869
Change-Id: I07f5e33dc8149382c9103511e6bcc7e7c51eea63
Reviewed-on: https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/106652
Pigweed-Auto-Submit: Wyatt Hepler <hepler@google.com>
Commit-Queue: Auto-Submit <auto-submit@pigweed.google.com.iam.gserviceaccount.com>
Reviewed-by: Rob Mohr <mohrr@google.com>
diff --git a/pw_allocator/block_test.cc b/pw_allocator/block_test.cc
index 2c06caa..06772bd 100644
--- a/pw_allocator/block_test.cc
+++ b/pw_allocator/block_test.cc
@@ -136,12 +136,10 @@
   EXPECT_EQ(Block::Init(span(bytes, kN), &block), OkStatus());
 
   Block* block2 = nullptr;
-  block->Split(kSplit1, &block2)
-      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  ASSERT_EQ(OkStatus(), block->Split(kSplit1, &block2));
 
   Block* block3 = nullptr;
-  block->Split(kSplit2, &block3)
-      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  ASSERT_EQ(OkStatus(), block->Split(kSplit2, &block3));
 
   EXPECT_EQ(block->Next(), block3);
   EXPECT_EQ(block3->Next(), block2);
@@ -284,12 +282,10 @@
   EXPECT_EQ(Block::Init(span(bytes, kN), &block), OkStatus());
 
   Block* block2 = nullptr;
-  block->Split(kSplit1, &block2)
-      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  ASSERT_EQ(OkStatus(), block->Split(kSplit1, &block2));
 
   Block* block3 = nullptr;
-  block->Split(kSplit2, &block3)
-      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  ASSERT_EQ(OkStatus(), block->Split(kSplit2, &block3));
 
   EXPECT_EQ(block3->MergeNext(), OkStatus());
 
@@ -314,8 +310,7 @@
   EXPECT_EQ(Block::Init(span(bytes, kN), &block), OkStatus());
 
   Block* next_block = nullptr;
-  block->Split(512, &next_block)
-      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  ASSERT_EQ(OkStatus(), block->Split(512, &next_block));
 
   EXPECT_EQ(next_block->MergeNext(), Status::OutOfRange());
   EXPECT_EQ(block->MergePrev(), Status::OutOfRange());
@@ -331,8 +326,7 @@
   EXPECT_EQ(Block::Init(span(bytes, kN), &block), OkStatus());
 
   Block* next_block = nullptr;
-  block->Split(512, &next_block)
-      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  ASSERT_EQ(OkStatus(), block->Split(512, &next_block));
 
   block->MarkUsed();
   EXPECT_EQ(block->MergeNext(), Status::FailedPrecondition());
@@ -347,12 +341,10 @@
   EXPECT_EQ(Block::Init(span(bytes, kN), &first_block), OkStatus());
 
   Block* second_block = nullptr;
-  first_block->Split(512, &second_block)
-      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  ASSERT_EQ(OkStatus(), first_block->Split(512, &second_block));
 
   Block* third_block = nullptr;
-  second_block->Split(256, &third_block)
-      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  ASSERT_EQ(OkStatus(), second_block->Split(256, &third_block));
 
   EXPECT_EQ(first_block->IsValid(), true);
   EXPECT_EQ(second_block->IsValid(), true);
@@ -367,16 +359,13 @@
   EXPECT_EQ(Block::Init(span(bytes, kN), &first_block), OkStatus());
 
   Block* second_block = nullptr;
-  first_block->Split(512, &second_block)
-      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  ASSERT_EQ(OkStatus(), first_block->Split(512, &second_block));
 
   Block* third_block = nullptr;
-  second_block->Split(256, &third_block)
-      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  ASSERT_EQ(OkStatus(), second_block->Split(256, &third_block));
 
   Block* fourth_block = nullptr;
-  third_block->Split(128, &fourth_block)
-      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  ASSERT_EQ(OkStatus(), third_block->Split(128, &fourth_block));
 
   std::byte* next_ptr = reinterpret_cast<std::byte*>(first_block);
   memcpy(next_ptr, second_block, sizeof(void*));
@@ -408,12 +397,10 @@
   EXPECT_EQ(Block::Init(span(bytes, kN), &first_block), OkStatus());
 
   Block* second_block = nullptr;
-  first_block->Split(512, &second_block)
-      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  ASSERT_EQ(OkStatus(), first_block->Split(512, &second_block));
 
   Block* third_block = nullptr;
-  second_block->Split(256, &third_block)
-      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  ASSERT_EQ(OkStatus(), second_block->Split(256, &third_block));
 
   EXPECT_EQ(first_block->IsValid(), true);
   EXPECT_EQ(second_block->IsValid(), true);
diff --git a/pw_allocator/freelist_heap.cc b/pw_allocator/freelist_heap.cc
index 133e06f..30bdc2e 100644
--- a/pw_allocator/freelist_heap.cc
+++ b/pw_allocator/freelist_heap.cc
@@ -29,7 +29,7 @@
       "Failed to initialize FreeListHeap region; misaligned or too small");
 
   freelist_.AddChunk(BlockToSpan(block))
-      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+      .IgnoreError();  // TODO(b/242598609): Handle Status properly
 
   region_ = region;
   heap_stats_.total_bytes = region.size();
@@ -44,7 +44,7 @@
     return nullptr;
   }
   freelist_.RemoveChunk(chunk)
-      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+      .IgnoreError();  // TODO(b/242598609): Handle Status properly
 
   Block* chunk_block = Block::FromUsableSpace(chunk.data());
 
@@ -55,7 +55,7 @@
   auto status = chunk_block->Split(size, &leftover);
   if (status == PW_STATUS_OK) {
     freelist_.AddChunk(BlockToSpan(leftover))
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+        .IgnoreError();  // TODO(b/242598609): Handle Status properly
   }
 
   chunk_block->MarkUsed();
@@ -96,9 +96,9 @@
   if (prev != nullptr && !prev->Used()) {
     // Remove from freelist and merge
     freelist_.RemoveChunk(BlockToSpan(prev))
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+        .IgnoreError();  // TODO(b/242598609): Handle Status properly
     chunk_block->MergePrev()
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+        .IgnoreError();  // TODO(b/242598609): Handle Status properly
 
     // chunk_block is now invalid; prev now encompasses it.
     chunk_block = prev;
@@ -106,13 +106,13 @@
 
   if (next != nullptr && !next->Used()) {
     freelist_.RemoveChunk(BlockToSpan(next))
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+        .IgnoreError();  // TODO(b/242598609): Handle Status properly
     chunk_block->MergeNext()
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+        .IgnoreError();  // TODO(b/242598609): Handle Status properly
   }
   // Add back to the freelist
   freelist_.AddChunk(BlockToSpan(chunk_block))
-      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+      .IgnoreError();  // TODO(b/242598609): Handle Status properly
 
   heap_stats_.bytes_allocated -= size_freed;
   heap_stats_.cumulative_freed += size_freed;
diff --git a/pw_allocator/freelist_test.cc b/pw_allocator/freelist_test.cc
index 5bb1e21..eea832a 100644
--- a/pw_allocator/freelist_test.cc
+++ b/pw_allocator/freelist_test.cc
@@ -55,8 +55,7 @@
 
   byte data[kN] = {std::byte(0)};
 
-  list.AddChunk(span(data, kN))
-      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  ASSERT_EQ(OkStatus(), list.AddChunk(span(data, kN)));
   auto item = list.FindChunk(kN / 2);
   EXPECT_EQ(item.size(), kN);
   EXPECT_EQ(item.data(), data);
@@ -68,8 +67,7 @@
 
   byte data[kN] = {std::byte(0)};
 
-  list.AddChunk(span(data, kN))
-      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  ASSERT_EQ(OkStatus(), list.AddChunk(span(data, kN)));
   auto status = list.RemoveChunk(span(data, kN));
   EXPECT_EQ(status, OkStatus());
 
@@ -85,10 +83,8 @@
   byte data1[kN1] = {std::byte(0)};
   byte data2[kN2] = {std::byte(0)};
 
-  list.AddChunk(span(data1, kN1))
-      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
-  list.AddChunk(span(data2, kN2))
-      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  ASSERT_EQ(OkStatus(), list.AddChunk(span(data1, kN1)));
+  ASSERT_EQ(OkStatus(), list.AddChunk(span(data2, kN2)));
 
   auto chunk = list.FindChunk(kN1 / 2);
   EXPECT_EQ(chunk.size(), kN1);
@@ -114,10 +110,8 @@
   byte data2[kN2] = {std::byte(0)};
 
   // List should now be 257 -> 512 -> NULL
-  list.AddChunk(span(data1, kN1))
-      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
-  list.AddChunk(span(data2, kN2))
-      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  ASSERT_EQ(OkStatus(), list.AddChunk(span(data1, kN1)));
+  ASSERT_EQ(OkStatus(), list.AddChunk(span(data2, kN2)));
 
   auto chunk = list.FindChunk(kN2 + 1);
   EXPECT_EQ(chunk.size(), kN1);
@@ -136,10 +130,8 @@
   // List should now be:
   // bkt[3] (257 bytes up to 512 bytes) -> 257 -> NULL
   // bkt[4] (513 bytes up to 1024 bytes) -> 513 -> NULL
-  list.AddChunk(span(data1, kN1))
-      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
-  list.AddChunk(span(data2, kN2))
-      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  ASSERT_EQ(OkStatus(), list.AddChunk(span(data1, kN1)));
+  ASSERT_EQ(OkStatus(), list.AddChunk(span(data2, kN2)));
 
   // Request a 300 byte chunk. This should return the 513 byte one
   auto chunk = list.FindChunk(kN1 + 1);
@@ -153,8 +145,7 @@
   byte data[kN] = {std::byte(0)};
   byte data2[kN] = {std::byte(0)};
 
-  list.AddChunk(span(data, kN))
-      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  ASSERT_EQ(OkStatus(), list.AddChunk(span(data, kN)));
   auto status = list.RemoveChunk(span(data2, kN));
   EXPECT_EQ(status, Status::NotFound());
 }
@@ -166,17 +157,13 @@
   byte data1[kN] = {std::byte(0)};
   byte data2[kN] = {std::byte(0)};
 
-  list.AddChunk(span(data1, kN))
-      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
-  list.AddChunk(span(data2, kN))
-      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  ASSERT_EQ(OkStatus(), list.AddChunk(span(data1, kN)));
+  ASSERT_EQ(OkStatus(), list.AddChunk(span(data2, kN)));
 
   auto chunk1 = list.FindChunk(kN);
-  list.RemoveChunk(chunk1)
-      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  ASSERT_EQ(OkStatus(), list.RemoveChunk(chunk1));
   auto chunk2 = list.FindChunk(kN);
-  list.RemoveChunk(chunk2)
-      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  ASSERT_EQ(OkStatus(), list.RemoveChunk(chunk2));
 
   // Ordering of the chunks doesn't matter
   EXPECT_TRUE(chunk1.data() != chunk2.data());
diff --git a/pw_assert_basic/basic_handler.cc b/pw_assert_basic/basic_handler.cc
index 6a6e734..d658c2b 100644
--- a/pw_assert_basic/basic_handler.cc
+++ b/pw_assert_basic/basic_handler.cc
@@ -81,7 +81,7 @@
 
 static void WriteLine(const std::string_view& s) {
   pw::sys_io::WriteLine(s)
-      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+      .IgnoreError();  // TODO(b/242598609): Handle Status properly
 }
 
 typedef pw::StringBuffer<150> Buffer;
diff --git a/pw_blob_store/blob_store.cc b/pw_blob_store/blob_store.cc
index 9cec204..01fdccd 100644
--- a/pw_blob_store/blob_store.cc
+++ b/pw_blob_store/blob_store.cc
@@ -90,7 +90,7 @@
                         metadata.v1_metadata.checksum)
            .ok()) {
     PW_LOG_ERROR("BlobStore init - Invalidating blob with invalid checksum");
-    Invalidate().IgnoreError();  // TODO(pwbug/387): Handle Status properly
+    Invalidate().IgnoreError();  // TODO(b/242598609): Handle Status properly
     return Status::DataLoss();
   }
 
@@ -120,7 +120,7 @@
   writer_open_ = true;
 
   // Clear any existing contents.
-  Invalidate().IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  Invalidate().IgnoreError();  // TODO(b/242598609): Handle Status properly
 
   return OkStatus();
 }
@@ -453,7 +453,7 @@
 
   // If any writes have been performed, reset the state.
   if (flash_address_ != 0) {
-    Invalidate().IgnoreError();  // TODO(pwbug/387): Handle Status properly
+    Invalidate().IgnoreError();  // TODO(b/242598609): Handle Status properly
   }
 
   PW_TRY(partition_.Erase());
diff --git a/pw_blob_store/blob_store_chunk_write_test.cc b/pw_blob_store/blob_store_chunk_write_test.cc
index 6a57001..45d1d94 100644
--- a/pw_blob_store/blob_store_chunk_write_test.cc
+++ b/pw_blob_store/blob_store_chunk_write_test.cc
@@ -34,22 +34,18 @@
   BlobStoreChunkTest() : flash_(kFlashAlignment), partition_(&flash_) {}
 
   void InitFlashTo(span<const std::byte> contents) {
-    partition_.Erase()
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+    ASSERT_EQ(OkStatus(), partition_.Erase());
     std::memcpy(flash_.buffer().data(), contents.data(), contents.size());
   }
 
   void InitSourceBufferToRandom(uint64_t seed) {
-    partition_.Erase()
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+    ASSERT_EQ(OkStatus(), partition_.Erase());
     random::XorShiftStarRng64 rng(seed);
-    rng.Get(source_buffer_)
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+    ASSERT_EQ(OkStatus(), rng.Get(source_buffer_).status());
   }
 
   void InitSourceBufferToFill(char fill) {
-    partition_.Erase()
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+    ASSERT_EQ(OkStatus(), partition_.Erase());
     std::memset(source_buffer_.data(), fill, source_buffer_.size());
   }
 
diff --git a/pw_blob_store/blob_store_test.cc b/pw_blob_store/blob_store_test.cc
index fecff6a..acaf2ff 100644
--- a/pw_blob_store/blob_store_test.cc
+++ b/pw_blob_store/blob_store_test.cc
@@ -41,8 +41,7 @@
   BlobStoreTest() : flash_(kFlashAlignment), partition_(&flash_) {}
 
   void InitFlashTo(span<const std::byte> contents) {
-    partition_.Erase()
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+    ASSERT_EQ(OkStatus(), partition_.Erase());
     std::memcpy(flash_.buffer().data(), contents.data(), contents.size());
   }
 
@@ -54,8 +53,8 @@
     std::memset(source_buffer_.data(),
                 static_cast<int>(flash_.erased_memory_content()),
                 source_buffer_.size());
-    rng.Get(span(source_buffer_).first(init_size_bytes))
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+    ASSERT_EQ(OkStatus(),
+              rng.Get(span(source_buffer_).first(init_size_bytes)).status());
   }
 
   void InitSourceBufferToFill(char fill,
diff --git a/pw_blob_store/flat_file_system_entry_test.cc b/pw_blob_store/flat_file_system_entry_test.cc
index 2149688..774a6f8 100644
--- a/pw_blob_store/flat_file_system_entry_test.cc
+++ b/pw_blob_store/flat_file_system_entry_test.cc
@@ -55,8 +55,8 @@
     std::memset(source_buffer_.data(),
                 static_cast<int>(flash_.erased_memory_content()),
                 source_buffer_.size());
-    rng.Get(span(source_buffer_).first(init_size_bytes))
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+    ASSERT_EQ(OkStatus(),
+              rng.Get(span(source_buffer_).first(init_size_bytes)).status());
   }
 
   // Fill the source buffer with random pattern based on given seed, written to
diff --git a/pw_blob_store/public/pw_blob_store/blob_store.h b/pw_blob_store/public/pw_blob_store/blob_store.h
index 5cad2b9..9bdb354 100644
--- a/pw_blob_store/public/pw_blob_store/blob_store.h
+++ b/pw_blob_store/public/pw_blob_store/blob_store.h
@@ -68,7 +68,7 @@
     BlobWriter& operator=(const BlobWriter&) = delete;
     ~BlobWriter() override {
       if (open_) {
-        Close().IgnoreError();  // TODO(pwbug/387): Handle Status properly
+        Close().IgnoreError();  // TODO(b/242598609): Handle Status properly
       }
     }
 
diff --git a/pw_file/flat_file_system.cc b/pw_file/flat_file_system.cc
index 5fb7903..b185b73 100644
--- a/pw_file/flat_file_system.cc
+++ b/pw_file/flat_file_system.cc
@@ -73,12 +73,12 @@
     Status write_status = writer.Write(encoder);
     if (!write_status.ok()) {
       writer.Finish(write_status)
-          .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+          .IgnoreError();  // TODO(b/242598609): Handle Status properly
       return;
     }
   }
   writer.Finish(OkStatus())
-      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+      .IgnoreError();  // TODO(b/242598609): Handle Status properly
 }
 
 void FlatFileSystemService::List(ConstByteSpan request,
@@ -95,7 +95,7 @@
     if (!decoder.ReadString(&file_name_view).ok() ||
         file_name_view.length() == 0) {
       writer.Finish(Status::DataLoss())
-          .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+          .IgnoreError();  // TODO(b/242598609): Handle Status properly
       return;
     }
 
@@ -103,7 +103,7 @@
     Result<Entry*> result = FindFile(file_name_view);
     if (!result.ok()) {
       writer.Finish(result.status())
-          .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+          .IgnoreError();  // TODO(b/242598609): Handle Status properly
       return;
     }
 
@@ -111,12 +111,12 @@
     Status proto_encode_status = EnumerateFile(*result.value(), encoder);
     if (!proto_encode_status.ok()) {
       writer.Finish(proto_encode_status)
-          .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+          .IgnoreError();  // TODO(b/242598609): Handle Status properly
       return;
     }
 
     writer.Finish(writer.Write(encoder))
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+        .IgnoreError();  // TODO(b/242598609): Handle Status properly
     return;
   }
 
diff --git a/pw_hdlc/rpc_packets.cc b/pw_hdlc/rpc_packets.cc
index e7f4d7b..d3261fb 100644
--- a/pw_hdlc/rpc_packets.cc
+++ b/pw_hdlc/rpc_packets.cc
@@ -33,7 +33,7 @@
       Frame& frame = result.value();
       if (frame.address() == rpc_address) {
         server.ProcessPacket(frame.data(), output)
-            .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+            .IgnoreError();  // TODO(b/242598609): Handle Status properly
       }
     }
   }
diff --git a/pw_hex_dump/hex_dump_test.cc b/pw_hex_dump/hex_dump_test.cc
index 4a4a969..7d64f9a 100644
--- a/pw_hex_dump/hex_dump_test.cc
+++ b/pw_hex_dump/hex_dump_test.cc
@@ -333,10 +333,9 @@
   constexpr size_t kTestBytesPerLine = 16;
   std::array<char, kHexAddrStringSize + 1> expected1;
   std::array<char, kHexAddrStringSize + 1> expected2;
-  DumpAddr(expected1, source_data.data())
-      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
-  DumpAddr(expected2, source_data.data() + kTestBytesPerLine)
-      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  ASSERT_EQ(OkStatus(), DumpAddr(expected1, source_data.data()));
+  ASSERT_EQ(OkStatus(),
+            DumpAddr(expected2, source_data.data() + kTestBytesPerLine));
 
   default_flags_.bytes_per_line = kTestBytesPerLine;
   default_flags_.prefix_mode = FormattedHexDumper::AddressMode::kAbsolute;
diff --git a/pw_hex_dump/public/pw_hex_dump/hex_dump.h b/pw_hex_dump/public/pw_hex_dump/hex_dump.h
index 61ab7f0..b08ce04 100644
--- a/pw_hex_dump/public/pw_hex_dump/hex_dump.h
+++ b/pw_hex_dump/public/pw_hex_dump/hex_dump.h
@@ -99,12 +99,12 @@
   FormattedHexDumper() = default;
   FormattedHexDumper(span<char> dest) {
     SetLineBuffer(dest)
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+        .IgnoreError();  // TODO(b/242598609): Handle Status properly
   }
   FormattedHexDumper(span<char> dest, Flags config_flags)
       : flags(config_flags) {
     SetLineBuffer(dest)
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+        .IgnoreError();  // TODO(b/242598609): Handle Status properly
   }
 
   // TODO(b/234892215): Add iterator support.
diff --git a/pw_i2c/register_device.cc b/pw_i2c/register_device.cc
index 21e52ce..9c3b15e 100644
--- a/pw_i2c/register_device.cc
+++ b/pw_i2c/register_device.cc
@@ -112,7 +112,7 @@
 
     case 4:
       PutRegisterData32InByteBuilder(builder, register_data, data_order_)
-          .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+          .IgnoreError();  // TODO(b/242598609): Handle Status properly
       break;
 
     default:
diff --git a/pw_kvs/alignment_test.cc b/pw_kvs/alignment_test.cc
index 38f6e0c..81edbb9 100644
--- a/pw_kvs/alignment_test.cc
+++ b/pw_kvs/alignment_test.cc
@@ -175,8 +175,8 @@
 
   {
     AlignedWriterBuffer<64> writer(3, output);
-    writer.Write(as_bytes(span("What is this?")))
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+    ASSERT_EQ(OkStatus(),
+              writer.Write(as_bytes(span("What is this?"))).status());
     EXPECT_EQ(called_with_bytes, 0u);  // Buffer not full; no output yet.
   }
 
@@ -212,12 +212,11 @@
 
   {
     AlignedWriterBuffer<4> writer(3, output);
-    writer.Write(as_bytes(span("Everything is fine.")))
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+    ASSERT_EQ(OkStatus(),
+              writer.Write(as_bytes(span("Everything is fine."))).status());
     output.state = OutputWithErrorInjection::kBreakOnNext;
     EXPECT_EQ(Status::Unknown(),
               writer.Write(as_bytes(span("No more writes, okay?"))).status());
-    writer.Flush().IgnoreError();  // TODO(pwbug/387): Handle Status properly
   }
 }
 
diff --git a/pw_kvs/fake_flash_test_key_value_store.cc b/pw_kvs/fake_flash_test_key_value_store.cc
index e6f1778..840eb72 100644
--- a/pw_kvs/fake_flash_test_key_value_store.cc
+++ b/pw_kvs/fake_flash_test_key_value_store.cc
@@ -72,7 +72,7 @@
 
 sync::Borrowable<KeyValueStore>& TestKvs() {
   if (!test_kvs.initialized()) {
-    test_kvs.Init().IgnoreError();  // TODO(pwbug/387): Handle Status properly
+    test_kvs.Init().IgnoreError();  // TODO(b/242598609): Handle Status properly
   }
 
   return borrowable_kvs;
diff --git a/pw_kvs/key_value_store.cc b/pw_kvs/key_value_store.cc
index 6e992ba..b0b7f5f 100644
--- a/pw_kvs/key_value_store.cc
+++ b/pw_kvs/key_value_store.cc
@@ -497,7 +497,7 @@
   Entry entry;
   if (kvs_.ReadEntry(*iterator_, entry).ok()) {
     entry.ReadKey(key_buffer_)
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+        .IgnoreError();  // TODO(b/242598609): Handle Status properly
   }
 }
 
@@ -1281,7 +1281,7 @@
 
   DBG("Reinitialize KVS metadata");
   InitializeMetadata()
-      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+      .IgnoreError();  // TODO(b/242598609): Handle Status properly
 
   return FixErrors();
 }
diff --git a/pw_kvs/key_value_store_binary_format_test.cc b/pw_kvs/key_value_store_binary_format_test.cc
index 7220df3..4ce2d74 100644
--- a/pw_kvs/key_value_store_binary_format_test.cc
+++ b/pw_kvs/key_value_store_binary_format_test.cc
@@ -174,8 +174,7 @@
         kvs_(&partition_, default_format, kNoGcOptions) {}
 
   void InitFlashTo(span<const byte> contents) {
-    partition_.Erase()
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+    ASSERT_EQ(OkStatus(), partition_.Erase());
     std::memcpy(flash_.buffer().data(), contents.data(), contents.size());
   }
 
@@ -383,8 +382,7 @@
              kRecoveryNoGcOptions) {}
 
   void InitFlashTo(span<const byte> contents) {
-    partition_.Erase()
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+    ASSERT_EQ(OkStatus(), partition_.Erase());
     std::memcpy(flash_.buffer().data(), contents.data(), contents.size());
   }
 
@@ -641,8 +639,7 @@
                  {.magic = kNoChecksumMagic, .checksum = nullptr},
              }},
              kRecoveryNoGcOptions) {
-    partition_.Erase()
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+    EXPECT_EQ(OkStatus(), partition_.Erase());
     std::memcpy(flash_.buffer().data(),
                 kInitialContents.data(),
                 kInitialContents.size());
@@ -876,8 +873,7 @@
                  {.magic = kNoChecksumMagic, .checksum = nullptr},
              }},
              kRecoveryNoGcOptions) {
-    partition_.Erase()
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+    EXPECT_EQ(OkStatus(), partition_.Erase());
     std::memcpy(flash_.buffer().data(),
                 kInitialContents.data(),
                 kInitialContents.size());
@@ -930,8 +926,7 @@
         kvs_(&partition_,
              {.magic = kMagic, .checksum = &default_checksum},
              kRecoveryLazyGcOptions) {
-    partition_.Erase()
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+    EXPECT_EQ(OkStatus(), partition_.Erase());
     std::memcpy(flash_.buffer().data(),
                 kInitialContents.data(),
                 kInitialContents.size());
@@ -1023,8 +1018,7 @@
         kvs_(&partition_,
              {.magic = kMagic, .checksum = &default_checksum},
              kRecoveryLazyGcOptions) {
-    partition_.Erase()
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+    EXPECT_EQ(OkStatus(), partition_.Erase());
     std::memcpy(flash_.buffer().data(),
                 kInitialContents.data(),
                 kInitialContents.size());
diff --git a/pw_kvs/key_value_store_fuzz_test.cc b/pw_kvs/key_value_store_fuzz_test.cc
index f68e75d..74e33ed 100644
--- a/pw_kvs/key_value_store_fuzz_test.cc
+++ b/pw_kvs/key_value_store_fuzz_test.cc
@@ -46,8 +46,7 @@
 
 TEST(KvsFuzz, FuzzTest) {
   FlashPartition& test_partition = FlashTestPartition();
-  test_partition.Erase()
-      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  ASSERT_EQ(OkStatus(), test_partition.Erase());
 
   KeyValueStoreBuffer<kMaxEntries, kMaxUsableSectors> kvs_(&test_partition,
                                                            default_format);
diff --git a/pw_kvs/key_value_store_initialized_test.cc b/pw_kvs/key_value_store_initialized_test.cc
index cc51e7a..2524a96 100644
--- a/pw_kvs/key_value_store_initialized_test.cc
+++ b/pw_kvs/key_value_store_initialized_test.cc
@@ -83,8 +83,7 @@
 class EmptyInitializedKvs : public ::testing::Test {
  protected:
   EmptyInitializedKvs() : kvs_(&test_partition, default_format) {
-    test_partition.Erase()
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+    EXPECT_EQ(OkStatus(), test_partition.Erase());
     PW_CHECK_OK(kvs_.Init());
   }
 
@@ -460,8 +459,7 @@
   EXPECT_EQ(test2, value2);
 
   // Delete other key
-  kvs_.Delete(keys[1])
-      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  ASSERT_EQ(OkStatus(), kvs_.Delete(keys[1]));
 
   // Verify it was erased
   EXPECT_EQ(kvs_.size(), 0u);
diff --git a/pw_kvs/key_value_store_map_test.cc b/pw_kvs/key_value_store_map_test.cc
index 7c2f1c8..0cf4b9f 100644
--- a/pw_kvs/key_value_store_map_test.cc
+++ b/pw_kvs/key_value_store_map_test.cc
@@ -166,8 +166,7 @@
       label << ((options == kReinitWithPartialGC) ? "PartialGC" : "");
       label << ((kvs_.redundancy() > 1) ? "Redundant" : "");
 
-      partition_.SaveStorageStats(kvs_, label.data())
-          .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+      ASSERT_EQ(OkStatus(), partition_.SaveStorageStats(kvs_, label.data()));
     }
   }
 
diff --git a/pw_kvs/key_value_store_put_test.cc b/pw_kvs/key_value_store_put_test.cc
index ca87f16..75754cd 100644
--- a/pw_kvs/key_value_store_put_test.cc
+++ b/pw_kvs/key_value_store_put_test.cc
@@ -44,8 +44,8 @@
   // human readable 4 bytes. See pw_kvs/format.h for more information.
   EmptyInitializedKvs()
       : kvs_(&test_partition, {.magic = 0x873a9b50, .checksum = &checksum}) {
-    test_partition.Erase(0, test_partition.sector_count())
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+    EXPECT_EQ(OkStatus(),
+              test_partition.Erase(0, test_partition.sector_count()));
     PW_CHECK_OK(kvs_.Init());
   }
 
@@ -70,8 +70,8 @@
     }
   }
 
-  test_partition.SaveStorageStats(kvs_, "Put_VaryingKeysAndValues")
-      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  ASSERT_EQ(OkStatus(),
+            test_partition.SaveStorageStats(kvs_, "Put_VaryingKeysAndValues"));
 }
 
 }  // namespace
diff --git a/pw_kvs/key_value_store_test.cc b/pw_kvs/key_value_store_test.cc
index 8231836..11e4102 100644
--- a/pw_kvs/key_value_store_test.cc
+++ b/pw_kvs/key_value_store_test.cc
@@ -206,8 +206,7 @@
              sizeof(fname_buf),
              "WriteOneKeyMultipleTimes_%d.bin",
              reload);
-    flash.Dump(fname_buf)
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+    ASSERT_EQ(OkStatus(), flash.Dump(fname_buf));
   }
 }
 
@@ -236,8 +235,7 @@
     EXPECT_OK(kvs.Put(key.view(), value));
     EXPECT_EQ(kvs.size(), i + 1);
   }
-  flash.Dump("WritingMultipleKeysIncreasesSize.bin")
-      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  ASSERT_EQ(OkStatus(), flash.Dump("WritingMultipleKeysIncreasesSize.bin"));
 }
 
 TEST(InMemoryKvs, WriteAndReadOneKey) {
diff --git a/pw_kvs/key_value_store_wear_test.cc b/pw_kvs/key_value_store_wear_test.cc
index 9b1f5bf..506ca4a 100644
--- a/pw_kvs/key_value_store_wear_test.cc
+++ b/pw_kvs/key_value_store_wear_test.cc
@@ -73,8 +73,8 @@
   EXPECT_GE(partition_.min_erase_count(), 7u);
   EXPECT_LE(partition_.max_erase_count(), partition_.min_erase_count() + 1u);
 
-  partition_.SaveStorageStats(kvs_, "WearTest RepeatedLargeEntry")
-      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  ASSERT_EQ(OkStatus(),
+            partition_.SaveStorageStats(kvs_, "WearTest RepeatedLargeEntry"));
 }
 
 // Test a KVS with a number of entries, several sectors that are nearly full
diff --git a/pw_kvs/public/pw_kvs/alignment.h b/pw_kvs/public/pw_kvs/alignment.h
index bdcd7e7..cbb90cb 100644
--- a/pw_kvs/public/pw_kvs/alignment.h
+++ b/pw_kvs/public/pw_kvs/alignment.h
@@ -61,7 +61,7 @@
   AlignedWriter& operator=(const AlignedWriter&) = delete;
 
   ~AlignedWriter() {
-    Flush().IgnoreError();  // TODO(pwbug/387): Handle Status properly
+    Flush().IgnoreError();  // TODO(b/242598609): Handle Status properly
   }
 
   // Writes bytes to the AlignedWriter. The output may be called if the internal
diff --git a/pw_kvs/public/pw_kvs/checksum.h b/pw_kvs/public/pw_kvs/checksum.h
index 9b0f257..9a307ea 100644
--- a/pw_kvs/public/pw_kvs/checksum.h
+++ b/pw_kvs/public/pw_kvs/checksum.h
@@ -91,7 +91,7 @@
  public:
   void Update(span<const std::byte> data) final {
     writer_.Write(data)
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+        .IgnoreError();  // TODO(b/242598609): Handle Status properly
   }
 
  protected:
@@ -106,7 +106,7 @@
   static_assert(kBufferSize >= kAlignmentBytes);
 
   void Finalize() final {
-    writer_.Flush().IgnoreError();  // TODO(pwbug/387): Handle Status properly
+    writer_.Flush().IgnoreError();  // TODO(b/242598609): Handle Status properly
     FinalizeAligned();
   }
 
diff --git a/pw_kvs/size_report/base_with_only_flash.cc b/pw_kvs/size_report/base_with_only_flash.cc
index b3873dd..f1fafa9 100644
--- a/pw_kvs/size_report/base_with_only_flash.cc
+++ b/pw_kvs/size_report/base_with_only_flash.cc
@@ -40,20 +40,20 @@
   is_set = (result != nullptr);
 
   test_partition.Erase()
-      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+      .IgnoreError();  // TODO(b/242598609): Handle Status properly
 
   std::memset((void*)working_buffer, 0x55, sizeof(working_buffer));
 
   test_partition.Write(0, pw::as_bytes(pw::span(working_buffer)))
-      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+      .IgnoreError();  // TODO(b/242598609): Handle Status properly
 
   bool tmp_bool;
   test_partition.IsErased(&tmp_bool)
-      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+      .IgnoreError();  // TODO(b/242598609): Handle Status properly
   is_erased = tmp_bool;
 
   test_partition.Read(0, as_writable_bytes(pw::span(working_buffer)))
-      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+      .IgnoreError();  // TODO(b/242598609): Handle Status properly
 
   return 0;
 }
diff --git a/pw_kvs/size_report/with_kvs.cc b/pw_kvs/size_report/with_kvs.cc
index fccbab5..eed3e4b 100644
--- a/pw_kvs/size_report/with_kvs.cc
+++ b/pw_kvs/size_report/with_kvs.cc
@@ -49,17 +49,17 @@
       std::memset((void*)working_buffer, 0x55, sizeof(working_buffer));
   is_set = (result != nullptr);
 
-  kvs.Init().IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  kvs.Init().IgnoreError();  // TODO(b/242598609): Handle Status properly
 
   unsigned kvs_value = 42;
   kvs.Put("example_key", kvs_value)
-      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+      .IgnoreError();  // TODO(b/242598609): Handle Status properly
 
   kvs_entry_count = kvs.size();
 
   unsigned read_value = 0;
   kvs.Get("example_key", &read_value)
-      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+      .IgnoreError();  // TODO(b/242598609): Handle Status properly
 
   return 0;
 }
diff --git a/pw_log_basic/log_basic.cc b/pw_log_basic/log_basic.cc
index 71a6197..7a4744e 100644
--- a/pw_log_basic/log_basic.cc
+++ b/pw_log_basic/log_basic.cc
@@ -85,7 +85,7 @@
 
 void (*write_log)(std::string_view) = [](std::string_view log) {
   sys_io::WriteLine(log)
-      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+      .IgnoreError();  // TODO(b/242598609): Handle Status properly
 };
 
 }  // namespace
diff --git a/pw_log_rpc/rpc_log_drain.cc b/pw_log_rpc/rpc_log_drain.cc
index c567d3b..57e5a8c 100644
--- a/pw_log_rpc/rpc_log_drain.cc
+++ b/pw_log_rpc/rpc_log_drain.cc
@@ -123,7 +123,7 @@
     }
 
     encoder.WriteFirstEntrySequenceId(sequence_id_)
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+        .IgnoreError();  // TODO(b/242598609): Handle Status properly
     sequence_id_ += packed_entry_count;
     const Status status = server_writer_.Write(encoder);
     sent_bundle_count++;
diff --git a/pw_metric/metric_service_nanopb.cc b/pw_metric/metric_service_nanopb.cc
index 12c6fd5..41ae6af 100644
--- a/pw_metric/metric_service_nanopb.cc
+++ b/pw_metric/metric_service_nanopb.cc
@@ -73,7 +73,7 @@
   void Flush() {
     if (response_.metrics_count) {
       response_writer_.Write(response_)
-          .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+          .IgnoreError();  // TODO(b/242598609): Handle Status properly
       response_ = pw_metric_proto_MetricResponse_init_zero;
     }
   }
diff --git a/pw_multisink/public/pw_multisink/multisink.h b/pw_multisink/public/pw_multisink/multisink.h
index 8c3d819..c65d03d 100644
--- a/pw_multisink/public/pw_multisink/multisink.h
+++ b/pw_multisink/public/pw_multisink/multisink.h
@@ -313,7 +313,7 @@
   MultiSink(ByteSpan buffer)
       : ring_buffer_(true), sequence_id_(0), total_ingress_drops_(0) {
     ring_buffer_.SetBuffer(buffer)
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+        .IgnoreError();  // TODO(b/242598609): Handle Status properly
     AttachDrain(oldest_entry_drain_);
   }
 
diff --git a/pw_persistent_ram/persistent_buffer_test.cc b/pw_persistent_ram/persistent_buffer_test.cc
index 7b93e9b..adaad30 100644
--- a/pw_persistent_ram/persistent_buffer_test.cc
+++ b/pw_persistent_ram/persistent_buffer_test.cc
@@ -59,8 +59,7 @@
     auto writer = persistent.GetWriter();
     EXPECT_EQ(persistent.size(), 0u);
 
-    writer.Write(as_bytes(span(&kExpectedNumber, 1)))
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+    ASSERT_EQ(OkStatus(), writer.Write(as_bytes(span(&kExpectedNumber, 1))));
     ASSERT_TRUE(persistent.has_value());
 
     persistent.~PersistentBuffer();  // Emulate shutdown / global destructors.
@@ -89,15 +88,13 @@
 
     auto writer = persistent.GetWriter();
     for (size_t i = 0; i < kTestString.length(); i += kWriteSize) {
-      writer
-          .Write(kTestString.data() + i,
-                 std::min(kWriteSize, kTestString.length() - i))
-          .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+      ASSERT_EQ(OkStatus(),
+                writer.Write(kTestString.data() + i,
+                             std::min(kWriteSize, kTestString.length() - i)));
     }
     // Need to manually write a null terminator since std::string_view doesn't
     // include one in the string length.
-    writer.Write(std::byte(0))
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+    ASSERT_EQ(OkStatus(), writer.Write(std::byte(0)));
 
     persistent.~PersistentBuffer();  // Emulate shutdown / global destructors.
   }
@@ -133,8 +130,7 @@
     EXPECT_EQ(persistent.size(), 0u);
 
     // Write an integer.
-    writer.Write(as_bytes(span(&kTestNumber, 1)))
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+    ASSERT_EQ(OkStatus(), writer.Write(as_bytes(span(&kTestNumber, 1))));
     ASSERT_TRUE(persistent.has_value());
 
     persistent.~PersistentBuffer();  // Emulate shutdown / global destructors.
@@ -148,8 +144,8 @@
     // Write more data.
     auto writer = persistent.GetWriter();
     EXPECT_EQ(persistent.size(), sizeof(kTestNumber));
-    writer.Write(as_bytes(span<const char>(kTestString)))
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+    ASSERT_EQ(OkStatus(),
+              writer.Write(as_bytes(span<const char>(kTestString))));
 
     persistent.~PersistentBuffer();  // Emulate shutdown / global destructors.
   }
diff --git a/pw_protobuf/codegen_encoder_test.cc b/pw_protobuf/codegen_encoder_test.cc
index 0c3de7d..49f0362 100644
--- a/pw_protobuf/codegen_encoder_test.cc
+++ b/pw_protobuf/codegen_encoder_test.cc
@@ -42,47 +42,39 @@
   stream::MemoryWriter writer(encode_buffer);
 
   Pigweed::StreamEncoder pigweed(writer, temp_buffer);
-  pigweed.WriteMagicNumber(73)
-      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
-  pigweed.WriteZiggy(-111)
-      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
-  pigweed.WriteErrorMessage("not a typewriter")
-      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
-  pigweed.WriteBin(Pigweed::Protobuf::Binary::ZERO)
-      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  ASSERT_EQ(OkStatus(), pigweed.WriteMagicNumber(73));
+  ASSERT_EQ(OkStatus(), pigweed.WriteZiggy(-111));
+  ASSERT_EQ(OkStatus(), pigweed.WriteErrorMessage("not a typewriter"));
+  ASSERT_EQ(OkStatus(), pigweed.WriteBin(Pigweed::Protobuf::Binary::ZERO));
 
   {
     Pigweed::Pigweed::StreamEncoder pigweed_pigweed =
         pigweed.GetPigweedEncoder();
-    pigweed_pigweed.WriteStatus(Bool::FILE_NOT_FOUND)
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+    ASSERT_EQ(OkStatus(), pigweed_pigweed.WriteStatus(Bool::FILE_NOT_FOUND));
 
     ASSERT_EQ(pigweed_pigweed.status(), OkStatus());
   }
 
   {
     Proto::StreamEncoder proto = pigweed.GetProtoEncoder();
-    proto.WriteBin(Proto::Binary::OFF)
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
-    proto.WritePigweedPigweedBin(Pigweed::Pigweed::Binary::ZERO)
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
-    proto.WritePigweedProtobufBin(Pigweed::Protobuf::Binary::ZERO)
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+    ASSERT_EQ(OkStatus(), proto.WriteBin(Proto::Binary::OFF));
+    ASSERT_EQ(OkStatus(),
+              proto.WritePigweedPigweedBin(Pigweed::Pigweed::Binary::ZERO));
+    ASSERT_EQ(OkStatus(),
+              proto.WritePigweedProtobufBin(Pigweed::Protobuf::Binary::ZERO));
 
     {
       Pigweed::Protobuf::Compiler::StreamEncoder meta = proto.GetMetaEncoder();
-      meta.WriteFileName("/etc/passwd")
-          .IgnoreError();  // TODO(pwbug/387): Handle Status properly
-      meta.WriteStatus(Pigweed::Protobuf::Compiler::Status::FUBAR)
-          .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+      ASSERT_EQ(OkStatus(), meta.WriteFileName("/etc/passwd"));
+      ASSERT_EQ(OkStatus(),
+                meta.WriteStatus(Pigweed::Protobuf::Compiler::Status::FUBAR));
     }
 
     {
       Pigweed::StreamEncoder nested_pigweed = proto.GetPigweedEncoder();
-      nested_pigweed.WriteErrorMessage("here we go again")
-          .IgnoreError();  // TODO(pwbug/387): Handle Status properly
-      nested_pigweed.WriteMagicNumber(616)
-          .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+      ASSERT_EQ(OkStatus(),
+                nested_pigweed.WriteErrorMessage("here we go again"));
+      ASSERT_EQ(OkStatus(), nested_pigweed.WriteMagicNumber(616));
 
       {
         DeviceInfo::StreamEncoder device_info =
@@ -91,31 +83,26 @@
         {
           KeyValuePair::StreamEncoder attributes =
               device_info.GetAttributesEncoder();
-          attributes.WriteKey("version")
-              .IgnoreError();  // TODO(pwbug/387): Handle Status properly
-          attributes.WriteValue("5.3.1")
-              .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+          ASSERT_EQ(OkStatus(), attributes.WriteKey("version"));
+          ASSERT_EQ(OkStatus(), attributes.WriteValue("5.3.1"));
         }
 
         {
           KeyValuePair::StreamEncoder attributes =
               device_info.GetAttributesEncoder();
-          attributes.WriteKey("chip")
-              .IgnoreError();  // TODO(pwbug/387): Handle Status properly
-          attributes.WriteValue("left-soc")
-              .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+          ASSERT_EQ(OkStatus(), attributes.WriteKey("chip"));
+          ASSERT_EQ(OkStatus(), attributes.WriteValue("left-soc"));
         }
 
-        device_info.WriteStatus(DeviceInfo::DeviceStatus::PANIC)
-            .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+        ASSERT_EQ(OkStatus(),
+                  device_info.WriteStatus(DeviceInfo::DeviceStatus::PANIC));
       }
     }
   }
 
   for (int i = 0; i < 5; ++i) {
     Proto::ID::StreamEncoder id = pigweed.GetIdEncoder();
-    id.WriteId(5 * i * i + 3 * i + 49)
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+    ASSERT_EQ(OkStatus(), id.WriteId(5 * i * i + 3 * i + 49));
   }
 
   // clang-format off
@@ -206,22 +193,18 @@
   std::byte encode_buffer[(Crate::kMaxEncodedSizeBytes + 12) * 4];
 
   Crate::MemoryEncoder biggest_crate(encode_buffer);
-  biggest_crate.WriteName("Huge crate")
-      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  ASSERT_EQ(OkStatus(), biggest_crate.WriteName("Huge crate"));
 
   {
     Crate::StreamEncoder medium_crate = biggest_crate.GetSmallerCratesEncoder();
-    medium_crate.WriteName("Medium crate")
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+    ASSERT_EQ(OkStatus(), medium_crate.WriteName("Medium crate"));
     {
       Crate::StreamEncoder small_crate = medium_crate.GetSmallerCratesEncoder();
-      small_crate.WriteName("Small crate")
-          .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+      ASSERT_EQ(OkStatus(), small_crate.WriteName("Small crate"));
     }
     {
       Crate::StreamEncoder tiny_crate = medium_crate.GetSmallerCratesEncoder();
-      tiny_crate.WriteName("Tiny crate")
-          .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+      ASSERT_EQ(OkStatus(), tiny_crate.WriteName("Tiny crate"));
     }
   }
 
@@ -257,13 +240,11 @@
   stream::MemoryWriter writer(encode_buffer);
   RepeatedTest::StreamEncoder repeated_test(writer, ByteSpan());
   for (int i = 0; i < 4; ++i) {
-    repeated_test.WriteUint32s(i * 16)
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+    ASSERT_EQ(OkStatus(), repeated_test.WriteUint32s(i * 16));
   }
 
   for (int i = 0; i < 4; ++i) {
-    repeated_test.WriteFixed32s(i * 16)
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+    ASSERT_EQ(OkStatus(), repeated_test.WriteFixed32s(i * 16));
   }
 
   // clang-format off
@@ -294,10 +275,8 @@
   stream::MemoryWriter writer(encode_buffer);
   RepeatedTest::StreamEncoder repeated_test(writer, ByteSpan());
   constexpr uint32_t values[] = {0, 16, 32, 48};
-  repeated_test.WriteUint32s(values)
-      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
-  repeated_test.WriteFixed32s(values)
-      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  ASSERT_EQ(OkStatus(), repeated_test.WriteUint32s(values));
+  ASSERT_EQ(OkStatus(), repeated_test.WriteFixed32s(values));
 
   // clang-format off
   constexpr uint8_t expected_proto[] = {
@@ -329,8 +308,7 @@
   stream::MemoryWriter writer(encode_buffer);
   RepeatedTest::StreamEncoder repeated_test(writer, ByteSpan());
   constexpr bool values[] = {true, false, true, true, false};
-  repeated_test.WriteBools(span(values))
-      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  ASSERT_EQ(OkStatus(), repeated_test.WriteBools(span(values)));
 
   // clang-format off
   constexpr uint8_t expected_proto[] = {
@@ -352,10 +330,8 @@
   stream::MemoryWriter writer(encode_buffer);
   RepeatedTest::StreamEncoder repeated_test(writer, ByteSpan());
   const pw::Vector<uint32_t, 4> values = {0, 16, 32, 48};
-  repeated_test.WriteUint32s(values)
-      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
-  repeated_test.WriteFixed32s(values)
-      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  ASSERT_EQ(OkStatus(), repeated_test.WriteUint32s(values));
+  ASSERT_EQ(OkStatus(), repeated_test.WriteFixed32s(values));
 
   // clang-format off
   constexpr uint8_t expected_proto[] = {
@@ -433,8 +409,7 @@
   RepeatedTest::StreamEncoder repeated_test(writer, ByteSpan());
   constexpr const char* strings[] = {"the", "quick", "brown", "fox"};
   for (const char* s : strings) {
-    repeated_test.WriteStrings(s)
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+    ASSERT_EQ(OkStatus(), repeated_test.WriteStrings(s));
   }
 
   constexpr uint8_t expected_proto[] = {
@@ -453,10 +428,8 @@
   RepeatedTest::MemoryEncoder repeated_test(encode_buffer);
   for (int i = 0; i < 3; ++i) {
     auto structs = repeated_test.GetStructsEncoder();
-    structs.WriteOne(i * 1)
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
-    structs.WriteTwo(i * 2)
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+    ASSERT_EQ(OkStatus(), structs.WriteOne(i * 1));
+    ASSERT_EQ(OkStatus(), structs.WriteTwo(i * 2));
   }
 
   // clang-format off
@@ -476,14 +449,13 @@
   std::byte encode_buffer[Foo::kMaxEncodedSizeBytes];
 
   Foo::MemoryEncoder foo(encode_buffer);
-  foo.WriteInteger(3).IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  ASSERT_EQ(OkStatus(), foo.WriteInteger(3));
 
   {
     constexpr std::byte data[] = {
         std::byte(0xde), std::byte(0xad), std::byte(0xbe), std::byte(0xef)};
     Bar::StreamEncoder bar = foo.GetBarEncoder();
-    bar.WriteData(data)
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+    ASSERT_EQ(OkStatus(), bar.WriteData(data));
   }
 
   constexpr uint8_t expected_proto[] = {
@@ -502,18 +474,14 @@
   Period::MemoryEncoder period(encode_buffer);
   {
     imported::Timestamp::StreamEncoder start = period.GetStartEncoder();
-    start.WriteSeconds(1589501793)
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
-    start.WriteNanoseconds(511613110)
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+    ASSERT_EQ(OkStatus(), start.WriteSeconds(1589501793));
+    ASSERT_EQ(OkStatus(), start.WriteNanoseconds(511613110));
   }
 
   {
     imported::Timestamp::StreamEncoder end = period.GetEndEncoder();
-    end.WriteSeconds(1589501841)
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
-    end.WriteNanoseconds(490367432)
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+    ASSERT_EQ(OkStatus(), end.WriteSeconds(1589501841));
+    ASSERT_EQ(OkStatus(), end.WriteNanoseconds(490367432));
   }
 
   EXPECT_EQ(period.status(), OkStatus());
@@ -525,10 +493,8 @@
   std::array<const int64_t, 2> repeated = {0, 1};
   stream::MemoryWriter writer(encode_buffer);
   Packed::StreamEncoder packed(writer, ByteSpan());
-  packed.WriteRep(span<const int64_t>(repeated))
-      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
-  packed.WritePacked("packed")
-      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  ASSERT_EQ(OkStatus(), packed.WriteRep(span<const int64_t>(repeated)));
+  ASSERT_EQ(OkStatus(), packed.WritePacked("packed"));
 
   EXPECT_EQ(packed.status(), OkStatus());
 }
diff --git a/pw_protobuf/decoder_test.cc b/pw_protobuf/decoder_test.cc
index 37a09df..c922836 100644
--- a/pw_protobuf/decoder_test.cc
+++ b/pw_protobuf/decoder_test.cc
@@ -28,28 +28,22 @@
 
     switch (field_number) {
       case 1:
-        decoder.ReadInt32(&test_int32)
-            .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+        EXPECT_EQ(OkStatus(), decoder.ReadInt32(&test_int32));
         break;
       case 2:
-        decoder.ReadSint32(&test_sint32)
-            .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+        EXPECT_EQ(OkStatus(), decoder.ReadSint32(&test_sint32));
         break;
       case 3:
-        decoder.ReadBool(&test_bool)
-            .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+        EXPECT_EQ(OkStatus(), decoder.ReadBool(&test_bool));
         break;
       case 4:
-        decoder.ReadDouble(&test_double)
-            .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+        EXPECT_EQ(OkStatus(), decoder.ReadDouble(&test_double));
         break;
       case 5:
-        decoder.ReadFixed32(&test_fixed32)
-            .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+        EXPECT_EQ(OkStatus(), decoder.ReadFixed32(&test_fixed32));
         break;
       case 6:
-        decoder.ReadString(&str)
-            .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+        EXPECT_EQ(OkStatus(), decoder.ReadString(&str));
         std::memcpy(test_string, str.data(), str.size());
         test_string[str.size()] = '\0';
         break;
diff --git a/pw_protobuf/encoder.cc b/pw_protobuf/encoder.cc
index c7209f2..627baef 100644
--- a/pw_protobuf/encoder.cc
+++ b/pw_protobuf/encoder.cc
@@ -122,7 +122,7 @@
       field_number, WireType::kVarint, varint::EncodedSize(value)));
 
   WriteVarint(FieldKey(field_number, WireType::kVarint))
-      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+      .IgnoreError();  // TODO(b/242598609): Handle Status properly
   return WriteVarint(value);
 }
 
@@ -177,7 +177,7 @@
   PW_TRY(UpdateStatusForWrite(field_number, type, data.size()));
 
   WriteVarint(FieldKey(field_number, type))
-      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+      .IgnoreError();  // TODO(b/242598609): Handle Status properly
   if (Status status = writer_.Write(data); !status.ok()) {
     status_ = status;
   }
@@ -197,9 +197,9 @@
   PW_TRY(UpdateStatusForWrite(
       field_number, WireType::kDelimited, values.size_bytes()));
   WriteVarint(FieldKey(field_number, WireType::kDelimited))
-      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+      .IgnoreError();  // TODO(b/242598609): Handle Status properly
   WriteVarint(values.size_bytes())
-      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+      .IgnoreError();  // TODO(b/242598609): Handle Status properly
 
   for (auto val_start = values.begin(); val_start != values.end();
        val_start += elem_size) {
diff --git a/pw_protobuf/encoder_fuzzer.cc b/pw_protobuf/encoder_fuzzer.cc
index 7f05783..a0e695e 100644
--- a/pw_protobuf/encoder_fuzzer.cc
+++ b/pw_protobuf/encoder_fuzzer.cc
@@ -152,163 +152,163 @@
         encoder
             .WriteUint32(provider.ConsumeIntegral<uint32_t>(),
                          provider.ConsumeIntegral<uint32_t>())
-            .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+            .IgnoreError();  // TODO(b/242598609): Handle Status properly
         break;
       case kPackedUint32:
         encoder
             .WritePackedUint32(provider.ConsumeIntegral<uint32_t>(),
                                ConsumeSpan<uint32_t>(&provider, &u32s))
-            .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+            .IgnoreError();  // TODO(b/242598609): Handle Status properly
         break;
       case kUint64:
         encoder
             .WriteUint64(provider.ConsumeIntegral<uint32_t>(),
                          provider.ConsumeIntegral<uint64_t>())
-            .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+            .IgnoreError();  // TODO(b/242598609): Handle Status properly
         break;
       case kPackedUint64:
         encoder
             .WritePackedUint64(provider.ConsumeIntegral<uint32_t>(),
                                ConsumeSpan<uint64_t>(&provider, &u64s))
-            .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+            .IgnoreError();  // TODO(b/242598609): Handle Status properly
         break;
       case kInt32:
         encoder
             .WriteInt32(provider.ConsumeIntegral<uint32_t>(),
                         provider.ConsumeIntegral<int32_t>())
-            .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+            .IgnoreError();  // TODO(b/242598609): Handle Status properly
         break;
       case kPackedInt32:
         encoder
             .WritePackedInt32(provider.ConsumeIntegral<uint32_t>(),
                               ConsumeSpan<int32_t>(&provider, &s32s))
-            .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+            .IgnoreError();  // TODO(b/242598609): Handle Status properly
         break;
       case kInt64:
         encoder
             .WriteInt64(provider.ConsumeIntegral<uint32_t>(),
                         provider.ConsumeIntegral<int64_t>())
-            .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+            .IgnoreError();  // TODO(b/242598609): Handle Status properly
         break;
       case kPackedInt64:
         encoder
             .WritePackedInt64(provider.ConsumeIntegral<uint32_t>(),
                               ConsumeSpan<int64_t>(&provider, &s64s))
-            .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+            .IgnoreError();  // TODO(b/242598609): Handle Status properly
         break;
       case kSint32:
         encoder
             .WriteSint32(provider.ConsumeIntegral<uint32_t>(),
                          provider.ConsumeIntegral<int32_t>())
-            .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+            .IgnoreError();  // TODO(b/242598609): Handle Status properly
         break;
       case kPackedSint32:
         encoder
             .WritePackedSint32(provider.ConsumeIntegral<uint32_t>(),
                                ConsumeSpan<int32_t>(&provider, &s32s))
-            .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+            .IgnoreError();  // TODO(b/242598609): Handle Status properly
         break;
       case kSint64:
         encoder
             .WriteSint64(provider.ConsumeIntegral<uint32_t>(),
                          provider.ConsumeIntegral<int64_t>())
-            .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+            .IgnoreError();  // TODO(b/242598609): Handle Status properly
         break;
       case kPackedSint64:
         encoder
             .WritePackedSint64(provider.ConsumeIntegral<uint32_t>(),
                                ConsumeSpan<int64_t>(&provider, &s64s))
-            .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+            .IgnoreError();  // TODO(b/242598609): Handle Status properly
         break;
       case kBool:
         encoder
             .WriteBool(provider.ConsumeIntegral<uint32_t>(),
                        provider.ConsumeBool())
-            .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+            .IgnoreError();  // TODO(b/242598609): Handle Status properly
         break;
       case kFixed32:
         encoder
             .WriteFixed32(provider.ConsumeIntegral<uint32_t>(),
                           provider.ConsumeIntegral<uint32_t>())
-            .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+            .IgnoreError();  // TODO(b/242598609): Handle Status properly
         break;
       case kPackedFixed32:
         encoder
             .WritePackedFixed32(provider.ConsumeIntegral<uint32_t>(),
                                 ConsumeSpan<uint32_t>(&provider, &u32s))
-            .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+            .IgnoreError();  // TODO(b/242598609): Handle Status properly
         break;
       case kFixed64:
         encoder
             .WriteFixed64(provider.ConsumeIntegral<uint32_t>(),
                           provider.ConsumeIntegral<uint64_t>())
-            .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+            .IgnoreError();  // TODO(b/242598609): Handle Status properly
         break;
       case kPackedFixed64:
         encoder
             .WritePackedFixed64(provider.ConsumeIntegral<uint32_t>(),
                                 ConsumeSpan<uint64_t>(&provider, &u64s))
-            .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+            .IgnoreError();  // TODO(b/242598609): Handle Status properly
         break;
       case kSfixed32:
         encoder
             .WriteSfixed32(provider.ConsumeIntegral<uint32_t>(),
                            provider.ConsumeIntegral<int32_t>())
-            .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+            .IgnoreError();  // TODO(b/242598609): Handle Status properly
         break;
       case kPackedSfixed32:
         encoder
             .WritePackedSfixed32(provider.ConsumeIntegral<uint32_t>(),
                                  ConsumeSpan<int32_t>(&provider, &s32s))
-            .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+            .IgnoreError();  // TODO(b/242598609): Handle Status properly
         break;
       case kSfixed64:
         encoder
             .WriteSfixed64(provider.ConsumeIntegral<uint32_t>(),
                            provider.ConsumeIntegral<int64_t>())
-            .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+            .IgnoreError();  // TODO(b/242598609): Handle Status properly
         break;
       case kPackedSfixed64:
         encoder
             .WritePackedSfixed64(provider.ConsumeIntegral<uint32_t>(),
                                  ConsumeSpan<int64_t>(&provider, &s64s))
-            .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+            .IgnoreError();  // TODO(b/242598609): Handle Status properly
         break;
       case kFloat:
         encoder
             .WriteFloat(provider.ConsumeIntegral<uint32_t>(),
                         provider.ConsumeFloatingPoint<float>())
-            .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+            .IgnoreError();  // TODO(b/242598609): Handle Status properly
         break;
       case kPackedFloat:
         encoder
             .WritePackedFloat(provider.ConsumeIntegral<uint32_t>(),
                               ConsumeSpan<float>(&provider, &floats))
-            .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+            .IgnoreError();  // TODO(b/242598609): Handle Status properly
         break;
       case kDouble:
         encoder
             .WriteDouble(provider.ConsumeIntegral<uint32_t>(),
                          provider.ConsumeFloatingPoint<double>())
-            .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+            .IgnoreError();  // TODO(b/242598609): Handle Status properly
         break;
       case kPackedDouble:
         encoder
             .WritePackedDouble(provider.ConsumeIntegral<uint32_t>(),
                                ConsumeSpan<double>(&provider, &doubles))
-            .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+            .IgnoreError();  // TODO(b/242598609): Handle Status properly
         break;
       case kBytes:
         encoder
             .WriteBytes(provider.ConsumeIntegral<uint32_t>(),
                         ConsumeBytes(&provider, &bytes))
-            .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+            .IgnoreError();  // TODO(b/242598609): Handle Status properly
         break;
       case kString:
         encoder
             .WriteString(provider.ConsumeIntegral<uint32_t>(),
                          ConsumeString(&provider, &strings))
-            .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+            .IgnoreError();  // TODO(b/242598609): Handle Status properly
         break;
       case kPush:
         // Special "field". The marks the start of a nested message.
diff --git a/pw_protobuf/encoder_test.cc b/pw_protobuf/encoder_test.cc
index 4833814..e6bc2bd 100644
--- a/pw_protobuf/encoder_test.cc
+++ b/pw_protobuf/encoder_test.cc
@@ -261,8 +261,7 @@
   // repeated uint32 values = 1;
   constexpr uint32_t values[] = {0, 50, 100, 150, 200};
   for (int i = 0; i < 5; ++i) {
-    encoder.WriteUint32(1, values[i])
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+    ASSERT_EQ(OkStatus(), encoder.WriteUint32(1, values[i]));
   }
 
   constexpr uint8_t encoded_proto[] = {
@@ -281,8 +280,7 @@
 
   // repeated uint32 values = 1;
   constexpr uint32_t values[] = {0, 50, 100, 150, 200};
-  encoder.WritePackedUint32(1, values)
-      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  ASSERT_EQ(OkStatus(), encoder.WritePackedUint32(1, values));
 
   constexpr uint8_t encoded_proto[] = {
       0x0a, 0x07, 0x00, 0x32, 0x64, 0x96, 0x01, 0xc8, 0x01};
@@ -300,8 +298,7 @@
   MemoryEncoder encoder(encode_buffer);
 
   constexpr uint32_t values[] = {0, 50, 100, 150, 200};
-  encoder.WritePackedUint32(1, values)
-      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  ASSERT_EQ(Status::ResourceExhausted(), encoder.WritePackedUint32(1, values));
 
   EXPECT_EQ(encoder.status(), Status::ResourceExhausted());
 }
@@ -312,8 +309,7 @@
 
   // repeated uint32 values = 1;
   const pw::Vector<uint32_t, 5> values = {0, 50, 100, 150, 200};
-  encoder.WriteRepeatedUint32(1, values)
-      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  ASSERT_EQ(OkStatus(), encoder.WriteRepeatedUint32(1, values));
 
   constexpr uint8_t encoded_proto[] = {
       0x0a, 0x07, 0x00, 0x32, 0x64, 0x96, 0x01, 0xc8, 0x01};
@@ -331,8 +327,8 @@
   MemoryEncoder encoder(encode_buffer);
 
   const pw::Vector<uint32_t, 5> values = {0, 50, 100, 150, 200};
-  encoder.WriteRepeatedUint32(1, values)
-      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  ASSERT_EQ(Status::ResourceExhausted(),
+            encoder.WriteRepeatedUint32(1, values));
 
   EXPECT_EQ(encoder.status(), Status::ResourceExhausted());
 }
@@ -343,8 +339,7 @@
 
   // repeated bool values = 1;
   constexpr bool values[] = {true, false, true, true, false};
-  encoder.WritePackedBool(1, values)
-      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  ASSERT_EQ(OkStatus(), encoder.WritePackedBool(1, values));
 
   constexpr uint8_t encoded_proto[] = {
       0x0a, 0x05, 0x01, 0x00, 0x01, 0x01, 0x00};
@@ -363,13 +358,11 @@
 
   // repeated fixed32 values = 1;
   constexpr uint32_t values[] = {0, 50, 100, 150, 200};
-  encoder.WritePackedFixed32(1, values)
-      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  ASSERT_EQ(OkStatus(), encoder.WritePackedFixed32(1, values));
 
   // repeated fixed64 values64 = 2;
   constexpr uint64_t values64[] = {0x0102030405060708};
-  encoder.WritePackedFixed64(2, values64)
-      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  ASSERT_EQ(OkStatus(), encoder.WritePackedFixed64(2, values64));
 
   constexpr uint8_t encoded_proto[] = {
       0x0a, 0x14, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x64,
@@ -389,13 +382,11 @@
 
   // repeated fixed32 values = 1;
   const pw::Vector<uint32_t, 5> values = {0, 50, 100, 150, 200};
-  encoder.WriteRepeatedFixed32(1, values)
-      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  ASSERT_EQ(OkStatus(), encoder.WriteRepeatedFixed32(1, values));
 
   // repeated fixed64 values64 = 2;
   const pw::Vector<uint64_t, 1> values64 = {0x0102030405060708};
-  encoder.WriteRepeatedFixed64(2, values64)
-      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  ASSERT_EQ(OkStatus(), encoder.WriteRepeatedFixed64(2, values64));
 
   constexpr uint8_t encoded_proto[] = {
       0x0a, 0x14, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x64,
@@ -415,8 +406,7 @@
 
   // repeated sint32 values = 1;
   constexpr int32_t values[] = {-100, -25, -1, 0, 1, 25, 100};
-  encoder.WritePackedSint32(1, values)
-      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  ASSERT_EQ(OkStatus(), encoder.WritePackedSint32(1, values));
 
   constexpr uint8_t encoded_proto[] = {
       0x0a, 0x09, 0xc7, 0x01, 0x31, 0x01, 0x00, 0x02, 0x32, 0xc8, 0x01};
@@ -434,8 +424,7 @@
 
   // repeated sint32 values = 1;
   const pw::Vector<int32_t, 7> values = {-100, -25, -1, 0, 1, 25, 100};
-  encoder.WriteRepeatedSint32(1, values)
-      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  ASSERT_EQ(OkStatus(), encoder.WriteRepeatedSint32(1, values));
 
   constexpr uint8_t encoded_proto[] = {
       0x0a, 0x09, 0xc7, 0x01, 0x31, 0x01, 0x00, 0x02, 0x32, 0xc8, 0x01};
diff --git a/pw_protobuf/find_test.cc b/pw_protobuf/find_test.cc
index b1092e6..bacac86 100644
--- a/pw_protobuf/find_test.cc
+++ b/pw_protobuf/find_test.cc
@@ -45,8 +45,7 @@
   FindDecodeHandler finder(3);
 
   decoder.set_handler(&finder);
-  decoder.Decode(as_bytes(span(encoded_proto)))
-      .IgnoreError(); // TODO(pwbug/387): Handle Status properly
+  ASSERT_EQ(Status::Cancelled(), decoder.Decode(as_bytes(span(encoded_proto))));
 
   EXPECT_TRUE(finder.found());
   EXPECT_TRUE(decoder.cancelled());
@@ -57,8 +56,7 @@
   FindDecodeHandler finder(8);
 
   decoder.set_handler(&finder);
-  decoder.Decode(as_bytes(span(encoded_proto)))
-      .IgnoreError(); // TODO(pwbug/387): Handle Status properly
+  ASSERT_EQ(OkStatus(), decoder.Decode(as_bytes(span(encoded_proto))));
 
   EXPECT_FALSE(finder.found());
   EXPECT_FALSE(decoder.cancelled());
@@ -70,8 +68,7 @@
   FindDecodeHandler finder(7, &nested_finder);
 
   decoder.set_handler(&finder);
-  decoder.Decode(as_bytes(span(encoded_proto)))
-      .IgnoreError(); // TODO(pwbug/387): Handle Status properly
+  ASSERT_EQ(Status::Cancelled(), decoder.Decode(as_bytes(span(encoded_proto))));
 
   EXPECT_TRUE(finder.found());
   EXPECT_TRUE(nested_finder.found());
@@ -84,8 +81,7 @@
   FindDecodeHandler finder(7, &nested_finder);
 
   decoder.set_handler(&finder);
-  decoder.Decode(as_bytes(span(encoded_proto)))
-      .IgnoreError(); // TODO(pwbug/387): Handle Status properly
+  ASSERT_EQ(OkStatus(), decoder.Decode(as_bytes(span(encoded_proto))));
 
   EXPECT_TRUE(finder.found());
   EXPECT_FALSE(nested_finder.found());
diff --git a/pw_protobuf/public/pw_protobuf/encoder.h b/pw_protobuf/public/pw_protobuf/encoder.h
index 2f8701f..119bfd6 100644
--- a/pw_protobuf/public/pw_protobuf/encoder.h
+++ b/pw_protobuf/public/pw_protobuf/encoder.h
@@ -719,16 +719,16 @@
     }
 
     WriteVarint(FieldKey(field_number, WireType::kDelimited))
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+        .IgnoreError();  // TODO(b/242598609): Handle Status properly
     WriteVarint(payload_size)
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+        .IgnoreError();  // TODO(b/242598609): Handle Status properly
     for (T value : values) {
       if (encode_type == VarintType::kZigZag) {
         WriteZigzagVarint(static_cast<std::make_signed_t<T>>(value))
-            .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+            .IgnoreError();  // TODO(b/242598609): Handle Status properly
       } else {
         WriteVarint(value)
-            .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+            .IgnoreError();  // TODO(b/242598609): Handle Status properly
       }
     }
 
diff --git a/pw_ring_buffer/prefixed_entry_ring_buffer.cc b/pw_ring_buffer/prefixed_entry_ring_buffer.cc
index e2f7f7b..93f70f7 100644
--- a/pw_ring_buffer/prefixed_entry_ring_buffer.cc
+++ b/pw_ring_buffer/prefixed_entry_ring_buffer.cc
@@ -227,7 +227,7 @@
   for (Reader& reader : readers_) {
     if (reader.entry_count_ == entry_count) {
       reader.PopFront()
-          .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+          .IgnoreError();  // TODO(b/242598609): Handle Status properly
     }
   }
 }
diff --git a/pw_ring_buffer/prefixed_entry_ring_buffer_test.cc b/pw_ring_buffer/prefixed_entry_ring_buffer_test.cc
index 891cb6f..88ed331 100644
--- a/pw_ring_buffer/prefixed_entry_ring_buffer_test.cc
+++ b/pw_ring_buffer/prefixed_entry_ring_buffer_test.cc
@@ -331,8 +331,7 @@
       // wrapped.
       for (i = 0; i < (kTotalEntryCount * (main_loop_count % 64u)); i++) {
         memset(single_entry_buffer, i, sizeof(single_entry_buffer));
-        ring.PushBack(single_entry_buffer)
-            .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+        ASSERT_EQ(OkStatus(), ring.PushBack(single_entry_buffer));
       }
     }
 
@@ -350,8 +349,7 @@
       }
 
       // The ring buffer internally pushes the varint size byte.
-      ring.PushBack(single_entry_buffer)
-          .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+      ASSERT_EQ(OkStatus(), ring.PushBack(single_entry_buffer));
     }
 
     // Check values before doing the dering.
diff --git a/pw_ring_buffer/public/pw_ring_buffer/prefixed_entry_ring_buffer.h b/pw_ring_buffer/public/pw_ring_buffer/prefixed_entry_ring_buffer.h
index 654bd57..e2f2adb 100644
--- a/pw_ring_buffer/public/pw_ring_buffer/prefixed_entry_ring_buffer.h
+++ b/pw_ring_buffer/public/pw_ring_buffer/prefixed_entry_ring_buffer.h
@@ -510,7 +510,7 @@
   PrefixedEntryRingBuffer(bool user_preamble = false)
       : PrefixedEntryRingBufferMulti(user_preamble) {
     AttachReader(*this)
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+        .IgnoreError();  // TODO(b/242598609): Handle Status properly
   }
 };
 
diff --git a/pw_ring_buffer/size_report/ring_buffer_multi.cc b/pw_ring_buffer/size_report/ring_buffer_multi.cc
index 5570469..c4e9232 100644
--- a/pw_ring_buffer/size_report/ring_buffer_multi.cc
+++ b/pw_ring_buffer/size_report/ring_buffer_multi.cc
@@ -36,7 +36,7 @@
   pw::ring_buffer::PrefixedEntryRingBufferMulti::Reader readers[kReaderCount];
   for (auto& reader : readers) {
     ring.AttachReader(reader)
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+        .IgnoreError();  // TODO(b/242598609): Handle Status properly
   }
 
   // Push entries until the buffer is full.
@@ -94,7 +94,7 @@
 
   for (auto& reader : readers) {
     ring.DetachReader(reader)
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+        .IgnoreError();  // TODO(b/242598609): Handle Status properly
   }
   ring.Clear();
   return 0;
diff --git a/pw_rpc/benchmark.cc b/pw_rpc/benchmark.cc
index 1ecdb9a..dfa11b6 100644
--- a/pw_rpc/benchmark.cc
+++ b/pw_rpc/benchmark.cc
@@ -47,7 +47,7 @@
     Status status = reader_writer_.Write(request);
     if (!status.ok()) {
       reader_writer_.Finish(status)
-          .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+          .IgnoreError();  // TODO(b/242598609): Handle Status properly
     }
   });
 }
diff --git a/pw_rpc/raw/method_union_test.cc b/pw_rpc/raw/method_union_test.cc
index 110ca5f..b57fba9 100644
--- a/pw_rpc/raw/method_union_test.cc
+++ b/pw_rpc/raw/method_union_test.cc
@@ -83,12 +83,10 @@
 
       switch (field) {
         case TestRequest::Fields::INTEGER:
-          decoder.ReadInt64(&last_request.integer)
-              .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+          ASSERT_EQ(OkStatus(), decoder.ReadInt64(&last_request.integer));
           break;
         case TestRequest::Fields::STATUS_CODE:
-          decoder.ReadUint32(&last_request.status_code)
-              .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+          ASSERT_EQ(OkStatus(), decoder.ReadUint32(&last_request.status_code));
           break;
       }
     }
@@ -99,10 +97,8 @@
   std::byte buffer[16];
 
   TestRequest::MemoryEncoder test_request(buffer);
-  test_request.WriteInteger(456)
-      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
-  test_request.WriteStatusCode(7)
-      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  ASSERT_EQ(OkStatus(), test_request.WriteInteger(456));
+  ASSERT_EQ(OkStatus(), test_request.WriteStatusCode(7));
 
   const Method& method =
       std::get<1>(FakeGeneratedServiceImpl::kMethods).method();
@@ -127,10 +123,8 @@
   std::byte buffer[16];
 
   TestRequest::MemoryEncoder test_request(buffer);
-  test_request.WriteInteger(777)
-      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
-  test_request.WriteStatusCode(2)
-      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  ASSERT_EQ(OkStatus(), test_request.WriteInteger(777));
+  ASSERT_EQ(OkStatus(), test_request.WriteStatusCode(2));
 
   const Method& method =
       std::get<2>(FakeGeneratedServiceImpl::kMethods).method();
diff --git a/pw_rpc/size_report/base.cc b/pw_rpc/size_report/base.cc
index 76043ab..5248c80 100644
--- a/pw_rpc/size_report/base.cc
+++ b/pw_rpc/size_report/base.cc
@@ -28,9 +28,9 @@
 
   std::byte packet_buffer[128];
   pw::sys_io::ReadBytes(packet_buffer)
-      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+      .IgnoreError();  // TODO(b/242598609): Handle Status properly
   pw::sys_io::WriteBytes(packet_buffer)
-      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+      .IgnoreError();  // TODO(b/242598609): Handle Status properly
 
   return static_cast<int>(packet_buffer[92]);
 }
diff --git a/pw_rpc/size_report/server_only.cc b/pw_rpc/size_report/server_only.cc
index 007fbb6..97c91f9 100644
--- a/pw_rpc/size_report/server_only.cc
+++ b/pw_rpc/size_report/server_only.cc
@@ -46,12 +46,12 @@
 
   std::byte packet_buffer[128];
   pw::sys_io::ReadBytes(packet_buffer)
-      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+      .IgnoreError();  // TODO(b/242598609): Handle Status properly
   pw::sys_io::WriteBytes(packet_buffer)
-      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+      .IgnoreError();  // TODO(b/242598609): Handle Status properly
 
   my_product::server.ProcessPacket(packet_buffer, my_product::output)
-      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+      .IgnoreError();  // TODO(b/242598609): Handle Status properly
 
   return static_cast<int>(packet_buffer[92]);
 }
diff --git a/pw_snapshot/cpp_compile_test.cc b/pw_snapshot/cpp_compile_test.cc
index 1332ad7..43d35fd 100644
--- a/pw_snapshot/cpp_compile_test.cc
+++ b/pw_snapshot/cpp_compile_test.cc
@@ -30,15 +30,15 @@
   {
     Metadata::StreamEncoder metadata_encoder =
         snapshot_encoder.GetMetadataEncoder();
-    metadata_encoder
-        .WriteReason(as_bytes(span("It just died, I didn't do anything")))
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
-    metadata_encoder.WriteFatal(true)
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
-    metadata_encoder.WriteProjectName(as_bytes(span("smart-shoe")))
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
-    metadata_encoder.WriteDeviceName(as_bytes(span("smart-shoe-p1")))
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+    ASSERT_EQ(OkStatus(),
+              metadata_encoder.WriteReason(
+                  as_bytes(span("It just died, I didn't do anything"))));
+    ASSERT_EQ(OkStatus(), metadata_encoder.WriteFatal(true));
+    ASSERT_EQ(OkStatus(),
+              metadata_encoder.WriteProjectName(as_bytes(span("smart-shoe"))));
+    ASSERT_EQ(
+        OkStatus(),
+        metadata_encoder.WriteDeviceName(as_bytes(span("smart-shoe-p1"))));
   }
   ASSERT_TRUE(snapshot_encoder.status().ok());
 }
diff --git a/pw_spi/public/pw_spi/device.h b/pw_spi/public/pw_spi/device.h
index d6a2cf7..3701155 100644
--- a/pw_spi/public/pw_spi/device.h
+++ b/pw_spi/public/pw_spi/device.h
@@ -93,7 +93,7 @@
           (behavior_ == ChipSelectBehavior::kPerTransaction) &&
           (!first_write_read_)) {
         selector_->Deactivate()
-            .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+            .IgnoreError();  // TODO(b/242598609): Handle Status properly
       }
     }
 
diff --git a/pw_string/size_report/format_many_without_error_handling.cc b/pw_string/size_report/format_many_without_error_handling.cc
index f38adac..fc46002 100644
--- a/pw_string/size_report/format_many_without_error_handling.cc
+++ b/pw_string/size_report/format_many_without_error_handling.cc
@@ -28,7 +28,7 @@
 
 #define FORMAT_CASE(...)                  \
   pw::string::Format(buffer, __VA_ARGS__) \
-      .IgnoreError()  // TODO(pwbug/387): Handle Status properly
+      .IgnoreError()  // TODO(b/242598609): Handle Status properly
 
 #else  // std::snprintf
 
diff --git a/pw_trace/example/sample_app.cc b/pw_trace/example/sample_app.cc
index 49eff59..016f778 100644
--- a/pw_trace/example/sample_app.cc
+++ b/pw_trace/example/sample_app.cc
@@ -79,7 +79,7 @@
     pw::span<std::byte> buf_span = pw::span<std::byte>(
         reinterpret_cast<std::byte*>(jobs_buffer_), sizeof(jobs_buffer_));
     jobs_.SetBuffer(buf_span)
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+        .IgnoreError();  // TODO(b/242598609): Handle Status properly
   }
   const char* Name() const override { return "Processing Task"; }
   bool ShouldRun() override { return jobs_.EntryCount() > 0; }
@@ -92,8 +92,9 @@
 
     // Get the next job from the queue.
     jobs_.PeekFront(job_bytes.bytes, &bytes_read)
-        .IgnoreError();              // TODO(pwbug/387): Handle Status properly
-    jobs_.PopFront().IgnoreError();  // TODO(pwbug/387): Handle Status properly
+        .IgnoreError();  // TODO(b/242598609): Handle Status properly
+    jobs_.PopFront()
+        .IgnoreError();  // TODO(b/242598609): Handle Status properly
     Job& job = job_bytes.job;
 
     // Process the job
@@ -138,7 +139,7 @@
   void AddJobInternal(uint32_t job_id, uint8_t value) {
     JobBytes job{.job = {.job_id = job_id, .value = value}};
     jobs_.PushBack(job.bytes)
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+        .IgnoreError();  // TODO(b/242598609): Handle Status properly
   }
 } processing_task;
 
diff --git a/pw_trace_tokenized/example/filter.cc b/pw_trace_tokenized/example/filter.cc
index 6d68fb9..f76f64c 100644
--- a/pw_trace_tokenized/example/filter.cc
+++ b/pw_trace_tokenized/example/filter.cc
@@ -57,7 +57,7 @@
   // Register filter callback
   pw::trace::Callbacks::Instance()
       .RegisterEventCallback(TraceEventCallback)
-      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+      .IgnoreError();  // TODO(b/242598609): Handle Status properly
 
   PW_TRACE_SET_ENABLED(true);  // Start with tracing enabled
 
diff --git a/pw_trace_tokenized/example/public/pw_trace_tokenized/example/trace_to_file.h b/pw_trace_tokenized/example/public/pw_trace_tokenized/example/trace_to_file.h
index 7527143..6b3a6f6 100644
--- a/pw_trace_tokenized/example/public/pw_trace_tokenized/example/trace_to_file.h
+++ b/pw_trace_tokenized/example/public/pw_trace_tokenized/example/trace_to_file.h
@@ -35,14 +35,14 @@
                       TraceSinkEndBlock,
                       &out_,
                       &sink_handle_)
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+        .IgnoreError();  // TODO(b/242598609): Handle Status properly
     out_.open(file_name, std::ios::out | std::ios::binary);
   }
 
   ~TraceToFile() {
     Callbacks::Instance()
         .UnregisterSink(sink_handle_)
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+        .IgnoreError();  // TODO(b/242598609): Handle Status properly
     out_.close();
   }
 
diff --git a/pw_trace_tokenized/example/trigger.cc b/pw_trace_tokenized/example/trigger.cc
index 1995aff..7f84db4 100644
--- a/pw_trace_tokenized/example/trigger.cc
+++ b/pw_trace_tokenized/example/trigger.cc
@@ -80,7 +80,7 @@
   pw::trace::Callbacks::Instance()
       .RegisterEventCallback(TraceEventCallback,
                              pw::trace::CallbacksImpl::kCallOnEveryEvent)
-      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+      .IgnoreError();  // TODO(b/242598609): Handle Status properly
 
   // Ensure tracing is off at start, the trigger will turn it on.
   PW_TRACE_SET_ENABLED(false);
diff --git a/pw_trace_tokenized/public/pw_trace_tokenized/trace_callback.h b/pw_trace_tokenized/public/pw_trace_tokenized/trace_callback.h
index 5dc1cbe..f3d460a 100644
--- a/pw_trace_tokenized/public/pw_trace_tokenized/trace_callback.h
+++ b/pw_trace_tokenized/public/pw_trace_tokenized/trace_callback.h
@@ -212,7 +212,7 @@
       void* user_data = nullptr) {
     Callbacks::Instance()
         .RegisterEventCallback(event_callback, called_on_every_event, user_data)
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+        .IgnoreError();  // TODO(b/242598609): Handle Status properly
   }
   RegisterCallbackWhenCreated(CallbacksImpl::SinkStartBlock sink_start,
                               CallbacksImpl::SinkAddBytes sink_add_bytes,
@@ -220,7 +220,7 @@
                               void* user_data = nullptr) {
     Callbacks::Instance()
         .RegisterSink(sink_start, sink_add_bytes, sink_end, user_data)
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+        .IgnoreError();  // TODO(b/242598609): Handle Status properly
   }
 };
 
diff --git a/pw_trace_tokenized/trace.cc b/pw_trace_tokenized/trace.cc
index 4eda181..693c67f 100644
--- a/pw_trace_tokenized/trace.cc
+++ b/pw_trace_tokenized/trace.cc
@@ -229,7 +229,7 @@
 pw::Status CallbacksImpl::UnregisterAllSinks() {
   for (size_t sink_idx = 0; sink_idx < PW_TRACE_CONFIG_MAX_SINKS; sink_idx++) {
     UnregisterSink(sink_idx)
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+        .IgnoreError();  // TODO(b/242598609): Handle Status properly
   }
   return PW_STATUS_OK;
 }
@@ -282,7 +282,7 @@
 pw::Status CallbacksImpl::UnregisterAllEventCallbacks() {
   for (size_t i = 0; i < PW_TRACE_CONFIG_MAX_EVENT_CALLBACKS; i++) {
     UnregisterEventCallback(i)
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+        .IgnoreError();  // TODO(b/242598609): Handle Status properly
   }
   return PW_STATUS_OK;
 }
diff --git a/pw_trace_tokenized/trace_buffer.cc b/pw_trace_tokenized/trace_buffer.cc
index 23dffe0..b1de8e7 100644
--- a/pw_trace_tokenized/trace_buffer.cc
+++ b/pw_trace_tokenized/trace_buffer.cc
@@ -27,11 +27,11 @@
  public:
   TraceBuffer() {
     ring_buffer_.SetBuffer(raw_buffer_)
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+        .IgnoreError();  // TODO(b/242598609): Handle Status properly
     Callbacks::Instance()
         .RegisterSink(
             TraceSinkStartBlock, TraceSinkAddBytes, TraceSinkEndBlock, this)
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+        .IgnoreError();  // TODO(b/242598609): Handle Status properly
   }
 
   static void TraceSinkStartBlock(void* user_data, size_t size) {
@@ -64,7 +64,7 @@
     buffer->ring_buffer_
         .PushBack(span<const std::byte>(&buffer->current_block_[0],
                                         buffer->block_size_))
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+        .IgnoreError();  // TODO(b/242598609): Handle Status properly
   }
 
   pw::ring_buffer::PrefixedEntryRingBuffer& RingBuffer() {
@@ -73,7 +73,7 @@
 
   ConstByteSpan DeringAndViewRawBuffer() {
     ring_buffer_.Dering()
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+        .IgnoreError();  // TODO(b/242598609): Handle Status properly
     return ByteSpan(raw_buffer_, ring_buffer_.TotalUsedBytes());
   }
 
diff --git a/pw_trace_tokenized/trace_buffer_log.cc b/pw_trace_tokenized/trace_buffer_log.cc
index b7fae67..8a58cc0 100644
--- a/pw_trace_tokenized/trace_buffer_log.cc
+++ b/pw_trace_tokenized/trace_buffer_log.cc
@@ -55,7 +55,7 @@
   while (trace_buffer->PeekFront(span(entry_buffer).subspan(1), &bytes_read) !=
          pw::Status::OutOfRange()) {
     trace_buffer->PopFront()
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+        .IgnoreError();  // TODO(b/242598609): Handle Status properly
     entry_buffer[0] = static_cast<std::byte>(bytes_read);
     // The entry buffer is formatted as (size, entry) with an extra byte as
     // a header to the entry. The calcuation of bytes_read + 1 represents
diff --git a/pw_trace_tokenized/trace_buffer_log_test.cc b/pw_trace_tokenized/trace_buffer_log_test.cc
index 328706c..4f89fcf 100644
--- a/pw_trace_tokenized/trace_buffer_log_test.cc
+++ b/pw_trace_tokenized/trace_buffer_log_test.cc
@@ -19,6 +19,9 @@
 #include "gtest/gtest.h"
 #include "pw_trace/trace.h"
 
+namespace pw::trace {
+namespace {
+
 TEST(TokenizedTrace, DumpSmallBuffer) {
   // TODO(b/235283406): This test only verifies that the dump function does not
   // crash, and requires manual inspection to confirm that the log output is
@@ -27,8 +30,7 @@
   PW_TRACE_SET_ENABLED(true);
   PW_TRACE_INSTANT("test1");
   PW_TRACE_INSTANT("test2");
-  pw::trace::DumpTraceBufferToLog()
-      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  ASSERT_EQ(OkStatus(), pw::trace::DumpTraceBufferToLog());
 }
 
 TEST(TokenizedTrace, DumpLargeBuffer) {
@@ -40,6 +42,8 @@
   for (int i = 0; i < 100; i++) {
     PW_TRACE_INSTANT("test");
   }
-  pw::trace::DumpTraceBufferToLog()
-      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  ASSERT_EQ(OkStatus(), pw::trace::DumpTraceBufferToLog());
 }
+
+}  // namespace
+}  // namespace pw::trace
diff --git a/pw_trace_tokenized/trace_rpc_service_nanopb.cc b/pw_trace_tokenized/trace_rpc_service_nanopb.cc
index 8398f79..38e8d82 100644
--- a/pw_trace_tokenized/trace_rpc_service_nanopb.cc
+++ b/pw_trace_tokenized/trace_rpc_service_nanopb.cc
@@ -45,7 +45,7 @@
   while (trace_buffer->PeekFront(as_writable_bytes(span(buffer.data.bytes)),
                                  &size) != pw::Status::OutOfRange()) {
     trace_buffer->PopFront()
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+        .IgnoreError();  // TODO(b/242598609): Handle Status properly
     buffer.data.size = size;
     pw::Status status = writer.Write(buffer);
     if (!status.ok()) {
@@ -54,6 +54,6 @@
       break;
     }
   }
-  writer.Finish().IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  writer.Finish().IgnoreError();  // TODO(b/242598609): Handle Status properly
 }
 }  // namespace pw::trace
diff --git a/pw_trace_tokenized/trace_test.cc b/pw_trace_tokenized/trace_test.cc
index d2dd316..de03b3d 100644
--- a/pw_trace_tokenized/trace_test.cc
+++ b/pw_trace_tokenized/trace_test.cc
@@ -56,27 +56,25 @@
 
   TraceTestInterface() {
     PW_TRACE_SET_ENABLED(true);
-    pw::trace::Callbacks::Instance()
-        .RegisterSink(TraceSinkStartBlock,
-                      TraceSinkAddBytes,
-                      TraceSinkEndBlock,
-                      this,
-                      &sink_handle_)
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
-    pw::trace::Callbacks::Instance()
-        .RegisterEventCallback(TraceEventCallback,
-                               pw::trace::CallbacksImpl::kCallOnlyWhenEnabled,
-                               this,
-                               &event_callback_handle_)
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+    EXPECT_EQ(pw::OkStatus(),
+              pw::trace::Callbacks::Instance().RegisterSink(TraceSinkStartBlock,
+                                                            TraceSinkAddBytes,
+                                                            TraceSinkEndBlock,
+                                                            this,
+                                                            &sink_handle_));
+    EXPECT_EQ(pw::OkStatus(),
+              pw::trace::Callbacks::Instance().RegisterEventCallback(
+                  TraceEventCallback,
+                  pw::trace::CallbacksImpl::kCallOnlyWhenEnabled,
+                  this,
+                  &event_callback_handle_));
   }
   ~TraceTestInterface() {
-    pw::trace::Callbacks::Instance()
-        .UnregisterSink(sink_handle_)
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
-    pw::trace::Callbacks::Instance()
-        .UnregisterEventCallback(event_callback_handle_)
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+    EXPECT_EQ(pw::OkStatus(),
+              pw::trace::Callbacks::Instance().UnregisterSink(sink_handle_));
+    EXPECT_EQ(pw::OkStatus(),
+              pw::trace::Callbacks::Instance().UnregisterEventCallback(
+                  event_callback_handle_));
   }
   // ActionOnEvent will perform a specific action within the callback when an
   // event matches one of the characteristics of event_match_.
@@ -574,8 +572,7 @@
   constexpr size_t kQueueSize = 5;
   pw::trace::internal::TraceQueue<kQueueSize> queue;
   constexpr size_t kTestNum = 1;
-  queue.TryPushBack(QUEUE_TESTS_ARGS(kTestNum))
-      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  ASSERT_EQ(pw::OkStatus(), queue.TryPushBack(QUEUE_TESTS_ARGS(kTestNum)));
   EXPECT_FALSE(queue.IsEmpty());
   EXPECT_FALSE(queue.IsFull());
   EXPECT_TRUE(QUEUE_CHECK_RESULT(kQueueSize, queue.PeekFront(), kTestNum));
diff --git a/pw_unit_test/public/pw_unit_test/unit_test_service.h b/pw_unit_test/public/pw_unit_test/unit_test_service.h
index 80be9f3..7886601 100644
--- a/pw_unit_test/public/pw_unit_test/unit_test_service.h
+++ b/pw_unit_test/public/pw_unit_test/unit_test_service.h
@@ -41,7 +41,7 @@
     event_writer(event);
     if (event.status().ok()) {
       writer_.Write(event)
-          .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+          .IgnoreError();  // TODO(b/242598609): Handle Status properly
     }
   }
 
diff --git a/pw_unit_test/unit_test_service.cc b/pw_unit_test/unit_test_service.cc
index ef51cde..79ed49b 100644
--- a/pw_unit_test/unit_test_service.cc
+++ b/pw_unit_test/unit_test_service.cc
@@ -37,7 +37,7 @@
     switch (static_cast<TestRunRequest::Fields>(decoder.FieldNumber())) {
       case TestRunRequest::Fields::REPORT_PASSED_EXPECTATIONS:
         decoder.ReadBool(&verbose_)
-            .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+            .IgnoreError();  // TODO(b/242598609): Handle Status properly
         break;
 
       case TestRunRequest::Fields::TEST_SUITE: {
@@ -52,7 +52,7 @@
           PW_LOG_ERROR("Maximum of %u test suite filters supported",
                        static_cast<unsigned>(suites_to_run.max_size()));
           writer_.Finish(Status::InvalidArgument())
-              .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+              .IgnoreError();  // TODO(b/242598609): Handle Status properly
           return;
         }
 
@@ -63,7 +63,7 @@
 
   if (status != Status::OutOfRange()) {
     writer_.Finish(status)
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+        .IgnoreError();  // TODO(b/242598609): Handle Status properly
     return;
   }
 
@@ -71,7 +71,7 @@
   handler_.ExecuteTests(suites_to_run);
   PW_LOG_INFO("Unit test run complete");
 
-  writer_.Finish().IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  writer_.Finish().IgnoreError();  // TODO(b/242598609): Handle Status properly
 }
 
 void UnitTestService::WriteTestRunStart() {
@@ -84,13 +84,13 @@
   WriteEvent([&](Event::StreamEncoder& event) {
     TestRunEnd::StreamEncoder test_run_end = event.GetTestRunEndEncoder();
     test_run_end.WritePassed(summary.passed_tests)
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+        .IgnoreError();  // TODO(b/242598609): Handle Status properly
     test_run_end.WriteFailed(summary.failed_tests)
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+        .IgnoreError();  // TODO(b/242598609): Handle Status properly
     test_run_end.WriteSkipped(summary.skipped_tests)
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+        .IgnoreError();  // TODO(b/242598609): Handle Status properly
     test_run_end.WriteDisabled(summary.disabled_tests)
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+        .IgnoreError();  // TODO(b/242598609): Handle Status properly
   });
 }
 
@@ -99,18 +99,18 @@
     TestCaseDescriptor::StreamEncoder descriptor =
         event.GetTestCaseStartEncoder();
     descriptor.WriteSuiteName(test_case.suite_name)
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+        .IgnoreError();  // TODO(b/242598609): Handle Status properly
     descriptor.WriteTestName(test_case.test_name)
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+        .IgnoreError();  // TODO(b/242598609): Handle Status properly
     descriptor.WriteFileName(test_case.file_name)
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+        .IgnoreError();  // TODO(b/242598609): Handle Status properly
   });
 }
 
 void UnitTestService::WriteTestCaseEnd(TestResult result) {
   WriteEvent([&](Event::StreamEncoder& event) {
     event.WriteTestCaseEnd(static_cast<TestCaseResult>(result))
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+        .IgnoreError();  // TODO(b/242598609): Handle Status properly
   });
 }
 
@@ -119,11 +119,11 @@
     TestCaseDescriptor::StreamEncoder descriptor =
         event.GetTestCaseDisabledEncoder();
     descriptor.WriteSuiteName(test_case.suite_name)
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+        .IgnoreError();  // TODO(b/242598609): Handle Status properly
     descriptor.WriteTestName(test_case.test_name)
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+        .IgnoreError();  // TODO(b/242598609): Handle Status properly
     descriptor.WriteFileName(test_case.file_name)
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+        .IgnoreError();  // TODO(b/242598609): Handle Status properly
   });
 }
 
@@ -137,14 +137,14 @@
     TestCaseExpectation::StreamEncoder test_case_expectation =
         event.GetTestCaseExpectationEncoder();
     test_case_expectation.WriteExpression(expectation.expression)
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+        .IgnoreError();  // TODO(b/242598609): Handle Status properly
     test_case_expectation
         .WriteEvaluatedExpression(expectation.evaluated_expression)
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+        .IgnoreError();  // TODO(b/242598609): Handle Status properly
     test_case_expectation.WriteLineNumber(expectation.line_number)
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+        .IgnoreError();  // TODO(b/242598609): Handle Status properly
     test_case_expectation.WriteSuccess(expectation.success)
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+        .IgnoreError();  // TODO(b/242598609): Handle Status properly
   });
 }
 
diff --git a/pw_work_queue/work_queue_test.cc b/pw_work_queue/work_queue_test.cc
index 6b793e0..ce349d7 100644
--- a/pw_work_queue/work_queue_test.cc
+++ b/pw_work_queue/work_queue_test.cc
@@ -40,21 +40,16 @@
 
   for (int i = 0; i < kPingPongs; ++i) {
     // Ping: throw work at the queue that will increment our counter.
-    work_queue
-        .PushWork([&context] {
-          context.counter++;
-          PW_LOG_INFO("Send pong...");
-          context.worker_ping.release();
-        })
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+    EXPECT_EQ(OkStatus(), work_queue.PushWork([&context] {
+      context.counter++;
+      PW_LOG_INFO("Send pong...");
+      context.worker_ping.release();
+    }));
 
     // Throw a distraction in the queue.
-    work_queue
-        .PushWork([] {
-          PW_LOG_INFO(
-              "I'm a random task in the work queue; nothing to see here!");
-        })
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+    EXPECT_EQ(OkStatus(), work_queue.PushWork([] {
+      PW_LOG_INFO("I'm a random task in the work queue; nothing to see here!");
+    }));
 
     // Pong: wait for the callback to notify us from the worker thread.
     context.worker_ping.acquire();
@@ -84,34 +79,30 @@
   // Run a bunch of work items in the queue.
   for (int i = 0; i < kPingPongs; ++i) {
     // Other requests...
-    work_queue.PushWork([] { PW_LOG_INFO("Chopping onions"); })
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+    EXPECT_EQ(OkStatus(),
+              work_queue.PushWork([] { PW_LOG_INFO("Chopping onions"); }));
 
     // Ping A: throw work at the queue that will increment our counter.
-    work_queue
-        .PushWork([&context_a] {
-          context_a.counter++;
-          context_a.worker_ping.release();
-        })
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+    EXPECT_EQ(OkStatus(), work_queue.PushWork([&context_a] {
+      context_a.counter++;
+      context_a.worker_ping.release();
+    }));
 
     // Other requests...
-    work_queue.PushWork([] { PW_LOG_INFO("Dicing carrots"); })
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
-    work_queue.PushWork([] { PW_LOG_INFO("Blanching spinach"); })
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+    EXPECT_EQ(OkStatus(),
+              work_queue.PushWork([] { PW_LOG_INFO("Dicing carrots"); }));
+    EXPECT_EQ(OkStatus(),
+              work_queue.PushWork([] { PW_LOG_INFO("Blanching spinach"); }));
 
     // Ping B: throw work at the queue that will increment our counter.
-    work_queue
-        .PushWork([&context_b] {
-          context_b.counter++;
-          context_b.worker_ping.release();
-        })
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+    EXPECT_EQ(OkStatus(), work_queue.PushWork([&context_b] {
+      context_b.counter++;
+      context_b.worker_ping.release();
+    }));
 
     // Other requests...
-    work_queue.PushWork([] { PW_LOG_INFO("Peeling potatoes"); })
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+    EXPECT_EQ(OkStatus(),
+              work_queue.PushWork([] { PW_LOG_INFO("Peeling potatoes"); }));
 
     // Pong A & B: wait for the callbacks to notify us from the worker thread.
     context_a.worker_ping.acquire();
diff --git a/targets/host/system_rpc_server.cc b/targets/host/system_rpc_server.cc
index 4647647..a0f53d8 100644
--- a/targets/host/system_rpc_server.cc
+++ b/targets/host/system_rpc_server.cc
@@ -54,7 +54,7 @@
   log_basic::SetOutput([](std::string_view log) {
     std::fprintf(stderr, "%.*s\n", static_cast<int>(log.size()), log.data());
     hdlc::WriteUIFrame(1, as_bytes(span(log)), socket_stream)
-        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+        .IgnoreError();  // TODO(b/242598609): Handle Status properly
   });
 
   PW_LOG_INFO("Starting pw_rpc server on port %d", socket_port);