extracted the dashboard stylesheet and 2,965-line bootstrap into same-origin static assets
enforced CSP (script-src 'self'), anti-framing, MIME-sniffing, referrer, and browser capability headers on every response including auth failures
included the extracted assets in the subpath-aware offline shell and bumped its cache generation
adapted behavioral tests to validate the complete HTML/CSS/JS bundle while retaining an explicit no-inline-script boundary test
Verification
RED: 4 focused tests failed for missing headers/assets/cache generation
GREEN: 524 passed in 19.12s
node --check frontend/dashboard.js and service worker passed
no inline <script> or <style> tags remain in dashboard HTML
Closes #295
## What changed
- extracted the dashboard stylesheet and 2,965-line bootstrap into same-origin static assets
- enforced CSP (`script-src 'self'`), anti-framing, MIME-sniffing, referrer, and browser capability headers on every response including auth failures
- included the extracted assets in the subpath-aware offline shell and bumped its cache generation
- adapted behavioral tests to validate the complete HTML/CSS/JS bundle while retaining an explicit no-inline-script boundary test
## Verification
- RED: 4 focused tests failed for missing headers/assets/cache generation
- GREEN: `524 passed in 19.12s`
- `node --check frontend/dashboard.js` and service worker passed
- no inline `<script>` or `<style>` tags remain in dashboard HTML
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Closes #295
What changed
script-src 'self'), anti-framing, MIME-sniffing, referrer, and browser capability headers on every response including auth failuresVerification
524 passed in 19.12snode --check frontend/dashboard.jsand service worker passed<script>or<style>tags remain in dashboard HTML