Deletes an app. Cascades to all child rows via ON DELETE CASCADE (git_connection, git_branch, app_connection, llm_api_url, alerts, deployments, etc.).
Headless callers note: API key rows are NOT cleaned up by this endpoint — the dashboard wraps DELETE + key-revoke separately. Headless agents that delete apps should either accept some orphan API key rows or call the API-key revoke endpoint directly with the keys they minted.