Gunnar

mikronova/workspace_znippy

release/nornir.toml

# 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 = []