Abilities with setTargetPointer set should throw a Wrong Code Usage error if you try to addTarget.
Couldn't blatantly see what's wrong in the code, but this is definitely very wrong.
cause GainLifeControllerTriggeredAbility used with setTargetPointer on trigger (set player as target) - so target changed from trigger - to doifcostpay - to addcounter. Try to disable it:
Also it possible to override GainLifeControllerTriggeredAbility.addTarget to verify check like “if setTargetPointer is true then raise error “Wrong code usage: ability uses auto target, do not add it manually”. Maybe another cards bugged too. Same logic can be used to verify all other abilities with auto target setup (e.g. with setTargetPointer).
Fixed Cradle of Vitality, renamed issue to reflect the resulting further work this revealed.