Releases: stealth-factory/r2-stateless-media-offloader
Releases · stealth-factory/r2-stateless-media-offloader
Release list
v0.3.4
v0.3.3
v0.3.2
v0.3.1
0.3.1 (2026-06-11)
Refactoring
- rename plugin to "R2 Stateless Media Offloader" (c7422a4)
Documentation
- add brand logo/icon assets + centered README hero (f3b0249)
- add developer wiki — hooks & WP-CLI reference (a338115)
- readme: add commas after "In CDN mode" / "In Stateless mode" (6215716)
- stop implying the plugin is "S3-compatible" (it's R2-only) (82dcf0c)
- use cover poster as the README hero banner (60a3222)
v0.3.0
The first release packaged for general use. An installable zip is attached below — it unpacks to a single r2-stateless-media-offload/ directory, ready for wp-content/plugins/ or the Plugins → Add New → Upload screen.
What's new
- Uploads no longer touch R2 during image processing. Thumbnail generation runs uninterrupted; one batched upload ships the original and every size afterwards. Dramatically friendlier to small containers and shared-CPU hosts.
- A URL never precedes its object. Media URLs only switch to the CDN once every file is confirmed present in R2 — a fresh upload can never render a CDN URL that 404s (or poison an edge cache with that 404).
- Interrupted uploads self-heal. WordPress's REST post-process resume is fully supported via a shutdown backstop; metadata-less programmatic inserts offload too.
- Evidence-based Stateless cleanup. Local copies are removed at request end only when the attachment finished fully synced; regeneration sources (image and PDF originals) stay on disk until completion is proven. Multisite blog-aware.
Docs
- New README section: Design & compatibility — why hook-based beats a stream wrapper for ecosystem compatibility, and the ordering guarantees the plugin makes.
- CONFIGURATION · MIGRATION · ARCHITECTURE
All changes reviewed across multiple rounds of automated review (CodeRabbit, Cursor Bugbot, Codex, Blocks) with every finding fixed or explicitly dispositioned.
🤖 Generated with Claude Code
v0.2.1
Patch release — five fixes from the post-v0.2.0 review round on the vendor release PR:
wp r2offload resetaborts with a clear error if a database delete fails mid-run (re-run to resume) instead of reporting success with rows left behind.wp r2offload pullaccepts files already on disk when validating legacy registrations (CDN mode / partial-restore re-runs) instead of erroring, and its dry-run / restored counts no longer include files that needed no download.- Retry All button is restored when every retry fails, rather than staying stuck disabled until reload.
- The Start confirmation now also fires when clicked before the first status poll completes (server-side bootstrap), and after Clear All Errors.
🤖 Generated with Claude Code
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