Combat Rounds exploit may need server settings or flags to balance it.
For non-victorious combat, I'm quite concerned that it assigns veteran levels. In theory it sounds good: you became more experienced in combat and survived.
But the ability to know that certain units in certain situations would never complete combat with a victor... This allows an exploit.
In those known situations, undeclared allies can attack each other's units to promote them.
Suggestion 0: Hard-coded disallowing of promotion is quick and easy but I think this would be mean and disallow a lot of legitimate promotions.
Suggestion 1: server setting promote_without_victory="enabled" or "disabled". This is a LOT easier than Suggestion 2 below and can be put up right away while Suggestion 2 gets procrastinated.
Suggestion 2 - promote_without_victory can be a flag going into units and/or unitclasses. After careful thinking, the number of combinations and situations a ruleset designer has to patch up with these flags can get nasty, and I hope we fix it in a way that does not have gaping holes out of the designer's control, but rather give them full control.
It may be complex but one way for full control is promote_defender_without_victory and promote__without_victory both going in the unit's flags/settings. Having promote_defender_without_victory going into the attacker unit would be important. Why? Many units would be used to strafe or soften targets, but the incentive for such an action is completely wasted if those units get promoted. Plus, designers might come up with who knows what kinds of ideas, such as mustard gas or countless other things meant to weaken but not resulting in defender promotions.
Certain attacking unit types will be the ones that most often create known exploit situations. If UnitClass flags are used, the UnitType flags would override them.
For suggestion 2, instead of 0 or 1 on/off, it could be a percentile. 0 is off, 100 is on, but other numbers would modify the chance of becoming veteran. So for example, an air unit doing strafing run could have promote_defender_without_victory = 50, which would make the chance of promotion for a surviving defender HALF of what it would normally be.