I think your last point captures it, for various reasons (RL, inherent structure of code) iterative grepping is unreasonably effective. Interestingly Cursor does use embedding vectors for codebase indexing:
Seems like sometimes Cursor has a better understanding of the vibe of my codebase than Claude code, maybe this is part of it. Or maybe it’s just really marginally important in codebase indexing. Vector dbs still have a huge benefit in less verifiable domains.
I think it's just a case of "this isn't something we need to solve, other companies solve it already and then our thing can integrate with that."
Or maybe it's really just marginal gains compared with iterative grepping. I don't know. (Still amazed how well that works!)