You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
[V0.8.2.5] WP-S1: Bestätigungs-Dialog für openfile:-Exec (#49) #54
Befund: RecentManager (getRecentFiles, linux.dart:1045-1061) und xapp-Favorites (getFavoriteFiles, linux.dart:1705-1725) erzeugen openfile:-Entries (beide Module default-aktiv, Quelle = GTK recent-files/xbel, von jeder App schreibbar) → Substring-Match in der Suche → Klick → action_handler.dart:147-160: isFileExecutable prüft nur Mode-Bits → unawaited(Linux.runExecutableInTerminal(file)) → gnome-terminal -- <path> führt die Datei aus. Die TODO-Kommentare (:160-161 „Ask the user … possible security risk") räumen die Lücke selbst ein. (Issue-Abweichung: der Home-Scan erzeugt openfolder:-Einträge — kein Exec-Vektor.)
Fix (TDD):
RED — Widget-Tests für den openfile-Zweig: bestätigt → runExecutableInTerminal gerufen; abgebrochen → nicht gerufen; kein Dialog bei Nicht-Executables (xdg-open-Pfad).
GREEN — Bestätigungs-Dialog vor dem Exec-Aufruf nach existierendem Muster lib/tools/clean_timeshift.dart:69 _confirmDeletion (await vor dem unawaited, context.mounted-Check, l10n-Key für Dialogtext).
Optional: Executable-Badge im Suchergebnis-Card (sichtbarer Hinweis vor dem Klick).
Gates: globales CI-Gate-Set; manuell: Suche trifft ein ausführbares Recent-File → Dialog erscheint, Abbrechen startet nichts.
Commit: „fix(search): confirm before executing files from recent/favorites".
Erledigt — Commit 0024fcd „fix(search): confirm before executing files from recent/favorites" auf hardening/0.8.x-browser-xdg (lokal, nicht gepusht; Push/Release braucht Bastis OK).
Was drin ist (lib/services/action_handler.dart, openfile:-Zweig):
Bestätigungs-Dialog vor dem Exec; die Frage enthält den vollen Pfad (runFileQuestion(path)), dazu runFileWarning als Warntext. Der Terminal-Aufruf gnome-terminal -- <pfad> zeigt erst, was läuft, wenn es schon läuft — der Pfad muss vorher dastehen.
Abbrechen kehrt vorcallback() zurück → Suchliste bleibt stehen, nichts wird gestartet.
Nicht-Executables laufen unverändert über xdg-open.
Beide TODO-Kommentare entfernt; context.mounted-Check über dem ersten await-Gap in dem Zweig.
Gates (alle grün):
test/action_handler_test.dartneu, 3 Widget-Tests: bestätigt → Runner genau einmal mit dem Pfad + Callback; abgebrochen → weder Runner nochxdg-open, Liste bleibt; nicht-ausführbar → kein Dialog, xdg-open.
Damit die Tests nichts starten, sind die drei Prozessaufrufe injizierbar (ActionHandler.debugOverride) — bewusst mit unabhängiger Override-Semantik, damit ein Teil-Override nicht die übrigen Seams auf die echten Prozessstarts zurücksetzt und im flutter test ein gnome-terminal aufgeht.
l10n-Ratchet: runFileQuestion/runFileWarning in allen vier Sprachen (en/de/it/fi), Budgets unverändert. app_it.arb bekam zusätzlich das bisher fehlende executeInTerminal, sonst wäre der Bestätigen-Knopf auf Italienisch englisch geblieben.
Manuell (Pflicht-Gate) am Release-Bundle: Suche trifft openfile:/tmp/la-wps1-probe/la-wps1-probe.sh → Dialog mit vollem Pfad → Abbrechen startet nichts (Side-Effect-Datei unverändert, kein Terminalfenster, Liste bleibt) → Bestätigen führt die Datei aus. Zweimal reproduziert. Belege + Ablauf: Run-Dir final/wp-s1-2026-09-15/ (README + 4 Screenshots + executed.log).
Nicht mit drin: das optionale Executable-Badge im Suchergebnis-Card (Punkt 3 der Empfehlung). Es braucht ein neues ActionEntry-Feld oder einen Async-Stat pro gerenderter Card plus State in der Liste — ein Feature, keine Fehlerbehebung; der Dialog schließt den Vektor bereits. Als Follow-up notiert.
#49 bleibt offen (Release/Tag steht aus), #42/#56 unberührt.
Work-Package S1 ist umgesetzt: Bestätigungs-Dialog vor dem Ausführen von Dateien aus dem
Recent-/Favorites-Index.
Der vollständige Nachweis steht in #49 (dieses Paket ist dessen Umsetzung) —
Commit 0024fcd „fix(search): confirm before executing files from recent/favorites",
Dialog in lib/services/action_handler.dart:70-90 und :214-228, Widget-Tests in test/action_handler_test.dart.
Gates am 2026-10-23 (frisch, echte Exitcodes): flutter analyze → No issues found! · flutter test → 223 Tests grün · dart format --set-exit-if-changed lib test → 123 Dateien, 0 geändert ·
Python-Unittests 58 + 96 grün · packages/la_core 0 Findings / 25 Dateien / 68 Tests.
Nachweis: docs/handoff/v0.8.2-xdg-browser-abschluss.md — folgt mit PR #154.
Activity
Toqsick commentedon Sep 15, 2026
Erledigt — Commit
0024fcd„fix(search): confirm before executing files from recent/favorites" aufhardening/0.8.x-browser-xdg(lokal, nicht gepusht; Push/Release braucht Bastis OK).Was drin ist (
lib/services/action_handler.dart,openfile:-Zweig):runFileQuestion(path)), dazurunFileWarningals Warntext. Der Terminal-Aufrufgnome-terminal -- <pfad>zeigt erst, was läuft, wenn es schon läuft — der Pfad muss vorher dastehen.callback()zurück → Suchliste bleibt stehen, nichts wird gestartet.xdg-open.context.mounted-Check über dem erstenawait-Gap in dem Zweig.Gates (alle grün):
test/action_handler_test.dartneu, 3 Widget-Tests: bestätigt → Runner genau einmal mit dem Pfad + Callback; abgebrochen → weder Runner nochxdg-open, Liste bleibt; nicht-ausführbar → kein Dialog,xdg-open.ActionHandler.debugOverride) — bewusst mit unabhängiger Override-Semantik, damit ein Teil-Override nicht die übrigen Seams auf die echten Prozessstarts zurücksetzt und imflutter testeingnome-terminalaufgeht.runFileQuestion/runFileWarningin allen vier Sprachen (en/de/it/fi), Budgets unverändert.app_it.arbbekam zusätzlich das bisher fehlendeexecuteInTerminal, sonst wäre der Bestätigen-Knopf auf Italienisch englisch geblieben.check-versions✓ ·dart format✓ ·flutter analyze0 Findings ✓ ·flutter test+181 ✓ · python-unittest 42 ✓openfile:/tmp/la-wps1-probe/la-wps1-probe.sh→ Dialog mit vollem Pfad → Abbrechen startet nichts (Side-Effect-Datei unverändert, kein Terminalfenster, Liste bleibt) → Bestätigen führt die Datei aus. Zweimal reproduziert. Belege + Ablauf: Run-Dirfinal/wp-s1-2026-09-15/(README + 4 Screenshots +executed.log).Nicht mit drin: das optionale Executable-Badge im Suchergebnis-Card (Punkt 3 der Empfehlung). Es braucht ein neues
ActionEntry-Feld oder einen Async-Stat pro gerenderter Card plus State in der Liste — ein Feature, keine Fehlerbehebung; der Dialog schließt den Vektor bereits. Als Follow-up notiert.#49bleibt offen (Release/Tag steht aus),#42/#56unberührt.docs(security): hand off the V0.8.2.5 security pass after WP-S1
Toqsick commentedon Oct 23, 2026
Abnahme — erledigt (WP-S1)
Work-Package S1 ist umgesetzt: Bestätigungs-Dialog vor dem Ausführen von Dateien aus dem
Recent-/Favorites-Index.
Der vollständige Nachweis steht in #49 (dieses Paket ist dessen Umsetzung) —
Commit
0024fcd„fix(search): confirm before executing files from recent/favorites",Dialog in
lib/services/action_handler.dart:70-90und:214-228, Widget-Tests intest/action_handler_test.dart.Gates am 2026-10-23 (frisch, echte Exitcodes):
flutter analyze→ No issues found! ·flutter test→ 223 Tests grün ·dart format --set-exit-if-changed lib test→ 123 Dateien, 0 geändert ·Python-Unittests 58 + 96 grün ·
packages/la_core0 Findings / 25 Dateien / 68 Tests.Nachweis:
docs/handoff/v0.8.2-xdg-browser-abschluss.md— folgt mit PR #154.