Gunnar

mikronova/workspace_znippy

WORKSPACE.md

# workspace_znippy

Coordination workspace for the **znippy** constellation — the Arrow-IPC archive
format, its package plugins, and the `znippy-zoomies` fast primitives (ljar,
lgz, lbzip2, lzip-parallel, linflate, osm-katana).

This repo holds **no source code**. It is the nornir control plane for znippy:
the workspace descriptor, the release/bench contract, the guard rails, and the
warehouse the bench runs land in. The code lives in the sibling `znippy/`
checkout.

> **📐 Bench / measurement pattern.** Every benchmark is wired the same way: the
> child repo exposes `Bencher` impls in `xtask/examples/nornir-bench.rs`; nornir
> spawns it via `nornir bench run znippy` and persists results into the iceberg
> `bench_runs` table at `<workspace>/.nornir/warehouse`. **No JSONL files, no
> per-repo persistence code.** See `znippy/.nornir/benching.md` for the full
> contract and anti-patterns (why it is *not* `cargo bench`/criterion).
>
> **📦 Bench fixtures live on local disk only — never on T9.** T9 is an external
> USB drive and its throughput would skew every measurement; copy to
> `/home/rickard/work/` first.

## Layout

```
workspace_znippy/
├── WORKSPACE.md              this file
├── nornir-workspace.toml     SOURCE descriptor (registered with the nornir server)
├── release/
│   ├── SPEC.md               declarative release/bench contract
│   └── nornir.toml           per-repo recipes + guard rails (read at runtime)
└── .nornir/
    ├── warehouse/            iceberg bench_runs table (gitignored; LFS for parquet)
    └── logs/                 release-run logs (gitignored)
```

## Members

| repo    | transport     | role                                            |
|---------|---------------|-------------------------------------------------|
| znippy  | HTTPS (public)| primary — archive format + l* family + zoomies  |
| nornir  | SSH (private) | the build/release/docs tooling itself (dogfood) |

`znippy` is also a *dependency* member of `workspace_holger` (holger archives
are znippy archives). Here it is the *primary* member, so znippy gets its own
warehouse and its own MCP workspace scope (`NORNIR_WORKSPACE=znippy`).

## Tooling policy

All build, release, deploy, and benchmark tooling is **Rust**, via `nornir`
(sibling checkout at `../nornir/`). No shell scripts, no Make, no Just. The two
drivers — `nornir-cli` and `nornir-mcp` — both read `release/nornir.toml` at
runtime; there is no generated per-repo `release.rs`.

## Agent guard rails

`release/nornir.toml` carries a `[guard]` table listing paths that AI agents
(and humans) must not modify casually: append-only bench histories, generated
docs (`CHANGELOG.md`, the `<!-- nornir:gen -->` regions of `README.md`), and the
release contract itself. `nornir-cli guard apply` enforces it with `chmod -w`;
`nornir-cli guard release` restores the write bit.

## Registering with the nornir server (oden)

```sh
# on the host (oden), where nornir-server runs:
nornir workspace register znippy \
  --descriptor /run/media/rickard/T9/git/workspace_znippy/nornir-workspace.toml \
  --monitored --poll 60s
```

Once registered, `znippy` joins the monitored set
(`njord · holger · knut · nornir-catalog · znippy`) and the MCP tools can be
scoped to it. See `znippy/.mcp.json` and `nornir/.nornir/mcp-from-claude-code.md`
for wiring an agent (`NORNIR_WORKSPACE=znippy`).

## Release gate

See `release/SPEC.md` for the full gate sequence and `znippy/CLAUDE.md
§Release procedure` for the publish order. Short form: `nornir bench run znippy`
→ no metric drops >10% (same machine) → append history → docs fresh → tag →
`cargo publish` bottom-up.