cloudflare / cloudflare/developer-platform
Cloudflare Artifacts git push returns HTTP 500 at ~64 MiB pack
- Dominant language
- No language data
- Stars
- 1
- Forks
- 0
- PR merge metrics
- No merged PRs in 30d
Description
### What versions & operating system are you using?
```text
System:
OS: macOS 26.5
CPU: (10) arm64 Apple M1 Pro
Memory: 150.52 MB / 16.00 GB
Shell: 5.9 - /bin/zsh
Binaries:
Node: 25.9.0 - /opt/homebrew/bin/node
npm: 11.12.1 - /opt/homebrew/bin/npm
pnpm: 11.0.6 - /opt/homebrew/bin/pnpm
bun: 1.3.10 - /Users/noam/.bun/bin/bun
npmPackages:
miniflare: ^4.20260424.0 => 4.20260521.0
wrangler: ^4.93.0 => 4.94.0
```
Also observed with:
```text
git version 2.50.1 (Apple Git-155)
```
### Please provide a link to a minimal reproduction
https://github.com/noamt/cloudflare-artifacts-64m-repro
### Describe the Bug
### Summary
Pushing a fresh Git repository to a fresh Cloudflare Artifacts repo fails with raw HTTP 500 once the reachable Git pack is about 64 MiB.
This looks like a Cloudflare Artifacts pack-processing issue:
- Wrangler Artifacts commands successfully create repos and issue repo-scoped write tokens.
- Synthetic pushes succeed through 63 one-megabyte random binary files (local `size-pack: 63.02 MiB`).
- The same shape fails at 64 one-megabyte random binary files (local `size-pack: 64.03 MiB`).
- The Git client receives a raw HTTP 500 during `git push`; no structured Artifacts error code is surfaced.
### Reproduction steps
1. Clone the minimal repro repository:
```bash
git clone https://github.com/noamt/cloudflare-artifacts-64m-repro.git
cd cloudflare-artifacts-64m-repro
git gc --prune=now
git count-objects -vH
```
Observed local pack size:
```text
size-pack: 64.03 MiB
```
2. Create a fresh Cloudflare Artifacts repository and issue a write token:
```bash
npx wrangler artifacts repos create --namespace --default-branch main --json
npx wrangler artifacts repos issue-token --namespace --scope write --ttl 1800 --json
```
3. Push the repro commit to the returned Artifacts remote using the issued token:
```bash
git -c credential.helper= push --force HEAD:refs/heads/main
```
4. Optional comparison: generate the same synthetic repo with 63 files instead of 64. In my testing, the 63-file repo produced `size-pack: 63.02 MiB` and pushed successfully.
### Threshold observed
```text
1 MiB pack: 1.00 MiB -> push succeeds
4 MiB pack: 4.00 MiB -> push succeeds
8 MiB pack: 8.00 MiB -> push succeeds
16 MiB pack: 16.01 MiB -> push succeeds
24 MiB pack: 24.01 MiB -> push succeeds
32 MiB pack: 32.01 MiB -> push succeeds
48 MiB pack: 48.02 MiB -> push succeeds
52 MiB pack: 52.02 MiB -> push succeeds
56 MiB pack: 56.02 MiB -> push succeeds
60 MiB pack: 60.02 MiB -> push succeeds
62 MiB pack: 62.02 MiB -> push succeeds
63 MiB pack: 63.02 MiB -> push succeeds
64 MiB pack: 64.02/64.03 MiB -> HTTP 500 / send-pack disconnect
```
### Expected behavior
Artifacts should either accept this push or fail with a documented, structured limit/error. If there is a per-push, pack-size, request-body, or service-memory limit near 64 MiB, it would be useful for that limit to be documented and surfaced as a structured Artifacts error instead of a raw Git-side HTTP 500.
### Actual behavior
The Git push fails with HTTP 500 and disconnects during `send-pack`.
### Please provide any relevant error logs
```text
error: RPC failed; HTTP 500 curl 22 The requested URL returned error: 500
send-pack: unexpected disconnect while reading sideband packet
fatal: the remote end hung up unexpectedly
Everything up-to-date
```
Contributor guide
Assessment
This issue has not been assessed yet.