Marktplatz: Update-Sheet behauptet "Keine Änderungen", obwohl Code-Dateien geändert sind #134

Closed
opened 2026-10-21 18:10:13 +00:00 by alf · 6 comments
Owner

Befund

Das Update-Sheet im Plugin-Marktplatz ("Änderungen gegenüber der installierten Version") sagt bei iris-plugin-dev 0.1.2 → 0.1.3: "Keine Änderungen an Skripten, Python-Paketen, Skills, Systemprompt oder Abhängigkeiten." Tatsächlich unterscheiden sich die Pakete in 10 Dateien (panel_api.py, pd_forgejo.py, pd_geruest.py, pd_grill.py, pd_plan.py, pd_pruefen.py, SKILL.md, docs/Skills-und-Hooks.md, web/settings.html, plugin.json mit der Versionsnummer); 13 sind unverändert. Der Systemprompt ist gleich geblieben, das stimmt.

Das Sheet ist die Stelle, an der der Nutzer vor dem Installieren sieht, was kommt. Ein Update, das nur Code ändert (der Normalfall), wird so als "keine Änderungen" beschriftet.

Ursache

MarketplaceCore.diffSummaries vergleicht nur: Hook-Skripte (Inhalt und Pfad), Python-Paketzeilen, Skill-Namen, Systemprompt-Text, Job-Vorlagen, Einrichtungsfragen und requires. Nicht verglichen werden die Inhalte der Skill-Dateien, Python-Skripte im Skill, Doku und Oberfläche. "Skripten" im Text meint nur die Hook-Ebene, gelesen wird es als "Code". Derselbe Satz steht in MarketplaceConfirmationView.swift und MarketplaceBulkUpdateView.swift.

Plan

  1. Dateiebene ergänzen: installiertes Plugin (plugins/<id>/) und neues Paket per SHA-256 vergleichen; das Sheet zeigt "N Dateien geändert, M neu, K entfernt" mit den Namen (aufklappbar), auch für .py und .md.
  2. Die Leer-Meldung ehrlich machen: Einschränkung im Text ("… an Hooks, Python-Paketen, Skill-Namen, Systemprompt oder Abhängigkeiten"); ohne Einschränkung nur, wenn auch keine Datei anders ist. Gilt auch für das Sammel-Update.
  3. Test in MarketplaceCore (scripts/test-marketplace-core.sh): Code-only-Update, neue Datei, entfernte Datei, unverändert.

Nicht Teil

Ein inhaltlicher Diff (Zeilen) der Dateien; nur die Liste der betroffenen Dateien.

Bezug: iris/iris-plugins#171 (Fundstelle beim Veröffentlichen von iris-plugin-dev 0.1.3).

## Befund Das Update-Sheet im Plugin-Marktplatz ("Änderungen gegenüber der installierten Version") sagt bei `iris-plugin-dev` 0.1.2 → 0.1.3: "Keine Änderungen an Skripten, Python-Paketen, Skills, Systemprompt oder Abhängigkeiten." Tatsächlich unterscheiden sich die Pakete in 10 Dateien (`panel_api.py`, `pd_forgejo.py`, `pd_geruest.py`, `pd_grill.py`, `pd_plan.py`, `pd_pruefen.py`, `SKILL.md`, `docs/Skills-und-Hooks.md`, `web/settings.html`, `plugin.json` mit der Versionsnummer); 13 sind unverändert. Der Systemprompt ist gleich geblieben, das stimmt. Das Sheet ist die Stelle, an der der Nutzer vor dem Installieren sieht, was kommt. Ein Update, das nur Code ändert (der Normalfall), wird so als "keine Änderungen" beschriftet. ## Ursache `MarketplaceCore.diffSummaries` vergleicht nur: Hook-Skripte (Inhalt und Pfad), Python-Paketzeilen, **Skill-Namen**, Systemprompt-Text, Job-Vorlagen, Einrichtungsfragen und `requires`. Nicht verglichen werden die Inhalte der Skill-Dateien, Python-Skripte im Skill, Doku und Oberfläche. "Skripten" im Text meint nur die Hook-Ebene, gelesen wird es als "Code". Derselbe Satz steht in `MarketplaceConfirmationView.swift` und `MarketplaceBulkUpdateView.swift`. ## Plan 1. Dateiebene ergänzen: installiertes Plugin (`plugins/<id>/`) und neues Paket per SHA-256 vergleichen; das Sheet zeigt "N Dateien geändert, M neu, K entfernt" mit den Namen (aufklappbar), auch für `.py` und `.md`. 2. Die Leer-Meldung ehrlich machen: Einschränkung im Text ("… an Hooks, Python-Paketen, Skill-Namen, Systemprompt oder Abhängigkeiten"); ohne Einschränkung nur, wenn auch keine Datei anders ist. Gilt auch für das Sammel-Update. 3. Test in `MarketplaceCore` (`scripts/test-marketplace-core.sh`): Code-only-Update, neue Datei, entfernte Datei, unverändert. ## Nicht Teil Ein inhaltlicher Diff (Zeilen) der Dateien; nur die Liste der betroffenen Dateien. Bezug: iris/iris-plugins#171 (Fundstelle beim Veröffentlichen von iris-plugin-dev 0.1.3).
Author
Owner

PR #135 gemergt: fix(marketplace): Update-Dialog vergleicht die Dateien des Pakets (Prüfsumme je Datei) statt Code-Updates als keine Änderungen zu melden (#134)
#135

Commits:

  • fix(marketplace): Update-Dialog vergleicht die Dateien des Pakets (Prüfsumme je Datei) statt Code-Updates als keine Änderungen zu melden (#134)
PR #135 gemergt: fix(marketplace): Update-Dialog vergleicht die Dateien des Pakets (Prüfsumme je Datei) statt Code-Updates als keine Änderungen zu melden (#134) https://forgejo.lewerken.duckdns.org/iris/Iris/pulls/135 Commits: - fix(marketplace): Update-Dialog vergleicht die Dateien des Pakets (Prüfsumme je Datei) statt Code-Updates als keine Änderungen zu melden (#134)
Author
Owner

PR #136 gemergt: chore(i18n): String-Katalog nach dem Update-Dialog (#134)
#136

Commits:

  • chore(i18n): String-Katalog nach dem Update-Dialog (#134)
PR #136 gemergt: chore(i18n): String-Katalog nach dem Update-Dialog (#134) https://forgejo.lewerken.duckdns.org/iris/Iris/pulls/136 Commits: - chore(i18n): String-Katalog nach dem Update-Dialog (#134)
Author
Owner

PR #78 gemergt: feat(marketplace): Update-Vergleich nennt geänderte, neue und entfernte Dateien (Prüfsumme je Datei), Gegenstück zu iris/Iris#134 (#77)
iris/iris-linux-server#78

Commits:

  • feat(marketplace): Update-Vergleich nennt geänderte, neue und entfernte Dateien (Prüfsumme je Datei), Gegenstück zu iris/Iris#134 (#77)
PR #78 gemergt: feat(marketplace): Update-Vergleich nennt geänderte, neue und entfernte Dateien (Prüfsumme je Datei), Gegenstück zu iris/Iris#134 (#77) https://forgejo.lewerken.duckdns.org/iris/iris-linux-server/pulls/78 Commits: - feat(marketplace): Update-Vergleich nennt geänderte, neue und entfernte Dateien (Prüfsumme je Datei), Gegenstück zu iris/Iris#134 (#77)
Author
Owner

PR #98 gemergt: docs(wire): diff der Update-Vorschau trägt files_changed, files_added, files_removed, files_truncated; files mit crc (iris/Iris#134)
alf/2ndbrain#98

Commits:

  • docs(wire): diff der Update-Vorschau trägt files_changed, files_added, files_removed, files_truncated; files mit crc (iris/Iris#134)
PR #98 gemergt: docs(wire): diff der Update-Vorschau trägt files_changed, files_added, files_removed, files_truncated; files mit crc (iris/Iris#134) https://forgejo.lewerken.duckdns.org/alf/2ndbrain/pulls/98 Commits: - docs(wire): diff der Update-Vorschau trägt files_changed, files_added, files_removed, files_truncated; files mit crc (iris/Iris#134)
Author
Owner

Umgesetzt (PR #135, #136; Wire-Doku PR #98 im Wurzel-Repo)

Befund (Nachtrag): diffSummaries und sein Gegenstück diff_summaries im Linux-Server verglichen nur Hook-Skripte, Python-Paketzeilen, Skill-Namen, Systemprompt, Job-Vorlagen, Einrichtungsfragen und requires. Ein Update, das nur Code, Skill-Texte oder Doku ändert, ergab einen leeren Vergleich und im Dialog „Keine Änderungen an Skripten …“. Fundstelle: iris-plugin-dev 0.1.2 → 0.1.3, zehn Dateien anders, 13 gleich.

Geändert (Mac-Server und macOS-Client)

  • Die Datei-Liste einer Paket-Zusammenfassung trägt je Datei die Prüfsumme crc (CRC-32, aus unzip -lv; MarketplaceCore.parseArchiveChecksums, Service listChecksumsInArchive).
  • diffSummaries liefert zusätzlich files_changed (andere Prüfsumme; ohne Prüfsumme andere Größe), files_added, files_removed und files_truncated. Die Dateischlüssel fehlen, wenn eine Summary keine Dateiliste hat.
  • MarketplaceConfirmation.describeChanges nennt die Dateien („Dateien geändert (10): …“, höchstens acht Namen, der Rest wird gezählt) und liefert nie eine leere Liste: Bei verglichenen Dateien heißt „nichts“ „Alle Dateien des Pakets sind gleich“, sonst „Keine Änderungen an Hooks, Python-Paketen, Skill-Namen, Systemprompt oder Abhängigkeiten. Die Dateiinhalte vergleicht dieser Server nicht.“ (älterer Server). Die Leer-Texte in MarketplaceConfirmationView und MarketplaceBulkUpdateView sagen nur noch „Keine Änderungen gemeldet.“
  • String-Katalog nachgezogen (PR #136, chore(i18n)).

Gemessen: scripts/test-marketplace-core.sh: 223 Prüfungen, 0 Fehler (204 vorher, 19 neu: Prüfsummen-Parser mit echter unzip -lv-Ausgabe, Datei-Liste mit crc, geändert trotz gleicher Größe, neu, entfernt, ohne Prüfsumme, gemischt, abgeschnitten, ohne Dateiliste, Sätze, älterer Server, der Betriebsfall). Dabei fand ein Test einen echten Fehler im Parser (zwei Leerzeichen zwischen Prüfsumme und Name ließen jeden Namen mit führendem Leerzeichen zurück). Außerdem gegen die echten Pakete iris-plugin-dev 0.1.2 und 0.1.3 mit dem echten unzip: genau die zehn Dateien, „und 2 weitere“ nach acht Namen; gleiche Pakete: „Alle Dateien des Pakets sind gleich“. Xcode-Build von Iris.xcodeproj erfolgreich.

Grenzen

  • Nicht in einer laufenden App geprüft: Die Mac-App muss neu gebaut werden (Mac Studio und Notebook), erst dann zeigt das Sheet die Dateien. Der Linux-Server muss neu ausgeliefert werden (#77).
  • Zeilenweiser Inhalts-Diff ist nicht Teil; nur die Liste der betroffenen Dateien.
  • plugin.json steht bei jedem Update in der Liste (Versionsnummer); das ist richtig, aber im Dialog etwas Rauschen.
  • Die CRC-32 erkennt Änderungen, ist aber keine Sicherheitsprüfung (die gibt es weiter über die SHA-256 des ganzen Pakets).

Gegenstücke: iris/iris-linux-server#77 (PR #78), iris/2ndbrain-ios#31 (PR #32). Das Issue bleibt offen bis zum Test in der neu gebauten App.

## Umgesetzt (PR #135, #136; Wire-Doku PR #98 im Wurzel-Repo) **Befund (Nachtrag):** `diffSummaries` und sein Gegenstück `diff_summaries` im Linux-Server verglichen nur Hook-Skripte, Python-Paketzeilen, Skill-**Namen**, Systemprompt, Job-Vorlagen, Einrichtungsfragen und `requires`. Ein Update, das nur Code, Skill-Texte oder Doku ändert, ergab einen leeren Vergleich und im Dialog „Keine Änderungen an Skripten …“. Fundstelle: `iris-plugin-dev` 0.1.2 → 0.1.3, zehn Dateien anders, 13 gleich. **Geändert (Mac-Server und macOS-Client)** - Die Datei-Liste einer Paket-Zusammenfassung trägt je Datei die Prüfsumme `crc` (CRC-32, aus `unzip -lv`; `MarketplaceCore.parseArchiveChecksums`, Service `listChecksumsInArchive`). - `diffSummaries` liefert zusätzlich `files_changed` (andere Prüfsumme; ohne Prüfsumme andere Größe), `files_added`, `files_removed` und `files_truncated`. Die Dateischlüssel fehlen, wenn eine Summary keine Dateiliste hat. - `MarketplaceConfirmation.describeChanges` nennt die Dateien („Dateien geändert (10): …“, höchstens acht Namen, der Rest wird gezählt) und liefert **nie** eine leere Liste: Bei verglichenen Dateien heißt „nichts“ „Alle Dateien des Pakets sind gleich“, sonst „Keine Änderungen an Hooks, Python-Paketen, Skill-Namen, Systemprompt oder Abhängigkeiten. Die Dateiinhalte vergleicht dieser Server nicht.“ (älterer Server). Die Leer-Texte in `MarketplaceConfirmationView` und `MarketplaceBulkUpdateView` sagen nur noch „Keine Änderungen gemeldet.“ - String-Katalog nachgezogen (PR #136, `chore(i18n)`). **Gemessen:** `scripts/test-marketplace-core.sh`: 223 Prüfungen, 0 Fehler (204 vorher, 19 neu: Prüfsummen-Parser mit echter `unzip -lv`-Ausgabe, Datei-Liste mit `crc`, geändert trotz gleicher Größe, neu, entfernt, ohne Prüfsumme, gemischt, abgeschnitten, ohne Dateiliste, Sätze, älterer Server, der Betriebsfall). Dabei fand ein Test einen echten Fehler im Parser (zwei Leerzeichen zwischen Prüfsumme und Name ließen jeden Namen mit führendem Leerzeichen zurück). Außerdem gegen die **echten** Pakete `iris-plugin-dev` 0.1.2 und 0.1.3 mit dem echten `unzip`: genau die zehn Dateien, „und 2 weitere“ nach acht Namen; gleiche Pakete: „Alle Dateien des Pakets sind gleich“. Xcode-Build von `Iris.xcodeproj` erfolgreich. **Grenzen** - **Nicht in einer laufenden App geprüft:** Die Mac-App muss neu gebaut werden (Mac Studio und Notebook), erst dann zeigt das Sheet die Dateien. Der Linux-Server muss neu ausgeliefert werden (#77). - Zeilenweiser Inhalts-Diff ist nicht Teil; nur die Liste der betroffenen Dateien. - `plugin.json` steht bei jedem Update in der Liste (Versionsnummer); das ist richtig, aber im Dialog etwas Rauschen. - Die CRC-32 erkennt Änderungen, ist aber keine Sicherheitsprüfung (die gibt es weiter über die SHA-256 des ganzen Pakets). **Gegenstücke:** iris/iris-linux-server#77 (PR #78), iris/2ndbrain-ios#31 (PR #32). Das Issue bleibt offen bis zum Test in der neu gebauten App.
Author
Owner

Abgeschlossen

Der Update-Dialog nennt geänderte, neue und entfernte Dateien (PR #135, #136; Linux-Server iris-linux-server#77, iOS 2ndbrain-ios#31; Wire-Doku PR #98). Von Alf in der App gesehen. Die Gegenstücke bleiben bis zur Prüfung gegen den Linux-Server und auf dem Gerät offen.

Geschlossen auf Alfs ausdrückliches Wort (2026-10-21).

## Abgeschlossen Der Update-Dialog nennt geänderte, neue und entfernte Dateien (PR #135, #136; Linux-Server iris-linux-server#77, iOS 2ndbrain-ios#31; Wire-Doku PR #98). Von Alf in der App gesehen. Die Gegenstücke bleiben bis zur Prüfung gegen den Linux-Server und auf dem Gerät offen. Geschlossen auf Alfs ausdrückliches Wort (2026-10-21).
alf closed this issue 2026-10-21 21:55:22 +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#134
No description provided.