Artifact d73989a9dd3fef7c849505f50bbc23d5899e11a41b8b8577d4aac5f4ea728d8f:
- File docs/RELEASE-NOTES-0.14.1.md — part of check-in [7eb82c7f9e] at 2026-11-09 02:36:04 on branch trunk — Release 0.14.1 (user: dmestas, size: 2756) [annotate] [blame] [check-ins using]
zit 0.14.1
zit 0.14.1 makes annotate cheap at any limit once a file has been
annotated, and about a third cheaper the first time.
This release is from trunk. Stores and the wire are unchanged from 0.14.0.
One cache is added beside each store and is filled as annotate runs;
nothing is rebuilt on upgrade.
annotate
- A diff cache.
annotatekeeps, per file, the line diff between each pair of consecutive versions it has walked, in.zit-cache/diff, keyed by the two versions' content hashes. A laterannotateof that file, at any-nlimit or none, replays those diffs instead of recomputing them, and a version whose diffs are all cached is not read at all. The answer is the same, byte for byte: a diff depends only on the two contents and the diff options, and both are part of the key. This also covers the case 0.14.0 could not answer from the blame cache, a window holding a version whose primary parent is outside it and a merge parent inside it. On a 32,500-line file with 1,700 versions, after one walk:
| 0.14.0 | 0.14.1 | |
|---|---|---|
annotate -n 40 |
0.59 s | 0.09 s |
annotate -n 50 |
0.67 s | 0.10 s |
annotate -n 100 |
1.38 s | 0.15 s |
The cache is capped at 4 MB per file, and a damaged or inconsistent file is ignored and rewritten, never trusted.
- Each version is split into lines once. The diff engine (the port of
Fossil's diff.c) split every version twice, once as the newer side of one
diff and once as the older side of the next. A first, uncached
annotatecosts about 15% to 40% less: on the same file-n 40went from 0.57 s to 0.48 s, and an unlimited annotate from 10.6 s to 6.4 s.
A version answered entirely from cached diffs is not read. Content removed
by policy (purge, shun, a signed erasure) still refuses as before,
because the cache is keyed to the same fingerprint as the blame cache. But
content that vanished from the store with no such record, which only store
damage does, is no longer noticed by annotate. zit verify is the check
for that.
Compatibility
Stores, check-ins, the sync protocol and the daemon protocol version are
unchanged. The new .zit-cache/diff directory is advisory: deleting it
costs only speed, and an older zit ignores it.
Qualification
The release manifest records native qualification against the exact tagged source archive on macOS ARM64, Linux x86-64 and Linux ARM64, using the pinned Zig 0.17.0 toolchain. Publication is gated on unit and end-to-end tests, Git differentials, deterministic simulation, seeded fuzzing, and Fossil interoperability checks on every distributed target.
For the basis of the conformance claim, see the 0.1.0 release notes.