WordPress 7.1 Beta 3 fixes a Safari HEIC path that could create duplicate attachments. Duplication can appear as two Media Library rows, one visible row plus orphaned files, or a converted derivative attached to a second record. The test must correlate the browser action, network requests, WordPress attachment rows, file family, conversion logs, and CDN copies.
Use this on staging for sites that receive iPhone photos through Safari, including real estate listings, service estimates, support forms, and ecommerce reviews. Test the exact Safari and operating system versions used by customers and editors.
Quick answer
Upload a uniquely named HEIC fixture once in Safari while recording the network panel and a server correlation ID. Count POST requests, attachment inserts, original and converted files, metadata generation calls, and offload operations. Repeat with a canceled selection, a network interruption, and a deliberate retry. Each completed user action should resolve to one attachment family.
What to check first
- Record Safari, macOS or iOS, WordPress build, PHP image stack, HEIC support, conversion settings, offload plugin, and CDN behavior.
- Hash the HEIC fixture and use a unique filename and visible label so every attachment row and generated object can be tied to the same action.
- Capture browser POST requests, response IDs, REST or admin-ajax routes, attachment database inserts, metadata updates, generated files, and object-store writes.
- Inspect Media Library grid and list views, attachment edit page, featured image selector, API response, database rows, and storage keys for duplicate identities.
- Test interruption and retry without deleting evidence first, then prove which row and files belong to the completed action.
Diagnostic table
Use this table to keep the work practical. It connects the symptom to evidence and a verification step.
| Action | Evidence to collect | How to verify |
| Create a traceable HEIC fixture | Record Safari, macOS or iOS, WordPress build, PHP image stack, HEIC support, conversion settings, offload plugin, and CDN behavior. | One browser action maps to one successful upload request and attachment ID. |
| Correlate browser and server requests | Hash the HEIC fixture and use a unique filename and visible label so every attachment row and generated object can be tied to the same action. | The database and storage inventory contain no orphaned duplicate family. |
| Count database rows and file-family objects | Capture browser POST requests, response IDs, REST or admin-ajax routes, attachment database inserts, metadata updates, generated files, and object-store writes. | Converted output renders with correct orientation and metadata. |
| Exercise interruption and retry cases | Inspect Media Library grid and list views, attachment edit page, featured image selector, API response, database rows, and storage keys for duplicate identities. | Retry and cancel cases produce documented, bounded results. |
Why this usually happens
- Safari may expose a source HEIC and a converted representation during one selection flow.
- A client retry can overlap with a server request that completed after the browser stopped waiting.
- Conversion and attachment creation can be split across hooks that are not idempotent.
- Offload plugins may copy both source and converted files with different callbacks.
- Media Library caches can temporarily hide or duplicate rows without matching the database state.
Useful command or data shape
Adapt paths, IDs, and privacy handling to the site before running commands or storing data on production.
test_id: WP71B3-HEIC-04
browser: Safari
fixture_sha256: recorded
user_actions: 1
upload_posts: 1
attachment_rows: 1
original_objects: 1
converted_objects: 1
metadata_updates: 1
offload_jobs: 1
result: pass
Safe fix order
Do the work in a sequence that makes each result easy to prove. Stop if a step produces new evidence that changes the incident scope.
- Create a traceable HEIC fixture
- Correlate browser and server requests
- Count database rows and file-family objects
- Exercise interruption and retry cases
- Isolate conversion or offload hooks if counts diverge
Decision rule
Pass when each successful user action creates exactly one attachment identity with its expected source and converted files, while canceled actions leave no publishable record. A second file format is not automatically a duplicate if it belongs to the same attachment family.
What to tell the client or owner
Give the site owner the affected version, exact workflow, observed result, business impact, evidence location, temporary control, named owner, and next review time. Remove credentials and personal data from shared screenshots and logs.
Production verification checklist
- One browser action maps to one successful upload request and attachment ID.
- The database and storage inventory contain no orphaned duplicate family.
- Converted output renders with correct orientation and metadata.
- Retry and cancel cases produce documented, bounded results.
Mistakes to avoid
- Do not count files without checking their attachment relationship.
- Do not delete one row before preserving request and hook evidence.
- Do not test only Chrome with a renamed HEIC file.
- Do not purge the full media CDN for one fixture.
Questions teams ask during testing
Is a HEIC source plus a WebP file a duplicate?
Not necessarily. They can be two files in one attachment family. The bug is a duplicated attachment identity or unintended duplicate file family.
Why test Safari specifically?
The browser selection and conversion path can differ from Chrome and Firefox, so the reported Safari behavior needs a real Safari request trace.
When HandL WP should help
Bring in HandL WP when this affects a production site, paid lead flow, checkout, email delivery, or a managed fleet. We can preserve evidence, isolate the failing layer, make the smallest corrective change, and verify the result across WordPress, the external service, logs, and the user journey.
If this is active on a production site, diagnose duplicate WordPress attachments.
Related HandL WP guides
Use these related guides when the same issue touches tracking, security, checkout, or crawler visibility.
Helpful references