Core domain model for beams and Beamfiles.
alba-core takes the AST alba-syntax produces and evaluates it into
the typed [Project] model the execution engine schedules: resolving
let bindings and {expr} interpolation, checking the small type
system (strings and booleans), and running the built-in env()/glob()
functions. See [render_template] and [eval_expr] for the
load-time-vs-schedule-time rendering split between a beam's fields.
Multi-file loading (import "path" as alias, namespaced beam ids) is
[load_project]'s job, which also validates the resulting dependency
graph (unknown needs targets, needs-cycles) via [validate_graph]
before returning it. [execution_subgraph] extracts the transitive
closure of a target beam, for whichever engine schedules and runs it.
[git] wraps the git CLI, the only place in the workspace that spawns it.