Marktplatz: ältere Versionen eines Plugins ansehen und installieren #137

Closed
opened 2026-10-21 18:38:45 +00:00 by alf · 7 comments
Owner

Wunsch

In der Beschreibung (Detailansicht) jedes Plugins im Marktplatz soll ein Knopf stehen, der alle Versionen zeigt, die in der Registry (Forgejo) vorhanden sind. Aus der Liste lässt sich auch eine ältere Version installieren (Zurückrollen). Dazu behält die Registry fünf statt drei Versionen je Plugin (iris/iris-plugins#178).

Befund (gelesen, nicht vermutet)

  • Der Index (index.json) trägt je Plugin history mit version, file, sha256, size, published; die Pakete liegen unter packages/<id>/. Heute bleiben je Plugin die letzten drei.
  • Die Server können eine bestimmte Version schon: preview und install nehmen version und prüfen sie gegen history (MarketplaceCore.sourceForVersion, Linux marketplace.py); eine Version unterhalb der installierten ist bei update mit expliziter Version nicht gesperrt.
  • Der Katalog liefert die Liste nicht: GET /marketplace/api/catalog trägt keine versions je Plugin (nur available_version).
  • Die native Brücke ignoriert die Version der Seite absichtlich (MarketplaceWindowController, iOS MarketplaceView): Der Dialog zeigt immer die aktuelle. Die Seite schickt version: p.available_version.
  • Die Seite gibt es zweimal, byte-identisch (macos-iris/Iris/Resources/MarketplacePage.html, linux-server/iris-server/app/marketplace_web/index.html, je 423 Zeilen); eine Änderung muss in beide.
  • Der Bestätigungsdialog zeigt beim Update den Dateivergleich (iris/Iris#134), er würde bei einem Zurückrollen die Dateien zeigen, die sich ändern.

Plan (Vorschlag)

  1. Registry: --keep Standard 5 (iris/iris-plugins#178).
  2. Katalog (beide Server, Wire additiv): je Plugin versions: [{version, published, size, installed, current}], neueste zuerst, aus history.
  3. Seite (beide Kopien): In der Detailansicht ein Knopf „Versionen“, der die Liste aufklappt: je Zeile Version, Datum, Größe, Marke „installiert“ bzw. „aktuell“, und der Knopf „Installieren“ bzw. „Auf diese Version wechseln“. Ein Hinweis: Ältere Versionen sind nicht mehr gepflegt; Einstellungen bleiben, passen aber evtl. nicht.
  4. Native Brücken (macOS/IrisClient, iOS): nehmen version von der Seite an, aber nur als Wunsch: Die App schickt sie an preview, der Server prüft sie gegen history; der Dialog zeigt genau diese Version (und expected beim Installieren bindet sie); kein freier Wert.
  5. Dialog: zeigt bei einer älteren Version ausdrücklich „Ältere Version (0.1.3 → 0.1.1)“ und den Dateivergleich.
  6. Tests: Katalog (beide Server), Brücken-Prüfung der Version, Dialog-Text; Doku (Wire, README Kapitel 20).

Entscheidungen (Vorschlag, zu bestätigen)

  • Updates-Tab nach einem Zurückrollen: Das Plugin gilt weiter als „Update verfügbar“ (kein Festhalten der Version in V1).
  • Nur Versionen aus history (also höchstens fünf); ältere im Git-Verlauf der Registry sind nicht installierbar.
  • Bestehende Plugins haben heute höchstens drei Versionen; ein Zurückholen älterer Pakete aus dem Git-Verlauf der Registry ist ein eigener, nicht automatischer Schritt.

Nicht Teil

Version festhalten (Pinning), automatisches Zurückrollen bei Fehlern, Versionen aus dem Git-Verlauf.

Betroffene Repos

iris/Iris (Mac-Server, macOS-Client, Seite), iris/iris-linux-server (Server, Seite), iris/2ndbrain-ios (Brücke, Dialog), iris/iris-plugins (Registry), Wurzel (Wire-Doku).

## Wunsch In der Beschreibung (Detailansicht) jedes Plugins im Marktplatz soll ein Knopf stehen, der **alle Versionen zeigt, die in der Registry (Forgejo) vorhanden sind**. Aus der Liste lässt sich auch eine ältere Version installieren (Zurückrollen). Dazu behält die Registry fünf statt drei Versionen je Plugin (iris/iris-plugins#178). ## Befund (gelesen, nicht vermutet) - Der Index (`index.json`) trägt je Plugin `history` mit `version`, `file`, `sha256`, `size`, `published`; die Pakete liegen unter `packages/<id>/`. Heute bleiben je Plugin die letzten drei. - **Die Server können eine bestimmte Version schon:** `preview` und `install` nehmen `version` und prüfen sie gegen `history` (`MarketplaceCore.sourceForVersion`, Linux `marketplace.py`); eine Version unterhalb der installierten ist bei `update` mit expliziter Version nicht gesperrt. - **Der Katalog liefert die Liste nicht:** `GET /marketplace/api/catalog` trägt keine `versions` je Plugin (nur `available_version`). - **Die native Brücke ignoriert die Version der Seite absichtlich** (`MarketplaceWindowController`, iOS `MarketplaceView`): Der Dialog zeigt immer die aktuelle. Die Seite schickt `version: p.available_version`. - **Die Seite gibt es zweimal, byte-identisch** (`macos-iris/Iris/Resources/MarketplacePage.html`, `linux-server/iris-server/app/marketplace_web/index.html`, je 423 Zeilen); eine Änderung muss in beide. - Der Bestätigungsdialog zeigt beim Update den Dateivergleich (iris/Iris#134), er würde bei einem Zurückrollen die Dateien zeigen, die sich ändern. ## Plan (Vorschlag) 1. **Registry:** `--keep` Standard 5 (iris/iris-plugins#178). 2. **Katalog (beide Server, Wire additiv):** je Plugin `versions: [{version, published, size, installed, current}]`, neueste zuerst, aus `history`. 3. **Seite (beide Kopien):** In der Detailansicht ein Knopf „Versionen“, der die Liste aufklappt: je Zeile Version, Datum, Größe, Marke „installiert“ bzw. „aktuell“, und der Knopf „Installieren“ bzw. „Auf diese Version wechseln“. Ein Hinweis: Ältere Versionen sind nicht mehr gepflegt; Einstellungen bleiben, passen aber evtl. nicht. 4. **Native Brücken (macOS/IrisClient, iOS):** nehmen `version` von der Seite an, aber nur als Wunsch: Die App schickt sie an `preview`, der Server prüft sie gegen `history`; der Dialog zeigt genau diese Version (und `expected` beim Installieren bindet sie); kein freier Wert. 5. **Dialog:** zeigt bei einer älteren Version ausdrücklich „Ältere Version (0.1.3 → 0.1.1)“ und den Dateivergleich. 6. **Tests:** Katalog (beide Server), Brücken-Prüfung der Version, Dialog-Text; Doku (Wire, README Kapitel 20). ## Entscheidungen (Vorschlag, zu bestätigen) - **Updates-Tab nach einem Zurückrollen:** Das Plugin gilt weiter als „Update verfügbar“ (kein Festhalten der Version in V1). - **Nur Versionen aus `history`** (also höchstens fünf); ältere im Git-Verlauf der Registry sind nicht installierbar. - **Bestehende Plugins** haben heute höchstens drei Versionen; ein Zurückholen älterer Pakete aus dem Git-Verlauf der Registry ist ein eigener, nicht automatischer Schritt. ## Nicht Teil Version festhalten (Pinning), automatisches Zurückrollen bei Fehlern, Versionen aus dem Git-Verlauf. ## Betroffene Repos iris/Iris (Mac-Server, macOS-Client, Seite), iris/iris-linux-server (Server, Seite), iris/2ndbrain-ios (Brücke, Dialog), iris/iris-plugins (Registry), Wurzel (Wire-Doku).
Author
Owner

Stand: Schritt 1 erledigt

Die Registry behält künftig fünf Versionen (iris/iris-plugins#178, PR #179; DEFAULT_KEEP = 5, wirkt ab der nächsten Veröffentlichung). Offen sind die Schritte 2 bis 6 aus dem Plan (Katalog, Seite in beiden Kopien, Brücken, Dialog, Tests und Doku). Die drei Entscheidungen oben sind noch zu bestätigen, bevor ich den Katalog und die Seite baue.

## Stand: Schritt 1 erledigt Die Registry behält künftig fünf Versionen (iris/iris-plugins#178, PR #179; `DEFAULT_KEEP = 5`, wirkt ab der nächsten Veröffentlichung). Offen sind die Schritte 2 bis 6 aus dem Plan (Katalog, Seite in beiden Kopien, Brücken, Dialog, Tests und Doku). Die drei Entscheidungen oben sind noch zu bestätigen, bevor ich den Katalog und die Seite baue.
Author
Owner

PR #138 gemergt: feat(marketplace): Versionsliste im Plugin und ältere Versionen installieren (Katalog mit versions, Brücke target_version, Warnung im Dialog) (#137)
#138

Commits:

  • feat(marketplace): Versionsliste im Plugin und ältere Versionen installieren (Katalog mit versions, Brücke target_version, Warnung im Dialog) (#137)
PR #138 gemergt: feat(marketplace): Versionsliste im Plugin und ältere Versionen installieren (Katalog mit versions, Brücke target_version, Warnung im Dialog) (#137) https://forgejo.lewerken.duckdns.org/iris/Iris/pulls/138 Commits: - feat(marketplace): Versionsliste im Plugin und ältere Versionen installieren (Katalog mit versions, Brücke target_version, Warnung im Dialog) (#137)
Author
Owner

PR #80 gemergt: feat(marketplace): Versionsliste im Katalog und im Plugin (Knopf Versionen, ältere Version installieren), Seite wie in iris/Iris#137 (#79)
iris/iris-linux-server#80

Commits:

  • feat(marketplace): Versionsliste im Katalog und im Plugin (Knopf Versionen, ältere Version installieren), Seite wie in iris/Iris#137 (#79)
PR #80 gemergt: feat(marketplace): Versionsliste im Katalog und im Plugin (Knopf Versionen, ältere Version installieren), Seite wie in iris/Iris#137 (#79) https://forgejo.lewerken.duckdns.org/iris/iris-linux-server/pulls/80 Commits: - feat(marketplace): Versionsliste im Katalog und im Plugin (Knopf Versionen, ältere Version installieren), Seite wie in iris/Iris#137 (#79)
Author
Owner

PR #139 gemergt: refactor(marketplace): Regel für saubere Versionsangaben in der gemeinsamen Bestätigungsdatei (macOS und iOS) (#137)
#139

Commits:

  • refactor(marketplace): Regel für saubere Versionsangaben in der gemeinsamen Bestätigungsdatei (macOS und iOS) (#137)
PR #139 gemergt: refactor(marketplace): Regel für saubere Versionsangaben in der gemeinsamen Bestätigungsdatei (macOS und iOS) (#137) https://forgejo.lewerken.duckdns.org/iris/Iris/pulls/139 Commits: - refactor(marketplace): Regel für saubere Versionsangaben in der gemeinsamen Bestätigungsdatei (macOS und iOS) (#137)
Author
Owner

PR #34 gemergt: feat(marketplace): ältere Version aus der Versionsliste installieren, Rücksetzen-Dialog (iris/Iris#137, #33)
iris/2ndbrain-ios#34

Commits:

  • feat(marketplace): ältere Version aus der Versionsliste installieren, Rücksetzen-Dialog (iris/Iris#137, #33)
PR #34 gemergt: feat(marketplace): ältere Version aus der Versionsliste installieren, Rücksetzen-Dialog (iris/Iris#137, #33) https://forgejo.lewerken.duckdns.org/iris/2ndbrain-ios/pulls/34 Commits: - feat(marketplace): ältere Version aus der Versionsliste installieren, Rücksetzen-Dialog (iris/Iris#137, #33)
Author
Owner

PR #99 gemergt: docs(wire): Marktplatz-Katalog trägt versions, Brücke nimmt target_version (iris/Iris#137)
alf/2ndbrain#99

Commits:

  • docs(wire): Marktplatz-Katalog trägt versions, Brücke nimmt target_version (iris/Iris#137)
PR #99 gemergt: docs(wire): Marktplatz-Katalog trägt versions, Brücke nimmt target_version (iris/Iris#137) https://forgejo.lewerken.duckdns.org/alf/2ndbrain/pulls/99 Commits: - docs(wire): Marktplatz-Katalog trägt versions, Brücke nimmt target_version (iris/Iris#137)
Author
Owner

Stand: Mac, Linux und iOS gemergt (Mac #138/#139, Linux #80, iOS #34, Wire-Doku #99).

  • Befund/Ziel: Die Registry behält jetzt fünf Versionen je Plugin; der Marktplatz soll ältere installieren können.
  • Umsetzung: Katalogfeld versions (neueste zuerst; installierte und aktuelle immer dabei), Knopf „Versionen (N)“ je Plugin, Brückenfeld target_version (nur install/update, sauber geprüft), Dialog „Zurücksetzen“ mit Warnhinweis. Der Server prüft die Version gegen history.
  • Geprüft: Swift-Harness, pytest (135), Node-Mini-DOM-Test der Seite (21 Prüfungen), iOS-Build grün.
  • Grenzen: In keiner laufenden App und nicht im echten Browser ausprobiert; iOS nicht auf dem Gerät. Bereits entfernte Pakete kommen nur aus dem Git-Verlauf der Registry zurück (noch nicht ermittelt).
  • Offen: Mac neu bauen, Linux ausliefern, iOS aufs Gerät, dann Praxistest.
**Stand: Mac, Linux und iOS gemergt (Mac #138/#139, Linux #80, iOS #34, Wire-Doku #99).** - Befund/Ziel: Die Registry behält jetzt fünf Versionen je Plugin; der Marktplatz soll ältere installieren können. - Umsetzung: Katalogfeld `versions` (neueste zuerst; installierte und aktuelle immer dabei), Knopf „Versionen (N)“ je Plugin, Brückenfeld `target_version` (nur install/update, sauber geprüft), Dialog „Zurücksetzen“ mit Warnhinweis. Der Server prüft die Version gegen `history`. - Geprüft: Swift-Harness, pytest (135), Node-Mini-DOM-Test der Seite (21 Prüfungen), iOS-Build grün. - Grenzen: In keiner laufenden App und nicht im echten Browser ausprobiert; iOS nicht auf dem Gerät. Bereits entfernte Pakete kommen nur aus dem Git-Verlauf der Registry zurück (noch nicht ermittelt). - Offen: Mac neu bauen, Linux ausliefern, iOS aufs Gerät, dann Praxistest.
alf closed this issue 2026-10-21 23:10:46 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
iris/Iris#137
No description provided.