Project-level lifecycle: open, save, template bootstrap, arrangement
markers and regions, and timeline tools. Sits above songbird-state
and below the application shells — both songbird-app and
songbird-headless go through this crate, so there is a single
canonical path for loading a project.
lifecycle — resolve_project_dir / PostLoadConfig. Returns
the on-disk project directory after a load, creating a timestamped
sketches directory for new in-memory projects. Each host supplies
its own hooks (git init, recent-projects list, graph mirrors).
Before this crate, project-open logic lived in two places — the Tauri
project_open IPC handler and the headless command handler — and they
drifted. Consolidating into a single path means fixing a load bug once
fixes it everywhere (desktop + headless + CLI).No UI dependencies. No engine lifecycle — that belongs to
songbird-orchestrator.