refactor(audit): extract audit domain into self-contained module
Move the entire audit subsystem (system audit, API audit, import audit,
user lifecycle audit, frontend telemetry) from core into modules/audit/.
Core decoupling via interface-based injection:
- AuditRecorderInterface replaces SystemAuditService in 10+ core services
- UserLifecycleAuditInterface / ImportAuditInterface for specialized flows
- NullAuditRecorder fallback when audit module is disabled
- ApiBootstrap/ApiResponse use null-safe callable resolvers
Module structure (modules/audit/):
- Manifest with routes, permissions, scheduler jobs, authorization policy
- 9 services, 8 repositories, 6 domain enums, 4 job handlers
- 33 page files, 4 JS files, 8 test files, migration scripts, i18n
Core cleanup:
- OperationsAuthorizationPolicy, UiCapabilityMap, PermissionService
surgically cleaned of audit-specific constants
- Sidebar template cleared of hardcoded audit navigation
- AuditModuleIsolationContractTest ensures no future core→module coupling
All quality gates pass: 1346 tests (19,276 assertions), PHPStan level 5
clean, architecture contracts verified.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 21:12:49 +01:00
{
"Telemetry helps detect recurring UI issues and failed requests in production." : "Telemetry hilft, wiederkehrende UI-Probleme und fehlgeschlagene Requests in Produktion zu erkennen." ,
"perm.user_lifecycle_audit.view" : "Benutzer-Lifecycle-Protokolle anzeigen" ,
"perm.users.lifecycle_restore" : "Benutzer aus Lifecycle-Protokoll wiederherstellen" ,
"User lifecycle" : "Benutzer-Lebenszyklus" ,
"Audit" : "Audit" ,
"API audit" : "API-Protokolle" ,
"API audit logs" : "API-Protokolle" ,
"Purge API audit logs" : "API-Protokolle bereinigen" ,
"Purge entries older than 90 days?" : "Einträge älter als 90 Tage bereinigen?" ,
"%d API audit entries purged" : "%d API-Protokoll-Einträge bereinigt" ,
"API audit entry not found" : "API-Protokoll-Eintrag nicht gefunden" ,
"View API audit entry" : "API-Protokoll-Eintrag anzeigen" ,
"Import audit logs" : "Import-Protokolle" ,
"Can view import audit logs" : "Kann Import-Protokolle anzeigen" ,
"Purge import logs" : "Import-Protokolle bereinigen" ,
"%d import audit entries purged" : "%d Import-Protokoll-Einträge bereinigt" ,
"Import audit entry not found" : "Import-Protokoll-Eintrag nicht gefunden" ,
"View import audit entry" : "Import-Protokoll-Eintrag anzeigen" ,
"User lifecycle policy" : "Benutzer-Lifecycle-Regel" ,
"User lifecycle defines when inactive users are deactivated or deleted." : "Hier wird festgelegt, wann inaktive Benutzer deaktiviert oder gelöscht werden." ,
"System audit controls whether security events are logged and how long they are kept." : "Hier wird gesteuert, ob Sicherheitsereignisse protokolliert werden und wie lange sie aufbewahrt werden." ,
"Privileged admins are excluded from automatic lifecycle actions" : "Privilegierte Admins sind von automatischen Lifecycle-Aktionen ausgenommen" ,
"Run user lifecycle now?" : "Benutzer-Lifecycle jetzt ausführen?" ,
"Run user lifecycle now" : "Benutzer-Lifecycle jetzt ausführen" ,
"User lifecycle already running" : "Benutzer-Lifecycle läuft bereits" ,
"User lifecycle failed" : "Benutzer-Lifecycle fehlgeschlagen" ,
"User lifecycle completed: %d deactivated, %d deleted" : "Benutzer-Lifecycle abgeschlossen: %d deaktiviert, %d gelöscht" ,
"Purge scheduler logs" : "Scheduler-Protokolle bereinigen" ,
"Purge run logs older than 90 days?" : "Laufprotokolle älter als 90 Tage bereinigen?" ,
"%d scheduler run logs purged" : "%d Scheduler-Laufprotokolle bereinigt" ,
"User lifecycle logs" : "Benutzer-Lifecycle-Protokolle" ,
"View user lifecycle audit entry" : "Benutzer-Lifecycle-Eintrag anzeigen" ,
"Lifecycle audit entry not found" : "Benutzer-Lifecycle-Eintrag nicht gefunden" ,
"Purge user lifecycle logs" : "Benutzer-Lifecycle-Protokolle bereinigen" ,
"Purge entries older than 365 days?" : "Einträge älter als 365 Tage bereinigen?" ,
"%d user lifecycle audit entries purged" : "%d Benutzer-Lifecycle-Protokoll-Einträge bereinigt" ,
"Lifecycle event" : "Lifecycle-Ereignis" ,
"Restore this user from lifecycle snapshot?" : "Diesen Benutzer aus dem Lifecycle-Snapshot wiederherstellen?" ,
"Lifecycle event was already restored" : "Lifecycle-Ereignis wurde bereits wiederhergestellt" ,
"Lifecycle snapshot unavailable" : "Lifecycle-Snapshot nicht verfügbar" ,
"System audit" : "System-Protokolle" ,
"System audit logs" : "System-Protokolle" ,
"View system audit entry" : "System-Protokoll-Eintrag anzeigen" ,
"System audit entry not found" : "System-Protokoll-Eintrag nicht gefunden" ,
"Enable system audit log" : "System-Protokolle aktivieren" ,
"Purge system audit logs" : "System-Protokolle bereinigen" ,
"Purge expired system audit entries?" : "Abgelaufene System-Protokoll-Einträge bereinigen?" ,
"%d system audit entries purged" : "%d System-Protokoll-Einträge bereinigt" ,
"Frontend telemetry" : "Frontend-Telemetrie" ,
"Enable frontend telemetry" : "Frontend-Telemetrie aktivieren" ,
"Allowed telemetry events" : "Erlaubte Telemetrie-Ereignisse" ,
"Telemetry" : "Telemetrie" ,
"Telemetry helps us find UI problems faster." : "Telemetrie hilft uns, UI-Probleme schneller zu finden." ,
"The percentage of users who will have telemetry enabled." : "Der Anteil der Nutzer, für die Telemetrie aktiv ist." ,
"Advanced telemetry options" : "Erweiterte Telemetrie-Optionen" ,
"setting.system_audit_enabled" : "System-Protokolle aktivieren/deaktivieren" ,
"setting.system_audit_retention_days" : "Aufbewahrungsdauer in Tagen für System-Protokoll-Einträge" ,
"setting.frontend_telemetry_enabled" : "Sichere Frontend-UX- und Fehler-Telemetrie aktivieren/deaktivieren" ,
"setting.frontend_telemetry_sample_rate" : "Sampling-Rate zwischen 0 und 1 für akzeptierte Frontend-Telemetrie-Ereignisse" ,
"setting.frontend_telemetry_allowed_events" : "Erlaubte Frontend-Telemetrie-Ereignisgruppen (warn_once, ajax_error)" ,
"System audit events (24h)" : "System-Protokoll-Ereignisse (24h)" ,
"System audit risks (24h)" : "System-Protokoll-Risiken (24h)" ,
"Top system audit event types (24h)" : "Top-System-Protokoll-Ereignistypen (24h)" ,
"Recent system audit risks (24h)" : "Aktuelle System-Protokoll-Risiken (24h)" ,
"User lifecycle audit" : "Benutzer-Lifecycle-Protokoll" ,
"Lifecycle runs (7d)" : "Lifecycle-Läufe (7d)" ,
"Lifecycle risks (7d)" : "Lifecycle-Risiken (7d)" ,
"Top lifecycle reason codes (7d)" : "Top-Lifecycle-Fehlercodes (7d)" ,
2026-03-26 08:22:04 +01:00
"Recent lifecycle risks (7d)" : "Aktuelle Lifecycle-Risiken (7d)" ,
"Audit & logs" : "Audit & Protokolle"
refactor(audit): extract audit domain into self-contained module
Move the entire audit subsystem (system audit, API audit, import audit,
user lifecycle audit, frontend telemetry) from core into modules/audit/.
Core decoupling via interface-based injection:
- AuditRecorderInterface replaces SystemAuditService in 10+ core services
- UserLifecycleAuditInterface / ImportAuditInterface for specialized flows
- NullAuditRecorder fallback when audit module is disabled
- ApiBootstrap/ApiResponse use null-safe callable resolvers
Module structure (modules/audit/):
- Manifest with routes, permissions, scheduler jobs, authorization policy
- 9 services, 8 repositories, 6 domain enums, 4 job handlers
- 33 page files, 4 JS files, 8 test files, migration scripts, i18n
Core cleanup:
- OperationsAuthorizationPolicy, UiCapabilityMap, PermissionService
surgically cleaned of audit-specific constants
- Sidebar template cleared of hardcoded audit navigation
- AuditModuleIsolationContractTest ensures no future core→module coupling
All quality gates pass: 1346 tests (19,276 assertions), PHPStan level 5
clean, architecture contracts verified.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 21:12:49 +01:00
}