Skip to content
zit zit 0.1.4
Login

zit 0.1.4

zit 0.1.4 is a repository-workflow and distribution release over 0.1.3. It keeps the same Fossil RFC revision-00 scope while adding Git interchange, sparse and multi-worktree operation, broader repository inspection, and a release process that proves the published binaries run below the CPUs that built them.

Highlights

Portable packaged binaries

The 0.1.3 Linux x86-64 archive was built for its Zen 4 release host rather than for the architecture baseline. It therefore contained unconditional AVX-512 and SHA-NI instructions and exited with SIGILL on ordinary x86-64 machines, including GitHub-hosted Ubuntu runners. The Linux ARM64 build had the same class of defect through LSE and crypto-extension instructions.

The release workflow now materializes one source archive from the exact version-X.Y.Z Fossil tag and supplies that archive to every build runner. Each ReleaseFast build names its target explicitly: aarch64-macos, x86_64-linux, or aarch64-linux. Packaging happens once after the full release battery. The transferred archive is checksum-verified and its inner binary is executed from the package, not from the build tree.

Linux x86-64 is run directly on GitHub-hosted Ubuntu and under QEMU's Nehalem CPU model, which predates AVX. Linux ARM64 is run under QEMU's Cortex-A53 model, which predates LSE. Publication consumes those already-qualified archives; it does not rebuild them.

Repository interchange and layout

import-git translates Git fast-export streams into zit history with explicit limits, progress, rollback on failure, reference collision diagnostics, and optional sub-manifest generation. export-git writes bounded incremental fast-import streams, persists marks, preserves topology and identities, and publishes mirrors without exposing partial state. import-fossil --compatible preserves the source corpus in its original sync world; --submanifest replays and verifies the whole history before atomically publishing a new sub-manifest corpus and provenance map.

Sparse cones now apply across clone, open, update, merge, sync, and pack. Elided artifacts remain distinct from shunned artifacts, a sparse store does not request content outside its cone, and an origin that cannot satisfy a requested cone returns a named refusal rather than an incomplete clone. Detached worktrees can open or create additional checkouts over one store, and open --store can deliberately re-point an existing worktree.

Inspection, diagnostics, and performance

The new frames stream exposes verified raw artifacts after an opaque cursor, and annotate resolves a version through the same name rules as other read commands. verify performs an explicit repository integrity check. grep -S and grep -G search historical file content and change sets. Help topics now centralize name resolution, sparse behavior, repository selection, and exit status instead of letting each verb restate a drifting subset.

Read-only store opening scans frame headers instead of materializing every stored container. Pack, log, and repository-state construction reuse derived adjacency, file sets, and delta-base reads. The shipped optimization mode is now ReleaseFast and is pinned as project policy rather than left to a packager's flags; validation of untrusted input remains explicit and is guarded against being replaced by debug-only assertions.

Qualification

Every published binary is built from the same checksum-pinned source archive with Zig 0.16.0 in ReleaseFast mode. Each native target runs:

The final package is checksum-verified after artifact transfer and executed on a separate qualification runner. release-manifest.json records the exact source identity, target names, archive and binary hashes, optimization mode, and qualification performed.

Compatibility

The command-line version string is:

zit 0.1.4 (targets Fossil RFC rev 00)

Repositories written by 0.1.3 require no conversion. Existing dense checkouts remain dense unless a sparse cone is selected explicitly. The 0.1.3 artifacts remain published for provenance but should not be used on Linux; 0.1.4 is the portable replacement.