pub fn message_range_digest(messages: &[Arc<Value>]) -> String
SHA-256 digest over the canonical serialization of a message range. Order-sensitive: the digest binds both content and sequence.