diff --git a/quic/core/http/quic_header_list.cc b/quic/core/http/quic_header_list.cc
index f7f6567..305c908 100644
--- a/quic/core/http/quic_header_list.cc
+++ b/quic/core/http/quic_header_list.cc
@@ -32,7 +32,7 @@
 QuicHeaderList::~QuicHeaderList() {}
 
 void QuicHeaderList::OnHeaderBlockStart() {
-  QUIC_BUG_IF(current_header_list_size_ != 0)
+  QUIC_BUG_IF_V2(quic_bug_12518_1, current_header_list_size_ != 0)
       << "OnHeaderBlockStart called more than once!";
 }
 
diff --git a/quic/core/http/quic_server_session_base.cc b/quic/core/http/quic_server_session_base.cc
index f8c37ab..7746113 100644
--- a/quic/core/http/quic_server_session_base.cc
+++ b/quic/core/http/quic_server_session_base.cc
@@ -171,7 +171,7 @@
           bandwidth_estimate_sent_to_client_);
   const int32_t max_bw_estimate_bytes_per_second =
       BandwidthToCachedParameterBytesPerSecond(max_bandwidth_estimate);
-  QUIC_BUG_IF(max_bw_estimate_bytes_per_second < 0)
+  QUIC_BUG_IF_V2(quic_bug_12513_1, max_bw_estimate_bytes_per_second < 0)
       << max_bw_estimate_bytes_per_second;
   QUIC_BUG_IF_V2(quic_bug_10393_1, bw_estimate_bytes_per_second < 0)
       << bw_estimate_bytes_per_second;
@@ -230,7 +230,7 @@
 
 bool QuicServerSessionBase::ShouldCreateOutgoingBidirectionalStream() {
   if (!connection()->connected()) {
-    QUIC_BUG
+    QUIC_BUG_V2(quic_bug_12513_2)
         << "ShouldCreateOutgoingBidirectionalStream called when disconnected";
     return false;
   }
@@ -245,7 +245,7 @@
 
 bool QuicServerSessionBase::ShouldCreateOutgoingUnidirectionalStream() {
   if (!connection()->connected()) {
-    QUIC_BUG
+    QUIC_BUG_V2(quic_bug_12513_3)
         << "ShouldCreateOutgoingUnidirectionalStream called when disconnected";
     return false;
   }
diff --git a/quic/core/http/quic_spdy_session.cc b/quic/core/http/quic_spdy_session.cc
index a0cdc5c..a9aedd2 100644
--- a/quic/core/http/quic_spdy_session.cc
+++ b/quic/core/http/quic_spdy_session.cc
@@ -366,7 +366,8 @@
       return;
     }
 
-    QUIC_BUG_IF(session_->destruction_indicator() != 123456789)
+    QUIC_BUG_IF_V2(quic_bug_12477_1,
+                   session_->destruction_indicator() != 123456789)
         << "QuicSpdyStream use after free. "
         << session_->destruction_indicator() << QuicStackTrace();
 
@@ -517,11 +518,11 @@
 }
 
 QuicSpdySession::~QuicSpdySession() {
-  QUIC_BUG_IF(destruction_indicator_ != 123456789)
+  QUIC_BUG_IF_V2(quic_bug_12477_2, destruction_indicator_ != 123456789)
       << "QuicSpdySession use after free. " << destruction_indicator_
       << QuicStackTrace();
   destruction_indicator_ = 987654321;
-  QUIC_BUG_IF(!h3_datagram_registrations_.empty())
+  QUIC_BUG_IF_V2(quic_bug_12477_3, !h3_datagram_registrations_.empty())
       << "HTTP/3 datagram flow ID was not unregistered";
 }
 
@@ -712,7 +713,7 @@
 }
 
 size_t QuicSpdySession::ProcessHeaderData(const struct iovec& iov) {
-  QUIC_BUG_IF(destruction_indicator_ != 123456789)
+  QUIC_BUG_IF_V2(quic_bug_12477_4, destruction_indicator_ != 123456789)
       << "QuicSpdyStream use after free. " << destruction_indicator_
       << QuicStackTrace();
   return h2_deframer_.ProcessInput(static_cast<char*>(iov.iov_base),
@@ -754,7 +755,7 @@
 }
 
 void QuicSpdySession::OnHttp3GoAway(uint64_t id) {
-  QUIC_BUG_IF(!version().UsesHttp3())
+  QUIC_BUG_IF_V2(quic_bug_12477_5, !version().UsesHttp3())
       << "HTTP/3 GOAWAY received on version " << version();
 
   if (last_received_http3_goaway_id_.has_value() &&
@@ -867,7 +868,7 @@
   }
 
   if (!max_push_id_.has_value() || promised_stream_id > max_push_id_.value()) {
-    QUIC_BUG
+    QUIC_BUG_V2(quic_bug_12477_6)
         << "Server shouldn't send push id higher than client's MAX_PUSH_ID.";
     return;
   }
@@ -1727,13 +1728,13 @@
     QuicSpdySession::Http3DatagramVisitor* visitor) {
   QUICHE_DCHECK_NE(visitor, nullptr);
   auto insertion_result = h3_datagram_registrations_.insert({flow_id, visitor});
-  QUIC_BUG_IF(!insertion_result.second)
+  QUIC_BUG_IF_V2(quic_bug_12477_7, !insertion_result.second)
       << "Attempted to doubly register HTTP/3 flow ID " << flow_id;
 }
 
 void QuicSpdySession::UnregisterHttp3FlowId(QuicDatagramFlowId flow_id) {
   size_t num_erased = h3_datagram_registrations_.erase(flow_id);
-  QUIC_BUG_IF(num_erased != 1)
+  QUIC_BUG_IF_V2(quic_bug_12477_8, num_erased != 1)
       << "Attempted to unregister unknown HTTP/3 flow ID " << flow_id;
 }
 
diff --git a/quic/quic_transport/quic_transport_client_session.cc b/quic/quic_transport/quic_transport_client_session.cc
index 6838c4c..1d2ff4f 100644
--- a/quic/quic_transport/quic_transport_client_session.cc
+++ b/quic/quic_transport/quic_transport_client_session.cc
@@ -46,7 +46,8 @@
       origin_(origin),
       visitor_(visitor) {
   for (const ParsedQuicVersion& version : supported_versions) {
-    QUIC_BUG_IF(version.handshake_protocol != PROTOCOL_TLS1_3)
+    QUIC_BUG_IF_V2(quic_bug_12035_1,
+                   version.handshake_protocol != PROTOCOL_TLS1_3)
         << "QuicTransport requires TLS 1.3 handshake";
   }
   crypto_stream_ = std::make_unique<QuicCryptoClientStream>(
@@ -187,7 +188,7 @@
       writer.WriteUInt16(path.size()) && writer.WriteStringPiece(path);
   QUIC_BUG_IF_V2(quic_bug_10881_5, !success)
       << "Failed to serialize client indication";
-  QUIC_BUG_IF(writer.length() != buffer.length())
+  QUIC_BUG_IF_V2(quic_bug_12035_2, writer.length() != buffer.length())
       << "Serialized client indication has length different from expected";
   return buffer;
 }
@@ -213,7 +214,8 @@
   auto client_indication_owned = std::make_unique<ClientIndication>(
       /*stream_id=*/GetNextOutgoingUnidirectionalStreamId(), this,
       /*is_static=*/false, WRITE_UNIDIRECTIONAL);
-  QUIC_BUG_IF(client_indication_owned->id() != ClientIndicationStream())
+  QUIC_BUG_IF_V2(quic_bug_12035_3,
+                 client_indication_owned->id() != ClientIndicationStream())
       << "Client indication stream is " << client_indication_owned->id()
       << " instead of expected " << ClientIndicationStream();
   ClientIndication* client_indication = client_indication_owned.get();
diff --git a/quic/quic_transport/quic_transport_server_session.cc b/quic/quic_transport/quic_transport_server_session.cc
index e2cc59d..c945e12 100644
--- a/quic/quic_transport/quic_transport_server_session.cc
+++ b/quic/quic_transport/quic_transport_server_session.cc
@@ -50,7 +50,8 @@
                   /*num_expected_unidirectional_static_streams*/ 0),
       visitor_(visitor) {
   for (const ParsedQuicVersion& version : supported_versions) {
-    QUIC_BUG_IF(version.handshake_protocol != PROTOCOL_TLS1_3)
+    QUIC_BUG_IF_V2(quic_bug_12025_1,
+                   version.handshake_protocol != PROTOCOL_TLS1_3)
         << "QuicTransport requires TLS 1.3 handshake";
   }
 
