Product data cleanup
Fills in missing attributes, assigns categories, writes image alt text, and normalizes naming that drifted as the catalogue grew. Edits go out through /batch, so a catalogue-wide pass runs as batched writes rather than a request per product.