Launchpad works more or less the same way as @roadmr describes snapcraft behaving. The implementation details are a bit different for various reasons, but it's the same idea, and in particular Launchpad responds to a "still processing" response by backing off and trying again later (currently 20 retries at intervals of 15/15/30/30/60/60/60/... seconds; we can adjust this if need be). And yes, I agree that this proposed approach is exactly what we need.
To expand: the basic issue here is that Launchpad is waiting for the store to process the pushed snap before it can do the equivalent of
snapcraft release. The store doesn't notify Launchpad of this; Launchpad has to poll. If manual review of the first thing in the queue takes (say) two days, it isn't reasonable for Launchpad to have to sit there polling for two days before it can eventually release it.
So, we need the store to return distinct responses in the following two cases:
- The upload is queued behind something that's been identified as requiring manual review
- The upload is queued behind something that just hasn't been processed yet
In the former case, we need to treat that like any other kind of manual review (i.e. the user will have to do a separate release step once the review has been completed). In the latter case, the program doing the upload (whether that be snapcraft or Launchpad) should try again later.