[package]
name = "znippy-zoomies"
# 0.1.24: DRIFTED from the published 0.1.23 at the same version — all eleven crates here
# were, and a version survey could not see it (local == registry for every one).
# Gate B found it: published znippy-zoomies 0.1.23 has no `STree32::len()`.
# 0.1.25: re-exports rotaryengine 0.1.12's new `chunk_revolver` coalescing surface.
version = "0.1.26"
edition = "2024"
description = "Fast parallel OSM-XML index (VTD-style) + static search tree + zero-copy slot pool + generic no-barrier streaming engine (gatling) + generic parallel merge sort (gatling_sort) + parallel sample sort (psort)"
repository = "https://git.gunnar.rs/nordisk/znippy-zoomies"
# The `stree` module is derived from Ragnar Groot Koerkamp's static-search-tree (MIT).
# His copyright notice is retained in LICENSE, as MIT requires.
license = "MIT"
readme = "README.md"
# Development notes, agent instructions and machine-local tooling stay in the
# repository; they are not part of the published crate.
exclude = [
".nornir/",
".githooks/",
".cargo/",
"docs/",
"brokkr.toml",
".gitattributes",
]
# Standalone workspace: extracted from the znippy repo into its own leaf repo so
# both skade (stree/gatling) and znippy (codecs/gatling) depend on it without a
# release-cascade cycle. The codec sub-crates moved here from the deprecated
# standalone `*-rs` repos.
[workspace]
# `znippy-zoomies-build-thing` is this repo's `impl BuildThing` (lane AG,
# 2026-08-30) — a member, not a dependency: nothing shipped 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 at the repo root (one of the two
# places it looks; this workspace has no `crates/`).
members = ["gatling", "lbzip2", "ldeflate", "lgz", "linflate", "ljar", "lzip-parallel", "osm-katana", "znippy-zip-core", "zstd-sys-rs", "znippy-zoomies-build-thing"]
resolver = "2"
[features]
# `vann-mmap` WAS DECLARED HERE AND GATED NOTHING. It promised that
# `vann::ragnars_emb` could memory-map its int8 row blob instead of holding it
# resident; measured 2026-08-22, `src/vann/` has **zero** `cfg(feature = "vann-mmap")`
# sites and does not name `memmap2` at all, and no manifest anywhere in the
# constellation ever enabled it. A flag that compiles nothing either way is worse
# than no flag: a reader takes it for a capability, and a feature-coverage gate takes
# it for ground somebody is watching. Deleted rather than allowlisted — an excuse
# would have made it permanent. If the mmap path is ever written, the flag comes back
# WITH it.
# `testmatrix` — turn the crate's `functional_status(component, check, ok, detail)`
# self-reports (the gatling engines' run markers) into real nornir test-matrix
# rows. Compiled OUT of the default build (no nornir dep by default); pulls
# nornir-testmatrix's own `testmatrix` mode so the emit is a row-append, not a
# no-op. Additive and no-op unless explicitly enabled.
testmatrix = ["dep:nornir-testmatrix", "nornir-testmatrix/testmatrix", "gatling/testmatrix"]
[dependencies]
anyhow = "1"
memchr = "2"
memmap2 = "0.9"
# The ONE shared no-barrier engine, extracted into a leaf crate so the codec
# sub-crates can depend on it without a cycle. This crate re-exports its
# modules (`pub use gatling::…`) to preserve the historical
# `znippy_zoomies::{gatling, gatling_forkjoin, chunk_revolver}` API.
gatling = { path = "gatling", version = "0.1.13", package = "rotaryengine" }
# ── testmatrix feature ──────────────────────────────────────────────────────
# Path dep to the nornir functional-status emitter; off by default so consumers
# pull nothing. Sibling repo under /git.
nornir-testmatrix = { version = "0.2", default-features = false, optional = true }
[dev-dependencies]
rand = "0.10"
# The workspace's one COMPRESSOR, benched by `examples/nornir-bench.rs`. A
# dev-dependency, so nothing about it reaches the published `znippy-zoomies`.
ldeflate = { path = "ldeflate", version = "0.1.0" }
# vann's VectorIndex + ragnars_emb tests round-trip indexes through temp files.
tempfile = "3"
criterion = { version = "0.8", features = ["html_reports"] }
serde_json = "1"
# Rival NDJSON parsers for the head-to-head JSON bench arms (dev-only).
simd-json = "0.18"
sonic-rs = "0.5"
[target.'cfg(target_os = "linux")'.dependencies]
libc = "0.2"
[[bench]]
name = "xml_scan"
harness = false
[[bench]]
name = "json_scan"
harness = false
[[bench]]
name = "gatling_roundtrip"
harness = false
[[bench]]
name = "psort_sort"
harness = false
[[bench]]
name = "gatling_sort"
harness = false
# Small-file throughput of the slot pool: fixed-slot vs the coalescing mode.
# Hand-timed (no criterion): it times a whole 1-reader/N-worker pipeline, and
# counts allocations through a bench-local global allocator, which criterion's
# per-iteration harness would both perturb and hide.
[[bench]]
name = "revolver_coalescing"
harness = false