fn extract_digest_parts(lines: &[&str]) -> Vec<String>
[extract_digest_text]’s entries, one per message/tool/error, so a caller can budget by entry instead of by raw line.
extract_digest_text