Start every declared service against an injected ContainerRuntime,
returning a ServiceSession. Pure orchestration over the port — no
docker is imported here, so this is fully unit-testable with a fake runtime
(the decideSandbox-is-pure / runSandboxed-is-real split). If any service
fails to start, the ones already up are torn down before the error propagates,
so a partial failure never leaks a container.
A Docker-backed ContainerRuntime and the runEval / measureArms wiring are
the next increment — until then this is the primitive you compose by hand:
start → pin egress to session.endpoints → run → read session.handles in
measure → await session.teardown().
— surface may change without a major-version bump.
Start every declared service against an injected ContainerRuntime, returning a ServiceSession. Pure orchestration over the port — no
dockeris imported here, so this is fully unit-testable with a fake runtime (thedecideSandbox-is-pure /runSandboxed-is-real split). If any service fails to start, the ones already up are torn down before the error propagates, so a partial failure never leaks a container.A Docker-backed
ContainerRuntimeand therunEval/measureArmswiring are the next increment — until then this is the primitive you compose by hand: start → pin egress tosession.endpoints→ run → readsession.handlesinmeasure→await session.teardown().— surface may change without a major-version bump.