# Changelog ## Unreleased ## 0.0.1 — 2026-09-13 - Per-directory rule files, a main file listing which directories run, and a template for new ones. - Conditions with `and`, `or` and `not` over type, name, path, content, size, age and duplicates. - Actions copy, move, rename and delete (to Trash by default), chained. - Plan, review and approve — all files or per file — with `-y` to skip review. - A log of every step, and `krino undo`. - Placeholders in destinations and new names. - Builds for Linux, FreeBSD and OpenBSD. Performance: no threshold or target for 0.0.1. These were measured during development and are reported rather than promised — throughput is dominated by external content extractors, not by krino itself: - Full plans over a real folder of about 265 files, 164 of them needing text extraction through `pdftotext` at roughly 80 ms each, measured between about 13 and 20 s across runs. - A synthetic benchmark during development planned a generated tree of 4,405 files needing no extraction in 1.09 s. That benchmark is not `make bench`, whose generated tree is smaller. Files that share a byte size but differ in content — six templated invoices, for instance — are still told apart, because the duplicate check hashes the first and last 64 KiB and then the whole file rather than trusting size. Known limitation: `(duplicate)` conditions with different scopes can elect different originals for the same content, and within one directory's rules this can select every copy for deletion — see `krino.conf(5)`, DUPLICATES.