>"everything must always build against latest" is perfectly enforceable on multirepo too, it's just that nobody does it
No, you cannot. That's my entire point. Here's a minimal example:
Repo one contains one file, provider.py:
def five():
return 5
Repo two contains one file, consumer.py.
import provider # assume path magic makes this work
def test_five_is_produced():
assert provider.five() == 5
if __name__ == '__main__':
test_five_is_produced()
I also have an external build script that copies provider and consumer, from origin/master/HEAD into the same directory, and runs `python consumer.py`.
Now I want to change `five` to actually be `number`, such that `number(n) == n`, ie. I really want a more generic impl. What sequence of changes can I commit such that tests will always pass, at any point in time?
There is no way to atomically update both provider and consumer. There will be some period of time, perhaps only milliseconds, but some period of time, at which point I can run my build script and it will pick up incompatible versions of the two files.
This is a reductive example, but the function `five` in this case takes the role of a more complex API of some kind.