After CU27 — The wire leaves, and soma-fabric opens
soma/transport/ → soma-fabric/wire/ (sixteen commits, and their history)Not a use case: nothing can be written the day after that could not be written the day before. It is a cut, made when four things that shared the name remote execution turned out to want opposite things:
| what it is | what it wants | where it lives | |
|---|---|---|---|
| placement | .at("w1"): the graph says a node runs elsewhere | to be a declaration, part of the graph’s meaning | stays |
| transport | bytes over a wire, framed, with codecs | low latency, a hot connection | leaves |
| provisioning | how the code reaches the other side | reproducibility | leaves |
| coordination | who does which work | durability, retries, leases | leaves |
There is no single thing that is both a hot connection and durability with
retries, which is why one name over the four of them read as a tangle rather
than a design. Placement is a declaration and belongs beside the graph that makes
it; the other three are mechanism. What soma keeps is Transport, a hole with
one method, and the .at() that fills it with a name.
The boundary is not a layer, and pretending it were would have put the codec,
the store or the Value on the wrong side of the cut: soma-fabric/wire depends
on soma-core and soma-store, and soma-python depends on
soma-fabric-wire. No cycle — they are different crates — but what the
arrangement assumes is that the two repositories sit side by side and move
together, which is what the path dependencies say out loud. The day either is
published on its own they become versions.
It is not free, and the place it shows is the one nobody predicts: the cluster images build from two contexts now, because a single root over both is a directory of unrelated projects and every byte of it would go to the daemon.
The move is verified the only way a move can be: 87 tests green on the other side of it, having changed nothing.