I see your point, and have the subclass set it. But see my other comment about why the task is passed in. I wanted the subclass to have the ability to inspect the task and potentially use its data in the message.

I'll be honest, it's likely a tad overengineered. I went a little crazy with the hooks, but since I knew this was gonna be used in a bunch of different areas, I didn't want any display text hardcoded, forcing the subclass to override a logic method just to introduce custom text.