<feed xmlns='http://www.w3.org/2005/Atom'>
<title>krino.git/gui/internal/model/history.go, branch main</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=main</id>
<link rel='self' href='https://git.labunix.xyz/krino.git/atom?h=main'/>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/krino.git/'/>
<updated>2026-09-17T12:19:23Z</updated>
<entry>
<title>the applying flag is atomic; its test waits instead of polling</title>
<updated>2026-09-17T12:19:23Z</updated>
<author>
<name>Lukasz Kasprzak</name>
<email>lukas@labunix.xyz</email>
</author>
<published>2026-09-17T12:19:23Z</published>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/krino.git/commit/?id=40dbf18893c33bc40c8617d0f3e8de16ce2947e2'/>
<id>urn:sha1:40dbf18893c33bc40c8617d0f3e8de16ce2947e2</id>
<content type='text'>
The race detector found my own new flag: Apply writes it on a worker
and Close reads it from the main loop. The test was polling a plain
field too, where the real window hears about the apply on the main
loop, which orders the writes.
</content>
</entry>
<entry>
<title>the window cannot pull the lock out from under a running apply</title>
<updated>2026-09-17T12:11:52Z</updated>
<author>
<name>Lukasz Kasprzak</name>
<email>lukas@labunix.xyz</email>
</author>
<published>2026-09-17T12:11:52Z</published>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/krino.git/commit/?id=ed86f44a926fd1f0d438cbe5e2e10ad5b063db55'/>
<id>urn:sha1:ed86f44a926fd1f0d438cbe5e2e10ad5b063db55</id>
<content type='text'>
Close releases the directory lock and closes the log. The window could
reach it while an apply was still running - saving rules, saving
settings, adding a directory, or closing the window - and the engine
then went on moving files with the log shut underneath: a file moved
that no krino undo can see, the rest of the plan silently abandoned,
and the directory unlocked while krino was still working in it.

PlanTab and UndoTab refuse to close while their apply is in flight
(model.ErrApplying), the window's close request and reloadEngine honour
the refusal instead of ignoring it, and the tabs and Settings are greyed
out for the duration so a button that cannot work says so by being
unavailable rather than by an error afterwards.

The test starts an apply, calls Close from another goroutine while it
is in flight, and requires the refusal.
</content>
</entry>
<entry>
<title>the module path is git.labunix.xyz/krino</title>
<updated>2026-09-17T10:54:06Z</updated>
<author>
<name>Lukasz Kasprzak</name>
<email>lukas@labunix.xyz</email>
</author>
<published>2026-09-17T10:54:06Z</published>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/krino.git/commit/?id=1884d56b0d399e9cdb80016a9c166b0120989933'/>
<id>urn:sha1:1884d56b0d399e9cdb80016a9c166b0120989933</id>
<content type='text'>
So that go install can find it. cgit serves no go-import meta tag, so
nginx answers a ?go-get=1 request for /NAME with one pointing at
https://git.labunix.xyz/NAME.git; the alternative was carrying a .git
suffix through every import line forever.

One sed over the imports, both go.mod files, and the dependency gate's
whitelist. Nothing else depends on the path. go install works from the
next tag, the first release whose go.mod carries it.
</content>
</entry>
<entry>
<title>gui: History and undo tab; each plan and undo is its own run</title>
<updated>2026-09-16T07:39:59Z</updated>
<author>
<name>Lukasz Kasprzak</name>
<email>lukas@labunix.xyz</email>
</author>
<published>2026-09-16T07:39:59Z</published>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/krino.git/commit/?id=6ef83d6bdfb6120f9e1fbd145e0bc463196103d1'/>
<id>urn:sha1:6ef83d6bdfb6120f9e1fbd145e0bc463196103d1</id>
<content type='text'>
</content>
</entry>
</feed>
