pub fn normalize(candidate: &str) -> StringExpand description
Normalize a candidate summary to the full deterministic-floor contract:
collapse whitespace (via collapse_whitespace) then truncate to
MAX_SUMMARY_LEN chars (never splitting a UTF-8 codepoint). Used by
compose_default for the tool-generated floor. Explicit agent summaries
go through collapse_whitespace instead, so they are never silently cut.