Some generations stop before they begin, because something they need is not ready yet — most often a product photo that is still being prepared, or a product with no photos at all. These are situations you can resolve in a moment, and then simply start again.
Until now the message said the opposite. The tile reported that something had gone wrong on our side and that our team had been notified — which left nothing for you to do, even though the reason was in plain sight and within your reach. The wording shown for packshots made this worse: it asked you to pick a packshot first, which is not something a packshot generation ever waits for.
The reason is now stated plainly. A generation stopped by a photo that is not ready says exactly that, and the message points at the product photo rather than at us.
Such a generation no longer repeats itself. Previously it tried again several times against material that had not changed in the meantime, and only then gave up. Now it stops after the first attempt and waits — you start it again yourself once the photo is ready, which is the only moment when repeating it can succeed.
Shop integrations receive the same answer. A generation submitted through a shop plugin for a product that has not been registered used to report an internal error to the shop. It now reports that the required material is unavailable, together with what has to be registered — so an integration can react to it instead of logging a fault on our side.
Generations that fail for other reasons are unaffected, and nothing about how you start or repeat a generation has changed.