The gh-8755 branding validation checked staticPath on disk, but AWS
deploys ship the static assets in a separate CDN bundle (build-dist.sh
makes two tarballs); production nodes have no local static dir at all,
so any env with extraBodyClass set (staging, beta, win*) died at startup
with "Missing branding assets" — which is why #8755 was reverted.
The webpack manifest does ship with the node app and lists every asset
copied from public/ into the static bundle, so validate against its keys
in production instead. Dev mode keeps the on-disk check against public/.
A missing manifest skips validation, matching the existing warn-and-
fall-back behaviour for the static middleware.
Verified against a production webpack build: all six env asset pairs
appear as plain-name manifest keys, and the built server boots in the
deploy layout (staticUrl set, no local static dir, extraBodyClass=
staging) while a mistyped class still fails startup.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>