2 months ago
49167fcAfter execute_publish fails, emit UI errors via project_upload_status_from_durable so the control plane is never reverse-overwritten from UploadState::Failed. Bind import/batch song IDs and mark pending under one control-DB lock on the same prepared operation_id. Refuse empty pending. Recovery cancels empty song_ids prepared/pending rows instead of parking unrecoverable zombies.
Parentf601942