docs(research): POC-2 complete — server-side pack generation verified

POC-2 (standalone mode, /workspace/alkgit-poc2) confirms the fetch crux:
gitoxide's own generation pipeline streams valid packs to any io::Write,
and real git 2.43 clones/fetches over the POC-1 bridge with fsck --strict
passing on every clone.

- Findings: docs/research/poc2-findings.md (proceed)
- git-protocol.md: pack-generation option list resolved ((b) wins);
  record two-stage closure (commit ancestry -> TreeContents), odb handle
  prerequisites, bundle::write's real role (receive-pack indexing),
  missing-delta-synthesis note
- gitoxide.md: generation pipeline + gix-odb API contract notes
  (Cache !Sync, prevent_pack_unload, missing_objects check)
- pocs.md: POC-2 outcome recorded; POC-3 is the remaining phase-0 gate

Verification: cargo run -- selftest (gen -> bundle roundtrip ->
index-pack --strict -> verify-pack -> unpack-objects --strict -> fsck ->
closure cross-check -> sideband wire decode); 10k-commit/60k-object
fixture: closure 60000==60000, pack 5.33MB in 5.5s at ~11MB extra RSS;
real git clones (loose and packed sources) + tag checkout + incremental
fetch all fsck-clean over git:// through the alkcall Connection/BiStream
path
This commit is contained in:
glm-5.3-flash committed 2026-09-20 18:36:11 +00:00
1 parent 665f701133
commit 3e68cb5b68
4 files changed
+345 -4

No files matched your search

+11
View File
@@ -53,6 +53,14 @@ compatibility (they should, being tokio io objects; may need a thin adapter).
## POC-2: server-side pack generation
**Status**: complete (2026-09-20) — **proceed**. See `poc2-findings.md`.
Real git 2.43 clones/fetches (fsck-strict clean) packs generated by
gitoxide's own pipeline (`count::objects` + `iter_from_counts` +
`FromEntriesIter`) streamed over sideband; memory is O(counts), not
O(pack) — 60k-object pack written through a 64 KB sink at ~11 MB extra RSS.
Course correction recorded: `TreeContents` does not follow commit parents —
the closure needs a commit-ancestry walk feeding the count stage.
**Hypothesis**: given a fixture repo and a want/have set, we can produce a
valid pack stream in memory that `git verify-pack`/`git unpack-objects`
accepts, using one of:
@@ -91,6 +99,9 @@ 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.
## Modes applied to these POCs
- POC-1, POC-2: **standalone mode** — nothing in the alkgit repo exists to