I believe "Design by Contract"[0], or "DbC", is the concept you are describing. In the Wiki page Notes and External Links sections there are some good resources IMHO.
Yes, closely related, but invariants can appear anywhere in the code (like loop invariants), and are less restrictive than pre-conditions and post-conditions which must appear in the beginning and end of methods. So, invariants are more about testing than design.
Arguably, invariants are especially powerful in testing distributed systems:
Arguably, invariants are especially powerful in testing distributed systems:
0 - https://www.datamonad.com/post/2020-02-19-testing-mr3/