Files

65 lines
5.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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
im ursprünglichen Review für 0.2.0 nicht ausgeführt. Der anschließende Praxistest
für 0.2.1 ist im folgenden Nachtrag dokumentiert.
## Nachtrag: Lua-Korrektur und Praxistest für 0.2.1
Die Prüfung am Desktop zeigte, dass Hyprland 0.56.2 mit Lua-Konfiguration die
alten `dispatch dpms on`-/`dispatch focusmonitor`-Befehle ablehnt. Version 0.2.0
brach dadurch vor dem VT-Wechsel ab. Die bisherigen Mocks hatten beliebige
Dispatch-Aufrufe akzeptiert und diesen Fehler nicht erkannt.
Version 0.2.1 erkennt den aktiven Konfigurationsanbieter über `hyprctl -j status`
und verwendet die passenden Lua- oder hyprlang-Befehle. Die Mocks prüfen nun die
Befehlssyntax; fehlgeschlagene Refresh-Aufrufe protokollieren Operation,
Exitstatus und Fehlerantwort. Alle 30 Verhaltenstests sowie Bash-Syntaxprüfung
und ShellCheck 0.11.0 waren erfolgreich.
Der vollständige manuelle Recovery-Lauf am Desktop kehrte auf die grafische VT1
zurück und meldete `Recovery completed for HDMI-A-2`. Anschließend bestätigte
der Betreiber am 23.09.2026 den erfolgreichen physischen HDMI-Eingangswechsel.
Testumgebung und noch nicht separat bestätigte Prüfungen sind unter
[Hardware validation](hardware-validation.md) festgehalten.