# Code-Review – 23.09.2026 Geprüft wurde der ursprüngliche Stand `73e727e` (Version 0.1.0). Die folgenden Befunde wurden für Version 0.2.0 behoben. Es gab noch keine vorhandene Git-Historie; der gelieferte Stand wurde deshalb vor Änderungen als eigener Commit gesichert. | Priorität | Befund im Ausgangscode | Auswirkung | Korrektur | | --- | --- | --- | --- | | Hoch | `revive-monitor-fix.sh`: kein EXIT-/Signal-Trap nach dem ersten `chvt` | Abbruch oder gescheiterter Rückwechsel kann den Benutzer auf einer anderen Konsole lassen. | Rückkehr-Trap, Prüfung beider sudo-Berechtigungen, Zeitlimits und ein Notfall-Rückkehrversuch. | | Hoch | Nur der Watcher prüft eine aktive Wayland-Sitzung, danach mehrere Sekunden Wartezeit | Bei Abmeldung oder Sitzungswechsel kann die Recovery eine inzwischen fremde VT aktivieren; direkte Helper-Aufrufe umgehen den Schutz. | Eigenständige Helper-Prüfung, UID/seat0/VT-Abgleich und erneute Prüfung unmittelbar vor dem Wechsel. | | Hoch | systemd erhält keine Hyprland-Instanz; `hyprctl`-Fehler werden ignoriert | Der Dienst kann auf die falsche/keine Instanz zugreifen und trotzdem VTs wechseln bzw. Erfolg melden. | Dokumentierter Login-Hook, Umgebungsimport im Installer, IPC-/Monitorprüfung und propagierte Fehler. | | Mittel | `/tmp/revive-monitor` als gemeinsamer Fallback; Fehler beim Lock-Öffnen ungeprüft | Benutzerübergreifende Kollisionen, Symlink-Ziele und unwirksame Sperren möglich. | Nur privates, eigenes Runtime-Verzeichnis mit Modus 0700; kein `/tmp`-Fallback; Lockfehler führen zum Abbruch. | | Mittel | Watcher-Pipeline ohne `pipefail`, EOF ergibt reguläres Ende | `udevadm` kann ausfallen, ohne dass `Restart=on-failure` den Dienst neu startet. | Pipeline-Status erfassen; jedes unerwartete Stream-Ende endet mit Fehlerstatus. | | Mittel | Watcher meldet nach jedem Helper-Aufruf Erfolg; Zeit-/Monitorwerte ungeprüft | Diagnose verschleiert echte Fehler; fehlerhafte Einstellungen können Schutz- und Wartefunktionen beeinträchtigen. | Statusabhängige Logs, begrenzte Integer-Werte, erlaubte Output-Namen. | | Mittel | Installer startet sofort; `enable --now` startet aktive Dienste bei Updates nicht neu; uneinheitliches XDG; globales `reset-failed` im Deinstaller | Aktivierung vor Konfiguration, alter Prozess trotz neuer Dateien, falscher Unit-Pfad, Löschen fremder Fehlerzustände. | Explizites `--start`, Stop vor Dateiaustausch, Restart bei Aktivierung, konsistente XDG-Pfade, Root-Verweigerung und gezieltes Zurücksetzen. | ## Validierung - 25 bestandene Verhaltenstests mit echten Bash-Prozessen und simulierten loginctl-, hyprctl-, udev-, sudo- und systemd-Befehlen; keine realen VT-Wechsel. - Abgedeckt: Erfolg, Vor-Login-Schutz, fremde Benutzer/Seats/Desktops, falsche VT, Sitzungswechsel während der Wartezeit, IPC-/Output-Fehler, fehlende Rechte, Rückkehrfehler und Signalbehandlung, Runtime-/Symlink-Schutz, Konfiguration, parallele Recovery, Hotplug-Bursts, Stream-Ende und Fehlerprotokollierung. - Installation, wiederholte Installation, Update-Aktivierung und Deinstallation unter temporärem HOME/XDG; vorhandene Konfiguration bleibt erhalten. - Bash-Syntax und ShellCheck 0.11.0 ohne Befunde; statische systemd-Prüfung mit auf das Checkout umgebogenem ExecStart, ohne Installation des Dienstes auf diesem Desktop. - Release aus committed HEAD; Archivinhalt, Prüfsummen und entpackter Installer werden separat geprüft. ## Verbleibende Grenzen Ein Shell-Trap hilft nicht gegen SIGKILL, Stromausfall oder dauerhafte Kernel-/sudo- Fehler. Prüfung und VT-Wechsel sind nicht atomar. Die temporäre VT kann einen anderen Konsoleninhalt zeigen. Unterstützt ist eine lokale Hyprland-Sitzung auf seat0; mehrere gleichzeitige Desktops desselben Benutzers sind nicht abgedeckt. DRM-Hotplug identifiziert nicht zuverlässig den betroffenen Monitor. Der Cooldown kann einen echten schnellen Rückwechsel unterdrücken. Das bleibt eine bewusste Einschränkung dieses hardwareabhängigen Workarounds und ist in README beschrieben. Ein realer Test von HDMI-Eingangswechsel, Ab-/Anmeldung und Boot-Verhalten wurde in diesem Review nicht ausgeführt. Er bleibt nach Installation erforderlich.