overall: Adding `IgnoreError()` where Status was discarded

Bug: 387
Change-Id: I720b7a99a1c7a24eb8e2554629529d1e24394cb1
Reviewed-on: https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/49041
Reviewed-by: Keir Mierle <keir@google.com>
Commit-Queue: Keir Mierle <keir@google.com>
diff --git a/pw_allocator/block_test.cc b/pw_allocator/block_test.cc
index 6a07037..e397314 100644
--- a/pw_allocator/block_test.cc
+++ b/pw_allocator/block_test.cc
@@ -136,10 +136,12 @@
   EXPECT_EQ(Block::Init(std::span(bytes, kN), &block), OkStatus());
 
   Block* block2 = nullptr;
-  block->Split(kSplit1, &block2);
+  block->Split(kSplit1, &block2)
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
 
   Block* block3 = nullptr;
-  block->Split(kSplit2, &block3);
+  block->Split(kSplit2, &block3)
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
 
   EXPECT_EQ(block->Next(), block3);
   EXPECT_EQ(block3->Next(), block2);
@@ -282,10 +284,12 @@
   EXPECT_EQ(Block::Init(std::span(bytes, kN), &block), OkStatus());
 
   Block* block2 = nullptr;
-  block->Split(kSplit1, &block2);
+  block->Split(kSplit1, &block2)
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
 
   Block* block3 = nullptr;
-  block->Split(kSplit2, &block3);
+  block->Split(kSplit2, &block3)
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
 
   EXPECT_EQ(block3->MergeNext(), OkStatus());
 
@@ -310,7 +314,8 @@
   EXPECT_EQ(Block::Init(std::span(bytes, kN), &block), OkStatus());
 
   Block* next_block = nullptr;
-  block->Split(512, &next_block);
+  block->Split(512, &next_block)
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
 
   EXPECT_EQ(next_block->MergeNext(), Status::OutOfRange());
   EXPECT_EQ(block->MergePrev(), Status::OutOfRange());
@@ -326,7 +331,8 @@
   EXPECT_EQ(Block::Init(std::span(bytes, kN), &block), OkStatus());
 
   Block* next_block = nullptr;
-  block->Split(512, &next_block);
+  block->Split(512, &next_block)
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
 
   block->MarkUsed();
   EXPECT_EQ(block->MergeNext(), Status::FailedPrecondition());
@@ -341,10 +347,12 @@
   EXPECT_EQ(Block::Init(std::span(bytes, kN), &first_block), OkStatus());
 
   Block* second_block = nullptr;
-  first_block->Split(512, &second_block);
+  first_block->Split(512, &second_block)
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
 
   Block* third_block = nullptr;
-  second_block->Split(256, &third_block);
+  second_block->Split(256, &third_block)
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
 
   EXPECT_EQ(first_block->IsValid(), true);
   EXPECT_EQ(second_block->IsValid(), true);
@@ -359,13 +367,16 @@
   EXPECT_EQ(Block::Init(std::span(bytes, kN), &first_block), OkStatus());
 
   Block* second_block = nullptr;
-  first_block->Split(512, &second_block);
+  first_block->Split(512, &second_block)
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
 
   Block* third_block = nullptr;
-  second_block->Split(256, &third_block);
+  second_block->Split(256, &third_block)
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
 
   Block* fourth_block = nullptr;
-  third_block->Split(128, &fourth_block);
+  third_block->Split(128, &fourth_block)
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
 
   std::byte* next_ptr = reinterpret_cast<std::byte*>(first_block);
   memcpy(next_ptr, second_block, sizeof(void*));
@@ -397,10 +408,12 @@
   EXPECT_EQ(Block::Init(std::span(bytes, kN), &first_block), OkStatus());
 
   Block* second_block = nullptr;
-  first_block->Split(512, &second_block);
+  first_block->Split(512, &second_block)
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
 
   Block* third_block = nullptr;
-  second_block->Split(256, &third_block);
+  second_block->Split(256, &third_block)
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
 
   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 8d04b49..1dacf2d 100644
--- a/pw_allocator/freelist_heap.cc
+++ b/pw_allocator/freelist_heap.cc
@@ -28,7 +28,8 @@
       Block::Init(region, &block),
       "Failed to initialize FreeListHeap region; misaligned or too small");
 
-  freelist_.AddChunk(BlockToSpan(block));
+  freelist_.AddChunk(BlockToSpan(block))
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
 
   region_ = region;
   heap_stats_.total_bytes = region.size();
@@ -42,7 +43,8 @@
   if (chunk.data() == nullptr) {
     return nullptr;
   }
-  freelist_.RemoveChunk(chunk);
+  freelist_.RemoveChunk(chunk)
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
 
   Block* chunk_block = Block::FromUsableSpace(chunk.data());
 
@@ -52,7 +54,8 @@
   Block* leftover;
   auto status = chunk_block->Split(size, &leftover);
   if (status == PW_STATUS_OK) {
-    freelist_.AddChunk(BlockToSpan(leftover));
+    freelist_.AddChunk(BlockToSpan(leftover))
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
   }
 
   chunk_block->MarkUsed();
@@ -92,19 +95,24 @@
 
   if (prev != nullptr && !prev->Used()) {
     // Remove from freelist and merge
-    freelist_.RemoveChunk(BlockToSpan(prev));
-    chunk_block->MergePrev();
+    freelist_.RemoveChunk(BlockToSpan(prev))
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+    chunk_block->MergePrev()
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
 
     // chunk_block is now invalid; prev now encompasses it.
     chunk_block = prev;
   }
 
   if (next != nullptr && !next->Used()) {
-    freelist_.RemoveChunk(BlockToSpan(next));
-    chunk_block->MergeNext();
+    freelist_.RemoveChunk(BlockToSpan(next))
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+    chunk_block->MergeNext()
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
   }
   // Add back to the freelist
-  freelist_.AddChunk(BlockToSpan(chunk_block));
+  freelist_.AddChunk(BlockToSpan(chunk_block))
+      .IgnoreError();  // TODO(pwbug/387): 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 8e0e145..45d1d35 100644
--- a/pw_allocator/freelist_test.cc
+++ b/pw_allocator/freelist_test.cc
@@ -56,7 +56,8 @@
 
   byte data[kN] = {std::byte(0)};
 
-  list.AddChunk(std::span(data, kN));
+  list.AddChunk(std::span(data, kN))
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
   auto item = list.FindChunk(kN / 2);
   EXPECT_EQ(item.size(), kN);
   EXPECT_EQ(item.data(), data);
@@ -68,7 +69,8 @@
 
   byte data[kN] = {std::byte(0)};
 
-  list.AddChunk(std::span(data, kN));
+  list.AddChunk(std::span(data, kN))
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
   auto status = list.RemoveChunk(std::span(data, kN));
   EXPECT_EQ(status, OkStatus());
 
@@ -84,8 +86,10 @@
   byte data1[kN1] = {std::byte(0)};
   byte data2[kN2] = {std::byte(0)};
 
-  list.AddChunk(std::span(data1, kN1));
-  list.AddChunk(std::span(data2, kN2));
+  list.AddChunk(std::span(data1, kN1))
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  list.AddChunk(std::span(data2, kN2))
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
 
   auto chunk = list.FindChunk(kN1 / 2);
   EXPECT_EQ(chunk.size(), kN1);
@@ -111,8 +115,10 @@
   byte data2[kN2] = {std::byte(0)};
 
   // List should now be 257 -> 512 -> NULL
-  list.AddChunk(std::span(data1, kN1));
-  list.AddChunk(std::span(data2, kN2));
+  list.AddChunk(std::span(data1, kN1))
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  list.AddChunk(std::span(data2, kN2))
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
 
   auto chunk = list.FindChunk(kN2 + 1);
   EXPECT_EQ(chunk.size(), kN1);
@@ -131,8 +137,10 @@
   // 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(std::span(data1, kN1));
-  list.AddChunk(std::span(data2, kN2));
+  list.AddChunk(std::span(data1, kN1))
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  list.AddChunk(std::span(data2, kN2))
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
 
   // Request a 300 byte chunk. This should return the 513 byte one
   auto chunk = list.FindChunk(kN1 + 1);
@@ -146,7 +154,8 @@
   byte data[kN] = {std::byte(0)};
   byte data2[kN] = {std::byte(0)};
 
-  list.AddChunk(std::span(data, kN));
+  list.AddChunk(std::span(data, kN))
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
   auto status = list.RemoveChunk(std::span(data2, kN));
   EXPECT_EQ(status, Status::NotFound());
 }
@@ -158,13 +167,17 @@
   byte data1[kN] = {std::byte(0)};
   byte data2[kN] = {std::byte(0)};
 
-  list.AddChunk(std::span(data1, kN));
-  list.AddChunk(std::span(data2, kN));
+  list.AddChunk(std::span(data1, kN))
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  list.AddChunk(std::span(data2, kN))
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
 
   auto chunk1 = list.FindChunk(kN);
-  list.RemoveChunk(chunk1);
+  list.RemoveChunk(chunk1)
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
   auto chunk2 = list.FindChunk(kN);
-  list.RemoveChunk(chunk2);
+  list.RemoveChunk(chunk2)
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
 
   // 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 24262d4..be87baa 100644
--- a/pw_assert_basic/basic_handler.cc
+++ b/pw_assert_basic/basic_handler.cc
@@ -79,7 +79,10 @@
     " ",
 };
 
-using pw::sys_io::WriteLine;
+static void WriteLine(const std::string_view& s) {
+  pw::sys_io::WriteLine(s)
+      .IgnoreError();  // TODO(pwbug/387): 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 e584b74..ab7762c 100644
--- a/pw_blob_store/blob_store.cc
+++ b/pw_blob_store/blob_store.cc
@@ -72,7 +72,7 @@
 
   if (!ValidateChecksum().ok()) {
     PW_LOG_ERROR("BlobStore init - Invalidating blob with invalid checksum");
-    Invalidate();
+    Invalidate().IgnoreError();  // TODO(pwbug/387): Handle Status properly
     return Status::DataLoss();
   }
 
@@ -96,7 +96,7 @@
 
   writer_open_ = true;
 
-  Invalidate();
+  Invalidate().IgnoreError();  // TODO(pwbug/387): Handle Status properly
 
   return OkStatus();
 }
@@ -162,7 +162,7 @@
     }
 
     if (!ValidateChecksum().ok()) {
-      Invalidate();
+      Invalidate().IgnoreError();  // TODO(pwbug/387): Handle Status properly
       return Status::DataLoss();
     }
 
@@ -443,7 +443,7 @@
     return OkStatus();
   }
 
-  Invalidate();
+  Invalidate().IgnoreError();  // TODO(pwbug/387): Handle Status properly
 
   Status status = 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 3dabaa8..becb23d 100644
--- a/pw_blob_store/blob_store_chunk_write_test.cc
+++ b/pw_blob_store/blob_store_chunk_write_test.cc
@@ -34,18 +34,22 @@
   BlobStoreChunkTest() : flash_(kFlashAlignment), partition_(&flash_) {}
 
   void InitFlashTo(std::span<const std::byte> contents) {
-    partition_.Erase();
+    partition_.Erase()
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
     std::memcpy(flash_.buffer().data(), contents.data(), contents.size());
   }
 
   void InitSourceBufferToRandom(uint64_t seed) {
-    partition_.Erase();
+    partition_.Erase()
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
     random::XorShiftStarRng64 rng(seed);
-    rng.Get(source_buffer_);
+    rng.Get(source_buffer_)
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
   }
 
   void InitSourceBufferToFill(char fill) {
-    partition_.Erase();
+    partition_.Erase()
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
     std::memset(source_buffer_.data(), fill, source_buffer_.size());
   }
 
diff --git a/pw_blob_store/blob_store_deferred_write_test.cc b/pw_blob_store/blob_store_deferred_write_test.cc
index 02491e6..4edd993 100644
--- a/pw_blob_store/blob_store_deferred_write_test.cc
+++ b/pw_blob_store/blob_store_deferred_write_test.cc
@@ -34,18 +34,21 @@
   DeferredWriteTest() : flash_(kFlashAlignment), partition_(&flash_) {}
 
   void InitFlashTo(std::span<const std::byte> contents) {
-    partition_.Erase();
+    partition_.Erase()
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
     std::memcpy(flash_.buffer().data(), contents.data(), contents.size());
   }
 
   void InitBufferToRandom(uint64_t seed) {
-    partition_.Erase();
+    partition_.Erase()
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
     random::XorShiftStarRng64 rng(seed);
-    rng.Get(buffer_);
+    rng.Get(buffer_).IgnoreError();  // TODO(pwbug/387): Handle Status properly
   }
 
   void InitBufferToFill(char fill) {
-    partition_.Erase();
+    partition_.Erase()
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
     std::memset(buffer_.data(), fill, buffer_.size());
   }
 
diff --git a/pw_blob_store/blob_store_test.cc b/pw_blob_store/blob_store_test.cc
index e5ff2f1..8ed9c7c 100644
--- a/pw_blob_store/blob_store_test.cc
+++ b/pw_blob_store/blob_store_test.cc
@@ -35,7 +35,8 @@
   BlobStoreTest() : flash_(kFlashAlignment), partition_(&flash_) {}
 
   void InitFlashTo(std::span<const std::byte> contents) {
-    partition_.Erase();
+    partition_.Erase()
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
     std::memcpy(flash_.buffer().data(), contents.data(), contents.size());
   }
 
@@ -47,7 +48,8 @@
     std::memset(source_buffer_.data(),
                 static_cast<int>(flash_.erased_memory_content()),
                 source_buffer_.size());
-    rng.Get(std::span(source_buffer_).first(init_size_bytes));
+    rng.Get(std::span(source_buffer_).first(init_size_bytes))
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
   }
 
   void InitSourceBufferToFill(char fill,
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 e5bb6a1..ce63268 100644
--- a/pw_blob_store/public/pw_blob_store/blob_store.h
+++ b/pw_blob_store/public/pw_blob_store/blob_store.h
@@ -60,7 +60,7 @@
     BlobWriter& operator=(const BlobWriter&) = delete;
     virtual ~BlobWriter() {
       if (open_) {
-        Close();
+        Close().IgnoreError();  // TODO(pwbug/387): Handle Status properly
       }
     }
 
@@ -188,7 +188,7 @@
     BlobReader& operator=(const BlobReader&) = delete;
     ~BlobReader() {
       if (open_) {
-        Close();
+        Close().IgnoreError();  // TODO(pwbug/387): Handle Status properly
       }
     }
 
diff --git a/pw_blob_store/size_report/base.cc b/pw_blob_store/size_report/base.cc
index e020725..32dc923 100644
--- a/pw_blob_store/size_report/base.cc
+++ b/pw_blob_store/size_report/base.cc
@@ -50,16 +50,19 @@
       std::memset((void*)working_buffer, sizeof(working_buffer), 0x55);
   is_set = (result != nullptr);
 
-  test_kvs.Init();
+  test_kvs.Init().IgnoreError();  // TODO(pwbug/387): Handle Status properly
 
   unsigned kvs_value = 42;
-  test_kvs.Put("example_key", kvs_value);
+  test_kvs.Put("example_key", kvs_value)
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
 
   kvs_entry_count = test_kvs.size();
 
   unsigned read_value = 0;
-  test_kvs.Get("example_key", &read_value);
-  test_kvs.Delete("example_key");
+  test_kvs.Get("example_key", &read_value)
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  test_kvs.Delete("example_key")
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
 
   auto val = pw::kvs::FlashTestPartition().PartitionAddressToMcuAddress(0);
   PW_LOG_INFO("Use the variable. %u", unsigned(*val));
diff --git a/pw_blob_store/size_report/basic_blob.cc b/pw_blob_store/size_report/basic_blob.cc
index 77c25e7..1921546 100644
--- a/pw_blob_store/size_report/basic_blob.cc
+++ b/pw_blob_store/size_report/basic_blob.cc
@@ -51,16 +51,19 @@
       std::memset((void*)working_buffer, sizeof(working_buffer), 0x55);
   is_set = (result != nullptr);
 
-  test_kvs.Init();
+  test_kvs.Init().IgnoreError();  // TODO(pwbug/387): Handle Status properly
 
   unsigned kvs_value = 42;
-  test_kvs.Put("example_key", kvs_value);
+  test_kvs.Put("example_key", kvs_value)
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
 
   kvs_entry_count = test_kvs.size();
 
   unsigned read_value = 0;
-  test_kvs.Get("example_key", &read_value);
-  test_kvs.Delete("example_key");
+  test_kvs.Get("example_key", &read_value)
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  test_kvs.Delete("example_key")
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
 
   auto val = pw::kvs::FlashTestPartition().PartitionAddressToMcuAddress(0);
   PW_LOG_INFO("Use the variable. %u", unsigned(*val));
@@ -81,21 +84,22 @@
 
   pw::blob_store::BlobStoreBuffer<kBufferSize> blob(
       name, pw::kvs::FlashTestPartition(), nullptr, test_kvs, kBufferSize);
-  blob.Init();
+  blob.Init().IgnoreError();  // TODO(pwbug/387): Handle Status properly
 
   // Use writer.
   pw::blob_store::BlobStore::BlobWriter writer(blob);
-  writer.Open();
-  writer.Write(write_data);
-  writer.Close();
+  writer.Open().IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  writer.Write(write_data)
+      .IgnoreError();            // TODO(pwbug/387): Handle Status properly
+  writer.Close().IgnoreError();  // TODO(pwbug/387): Handle Status properly
 
   // Use reader.
   pw::blob_store::BlobStore::BlobReader reader(blob);
-  reader.Open();
+  reader.Open().IgnoreError();  // TODO(pwbug/387): Handle Status properly
   pw::Result<pw::ConstByteSpan> get_result = reader.GetMemoryMappedBlob();
   PW_LOG_INFO("%d", get_result.ok());
   auto reader_result = reader.Read(read_span);
-  reader.Close();
+  reader.Close().IgnoreError();  // TODO(pwbug/387): Handle Status properly
   PW_LOG_INFO("%d", reader_result.ok());
 
   // End of basic blob **********************
diff --git a/pw_blob_store/size_report/deferred_write_blob.cc b/pw_blob_store/size_report/deferred_write_blob.cc
index c654411..e8f3507 100644
--- a/pw_blob_store/size_report/deferred_write_blob.cc
+++ b/pw_blob_store/size_report/deferred_write_blob.cc
@@ -51,16 +51,19 @@
       std::memset((void*)working_buffer, sizeof(working_buffer), 0x55);
   is_set = (result != nullptr);
 
-  test_kvs.Init();
+  test_kvs.Init().IgnoreError();  // TODO(pwbug/387): Handle Status properly
 
   unsigned kvs_value = 42;
-  test_kvs.Put("example_key", kvs_value);
+  test_kvs.Put("example_key", kvs_value)
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
 
   kvs_entry_count = test_kvs.size();
 
   unsigned read_value = 0;
-  test_kvs.Get("example_key", &read_value);
-  test_kvs.Delete("example_key");
+  test_kvs.Get("example_key", &read_value)
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  test_kvs.Delete("example_key")
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
 
   auto val = pw::kvs::FlashTestPartition().PartitionAddressToMcuAddress(0);
   PW_LOG_INFO("Use the variable. %u", unsigned(*val));
@@ -81,22 +84,23 @@
 
   pw::blob_store::BlobStoreBuffer<kBufferSize> blob(
       name, pw::kvs::FlashTestPartition(), nullptr, test_kvs, kBufferSize);
-  blob.Init();
+  blob.Init().IgnoreError();  // TODO(pwbug/387): Handle Status properly
 
   // Use writer.
   pw::blob_store::BlobStore::DeferredWriter writer(blob);
-  writer.Open();
-  writer.Write(write_data);
-  writer.Flush();
-  writer.Close();
+  writer.Open().IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  writer.Write(write_data)
+      .IgnoreError();            // TODO(pwbug/387): Handle Status properly
+  writer.Flush().IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  writer.Close().IgnoreError();  // TODO(pwbug/387): Handle Status properly
 
   // Use reader.
   pw::blob_store::BlobStore::BlobReader reader(blob);
-  reader.Open();
+  reader.Open().IgnoreError();  // TODO(pwbug/387): Handle Status properly
   pw::Result<pw::ConstByteSpan> get_result = reader.GetMemoryMappedBlob();
   PW_LOG_INFO("%d", get_result.ok());
   auto reader_result = reader.Read(read_span);
-  reader.Close();
+  reader.Close().IgnoreError();  // TODO(pwbug/387): Handle Status properly
   PW_LOG_INFO("%d", reader_result.ok());
 
   // End of deferred blob **********************
diff --git a/pw_cpu_exception_cortex_m/proto_dump.cc b/pw_cpu_exception_cortex_m/proto_dump.cc
index 5015918..86213d5 100644
--- a/pw_cpu_exception_cortex_m/proto_dump.cc
+++ b/pw_cpu_exception_cortex_m/proto_dump.cc
@@ -24,34 +24,60 @@
       *static_cast<cortex_m::ArmV7mCpuState::StreamEncoder*>(&dest);
 
   // Special and mem-mapped registers.
-  state_encoder.WritePc(cpu_state.base.pc);
-  state_encoder.WriteLr(cpu_state.base.lr);
-  state_encoder.WritePsr(cpu_state.base.psr);
-  state_encoder.WriteMsp(cpu_state.extended.msp);
-  state_encoder.WritePsp(cpu_state.extended.psp);
-  state_encoder.WriteExcReturn(cpu_state.extended.exc_return);
-  state_encoder.WriteCfsr(cpu_state.extended.cfsr);
-  state_encoder.WriteMmfar(cpu_state.extended.mmfar);
-  state_encoder.WriteBfar(cpu_state.extended.bfar);
-  state_encoder.WriteIcsr(cpu_state.extended.icsr);
-  state_encoder.WriteHfsr(cpu_state.extended.hfsr);
-  state_encoder.WriteShcsr(cpu_state.extended.shcsr);
-  state_encoder.WriteControl(cpu_state.extended.control);
+  state_encoder.WritePc(cpu_state.base.pc)
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  state_encoder.WriteLr(cpu_state.base.lr)
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  state_encoder.WritePsr(cpu_state.base.psr)
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  state_encoder.WriteMsp(cpu_state.extended.msp)
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  state_encoder.WritePsp(cpu_state.extended.psp)
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  state_encoder.WriteExcReturn(cpu_state.extended.exc_return)
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  state_encoder.WriteCfsr(cpu_state.extended.cfsr)
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  state_encoder.WriteMmfar(cpu_state.extended.mmfar)
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  state_encoder.WriteBfar(cpu_state.extended.bfar)
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  state_encoder.WriteIcsr(cpu_state.extended.icsr)
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  state_encoder.WriteHfsr(cpu_state.extended.hfsr)
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  state_encoder.WriteShcsr(cpu_state.extended.shcsr)
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  state_encoder.WriteControl(cpu_state.extended.control)
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
 
   // General purpose registers.
-  state_encoder.WriteR0(cpu_state.base.r0);
-  state_encoder.WriteR1(cpu_state.base.r1);
-  state_encoder.WriteR2(cpu_state.base.r2);
-  state_encoder.WriteR3(cpu_state.base.r3);
-  state_encoder.WriteR4(cpu_state.extended.r4);
-  state_encoder.WriteR5(cpu_state.extended.r5);
-  state_encoder.WriteR6(cpu_state.extended.r6);
-  state_encoder.WriteR7(cpu_state.extended.r7);
-  state_encoder.WriteR8(cpu_state.extended.r8);
-  state_encoder.WriteR9(cpu_state.extended.r9);
-  state_encoder.WriteR10(cpu_state.extended.r10);
-  state_encoder.WriteR11(cpu_state.extended.r11);
-  state_encoder.WriteR12(cpu_state.base.r12);
+  state_encoder.WriteR0(cpu_state.base.r0)
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  state_encoder.WriteR1(cpu_state.base.r1)
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  state_encoder.WriteR2(cpu_state.base.r2)
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  state_encoder.WriteR3(cpu_state.base.r3)
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  state_encoder.WriteR4(cpu_state.extended.r4)
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  state_encoder.WriteR5(cpu_state.extended.r5)
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  state_encoder.WriteR6(cpu_state.extended.r6)
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  state_encoder.WriteR7(cpu_state.extended.r7)
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  state_encoder.WriteR8(cpu_state.extended.r8)
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  state_encoder.WriteR9(cpu_state.extended.r9)
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  state_encoder.WriteR10(cpu_state.extended.r10)
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  state_encoder.WriteR11(cpu_state.extended.r11)
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  state_encoder.WriteR12(cpu_state.base.r12)
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
 
   // If the encode buffer was exhausted in an earlier write, it will be
   // reflected here.
diff --git a/pw_hdlc/rpc_packets.cc b/pw_hdlc/rpc_packets.cc
index 9d83d86..e3cf4ac 100644
--- a/pw_hdlc/rpc_packets.cc
+++ b/pw_hdlc/rpc_packets.cc
@@ -32,7 +32,8 @@
     if (auto result = decoder.Process(data); result.ok()) {
       Frame& frame = result.value();
       if (frame.address() == rpc_address) {
-        server.ProcessPacket(frame.data(), output);
+        server.ProcessPacket(frame.data(), output)
+            .IgnoreError();  // TODO(pwbug/387): Handle Status properly
       }
     }
   }
diff --git a/pw_hex_dump/hex_dump_test.cc b/pw_hex_dump/hex_dump_test.cc
index d283c18..48d9939 100644
--- a/pw_hex_dump/hex_dump_test.cc
+++ b/pw_hex_dump/hex_dump_test.cc
@@ -333,8 +333,10 @@
   constexpr size_t kTestBytesPerLine = 16;
   std::array<char, kHexAddrStringSize + 1> expected1;
   std::array<char, kHexAddrStringSize + 1> expected2;
-  DumpAddr(expected1, source_data.data());
-  DumpAddr(expected2, source_data.data() + kTestBytesPerLine);
+  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
 
   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 58cdea6..aaf6ef1 100644
--- a/pw_hex_dump/public/pw_hex_dump/hex_dump.h
+++ b/pw_hex_dump/public/pw_hex_dump/hex_dump.h
@@ -97,10 +97,14 @@
                  .prefix_mode = AddressMode::kOffset};
 
   FormattedHexDumper() = default;
-  FormattedHexDumper(std::span<char> dest) { SetLineBuffer(dest); }
+  FormattedHexDumper(std::span<char> dest) {
+    SetLineBuffer(dest)
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  }
   FormattedHexDumper(std::span<char> dest, Flags config_flags)
       : flags(config_flags) {
-    SetLineBuffer(dest);
+    SetLineBuffer(dest)
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
   }
 
   // TODO(pwbug/218): Add iterator support.
diff --git a/pw_i2c/register_device.cc b/pw_i2c/register_device.cc
index cae58ce..07742dc 100644
--- a/pw_i2c/register_device.cc
+++ b/pw_i2c/register_device.cc
@@ -110,7 +110,8 @@
       break;
 
     case 4:
-      PutRegisterData32InByteBuilder(builder, register_data, order_);
+      PutRegisterData32InByteBuilder(builder, register_data, order_)
+          .IgnoreError();  // TODO(pwbug/387): Handle Status properly
       break;
 
     default:
diff --git a/pw_kvs/alignment_test.cc b/pw_kvs/alignment_test.cc
index fca1a7f..71d1a8e 100644
--- a/pw_kvs/alignment_test.cc
+++ b/pw_kvs/alignment_test.cc
@@ -175,7 +175,8 @@
 
   {
     AlignedWriterBuffer<64> writer(3, output);
-    writer.Write(std::as_bytes(std::span("What is this?")));
+    writer.Write(std::as_bytes(std::span("What is this?")))
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
     EXPECT_EQ(called_with_bytes, 0u);  // Buffer not full; no output yet.
   }
 
@@ -211,12 +212,13 @@
 
   {
     AlignedWriterBuffer<4> writer(3, output);
-    writer.Write(std::as_bytes(std::span("Everything is fine.")));
+    writer.Write(std::as_bytes(std::span("Everything is fine.")))
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
     output.state = OutputWithErrorInjection::kBreakOnNext;
     EXPECT_EQ(Status::Unknown(),
               writer.Write(std::as_bytes(std::span("No more writes, okay?")))
                   .status());
-    writer.Flush();
+    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 49a22cd..ad06439 100644
--- a/pw_kvs/fake_flash_test_key_value_store.cc
+++ b/pw_kvs/fake_flash_test_key_value_store.cc
@@ -68,7 +68,7 @@
 
 KeyValueStore& TestKvs() {
   if (!test_kvs.initialized()) {
-    test_kvs.Init();
+    test_kvs.Init().IgnoreError();  // TODO(pwbug/387): Handle Status properly
   }
 
   return test_kvs;
diff --git a/pw_kvs/key_value_store.cc b/pw_kvs/key_value_store.cc
index 56d706c..2917a79 100644
--- a/pw_kvs/key_value_store.cc
+++ b/pw_kvs/key_value_store.cc
@@ -462,7 +462,8 @@
 
   Entry entry;
   if (kvs_.ReadEntry(*iterator_, entry).ok()) {
-    entry.ReadKey(key_buffer_);
+    entry.ReadKey(key_buffer_)
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
   }
 }
 
@@ -1207,7 +1208,8 @@
   INF("Starting KVS repair");
 
   DBG("Reinitialize KVS metadata");
-  InitializeMetadata();
+  InitializeMetadata()
+      .IgnoreError();  // TODO(pwbug/387): 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 1fb046a..dbaf44b 100644
--- a/pw_kvs/key_value_store_binary_format_test.cc
+++ b/pw_kvs/key_value_store_binary_format_test.cc
@@ -177,7 +177,8 @@
         kvs_(&partition_, default_format, kNoGcOptions) {}
 
   void InitFlashTo(std::span<const byte> contents) {
-    partition_.Erase();
+    partition_.Erase()
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
     std::memcpy(flash_.buffer().data(), contents.data(), contents.size());
   }
 
@@ -385,7 +386,8 @@
              kRecoveryNoGcOptions) {}
 
   void InitFlashTo(std::span<const byte> contents) {
-    partition_.Erase();
+    partition_.Erase()
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
     std::memcpy(flash_.buffer().data(), contents.data(), contents.size());
   }
 
@@ -642,7 +644,8 @@
                  {.magic = kNoChecksumMagic, .checksum = nullptr},
              }},
              kRecoveryNoGcOptions) {
-    partition_.Erase();
+    partition_.Erase()
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
     std::memcpy(flash_.buffer().data(),
                 kInitialContents.data(),
                 kInitialContents.size());
@@ -880,7 +883,8 @@
                  {.magic = kNoChecksumMagic, .checksum = nullptr},
              }},
              kRecoveryNoGcOptions) {
-    partition_.Erase();
+    partition_.Erase()
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
     std::memcpy(flash_.buffer().data(),
                 kInitialContents.data(),
                 kInitialContents.size());
@@ -933,7 +937,8 @@
         kvs_(&partition_,
              {.magic = kMagic, .checksum = &default_checksum},
              kRecoveryLazyGcOptions) {
-    partition_.Erase();
+    partition_.Erase()
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
     std::memcpy(flash_.buffer().data(),
                 kInitialContents.data(),
                 kInitialContents.size());
@@ -1025,7 +1030,8 @@
         kvs_(&partition_,
              {.magic = kMagic, .checksum = &default_checksum},
              kRecoveryLazyGcOptions) {
-    partition_.Erase();
+    partition_.Erase()
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
     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 aaa7a34..d35a128 100644
--- a/pw_kvs/key_value_store_fuzz_test.cc
+++ b/pw_kvs/key_value_store_fuzz_test.cc
@@ -44,7 +44,8 @@
 
 TEST(KvsFuzz, FuzzTest) {
   FlashPartition& test_partition = FlashTestPartition();
-  test_partition.Erase();
+  test_partition.Erase()
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
 
   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 1b1f820..9a840e7 100644
--- a/pw_kvs/key_value_store_initialized_test.cc
+++ b/pw_kvs/key_value_store_initialized_test.cc
@@ -82,7 +82,8 @@
 class EmptyInitializedKvs : public ::testing::Test {
  protected:
   EmptyInitializedKvs() : kvs_(&test_partition, default_format) {
-    test_partition.Erase();
+    test_partition.Erase()
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
     ASSERT_EQ(OkStatus(), kvs_.Init());
   }
 
@@ -440,7 +441,8 @@
   EXPECT_EQ(test2, value2);
 
   // Delete other key
-  kvs_.Delete(keys[1]);
+  kvs_.Delete(keys[1])
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
 
   // 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 947a3fa..4139928 100644
--- a/pw_kvs/key_value_store_map_test.cc
+++ b/pw_kvs/key_value_store_map_test.cc
@@ -166,7 +166,8 @@
       label << ((options == kReinitWithPartialGC) ? "PartialGC" : "");
       label << ((kvs_.redundancy() > 1) ? "Redundant" : "");
 
-      partition_.SaveStorageStats(kvs_, label.data());
+      partition_.SaveStorageStats(kvs_, label.data())
+          .IgnoreError();  // TODO(pwbug/387): Handle Status properly
     }
   }
 
diff --git a/pw_kvs/key_value_store_put_test.cc b/pw_kvs/key_value_store_put_test.cc
index 5c9c97c..01c6d21 100644
--- a/pw_kvs/key_value_store_put_test.cc
+++ b/pw_kvs/key_value_store_put_test.cc
@@ -45,7 +45,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());
+    test_partition.Erase(0, test_partition.sector_count())
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
     ASSERT_EQ(OkStatus(), kvs_.Init());
   }
 
@@ -70,7 +71,8 @@
     }
   }
 
-  test_partition.SaveStorageStats(kvs_, "Put_VaryingKeysAndValues");
+  test_partition.SaveStorageStats(kvs_, "Put_VaryingKeysAndValues")
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
 }
 
 }  // namespace
diff --git a/pw_kvs/key_value_store_test.cc b/pw_kvs/key_value_store_test.cc
index 2926cce..375596e 100644
--- a/pw_kvs/key_value_store_test.cc
+++ b/pw_kvs/key_value_store_test.cc
@@ -204,7 +204,8 @@
              sizeof(fname_buf),
              "WriteOneKeyMultipleTimes_%d.bin",
              reload);
-    flash.Dump(fname_buf);
+    flash.Dump(fname_buf)
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
   }
 }
 
@@ -233,7 +234,8 @@
     EXPECT_OK(kvs.Put(key.view(), value));
     EXPECT_EQ(kvs.size(), i + 1);
   }
-  flash.Dump("WritingMultipleKeysIncreasesSize.bin");
+  flash.Dump("WritingMultipleKeysIncreasesSize.bin")
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
 }
 
 TEST(InMemoryKvs, WriteAndReadOneKey) {
diff --git a/pw_kvs/key_value_store_wear_test.cc b/pw_kvs/key_value_store_wear_test.cc
index 4110c16..94bb042 100644
--- a/pw_kvs/key_value_store_wear_test.cc
+++ b/pw_kvs/key_value_store_wear_test.cc
@@ -73,7 +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");
+  partition_.SaveStorageStats(kvs_, "WearTest RepeatedLargeEntry")
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
 }
 
 // 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 e86ec73..4965895 100644
--- a/pw_kvs/public/pw_kvs/alignment.h
+++ b/pw_kvs/public/pw_kvs/alignment.h
@@ -59,7 +59,9 @@
     // TODO(hepler): Add DCHECK to ensure that buffer.size() >= alignment_bytes.
   }
 
-  ~AlignedWriter() { Flush(); }
+  ~AlignedWriter() {
+    Flush().IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  }
 
   // Writes bytes to the AlignedWriter. The output may be called if the internal
   // buffer is filled.
diff --git a/pw_kvs/public/pw_kvs/checksum.h b/pw_kvs/public/pw_kvs/checksum.h
index 7624e39..9b6a3be 100644
--- a/pw_kvs/public/pw_kvs/checksum.h
+++ b/pw_kvs/public/pw_kvs/checksum.h
@@ -90,7 +90,10 @@
 template <size_t kAlignmentBytes, size_t kBufferSize = kAlignmentBytes>
 class AlignedChecksum : public ChecksumAlgorithm {
  public:
-  void Update(std::span<const std::byte> data) final { writer_.Write(data); }
+  void Update(std::span<const std::byte> data) final {
+    writer_.Write(data)
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  }
 
  protected:
   constexpr AlignedChecksum(std::span<const std::byte> state)
@@ -104,7 +107,7 @@
   static_assert(kBufferSize >= kAlignmentBytes);
 
   void Finalize() final {
-    writer_.Flush();
+    writer_.Flush().IgnoreError();  // TODO(pwbug/387): 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 8e8ef68..ab1fcbd 100644
--- a/pw_kvs/size_report/base_with_only_flash.cc
+++ b/pw_kvs/size_report/base_with_only_flash.cc
@@ -39,17 +39,21 @@
       std::memset((void*)working_buffer, 0x55, sizeof(working_buffer));
   is_set = (result != nullptr);
 
-  test_partition.Erase();
+  test_partition.Erase()
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
 
   std::memset((void*)working_buffer, 0x55, sizeof(working_buffer));
 
-  test_partition.Write(0, std::as_bytes(std::span(working_buffer)));
+  test_partition.Write(0, std::as_bytes(std::span(working_buffer)))
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
 
   bool tmp_bool;
-  test_partition.IsErased(&tmp_bool);
+  test_partition.IsErased(&tmp_bool)
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
   is_erased = tmp_bool;
 
-  test_partition.Read(0, as_writable_bytes(std::span(working_buffer)));
+  test_partition.Read(0, as_writable_bytes(std::span(working_buffer)))
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
 
   return 0;
 }
diff --git a/pw_kvs/size_report/with_kvs.cc b/pw_kvs/size_report/with_kvs.cc
index d414665..fccbab5 100644
--- a/pw_kvs/size_report/with_kvs.cc
+++ b/pw_kvs/size_report/with_kvs.cc
@@ -49,15 +49,17 @@
       std::memset((void*)working_buffer, 0x55, sizeof(working_buffer));
   is_set = (result != nullptr);
 
-  kvs.Init();
+  kvs.Init().IgnoreError();  // TODO(pwbug/387): Handle Status properly
 
   unsigned kvs_value = 42;
-  kvs.Put("example_key", kvs_value);
+  kvs.Put("example_key", kvs_value)
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
 
   kvs_entry_count = kvs.size();
 
   unsigned read_value = 0;
-  kvs.Get("example_key", &read_value);
+  kvs.Get("example_key", &read_value)
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
 
   return 0;
 }
diff --git a/pw_log/proto_utils.cc b/pw_log/proto_utils.cc
index e4aef14..8e07883 100644
--- a/pw_log/proto_utils.cc
+++ b/pw_log/proto_utils.cc
@@ -28,14 +28,19 @@
   // Encode message to the LogEntry protobuf.
   LogEntry::MemoryEncoder encoder(encode_buffer);
 
-  encoder.WriteMessage(tokenized_data);
-  encoder.WriteLineLevel(
-      (metadata.level() & PW_LOG_LEVEL_BITMASK) |
-      ((metadata.line_number() << PW_LOG_LEVEL_BITS) & ~PW_LOG_LEVEL_BITMASK));
+  encoder.WriteMessage(tokenized_data)
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  encoder
+      .WriteLineLevel((metadata.level() & PW_LOG_LEVEL_BITMASK) |
+                      ((metadata.line_number() << PW_LOG_LEVEL_BITS) &
+                       ~PW_LOG_LEVEL_BITMASK))
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
   if (metadata.flags() != 0) {
-    encoder.WriteFlags(metadata.flags());
+    encoder.WriteFlags(metadata.flags())
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
   }
-  encoder.WriteTimestamp(ticks_since_epoch);
+  encoder.WriteTimestamp(ticks_since_epoch)
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
 
   PW_TRY(encoder.status());
   return ConstByteSpan(encoder);
diff --git a/pw_log_basic/log_basic.cc b/pw_log_basic/log_basic.cc
index 88fd527..71a6197 100644
--- a/pw_log_basic/log_basic.cc
+++ b/pw_log_basic/log_basic.cc
@@ -84,7 +84,8 @@
 #endif  // PW_LOG_SHOW_FILENAME
 
 void (*write_log)(std::string_view) = [](std::string_view log) {
-  sys_io::WriteLine(log);
+  sys_io::WriteLine(log)
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
 };
 
 }  // namespace
diff --git a/pw_log_rpc/logs_rpc_test.cc b/pw_log_rpc/logs_rpc_test.cc
index 2779104..6829316 100644
--- a/pw_log_rpc/logs_rpc_test.cc
+++ b/pw_log_rpc/logs_rpc_test.cc
@@ -68,7 +68,9 @@
 
   // Flush all logs from the buffer, then close the RPC.
   AddLogs(kLogEntryCount);
-  GetLogs(context).Flush();
+  GetLogs(context)
+      .Flush()
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
   GetLogs(context).Finish();
 
   EXPECT_TRUE(context.done());
@@ -89,7 +91,9 @@
 
   for (size_t i = 0; i < kFlushCount; i++) {
     AddLogs(kLogEntryCount);
-    GetLogs(context).Flush();
+    GetLogs(context)
+        .Flush()
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
   }
   GetLogs(context).Finish();
 
@@ -104,7 +108,9 @@
 
   // Invoking flush with no logs in the queue should behave like a no-op.
   context.call(rpc_buffer);
-  GetLogs(context).Flush();
+  GetLogs(context)
+      .Flush()
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
   GetLogs(context).Finish();
 
   EXPECT_TRUE(context.done());
@@ -120,7 +126,9 @@
   // Generate failure on log queue.
   log_queue_tester.SetPopStatus(Status::Internal());
   context.call(rpc_buffer);
-  GetLogs(context).Flush();
+  GetLogs(context)
+      .Flush()
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
   GetLogs(context).Finish();
 
   EXPECT_TRUE(context.done());
diff --git a/pw_log_rpc/public/pw_log_rpc/logs_rpc.h b/pw_log_rpc/public/pw_log_rpc/logs_rpc.h
index 71a56dc..a6fef55 100644
--- a/pw_log_rpc/public/pw_log_rpc/logs_rpc.h
+++ b/pw_log_rpc/public/pw_log_rpc/logs_rpc.h
@@ -41,7 +41,10 @@
 
   // Interface for the owner of the service instance to close the RPC, if
   // one is attached.
-  void Finish() { response_writer_.Finish(); }
+  void Finish() {
+    response_writer_.Finish()
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  }
 
  private:
   LogQueue& log_queue_;
diff --git a/pw_multisink/public/pw_multisink/multisink.h b/pw_multisink/public/pw_multisink/multisink.h
index c467cb7..f7a9b26 100644
--- a/pw_multisink/public/pw_multisink/multisink.h
+++ b/pw_multisink/public/pw_multisink/multisink.h
@@ -214,7 +214,8 @@
 
   // Constructs a multisink using a ring buffer backed by the provided buffer.
   MultiSink(ByteSpan buffer) : ring_buffer_(true), sequence_id_(0) {
-    ring_buffer_.SetBuffer(buffer);
+    ring_buffer_.SetBuffer(buffer)
+        .IgnoreError();  // TODO(pwbug/387): 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 cf72fc2..38c4fe9 100644
--- a/pw_persistent_ram/persistent_buffer_test.cc
+++ b/pw_persistent_ram/persistent_buffer_test.cc
@@ -59,7 +59,8 @@
     auto writer = persistent.GetWriter();
     EXPECT_EQ(persistent.size(), 0u);
 
-    writer.Write(std::as_bytes(std::span(&kExpectedNumber, 1)));
+    writer.Write(std::as_bytes(std::span(&kExpectedNumber, 1)))
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
     ASSERT_TRUE(persistent.has_value());
 
     persistent.~PersistentBuffer();  // Emulate shutdown / global destructors.
@@ -88,12 +89,15 @@
 
     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));
+      writer
+          .Write(kTestString.data() + i,
+                 std::min(kWriteSize, kTestString.length() - i))
+          .IgnoreError();  // TODO(pwbug/387): Handle Status properly
     }
     // Need to manually write a null terminator since std::string_view doesn't
     // include one in the string length.
-    writer.Write(std::byte(0));
+    writer.Write(std::byte(0))
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
 
     persistent.~PersistentBuffer();  // Emulate shutdown / global destructors.
   }
@@ -129,7 +133,8 @@
     EXPECT_EQ(persistent.size(), 0u);
 
     // Write an integer.
-    writer.Write(std::as_bytes(std::span(&kTestNumber, 1)));
+    writer.Write(std::as_bytes(std::span(&kTestNumber, 1)))
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
     ASSERT_TRUE(persistent.has_value());
 
     persistent.~PersistentBuffer();  // Emulate shutdown / global destructors.
@@ -143,7 +148,8 @@
     // Write more data.
     auto writer = persistent.GetWriter();
     EXPECT_EQ(persistent.size(), sizeof(kTestNumber));
-    writer.Write(std::as_bytes(std::span<const char>(kTestString)));
+    writer.Write(std::as_bytes(std::span<const char>(kTestString)))
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
 
     persistent.~PersistentBuffer();  // Emulate shutdown / global destructors.
   }
diff --git a/pw_protobuf/codegen_test.cc b/pw_protobuf/codegen_test.cc
index 1f9a430..b1cc7da 100644
--- a/pw_protobuf/codegen_test.cc
+++ b/pw_protobuf/codegen_test.cc
@@ -41,35 +41,47 @@
   stream::MemoryWriter writer(encode_buffer);
 
   Pigweed::StreamEncoder pigweed(writer, temp_buffer);
-  pigweed.WriteMagicNumber(73);
-  pigweed.WriteZiggy(-111);
-  pigweed.WriteErrorMessage("not a typewriter");
-  pigweed.WriteBin(Pigweed::Protobuf::Binary::ZERO);
+  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
 
   {
     Pigweed::Pigweed::StreamEncoder pigweed_pigweed =
         pigweed.GetPigweedEncoder();
-    pigweed_pigweed.WriteStatus(Bool::FILE_NOT_FOUND);
+    pigweed_pigweed.WriteStatus(Bool::FILE_NOT_FOUND)
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
 
     ASSERT_EQ(pigweed_pigweed.status(), OkStatus());
   }
 
   {
     Proto::StreamEncoder proto = pigweed.GetProtoEncoder();
-    proto.WriteBin(Proto::Binary::OFF);
-    proto.WritePigweedPigweedBin(Pigweed::Pigweed::Binary::ZERO);
-    proto.WritePigweedProtobufBin(Pigweed::Protobuf::Binary::ZERO);
+    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
 
     {
       Pigweed::Protobuf::Compiler::StreamEncoder meta = proto.GetMetaEncoder();
-      meta.WriteFileName("/etc/passwd");
-      meta.WriteStatus(Pigweed::Protobuf::Compiler::Status::FUBAR);
+      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
     }
 
     {
       Pigweed::StreamEncoder nested_pigweed = proto.GetPigweedEncoder();
-      nested_pigweed.WriteErrorMessage("here we go again");
-      nested_pigweed.WriteMagicNumber(616);
+      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
 
       {
         DeviceInfo::StreamEncoder device_info =
@@ -78,25 +90,31 @@
         {
           KeyValuePair::StreamEncoder attributes =
               device_info.GetAttributesEncoder();
-          attributes.WriteKey("version");
-          attributes.WriteValue("5.3.1");
+          attributes.WriteKey("version")
+              .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+          attributes.WriteValue("5.3.1")
+              .IgnoreError();  // TODO(pwbug/387): Handle Status properly
         }
 
         {
           KeyValuePair::StreamEncoder attributes =
               device_info.GetAttributesEncoder();
-          attributes.WriteKey("chip");
-          attributes.WriteValue("left-soc");
+          attributes.WriteKey("chip")
+              .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+          attributes.WriteValue("left-soc")
+              .IgnoreError();  // TODO(pwbug/387): Handle Status properly
         }
 
-        device_info.WriteStatus(DeviceInfo::DeviceStatus::PANIC);
+        device_info.WriteStatus(DeviceInfo::DeviceStatus::PANIC)
+            .IgnoreError();  // TODO(pwbug/387): Handle Status properly
       }
     }
   }
 
   for (int i = 0; i < 5; ++i) {
     Proto::ID::StreamEncoder id = pigweed.GetIdEncoder();
-    id.WriteId(5 * i * i + 3 * i + 49);
+    id.WriteId(5 * i * i + 3 * i + 49)
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
   }
 
   // clang-format off
@@ -185,18 +203,22 @@
   std::byte encode_buffer[512];
 
   Crate::MemoryEncoder biggest_crate(encode_buffer);
-  biggest_crate.WriteName("Huge crate");
+  biggest_crate.WriteName("Huge crate")
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
 
   {
     Crate::StreamEncoder medium_crate = biggest_crate.GetSmallerCratesEncoder();
-    medium_crate.WriteName("Medium crate");
+    medium_crate.WriteName("Medium crate")
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
     {
       Crate::StreamEncoder small_crate = medium_crate.GetSmallerCratesEncoder();
-      small_crate.WriteName("Small crate");
+      small_crate.WriteName("Small crate")
+          .IgnoreError();  // TODO(pwbug/387): Handle Status properly
     }
     {
       Crate::StreamEncoder tiny_crate = medium_crate.GetSmallerCratesEncoder();
-      tiny_crate.WriteName("Tiny crate");
+      tiny_crate.WriteName("Tiny crate")
+          .IgnoreError();  // TODO(pwbug/387): Handle Status properly
     }
   }
 
@@ -232,7 +254,8 @@
   stream::MemoryWriter writer(encode_buffer);
   RepeatedTest::StreamEncoder repeated_test(writer, ByteSpan());
   for (int i = 0; i < 4; ++i) {
-    repeated_test.WriteUint32s(i * 16);
+    repeated_test.WriteUint32s(i * 16)
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
   }
 
   constexpr uint8_t expected_proto[] = {
@@ -251,7 +274,8 @@
   stream::MemoryWriter writer(encode_buffer);
   RepeatedTest::StreamEncoder repeated_test(writer, ByteSpan());
   constexpr uint32_t values[] = {0, 16, 32, 48};
-  repeated_test.WriteUint32s(values);
+  repeated_test.WriteUint32s(values)
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
 
   constexpr uint8_t expected_proto[] = {0x0a, 0x04, 0x00, 0x10, 0x20, 0x30};
   ConstByteSpan result = writer.WrittenData();
@@ -268,7 +292,8 @@
   RepeatedTest::StreamEncoder repeated_test(writer, ByteSpan());
   constexpr const char* strings[] = {"the", "quick", "brown", "fox"};
   for (const char* s : strings) {
-    repeated_test.WriteStrings(s);
+    repeated_test.WriteStrings(s)
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
   }
 
   constexpr uint8_t expected_proto[] = {
@@ -287,8 +312,10 @@
   RepeatedTest::MemoryEncoder repeated_test(encode_buffer);
   for (int i = 0; i < 3; ++i) {
     auto structs = repeated_test.GetStructsEncoder();
-    structs.WriteOne(i * 1);
-    structs.WriteTwo(i * 2);
+    structs.WriteOne(i * 1)
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+    structs.WriteTwo(i * 2)
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
   }
 
   // clang-format off
@@ -308,13 +335,14 @@
   std::byte encode_buffer[64];
 
   Foo::MemoryEncoder foo(encode_buffer);
-  foo.WriteInt(3);
+  foo.WriteInt(3).IgnoreError();  // TODO(pwbug/387): Handle Status properly
 
   {
     constexpr std::byte data[] = {
         std::byte(0xde), std::byte(0xad), std::byte(0xbe), std::byte(0xef)};
     Bar::StreamEncoder bar = foo.GetBarEncoder();
-    bar.WriteData(data);
+    bar.WriteData(data)
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
   }
 
   constexpr uint8_t expected_proto[] = {
@@ -333,14 +361,18 @@
   Period::MemoryEncoder period(encode_buffer);
   {
     imported::Timestamp::StreamEncoder start = period.GetStartEncoder();
-    start.WriteSeconds(1589501793);
-    start.WriteNanoseconds(511613110);
+    start.WriteSeconds(1589501793)
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+    start.WriteNanoseconds(511613110)
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
   }
 
   {
     imported::Timestamp::StreamEncoder end = period.GetEndEncoder();
-    end.WriteSeconds(1589501841);
-    end.WriteNanoseconds(490367432);
+    end.WriteSeconds(1589501841)
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+    end.WriteNanoseconds(490367432)
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
   }
 
   EXPECT_EQ(period.status(), OkStatus());
@@ -352,8 +384,10 @@
   std::array<const int64_t, 2> repeated = {0, 1};
   stream::MemoryWriter writer(encode_buffer);
   Packed::StreamEncoder packed(writer, ByteSpan());
-  packed.WriteRep(std::span<const int64_t>(repeated));
-  packed.WritePacked("packed");
+  packed.WriteRep(std::span<const int64_t>(repeated))
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  packed.WritePacked("packed")
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
 
   EXPECT_EQ(packed.status(), OkStatus());
 }
diff --git a/pw_protobuf/decoder_test.cc b/pw_protobuf/decoder_test.cc
index c77e990..90d644a 100644
--- a/pw_protobuf/decoder_test.cc
+++ b/pw_protobuf/decoder_test.cc
@@ -28,22 +28,28 @@
 
     switch (field_number) {
       case 1:
-        decoder.ReadInt32(&test_int32);
+        decoder.ReadInt32(&test_int32)
+            .IgnoreError();  // TODO(pwbug/387): Handle Status properly
         break;
       case 2:
-        decoder.ReadSint32(&test_sint32);
+        decoder.ReadSint32(&test_sint32)
+            .IgnoreError();  // TODO(pwbug/387): Handle Status properly
         break;
       case 3:
-        decoder.ReadBool(&test_bool);
+        decoder.ReadBool(&test_bool)
+            .IgnoreError();  // TODO(pwbug/387): Handle Status properly
         break;
       case 4:
-        decoder.ReadDouble(&test_double);
+        decoder.ReadDouble(&test_double)
+            .IgnoreError();  // TODO(pwbug/387): Handle Status properly
         break;
       case 5:
-        decoder.ReadFixed32(&test_fixed32);
+        decoder.ReadFixed32(&test_fixed32)
+            .IgnoreError();  // TODO(pwbug/387): Handle Status properly
         break;
       case 6:
-        decoder.ReadString(&str);
+        decoder.ReadString(&str)
+            .IgnoreError();  // TODO(pwbug/387): Handle Status properly
         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 c98ce85..6dac677f 100644
--- a/pw_protobuf/encoder.cc
+++ b/pw_protobuf/encoder.cc
@@ -112,15 +112,18 @@
   PW_TRY(UpdateStatusForWrite(
       field_number, WireType::kVarint, varint::EncodedSize(value)));
 
-  WriteVarint(MakeKey(field_number, WireType::kVarint));
+  WriteVarint(MakeKey(field_number, WireType::kVarint))
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
   return WriteVarint(value);
 }
 
 Status StreamEncoder::WriteLengthDelimitedField(uint32_t field_number,
                                                 ConstByteSpan data) {
   PW_TRY(UpdateStatusForWrite(field_number, WireType::kDelimited, data.size()));
-  WriteVarint(MakeKey(field_number, WireType::kDelimited));
-  WriteVarint(data.size_bytes());
+  WriteVarint(MakeKey(field_number, WireType::kDelimited))
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  WriteVarint(data.size_bytes())
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
   if (Status status = writer_.Write(data); !status.ok()) {
     status_ = status;
   }
@@ -133,7 +136,8 @@
 
   PW_TRY(UpdateStatusForWrite(field_number, type, data.size()));
 
-  WriteVarint(MakeKey(field_number, type));
+  WriteVarint(MakeKey(field_number, type))
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
   if (Status status = writer_.Write(data); !status.ok()) {
     status_ = status;
   }
@@ -174,8 +178,10 @@
 
   PW_TRY(UpdateStatusForWrite(
       field_number, WireType::kDelimited, values.size_bytes()));
-  WriteVarint(MakeKey(field_number, WireType::kDelimited));
-  WriteVarint(values.size_bytes());
+  WriteVarint(MakeKey(field_number, WireType::kDelimited))
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  WriteVarint(values.size_bytes())
+      .IgnoreError();  // TODO(pwbug/387): 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 34cab1f..d8e5760 100644
--- a/pw_protobuf/encoder_fuzzer.cc
+++ b/pw_protobuf/encoder_fuzzer.cc
@@ -150,112 +150,166 @@
   while (provider.remaining_bytes() != 0) {
     switch (provider.ConsumeEnum<FieldType>()) {
       case kUint32:
-        encoder.WriteUint32(provider.ConsumeIntegral<uint32_t>(),
-                            provider.ConsumeIntegral<uint32_t>());
+        encoder
+            .WriteUint32(provider.ConsumeIntegral<uint32_t>(),
+                         provider.ConsumeIntegral<uint32_t>())
+            .IgnoreError();  // TODO(pwbug/387): Handle Status properly
         break;
       case kPackedUint32:
-        encoder.WritePackedUint32(provider.ConsumeIntegral<uint32_t>(),
-                                  ConsumeSpan<uint32_t>(&provider, &u32s));
+        encoder
+            .WritePackedUint32(provider.ConsumeIntegral<uint32_t>(),
+                               ConsumeSpan<uint32_t>(&provider, &u32s))
+            .IgnoreError();  // TODO(pwbug/387): Handle Status properly
         break;
       case kUint64:
-        encoder.WriteUint64(provider.ConsumeIntegral<uint32_t>(),
-                            provider.ConsumeIntegral<uint64_t>());
+        encoder
+            .WriteUint64(provider.ConsumeIntegral<uint32_t>(),
+                         provider.ConsumeIntegral<uint64_t>())
+            .IgnoreError();  // TODO(pwbug/387): Handle Status properly
         break;
       case kPackedUint64:
-        encoder.WritePackedUint64(provider.ConsumeIntegral<uint32_t>(),
-                                  ConsumeSpan<uint64_t>(&provider, &u64s));
+        encoder
+            .WritePackedUint64(provider.ConsumeIntegral<uint32_t>(),
+                               ConsumeSpan<uint64_t>(&provider, &u64s))
+            .IgnoreError();  // TODO(pwbug/387): Handle Status properly
         break;
       case kInt32:
-        encoder.WriteInt32(provider.ConsumeIntegral<uint32_t>(),
-                           provider.ConsumeIntegral<int32_t>());
+        encoder
+            .WriteInt32(provider.ConsumeIntegral<uint32_t>(),
+                        provider.ConsumeIntegral<int32_t>())
+            .IgnoreError();  // TODO(pwbug/387): Handle Status properly
         break;
       case kPackedInt32:
-        encoder.WritePackedInt32(provider.ConsumeIntegral<uint32_t>(),
-                                 ConsumeSpan<int32_t>(&provider, &s32s));
+        encoder
+            .WritePackedInt32(provider.ConsumeIntegral<uint32_t>(),
+                              ConsumeSpan<int32_t>(&provider, &s32s))
+            .IgnoreError();  // TODO(pwbug/387): Handle Status properly
         break;
       case kInt64:
-        encoder.WriteInt64(provider.ConsumeIntegral<uint32_t>(),
-                           provider.ConsumeIntegral<int64_t>());
+        encoder
+            .WriteInt64(provider.ConsumeIntegral<uint32_t>(),
+                        provider.ConsumeIntegral<int64_t>())
+            .IgnoreError();  // TODO(pwbug/387): Handle Status properly
         break;
       case kPackedInt64:
-        encoder.WritePackedInt64(provider.ConsumeIntegral<uint32_t>(),
-                                 ConsumeSpan<int64_t>(&provider, &s64s));
+        encoder
+            .WritePackedInt64(provider.ConsumeIntegral<uint32_t>(),
+                              ConsumeSpan<int64_t>(&provider, &s64s))
+            .IgnoreError();  // TODO(pwbug/387): Handle Status properly
         break;
       case kSint32:
-        encoder.WriteSint32(provider.ConsumeIntegral<uint32_t>(),
-                            provider.ConsumeIntegral<int32_t>());
+        encoder
+            .WriteSint32(provider.ConsumeIntegral<uint32_t>(),
+                         provider.ConsumeIntegral<int32_t>())
+            .IgnoreError();  // TODO(pwbug/387): Handle Status properly
         break;
       case kPackedSint32:
-        encoder.WritePackedSint32(provider.ConsumeIntegral<uint32_t>(),
-                                  ConsumeSpan<int32_t>(&provider, &s32s));
+        encoder
+            .WritePackedSint32(provider.ConsumeIntegral<uint32_t>(),
+                               ConsumeSpan<int32_t>(&provider, &s32s))
+            .IgnoreError();  // TODO(pwbug/387): Handle Status properly
         break;
       case kSint64:
-        encoder.WriteSint64(provider.ConsumeIntegral<uint32_t>(),
-                            provider.ConsumeIntegral<int64_t>());
+        encoder
+            .WriteSint64(provider.ConsumeIntegral<uint32_t>(),
+                         provider.ConsumeIntegral<int64_t>())
+            .IgnoreError();  // TODO(pwbug/387): Handle Status properly
         break;
       case kPackedSint64:
-        encoder.WritePackedSint64(provider.ConsumeIntegral<uint32_t>(),
-                                  ConsumeSpan<int64_t>(&provider, &s64s));
+        encoder
+            .WritePackedSint64(provider.ConsumeIntegral<uint32_t>(),
+                               ConsumeSpan<int64_t>(&provider, &s64s))
+            .IgnoreError();  // TODO(pwbug/387): Handle Status properly
         break;
       case kBool:
-        encoder.WriteBool(provider.ConsumeIntegral<uint32_t>(),
-                          provider.ConsumeBool());
+        encoder
+            .WriteBool(provider.ConsumeIntegral<uint32_t>(),
+                       provider.ConsumeBool())
+            .IgnoreError();  // TODO(pwbug/387): Handle Status properly
         break;
       case kFixed32:
-        encoder.WriteFixed32(provider.ConsumeIntegral<uint32_t>(),
-                             provider.ConsumeIntegral<uint32_t>());
+        encoder
+            .WriteFixed32(provider.ConsumeIntegral<uint32_t>(),
+                          provider.ConsumeIntegral<uint32_t>())
+            .IgnoreError();  // TODO(pwbug/387): Handle Status properly
         break;
       case kPackedFixed32:
-        encoder.WritePackedFixed32(provider.ConsumeIntegral<uint32_t>(),
-                                   ConsumeSpan<uint32_t>(&provider, &u32s));
+        encoder
+            .WritePackedFixed32(provider.ConsumeIntegral<uint32_t>(),
+                                ConsumeSpan<uint32_t>(&provider, &u32s))
+            .IgnoreError();  // TODO(pwbug/387): Handle Status properly
         break;
       case kFixed64:
-        encoder.WriteFixed64(provider.ConsumeIntegral<uint32_t>(),
-                             provider.ConsumeIntegral<uint64_t>());
+        encoder
+            .WriteFixed64(provider.ConsumeIntegral<uint32_t>(),
+                          provider.ConsumeIntegral<uint64_t>())
+            .IgnoreError();  // TODO(pwbug/387): Handle Status properly
         break;
       case kPackedFixed64:
-        encoder.WritePackedFixed64(provider.ConsumeIntegral<uint32_t>(),
-                                   ConsumeSpan<uint64_t>(&provider, &u64s));
+        encoder
+            .WritePackedFixed64(provider.ConsumeIntegral<uint32_t>(),
+                                ConsumeSpan<uint64_t>(&provider, &u64s))
+            .IgnoreError();  // TODO(pwbug/387): Handle Status properly
         break;
       case kSfixed32:
-        encoder.WriteSfixed32(provider.ConsumeIntegral<uint32_t>(),
-                              provider.ConsumeIntegral<int32_t>());
+        encoder
+            .WriteSfixed32(provider.ConsumeIntegral<uint32_t>(),
+                           provider.ConsumeIntegral<int32_t>())
+            .IgnoreError();  // TODO(pwbug/387): Handle Status properly
         break;
       case kPackedSfixed32:
-        encoder.WritePackedSfixed32(provider.ConsumeIntegral<uint32_t>(),
-                                    ConsumeSpan<int32_t>(&provider, &s32s));
+        encoder
+            .WritePackedSfixed32(provider.ConsumeIntegral<uint32_t>(),
+                                 ConsumeSpan<int32_t>(&provider, &s32s))
+            .IgnoreError();  // TODO(pwbug/387): Handle Status properly
         break;
       case kSfixed64:
-        encoder.WriteSfixed64(provider.ConsumeIntegral<uint32_t>(),
-                              provider.ConsumeIntegral<int64_t>());
+        encoder
+            .WriteSfixed64(provider.ConsumeIntegral<uint32_t>(),
+                           provider.ConsumeIntegral<int64_t>())
+            .IgnoreError();  // TODO(pwbug/387): Handle Status properly
         break;
       case kPackedSfixed64:
-        encoder.WritePackedSfixed64(provider.ConsumeIntegral<uint32_t>(),
-                                    ConsumeSpan<int64_t>(&provider, &s64s));
+        encoder
+            .WritePackedSfixed64(provider.ConsumeIntegral<uint32_t>(),
+                                 ConsumeSpan<int64_t>(&provider, &s64s))
+            .IgnoreError();  // TODO(pwbug/387): Handle Status properly
         break;
       case kFloat:
-        encoder.WriteFloat(provider.ConsumeIntegral<uint32_t>(),
-                           provider.ConsumeFloatingPoint<float>());
+        encoder
+            .WriteFloat(provider.ConsumeIntegral<uint32_t>(),
+                        provider.ConsumeFloatingPoint<float>())
+            .IgnoreError();  // TODO(pwbug/387): Handle Status properly
         break;
       case kPackedFloat:
-        encoder.WritePackedFloat(provider.ConsumeIntegral<uint32_t>(),
-                                 ConsumeSpan<float>(&provider, &floats));
+        encoder
+            .WritePackedFloat(provider.ConsumeIntegral<uint32_t>(),
+                              ConsumeSpan<float>(&provider, &floats))
+            .IgnoreError();  // TODO(pwbug/387): Handle Status properly
         break;
       case kDouble:
-        encoder.WriteDouble(provider.ConsumeIntegral<uint32_t>(),
-                            provider.ConsumeFloatingPoint<double>());
+        encoder
+            .WriteDouble(provider.ConsumeIntegral<uint32_t>(),
+                         provider.ConsumeFloatingPoint<double>())
+            .IgnoreError();  // TODO(pwbug/387): Handle Status properly
         break;
       case kPackedDouble:
-        encoder.WritePackedDouble(provider.ConsumeIntegral<uint32_t>(),
-                                  ConsumeSpan<double>(&provider, &doubles));
+        encoder
+            .WritePackedDouble(provider.ConsumeIntegral<uint32_t>(),
+                               ConsumeSpan<double>(&provider, &doubles))
+            .IgnoreError();  // TODO(pwbug/387): Handle Status properly
         break;
       case kBytes:
-        encoder.WriteBytes(provider.ConsumeIntegral<uint32_t>(),
-                           ConsumeBytes(&provider, &bytes));
+        encoder
+            .WriteBytes(provider.ConsumeIntegral<uint32_t>(),
+                        ConsumeBytes(&provider, &bytes))
+            .IgnoreError();  // TODO(pwbug/387): Handle Status properly
         break;
       case kString:
-        encoder.WriteString(provider.ConsumeIntegral<uint32_t>(),
-                            ConsumeString(&provider, &strings));
+        encoder
+            .WriteString(provider.ConsumeIntegral<uint32_t>(),
+                         ConsumeString(&provider, &strings))
+            .IgnoreError();  // TODO(pwbug/387): Handle Status properly
         break;
       case kPush:
         // Special "field". The marks the start of a nested message.
@@ -265,7 +319,8 @@
         // Special "field". this marks the end of a nested message. No attempt
         // is made to match pushes to pops, in order to test that the encoder
         // behaves correctly when they are mismatched.
-        encoder.Finalize();
+        encoder.Finalize()
+            .IgnoreError();  // TODO(pwbug/387): Handle Status properly
         break;
     }
   }
diff --git a/pw_protobuf/encoder_test.cc b/pw_protobuf/encoder_test.cc
index 66d3730..b6bc1b2 100644
--- a/pw_protobuf/encoder_test.cc
+++ b/pw_protobuf/encoder_test.cc
@@ -254,7 +254,8 @@
   // 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]);
+    encoder.WriteUint32(1, values[i])
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
   }
 
   constexpr uint8_t encoded_proto[] = {
@@ -273,7 +274,8 @@
 
   // repeated uint32 values = 1;
   constexpr uint32_t values[] = {0, 50, 100, 150, 200};
-  encoder.WritePackedUint32(1, values);
+  encoder.WritePackedUint32(1, values)
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
 
   constexpr uint8_t encoded_proto[] = {
       0x0a, 0x07, 0x00, 0x32, 0x64, 0x96, 0x01, 0xc8, 0x01};
@@ -291,7 +293,8 @@
   MemoryEncoder encoder(encode_buffer);
 
   constexpr uint32_t values[] = {0, 50, 100, 150, 200};
-  encoder.WritePackedUint32(1, values);
+  encoder.WritePackedUint32(1, values)
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
 
   EXPECT_EQ(encoder.status(), Status::ResourceExhausted());
 }
@@ -302,11 +305,13 @@
 
   // repeated fixed32 values = 1;
   constexpr uint32_t values[] = {0, 50, 100, 150, 200};
-  encoder.WritePackedFixed32(1, values);
+  encoder.WritePackedFixed32(1, values)
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
 
   // repeated fixed64 values64 = 2;
   constexpr uint64_t values64[] = {0x0102030405060708};
-  encoder.WritePackedFixed64(2, values64);
+  encoder.WritePackedFixed64(2, values64)
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
 
   constexpr uint8_t encoded_proto[] = {
       0x0a, 0x14, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x64,
@@ -326,7 +331,8 @@
 
   // repeated sint32 values = 1;
   constexpr int32_t values[] = {-100, -25, -1, 0, 1, 25, 100};
-  encoder.WritePackedSint32(1, values);
+  encoder.WritePackedSint32(1, values)
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
 
   constexpr uint8_t encoded_proto[] = {
       0x0a, 0x09, 0xc7, 0x01, 0x31, 0x01, 0x00, 0x02, 0x32, 0xc8, 0x01};
@@ -389,7 +395,7 @@
   MemoryEncoder parent(encode_buffer);
   {
     StreamEncoder child = parent.GetNestedEncoder(kTestProtoNestedField);
-    child.Finalize();
+    child.Finalize().IgnoreError();  // TODO(pwbug/387): Handle Status properly
     ASSERT_EQ(child.status(), Status::Unavailable());
   }
 }
diff --git a/pw_protobuf/find_test.cc b/pw_protobuf/find_test.cc
index 1dd4789..669e7d0 100644
--- a/pw_protobuf/find_test.cc
+++ b/pw_protobuf/find_test.cc
@@ -45,7 +45,8 @@
   FindDecodeHandler finder(3);
 
   decoder.set_handler(&finder);
-  decoder.Decode(std::as_bytes(std::span(encoded_proto)));
+  decoder.Decode(std::as_bytes(std::span(encoded_proto)))
+      .IgnoreError(); // TODO(pwbug/387): Handle Status properly
 
   EXPECT_TRUE(finder.found());
   EXPECT_TRUE(decoder.cancelled());
@@ -56,7 +57,8 @@
   FindDecodeHandler finder(8);
 
   decoder.set_handler(&finder);
-  decoder.Decode(std::as_bytes(std::span(encoded_proto)));
+  decoder.Decode(std::as_bytes(std::span(encoded_proto)))
+      .IgnoreError(); // TODO(pwbug/387): Handle Status properly
 
   EXPECT_FALSE(finder.found());
   EXPECT_FALSE(decoder.cancelled());
@@ -68,7 +70,8 @@
   FindDecodeHandler finder(7, &nested_finder);
 
   decoder.set_handler(&finder);
-  decoder.Decode(std::as_bytes(std::span(encoded_proto)));
+  decoder.Decode(std::as_bytes(std::span(encoded_proto)))
+      .IgnoreError(); // TODO(pwbug/387): Handle Status properly
 
   EXPECT_TRUE(finder.found());
   EXPECT_TRUE(nested_finder.found());
@@ -81,7 +84,8 @@
   FindDecodeHandler finder(7, &nested_finder);
 
   decoder.set_handler(&finder);
-  decoder.Decode(std::as_bytes(std::span(encoded_proto)));
+  decoder.Decode(std::as_bytes(std::span(encoded_proto)))
+      .IgnoreError(); // TODO(pwbug/387): Handle Status properly
 
   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 7bb1877..457709f 100644
--- a/pw_protobuf/public/pw_protobuf/encoder.h
+++ b/pw_protobuf/public/pw_protobuf/encoder.h
@@ -78,7 +78,9 @@
         parent_(nullptr),
         nested_field_number_(0),
         memory_writer_(scratch_buffer) {}
-  ~StreamEncoder() { Finalize(); }
+  ~StreamEncoder() {
+    Finalize().IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  }
 
   // Disallow copy/assign to avoid confusion about who owns the buffer.
   StreamEncoder& operator=(const StreamEncoder& other) = delete;
@@ -88,7 +90,8 @@
   // parent_ pointer to become invalid.
   StreamEncoder& operator=(StreamEncoder&& other) = delete;
 
-  // Forwards the conservative write limit of the underlying pw::stream::Writer.
+  // Forwards the conservative write limit of the underlying
+  // pw::stream::Writer.
   //
   // Precondition: Encoder has no active child encoder.
   size_t ConservativeWriteLimit() const {
@@ -452,13 +455,17 @@
       return status_;
     }
 
-    WriteVarint(MakeKey(field_number, WireType::kDelimited));
-    WriteVarint(payload_size);
+    WriteVarint(MakeKey(field_number, WireType::kDelimited))
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+    WriteVarint(payload_size)
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
     for (T value : values) {
       if (encode_type == VarintEncodeType::kZigZag) {
-        WriteZigzagVarint(static_cast<std::make_signed_t<T>>(value));
+        WriteZigzagVarint(static_cast<std::make_signed_t<T>>(value))
+            .IgnoreError();  // TODO(pwbug/387): Handle Status properly
       } else {
-        WriteVarint(value);
+        WriteVarint(value)
+            .IgnoreError();  // TODO(pwbug/387): Handle Status properly
       }
     }
 
@@ -530,7 +537,9 @@
 class MemoryEncoder : public StreamEncoder {
  public:
   constexpr MemoryEncoder(ByteSpan dest) : StreamEncoder(*this, dest) {}
-  ~MemoryEncoder() { Finalize(); }
+  ~MemoryEncoder() {
+    Finalize().IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  }
 
   // Disallow copy/assign to avoid confusion about who owns the buffer.
   MemoryEncoder(const MemoryEncoder& other) = delete;
diff --git a/pw_protobuf/varint_size_test.cc b/pw_protobuf/varint_size_test.cc
index d651cb7..d8e48df 100644
--- a/pw_protobuf/varint_size_test.cc
+++ b/pw_protobuf/varint_size_test.cc
@@ -31,7 +31,7 @@
   StreamEncoder nested = encoder.GetNestedEncoder(1);
   // 1 byte key + 1 byte size + 125 byte value = 127 byte nested length.
   EXPECT_EQ(nested.WriteBytes(2, bytes::Initialized<125>(0xaa)), OkStatus());
-  nested.Finalize();
+  nested.Finalize().IgnoreError();  // TODO(pwbug/387): Handle Status properly
 
   EXPECT_EQ(encoder.status(), OkStatus());
 }
@@ -47,7 +47,7 @@
   EXPECT_EQ(nested.WriteBytes(2, bytes::Initialized<126>(0xaa)),
             Status::ResourceExhausted());
   EXPECT_EQ(nested.WriteUint32(3, 42), Status::ResourceExhausted());
-  nested.Finalize();
+  nested.Finalize().IgnoreError();  // TODO(pwbug/387): Handle Status properly
 
   EXPECT_EQ(encoder.status(), Status::ResourceExhausted());
 }
@@ -64,7 +64,7 @@
   EXPECT_EQ(nested.WriteBytes(3, bytes::Initialized<60>(0xaa)), OkStatus());
   EXPECT_EQ(nested.WriteBytes(4, bytes::Initialized<60>(0xaa)),
             Status::ResourceExhausted());
-  nested.Finalize();
+  nested.Finalize().IgnoreError();  // TODO(pwbug/387): Handle Status properly
 
   EXPECT_EQ(encoder.status(), Status::ResourceExhausted());
 }
diff --git a/pw_ring_buffer/prefixed_entry_ring_buffer.cc b/pw_ring_buffer/prefixed_entry_ring_buffer.cc
index f98a4d3..5596fd5 100644
--- a/pw_ring_buffer/prefixed_entry_ring_buffer.cc
+++ b/pw_ring_buffer/prefixed_entry_ring_buffer.cc
@@ -216,7 +216,8 @@
   // Otherwise, pop the readers that have the largest value.
   for (Reader& reader : readers_) {
     if (reader.entry_count_ == entry_count) {
-      reader.PopFront();
+      reader.PopFront()
+          .IgnoreError();  // TODO(pwbug/387): 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 feb13e8..a372455 100644
--- a/pw_ring_buffer/prefixed_entry_ring_buffer_test.cc
+++ b/pw_ring_buffer/prefixed_entry_ring_buffer_test.cc
@@ -334,7 +334,8 @@
       // 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);
+        ring.PushBack(single_entry_buffer)
+            .IgnoreError();  // TODO(pwbug/387): Handle Status properly
       }
     }
 
@@ -352,7 +353,8 @@
       }
 
       // The ring buffer internally pushes the varint size byte.
-      ring.PushBack(single_entry_buffer);
+      ring.PushBack(single_entry_buffer)
+          .IgnoreError();  // TODO(pwbug/387): Handle Status properly
     }
 
     // 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 2aefba4..3556773 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
@@ -476,7 +476,8 @@
  public:
   PrefixedEntryRingBuffer(bool user_preamble = false)
       : PrefixedEntryRingBufferMulti(user_preamble) {
-    AttachReader(*this);
+    AttachReader(*this)
+        .IgnoreError();  // TODO(pwbug/387): 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 1e2eb72..5570469 100644
--- a/pw_ring_buffer/size_report/ring_buffer_multi.cc
+++ b/pw_ring_buffer/size_report/ring_buffer_multi.cc
@@ -35,7 +35,8 @@
   // Attach readers.
   pw::ring_buffer::PrefixedEntryRingBufferMulti::Reader readers[kReaderCount];
   for (auto& reader : readers) {
-    ring.AttachReader(reader);
+    ring.AttachReader(reader)
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
   }
 
   // Push entries until the buffer is full.
@@ -92,7 +93,8 @@
   }
 
   for (auto& reader : readers) {
-    ring.DetachReader(reader);
+    ring.DetachReader(reader)
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
   }
   ring.Clear();
   return 0;
diff --git a/pw_rpc/base_client_call.cc b/pw_rpc/base_client_call.cc
index 3c5409a..103ae03 100644
--- a/pw_rpc/base_client_call.cc
+++ b/pw_rpc/base_client_call.cc
@@ -34,7 +34,9 @@
     // If the call being assigned is active, replace it in the client's list
     // with a reference to the current object.
     other.Unregister();
-    other.channel_->client()->RegisterCall(*this);
+    other.channel_->client()
+        ->RegisterCall(*this)
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
   }
 
   return *this;
@@ -42,7 +44,8 @@
 
 void BaseClientCall::Cancel() {
   if (active()) {
-    channel_->Send(NewPacket(PacketType::CANCEL));
+    channel_->Send(NewPacket(PacketType::CANCEL))
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
   }
 }
 
@@ -69,7 +72,11 @@
   return Packet(type, channel_->id(), service_id_, method_id_, payload);
 }
 
-void BaseClientCall::Register() { channel_->client()->RegisterCall(*this); }
+void BaseClientCall::Register() {
+  channel_->client()
+      ->RegisterCall(*this)
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+}
 
 void BaseClientCall::Unregister() {
   if (active()) {
diff --git a/pw_rpc/base_client_call_test.cc b/pw_rpc/base_client_call_test.cc
index b13a1e4..0930e95 100644
--- a/pw_rpc/base_client_call_test.cc
+++ b/pw_rpc/base_client_call_test.cc
@@ -97,7 +97,8 @@
                       [](BaseClientCall&, const Packet&) {});
 
   constexpr std::byte payload[]{std::byte{0x08}, std::byte{0x39}};
-  call.SendPacket(payload);
+  call.SendPacket(payload)
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
 
   EXPECT_EQ(context.output().packet_count(), 1u);
   Packet packet = context.output().sent_packet();
diff --git a/pw_rpc/benchmark.cc b/pw_rpc/benchmark.cc
index ca20c78..7f5b93a 100644
--- a/pw_rpc/benchmark.cc
+++ b/pw_rpc/benchmark.cc
@@ -44,7 +44,8 @@
   reader_writer_.set_on_next([this](ConstByteSpan request) {
     Status status = reader_writer_.Write(request);
     if (!status.ok()) {
-      reader_writer_.Finish(status);
+      reader_writer_.Finish(status)
+          .IgnoreError();  // TODO(pwbug/387): Handle Status properly
     }
   });
 }
diff --git a/pw_rpc/client.cc b/pw_rpc/client.cc
index b49a9a3..ead04c1 100644
--- a/pw_rpc/client.cc
+++ b/pw_rpc/client.cc
@@ -62,7 +62,8 @@
 
   if (call == calls_.end()) {
     PW_LOG_WARN("RPC client received a packet for a request it did not make");
-    channel->Send(Packet::ClientError(packet, Status::FailedPrecondition()));
+    channel->Send(Packet::ClientError(packet, Status::FailedPrecondition()))
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
     return Status::NotFound();
   }
 
diff --git a/pw_rpc/packet.cc b/pw_rpc/packet.cc
index a6b98aa..7337b90 100644
--- a/pw_rpc/packet.cc
+++ b/pw_rpc/packet.cc
@@ -32,30 +32,36 @@
     switch (field) {
       case RpcPacket::Fields::TYPE: {
         uint32_t value;
-        decoder.ReadUint32(&value);
+        decoder.ReadUint32(&value)
+            .IgnoreError();  // TODO(pwbug/387): Handle Status properly
         packet.set_type(static_cast<PacketType>(value));
         break;
       }
 
       case RpcPacket::Fields::CHANNEL_ID:
-        decoder.ReadUint32(&packet.channel_id_);
+        decoder.ReadUint32(&packet.channel_id_)
+            .IgnoreError();  // TODO(pwbug/387): Handle Status properly
         break;
 
       case RpcPacket::Fields::SERVICE_ID:
-        decoder.ReadFixed32(&packet.service_id_);
+        decoder.ReadFixed32(&packet.service_id_)
+            .IgnoreError();  // TODO(pwbug/387): Handle Status properly
         break;
 
       case RpcPacket::Fields::METHOD_ID:
-        decoder.ReadFixed32(&packet.method_id_);
+        decoder.ReadFixed32(&packet.method_id_)
+            .IgnoreError();  // TODO(pwbug/387): Handle Status properly
         break;
 
       case RpcPacket::Fields::PAYLOAD:
-        decoder.ReadBytes(&packet.payload_);
+        decoder.ReadBytes(&packet.payload_)
+            .IgnoreError();  // TODO(pwbug/387): Handle Status properly
         break;
 
       case RpcPacket::Fields::STATUS: {
         uint32_t value;
-        decoder.ReadUint32(&value);
+        decoder.ReadUint32(&value)
+            .IgnoreError();  // TODO(pwbug/387): Handle Status properly
         packet.set_status(static_cast<Status::Code>(value));
         break;
       }
@@ -74,18 +80,24 @@
 
   // The payload is encoded first, as it may share the encode buffer.
   if (!payload_.empty()) {
-    rpc_packet.WritePayload(payload_);
+    rpc_packet.WritePayload(payload_)
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
   }
 
-  rpc_packet.WriteType(type_);
-  rpc_packet.WriteChannelId(channel_id_);
-  rpc_packet.WriteServiceId(service_id_);
-  rpc_packet.WriteMethodId(method_id_);
+  rpc_packet.WriteType(type_)
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  rpc_packet.WriteChannelId(channel_id_)
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  rpc_packet.WriteServiceId(service_id_)
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  rpc_packet.WriteMethodId(method_id_)
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
 
   // Status code 0 is OK. In protobufs, 0 is the default int value, so skip
   // encoding it to save two bytes in the output.
   if (status_.code() != 0) {
-    rpc_packet.WriteStatus(status_.code());
+    rpc_packet.WriteStatus(status_.code())
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
   }
 
   if (rpc_packet.status().ok()) {
diff --git a/pw_rpc/public/pw_rpc/channel.h b/pw_rpc/public/pw_rpc/channel.h
index 6394b55..d86649a 100644
--- a/pw_rpc/public/pw_rpc/channel.h
+++ b/pw_rpc/public/pw_rpc/channel.h
@@ -53,7 +53,8 @@
   virtual Status SendAndReleaseBuffer(std::span<const std::byte> buffer) = 0;
 
   void DiscardBuffer(std::span<const std::byte> buffer) {
-    SendAndReleaseBuffer(buffer.first(0));
+    SendAndReleaseBuffer(buffer.first(0))
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
   }
 
  private:
diff --git a/pw_rpc/public/pw_rpc/internal/responder.h b/pw_rpc/public/pw_rpc/internal/responder.h
index 52d4af0..09d5f08 100644
--- a/pw_rpc/public/pw_rpc/internal/responder.h
+++ b/pw_rpc/public/pw_rpc/internal/responder.h
@@ -48,7 +48,10 @@
  public:
   Responder(const Responder&) = delete;
 
-  ~Responder() { CloseAndSendResponse(OkStatus()).IgnoreError(); }
+  ~Responder() {
+    CloseAndSendResponse(OkStatus())
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  }
 
   Responder& operator=(const Responder&) = delete;
 
@@ -60,8 +63,8 @@
   uint32_t method_id() const;
 
   // Closes the Responder and sends a RESPONSE packet, if it is open. Returns
-  // the status from sending the packet, or FAILED_PRECONDITION if the Responder
-  // is not open.
+  // the status from sending the packet, or FAILED_PRECONDITION if the
+  // Responder is not open.
   Status CloseAndSendResponse(std::span<const std::byte> response,
                               Status status);
 
diff --git a/pw_rpc/public/pw_rpc/internal/test_method_context.h b/pw_rpc/public/pw_rpc/internal/test_method_context.h
index 1b23324..1b283c0 100644
--- a/pw_rpc/public/pw_rpc/internal/test_method_context.h
+++ b/pw_rpc/public/pw_rpc/internal/test_method_context.h
@@ -48,49 +48,57 @@
 
   void SendClientError(Status error) {
     std::byte packet[kNoPayloadPacketSizeBytes];
-    server_.ProcessPacket(Packet(PacketType::CLIENT_ERROR,
-                                 channel_.id(),
-                                 service_.id(),
-                                 kMethodId,
-                                 {},
-                                 error)
-                              .Encode(packet)
-                              .value(),
-                          output_);
+    server_
+        .ProcessPacket(Packet(PacketType::CLIENT_ERROR,
+                              channel_.id(),
+                              service_.id(),
+                              kMethodId,
+                              {},
+                              error)
+                           .Encode(packet)
+                           .value(),
+                       output_)
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
   }
 
   void SendCancel() {
     std::byte packet[kNoPayloadPacketSizeBytes];
-    server_.ProcessPacket(
-        Packet(PacketType::CANCEL, channel_.id(), service_.id(), kMethodId)
-            .Encode(packet)
-            .value(),
-        output_);
+    server_
+        .ProcessPacket(
+            Packet(PacketType::CANCEL, channel_.id(), service_.id(), kMethodId)
+                .Encode(packet)
+                .value(),
+            output_)
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
   }
 
  protected:
   template <size_t kMaxPayloadSize = 32>
   void SendClientStream(ConstByteSpan payload) {
     std::byte packet[kNoPayloadPacketSizeBytes + 3 + kMaxPayloadSize];
-    server_.ProcessPacket(Packet(PacketType::CLIENT_STREAM,
-                                 channel_.id(),
-                                 service_.id(),
-                                 kMethodId,
-                                 payload)
-                              .Encode(packet)
-                              .value(),
-                          output_);
+    server_
+        .ProcessPacket(Packet(PacketType::CLIENT_STREAM,
+                              channel_.id(),
+                              service_.id(),
+                              kMethodId,
+                              payload)
+                           .Encode(packet)
+                           .value(),
+                       output_)
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
   }
 
   void SendClientStreamEnd() {
     std::byte packet[kNoPayloadPacketSizeBytes];
-    server_.ProcessPacket(Packet(PacketType::CLIENT_STREAM_END,
-                                 channel_.id(),
-                                 service_.id(),
-                                 kMethodId)
-                              .Encode(packet)
-                              .value(),
-                          output_);
+    server_
+        .ProcessPacket(Packet(PacketType::CLIENT_STREAM_END,
+                              channel_.id(),
+                              service_.id(),
+                              kMethodId)
+                           .Encode(packet)
+                           .value(),
+                       output_)
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
   }
 
   template <typename... Args>
diff --git a/pw_rpc/raw/codegen_test.cc b/pw_rpc/raw/codegen_test.cc
index 889f863..6d7de57 100644
--- a/pw_rpc/raw/codegen_test.cc
+++ b/pw_rpc/raw/codegen_test.cc
@@ -26,8 +26,10 @@
   Vector<std::byte, 64> buffer(64);
   test::TestRequest::MemoryEncoder test_request(buffer);
 
-  test_request.WriteInteger(integer);
-  test_request.WriteStatusCode(status.code());
+  test_request.WriteInteger(integer)
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  test_request.WriteStatusCode(status.code())
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
 
   EXPECT_EQ(OkStatus(), test_request.status());
   buffer.resize(test_request.size());
@@ -38,7 +40,8 @@
   Vector<std::byte, 64> buffer(64);
   test::TestStreamResponse::MemoryEncoder test_response(buffer);
 
-  test_response.WriteNumber(number);
+  test_response.WriteNumber(number)
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
 
   EXPECT_EQ(OkStatus(), test_response.status());
   buffer.resize(test_response.size());
@@ -62,7 +65,8 @@
     }
 
     TestResponse::MemoryEncoder test_response(response);
-    test_response.WriteValue(integer + 1);
+    test_response.WriteValue(integer + 1)
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
 
     return StatusWithSize(status, test_response.size());
   }
@@ -78,19 +82,24 @@
       ByteSpan buffer = writer.PayloadBuffer();
 
       TestStreamResponse::MemoryEncoder test_stream_response(buffer);
-      test_stream_response.WriteNumber(i);
-      writer.Write(test_stream_response);
+      test_stream_response.WriteNumber(i)
+          .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+      writer.Write(test_stream_response)
+          .IgnoreError();  // TODO(pwbug/387): Handle Status properly
     }
 
-    writer.Finish(status);
+    writer.Finish(status)
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
   }
 
   void TestClientStreamRpc(ServerContext&, RawServerReader& reader) {
     last_reader_ = std::move(reader);
 
     last_reader_.set_on_next([this](ConstByteSpan payload) {
-      last_reader_.Finish(EncodeResponse(ReadInteger(payload)),
-                          Status::Unauthenticated());
+      last_reader_
+          .Finish(EncodeResponse(ReadInteger(payload)),
+                  Status::Unauthenticated())
+          .IgnoreError();  // TODO(pwbug/387): Handle Status properly
     });
   }
 
@@ -99,8 +108,10 @@
     last_reader_writer_ = std::move(reader_writer);
 
     last_reader_writer_.set_on_next([this](ConstByteSpan payload) {
-      last_reader_writer_.Write(EncodeResponse(ReadInteger(payload)));
-      last_reader_writer_.Finish(Status::NotFound());
+      last_reader_writer_.Write(EncodeResponse(ReadInteger(payload)))
+          .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+      last_reader_writer_.Finish(Status::NotFound())
+          .IgnoreError();  // TODO(pwbug/387): Handle Status properly
     });
   }
 
@@ -181,7 +192,8 @@
     switch (static_cast<test::TestResponse::Fields>(decoder.FieldNumber())) {
       case test::TestResponse::Fields::VALUE: {
         int32_t value;
-        decoder.ReadInt32(&value);
+        decoder.ReadInt32(&value)
+            .IgnoreError();  // TODO(pwbug/387): Handle Status properly
         EXPECT_EQ(value, 124);
         break;
       }
@@ -203,7 +215,8 @@
         static_cast<test::TestStreamResponse::Fields>(decoder.FieldNumber())) {
       case test::TestStreamResponse::Fields::NUMBER: {
         int32_t value;
-        decoder.ReadInt32(&value);
+        decoder.ReadInt32(&value)
+            .IgnoreError();  // TODO(pwbug/387): Handle Status properly
         EXPECT_EQ(value, 4);
         break;
       }
@@ -221,7 +234,8 @@
     switch (
         static_cast<test::TestStreamResponse::Fields>(decoder.FieldNumber())) {
       case test::TestStreamResponse::Fields::NUMBER: {
-        decoder.ReadInt32(&value);
+        decoder.ReadInt32(&value)
+            .IgnoreError();  // TODO(pwbug/387): Handle Status properly
         break;
       }
       default:
diff --git a/pw_rpc/raw/method.cc b/pw_rpc/raw/method.cc
index a86c2f1..bda16e0 100644
--- a/pw_rpc/raw/method.cc
+++ b/pw_rpc/raw/method.cc
@@ -40,7 +40,9 @@
 
   PW_LOG_WARN("Failed to send response packet for channel %u",
               unsigned(call.channel().id()));
-  call.channel().Send(Packet::ServerError(request, Status::Internal()));
+  call.channel()
+      .Send(Packet::ServerError(request, Status::Internal()))
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
 }
 
 void RawMethod::UnaryRequestInvoker(const Method& method,
diff --git a/pw_rpc/raw/method_test.cc b/pw_rpc/raw/method_test.cc
index 0a225ad..29770de 100644
--- a/pw_rpc/raw/method_test.cc
+++ b/pw_rpc/raw/method_test.cc
@@ -111,10 +111,12 @@
 
     switch (field) {
       case TestRequest::Fields::INTEGER:
-        decoder.ReadInt64(&last_request.integer);
+        decoder.ReadInt64(&last_request.integer)
+            .IgnoreError();  // TODO(pwbug/387): Handle Status properly
         break;
       case TestRequest::Fields::STATUS_CODE:
-        decoder.ReadUint32(&last_request.status_code);
+        decoder.ReadUint32(&last_request.status_code)
+            .IgnoreError();  // TODO(pwbug/387): Handle Status properly
         break;
     }
   }
@@ -126,7 +128,8 @@
   DecodeRawTestRequest(request);
 
   TestResponse::MemoryEncoder test_response(response);
-  test_response.WriteValue(last_request.integer + 5);
+  test_response.WriteValue(last_request.integer + 5)
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
   ConstByteSpan payload(test_response);
 
   return StatusWithSize::Unauthenticated(payload.size());
@@ -153,8 +156,10 @@
   std::byte buffer[16];
   stream::MemoryWriter writer(buffer);
   TestRequest::StreamEncoder test_request(writer, ByteSpan());
-  test_request.WriteInteger(456);
-  test_request.WriteStatusCode(7);
+  test_request.WriteInteger(456)
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  test_request.WriteStatusCode(7)
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
 
   const RawMethod& method = std::get<0>(FakeService::kMethods).raw_method();
   ServerContextForTest<FakeService> context(method);
@@ -177,8 +182,10 @@
   std::byte buffer[16];
   stream::MemoryWriter writer(buffer);
   TestRequest::StreamEncoder test_request(writer, ByteSpan());
-  test_request.WriteInteger(777);
-  test_request.WriteStatusCode(2);
+  test_request.WriteInteger(777)
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  test_request.WriteStatusCode(2)
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
 
   const RawMethod& method = std::get<1>(FakeService::kMethods).raw_method();
   ServerContextForTest<FakeService> context(method);
diff --git a/pw_rpc/raw/method_union_test.cc b/pw_rpc/raw/method_union_test.cc
index 5a7019b..a62b6ea 100644
--- a/pw_rpc/raw/method_union_test.cc
+++ b/pw_rpc/raw/method_union_test.cc
@@ -65,7 +65,8 @@
     DecodeRawTestRequest(request);
 
     TestResponse::MemoryEncoder test_response(response);
-    test_response.WriteValue(last_request.integer + 5);
+    test_response.WriteValue(last_request.integer + 5)
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
     ConstByteSpan payload(test_response);
 
     return StatusWithSize::Unauthenticated(payload.size());
@@ -88,10 +89,12 @@
 
       switch (field) {
         case TestRequest::Fields::INTEGER:
-          decoder.ReadInt64(&last_request.integer);
+          decoder.ReadInt64(&last_request.integer)
+              .IgnoreError();  // TODO(pwbug/387): Handle Status properly
           break;
         case TestRequest::Fields::STATUS_CODE:
-          decoder.ReadUint32(&last_request.status_code);
+          decoder.ReadUint32(&last_request.status_code)
+              .IgnoreError();  // TODO(pwbug/387): Handle Status properly
           break;
       }
     }
@@ -102,8 +105,10 @@
   std::byte buffer[16];
 
   TestRequest::MemoryEncoder test_request(buffer);
-  test_request.WriteInteger(456);
-  test_request.WriteStatusCode(7);
+  test_request.WriteInteger(456)
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  test_request.WriteStatusCode(7)
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
 
   const Method& method =
       std::get<1>(FakeGeneratedServiceImpl::kMethods).method();
@@ -127,8 +132,10 @@
   std::byte buffer[16];
 
   TestRequest::MemoryEncoder test_request(buffer);
-  test_request.WriteInteger(777);
-  test_request.WriteStatusCode(2);
+  test_request.WriteInteger(777)
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  test_request.WriteStatusCode(2)
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
 
   const Method& method =
       std::get<2>(FakeGeneratedServiceImpl::kMethods).method();
diff --git a/pw_rpc/raw/public/pw_rpc/raw/server_reader_writer.h b/pw_rpc/raw/public/pw_rpc/raw/server_reader_writer.h
index ed5d111..ee8b335 100644
--- a/pw_rpc/raw/public/pw_rpc/raw/server_reader_writer.h
+++ b/pw_rpc/raw/public/pw_rpc/raw/server_reader_writer.h
@@ -61,7 +61,10 @@
   ByteSpan PayloadBuffer() { return AcquirePayloadBuffer(); }
 
   // Releases a buffer acquired from PayloadBuffer() without sending any data.
-  void ReleaseBuffer() { ReleasePayloadBuffer(); }
+  void ReleaseBuffer() {
+    ReleasePayloadBuffer()
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  }
 
   // Sends a response packet with the given raw payload. The payload can either
   // be in the buffer previously acquired from PayloadBuffer(), or an arbitrary
diff --git a/pw_rpc/raw/server_reader_writer.cc b/pw_rpc/raw/server_reader_writer.cc
index 59f98ca..a39e979 100644
--- a/pw_rpc/raw/server_reader_writer.cc
+++ b/pw_rpc/raw/server_reader_writer.cc
@@ -30,7 +30,8 @@
   std::span<std::byte> buffer = AcquirePayloadBuffer();
 
   if (response.size() > buffer.size()) {
-    ReleasePayloadBuffer();
+    ReleasePayloadBuffer()
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
     return Status::OutOfRange();
   }
 
diff --git a/pw_rpc/responder.cc b/pw_rpc/responder.cc
index 063934a..5b13a6a 100644
--- a/pw_rpc/responder.cc
+++ b/pw_rpc/responder.cc
@@ -55,7 +55,8 @@
 
 Responder& Responder::operator=(Responder&& other) {
   // If this RPC was running, complete it before moving in the other RPC.
-  CloseAndSendResponse(OkStatus()).IgnoreError();
+  CloseAndSendResponse(OkStatus())
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
 
   // Move the state variables, which may change when the other client closes.
   rpc_state_ = other.rpc_state_;
@@ -96,7 +97,8 @@
   // If the Responder implementer or user forgets to release an acquired buffer
   // before finishing, release it here.
   if (!response_.empty()) {
-    ReleasePayloadBuffer();
+    ReleasePayloadBuffer()
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
   }
 
   Close();
diff --git a/pw_rpc/server.cc b/pw_rpc/server.cc
index 26874ed..ef08915 100644
--- a/pw_rpc/server.cc
+++ b/pw_rpc/server.cc
@@ -48,7 +48,8 @@
     // Only send an ERROR response if a valid channel ID was provided.
     if (packet.channel_id() != Channel::kUnassignedChannelId) {
       internal::Channel temp_channel(packet.channel_id(), &interface);
-      temp_channel.Send(Packet::ServerError(packet, Status::DataLoss()));
+      temp_channel.Send(Packet::ServerError(packet, Status::DataLoss()))
+          .IgnoreError();  // TODO(pwbug/387): Handle Status properly
     }
     return false;
   }
@@ -62,7 +63,9 @@
   // Since the responders remove themselves from the server in
   // CloseAndSendResponse(), close responders until no responders remain.
   while (!responders_.empty()) {
-    responders_.front().CloseAndSendResponse(OkStatus());
+    responders_.front()
+        .CloseAndSendResponse(OkStatus())
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
   }
 }
 
@@ -84,16 +87,18 @@
     if (channel == nullptr) {
       // If a channel can't be assigned, send a RESOURCE_EXHAUSTED error.
       internal::Channel temp_channel(packet.channel_id(), &interface);
-      temp_channel.Send(
-          Packet::ServerError(packet, Status::ResourceExhausted()));
-      return OkStatus();  // OK since the packet was handled
+      temp_channel
+          .Send(Packet::ServerError(packet, Status::ResourceExhausted()))
+          .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+      return OkStatus();   // OK since the packet was handled
     }
   }
 
   const auto [service, method] = FindMethod(packet);
 
   if (method == nullptr) {
-    channel->Send(Packet::ServerError(packet, Status::NotFound()));
+    channel->Send(Packet::ServerError(packet, Status::NotFound()))
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
     return OkStatus();
   }
 
@@ -132,7 +137,8 @@
       HandleClientStreamPacket(packet, *channel, responder);
       break;
     default:
-      channel->Send(Packet::ServerError(packet, Status::Unimplemented()));
+      channel->Send(Packet::ServerError(packet, Status::Unimplemented()))
+          .IgnoreError();  // TODO(pwbug/387): Handle Status properly
       PW_LOG_WARN("Unable to handle packet of type %u",
                   unsigned(packet.type()));
   }
@@ -159,17 +165,20 @@
   if (responder == responders_.end()) {
     PW_LOG_DEBUG(
         "Received client stream packet for method that is not pending");
-    channel.Send(Packet::ServerError(packet, Status::FailedPrecondition()));
+    channel.Send(Packet::ServerError(packet, Status::FailedPrecondition()))
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
     return;
   }
 
   if (!responder->has_client_stream()) {
-    channel.Send(Packet::ServerError(packet, Status::InvalidArgument()));
+    channel.Send(Packet::ServerError(packet, Status::InvalidArgument()))
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
     return;
   }
 
   if (!responder->client_stream_open()) {
-    channel.Send(Packet::ServerError(packet, Status::FailedPrecondition()));
+    channel.Send(Packet::ServerError(packet, Status::FailedPrecondition()))
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
     return;
   }
 
@@ -184,7 +193,8 @@
                                 internal::Channel& channel,
                                 ResponderIterator responder) const {
   if (responder == responders_.end()) {
-    channel.Send(Packet::ServerError(packet, Status::FailedPrecondition()));
+    channel.Send(Packet::ServerError(packet, Status::FailedPrecondition()))
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
     PW_LOG_DEBUG("Received CANCEL packet for method that is not pending");
   } else {
     responder->HandleError(Status::Cancelled());
diff --git a/pw_rpc/size_report/base.cc b/pw_rpc/size_report/base.cc
index e0fe44b..76043ab 100644
--- a/pw_rpc/size_report/base.cc
+++ b/pw_rpc/size_report/base.cc
@@ -27,8 +27,10 @@
   PW_LOG_INFO("We care about optimizing: %d", *unoptimizable);
 
   std::byte packet_buffer[128];
-  pw::sys_io::ReadBytes(packet_buffer);
-  pw::sys_io::WriteBytes(packet_buffer);
+  pw::sys_io::ReadBytes(packet_buffer)
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  pw::sys_io::WriteBytes(packet_buffer)
+      .IgnoreError();  // TODO(pwbug/387): 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 9fbc768..27e0c7d 100644
--- a/pw_rpc/size_report/server_only.cc
+++ b/pw_rpc/size_report/server_only.cc
@@ -51,10 +51,13 @@
   PW_LOG_INFO("We care about optimizing: %d", *unoptimizable);
 
   std::byte packet_buffer[128];
-  pw::sys_io::ReadBytes(packet_buffer);
-  pw::sys_io::WriteBytes(packet_buffer);
+  pw::sys_io::ReadBytes(packet_buffer)
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  pw::sys_io::WriteBytes(packet_buffer)
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
 
-  my_product::server.ProcessPacket(packet_buffer, my_product::output);
+  my_product::server.ProcessPacket(packet_buffer, my_product::output)
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
 
   return static_cast<int>(packet_buffer[92]);
 }
diff --git a/pw_rpc/test_rpc_server.cc b/pw_rpc/test_rpc_server.cc
index 7289eae..6d000f2 100644
--- a/pw_rpc/test_rpc_server.cc
+++ b/pw_rpc/test_rpc_server.cc
@@ -29,7 +29,8 @@
   pw::rpc::system_server::Server().RegisterService(benchmark_service);
 
   PW_LOG_INFO("Starting pw_rpc server");
-  pw::rpc::system_server::Start();
+  pw::rpc::system_server::Start()
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
 
   return 0;
 }
diff --git a/pw_snapshot/cpp_compile_test.cc b/pw_snapshot/cpp_compile_test.cc
index 457a23f..f9bec87 100644
--- a/pw_snapshot/cpp_compile_test.cc
+++ b/pw_snapshot/cpp_compile_test.cc
@@ -31,11 +31,16 @@
   {
     Metadata::StreamEncoder metadata_encoder =
         snapshot_encoder.GetMetadataEncoder();
-    metadata_encoder.WriteReason(
-        std::as_bytes(std::span("It just died, I didn't do anything")));
-    metadata_encoder.WriteFatal(true);
-    metadata_encoder.WriteProjectName(std::as_bytes(std::span("smart-shoe")));
-    metadata_encoder.WriteDeviceName(std::as_bytes(std::span("smart-shoe-p1")));
+    metadata_encoder
+        .WriteReason(
+            std::as_bytes(std::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(std::as_bytes(std::span("smart-shoe")))
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+    metadata_encoder.WriteDeviceName(std::as_bytes(std::span("smart-shoe-p1")))
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
   }
   ASSERT_TRUE(snapshot_encoder.status().ok());
 }
diff --git a/pw_status/BUILD.gn b/pw_status/BUILD.gn
index 0b51fd0..157472b 100644
--- a/pw_status/BUILD.gn
+++ b/pw_status/BUILD.gn
@@ -46,7 +46,7 @@
 }
 
 config("check_if_used_config") {
-  defines = [ "PW_STATUS_CHECK_IF_USED=1" ]
+  defines = [ "PW_STATUS_CFG_CHECK_IF_USED=1" ]
   visibility = [ ":*" ]
 }
 
diff --git a/pw_status/docs.rst b/pw_status/docs.rst
index 45c3975..69560b7 100644
--- a/pw_status/docs.rst
+++ b/pw_status/docs.rst
@@ -222,14 +222,12 @@
 
 Unused result warnings
 ----------------------
-If the ``PW_STATUS_CHECK_IF_USED`` option is enabled, ``pw::Status`` objects
+If the ``PW_STATUS_CFG_CHECK_IF_USED`` option is enabled, ``pw::Status`` objects
 returned from function calls must be used or it is a compilation error. To
 silence these warnings call ``IgnoreError()`` on the returned status object.
-
-``PW_STATUS_CHECK_IF_USED`` defaults to off. Pigweed and projects that use it
+``PW_STATUS_CFG_CHECK_IF_USED`` defaults to off. Pigweed and projects that use it
 will be updated to compile with this option enabled. After all projects have
-migrated, unused result warnings will be enabled unconditionally. See
-`pwbug/387 <https://bugs.chromium.org/p/pigweed/issues/detail?id=387>`_.
+migrated, unused result warnings will be enabled unconditionally.
 
 C compatibility
 ---------------
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 7a5ab2d..915e935 100644
--- a/pw_string/size_report/format_many_without_error_handling.cc
+++ b/pw_string/size_report/format_many_without_error_handling.cc
@@ -26,7 +26,9 @@
 
 #include "pw_string/format.h"
 
-#define FORMAT_CASE(...) pw::string::Format(buffer, __VA_ARGS__)
+#define FORMAT_CASE(...)                  \
+  pw::string::Format(buffer, __VA_ARGS__) \
+      .IgnoreError()  // TODO(pwbug/387): Handle Status properly
 
 #else  // std::snprintf
 
diff --git a/pw_trace/example/sample_app.cc b/pw_trace/example/sample_app.cc
index 8edefa9..aad1771 100644
--- a/pw_trace/example/sample_app.cc
+++ b/pw_trace/example/sample_app.cc
@@ -78,7 +78,8 @@
     // Buffer is used for the job queue.
     std::span<std::byte> buf_span = std::span<std::byte>(
         reinterpret_cast<std::byte*>(jobs_buffer_), sizeof(jobs_buffer_));
-    jobs_.SetBuffer(buf_span);
+    jobs_.SetBuffer(buf_span)
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
   }
   const char* Name() const override { return "Processing Task"; }
   bool ShouldRun() override { return jobs_.EntryCount() > 0; }
@@ -90,8 +91,9 @@
     size_t entry_count = jobs_.EntryCount();
 
     // Get the next job from the queue.
-    jobs_.PeekFront(job_bytes.bytes, &bytes_read);
-    jobs_.PopFront();
+    jobs_.PeekFront(job_bytes.bytes, &bytes_read)
+        .IgnoreError();              // TODO(pwbug/387): Handle Status properly
+    jobs_.PopFront().IgnoreError();  // TODO(pwbug/387): Handle Status properly
     Job& job = job_bytes.job;
 
     // Process the job
@@ -135,7 +137,8 @@
   }
   void AddJobInternal(uint32_t job_id, uint8_t value) {
     JobBytes job{.job = {.job_id = job_id, .value = value}};
-    jobs_.PushBack(job.bytes);
+    jobs_.PushBack(job.bytes)
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
   }
 } processing_task;
 
diff --git a/pw_trace_tokenized/example/filter.cc b/pw_trace_tokenized/example/filter.cc
index 573823a..3a5c5c36 100644
--- a/pw_trace_tokenized/example/filter.cc
+++ b/pw_trace_tokenized/example/filter.cc
@@ -55,7 +55,9 @@
   }
 
   // Register filter callback
-  pw::trace::Callbacks::Instance().RegisterEventCallback(TraceEventCallback);
+  pw::trace::Callbacks::Instance()
+      .RegisterEventCallback(TraceEventCallback)
+      .IgnoreError();  // TODO(pwbug/387): 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 5c2d783..7527143 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
@@ -29,16 +29,20 @@
 class TraceToFile {
  public:
   TraceToFile(const char* file_name) {
-    Callbacks::Instance().RegisterSink(TraceSinkStartBlock,
-                                       TraceSinkAddBytes,
-                                       TraceSinkEndBlock,
-                                       &out_,
-                                       &sink_handle_);
+    Callbacks::Instance()
+        .RegisterSink(TraceSinkStartBlock,
+                      TraceSinkAddBytes,
+                      TraceSinkEndBlock,
+                      &out_,
+                      &sink_handle_)
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
     out_.open(file_name, std::ios::out | std::ios::binary);
   }
 
   ~TraceToFile() {
-    Callbacks::Instance().UnregisterSink(sink_handle_);
+    Callbacks::Instance()
+        .UnregisterSink(sink_handle_)
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
     out_.close();
   }
 
diff --git a/pw_trace_tokenized/example/trigger.cc b/pw_trace_tokenized/example/trigger.cc
index 011ec5f..91c83ff 100644
--- a/pw_trace_tokenized/example/trigger.cc
+++ b/pw_trace_tokenized/example/trigger.cc
@@ -77,8 +77,10 @@
   }
 
   // Register trigger callback
-  pw::trace::Callbacks::Instance().RegisterEventCallback(
-      TraceEventCallback, pw::trace::CallbacksImpl::kCallOnEveryEvent);
+  pw::trace::Callbacks::Instance()
+      .RegisterEventCallback(TraceEventCallback,
+                             pw::trace::CallbacksImpl::kCallOnEveryEvent)
+      .IgnoreError();  // TODO(pwbug/387): 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 90d119d..6d9f23d 100644
--- a/pw_trace_tokenized/public/pw_trace_tokenized/trace_callback.h
+++ b/pw_trace_tokenized/public/pw_trace_tokenized/trace_callback.h
@@ -212,18 +212,20 @@
       CallbacksImpl::CallOnEveryEvent called_on_every_event =
           CallbacksImpl::kCallOnlyWhenEnabled,
       void* user_data = nullptr) {
-    Callbacks::Instance().RegisterEventCallback(
-        event_callback, called_on_every_event, user_data);
+    Callbacks::Instance()
+        .RegisterEventCallback(event_callback, called_on_every_event, user_data)
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
   }
   RegisterCallbackWhenCreated(CallbacksImpl::SinkStartBlock sink_start,
                               CallbacksImpl::SinkAddBytes sink_add_bytes,
                               CallbacksImpl::SinkEndBlock sink_end,
                               void* user_data = nullptr) {
-    Callbacks::Instance().RegisterSink(
-        sink_start, sink_add_bytes, sink_end, user_data);
+    Callbacks::Instance()
+        .RegisterSink(sink_start, sink_add_bytes, sink_end, user_data)
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
   }
 };
 
 }  // namespace trace
 }  // namespace pw
-#endif  // __cplusplus
\ No newline at end of file
+#endif  // __cplusplus
diff --git a/pw_trace_tokenized/trace.cc b/pw_trace_tokenized/trace.cc
index 3769ca2..a3b9a66 100644
--- a/pw_trace_tokenized/trace.cc
+++ b/pw_trace_tokenized/trace.cc
@@ -229,7 +229,8 @@
 
 pw::Status CallbacksImpl::UnregisterAllSinks() {
   for (size_t sink_idx = 0; sink_idx < PW_TRACE_CONFIG_MAX_SINKS; sink_idx++) {
-    UnregisterSink(sink_idx);
+    UnregisterSink(sink_idx)
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
   }
   return PW_STATUS_OK;
 }
@@ -281,7 +282,8 @@
 
 pw::Status CallbacksImpl::UnregisterAllEventCallbacks() {
   for (size_t i = 0; i < PW_TRACE_CONFIG_MAX_EVENT_CALLBACKS; i++) {
-    UnregisterEventCallback(i);
+    UnregisterEventCallback(i)
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
   }
   return PW_STATUS_OK;
 }
diff --git a/pw_trace_tokenized/trace_buffer.cc b/pw_trace_tokenized/trace_buffer.cc
index 2a5fc5b..fc13103 100644
--- a/pw_trace_tokenized/trace_buffer.cc
+++ b/pw_trace_tokenized/trace_buffer.cc
@@ -27,9 +27,12 @@
 class TraceBuffer {
  public:
   TraceBuffer() {
-    ring_buffer_.SetBuffer(raw_buffer_);
-    Callbacks::Instance().RegisterSink(
-        TraceSinkStartBlock, TraceSinkAddBytes, TraceSinkEndBlock, this);
+    ring_buffer_.SetBuffer(raw_buffer_)
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+    Callbacks::Instance()
+        .RegisterSink(
+            TraceSinkStartBlock, TraceSinkAddBytes, TraceSinkEndBlock, this)
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
   }
 
   static void TraceSinkStartBlock(void* user_data, size_t size) {
@@ -59,8 +62,10 @@
     if (buffer->block_idx_ != buffer->block_size_) {
       return;  // Block is too large, skipping.
     }
-    buffer->ring_buffer_.PushBack(std::span<const std::byte>(
-        &buffer->current_block_[0], buffer->block_size_));
+    buffer->ring_buffer_
+        .PushBack(std::span<const std::byte>(&buffer->current_block_[0],
+                                             buffer->block_size_))
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
   }
 
   pw::ring_buffer::PrefixedEntryRingBuffer& RingBuffer() {
@@ -88,4 +93,4 @@
 }
 
 }  // namespace trace
-}  // namespace pw
\ No newline at end of file
+}  // namespace pw
diff --git a/pw_trace_tokenized/trace_buffer_log.cc b/pw_trace_tokenized/trace_buffer_log.cc
index adaf17a..325b57b 100644
--- a/pw_trace_tokenized/trace_buffer_log.cc
+++ b/pw_trace_tokenized/trace_buffer_log.cc
@@ -55,7 +55,8 @@
   PW_LOG_INFO("[TRACE] begin");
   while (trace_buffer->PeekFront(std::span(entry_buffer).subspan(1),
                                  &bytes_read) != pw::Status::OutOfRange()) {
-    trace_buffer->PopFront();
+    trace_buffer->PopFront()
+        .IgnoreError();  // TODO(pwbug/387): 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 e2327e2..20c9366 100644
--- a/pw_trace_tokenized/trace_buffer_log_test.cc
+++ b/pw_trace_tokenized/trace_buffer_log_test.cc
@@ -27,7 +27,8 @@
   PW_TRACE_SET_ENABLED(true);
   PW_TRACE_INSTANT("test1");
   PW_TRACE_INSTANT("test2");
-  pw::trace::DumpTraceBufferToLog();
+  pw::trace::DumpTraceBufferToLog()
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
 }
 
 TEST(TokenizedTrace, DumpLargeBuffer) {
@@ -39,5 +40,6 @@
   for (int i = 0; i < 100; i++) {
     PW_TRACE_INSTANT("test");
   }
-  pw::trace::DumpTraceBufferToLog();
+  pw::trace::DumpTraceBufferToLog()
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
 }
diff --git a/pw_trace_tokenized/trace_test.cc b/pw_trace_tokenized/trace_test.cc
index 616d908..d2dd316 100644
--- a/pw_trace_tokenized/trace_test.cc
+++ b/pw_trace_tokenized/trace_test.cc
@@ -56,21 +56,27 @@
 
   TraceTestInterface() {
     PW_TRACE_SET_ENABLED(true);
-    pw::trace::Callbacks::Instance().RegisterSink(TraceSinkStartBlock,
-                                                  TraceSinkAddBytes,
-                                                  TraceSinkEndBlock,
-                                                  this,
-                                                  &sink_handle_);
-    pw::trace::Callbacks::Instance().RegisterEventCallback(
-        TraceEventCallback,
-        pw::trace::CallbacksImpl::kCallOnlyWhenEnabled,
-        this,
-        &event_callback_handle_);
+    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
   }
   ~TraceTestInterface() {
-    pw::trace::Callbacks::Instance().UnregisterSink(sink_handle_);
-    pw::trace::Callbacks::Instance().UnregisterEventCallback(
-        event_callback_handle_);
+    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
   }
   // ActionOnEvent will perform a specific action within the callback when an
   // event matches one of the characteristics of event_match_.
@@ -568,7 +574,8 @@
   constexpr size_t kQueueSize = 5;
   pw::trace::internal::TraceQueue<kQueueSize> queue;
   constexpr size_t kTestNum = 1;
-  queue.TryPushBack(QUEUE_TESTS_ARGS(kTestNum));
+  queue.TryPushBack(QUEUE_TESTS_ARGS(kTestNum))
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
   EXPECT_FALSE(queue.IsEmpty());
   EXPECT_FALSE(queue.IsFull());
   EXPECT_TRUE(QUEUE_CHECK_RESULT(kQueueSize, queue.PeekFront(), kTestNum));
diff --git a/pw_transfer/chunk.cc b/pw_transfer/chunk.cc
index e1181e1..70e8863 100644
--- a/pw_transfer/chunk.cc
+++ b/pw_transfer/chunk.cc
@@ -80,28 +80,36 @@
 Result<ConstByteSpan> EncodeChunk(const Chunk& chunk, ByteSpan buffer) {
   ProtoChunk::MemoryEncoder encoder(buffer);
 
-  encoder.WriteTransferId(chunk.transfer_id);
+  encoder.WriteTransferId(chunk.transfer_id)
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
 
   if (chunk.pending_bytes.has_value()) {
-    encoder.WritePendingBytes(chunk.pending_bytes.value());
+    encoder.WritePendingBytes(chunk.pending_bytes.value())
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
   }
   if (chunk.max_chunk_size_bytes.has_value()) {
-    encoder.WriteMaxChunkSizeBytes(chunk.max_chunk_size_bytes.value());
+    encoder.WriteMaxChunkSizeBytes(chunk.max_chunk_size_bytes.value())
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
   }
   if (chunk.min_delay_microseconds.has_value()) {
-    encoder.WriteMinDelayMicroseconds(chunk.min_delay_microseconds.value());
+    encoder.WriteMinDelayMicroseconds(chunk.min_delay_microseconds.value())
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
   }
   if (chunk.offset != 0) {
-    encoder.WriteOffset(chunk.offset);
+    encoder.WriteOffset(chunk.offset)
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
   }
   if (!chunk.data.empty()) {
-    encoder.WriteData(chunk.data);
+    encoder.WriteData(chunk.data)
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
   }
   if (chunk.remaining_bytes.has_value()) {
-    encoder.WriteRemainingBytes(chunk.remaining_bytes.value());
+    encoder.WriteRemainingBytes(chunk.remaining_bytes.value())
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
   }
   if (chunk.status.has_value()) {
-    encoder.WriteStatus(chunk.status.value().code());
+    encoder.WriteStatus(chunk.status.value().code())
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
   }
 
   PW_TRY(encoder.status());
diff --git a/pw_transfer/test_rpc_server.cc b/pw_transfer/test_rpc_server.cc
index 41a8949..56ce685 100644
--- a/pw_transfer/test_rpc_server.cc
+++ b/pw_transfer/test_rpc_server.cc
@@ -94,7 +94,8 @@
   rpc::system_server::Server().RegisterService(transfer_service);
 
   PW_LOG_INFO("Starting pw_rpc server");
-  rpc::system_server::Start();
+  rpc::system_server::Start()
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
 }
 
 }  // namespace
diff --git a/pw_transfer/transfer.cc b/pw_transfer/transfer.cc
index a036430..9d68d58 100644
--- a/pw_transfer/transfer.cc
+++ b/pw_transfer/transfer.cc
@@ -44,7 +44,8 @@
   if (type_ == kRead) {
     handler_->FinalizeRead(status);
   } else {
-    handler_->FinalizeWrite(status);
+    handler_->FinalizeWrite(status)
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
   }
 
   handler_ = nullptr;
@@ -63,7 +64,8 @@
 void TransferService::Write(ServerContext&,
                             RawServerReaderWriter& reader_writer) {
   // TODO(frolv): Implement server-side write transfers.
-  reader_writer.Finish(Status::Unimplemented());
+  reader_writer.Finish(Status::Unimplemented())
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
 }
 
 void TransferService::SendStatusChunk(RawServerReaderWriter& stream,
@@ -76,7 +78,8 @@
   Result<ConstByteSpan> result =
       internal::EncodeChunk(chunk, stream.PayloadBuffer());
   if (result.ok()) {
-    stream.Write(result.value());
+    stream.Write(result.value())
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
   }
 }
 
@@ -90,8 +93,10 @@
   // Begin by doing a partial encode of all the metadata fields, leaving the
   // buffer with usable space for the chunk data at the end.
   Chunk::MemoryEncoder encoder(buffer);
-  encoder.WriteTransferId(context.transfer_id());
-  encoder.WriteOffset(context.offset());
+  encoder.WriteTransferId(context.transfer_id())
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+  encoder.WriteOffset(context.offset())
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
 
   // Reserve space for the data proto field overhead and use the remainder of
   // the buffer for the chunk data.
@@ -108,13 +113,15 @@
   Result<ByteSpan> data = context.reader().Read(data_buffer);
   if (data.status().IsOutOfRange()) {
     // No more data to read.
-    encoder.WriteRemainingBytes(0);
+    encoder.WriteRemainingBytes(0)
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
     context.set_pending_bytes(0);
   } else if (!data.ok()) {
     read_stream_.ReleaseBuffer();
     return false;
   } else {
-    encoder.WriteData(data.value());
+    encoder.WriteData(data.value())
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
     context.set_offset(context.offset() + data.value().size());
     context.set_pending_bytes(context.pending_bytes() - data.value().size());
   }
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 81018e0..7d7708b 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
@@ -37,7 +37,8 @@
     Event::MemoryEncoder event(writer_.PayloadBuffer());
     event_writer(event);
     if (event.status().ok()) {
-      writer_.Write(event);
+      writer_.Write(event)
+          .IgnoreError();  // TODO(pwbug/387): Handle Status properly
     }
   }
 
diff --git a/pw_unit_test/test_rpc_server.cc b/pw_unit_test/test_rpc_server.cc
index 6dbad78..571c9db 100644
--- a/pw_unit_test/test_rpc_server.cc
+++ b/pw_unit_test/test_rpc_server.cc
@@ -72,7 +72,8 @@
   pw::rpc::system_server::Server().RegisterService(unit_test_service);
 
   PW_LOG_INFO("Starting pw_rpc server");
-  pw::rpc::system_server::Start();
+  pw::rpc::system_server::Start()
+      .IgnoreError();  // TODO(pwbug/387): Handle Status properly
 
   return 0;
 }
diff --git a/pw_unit_test/unit_test_service.cc b/pw_unit_test/unit_test_service.cc
index 43bc1fd..6567216 100644
--- a/pw_unit_test/unit_test_service.cc
+++ b/pw_unit_test/unit_test_service.cc
@@ -38,7 +38,8 @@
   while ((status = decoder.Next()).ok()) {
     switch (static_cast<TestRunRequest::Fields>(decoder.FieldNumber())) {
       case TestRunRequest::Fields::REPORT_PASSED_EXPECTATIONS:
-        decoder.ReadBool(&verbose_);
+        decoder.ReadBool(&verbose_)
+            .IgnoreError();  // TODO(pwbug/387): Handle Status properly
         break;
 
       case TestRunRequest::Fields::TEST_SUITE: {
@@ -52,7 +53,8 @@
         } else {
           PW_LOG_ERROR("Maximum of %u test suite filters supported",
                        static_cast<unsigned>(suites_to_run.max_size()));
-          writer_.Finish(Status::InvalidArgument());
+          writer_.Finish(Status::InvalidArgument())
+              .IgnoreError();  // TODO(pwbug/387): Handle Status properly
           return;
         }
 
@@ -62,7 +64,8 @@
   }
 
   if (status != Status::OutOfRange()) {
-    writer_.Finish(status);
+    writer_.Finish(status)
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
     return;
   }
 
@@ -80,7 +83,7 @@
 
   PW_LOG_INFO("Unit test run complete");
 
-  writer_.Finish();
+  writer_.Finish().IgnoreError();  // TODO(pwbug/387): Handle Status properly
 }
 
 void UnitTestService::WriteTestRunStart() {
@@ -92,10 +95,14 @@
 void UnitTestService::WriteTestRunEnd(const RunTestsSummary& summary) {
   WriteEvent([&](Event::StreamEncoder& event) {
     TestRunEnd::StreamEncoder test_run_end = event.GetTestRunEndEncoder();
-    test_run_end.WritePassed(summary.passed_tests);
-    test_run_end.WriteFailed(summary.failed_tests);
-    test_run_end.WriteSkipped(summary.skipped_tests);
-    test_run_end.WriteDisabled(summary.disabled_tests);
+    test_run_end.WritePassed(summary.passed_tests)
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+    test_run_end.WriteFailed(summary.failed_tests)
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+    test_run_end.WriteSkipped(summary.skipped_tests)
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+    test_run_end.WriteDisabled(summary.disabled_tests)
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
   });
 }
 
@@ -103,15 +110,19 @@
   WriteEvent([&](Event::StreamEncoder& event) {
     TestCaseDescriptor::StreamEncoder descriptor =
         event.GetTestCaseStartEncoder();
-    descriptor.WriteSuiteName(test_case.suite_name);
-    descriptor.WriteTestName(test_case.test_name);
-    descriptor.WriteFileName(test_case.file_name);
+    descriptor.WriteSuiteName(test_case.suite_name)
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+    descriptor.WriteTestName(test_case.test_name)
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+    descriptor.WriteFileName(test_case.file_name)
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
   });
 }
 
 void UnitTestService::WriteTestCaseEnd(TestResult result) {
   WriteEvent([&](Event::StreamEncoder& event) {
-    event.WriteTestCaseEnd(static_cast<TestCaseResult>(result));
+    event.WriteTestCaseEnd(static_cast<TestCaseResult>(result))
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
   });
 }
 
@@ -119,9 +130,12 @@
   WriteEvent([&](Event::StreamEncoder& event) {
     TestCaseDescriptor::StreamEncoder descriptor =
         event.GetTestCaseDisabledEncoder();
-    descriptor.WriteSuiteName(test_case.suite_name);
-    descriptor.WriteTestName(test_case.test_name);
-    descriptor.WriteFileName(test_case.file_name);
+    descriptor.WriteSuiteName(test_case.suite_name)
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+    descriptor.WriteTestName(test_case.test_name)
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+    descriptor.WriteFileName(test_case.file_name)
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
   });
 }
 
@@ -134,11 +148,15 @@
   WriteEvent([&](Event::StreamEncoder& event) {
     TestCaseExpectation::StreamEncoder test_case_expectation =
         event.GetTestCaseExpectationEncoder();
-    test_case_expectation.WriteExpression(expectation.expression);
-    test_case_expectation.WriteEvaluatedExpression(
-        expectation.evaluated_expression);
-    test_case_expectation.WriteLineNumber(expectation.line_number);
-    test_case_expectation.WriteSuccess(expectation.success);
+    test_case_expectation.WriteExpression(expectation.expression)
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+    test_case_expectation
+        .WriteEvaluatedExpression(expectation.evaluated_expression)
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+    test_case_expectation.WriteLineNumber(expectation.line_number)
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
+    test_case_expectation.WriteSuccess(expectation.success)
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
   });
 }
 
diff --git a/pw_work_queue/work_queue_test.cc b/pw_work_queue/work_queue_test.cc
index d4a67c8..6b793e0 100644
--- a/pw_work_queue/work_queue_test.cc
+++ b/pw_work_queue/work_queue_test.cc
@@ -40,16 +40,21 @@
 
   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();
-    });
+    work_queue
+        .PushWork([&context] {
+          context.counter++;
+          PW_LOG_INFO("Send pong...");
+          context.worker_ping.release();
+        })
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
 
     // 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!");
-    });
+    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
 
     // Pong: wait for the callback to notify us from the worker thread.
     context.worker_ping.acquire();
@@ -79,26 +84,34 @@
   // 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"); });
+    work_queue.PushWork([] { PW_LOG_INFO("Chopping onions"); })
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
 
     // 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();
-    });
+    work_queue
+        .PushWork([&context_a] {
+          context_a.counter++;
+          context_a.worker_ping.release();
+        })
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
 
     // Other requests...
-    work_queue.PushWork([] { PW_LOG_INFO("Dicing carrots"); });
-    work_queue.PushWork([] { PW_LOG_INFO("Blanching spinach"); });
+    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
 
     // 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();
-    });
+    work_queue
+        .PushWork([&context_b] {
+          context_b.counter++;
+          context_b.worker_ping.release();
+        })
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
 
     // Other requests...
-    work_queue.PushWork([] { PW_LOG_INFO("Peeling potatoes"); });
+    work_queue.PushWork([] { PW_LOG_INFO("Peeling potatoes"); })
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
 
     // 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 507f246..0e2d0bc 100644
--- a/targets/host/system_rpc_server.cc
+++ b/targets/host/system_rpc_server.cc
@@ -50,7 +50,8 @@
 void Init() {
   log_basic::SetOutput([](std::string_view log) {
     std::fprintf(stderr, "%.*s\n", static_cast<int>(log.size()), log.data());
-    hdlc::WriteUIFrame(1, std::as_bytes(std::span(log)), socket_stream);
+    hdlc::WriteUIFrame(1, std::as_bytes(std::span(log)), socket_stream)
+        .IgnoreError();  // TODO(pwbug/387): Handle Status properly
   });
 
   PW_CHECK_OK(socket_stream.Serve(socket_port));
@@ -71,7 +72,8 @@
         if (auto result = decoder.Process(byte); result.ok()) {
           hdlc::Frame& frame = result.value();
           if (frame.address() == hdlc::kDefaultRpcAddress) {
-            server.ProcessPacket(frame.data(), hdlc_channel_output);
+            server.ProcessPacket(frame.data(), hdlc_channel_output)
+                .IgnoreError();  // TODO(pwbug/387): Handle Status properly
           }
         }
       }