Skip to content
zit Artifact [df8da5bc64]
Login

Artifact [df8da5bc64]

Artifact df8da5bc64fdb7d7e489a0d73d734eef5f877fed96ba6814212f0fcde77ad794:


# zit 0.6.0

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](RELEASE-NOTES-0.1.0.md).