Complete Phase 4 implementation enabling ACL, WAF, and Rate Limiting
toggle functionality in the Security Dashboard UI.
Backend:
Add 60-second TTL settings cache layer to Cerberus middleware
Trigger async Caddy config reload on security.* setting changes
Query runtime settings in Caddy manager before config generation
Wire SettingsHandler with CaddyManager and Cerberus dependencies
Frontend:
Fix optimistic update logic to preserve mode field for WAF/rate_limit
Replace onChange with onCheckedChange for all Switch components
Add unit tests for mode preservation and rollback behavior
Test Fixes:
Fix CrowdSec startup test assertions (cfg.Enabled is global Cerberus flag)
Fix security service test UUID uniqueness for UNIQUE constraint
Add .first() to toast locator in wait-helpers.ts for multiple toasts
Documentation:
Add Security Dashboard Toggles section to features.md
Mark phase4_security_toggles_spec.md as IMPLEMENTED
Add E2E coverage mode (Docker vs Vite) documentation
Enables 8 previously skipped E2E tests in security-dashboard.spec.ts
and rate-limiting.spec.ts.
Controls HTML report auto-open behavior (set to 'never' for CI/non-interactive)
never
false
name
description
default
required
CI
Set to 'true' when running in CI environment
false
name
type
description
default
required
project
string
Browser project to run (chromium, firefox, webkit)
chromium
false
name
type
description
path
coverage-e2e
directory
E2E coverage output directory with LCOV and HTML reports
coverage/e2e/
name
type
description
path
playwright-report
directory
HTML test report directory
playwright-report/
name
type
description
path
test-results
directory
Test artifacts and traces
test-results/
category
subcategory
execution_time
risk_level
ci_cd_safe
requires_network
idempotent
test
e2e-coverage
medium
low
true
true
true
Test E2E Playwright Coverage
Overview
Runs Playwright end-to-end tests with code coverage collection using @bgotink/playwright-coverage. This skill collects V8 coverage data during test execution and generates reports in LCOV, HTML, and JSON formats suitable for upload to Codecov.
IMPORTANT: This skill starts the Vite dev server (not Docker) because V8 coverage requires access to source files. Running coverage against the Docker container will result in 0% coverage.