Advisories and lineage
Declare commits compromised and find everything built on them.
Search for a command to run…
Declare commits compromised and find everything built on them.
A dataset can turn out to be poisoned, a base model backdoored, a corpus mislicensed or leaking personal data. By then it has usually been trained on, fine-tuned and shipped inside agents. An advisory marks the affected commits, and Zaryn finds everything built from them.
The repository's owner or an admin files it, from the repository's Advisories tab or the CLI:
zev advisory file --kind poisoned --severity high \ --summary "Backdoor trigger patches in 2% of images" \ --introduced 91a707d --fixed 5899f2f--introduced is the first affected commit (or a branch). --fixed is the first clean one, if there is one. Every commit in between is covered, on every branch. A model trained on a fixed version isn't flagged.
Zaryn follows recorded lineage: trained_on, fine_tuned_from, derived_from and evaluated_on links, plus the models an agent's manifest uses. Each repository downstream gets a verdict:
| Verdict | Meaning |
|---|---|
| direct | It consumes an affected commit itself |
| transitive | It's downstream through other repositories |
| no clean lineage | Every recorded provenance path runs through the affected commits: there is nothing clean to rebuild from, so it must be rebuilt from scratch |
"No clean lineage" comes from a dominator tree over the lineage graph. A node dominates another when every path from any origin passes through it. A model trained on both a poisoned and a clean dataset is affected, but it can be retrained without the poisoned one. A fine-tune of a model trained only on the poisoned data cannot.
Owners of affected repositories are notified, and an advisory webhook fires. Each owner then records what they did: acknowledged, retrained or not affected. Owners who can't read the source repository learn only that something upstream is wrong, and how severe it is.
The verdicts are only as complete as the recorded lineage, which is why Zaryn also infers it.
A repository can refuse to build while an unresolved advisory reaches it. Add this to .zev-ci.json:
{ "advisories": { "fail_on": "high" }, "steps": [ ... ] }Or check anywhere with zev taint check --fail-on high, which exits 1 while an advisory at or above that severity is open or only acknowledged.
Every version of an advisory on a public repository is a dag-cbor document with its own CID. It is signed by the server's Ed25519 key, appended to the transparency log, pinned to IPFS, and listed in a signed feed published under IPNS. Anyone can check it without trusting Zaryn:
zev advisory verify ZEV-2026-0001 # CIDs, signature, envelope, transparency-log inclusionzev advisory feed # the signed feed of every public advisoryipfs dag get <document CID> # the document itself, from any IPFS nodeThe Verify in your browser button on an advisory's page runs the same checks with WebCrypto. Advisories on private repositories are signed too, but never leave the server.
Most fine-tuned models are uploaded without a fine_tuned_from link. Zaryn fingerprints the weights of every model repository (.safetensors, .npy, .gguf) after each push to main. Each tensor gets a 64-bit SimHash of its values, so a fine-tune stays within a few bits of its base while an unrelated model lands about half the bits away. Candidates are found with locality-sensitive hashing. A minimum spanning arborescence then picks one most likely parent per model across a whole family, so a fine-tune of a fine-tune points to its real parent, not its grandparent.
Each inferred parent becomes a suggestion on the model's Evals & lineage page and in zev suggestions. Nothing is recorded until the owner confirms it. Advisories list pending suggestions as possibly affected. When an owner confirms one, the model moves into the verdict table, and its owner is notified.
Filing advisories, verdicts, notifications, the CI gate, verification and suggestions are free on every plan. The live blast-radius graph on an advisory's page is part of Premium.