THE CRASH TEST FACTORY

A harness you put on your app before you launch it at the wall.
Bad inputs, full disks, crashed processes, concurrent load —
runs in an isolated VM. Fully reproducible.

curl -fsSL kepr.uk/kiln/install.sh | sh

FIND WHAT
BREAKS

Watch

Runs your test suite continuously. Each failure gets fingerprinted with Blake3 — the same failure always gets the same name.

Classify

Sorts failures into EnvDependent, Timeout, Panic, ResourceExhaust, CompileError. EnvDependent ones get routed to a chamber automatically.

Break

Maps your program's attack surface and runs it through six pressure layers: boundary values, concurrency, resource limits, longitudinal stress, fault injection, chaos.

Adversarial

16 NixOS-specific state corruption scenarios — corrupt stores, kill mid-rebuild, disk full during write, concurrent writes. Each runs in a clean QEMU snapshot.

Temporal

Scripted multi-cycle workflows inside a chamber. Finds what accumulates, drifts, or degrades over hundreds of install/remove/rebuild cycles.

Visual

Captures a screenshot from a running chamber and pixel-diffs it against a stored baseline. Finds regressions that tests can't.

Chamber

Disposable QEMU VM with a CoW overlay. Everything that happens inside — corrupted stores, filled disks, killed processes — is discarded when the session ends.

Fleet

N parallel VMs managed as one unit. Snapshot, inject, deploy, run, collect. Provision once, iterate in seconds.

kiln run Run the test suite once
kiln watch Continuous loop — fix a failure, see it disappear
kiln break Adversarial pressure across six layers
kiln temporal Multi-cycle workflow simulation — find leaks and drift
kiln visual Screenshot and pixel-diff against baseline
kiln chamber run Run tests inside an isolated QEMU VM
kiln fleet Provision N VMs, deploy, iterate
kiln pending List unresolved failures waiting for attention
kiln env Check toolchain and image cache status
Rust Go Python Node Elixir Zig JVM Make