diff --git a/docs/research/alk-stack.md b/docs/research/alk-stack.md index 74125d4..95accd0 100644 --- a/docs/research/alk-stack.md +++ b/docs/research/alk-stack.md @@ -87,6 +87,13 @@ door produced the stream. 2. **HTTP smart protocol shape**: confirm alkhttp's streaming response body can carry a pack (chunked) and that request bodies stream in without buffering the whole POST in memory (receive-pack can be gigabytes). + **Verified (POC-3, 2026-09-21)**: real git 2.43 clones/fetches + fsck-clean over `Connection → HttpAdapter → axum custom routes`; + request bodies stream (`BodyDataStream`, one hyper-read chunk per + `poll_next` — measured with a dribble probe and git's forced-chunked + POST path); pack responses stream under back pressure (bounded mpsc → + `Body::from_stream`, O(counts) RSS on a 60k-object clone). See + `poc3-findings.md`. 3. **alkcall backpressure/limits vs git sessions**: large clones are long-lived, high-throughput, single-direction streams; confirm channels buffer limits (ADR-040) don't fight pack streaming, or route git sessions diff --git a/docs/research/pocs.md b/docs/research/pocs.md index 52e66fe..ebd9a6d 100644 --- a/docs/research/pocs.md +++ b/docs/research/pocs.md @@ -81,6 +81,15 @@ whole pack in memory for large repos — record memory behavior for a ## POC-3: smart-http shape through alkhttp +**Status**: complete (2026-09-21) — **proceed**. See `poc3-findings.md`. +Real git 2.43 clones/fetches/tag-checkouts over `http://` through the full +alkcall → alkhttp path (`Connection::from_bidi(http/1.1)` → `HttpAdapter` +→ axum custom routes); request bodies stream (measured via dribble probe + +git's forced-chunked path), pack responses stream under back pressure with +O(counts) memory on a 60k-object clone. Key protocol correction: http V2 +responses end at the flush — the `0002` response-end pkt is synthesized by +the client's transport helper, never sent on the wire. + **Hypothesis**: alkhttp can serve `GET /info/refs` and stream a POST body (ingest without full buffering) for `git-receive-pack`. @@ -99,8 +108,8 @@ POC-1 first (the BiStream/packetline fit is the load-bearing assumption). POC-2 next (the crux of fetch). POC-3 last (http shape). Each POC updates the corresponding research doc with results and a proceed/pivot/block note. -**Status**: POC-1 and POC-2 complete and proceed; POC-3 is the remaining -gate for phase 0 completion. +**Status**: POC-1, POC-2, and POC-3 complete and proceed — phase 0 gates +all pass. ## Modes applied to these POCs