Facade cuma dipakai generically oleh satu caller (Action::Compact); auto-loop tetap butuh kontrol per-stage sendiri. Selaras dengan prinsip "No DI" di CLAUDE.md. dedup::collapse juga diubah mengembalikan (Vec<ChatMessage>, bool) supaya caller tahu ada perubahan tanpa perlu ChatMessage: PartialEq. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>