No description
  • Rust 60.2%
  • TypeScript 38.5%
  • Go Template 0.7%
  • Dockerfile 0.4%
  • HTML 0.2%
Find a file
PerishCode 6a1de9e6fd
All checks were successful
guard / guard (pull_request) Successful in 3m32s
guard / guard (push) Successful in 3m19s
draw: pour a fetch out instead of collecting it
draw: pour a fetch out instead of collecting it

The push half streams; the fetch half still ran `upload-pack` to completion and
held everything it wrote. A clone therefore cost the server the size of what it
was sending, and the cost arrived all at once, before a single byte reached the
client. The same shape had already been named a debt on the other side of the
transport and repaired there; this is the mirror.

`Git::draw` writes the want list, closes the input, and copies the child's
output into a sink as it appears. `Repo::upload` takes that sink rather than
returning bytes, so the kernel keeps owning the process and gains the streaming
case, exactly as `pour` did for indexing. The api gives it a writer that sends
into a bounded channel and hands the receiver to the response as its body.

Streaming a response means the status line leaves before the outcome is known.
A failure part way through arrives as a broken body rather than a status, which
is the bargain git's own protocol already makes on this route: `upload-pack`
writes its refusal into the stream it has begun.

`sent` now takes anything a body can be built from, because a response is
either a small buffer this plane assembled or a stream a child is writing, and
the header pair is the same either way.

`poll_next` joins the foreign names in `ectropy.toml`: the fetch body implements
a trait it did not design and cannot rename its method.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

Land-Source: git/bounds@3aeb440ccd
2026-08-19 10:19:01 +08:00
.cargo deps: consume keel through the perish cargo registry 2026-07-16 18:53:01 +08:00
.forgejo/workflows codehull: move operations into the product cli 2026-08-03 17:45:33 +08:00
.runseal/resources codehull: move operations into the product cli 2026-08-03 17:45:33 +08:00
apps/web Retire the web plane, as ensign already did 2026-08-01 15:04:14 +08:00
charts/codehull deploy: let the shipped image actually host git 2026-08-14 10:59:36 +08:00
crates draw: pour a fetch out instead of collecting it 2026-08-19 10:19:01 +08:00
deploy deploy: let the shipped image actually host git 2026-08-14 10:59:36 +08:00
.dockerignore ship: build the api outside the image 2026-08-13 19:38:40 +08:00
.gitignore ship: build the api outside the image 2026-08-13 19:38:40 +08:00
AGENTS.md docs: govern the Codehull surface 2026-08-18 23:18:05 +08:00
ARCHITECTURE.md draw: pour a fetch out instead of collecting it 2026-08-19 10:19:01 +08:00
biome.json layout: four delivery planes — api, cli, web, charts (#25) 2026-07-16 14:45:12 +00:00
Cargo.lock draw: pour a fetch out instead of collecting it 2026-08-19 10:19:01 +08:00
Cargo.toml draw: pour a fetch out instead of collecting it 2026-08-19 10:19:01 +08:00
codehull.toml repo: restore the repository truth kernel 2026-08-14 06:06:58 +08:00
DESIGN.md docs: govern the Codehull surface 2026-08-18 23:18:05 +08:00
docker-compose.yml rename: this caller is codehull; Forgejo keeps its name upstream (#24) 2026-07-16 14:09:54 +00:00
ectropy.toml draw: pour a fetch out instead of collecting it 2026-08-19 10:19:01 +08:00
package.json layout: four delivery planes — api, cli, web, charts (#25) 2026-07-16 14:45:12 +00:00
plumb.toml draw: pour a fetch out instead of collecting it 2026-08-19 10:19:01 +08:00
pnpm-lock.yaml Migrate Codehull to Ectropy and Plumb (#48) 2026-07-28 08:15:44 +00:00
pnpm-workspace.yaml Stop copying a directory this repository no longer has 2026-07-31 00:55:45 +08:00
runseal.toml codehull: move operations into the product cli 2026-08-03 17:45:33 +08:00
sidecar.toml Retire the web plane, as ensign already did 2026-08-01 15:04:14 +08:00