Yes you're pretty correct but I'll explain it in detail to fill in any gaps.
I have a standard radius server on my network that can authenticate users.
The duo auth proxy is a service that I run on my network that is configured to query the standard radius servers
I'm using an OpenVPN server with the radius plugin included and uses auth-user-pass in the config.
When a user enters their password in the VPN client, if the password was ABC then they enter ABC,push. There are several other things they could put after the comma. For example ,phone causes Duo to ring your phone and press 1 to verify. You can also get a TOTP number out of the Duo app and put that after the comma.
When the user submits their login credentials the The OpenVPN server passes ABC,push on to the Duo Auth Proxy. The Duo auth proxy splits the password and sends ABC to my standard radius servers, if the standard radius authenticates the password then the Duo auth proxy will do an API call to the Duo service for 2 factor verification,
In the case of a Duo push, the the auth proxy sends the push api call. It then waits for for the Duo service to send a mobile push to your phone, for you to verify the push in the Duo app, and for the service to return the result. If you don't respond in time either the Auth-proxy times out the API call and returns some kind of failure. Or the OpenVPN radius plugin times out and returns some kind of error. I'm going to have to see if I can determine which part, and what the error might be. But what I do know it is a different error than if the Duo auth proxy returns a denial because the duo service says the account is locked out.
If I choose to not remember the password in Tunnelblick; when the VPN disconnects it does not try to reconnect it displays the login credentials dialog.
If I do choose to remember the password in Tunnelblick; when the VPN disconnects it does try to reconnect, This spawns a push. If the user is ready for it they can verify it and it works. If they are sleeping or otherwise not responding to the pushes, Tunnelblick will try to authenticate over and over, It sends a push, waits a minute, the something i mention above times out and it sends another push. After too many not responded to pushes in a row Duo will lock the account and return a denial which Tunnelblick does recognize and it stops trying and displays the login credentials dialog.