The Attack component should deal with whether some entity is a valid target, if it's an enemy and has the right classes and we can hurt it. UnitAI and UnitMotion should deal with the questions of behavior, how to move within range of the target and whether to chase it, and so on. The extra diplomacy, health, and capture checks in UnitAI aren't necessary and make the code longer and harder to understand.
Ceasefire was introduced with #2749 and there it was decided that the easiest way to handle that game mode was to make the players neutral and disallow them from attacking each other. At that time, if you were attacked by a neutral player (who must have had you set as an enemy), then your units would fight back, but you couldn't order them to attack like before. (I actually didn't play the game during this time, but this is my understanding of the code and discussion at #7, for example.)
This behavior was changed with rP19528 because a diplomacy check for enemies was added to CanAttack of Attack, and now when a neutral player attacks you (which means they have you set as an enemy), your units won't respond, they'll just die.
One solution to this is to fix that bug. But instead I think this is already a weird situation (which apparently has gone unnoticed). If an opponent marks you as an enemy then automatically your diplomacy stance towards them is set to enemy too, so if they attack you you'll fight back. It's only if you purposely change them to neutral or ally after that that they can attack you without being attacked back. So I feel like a player who does that already had warning and can't complain when he gets attacked.
Instead of keeping around the forceResponse code to deal with that weird situation, I think it's better to just say you can't attack neutral players, only enemies.