Skip to content
zit Artifact [4a65399778]
Login

Artifact [4a65399778]

Artifact 4a6539977895712d393a840405efd3d684c2e31a92b6f57b71cd40ceaeff90c1:

Instance of technote [d4ac392196] - Only a push writes by dmestas on 2026-10-04 18:10:39.
C Only\sa\spush\swrites
D 2026-10-04T18:10:39.877
E 2026-10-04T18:10:39 d4ac392196a8d8aa58deb2c1ba563d3b33ea583c
N text/x-markdown
U dmestas
W 1449
A Fossil sync request names what it is for. `pull` asks for content, `push`
offers it, and a sync sends both. Fossil's server trusts the offer only when
the request said `push` and the account may write; a `file` card in any
other request is refused with `not authorized to write`.

zit's server did not ask. It stored every `file` card a request carried, and
treated every `igot` as an offer, asking the client for anything it named.
The push card was checked by nobody. quarry, zit's forge, found it from the
outside: its front lets anonymous pulls through and checks logins only on
requests that say `push`. A `pull` request with a `file` card in it passed
the front, and the zit behind it stored the artifact.

0.3.37 takes Fossil's rule. Content comes only with a push, and only from a
login when the server has one. Anything else is refused whole, before a byte
is stored. An `igot` from a client that is not pushing is an announcement,
not an offer, so it no longer makes the server ask for the content. Nothing
changes for zit's own client, which has always sent `push` when it pushed.

`zit serve` on its own still takes any push: it has no logins to check. It is
meant to run behind a front that has them, as quarry's does, or on hosts you
trust.

The same release adds cherry-picks and backouts to `zit crosslink`, one
`cherrypick +HASH` or `cherrypick -HASH` line per Q card, so an indexer can
draw them without parsing manifests again.

Z e7b0981cb3259e8196c13af6e5669f92