Child of GIT-001; depends on GIT-002. With one OFS-only stream per shard, full-clone serving is trivial: the whole log IS a valid git pack sans framing, so blast it verbatim with a fresh PACK header + SHA-1 trailer (PSTRWrite, the existing stitcher). The hard case is the incremental fetch: a byte suffix from the client's have-frontier is NOT self-contained, because OFS_DELTA records near the tail can reference bases before the frontier. The current WIREBuildSegments (keeper/WIRE.c:319) tiles PACK bookmarks to ship a verbatim range — that relied on self-contained per-fetch batches, which one-stream dissolves (and whose count math caused GET-019). Add a real thin-pack builder that walks the wanted set and thinnifies the boundary. See PackLog, Keeper.
(count, byte_len) bookmark, so wire_tile_count / wire_find_pack lose their unit; the count-vs-bytes mismatch class (GET-019) goes with it.PSTRWrite when the client has no haves.WIREBuildSegments.ofs-delta cap as today (WIRE_CAP_OFS_DELTA).PSTRWrite as the verbatim stitcher for the full-clone path; reuse dog/git/PACK.h header/varint emit and DELTEncode — no open-coded pack bytes (CLAUDE §10).git fetch) AND beagle be:// peers; a beagle peer could accept the raw OFS-only stream directly, but emit standard packs for uniformity unless a measured win says otherwise.—
Branch on haves: empty → verbatim whole-log; non-empty → thin builder.
PSTRWrite a single verbatim segment + header(count) + trailer. Reuse the existing stitcher.WIREBuildSegments.log()/report if the builder falls back to shipping a base raw rather than thin (CLAUDE, no silent truncation — the GET-019 lesson).test/PSTR.c / test/WIRE.c — (a) full clone byte-round-trips through git index-pack; (b) incremental fetch across a delta boundary yields a valid thin pack a vanilla git client unpacks; (c) a large-blob 1-line-change across the frontier produces a small thin delta, not a raw re-ship (the headline efficiency check). Build WITH_SSH.71a31179 on dogs trunk: WIREBuildSegments emits per-.keeper verbatim segments for full clones (PSTRWrite; the bookmark-tiling helpers wire_find_pack/wire_bookmark_at/wire_tile_count deleted, so the GET-019 count-vs-bytes truncation class is structurally gone). New WIREBuildThinPack + shared keeper/CLOSE closure walk build thin packs: OFS back-offsets recomputed output-relative, boundary bases flipped to REF_DELTA, a reverse-dependency pass fresh-DELTEncodes a want-side object against a client-held sibling; over-ship guard logs any raw fallback (WIRENOROOM on overflow, never a silent cap). Storage untouched. build-ssh ctest 395/395 (ssh clone/fetch round-trips RAN); headline check: a 19 KiB blob 1-line change → 278-byte thin pack vs 8984 raw (~32×), git index-pack --fix-thin accepts both the full and thin (incl. REF-only) packs.