v0.2.0
Highlights
- Background migration UI (Media → Migrate to R2): resumable WP-Cron-driven runs with live progress, Pause/Resume/Stop, an activity log, and a "How does the background job work?" explainer. Single-pass: no automatic re-scans on large libraries.
- Plaintext secret key storage (SWR-383): survives WordPress updates and salt rotation; DB value overrides the
R2OFFLOAD_SECRET_KEYconstant; legacy encrypted blobs auto-migrate on the next settings save. - Safe deactivation CLI:
wp r2offload pull(restore everything to local uploads, then clear registration — keyset pagination, legacy-manifest derivation, subdir-size-safe path mapping) andwp r2offload reset(clear registration only, chunked with cache invalidation). - Error management: per-error Retry (mode-aware, lock-held, CAS-persisted), Retry All, Clear All Errors, and a Start confirmation when unresolved errors exist.
- Fixes: stateless partial migrations no longer un-register attachments whose variants exist only in R2; 404 source files count as skipped rather than errors; connection loss auto-pauses the run.
All changes were reviewed across PRs #3–#6, #9, #10 with multiple rounds of automated review (CodeRabbit, Cursor Bugbot, Codex, Blocks) — every finding fixed or explicitly dispositioned.
🤖 Generated with Claude Code