cloudflare / cloudflare/developer-platform

Cloudflare Artifacts git push returns HTTP 500 at ~64 MiB pack

Open
#29 2 comments 0 reactions 0 assignees View on GitHub
product:artifacts
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

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.