45 lines
4.1 KiB
Markdown
45 lines
4.1 KiB
Markdown
# 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.
|