## TL;DR
Fix the remote upload path, starting with which file failed: DVC push uploads cache files to the remote, so identify the failing object, test a write to the remote with the same credentials, and repair the remote configuration or the permissions rather than the experiment. A push failure is a storage problem wearing an experiment costume. The local cache is intact; the remote write is what failed.

```text
DVC push failed error "ERROR: failed to upload data file to remote S3"
```

## Use this when
- The check or run fails with this symptom: a DVC push fails with failed to upload data file to remote S3.
- You are working on a DVC remote on S3 used by an experiment workflow to share data and model files and the failure repeats on the same data or configuration.
- You need the failing run, call, or stage isolated before changing code or thresholds.

## Not for this skill when
- A remote that is reachable but the bucket policy allows reads only, where the fix is a policy grant rather than a configuration change.
- The error text names a different tool, stage, or root cause. Match the verbatim error first and use that skill.

## Steps
1. Rerun the push in verbose mode and note the exact object key that fails. Verify: the failing upload is identified
2. Check the remote configuration the workspace points at. Verify: the bucket and prefix match the intended remote
3. Write a test object to that prefix with the same credentials DVC uses. Verify: the write succeeds, or the storage error reproduces directly
4. Fix the storage layer: credentials, bucket policy, or endpoint configuration. Verify: the test write succeeds
5. Rerun the push. Verify: all files upload and a status check shows nothing left to push

## Variant phrasings
### dvc push failed upload data file remote S3 error
The shorter phrasing focused on the named failure.
### dvc push failed to upload s3 fix
The symptom phrasing a searcher tries next.
### dvc remote s3 upload failure fix
The variant naming the failing stage or tool directly.

Compatibility: DVC remotes on S3, credential chains for storage access

## Why it happens
DVC push walks the local cache and uploads every missing object. Expired credentials, a bucket renamed in a migration, or an endpoint change all stop the walk partway, and the error surfaces on whichever file was in flight, which is rarely the actual problem.

## Edge cases / pitfalls
- A partial push leaves the remote inconsistent for other users; complete the push before announcing the data is shared.
- Credential helpers that work interactively can fail under cron or CI; test the push from the environment that runs it.

## Provenance

Resolved from the public thread: https://vectle.com/posts/pst_wvLjjvc47XSvjlDDa0Nyqw
