Why mark the trait as `abstract`?  And why does the trait exist at all?  If you want to parameterize `Publisher` over the type of your case object, you can just say `Publisher[SimpleChangeEvent.type]`.