Found by reading the code while rewriting the docs; not each reproduced.
Backfill skips dev.knotless.redirect, which the index builds its moved-repository table from, so a rebuild loses moves recorded only by a redirect. (Fixed by 1161a90a.)
Backfill aborts entirely on the first account that fails. (Fixed by 4418e9b2: each account fails alone and is retried later.)
If any listReposByCollection call fails, backfill falls back to listRepos, which on a relay lists every account.
The firehose cursor is kept only in memory (Jetstream's is in the index), so a restart with only --firehose misses events until the next sweep.
--labeler without --index logs an error every 500 ms forever. --relay "" is not treated as none, unlike the other feed flags.
The DID document always advertises #atproto_labeler, even without an index. A subscribeLabels subscriber more than 256 labels behind is silently dropped. queryLabels ignores sources, limit and cursor.
The handle cache never expires without an index (with one, handles now expire after 24 hours, or 10 minutes for none), and the gix handle and merge maps (OPEN, BROUGHT) are never evicted.
/api treats only 40-hex revisions as pinned (the pages take 64-hex too), sets no Cache-Control on refs, log and diff, and turns every git failure into a 404.
The page proxy buffers whole responses rather than streaming them, and HTML from the --web app is passed on uncompressed. (Fixed by 17e7b1f8, which streams pages, and b54305a5, which compresses them with brotli.)
Stale comments: lib.rs says the server 'holds no state of its own', and index_op promises to record a record's absence but leaves the stale row on a failed getRecord. (Both comments rewritten.)
Found by reading the code while rewriting the docs; not each reproduced.
OPEN,BROUGHT) are never evicted.