# 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: unter Seiten → Alle Seiten und unter Divi → Divi-Bibliothek nach „LIT Smoke“ suchen (jeweils auch im Papierkorb) – keine Treffer. - [ ] 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:}}` 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=`. - [ ] 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, und `lit/divi-node-copy` mit einem Bibliothekseintrag als Quelle wird ebenfalls abgelehnt. Hinweis: Steht dagegen die Gruppe „Divi“ auf „nur lesen“, bleibt `lit-library-insert` in der Liste, lehnt aber jedes Einfügen ab (`unsupported`, „Divi-Änderungen sind … abgeschaltet“) – das ist so gewollt, kein Fehler. - [ ] 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 Einstellungen → LIT MCP → Zugriff die Rolle „Redakteur“ freigeben. Im KI-Assistenten die Verbindung trennen und neu verbinden; bei der Anmeldung (OAuth) mit dem Redakteurs-Konto einloggen – am einfachsten in einem privaten Browserfenster, in dem niemand bei WordPress angemeldet ist. Dann 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, die Freigabe der Rolle zurücknehmen und den Assistenten wieder als Administrator verbinden. - [ ] `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.