This is a little confusing. It does sync first, notifies frontend of success, then does async later? And if sync fails, the whole thing fails and it's cleaned up, but if async fails, it's just silently ignored? This is the intended behavior, but I'm not sure if that's what's happening here.