The changelog and the deliver is done in the same remote method. If the deliver fails, the changelog is lost.
Split it up, so that failed delivers still have changelogs.
This is actually not something the SCM implementation can do anything about.
The change log is parsed and written in the same breath as the ClearCase deliver. This means that the core dictates, that if anything fails in checkout() no change log is written.
This is also applicable for the git plugin when the "Merge before build" option is set.
If the deliver or the merge fails, the change log is not written, even though there is an actual change set. No one is blamed as a result.