One Strict CSP, Many UI Surfaces: Per-Endpoint Composition
A single application-wide Content-Security-Policy string breaks the moment one route serves HTML. Granit inverts ownership: the package that mounts the UI declares its own CSP relaxation, composed per endpoint — strict everywhere else, with an audit endpoint so security teams can verify it from outside.