# Products / variants / media migration playbook

## Goal
Import Shopify (or legacy) catalogue into TRA with validation and rollback.

## Prerequisites
- Phase 1–3 gates passed
- Staging DB snapshot taken
- Media bucket writable

## Steps
1. Export products CSV from source (handle, title, status, grade, description).
2. Export variants CSV (product_handle, sku, options, price_cents, barcode).
3. Export media manifest (product_handle, position, url/path, alt).
4. Dry-run import via Admin → Imports (`products`, `variants`) or API.
5. Attach media via Media library + product media pivots.
6. Rebuild collections rules; reindex search (Scout/Meili).

## Validation queries
```sql
SELECT COUNT(*) FROM products WHERE status = 'active';
SELECT COUNT(*) FROM variants WHERE sku IS NOT NULL;
SELECT p.handle, COUNT(v.id) FROM products p LEFT JOIN variants v ON v.product_id = p.id GROUP BY p.id HAVING COUNT(v.id) = 0;
```

## Rollback
1. Restore staging DB snapshot.
2. Purge orphaned media objects created after snapshot timestamp.
3. Re-run import only after fixing CSV errors log.
