Orchestration engine that schedules and runs beams.
alba-engine sits between the model and the machine: it takes the
validated [alba_core::Project] the loader produced, extracts the union
of the target beams' execution subgraphs, and runs it with bounded
parallelism through an [alba_executors::Executor] — which it only ever
sees as that trait, so a future docker or plugin executor drops in
without this crate changing. See the scheduler module for the
scheduling rules themselves.
Everything a caller needs is [run]: give it a project, [Targets],
[RunOptions], the [Executors] to dispatch each beam's declared kind
to, a channel to receive [RunEvent]s on, and a cancellation token, and
it reports back a [RunSummary]. [watch] wraps that same call in a
session that re-runs the target whenever the files its inputs declare
change; see the session module for the loop's shape.