# Root Cargo.toml
[workspace]
members = [
"znippy-compress",
"znippy-decompress",
"znippy-cli",
"znippy-common",
"znippy-iceberg",
"znippy",
# znippy's `impl BuildThing` (lane AG, 2026-08-30) — a member, not a
# dependency: nothing znippy ships links it. It exists so
# `.nornir/build-variants.toml` can be EMITTED from code instead of
# hand-written, and dwarves' forge finds it by package name. It sits at the
# repo root beside the other member dirs (this workspace has no `crates/`),
# which is one of the two places the forge looks.
"znippy-build-thing",
"git-storage-trait",
"plugins/native/znippy-plugin-maven",
"plugins/native/znippy-plugin-python",
"plugins/native/znippy-plugin-media",
"plugins/native/znippy-plugin-skidbladnir",
"plugins/native/znippy-plugin-git",
"plugins/native/znippy-plugin-rust-toolchain",
# ELF binaries with provenance — type_id 7, the id already reserved for ELF.
# It PROMOTES the filename-only `elf` skeleton out of znippy-common rather
# than shadowing it: a fresh id named `elf` would sort behind 7 and
# `--format elf` would silently pick the stub (the docker/media `image`
# collision, again). See .nornir/elf-design.md §3.
"plugins/native/znippy-plugin-elf",
# The wasm side of the plugin tree. One member today: the maven example,
# which holds no maven logic of its own — see plugins/README.md.
"plugins/wasm/znippy-plugin-maven-wasm",
"tests",
"xtask",
# Synthetic ZIP/JAR/wheel fixtures — the ONE writer the tests crate and the
# xtask bench suite both build their method-0 / method-8 archives with.
# publish = false; never linked into a released crate.
"znippy-zip-fixtures",
]
resolver = "2"
# Intra-workspace dependencies are declared with both a `version` and a `path`
# (e.g. `znippy-common = { version = "0.9.6", path = "../znippy-common" }`).
# Cargo uses the path for local builds and the version in the published
# manifest, so local dev and `cargo publish` both work. Publish bottom-up
# (common → compress/decompress → plugins → znippy → cli).
[patch.crates-io]
# 2026-10-05 (merge to main): crates.io serves nornir-git
# (published 2026-10-04; the siblings carry the same code, at most test/doc edits
# since): their rows are gone.
# REMOVED 2026-08-05. The comment said "registry 0.1.13 predates it"; the registry is at
# 0.1.22, and znippy-zoomies own src/ and Cargo.toml are unchanged since 45f61ad set that
# version (git diff 45f61ad..HEAD -- src/ Cargo.toml is empty; later commits touch sibling
# crates and tests/). Published == local, so the patch protected nothing — and a
# [patch.crates-io] fork is a structural publish blocker that is never forceable.
# MEASURED with dwarves workspace-release --ramp --rehearse: 10 blockers with this line,
# 1 without, and the one left is znippy-iceberg, which is byte-identical to what is
# published and is not in the wave.
# ── arrow-58 migration: LOCAL-DEV path overrides ──────────────────────────────
# arrow-58 Iceberg now rides in through skade itself: skade >= 0.4.12 depends on
# its OWN vendored, separately published `iceberg-arrow58` crate (lib name
# `iceberg`), so there is NO `iceberg` patch to carry here anymore — the published
# skade is genuinely arrow-58 and `cargo publish` of znippy-iceberg resolves the
# whole iceberg tree from crates.io with no stripping problem.
#
# These two remain only as LOCAL-DEV conveniences: build znippy-iceberg against the
# sibling skade checkouts (already on arrow-58) instead of the registry, so a skade
# change is testable here before it's published. `[patch]` is stripped by
# `cargo package/publish`, so the published znippy-iceberg names crates.io
# skade/skade-katalog. Drop these once you only ever build against released skade.
# REMOVED 2026-08-23 — the condition the paragraph above sets ("Drop these once you
# only ever build against released skade") is MET, measured against the live registry:
# skade 0.5.3 published == local 0.5.3, skade-katalog 0.1.19 published == local 0.1.19.
#
# These two lines were not a convenience any more, they were the last publish blocker
# in this repo. `patch_fork_blockers` treats a `[patch.crates-io]` entry whose target is
# not produced by the scanned repo as a FOREIGN FORK, and every crate that transitively
# depends on it is held from crates.io — that is how `znippy-iceberg` came to be the one
# held crate, which halted the cascade at `znippy-cli` (which needs iceberg 0.1.11).
# The paragraph above already recorded the same arithmetic for znippy-zoomies: 10
# blockers with a patch line, 1 without. This is the 1.
# ── the local crates ARE the crates.io ones in the sibling graph (0.10.0) ──
# xtask reaches holger through nornir, and holger takes these from crates.io at
# the same 0.10.0 / 0.2.0 this workspace builds. Redirecting them here keeps ONE
# copy of each in the lock (no second znippy-common beside the local one).
# LOCAL-DEV only — `[patch]` is stripped on `cargo publish`. 2026-10-18.
znippy-common = { path = "znippy-common" }
znippy-compress = { path = "znippy-compress" }
znippy-plugin-python = { path = "plugins/native/znippy-plugin-python" }
znippy-plugin-rust-toolchain = { path = "plugins/native/znippy-plugin-rust-toolchain" }
znippy-plugin-skidbladnir = { path = "plugins/native/znippy-plugin-skidbladnir" }
# ── nornir-build-thing / nornir-git: W3 crypto-bump bridge ─────────────────────
# TEMPORARY until nornir-git 0.1.12 and nornir-build-thing 0.1.25 (their first
# releases on russh 0.63) are published (2026-10-03, finish-bump).
# xtask -> nornir -> modgunn pulls the PUBLISHED nornir-build-thing, whose
# nornir-git pins russh 0.61, whose `ecdsa =0.17.0-rc.18` cannot coexist with
# the stable RustCrypto set this repo now uses (one semver slot) — the workspace
# does not resolve. edda's nornir-git is on russh 0.63 but unpublished (same
# 0.1.11 number). LOCAL-DEV bridge onto the sibling edda; a foreign-fork release
# blocker by `patch_fork_blockers` — DROP both lines the moment edda publishes
# nornir-git/nornir-build-thing on russh 0.63.
nornir-build-thing = { path = "../edda/crates/nornir-build-thing" }
# (nornir-git: the one line further down, from master's 2026-10-03 resolve fix.)
# TEMPORARY until nornir-git on gix 0.88 / russh 0.63 (edda main's, past the published
# 0.1.11) is on crates.io — 2026-10-03 integration. The published nornir-git 0.1.11 is
# still russh 0.61, whose `curve25519-dalek =5.0.0-pre.6` pin cannot share a lockfile with
# the RustCrypto 3 / ed25519-dalek 3 stack the bump moved to: cargo fails to resolve. It is
# reached through the REGISTRY nornir-build-thing (xtask → nornir → modgunn →
# nornir-build-thing → nornir-git), which no path dep here can override — only [patch].
# Sibling path, like the edda git crates in gunnar. Drop when nornir-git is republished.
# Rickard, 2026-09-05: test artifacts carry line tables only — full DWARF in every test
# binary and its deps was the bulk of a target dir (gunnar/target 271 GB, korp/target 852 GB
# on the day the disks filled); backtraces still show file:line.
[profile.test]
debug = "line-tables-only"