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:
1 parent
665f701133
commit
3e68cb5b68
4 files changed
+345
-4
No files matched your search
@@ -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
|
||||
|
||||
Reference in new issue
Block a user