← back to Schumacher Restore
README.md
28 lines
# Schumacher restore (PREP — nothing live)
Restores archived Schumacher products to active by re-applying their staged product image
(purged from Shopify, preserved in `dw_unified.schumacher_catalog` as S3 URLs) and flipping
status archived -> active. Built 2026-08-01 after Steve flagged "zero Schumacher on Shopify".
## State (2026-08-01)
- 0 Schumacher products ACTIVE. 2,874 ARCHIVED (live-verified restorable), 11,315 DELETED_FROM_SHOPIFY.
- Images purged from Shopify but staged in `schumacher_catalog` (7,000 rows, all imaged; 5,614 w/ cost).
- **1,408 archived products matched (mfr_sku) to a staged image + cost** -> `data/restore-worklist.json`.
- Staged images are external S3 URLs (`schumacher-webassets`); verified reachable (HTTP 200).
## Files
- `data/restore-worklist.json` — the 1,408 restore candidates (num, sku, prev_status, staged_image, staged_cost).
- `restore.py` — DRY-RUN by default. Re-applies image + un-archives. Writes `data/restore-map.json` first.
- `restore_reverse.py` — flips the restore-map back to archived (one-command undo).
## Safety
- DRY-RUN is default. LIVE requires BOTH `--apply` AND `SCHU_RESTORE_CONFIRM=YES`.
- `--canary N` limits to the first N. Restore-map written before any write.
- Does NOT overwrite live variant prices (they already exist); only re-images + un-archives.
## Gated — DO NOT run live without Steve's go + naming decision
Open decision: restore under vendor "Schumacher" vs continue the DWWC "Architectural Wallcoverings"
rebrand (only 467 active). Recommended first live step once approved:
`SCHU_RESTORE_CONFIRM=YES python3 restore.py --apply --canary 20` -> verify 20 PDPs -> widen.
Memo: `~/.claude/yolo-queue/pending-approval/2026-08-01-schumacher-zero-live-restore-plan.md`.