What it found
The engine ran DNS resolution, TLS inspection, HTTP probing and template-based vulnerability scanning. Twenty-three findings came back. Most were informational. One was not, and it was ours.
The dashboard was serving none of its HTTP security headers to the browser. No content security policy, no strict transport security, no clickjacking protection, nothing. Not on the actual application pages.
The cause is a well-known nginx trap, and we had walked straight into it. The security headers were defined, correctly, at the server level. But nginx does not inherit add_header directives into a location block that declares its own headers. The block that serves the application also set a cache-control header, and that single line silently dropped every security header for the pages that mattered.
The config read as correct. The headers were there in the file. They just never reached the browser.