fakeDealSessionPair

fun fakeDealSessionPair(aliceId: PeerId, bobId: PeerId, newScheme: () -> CommutativeScheme = { SraScheme() }, scope: CoroutineScope): Pair<DealSession, DealSession>

Two wired DealSessions over a fakeSeamPair, each running its own scheme instance.

newScheme is a factory, not an instance, and that is the whole of #2311 at the integration layer: in production every player constructs their own CommutativeScheme in their own process, so a harness that hands one object to both sessions is testing the single arrangement that cannot expose a cross-instance disagreement. Each session also draws its key from the instance that will apply it, as a real player does.