Gateway für den Web-Client: Vertrag + Plugin iris-web-linux + Installer-Dienste (Voraussetzung für iris/iris-web#1 Schritt 3+4) #346
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-plugins#346
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?
Worum es hier geht
Der Browser-Zweig von
iris/iris-web#1(Schritte 3 und 4 im Plan) hat seit Ende Oktober keinoffenes Issue mehr, obwohl die Arbeit nicht existiert. Die beiden Voraussetzungen sind
kommentarlos geschlossen:
iris/iris-linux-server#74— „Plugin-Installer: Dienste (Sidecar-Container) unterstützen",geschlossen 2026-10-27, kein Kommentar.
iris/iris-plugins#166— „Plugin iris-web-linux: Gateway für den Web-Client +Gateway-Vertrag", geschlossen 2026-10-22, kein Kommentar.
Beide trugen
typ/idea. Was davon noch gilt, steht infrontend/iris-web/CLAUDE.mdund infrontend/iris-web/obsidian-docs/plans/ENTSCHEIDUNGEN.md(Entscheidung 3: Installer lerntDienste; 4: Passwort-Login; 5: Master-Token; 8: Python/FastAPI).
Gemessen am 2026-11-05, nichts davon ist gebaut
linux-server/iris-server/app/plugin_installer.pyschreibt in seinem eigenen Docstringweiterhin „Keine
pre_install/post_install-Hook-Ausführung … Bewusst nichtunterstützt statt blind auszuführen".
sidecarhat im ganzen Server-Repo keinen Treffer,kein
plugin.jsonimplugins/-Repo hat ein Dienste-Feld.Entwicklerdokumentation/liegt kein Gateway-Vertrag — die Projekt-CLAUDE.mdverweist auf einen, es gibt ihn nicht.
plugins/iris-web-linux; die Registry (plugin-registry, nach Pull)führt ihn nicht.
Was zu tun ist, wenn der Browser-Zweig kommen soll
Entwicklerdokumentation/: Login, Session, Logout,Weiterleitung der Wire-Protokoll-Aufrufe und SSE-Streams. Beide Gateways (Linux, später
Mac) müssen ihn identisch bedienen.
iris/iris-linux-server): Manifest-Feld, Secrets,Lebenszyklus bei Install/Deinstall/Neustart, Backup, erlaubte Compose-Optionen.
iris-web-linux(Python/FastAPI im Container) mit pytest-Vertragstests.iris/iris-web#1Schritt 4: WASM-Bundle ins Plugin, Verteilung, Updater.Punkt 2 ist die Voraussetzung für 3 und der einzige, der den Server-Kern anfasst.
Grenzen
Ob die beiden alten Issues bewusst geschlossen wurden (andere Absicht, ersetzt durch etwas
anderes) oder versehentlich, ist aus dem Verlauf nicht zu entnehmen — keiner hat einen
Kommentar hinterlassen. Dieses Issue beschreibt nur, was nicht existiert; es entscheidet
nicht, ob der Browser-Zweig gebaut wird. Der Desktop-Client funktioniert ohne das Gateway
(
iris/iris-web#1).Kurze Klarstellung: dieses Issue war kurz geschlossen, weil ein Docs-Commit (
iris/iris-webPR #12) ohne-reingereicht wurde und es deshalb automatisch geschlossen hat. Wieder geöffnet — die Arbeit ist nicht getan, es existiert nichts davon. PR #12 ändert nur die Verweise insession-kontext.md(und inPLAN.md, die im Vault liegt).PR #166 gemergt: docs(entwicklerdoku): Entwurf Gateway-Vertrag (iris/iris-plugins#346)
http://docker:3000/alf/2ndbrain/pulls/166
Commits:
Entwurf des Gateway-Vertrags:
Entwicklerdokumentation/19-Gateway-Vertrag.md. Das ist ein Vorschlag, nichts davon ist entschieden.Was drin steht: Zwei Namensräume (
/gw/…für das Gateway,/api/…als durchgereichtes Wire-Protokoll, Bundle auf/), Login/Sitzung/Logout/Health mit Cookie-Attributen und Rate-Limit, CSRF-Schutz, Weiterleitung per Allowlist (mit Begründung), Header-Regeln und Gateway als Gerät (X-Device-ID, Token-Rotation), Streams (SSE ohne Pufferung), Downloads, Uploads, Zeitlimits, HTML-Server, was es im Browser zunächst nicht gibt (Terminal, Remote Desktop, Geräteverwaltung), Versionierung (contract: 1) und die pytest-Vertragstests. Fest (aus den Entscheidungen 3–6 und 8) und Vorschlag sind getrennt; am Ende steht eine Tabelle mit 10 offenen Entscheidungen, je mit Vorschlag und Alternative.Ein Punkt, der die Richtung bestimmt: Der Mac-Server hat Routen ohne Anmeldung nur für Loopback (
/notify,/job-watch/start,/job-callback/register,POST /vault/translate,POST /claude-code/terminal) und verlangt für Terminal und Remote Desktop keine Geräte-Freigabe bei Loopback-Verbindungen.iris-web-macliefe auf demselben Rechner, das Gateway wäre für den Server also Loopback; ein Gateway, das alles durchreicht, öffnete diese Routen jedem angemeldeten Browser. Deshalb schlägt der Entwurf eine Allowlist vor (mit einem Test, der prüft, dass jede Route des Wire-Protokolls in genau einer Gruppe steht). Der Linux-Server hat diese Ausnahmen nicht; die Allowlist gilt trotzdem für beide, weil der Vertrag identisch sein soll.Geprüft: Das Mermaid-Diagramm (gültig); Aussagen zum Server gegen
02-Wire-Protokoll.mdund den Code des Linux-Servers abgeglichen (dabei eine Falschaussage im ersten Entwurf gefunden und korrigiert: die Loopback-Ausnahme gibt es nur auf dem Mac).Nicht geprüft: Kein Gateway gebaut und nichts gegen einen echten Server ausprobiert. Die Zahlen (Sitzungsdauer, Rate-Limit, Upload-Grenze) sind Vorschläge ohne Messung. Die Allowlist steht nur als Familien, nicht Route für Route; Grundlage wäre
linux-server/ROUTES.md, nicht gegen den Stand der Routen abgeglichen.Hinweis aus
iris/rust-iris-nx#1(2026-11-11): Sobald der Linux-Server Sessions kennt (iris/iris-linux-server#151, EntwurfEntwicklerdokumentation/20-Sessions-Entwurf.md), braucht die Allowlist des Gateways die neuen Routen (/sessions…, dazu das Feldsession_idinPOST /agentund den neuen Fehler409 session_busy). Der Vertragstest (jede Route des Wire-Protokolls in genau einer Gruppe) schlägt sonst fehl. Für den Mac-Gateway stehen sie unter „nicht vorhanden“, weil der Mac-Server die Fähigkeit nicht hat. Bis das Gateway existiert, nutztrust-iris-nxeinen Entwicklungs-Transport und ist davon nicht blockiert.