1.0.1 - reliability and compatibility hotfix
This release strengthens the data-safety contract around offloaded media: KAZCODE now keeps local files unless the correct remote object is proven, treats temporary provider failures as unknown instead of missing, and prevents stale background workers from overwriting newer media state with stale results.
Data integrity
- Local media cleanup now requires size-verified remote objects, not only a successful existence check.
- Timeouts, throttling, authentication failures, and provider outages are classified as unknown/provider errors rather than confirmed missing objects.
- Changed local bytes are uploaded even when the remote key and byte length are unchanged.
- Partial restores keep remaining recovery metadata and object inventory intact.
- Partial provider batch-delete failures remain visible and retryable.
Multi-profile and shared media
- Existing media is restored, verified, signed, materialized, and deleted through the Storage Profile where it was actually stored.
- Changing the default upload profile no longer changes where older media is read from or operated on.
- The Amazon S3 preset now ignores stale custom endpoint/path-style values, so a previous MinIO or custom S3 endpoint cannot break AWS S3 connection tests.
- Remote delete now fails closed when an object may be shared by another attachment or ownership is ambiguous.
- Cross-profile migration keeps verify-before-switch behavior and preserves the source when destination verification is uncertain.
WordPress compatibility
- Remote-only media now works more reliably through WordPress REST and editor flows that inspect original image metadata.
- Image Editor, regenerate, and local materialization paths use the bound Storage Profile instead of the current default profile.
- WordPress 7.1 media metadata generation guards remain in place so cleanup cannot run while image sizes are still being generated.
- Admin tutorials can now be disabled globally across plugin screens while still allowing manual replay.
- Storage Profile delete controls now stay visible and explain why deletion is blocked when a profile is protected.
Concurrency and packaging
- State-mutating attachment operations now use fenced leases with owner tokens and monotonic generations.
- Expired workers cannot release a newer worker's lock or overwrite newer attachment state.
- The release build improves Composer, AWS SDK, Guzzle, PSR, and Symfony isolation for coexistence with other plugins and Composer-based WordPress installs.
Upgrade notes
- No database schema change is introduced in 1.0.1.
- Existing settings, Storage Profiles, object inventory, license state, and offloaded media continue to work after updating.
- The full physical-object reference model, crash-resumable multipart uploads, competitor importers, and deeper integration work remain deferred to later feature releases.