test: end-to-end smoke and acceptance note for the Divi Library (3a)

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-09-27 03:51:12 +02:00
co-authored by Claude Opus 5.5
parent 2729e2800e
commit 186f7af7ca
2 changed files with 548 additions and 0 deletions
@@ -0,0 +1,117 @@
# Etappe 3a – Manuelle Abnahme (Divi-Bibliothek)
Automatisch geprüft sind bereits:
- alle Unit-Tests (`composer test`) und Lint (`composer lint`);
- `divi-library-smoke.sh` (neu) und die fünf bisherigen Integrationsskripte `divi-write-smoke.sh`,
`divi-read-smoke.sh`, `mcp-smoke.sh`, `wp-basis-smoke.sh` und `media-admin-smoke.sh` (alle in
`tests/Integration/`).
`divi-library-smoke.sh` prüft über den OAuth-Endpunkt, nur mit temporären Daten, die es danach wieder löscht:
- Werkzeugliste: `lit-library-insert` direkt, `lit/library-list`, `lit/library-save`, `lit/divi-node-copy` und
`lit/divi-dynamic-sources` indirekt, insgesamt 22 direkte Tools;
- Speichern als normaler und als globaler Eintrag: Inhalt byte-gleich mit Divis eigenen Einträgen, dieselben
Begriffe (`scope`, `layout_type`, `module_width`) und Divi-Metadaten, keine Divi-Kennzeichen, Quellseite
unverändert; `lit/library-list` zeigt beide Einträge;
- Einfügen als globale Instanz und als Kopie: Bytes wie beim Visual Builder, keine Windows-Zeilenumbrüche;
- globale Änderung: Probelauf mit `confirm_required` und den betroffenen Seiten, `confirm` ändert den Eintrag
mit Revision, die Bytes der Seiten bleiben gleich (sie verweisen nur auf den Eintrag);
- ein Redakteur, der eine private Seite mit der Instanz nicht bearbeiten darf: Probelauf mit `blocked_ids`,
Bestätigung abgelehnt (`forbidden`), nichts gespeichert;
- Knoten kopieren zwischen Seiten, auch die Ablehnung einer veralteten `source_tree_rev`;
- `{{link:ID}}` im Button: gespeichert als Divis „Seite Link“ (`post_link_url_page`), ein Entwurf als Ziel
erscheint nur als `?page_id=…`; in Textfeldern abgelehnt;
- ein Redakteur ohne `unfiltered_html`: Interaktionen, Lottie-Quelle und eigenes HTML werden von
`lit/library-save`, `lit-library-insert` (Kopie) und `lit/divi-node-copy` abgelehnt, harmlose Knoten gehen;
- Gruppe „Divi-Bibliothek“ deaktiviert: Bibliothekseinträge sind in den Divi-Lesetools `not_found`, die
Bibliothekstools verschwinden;
- `lit-guide` mit Thema „all“, `lit-site-status` ohne Befunde bei Divi, `lit/divi-dynamic-sources` für Seiten.
Die folgenden Punkte brauchen den echten Visual Builder bzw. einen verbundenen KI-Assistenten. Abweichungen
als kurze Notiz zurückmelden; sie werden Folgeaufgaben.
## Vorbereitung
- [ ] DDEV läuft, Divi 5.2.1 ist aktiv, LIT MCP zeigt Version 0.4.0 (Plugins-Seite).
- [ ] Unter Einstellungen → LIT MCP → Tools stehen die Gruppen „Divi“ und „Divi-Bibliothek“ auf ihrem
Standard (nicht „nur lesen“, nicht deaktiviert).
- [ ] Den KI-Assistenten neu verbinden, damit er die neuen Tools und Hinweise lädt. In einer neuen
Unterhaltung ist `lit-library-insert` sichtbar.
- [ ] Nach einem Lauf von `divi-library-smoke.sh` ist nichts übrig:
`cd /home/janniclas/Projekte/WordPress && ddev wp post list --post_type=et_pb_layout,page --post_status=any --s="LIT Smoke" --format=count`
ergibt `0`.
- [ ] Zwei Entwurfsseiten mit dem Divi Builder anlegen, z. B. „Abnahme 3a – Seite A“ und „Abnahme 3a – Seite B“,
jede mit mindestens einem Abschnitt, einer Zeile und einem Textmodul. Die „[Fixture]“- und
„[Test]“-Inhalte nicht verwenden und nicht ändern.
## 1. Vom Plugin angelegte Bibliothekseinträge im Visual Builder
- [ ] Den KI-Assistenten bitten, einen Abschnitt von Seite A als normalen Eintrag und ein Textmodul von
Seite A als globalen Eintrag in der Divi-Bibliothek zu speichern (Titel mit „Abnahme 3a“).
- [ ] Divi → Divi-Bibliothek öffnen: beide Einträge erscheinen mit dem richtigen Typ (Abschnitt bzw. Modul),
der Modul-Eintrag ist als global gekennzeichnet.
- [ ] Beide Einträge in der Bibliothek mit dem Visual Builder öffnen: der Inhalt stimmt mit dem Knoten auf
Seite A überein, der Builder meldet keine Fehler.
- [ ] Seite A im Visual Builder öffnen: sie ist unverändert (Speichern in die Bibliothek ändert die Quelle nicht).
- [ ] Im Visual Builder von Seite B „Aus Bibliothek hinzufügen“: beide Einträge sind auswählbar und lassen
sich einfügen. Danach die Seite ohne Speichern verlassen.
## 2. Vom Plugin eingefügte globale Instanz und Kopie
- [ ] Den KI-Assistenten bitten, den globalen Eintrag mit `lit-library-insert` in Seite B einzufügen (als
Instanz) und den normalen Eintrag als Kopie.
- [ ] Seite B im Visual Builder öffnen: das Modul ist als global markiert (Divis Kennzeichnung für globale
Module) und zeigt den Inhalt aus der Bibliothek; der kopierte Abschnitt ist nicht global.
- [ ] Die Kopie im Builder ändern und speichern: der Bibliothekseintrag und Seite A bleiben unverändert.
- [ ] Das globale Modul im Builder ändern und speichern: die Änderung erscheint im Bibliothekseintrag und
überall, wo die Instanz steht.
- [ ] Vorschau von Seite B: der Inhalt des globalen Moduls wird angezeigt.
- [ ] Hinweis: `lit-page-render-summary` zeigt globale Module nicht (über die Schnittstelle rendert Divi sie
nicht) und nennt sie unter `notes`; das ist erwartet.
## 3. Globales Modul über den KI-Assistenten ändern (Probelauf und Bestätigung)
- [ ] Den KI-Assistenten bitten, den Text des globalen Moduls zu ändern. Er muss zuerst den Probelauf zeigen:
welche Seiten betroffen sind (hier mindestens Seite B), und nachfragen, bevor er etwas speichert.
- [ ] Nach der Nachfrage ablehnen: der Eintrag bleibt unverändert (in der Divi-Bibliothek prüfen).
- [ ] Erneut bitten und zustimmen: der Assistent speichert mit Bestätigung (`confirm`).
- [ ] Vorschau aller betroffenen Seiten zeigt den neuen Text; die Seiten selbst wurden nicht neu gespeichert
(unter „Revisionen“ der Seite B keine neue Revision).
- [ ] Beim Bibliothekseintrag ist unter „Revisionen“ der Stand vor der Änderung sichtbar.
- [ ] Unter Einstellungen → LIT MCP → Protokoll steht die Änderung des Eintrags.
- [ ] Den Eintrag im Visual Builder öffnen: er lässt sich weiter bearbeiten und speichern.
## 4. Knoten zwischen Seiten kopieren
- [ ] Den KI-Assistenten bitten, einen Abschnitt von Seite A mit `lit/divi-node-copy` auf Seite B zu kopieren.
- [ ] Seite B im Builder öffnen, den kopierten Abschnitt ändern und speichern: Seite A bleibt unverändert.
## 5. Interner Link
- [ ] Den KI-Assistenten bitten, auf Seite B einen Button mit `{{link:<ID von Seite A>}}` einzufügen.
- [ ] Im Builder zeigt das Link-Feld des Buttons dynamischen Inhalt „Seite Link“ mit Seite A.
- [ ] Solange Seite A ein Entwurf ist, verlinkt der Button in der Vorschau auf `?page_id=<ID>`.
- [ ] Seite A veröffentlichen: der Button verlinkt auf die schöne Adresse. Danach Seite A wieder als Entwurf
speichern.
## 6. Rechte und die Gruppe „Divi-Bibliothek“
- [ ] Einstellungen → LIT MCP → Tools: die Gruppe „Divi-Bibliothek“ ist sichtbar, mit `lit-library-insert`,
`lit/library-list` und `lit/library-save`.
- [ ] Gruppe auf „nur lesen“: nach neuer Verbindung fehlt `lit-library-insert` in der Werkzeugliste;
Bibliothekseinträge lassen sich lesen (`lit-divi-outline`), Änderungen daran werden abgelehnt.
- [ ] Gruppe deaktivieren: nach neuer Verbindung fehlen die Bibliothekstools; eine Bibliotheks-ID gilt in
`lit-divi-outline` als nicht vorhanden. Seiten lassen sich weiter lesen und bearbeiten.
- [ ] Die Gruppe wieder auf ihren Standard stellen und neu verbinden.
- [ ] Optional mit einem Redakteurs-Konto (unter Zugriff freigegeben): in Divi → Rollen-Editor für „Redakteur“
„Globale Bibliothekselemente bearbeiten“ abschalten und den Assistenten ein globales Modul ändern lassen:
Ablehnung mit Hinweis auf den Rollen-Editor. Danach das Recht wieder einschalten.
- [ ] `lit-site-status`: bei Divi keine Einträge unter `problems`.
## Aufräumen
- [ ] Die Einträge „Abnahme 3a …“ in der Divi-Bibliothek und die Seiten A und B löschen (auch aus dem Papierkorb).
- [ ] Divi legt fehlende Systembegriffe (`scope`, `layout_type`, `module_width`) beim nächsten Speichern selbst an;
sie nicht von Hand löschen.
- [ ] Optional: die Einträge der Abnahme im Protokoll-Tab über „Protokoll leeren“ entfernen.