# nornir.toml — declarative release/bench recipes for the znippy constellation.
# Consumed by nornir-cli / nornir-mcp; both read this file at runtime. There is
# no generated per-repo `src/bin/release.rs`.
#
# Add a new repo by appending a [repo.<name>] table.
# ---------------------------------------------------------------------
# Warehouse for this workspace's bench history + lineage. Without this,
# `warehouse_root()` falls back to workspace_holger/.nornir/warehouse — so
# znippy benches/release would write into HOLGER's warehouse and gate against
# its history. Point it at znippy's own. (Convention shared with
# workspace_skade / workspace_njord / workspace_knut.)
# ---------------------------------------------------------------------
[storage]
kind = "local"
local_path = "/home/rickard/.nornir/workspace_znippy"
# ---------------------------------------------------------------------
# Global guard rails — directories/files AI agents must not touch.
#
# Enforced two ways:
# 1. Documented in WORKSPACE.md so agents read it as instruction.
# 2. `nornir-cli guard apply` → chmod -w on every path below
# `nornir-cli guard release` → restores write bit for human edits
# Paths are relative to the workspace root (parent dir containing
# workspace_znippy/, znippy/, nornir/).
# ---------------------------------------------------------------------
[guard]
forbidden = [
# Append-only history — never edited, never reordered.
"znippy/bench_history.jsonl",
"znippy/bench_history.json", # legacy, frozen
# Per-decompressor frozen histories (each l* crate keeps its own).
"znippy/znippy-zoomies/ljar/bench_history.json",
"znippy/znippy-zoomies/lzip-parallel/bench_history.json",
# Generated docs (rewritten only by nornir::docs, never by hand or agent).
"znippy/CHANGELOG.md",
# The release contract itself: agents may regenerate drivers from it
# but must not silently edit it.
"workspace_znippy/release/SPEC.md",
"workspace_znippy/release/nornir.toml",
]
# ---------------------------------------------------------------------
# znippy — compression / archive library (the whole l* family + zoomies)
# ---------------------------------------------------------------------
[repo.znippy]
remote = "https://codeberg.org/nordisk/znippy"
history = "bench_history.jsonl"
readme = "README.md"
# Crate publish order. Inner lists are publish-parallel; outer order is
# sequential. Mirrors znippy/CLAUDE.md §Release procedure:
# znippy-common → compress/decompress → plugins → znippy → znippy-cli
# and the decompressor chain:
# linflate → lgz/ljar/lzip-parallel → znippy-zoomies → osm-katana
publish_order = [
["znippy-zoomies/linflate"],
["znippy-zoomies/lgz", "znippy-zoomies/ljar", "znippy-zoomies/lzip-parallel", "znippy-zoomies/lbzip2"],
["znippy-zoomies"],
["znippy-zoomies/osm-katana"],
["znippy-common"],
["znippy-compress", "znippy-decompress"],
["znippy-plugin-maven", "znippy-plugin-python"],
["znippy-iceberg"],
["znippy"],
["znippy-cli"],
]
[repo.znippy.gates]
no_path_patches = false # znippy has no upstream patches
nexus_floor = false # nexus comparison is a holger concern
no_regression = true
max_regression_pct = 10.0
docs_fresh = true
[repo.znippy.bench]
# The decompressor benches download real Maven Central JARs (cached).
network_required = true
# What one `nornir bench run znippy` reliably produces (synthetic corpora +
# cached JARs). Single-core `_st` rows are a dual-pass (taskset) artifact, and
# archive_real_{jars,crates,wheels} need staged fixtures — both omitted here so
# the gate doesn't fail on a fixtureless box.
required_results = [
# znippy-zoomies decompressors vs legacy C tools (paired *_mbs metrics;
# the `benches name=<tool>` README sections bold the faster of the two).
"ljar_guava", "ljar_scala", # parallel JAR vs `unzip -p`
"lzip_guava", "lzip_scala", # parallel ZIP vs `unzip -p`
"lbzip2_guava", # parallel bzip2 vs C `lbzip2`
"lgz_guava", # parallel gzip vs `pigz`
# znippy archive compress/decompress throughput (synthetic corpora).
"archive_small_10k", "archive_mixed",
]
# ---------------------------------------------------------------------
# nornir itself — for dogfooding its own docs/render pipeline.
# ---------------------------------------------------------------------
[repo.nornir]
path = "nornir"
history = "bench_history.jsonl"
readme = "README.md"
[repo.nornir.gates]
no_path_patches = true
nexus_floor = false
no_regression = false
docs_fresh = true
[repo.nornir.bench]
required_results = []