Artifact e4dad473508933b576da32847b6a14e191414c88dc27117e628a2e3af289a5a0:
- File docs/RELEASE-NOTES-0.3.9.md — part of check-in [c641321230] at 2026-09-09 14:26:35 on branch trunk — 0.3.9: version bump and release notes (user: dmestas, size: 2573) [annotate] [blame] [check-ins using]
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=1in the environment reports the persist drain's peak deferred set on exit, the same evidence-seam shape asZIT_MANIFEST_READS. - A clone that fails mid-exchange now leaves a partial
.zitin 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.