Why do CacheSweepers listen to the Controller

I must be missing something, but it seems that it would be best to have
the sweeper listen to ActiveRecord, and have it expire caches on
after_save & after_destroy.

Agreed… I grew frustrated with CacheSweeper, and ended up migrating
all the cache management to the models.