It's a general issue because in a pure client ("pure" in the sense that the client is pulling data only from relays) there's no way to match an arbitrary name to an npub without pulling metadata for *everyone*. What I do with Satellite is cache profile metadata that's already loaded for other reasons (e.g. your following list and/or other threads) and use that to populate the dropdown of suggesting when you start typing an npub to tag someone. Admittedly a half-solution, but it mostly works. A proper index of user identities that you could send proper queries would improve UX but it goes against the whole "dumb relay" thing.
Discussion
Makes sense, I kinda guessed that. It’s not the worst thing in the world. Just a little annoying.
Yep. A reasonable compromise might be to use an API for certain queries, but encourage clients to implement fail-over behavior so that if an API goes down the client will still work. Obviously not all clients are going to do that, but I think I will probably end up doing that with Satellite sooner or later, especially if/when the problem of impersonator profiles becomes more of a thing and tagging suggestions need to be ranked by some kind of trust score (which would be expensive/hard to compute locally)