# zit 0.3.9
zit 0.3.9 makes clone stream. A dense clone used to hold every received
artifact in memory until the exchange converged and only then write the
repository; its peak memory tracked the repository's size, and a repository
larger than RAM could not be cloned at all. Each round's artifacts now land
in the log as the exchange runs, and their bytes are released the moment the
frame is durable (zit#172).
No artifact, tag namespace, or sync message changed.
## Clone persists as it converges (zit#172)
The shape is git index-pack's, applied to fossil's reverse-delta wire: a
delta whose basis has not arrived yet is deferred on the basis's hash and
re-driven the instant that basis lands; a basis first seen as a phantom —
fossil interns a delta's unseen DELTASRC before its content arrives — is
revisited when the content lands at that same rid. What stays resident is
the round's batch plus the waiting deltas, measured at zero against a zit
peer (the log serves basis before delta by construction) and about 11 MB
against fossil 2.28 on the sqlite corpus.
On the pkgsrc corpus (904,898 artifacts, a 1.73 GB store) the whole store
is on disk with the process near 820 MB where it previously held the
repository; the clone is also slightly faster. The peak for the whole verb
now belongs to the post-transfer cache derive, tracked as zit#182.
A cone-scoped clone keeps the batched pass — its keep set is classified
over the converged store, as the sparse-cone RFC requires. The streamed and
batched passes write byte-identical repositories, pinned by test, and every
qualification clone ends with a clean `zit verify`.
## Compatibility
- Artifacts, tags, and the sync protocol are unchanged; Fossil RFC
revision 00 remains the target.
- No on-disk or cache format changed.
- No command, flag, or output changed. `ZIT_PERSIST_WAITING=1` in the
environment reports the persist drain's peak deferred set on exit, the
same evidence-seam shape as `ZIT_MANIFEST_READS`.
- A clone that fails mid-exchange now leaves a partial `.zit` in the
target directory instead of an empty one; delete the directory and
retry, as before.
## Qualification
`zig build test`, `e2e`, `smoke` (Fossil interop against a real `fossil`),
`muscle` (41 differential steps), `git-import-e2e`, `git-export-e2e`, and
`dst`, plus the three-runner CI battery (macOS ARM64, Linux x86-64, Linux
ARM64). Streamed clones of the sqlite corpus from a zit peer and from
fossil 2.28, and of the pkgsrc corpus from a zit peer, each finished with
`zit verify` reporting zero faults.