Breaking news: gitlab.com repositories now support git-annex!
A very nice surprise! More git hosters should do this..
Back to sqlite concurrency, I thought I had it dealt with, but more testing today has turned up a lot more problems with sqlite and concurrent writers (and readers).
First, I noticed that a process can be happily writing changes to the database, but if a second process starts reading from the database, this will make the writier start failing with BUSY, and keep failing until the second process goes idle. It turns out the solution to this is to use WAL mode, which prevents readers from blocking writers.
After several hours (persistent doesn't make it easy to enable WAL mode), it seemed pretty robust with concurrent fsck.
But then I saw SELECT fail with BUSY. I don't understand why a reader would fail in WAL mode; that's counter to the documentation. My best guess is that this happens when a checkpoint is being made.
This seems to be a real bug in sqlite. It may only affect the older versions bundled with persistent.