<feed xmlns='http://www.w3.org/2005/Atom'>
<title>krino.git/docs/design.md, branch v0.0.5</title>
<subtitle>rule-based file sorter in Go, shows the plan before touching anything, applies only the files you choose, and can undo any run, with s-expression rules and a GTK 4 window</subtitle>
<id>https://git.labunix.xyz/krino.git/atom?h=v0.0.5</id>
<link rel='self' href='https://git.labunix.xyz/krino.git/atom?h=v0.0.5'/>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/krino.git/'/>
<updated>2026-09-14T13:16:55Z</updated>
<entry>
<title>krino: 0.0.5 — keyword cache, t and d in review</title>
<updated>2026-09-14T13:16:55Z</updated>
<author>
<name>Lukasz Kasprzak</name>
<email>lukas@labunix.xyz</email>
</author>
<published>2026-09-14T13:16:55Z</published>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/krino.git/commit/?id=0b5d0eb92c5be2f0ddb2fa73990f31e5654e57fe'/>
<id>urn:sha1:0b5d0eb92c5be2f0ddb2fa73990f31e5654e57fe</id>
<content type='text'>
</content>
</entry>
<entry>
<title>0.0.4: max-size, exclude forms, --min-age</title>
<updated>2026-09-14T12:08:36Z</updated>
<author>
<name>Lukasz Kasprzak</name>
<email>lukas@labunix.xyz</email>
</author>
<published>2026-09-14T12:08:36Z</published>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/krino.git/commit/?id=1d3f2d1e4c59867024470d3444e12698b7ebb22e'/>
<id>urn:sha1:1d3f2d1e4c59867024470d3444e12698b7ebb22e</id>
<content type='text'>
</content>
</entry>
<entry>
<title>krino: 0.0.3 — the plan as one block per file, wrapped, and -P</title>
<updated>2026-09-14T11:26:51Z</updated>
<author>
<name>Lukasz Kasprzak</name>
<email>lukas@labunix.xyz</email>
</author>
<published>2026-09-14T11:26:51Z</published>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/krino.git/commit/?id=07c24054cab965800983ef40f53a05c2db131ede'/>
<id>urn:sha1:07c24054cab965800983ef40f53a05c2db131ede</id>
<content type='text'>
Each file shows its steps, then the rule and the reason it matched, one
field per line; on a terminal every line wraps to its width with
continuation lines under their own column, and piped output is never
wrapped. Choosing per file shows the same block. -P / --no-pager prints
the plan without the pager. A duplicate's original is shown with ~.
</content>
</entry>
<entry>
<title>krino: coloured output, and --no-color</title>
<updated>2026-09-14T08:58:33Z</updated>
<author>
<name>Lukasz Kasprzak</name>
<email>lukas@labunix.xyz</email>
</author>
<published>2026-09-14T08:58:33Z</published>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/krino.git/commit/?id=0468ce38470aa3ae8092b92d4f77e72d25dfa108'/>
<id>urn:sha1:0468ce38470aa3ae8092b92d4f77e72d25dfa108</id>
<content type='text'>
Lukasz, 2026-09-14: colour the output for ease of reading, with an option of
no colour. Section 8.2 now lists what is styled, from the 16-colour ANSI palette
plus bold and faint only, so the terminal theme decides the look; section 11
adds --no-color; section 15 adds the colour tests.
</content>
</entry>
<entry>
<title>krino: duplicates are found, never deleted</title>
<updated>2026-09-14T08:56:21Z</updated>
<author>
<name>Lukasz Kasprzak</name>
<email>lukas@labunix.xyz</email>
</author>
<published>2026-09-14T08:56:21Z</published>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/krino.git/commit/?id=1506c7dcd6032c04c1df6f5785b6dd3dfe4511cc'/>
<id>urn:sha1:1506c7dcd6032c04c1df6f5785b6dd3dfe4511cc</id>
<content type='text'>
A rule combining (duplicate) with a delete action is refused at load, and a
file that is a duplicate under any duplicate scope its directory uses gets no
delete step from any rule: the plan shows it skipped and the chain continues.
A failed duplicate check blocks the delete too. Tests cover (matched), another
rule's own condition, a test evaluation skipped, two scopes and a failed
check, each checking every copy is still on disk.
</content>
</entry>
<entry>
<title>krino: duplicates are found, never deleted</title>
<updated>2026-09-14T08:30:12Z</updated>
<author>
<name>Lukasz Kasprzak</name>
<email>lukas@labunix.xyz</email>
</author>
<published>2026-09-14T08:30:12Z</published>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/krino.git/commit/?id=ebdd7bb254a0f19f815a644d26ce232de7be0adb'/>
<id>urn:sha1:ebdd7bb254a0f19f815a644d26ce232de7be0adb</id>
<content type='text'>
Lukasz, 2026-09-14: leave deleting duplicates to the user or jdupes. Section
5.5 now forbids a delete action in any rule using (duplicate), and skips any
delete step for a file that is a duplicate under a scope its directory uses,
which closes the (matched) and other-rule routes. Two scopes that elect
different originals can then only move copies aside, never delete them. The
consequences land in 4.5, 7.1, the 8.2 example, 15 and 17.
</content>
</entry>
<entry>
<title>krino: release 0.0.1 — man pages, install, examples, cross and release, README, changelog</title>
<updated>2026-09-13T00:31:32Z</updated>
<author>
<name>Lukasz Kasprzak</name>
<email>lukas@labunix.xyz</email>
</author>
<published>2026-09-13T00:31:32Z</published>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/krino.git/commit/?id=26c94eb3db62ec6eebbf8d22c11afe691d9520c4'/>
<id>urn:sha1:26c94eb3db62ec6eebbf8d22c11afe691d9520c4</id>
<content type='text'>
Also: undo removes the directories its run created; a hardlink is never a
duplicate of its own other name; a flag written before "undo" is honoured;
--version prints no leading v. Duplicate conditions with different scopes
not sharing an original is documented as a known limitation.
</content>
</entry>
<entry>
<title>krino: no performance target for 0.0.1</title>
<updated>2026-09-12T19:34:22Z</updated>
<author>
<name>Lukasz Kasprzak</name>
<email>lukas@labunix.xyz</email>
</author>
<published>2026-09-12T19:34:22Z</published>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/krino.git/commit/?id=a6e442a645902011b2081c216daaec052cdc6ce6'/>
<id>urn:sha1:a6e442a645902011b2081c216daaec052cdc6ce6</id>
<content type='text'>
Lukasz: "no performance goal". Section 13s "under 2 s on a 4-core laptop" is
replaced with the decision and its evidence, so it is not reinstated later:
measured throughput is dominated by the external extractors, not by krino. A
real folder of 265 files with 164 needing pdftotext at roughly 80 ms each takes
12-17 s; a synthetic 4405-file tree needing no extraction takes 1.09 s. A single
threshold would describe popplers speed and the shape of one folder. The
measurement is still reported in the release notes; nothing is promised.
</content>
</entry>
<entry>
<title>krino: acting — trash, journal, apply, lock, review, undo</title>
<updated>2026-09-12T18:14:47Z</updated>
<author>
<name>Lukasz Kasprzak</name>
<email>lukas@labunix.xyz</email>
</author>
<published>2026-09-12T18:14:47Z</published>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/krino.git/commit/?id=3f8679be9373ee7508d512dfdfc1dda0839c7f90'/>
<id>urn:sha1:3f8679be9373ee7508d512dfdfc1dda0839c7f90</id>
<content type='text'>
</content>
</entry>
<entry>
<title>krino: planning — chains, placeholders, conflicts, JSON</title>
<updated>2026-09-12T10:58:14Z</updated>
<author>
<name>Lukasz Kasprzak</name>
<email>lukas@labunix.xyz</email>
</author>
<published>2026-09-12T10:58:14Z</published>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/krino.git/commit/?id=24a84671ace373ae331fa83a1ff484990f4dff0e'/>
<id>urn:sha1:24a84671ace373ae331fa83a1ff484990f4dff0e</id>
<content type='text'>
</content>
</entry>
</feed>
