According to RFC 4880,
String-to-key (S2K) specifiers are used to convert passphrase strings into symmetric-key encryption/decryption keys. They are used in two places, currently: to encrypt the secret part of private keys in the private keyring, and to convert passphrases to encryption keys for symmetrically encrypted messages.
The latter works:
The former, for the secret part of private keys, does not:
gpg2 --s2k-cipher-algo AES256 --s2k-digest-algo SHA512 --s2k-mode 3 --s2k-count 65000000 --export-secret-keys | gpg2 --list-packets
Which shows a result that includes:
iter+salt S2K, **algo: 7**, **SHA1 protection**, **hash: 2**,
**protect count: 13107200**.
So, it's a discreet, de facto downgrade to AES128 and GPU-friendly SHA-1 from what was expected. This problem was brought up here (about 42 months ago), and then lessened in urgency as a question after two years of inaction.
Gpg-agent has a default that limits the time that the KDF can take.
What can one do to get the s2k specifiers to fully work?
(Or at least get the same effect of significantly increasing the iteration count, which makes password cracking tough for the attacker)

class S2K. Also note that in the config-obj, one needs to specify an s2kIterationCountByte of 65011711. – antiplex Sep 12 '22 at 12:47