It is generally considered unethical to break promises. It is not considered unethical to make promises you would have been better off not to make. Yet when a promise is made and then broken, there is little reason in the abstract to suppose that either the past promiser or the present promise breaker made a better choice about what the future person should do.
For instance suppose a married woman has an affair. Much moral criticism is usually directed at her for having the affair, yet almost none is directed at her earlier self for marrying her husband in the first place.
It’s not that the later woman, who broke the promise, caused more harm than the earlier woman. Both of their acts were needed together to cause the broken promise. The later woman would have been acting just fine if the earlier woman hadn’t done what she did.
I think we direct all criticism to the later women who breaks the promise because it is very useful to be seen as someone who thinks its important to keep promises. It is of little use to be seen as the sort of person who doesn’t make stupid promises, except as far as it suggests we are more likely to keep promises.
This seems to me a clear case of morality being self serving. It serves others too in this case as usual, but the particular form of it is chosen to help its owner. Which is not particularly surprising if you think morality is a bunch of useful behaviours evolved like all our other self serving bits and pieces. However if you think it is more like maths – something which is actually out there, and we have somehow evolved to be able to intuitively appreciate – it is more surprising that it self serving like this.