feat(audit): free-text search, JSONL export of the view, labeled dev reset
Some checks failed
Security / Security check (push) Failing after 1s

- search field over flow/step/module/error/detail/project/id backs
  the list and the export ('current view' semantics); match logic
  is a top-level function with unit tests
- export writes one JSON object per line via the save dialog; the
  CLI stays the canonical WORM-grade export
- the bare trash icon on the audit toolbar read as 'delete
  evidence' (security-auditor finding) — the dev-only reset now
  sits in a labeled overflow menu next to the export action

Signed-off-by: flemming-it <stefan.a.flemming@googlemail.com>
This commit is contained in:
flemming-it 2026-07-18 00:08:51 +02:00
parent 0e53572589
commit 5aa69104e7
7 changed files with 273 additions and 7 deletions

View file

@ -561,6 +561,13 @@
"auditFilterModule": "Modul",
"auditFilterTooltip": "Ereignisse filtern",
"auditClearLogTooltip": "Protokoll löschen (nur local/dev Kanal)",
"auditMoreTooltip": "Weitere Aktionen",
"auditSearchHint": "Ereignisse durchsuchen (Flow, Schritt, Modul, Fehlertext …)",
"auditExportAction": "Aktuelle Ansicht als JSONL exportieren …",
"auditExportNothing": "Keine Ereignisse in der aktuellen Ansicht — nichts zu exportieren.",
"auditExportSaved": "{n} Ereignisse exportiert nach {path}",
"@auditExportSaved": {"placeholders": {"n": {"type": "int"}, "path": {"type": "String"}}},
"auditDevResetAction": "Entwicklungs-Reset: Protokoll löschen … (nur local/dev)",
"auditClearedToast": "{n} Ereignisse auf Kanal „{channel}\" gelöscht. Kette mit Marker neu geseedet.",
"@auditClearedToast": {
"placeholders": {

View file

@ -579,6 +579,13 @@
"auditFilterModule": "module",
"auditFilterTooltip": "Filter events",
"auditClearLogTooltip": "Clear log (local/dev channels only)",
"auditMoreTooltip": "More actions",
"auditSearchHint": "Search events (flow, step, module, error text …)",
"auditExportAction": "Export current view as JSONL …",
"auditExportNothing": "No events in the current view — nothing to export.",
"auditExportSaved": "Exported {n} events to {path}",
"@auditExportSaved": {"placeholders": {"n": {"type": "int"}, "path": {"type": "String"}}},
"auditDevResetAction": "Development reset: clear log … (local/dev only)",
"auditClearedToast": "Cleared {n} events on channel \"{channel}\". Chain reseeded with marker.",
"@auditClearedToast": {
"placeholders": {

View file

@ -2126,6 +2126,42 @@ abstract class AppLocalizations {
/// **'Clear log (local/dev channels only)'**
String get auditClearLogTooltip;
/// No description provided for @auditMoreTooltip.
///
/// In en, this message translates to:
/// **'More actions'**
String get auditMoreTooltip;
/// No description provided for @auditSearchHint.
///
/// In en, this message translates to:
/// **'Search events (flow, step, module, error text …)'**
String get auditSearchHint;
/// No description provided for @auditExportAction.
///
/// In en, this message translates to:
/// **'Export current view as JSONL …'**
String get auditExportAction;
/// No description provided for @auditExportNothing.
///
/// In en, this message translates to:
/// **'No events in the current view — nothing to export.'**
String get auditExportNothing;
/// No description provided for @auditExportSaved.
///
/// In en, this message translates to:
/// **'Exported {n} events to {path}'**
String auditExportSaved(int n, String path);
/// No description provided for @auditDevResetAction.
///
/// In en, this message translates to:
/// **'Development reset: clear log … (local/dev only)'**
String get auditDevResetAction;
/// No description provided for @auditClearedToast.
///
/// In en, this message translates to:

View file

@ -1181,6 +1181,29 @@ class AppLocalizationsDe extends AppLocalizations {
@override
String get auditClearLogTooltip => 'Protokoll löschen (nur local/dev Kanal)';
@override
String get auditMoreTooltip => 'Weitere Aktionen';
@override
String get auditSearchHint =>
'Ereignisse durchsuchen (Flow, Schritt, Modul, Fehlertext …)';
@override
String get auditExportAction => 'Aktuelle Ansicht als JSONL exportieren …';
@override
String get auditExportNothing =>
'Keine Ereignisse in der aktuellen Ansicht — nichts zu exportieren.';
@override
String auditExportSaved(int n, String path) {
return '$n Ereignisse exportiert nach $path';
}
@override
String get auditDevResetAction =>
'Entwicklungs-Reset: Protokoll löschen … (nur local/dev)';
@override
String auditClearedToast(int n, String channel) {
return '$n Ereignisse auf Kanal „$channel\" gelöscht. Kette mit Marker neu geseedet.';

View file

@ -1198,6 +1198,29 @@ class AppLocalizationsEn extends AppLocalizations {
@override
String get auditClearLogTooltip => 'Clear log (local/dev channels only)';
@override
String get auditMoreTooltip => 'More actions';
@override
String get auditSearchHint =>
'Search events (flow, step, module, error text …)';
@override
String get auditExportAction => 'Export current view as JSONL …';
@override
String get auditExportNothing =>
'No events in the current view — nothing to export.';
@override
String auditExportSaved(int n, String path) {
return 'Exported $n events to $path';
}
@override
String get auditDevResetAction =>
'Development reset: clear log … (local/dev only)';
@override
String auditClearedToast(int n, String channel) {
return 'Cleared $n events on channel \"$channel\". Chain reseeded with marker.';