They are generated in Discourse, not in the app. When we implemented that feature, we tried both approaches, and having them in Discourse was a much smoother experience.
I have never run into this screen, but different users use Discourse differently, so I understand it can be a common occurrence for others (and a frustrating experience). As you suspect, I think you are being served a quick static page for a 404. And I am pretty sure the bottom app controls are not included in static pages, which is why scrolling up/down doesn’t do anything. I will investigate and see if it is an easy fix to add the controls to static pages (I suspect it’s not simple, tbh).