Interesting that you went with a hybrid semantic + lexical approach. Pure semantic search on code tends to miss exact identifier matches, and pure lexical misses conceptual similarity. The combination is the right call.
How does indexing scale? For a 10k-file monorepo, what's the initial index time and index size? And does it handle incremental updates (only re-index changed files), or is it full re-index each time?