Hi Maciej,
For TaskCancel and TaskTimeout, I think we could reference the TaskDelete. The constructor of TaskDelete allowed providing a reason for deleting task. We already have the state in HistoryTask, it is much easy for us to merge the TaskCancel and TaskTimeout into a TaskCancel class and let outside give this history a reason message.