Folge von #117, Punkt 4. Dort entschieden: Plugin-Daten liegen nur im Projekt. Eine serverweite Datei data/plugins/<id>.json gibt es nicht — auch die Einstellungen eines Plugins liegen im Projekt und gelten nur dort.
Befund
deserializeProject (src/core/store/serialize.ts) wirft beim Laden alles weg, was das Schema nicht kennt. Eigene Keys in asset.props sind nach dem Neuladen also weg. Ohne einen deklarierten Platz kann kein Plugin etwas speichern.
Zu bauen
pluginData?: { [pluginId: string]: JsonValue } am Asset und am Projekt selbst.
Beim Laden unangetastet durchreichen, auch wenn das Plugin gerade aus ist. Sonst löscht Abschalten plus Speichern die Daten.
Geschrieben wird nur über ein Kommando mit Undo: api.project.setData(assetId | null, value). Direkten Zugriff aufs Modell gibt es weiterhin nicht.
Gelesen wird als Kopie: api.project.data(assetId | null), wie bei assets().
Ein Plugin sieht nur seine eigenen Daten, der Schlüssel ist meta.id. Fremde Schlüssel bleiben unsichtbar und unangetastet.
Wird ein Asset gelöscht, gehen seine Plugin-Daten mit; Undo bringt beides zurück.
Fehlt pluginData, ist es leer — kein formatVersion-Bump.
Tests: Unit-Tests für das Überleben eines Speicher- und Ladezyklus bei abgeschaltetem Plugin, Undo, Abschottung zwischen zwei Plugins.
Offen (mit Vorschlag)
Eigenes Ereignis für Datenänderungen? Vorschlag: ja, api.project.on('data'), damit ein Tab oder eine Inspector-Section gezielt auffrischt, statt an change zu hängen.
Größengrenze pro Plugin? Vorschlag: keine harte Grenze, aber eine Warnung in der Console ab etwa 256 KB je Plugin.
Daten eines Plugins, das gar nicht mehr in data/plugins/ liegt? Vorschlag: bleiben stehen, nichts räumt sie weg.
Folge von #117, Punkt 4. Dort entschieden: Plugin-Daten liegen **nur im Projekt**. Eine serverweite Datei `data/plugins/<id>.json` gibt es nicht — auch die Einstellungen eines Plugins liegen im Projekt und gelten nur dort.
## Befund
`deserializeProject` (`src/core/store/serialize.ts`) wirft beim Laden alles weg, was das Schema nicht kennt. Eigene Keys in `asset.props` sind nach dem Neuladen also weg. Ohne einen deklarierten Platz kann kein Plugin etwas speichern.
## Zu bauen
- `pluginData?: { [pluginId: string]: JsonValue }` am **Asset** und am **Projekt** selbst.
- Beim Laden **unangetastet** durchreichen, auch wenn das Plugin gerade aus ist. Sonst löscht Abschalten plus Speichern die Daten.
- Geschrieben wird nur über ein Kommando mit Undo: `api.project.setData(assetId | null, value)`. Direkten Zugriff aufs Modell gibt es weiterhin nicht.
- Gelesen wird als Kopie: `api.project.data(assetId | null)`, wie bei `assets()`.
- Ein Plugin sieht nur seine eigenen Daten, der Schlüssel ist `meta.id`. Fremde Schlüssel bleiben unsichtbar und unangetastet.
- Wird ein Asset gelöscht, gehen seine Plugin-Daten mit; Undo bringt beides zurück.
- Fehlt `pluginData`, ist es leer — kein `formatVersion`-Bump.
- Tests: Unit-Tests für das Überleben eines Speicher- und Ladezyklus bei abgeschaltetem Plugin, Undo, Abschottung zwischen zwei Plugins.
## Offen (mit Vorschlag)
- Eigenes Ereignis für Datenänderungen? Vorschlag: ja, `api.project.on('data')`, damit ein Tab oder eine Inspector-Section gezielt auffrischt, statt an `change` zu hängen.
- Größengrenze pro Plugin? Vorschlag: keine harte Grenze, aber eine Warnung in der Console ab etwa 256 KB je Plugin.
- Daten eines Plugins, das gar nicht mehr in `data/plugins/` liegt? Vorschlag: bleiben stehen, nichts räumt sie weg.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Folge von #117, Punkt 4. Dort entschieden: Plugin-Daten liegen nur im Projekt. Eine serverweite Datei
data/plugins/<id>.jsongibt es nicht — auch die Einstellungen eines Plugins liegen im Projekt und gelten nur dort.Befund
deserializeProject(src/core/store/serialize.ts) wirft beim Laden alles weg, was das Schema nicht kennt. Eigene Keys inasset.propssind nach dem Neuladen also weg. Ohne einen deklarierten Platz kann kein Plugin etwas speichern.Zu bauen
pluginData?: { [pluginId: string]: JsonValue }am Asset und am Projekt selbst.api.project.setData(assetId | null, value). Direkten Zugriff aufs Modell gibt es weiterhin nicht.api.project.data(assetId | null), wie beiassets().meta.id. Fremde Schlüssel bleiben unsichtbar und unangetastet.pluginData, ist es leer — keinformatVersion-Bump.Offen (mit Vorschlag)
api.project.on('data'), damit ein Tab oder eine Inspector-Section gezielt auffrischt, statt anchangezu hängen.data/plugins/liegt? Vorschlag: bleiben stehen, nichts räumt sie weg.