Skip to content
zit Artifact [7c968ab247]
Login

Artifact [7c968ab247]

Artifact 7c968ab247ad1194f9163e625a37452ae72bdc23f3e66e8ea26b39f6e0a52914:


# zit 0.1.2

zit 0.1.2 is a correctness release over 0.1.1. It keeps the same Fossil RFC
revision-00 scope. Two defects made zit unusable against a repository of real
size and real history; both are fixed, and between them they were the reason a
clone of the canonical Fossil repository could be fetched but not used.

## Highlights

- Serving a sync round now costs work bounded by the request rather than by the
  served store. Announcing a store no longer inflates every artifact in it, and
  the in-memory snapshot is built once rather than rebuilt per request.
- Repository-state assembly no longer fails on a stored artifact it declines to
  classify, provided that artifact's bytes match the name they are stored
  under.
- The two failures that produced the message `cannot read repository:
  repository is corrupt` are separated, so a repository that is merely
  unreadable by this implementation is no longer reported as damaged.

## Serving a large repository

Two costs made a clone cost work proportional to rounds times store size. The
walk that announces held content classified each artifact by materializing its
plaintext, so announcing a store cost that store's uncompressed size on every
round; it now answers from the retained form. The served snapshot was rebuilt
from the log on every request; it is now cached and rebuilt only when the log
grows, which keeps a commit made alongside a live server visible on the next
request while keeping the rebuild out of any client's budget.

Past a few thousand artifacts, a single round previously outran the connection
deadline and the server answered nothing at all. A clone of the canonical
Fossil repository — 67,499 artifacts — now completes in 67 rounds.

## Artifacts this implementation declines to classify

A conforming repository contains artifacts a conforming parser rejects. The
artifact grammar requires the `U` card on a wiki artifact; Fossil elides that
card when the submitter is `nobody`, then stores and synchronizes the result.
Instances exist in the canonical Fossil repository.

Assembly previously rejected an entire repository over one such artifact, while
`timeline`, `ls`, `info` and `branch` read the same store correctly. The two
conditions are now separated by the artifact's name: bytes that hash to the
name they are stored under were stored correctly, so the artifact is opaque to
repository state and contributes nothing to it; bytes that do not hash to their
name remain an integrity failure and remain fatal.

This behavior is recorded as a clarification against the Repository State
draft, which did not previously say what assembly does with an artifact
classification rejects.

## Verification against Fossil

On a clone of the canonical Fossil repository, `zit update` previously exited 1
having materialized nothing. It now materializes all 983 files of the check-in,
each byte-identical to Fossil's own checkout of that same check-in.

## Qualification

Each published native binary is built from the same checksum-pinned source
archive with Zig 0.16.0 in ReleaseSafe mode. The platform battery comprises:

- formatting and native build;
- the complete unit and end-to-end suites;
- deterministic simulation, seed 1 for 1,000 steps;
- all 27 fuzz targets, seed 1 for 100 rounds each; and
- Fossil 2.28 interoperability runs covering scenarios S1-S8.

The release manifest records the exact artifact checksums, the source identity,
and the qualification actually performed for each target.

## Compatibility

The command-line version string is:

```text
zit 0.1.2 (targets Fossil RFC rev 00)
```

The feature scope and deliberate limitations remain those documented for 0.1.0.
No repository written by 0.1.1 needs conversion.