What changed, and why it matters
This commit only updates three text files that list the project's public API surface. It removes entries for modules, macros, and types that are no longer part of the public API. There is no actual source code change, no bug fix, and no security-related content.
No security action needed. Treat as routine API-snapshot maintenance. If the removed public API items are used by downstream crates, consider whether this is a semver-breaking change, but that is a compatibility concern, not a security issue.
Security signals we found
No strong security signals were identified.
Evidence from the diff
The diff updates generated API snapshot files (internals/api/all-features.txt, alloc-only.txt, no-features.txt). These files are typically produced by cargo-public-api or similar tooling to track API stability. The deletions reflect previously public items (bitcoin_internals::const_tools, bitcoin_internals::serde::SerializeBytesAsHex, bitcoin_internals::wrap_debug::WrapDebug, and several macros) being removed from the public API. No implementation code is modified.
Changed components
internals/api/all-features.txtinternals/api/alloc-only.txtinternals/api/no-features.txtInspect captured patch +0 / −144
diff --git a/internals/api/all-features.txt b/internals/api/all-features.txt
index 94f41fef..0433d406 100644
--- a/internals/api/all-features.txt
+++ b/internals/api/all-features.txt
@@ -143,10 +143,6 @@ pub const fn bitcoin_internals::const_casts::i16_to_i64(value: i16) -> i64
pub const fn bitcoin_internals::const_casts::u16_to_u32(value: u16) -> u32
pub const fn bitcoin_internals::const_casts::u16_to_u64(value: u16) -> u64
pub const fn bitcoin_internals::const_casts::u32_to_u64(value: u32) -> u64
-pub mod bitcoin_internals::const_tools
-pub macro bitcoin_internals::const_tools::concat_bytes_to_arr!
-pub macro bitcoin_internals::const_tools::cond_const!
-pub macro bitcoin_internals::const_tools::copy_byte_array_from_slice!
pub mod bitcoin_internals::error
pub mod bitcoin_internals::error::input_string
pub struct bitcoin_internals::error::input_string::CannotParse<'a, T: core::fmt::Display + ?core::marker::Sized>
@@ -311,40 +307,6 @@ impl<T> core::convert::From<T> for bitcoin_internals::script::EarlyEndOfScriptEr
pub fn bitcoin_internals::script::EarlyEndOfScriptError::from(t: T) -> T
pub fn bitcoin_internals::script::read_push_data_len(data: &mut core::slice::iter::Iter<'_, u8>, size: bitcoin_internals::script::PushDataLenLen) -> core::result::Result<usize, bitcoin_internals::script::EarlyEndOfScriptError>
pub mod bitcoin_internals::serde
-pub struct bitcoin_internals::serde::SerializeBytesAsHex<'a>(pub &'a [u8])
-impl serde::ser::Serialize for bitcoin_internals::serde::SerializeBytesAsHex<'_>
-pub fn bitcoin_internals::serde::SerializeBytesAsHex<'_>::serialize<S>(&self, serializer: S) -> core::result::Result<<S as serde::ser::Serializer>::Ok, <S as serde::ser::Serializer>::Error> where S: serde::ser::Serializer
-impl<'a> core::marker::Freeze for bitcoin_internals::serde::SerializeBytesAsHex<'a>
-impl<'a> core::marker::Send for bitcoin_internals::serde::SerializeBytesAsHex<'a>
-impl<'a> core::marker::Sync for bitcoin_internals::serde::SerializeBytesAsHex<'a>
-impl<'a> core::marker::Unpin for bitcoin_internals::serde::SerializeBytesAsHex<'a>
-impl<'a> core::marker::UnsafeUnpin for bitcoin_internals::serde::SerializeBytesAsHex<'a>
-impl<'a> core::panic::unwind_safe::RefUnwindSafe for bitcoin_internals::serde::SerializeBytesAsHex<'a>
-impl<'a> core::panic::unwind_safe::UnwindSafe for bitcoin_internals::serde::SerializeBytesAsHex<'a>
-impl<T, U> core::convert::Into<U> for bitcoin_internals::serde::SerializeBytesAsHex<'a> where U: core::convert::From<T>
-pub fn bitcoin_internals::serde::SerializeBytesAsHex<'a>::into(self) -> U
-impl<T, U> core::convert::TryFrom<U> for bitcoin_internals::serde::SerializeBytesAsHex<'a> where U: core::convert::Into<T>
-pub type bitcoin_internals::serde::SerializeBytesAsHex<'a>::Error = core::convert::Infallible
-pub fn bitcoin_internals::serde::SerializeBytesAsHex<'a>::try_from(value: U) -> core::result::Result<T, <T as core::convert::TryFrom<U>>::Error>
-impl<T, U> core::convert::TryInto<U> for bitcoin_internals::serde::SerializeBytesAsHex<'a> where U: core::convert::TryFrom<T>
-pub type bitcoin_internals::serde::SerializeBytesAsHex<'a>::Error = <U as core::convert::TryFrom<T>>::Error
-pub fn bitcoin_internals::serde::SerializeBytesAsHex<'a>::try_into(self) -> core::result::Result<U, <U as core::convert::TryFrom<T>>::Error>
-impl<T> core::any::Any for bitcoin_internals::serde::SerializeBytesAsHex<'a> where T: 'static + ?core::marker::Sized
-pub fn bitcoin_internals::serde::SerializeBytesAsHex<'a>::type_id(&self) -> core::any::TypeId
-impl<T> core::borrow::Borrow<T> for bitcoin_internals::serde::SerializeBytesAsHex<'a> where T: ?core::marker::Sized
-pub fn bitcoin_internals::serde::SerializeBytesAsHex<'a>::borrow(&self) -> &T
-impl<T> core::borrow::BorrowMut<T> for bitcoin_internals::serde::SerializeBytesAsHex<'a> where T: ?core::marker::Sized
-pub fn bitcoin_internals::serde::SerializeBytesAsHex<'a>::borrow_mut(&mut self) -> &mut T
-impl<T> core::convert::From<T> for bitcoin_internals::serde::SerializeBytesAsHex<'a>
-pub fn bitcoin_internals::serde::SerializeBytesAsHex<'a>::from(t: T) -> T
-pub trait bitcoin_internals::serde::IntoDeError: core::marker::Sized
-pub fn bitcoin_internals::serde::IntoDeError::into_de_error<E: serde::de::Error>(self, expected: core::option::Option<&dyn serde::de::Expected>) -> E
-pub fn bitcoin_internals::serde::IntoDeError::try_into_de_error<E>(self, expected: core::option::Option<&dyn serde::de::Expected>) -> core::result::Result<E, Self> where E: serde::de::Error
-impl bitcoin_internals::serde::IntoDeError for core::convert::Infallible
-pub fn core::convert::Infallible::into_de_error<E: serde::de::Error>(self, _expected: core::option::Option<&dyn serde::de::Expected>) -> E
-impl bitcoin_internals::serde::IntoDeError for core::num::error::ParseIntError
-pub fn core::num::error::ParseIntError::into_de_error<E: serde::de::Error>(self, expected: core::option::Option<&dyn serde::de::Expected>) -> E
-pub fn core::num::error::ParseIntError::try_into_de_error<E>(self, expected: core::option::Option<&dyn serde::de::Expected>) -> core::result::Result<E, Self> where E: serde::de::Error
pub mod bitcoin_internals::slice
pub trait bitcoin_internals::slice::SliceExt
pub type bitcoin_internals::slice::SliceExt::Item
@@ -360,48 +322,14 @@ pub fn [T]::bitcoin_as_chunks_mut<const N: usize>(&mut self) -> (&mut [[Self::It
pub fn [T]::get_array<const ARRAY_LEN: usize>(&self, offset: usize) -> core::option::Option<&[Self::Item; ARRAY_LEN]>
pub fn [T]::split_first_chunk<const ARRAY_LEN: usize>(&self) -> core::option::Option<(&[Self::Item; ARRAY_LEN], &[Self::Item])>
pub fn [T]::split_last_chunk<const ARRAY_LEN: usize>(&self) -> core::option::Option<(&[Self::Item], &[Self::Item; ARRAY_LEN])>
-pub mod bitcoin_internals::wrap_debug
-pub struct bitcoin_internals::wrap_debug::WrapDebug<F: core::ops::function::Fn(&mut core::fmt::Formatter<'_>) -> core::fmt::Result>(pub F)
-impl<F: core::ops::function::Fn(&mut core::fmt::Formatter<'_>) -> core::fmt::Result> core::fmt::Debug for bitcoin_internals::wrap_debug::WrapDebug<F>
-pub fn bitcoin_internals::wrap_debug::WrapDebug<F>::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
-impl<F> core::marker::Freeze for bitcoin_internals::wrap_debug::WrapDebug<F> where F: core::marker::Freeze
-impl<F> core::marker::Send for bitcoin_internals::wrap_debug::WrapDebug<F> where F: core::marker::Send
-impl<F> core::marker::Sync for bitcoin_internals::wrap_debug::WrapDebug<F> where F: core::marker::Sync
-impl<F> core::marker::Unpin for bitcoin_internals::wrap_debug::WrapDebug<F> where F: core::marker::Unpin
-impl<F> core::marker::UnsafeUnpin for bitcoin_internals::wrap_debug::WrapDebug<F> where F: core::marker::UnsafeUnpin
-impl<F> core::panic::unwind_safe::RefUnwindSafe for bitcoin_internals::wrap_debug::WrapDebug<F> where F: core::panic::unwind_safe::RefUnwindSafe
-impl<F> core::panic::unwind_safe::UnwindSafe for bitcoin_internals::wrap_debug::WrapDebug<F> where F: core::panic::unwind_safe::UnwindSafe
-impl<T, U> core::convert::Into<U> for bitcoin_internals::wrap_debug::WrapDebug<F> where U: core::convert::From<T>
-pub fn bitcoin_internals::wrap_debug::WrapDebug<F>::into(self) -> U
-impl<T, U> core::convert::TryFrom<U> for bitcoin_internals::wrap_debug::WrapDebug<F> where U: core::convert::Into<T>
-pub type bitcoin_internals::wrap_debug::WrapDebug<F>::Error = core::convert::Infallible
-pub fn bitcoin_internals::wrap_debug::WrapDebug<F>::try_from(value: U) -> core::result::Result<T, <T as core::convert::TryFrom<U>>::Error>
-impl<T, U> core::convert::TryInto<U> for bitcoin_internals::wrap_debug::WrapDebug<F> where U: core::convert::TryFrom<T>
-pub type bitcoin_internals::wrap_debug::WrapDebug<F>::Error = <U as core::convert::TryFrom<T>>::Error
-pub fn bitcoin_internals::wrap_debug::WrapDebug<F>::try_into(self) -> core::result::Result<U, <U as core::convert::TryFrom<T>>::Error>
-impl<T> core::any::Any for bitcoin_internals::wrap_debug::WrapDebug<F> where T: 'static + ?core::marker::Sized
-pub fn bitcoin_internals::wrap_debug::WrapDebug<F>::type_id(&self) -> core::any::TypeId
-impl<T> core::borrow::Borrow<T> for bitcoin_internals::wrap_debug::WrapDebug<F> where T: ?core::marker::Sized
-pub fn bitcoin_internals::wrap_debug::WrapDebug<F>::borrow(&self) -> &T
-impl<T> core::borrow::BorrowMut<T> for bitcoin_internals::wrap_debug::WrapDebug<F> where T: ?core::marker::Sized
-pub fn bitcoin_internals::wrap_debug::WrapDebug<F>::borrow_mut(&mut self) -> &mut T
-impl<T> core::convert::From<T> for bitcoin_internals::wrap_debug::WrapDebug<F>
-pub fn bitcoin_internals::wrap_debug::WrapDebug<F>::from(t: T) -> T
-pub macro bitcoin_internals::concat_bytes_to_arr!
-pub macro bitcoin_internals::cond_const!
pub macro bitcoin_internals::const_assert!
-pub macro bitcoin_internals::copy_byte_array_from_slice!
pub macro bitcoin_internals::impl_array_newtype!
-pub macro bitcoin_internals::impl_parse!
-pub macro bitcoin_internals::impl_parse_and_serde!
pub macro bitcoin_internals::impl_to_hex_from_lower_hex!
pub macro bitcoin_internals::parse_error_type!
pub macro bitcoin_internals::rust_version!
-pub macro bitcoin_internals::serde_round_trip!
pub macro bitcoin_internals::serde_string_deserialize_impl!
pub macro bitcoin_internals::serde_string_impl!
pub macro bitcoin_internals::serde_string_serialize_impl!
-pub macro bitcoin_internals::serde_struct_human_string_impl!
pub macro bitcoin_internals::transparent_newtype!
pub macro bitcoin_internals::write_err!
pub trait bitcoin_internals::ToU64
diff --git a/internals/api/alloc-only.txt b/internals/api/alloc-only.txt
index 6f133d21..c1d398ee 100644
--- a/internals/api/alloc-only.txt
+++ b/internals/api/alloc-only.txt
@@ -134,10 +134,6 @@ pub const fn bitcoin_internals::const_casts::i16_to_i64(value: i16) -> i64
pub const fn bitcoin_internals::const_casts::u16_to_u32(value: u16) -> u32
pub const fn bitcoin_internals::const_casts::u16_to_u64(value: u16) -> u64
pub const fn bitcoin_internals::const_casts::u32_to_u64(value: u32) -> u64
-pub mod bitcoin_internals::const_tools
-pub macro bitcoin_internals::const_tools::concat_bytes_to_arr!
-pub macro bitcoin_internals::const_tools::cond_const!
-pub macro bitcoin_internals::const_tools::copy_byte_array_from_slice!
pub mod bitcoin_internals::error
pub mod bitcoin_internals::error::input_string
pub struct bitcoin_internals::error::input_string::CannotParse<'a, T: core::fmt::Display + ?core::marker::Sized>
@@ -316,40 +312,8 @@ pub fn [T]::bitcoin_as_chunks_mut<const N: usize>(&mut self) -> (&mut [[Self::It
pub fn [T]::get_array<const ARRAY_LEN: usize>(&self, offset: usize) -> core::option::Option<&[Self::Item; ARRAY_LEN]>
pub fn [T]::split_first_chunk<const ARRAY_LEN: usize>(&self) -> core::option::Option<(&[Self::Item; ARRAY_LEN], &[Self::Item])>
pub fn [T]::split_last_chunk<const ARRAY_LEN: usize>(&self) -> core::option::Option<(&[Self::Item], &[Self::Item; ARRAY_LEN])>
-pub mod bitcoin_internals::wrap_debug
-pub struct bitcoin_internals::wrap_debug::WrapDebug<F: core::ops::function::Fn(&mut core::fmt::Formatter<'_>) -> core::fmt::Result>(pub F)
-impl<F: core::ops::function::Fn(&mut core::fmt::Formatter<'_>) -> core::fmt::Result> core::fmt::Debug for bitcoin_internals::wrap_debug::WrapDebug<F>
-pub fn bitcoin_internals::wrap_debug::WrapDebug<F>::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
-impl<F> core::marker::Freeze for bitcoin_internals::wrap_debug::WrapDebug<F> where F: core::marker::Freeze
-impl<F> core::marker::Send for bitcoin_internals::wrap_debug::WrapDebug<F> where F: core::marker::Send
-impl<F> core::marker::Sync for bitcoin_internals::wrap_debug::WrapDebug<F> where F: core::marker::Sync
-impl<F> core::marker::Unpin for bitcoin_internals::wrap_debug::WrapDebug<F> where F: core::marker::Unpin
-impl<F> core::marker::UnsafeUnpin for bitcoin_internals::wrap_debug::WrapDebug<F> where F: core::marker::UnsafeUnpin
-impl<F> core::panic::unwind_safe::RefUnwindSafe for bitcoin_internals::wrap_debug::WrapDebug<F> where F: core::panic::unwind_safe::RefUnwindSafe
-impl<F> core::panic::unwind_safe::UnwindSafe for bitcoin_internals::wrap_debug::WrapDebug<F> where F: core::panic::unwind_safe::UnwindSafe
-impl<T, U> core::convert::Into<U> for bitcoin_internals::wrap_debug::WrapDebug<F> where U: core::convert::From<T>
-pub fn bitcoin_internals::wrap_debug::WrapDebug<F>::into(self) -> U
-impl<T, U> core::convert::TryFrom<U> for bitcoin_internals::wrap_debug::WrapDebug<F> where U: core::convert::Into<T>
-pub type bitcoin_internals::wrap_debug::WrapDebug<F>::Error = core::convert::Infallible
-pub fn bitcoin_internals::wrap_debug::WrapDebug<F>::try_from(value: U) -> core::result::Result<T, <T as core::convert::TryFrom<U>>::Error>
-impl<T, U> core::convert::TryInto<U> for bitcoin_internals::wrap_debug::WrapDebug<F> where U: core::convert::TryFrom<T>
-pub type bitcoin_internals::wrap_debug::WrapDebug<F>::Error = <U as core::convert::TryFrom<T>>::Error
-pub fn bitcoin_internals::wrap_debug::WrapDebug<F>::try_into(self) -> core::result::Result<U, <U as core::convert::TryFrom<T>>::Error>
-impl<T> core::any::Any for bitcoin_internals::wrap_debug::WrapDebug<F> where T: 'static + ?core::marker::Sized
-pub fn bitcoin_internals::wrap_debug::WrapDebug<F>::type_id(&self) -> core::any::TypeId
-impl<T> core::borrow::Borrow<T> for bitcoin_internals::wrap_debug::WrapDebug<F> where T: ?core::marker::Sized
-pub fn bitcoin_internals::wrap_debug::WrapDebug<F>::borrow(&self) -> &T
-impl<T> core::borrow::BorrowMut<T> for bitcoin_internals::wrap_debug::WrapDebug<F> where T: ?core::marker::Sized
-pub fn bitcoin_internals::wrap_debug::WrapDebug<F>::borrow_mut(&mut self) -> &mut T
-impl<T> core::convert::From<T> for bitcoin_internals::wrap_debug::WrapDebug<F>
-pub fn bitcoin_internals::wrap_debug::WrapDebug<F>::from(t: T) -> T
-pub macro bitcoin_internals::concat_bytes_to_arr!
-pub macro bitcoin_internals::cond_const!
pub macro bitcoin_internals::const_assert!
-pub macro bitcoin_internals::copy_byte_array_from_slice!
pub macro bitcoin_internals::impl_array_newtype!
-pub macro bitcoin_internals::impl_parse!
-pub macro bitcoin_internals::impl_parse_and_serde!
pub macro bitcoin_internals::impl_to_hex_from_lower_hex!
pub macro bitcoin_internals::parse_error_type!
pub macro bitcoin_internals::rust_version!
diff --git a/internals/api/no-features.txt b/internals/api/no-features.txt
index 14bf9d6a..701f24be 100644
--- a/internals/api/no-features.txt
+++ b/internals/api/no-features.txt
@@ -124,10 +124,6 @@ pub const fn bitcoin_internals::const_casts::i16_to_i64(value: i16) -> i64
pub const fn bitcoin_internals::const_casts::u16_to_u32(value: u16) -> u32
pub const fn bitcoin_internals::const_casts::u16_to_u64(value: u16) -> u64
pub const fn bitcoin_internals::const_casts::u32_to_u64(value: u32) -> u64
-pub mod bitcoin_internals::const_tools
-pub macro bitcoin_internals::const_tools::concat_bytes_to_arr!
-pub macro bitcoin_internals::const_tools::cond_const!
-pub macro bitcoin_internals::const_tools::copy_byte_array_from_slice!
pub mod bitcoin_internals::error
pub mod bitcoin_internals::error::input_string
pub struct bitcoin_internals::error::input_string::CannotParse<'a, T: core::fmt::Display + ?core::marker::Sized>
@@ -290,40 +286,8 @@ pub fn [T]::bitcoin_as_chunks_mut<const N: usize>(&mut self) -> (&mut [[Self::It
pub fn [T]::get_array<const ARRAY_LEN: usize>(&self, offset: usize) -> core::option::Option<&[Self::Item; ARRAY_LEN]>
pub fn [T]::split_first_chunk<const ARRAY_LEN: usize>(&self) -> core::option::Option<(&[Self::Item; ARRAY_LEN], &[Self::Item])>
pub fn [T]::split_last_chunk<const ARRAY_LEN: usize>(&self) -> core::option::Option<(&[Self::Item], &[Self::Item; ARRAY_LEN])>
-pub mod bitcoin_internals::wrap_debug
-pub struct bitcoin_internals::wrap_debug::WrapDebug<F: core::ops::function::Fn(&mut core::fmt::Formatter<'_>) -> core::fmt::Result>(pub F)
-impl<F: core::ops::function::Fn(&mut core::fmt::Formatter<'_>) -> core::fmt::Result> core::fmt::Debug for bitcoin_internals::wrap_debug::WrapDebug<F>
-pub fn bitcoin_internals::wrap_debug::WrapDebug<F>::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
-impl<F> core::marker::Freeze for bitcoin_internals::wrap_debug::WrapDebug<F> where F: core::marker::Freeze
-impl<F> core::marker::Send for bitcoin_internals::wrap_debug::WrapDebug<F> where F: core::marker::Send
-impl<F> core::marker::Sync for bitcoin_internals::wrap_debug::WrapDebug<F> where F: core::marker::Sync
-impl<F> core::marker::Unpin for bitcoin_internals::wrap_debug::WrapDebug<F> where F: core::marker::Unpin
-impl<F> core::marker::UnsafeUnpin for bitcoin_internals::wrap_debug::WrapDebug<F> where F: core::marker::UnsafeUnpin
-impl<F> core::panic::unwind_safe::RefUnwindSafe for bitcoin_internals::wrap_debug::WrapDebug<F> where F: core::panic::unwind_safe::RefUnwindSafe
-impl<F> core::panic::unwind_safe::UnwindSafe for bitcoin_internals::wrap_debug::WrapDebug<F> where F: core::panic::unwind_safe::UnwindSafe
-impl<T, U> core::convert::Into<U> for bitcoin_internals::wrap_debug::WrapDebug<F> where U: core::convert::From<T>
-pub fn bitcoin_internals::wrap_debug::WrapDebug<F>::into(self) -> U
-impl<T, U> core::convert::TryFrom<U> for bitcoin_internals::wrap_debug::WrapDebug<F> where U: core::convert::Into<T>
-pub type bitcoin_internals::wrap_debug::WrapDebug<F>::Error = core::convert::Infallible
-pub fn bitcoin_internals::wrap_debug::WrapDebug<F>::try_from(value: U) -> core::result::Result<T, <T as core::convert::TryFrom<U>>::Error>
-impl<T, U> core::convert::TryInto<U> for bitcoin_internals::wrap_debug::WrapDebug<F> where U: core::convert::TryFrom<T>
-pub type bitcoin_internals::wrap_debug::WrapDebug<F>::Error = <U as core::convert::TryFrom<T>>::Error
-pub fn bitcoin_internals::wrap_debug::WrapDebug<F>::try_into(self) -> core::result::Result<U, <U as core::convert::TryFrom<T>>::Error>
-impl<T> core::any::Any for bitcoin_internals::wrap_debug::WrapDebug<F> where T: 'static + ?core::marker::Sized
-pub fn bitcoin_internals::wrap_debug::WrapDebug<F>::type_id(&self) -> core::any::TypeId
-impl<T> core::borrow::Borrow<T> for bitcoin_internals::wrap_debug::WrapDebug<F> where T: ?core::marker::Sized
-pub fn bitcoin_internals::wrap_debug::WrapDebug<F>::borrow(&self) -> &T
-impl<T> core::borrow::BorrowMut<T> for bitcoin_internals::wrap_debug::WrapDebug<F> where T: ?core::marker::Sized
-pub fn bitcoin_internals::wrap_debug::WrapDebug<F>::borrow_mut(&mut self) -> &mut T
-impl<T> core::convert::From<T> for bitcoin_internals::wrap_debug::WrapDebug<F>
-pub fn bitcoin_internals::wrap_debug::WrapDebug<F>::from(t: T) -> T
-pub macro bitcoin_internals::concat_bytes_to_arr!
-pub macro bitcoin_internals::cond_const!
pub macro bitcoin_internals::const_assert!
-pub macro bitcoin_internals::copy_byte_array_from_slice!
pub macro bitcoin_internals::impl_array_newtype!
-pub macro bitcoin_internals::impl_parse!
-pub macro bitcoin_internals::impl_parse_and_serde!
pub macro bitcoin_internals::impl_to_hex_from_lower_hex!
pub macro bitcoin_internals::parse_error_type!
pub macro bitcoin_internals::rust_version!
Why this scored 15/100
Community notes
Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.
The AI analysis stands alone for now. Submit a note if you can add evidence or important context.