Plugin-Update/Deinstall: rmtree-Fehler lässt Plugin halb entfernt statt sauberem Fehler #93
Labels
No labels
herkunft/alpha-feedback
status
blockiert
status
zu-testen
typ
bug
typ
docs
typ
enhancement
typ
feature
typ
idea
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
iris/iris-linux-server#93
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Beobachtet (2026-10-22, Dev-Host
alf@iris-server):iris-plugin-dev0.1.15 in die Drop-Zone gelegt → der Wächter ruftinstall_plugin_from_archive, derenshutil.rmtree(plugin_dir)auf ein root-owned__pycache__im Skill-Ordner trifft (entstanden durch eindocker execohne-uim Server-Container — dieselbe Fehlerklasse wie der dokumentierte root-owned-.venv-Fall, drittes Vorkommnis). Die App läuft alsiris(non-root) →PermissionError.Folgen:
rmtreebricht mitten in der Entfernung ab (zuerst entfernte Dateien bleiben weg) → das Plugin-Verzeichnis ist halb entfernt (keinplugin.json, keinweb/), der Index trägt weiterhin die alte Version, das Panel ist tot.uninstall_pluginhat dasselbe Muster in schlechterer Reihenfolge: Skills und Systemprompt werden vor demrmtreeentfernt — schlägt derrmtreefehl, ist der Index-Eintrag da, aber Skills und Prompt fort: ein in sich inkonsistenter Zustand.Fix:
rmtree-OSErrorfangen → sauberes Fehler-Dict (Paket bleibt in der Drop-Zone, Wächter setzt nach Berechtigungs-Bereinigung erneut an; Hinweis: Rechte/Owner prüfen oder Container neu starten — der Entrypoint chownt die data-Pfade).rmtreevor der Skill-/Prompt-Entfernung,OSError→False(nichts berührt, Plugin bleibt vollständig, Retry möglich).Recovery auf dem Host (erledigt): kaputtes Verzeichnis per
docker exec -u root rm -rfentfernt, Wächter hat 0.1.15 neu installiert;docker execin diesen Containern immer mit-u iris(steht in der CLAUDE.md).PR #96 gemergt: fix(plugins): Update/Deinstall bei nicht entfernbarem Plugin-Verzeichnis sauber statt halb entfernt (#93)
#96
Commits:
Stand (#93)
Befund (live, 2026-10-22 auf
alf@iris-server): Beim Drop-Zone-Update voniris-plugin-dev(0.1.14 → 0.1.15) brachshutil.rmtree(plugin_dir)ininstall_plugin_from_archivemitPermissionErrorab: das Skill-Verzeichnis enthielt ein root-owned__pycache__(entstanden durch eindocker execohne-uwährend der 0.1.14-Verifikation — dieselbe Klasse wie der dokumentierte root-owned-.venv-Fall). Die App läuft alsiris(non-root) und konnte das Verzeichnis nicht vollständig entfernen.Folgen:
rmtreebrach mitten in der Entfernung ab → Plugin-Verzeichnis halb entfernt (keinplugin.json, keinweb/), Index mit alter Version, Panel tot.uninstall_pluginhatte das Muster in schlechterer Reihenfolge: Skills + Systemprompt wurden vor demrmtreeentfernt → bei einem Abbruch ein in sich inkonsistenter Zustand.Geändert:
app/plugin_installer.py(Install-Pfad):rmtree-OSErrorgefangen → sauberes Fehler-Dict; Paket bleibt in der Drop-Zone, Wächter setzt nach Berechtigungs-Bereinigung oder Container-Neustart (Entrypoint chownt die data-Pfade) erneut an.app/plugin_installer.py(uninstall_plugin):rmtreevor der Skill-/Prompt-Entfernung;OSError→False, nichts anderes berührt (Index, Skills, Prompt bleiben; Retry möglich).CLAUDE.md: Die-u iris-Regel fürdocker execgilt jetzt auch füriris-server(bisher nuriris-hermes/iris-hermes-scheduled).STAND-PROTOKOLL.md: Bugfix-Eintrag.Geprüft:
tests/test_plugin_installer_rmtree.py(neu, 2 Tests): Update mit abbrechendemrmtree→ sauberes Fehler-Dict, Index und Paket intakt; Deinstallation beiPermissionError→False, Verzeichnis und Index unangetastet.test_plugin_installer_driver_group.py+test_plugins_dropzone_watcher.pygrün (16 Tests zusammen, lokal).eigener-einrichten,repo-anlegenmit Wegwerf-Repo, Konfiguration wiederhergestellt).Nicht geprüft:
alf@iris-server— beides folgt auf dem Fuß; das aktuelle Deployment auf dem Host läuft noch mit dem alten Stand (der Wächter-Fehler wäre dort bis zum Neuaufbau gleich, tritt aber ohne root-owned Artefakt nicht wieder auf, solangedocker execmit-u irisbleibt).typ/bugfür #93 fehlt: Die Forgejo-Instanz legt Labels per API stillschweigend ab (an 3 Issues verifiziert, u. a.labels_index); #93 und die Wegwerf-Proben #94/#95 wurden über die API ohne Label angelegt, 94/95 gelöscht. Im Web-UI mit einem Klick nachtragbar.