Every URL in the file has to come from the store data the app loaded. Invented links are rejected.
The app first builds a source index from Shopify. It then asks the model to rewrite that index. If the rewrite does not start with a heading, or if it contains a URL that was not in the source, the app publishes the source index instead.
What gets rejected
- No made-up product pages
- No made-up policy URLs
- No links to other stores
- A fallback file when the rewrite is not acceptable
That fallback is why a task can still finish with a useful file even when the model response is not usable.