pub async fn preflight() -> Result<(), AppError>
Read installation and interop facts only; never runs the lifecycle script.