Artifact bb786f01bfca90776d7977c64c1bab13a947262117f551101efc4008b0a61d8d:
- File
docs/RELEASE-NOTES-0.3.7.md
— part of check-in
[9033c13f21]
at
2026-09-17 17:04:25
on branch trunk
— Remove issue-tracker numbers from source and documents
The tracker is disposable and does not live with the source, so a number is a dangling pointer. Every zit#NN and #NN reference in code comments, test names, help text, smoke labels, identifiers, release notes and errata is replaced by enough context to stand alone, or by a short plain statement of the problem. No behaviour changed. (user: dmestas, size: 3356) [annotate] [blame] [check-ins using]
# zit 0.3.7 zit 0.3.7 makes four read verbs cost what the image already paid for. `grep` over a file's history takes a third of a second instead of twenty; `timeline`, `info NAME`, and every read on a cache written by an older build no longer replay work the image holds. A forge rendering a page from hundreds of `zit info` calls sees each one at the process-start floor. No artifact, tag namespace, or sync message changed. ## `grep` reads each version once `zit grep PATTERN FILE` walked every check-in in the store and read the file's manifest at each, then searched the same blob again and again: on libspatialite that was 20,937 manifest reads and 19 seconds for 66 distinct versions of one file. It now uses the same touched set annotate uses to skip check-ins whose record does not list the file, reads the file's blob once per distinct content hash, and groups the report the way `fossil grep` does — one row per version, credited to the oldest check-in that introduced it, newest first. 272 reads and 0.35 s on the same file; the version lists match fossil's byte for byte. ## `timeline` opens on the image `timeline` opened the repository in full mode and replayed every crosslink record for one row, though the image has carried adjacency since layout 2 and comment and login since layout 6. It reads the image now: 60 ms to 8 ms on a 22k check-in store. `-F full`, `-v`, and `-p` still read the manifests they render, through the facade. Output is byte-identical across every format, pinned by an e2e that renders warm and then from a fresh derive. ## A stale image is rebuilt once A cache whose image was absent or written at an older layout stayed that way: only a miss stored the cache, and a hit replayed the record body on every open — 58 ms per call on the same store, forever, after any layout bump. A hit that has to replay now rewrites the image from the view it just built, so the fallback is paid once. ## `info` renders Q cards from the state (step 1) `info NAME` read and parsed the check-in's manifest for one purpose: the `cherrypick:`/`backout:` provenance line almost no check-in has. The crosslink record, the state, and the image now carry each check-in's Q cards — sign and target, the two facts fossil's `cherrypick` table keeps — and `info` reads them there. On libspatialite `info NAME` went from 16 ms to 6 ms, level with `leaves`, with no manifest read. The multi-name form of `info` (step 2) is still open on the issue. ## Compatibility - Artifacts, tags, and the sync protocol are unchanged; Fossil RFC revision 00 remains the target. - The cache format changed: the crosslink record is at format 4 and the image at layout 7. A cache written by 0.3.6 misses once and is rebuilt; nothing needs to be run by hand. - No command, flag, or output changed. `grep`'s version order is now fossil's (oldest introducer, newest first); the set of versions is the same. ## 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). Timings were taken on the libspatialite corpus (24,018 artifacts) with release builds, medians of 15 runs; `grep` output was diffed against `fossil grep` on the same repository.