zit 0.6.0 makes repeated repository reads cheaper, accepts incremental Git imports from shallow sources whose boundary commits are already imported, and negotiates sub-manifest support explicitly rather than inferring it from a peer's Fossil version.
This release is from trunk. Horizon clones, horizon cursors and the horizon-specific sparse-cone extensions are not included.
Repository reads
The read-only repository image and log index are mapped and queried in place. Opening either no longer requires reading and checksumming the whole cache or rebuilding its entries in memory. The log index uses fixed-width records and a digest-sorted directory, including for abbreviated artifact-name lookup.
cat and ls --under search the sorted file entries of a check-in rather
than parsing every entry. Tree manifests open only the sub-manifests that
can contain the requested path or prefix. A parsed baseline manifest can
be retained in a disposable sidecar for subsequent reads.
ls --long records a blob's text/binary classification by artifact name.
The first listing still reads that blob; later listings reuse its class
and check its current availability and size. A shunned or absent blob is
still reported as absent. --no-cache reads afresh and records nothing.
The output columns and their meanings are unchanged.
These optimizations concern warm reads. A first open without derived caches still pays for their construction, and a full-tree listing still pays for the entries it emits.
Git imports
import-git --into accepts a shallow source when its boundary commits are
already known to the destination. It establishes source identity from
known commits and checks connectivity over the new range rather than
requiring the source's complete history.
A fresh import no longer places a singleton symbolic branch-name tag on a main head already labelled by the propagating branch control. That singleton could stop the name propagating to later check-ins. This prevents new affected imports; it does not rewrite existing tag history.
Sub-manifest negotiation and settings
Peers announce support with pragma send-submanifests. A writer refuses
S-bearing artifacts to a peer that has not announced support, regardless
of its numeric version. An implementation that uses only the former
version-based signal must be upgraded before exchanging sub-manifests
with this release. Ordinary repositories without S-bearing artifacts
continue using the existing Fossil-compatible protocol.
The draft and command help no longer describe sub-manifest repositories as disposable fixtures. The permanent compatibility rule remains: do not enable sub-manifests where any reader cannot understand them. Stock Fossil does not implement sub-manifests.
An in-range stored sub-manifest k remains pinned. An out-of-range stored
value now requires an explicit in-range --k to replace it. The retune
notice explains that the next check-in shares precisely those
sub-manifests whose bytes are unchanged. Clone-time settings adoption,
history-replay selection and session scope are clarified in the draft.
The obsolete provisional-format warning is removed from Git export.
Its --quiet option remains accepted for compatibility but has no effect.
Format compatibility and drafts
D and E card fractional seconds accept any number of digits and truncate to milliseconds. A cancel tag's value remains on its stored row, matching Fossil. The deterministic-simulation oracle now follows leaf recheck events rather than assuming leaves are recomputed solely from graph shape.
The drafts remain draft-fossil-*-00, revised in place. Corrections are
folded into their texts and listed in their Changes appendices. The
applied erratum files have been retired from the tip; they remain in
repository history. zit version identifies the target as RFC rev 00.
This label change does not undo any correction.
Cache compatibility and integrity
The repository's append-only store and artifact formats are unchanged. The derived log index uses a new cache layout; an older or unreadable layout is rebuilt. The baseline and blob-class sidecars are disposable and are not synchronized.
An exact-match mapped image or index open checks its version, layout and
log-tail identity, but does not verify its whole-file checksum. The full
and extension paths retain checksum verification. Atomic replacement
protects cache publication from partial writes, but it does not detect
subsequent disk corruption. Bounds checks are not a substitute for that
checksum: some corrupted derived values can be believed on a warm read.
--no-cache bypasses derived caches when an authoritative reread is needed.
Qualification
The release manifest records the actual per-platform qualification results against the exact tagged source archive. Qualification uses the CI-pinned Zig 0.17.0, native macOS ARM64 and Linux x86-64/ARM64 builds, unit and end-to-end tests, Git differentials, deterministic simulation, the seeded fuzz sweep, and Fossil interoperability checks. Publication is gated on successful qualification of every distributed binary.
For the basis of the conformance claim, see the 0.1.0 release notes.