--list-secret-keys works (i think) by iterating through all public keys and asking the agent whether a corresponding secret key exists.
Most users don't know (and shouldn't need to know) this implementation detail.
However, when doing --list-secret-keys --verbose on my own keyring, i see tons of messages like:
gpg: public key algorithm ELG not suitable for signing
even when they do not correspond to my secret keys. This is confusing, and leads users to report bugs and problems (i was just dealing with one such report on the #gnupg IRC channel).
For example, in a fresh GNUPGHOME, i've imported @werner's OpenPGP certificate:
There are no secret keys in this keyring at all, and yet:
0 dkg@alice:/tmp/cdtemp.q1pEEJ$ gpg --verbose --list-secret-keys gpg: using pgp trust model gpg: public key algorithm ELG not suitable for signing 0 dkg@alice:/tmp/cdtemp.q1pEEJ$