#35904 mentions that validation code does not require the data members of COutPoint, CTxOut, and CTxIn to be individually mutable. This requirement instead comes from test code being written in a procedural rather than declarative style.
This PR presents a bitcoin-tidy check that identifies consecutive assignments to annotated data members of the same object and suggests rewriting them with a constructor invocation. This allows a mechanical refactoring of the majority of mutations and it paves the road for making the types fully immutable.