Try adding render=explicit to the script URL. If it is compatible with the google API, it should prevent the auto rendering which conflicts with the App Connect render.
This double-rendering happens even on SPA page changes, which I assume implicit rendering isn't being executed (because Turnstile without compatibility mode doesn't implicitly render on SPA page changes, as far as my testing goes)
Are you sure you're not calling render twice (in different parts of the AppConnect framework)? You had some code to render reCaptcha on SPA page changes
Compatibility mode requires ?compat=recaptcha
?compat=recaptcha&render=explicit has same double render behaviour (render param might be ignored) ?render=explicit isn't working because it's not reCaptcha compatibility mode
I probably have to update the check that detects if it is already rendered. Currently it looks for an element with class g-recaptcha-response to detect if the recaptcha was already rendered. Turnstyle probably doesn't have the same html structure so I probably can better check for and input or textarea with the name g-recaptcha-response. Could you check the rendered html if that would work with turnstyle.
Regarding latest v7.3.6 update, there seems to be a race condition, on SPA fragment changes it's still double-rendered, but on non-SPA fragment changes it's fixed
Edit:
Confirmed race condition, adding a 1 ms delay works:
I think that the double rendering on SPA fragment pages is due to some recaptcha code in the routing plugin. I removed the code there since the rendering of the recaptcha is now global.
The double-rendering is now fixed. Can you fix the data-callback attribute? It seems you're inserting your own callback, you have to call the original also (if any)
I did indeed add my own callback, but that is only needed for the google invisible recaptcha within forms. I updated it to only add it there instead of every recaptcha what it did currently.