Files
WP-LIT-MCP/docs/superpowers/notes/2026-09-26-etappe-2b-abnahme.md

168 lines
10 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Etappe 2b – Manuelle Abnahme (Divi schreiben)
Vorbereitet von Task 10 (Hinweise, Guides, Version 0.3.0, Ende-zu-Ende-Test). Automatisch geprüft sind
bereits:
- alle Unit-Tests (`composer test`) und Lint (`composer lint`);
- die fünf 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-write-smoke.sh` prüft über den OAuth-Endpunkt:
- Einfügen, Ändern, Verschieben, Löschen und Duplizieren;
- Ersetzen mit Probelauf;
- `lit-content-create` mit Divi-Inhalt;
- den ersten Abschnitt auf einer leeren Seite;
- einen Redakteur ohne `unfiltered_html`: unberührte Bytes bleiben gleich, und es wird weder Skript,
Event-Handler, `javascript:` noch ein eingeschleustes Attribut gespeichert oder gerendert;
- Divis eigene Speicherfilter (Seite mit eigenen HTML-Attributen);
- keine Wege am Divi-Pfad vorbei: Rohtext-`content` mit Divi-Markup wird abgelehnt, und bei Divi
„nur lesen“ lehnt `lit-content-create` `divi` ab und `lit/divi-insert` ist auch über
`mcp-adapter-execute-ability` nicht erreichbar.
Details stehen im Report von Task 10 (`.superpowers/sdd/2026-09-26-etappe-2b-divi-schreiben/task-10-report.md`).
Die folgenden Punkte lassen sich nicht automatisch prüfen, weil sie den echten Divi Visual Builder und den
claude.ai-Connector brauchen. Jan-Niclas prüft sie selbst (Spec §1.3 Nr. 2, §13 „Bearbeitbarkeit im
Visual Builder“). Abweichungen als kurze Notiz zurückmelden; sie werden Folgeaufgaben (z. B. anders
gespeicherte Spaltenbreiten, D8).
## Vorbereitung: Testdaten des Probelaufs entfernen
Der Probelauf „Tischlerei Holzwerk Berger“ (trial-feedback.md) hat Daten auf der DDEV-Seite hinterlassen.
Vor der Abnahme von Hand zurücksetzen, sonst laufen §1–§3 auf einer veränderten Seite und das Testmenü
ist live. Nicht automatisch gelöscht – bitte selbst prüfen und ausführen
(`cd /home/janniclas/Projekte/WordPress && ddev wp …`):
- [ ] Website-Titel und Untertitel zurücksetzen:
`ddev wp option update blogname "Breva Map Dev"` und `ddev wp option update blogdescription ""`
(vorher leer).
- [ ] Die „[Test]“-Entwürfe löschen: Seiten 831, 834, 837, 839 und Beiträge 854, 856, 858
(vorher mit `ddev wp post list --post_type=page,post --post_status=draft --fields=ID,post_title`
prüfen, dass es genau diese sind), dann `ddev wp post delete 831 834 837 839 854 856 858 --force`.
- [ ] Das Menü „[Test] Hauptmenü“ (ID 22) aus der Position `primary-menu` nehmen und löschen:
`ddev wp menu location remove 22 primary-menu` und `ddev wp menu delete 22`; falls vorher ein
anderes Menü dort zugewiesen war, dieses wieder zuweisen (`ddev wp menu location assign <id>
primary-menu`).
- [ ] Die Platzhalter-Medien 828, 829, 830 löschen: `ddev wp post delete 828 829 830 --force`
(vorher in der Mediathek prüfen, dass sie nirgends mehr verwendet werden).
- [ ] Optional: Einträge des Probelaufs im Protokoll-Tab über „Protokoll leeren“ entfernen.
## 0. Verbindung, Zugriff, Tools- und Protokoll-Tab
- [ ] Discovery ohne Weiterleitung (Fix DiscoveryCanonical, bb85868):
`curl -si https://wordpress.ddev.site:8443/.well-known/oauth-protected-resource | head -1` und
`curl -si https://wordpress.ddev.site:8443/.well-known/oauth-authorization-server | head -1`
antworten beide mit `200` (kein `301` auf eine URL mit Schrägstrich) und JSON.
- [ ] Den Connector in claude.ai neu verbinden (Einstellungen → Connectors → LIT MCP → Verbinden):
Login, Zustimmung, danach sind die Tools in einer neuen Unterhaltung sichtbar.
- [ ] Mit einem Konto verbinden, dessen Rolle unter Zugriff **nicht** freigegeben ist (z. B. ein
Abonnent): die Autorisierung bricht mit „Dein Benutzer hat keinen Zugriff auf LIT MCP.“ ab; es
entsteht keine Verbindung (kein Anwendungspasswort im Profil).
- [ ] Einstellungen → LIT MCP → Zugriff: die Spalte „Zuletzt genutzt“ zeigt für die eben genutzte
Verbindung ein Datum (Aktualisierung höchstens einmal am Tag).
- [ ] Tools-Tab: je Gruppe Modus und „nur lesen“; die Warnung zur Zahl direkter Tools erscheint erst,
wenn mehr als 25 Tools direkt sichtbar sind (z. B. testweise eine Gruppe auf „direkt“ stellen,
danach zurücksetzen).
- [ ] Protokoll-Tab: Liste wie die WordPress-Listen (Filter nach Tool, Benutzer und Ergebnis links über
der Tabelle, Blättern, „Einträge pro Seite“ in den Ansichtsoptionen oben rechts); Links zu
Bearbeiten/Revision je Eintrag.
## 1. Visual Builder: von Claude gebaute Seite
- [ ] Dieser Auftrag in claude.ai:
„Lege eine Entwurfsseite ‚Abnahme Divi‘ an mit Hero (Überschrift, Text, Button mit Preset), einer
Zeile 1/3 + 2/3 mit Bild und Blurb, einem Akkordeon und einem Kontaktformular.“
Erwartet:
- Claude liest vorher `lit-divi-design-system` und `lit-divi-catalog`;
- dann `lit-content-create` mit `divi` (oder eine leere Seite plus `lit-divi-insert`);
- die Antwort nennt `preview_url` und `edit_url` (bei `divi` der Link in den Visual Builder,
`…&et_fb=1`).
- [ ] Die Seite im Divi Visual Builder öffnen (`edit_url`) und prüfen:
- [ ] Alle Module erscheinen als **native Module**, nicht als Code-Modul.
- [ ] Die Admin-Labels folgen dem Muster „<Abschnitt> – <Modul>“, z. B. „Hero – Button“.
- [ ] Jedes Modul lässt sich anklicken, ändern und speichern, ohne Fehlermeldung des Builders.
- [ ] Die Spaltenbreiten stimmen (1/3 + 2/3), auch in der Spalteneinstellung des Builders.
- [ ] Farben aus `{{color:…}}` sind als **globale Farbe** verknüpft: der Farbwähler zeigt die globale
Farbe, nicht einen festen Hex-Wert.
- [ ] Das Button-Preset ist im Builder als Preset ausgewählt.
- [ ] Akkordeon-Einträge und Kontaktformular-Felder sind einzeln bearbeitbar.
- [ ] Eine zweite Seite nur mit `lit-divi-insert` aufbauen lassen: leere Seite anlegen, dann
„Füge einen Abschnitt ‚Start‘ mit Überschrift und Text ein“. Im Builder öffnen: der Abschnitt
erscheint normal und ist bearbeitbar (Ruling S9: Hülle `divi/placeholder` wie beim Builder).
## 2. Visual Builder: von Claude geänderte Seite
- [ ] Eine bestehende, im Builder gebaute Seite kopieren (`lit/post-duplicate`) und an der Kopie per
claude.ai einen Button-Text ändern, ein Modul verschieben und einen Abschnitt duplizieren lassen.
- [ ] Die Kopie im Builder öffnen und prüfen:
- [ ] Alle unveränderten Module sehen aus wie vorher (Einstellungen, Presets, globale Farben).
- [ ] Die geänderten Module sind bearbeitbar, und die Änderung ist sichtbar.
- [ ] Die Kopie eines Abschnitts heißt „<Label> (Kopie)“.
## 3. Zurück zu Claude nach einer Builder-Änderung
- [ ] Die Seite aus Schritt 1 im Builder ändern und speichern.
- [ ] Danach per claude.ai eine weitere Änderung verlangen. Erwartet:
- [ ] `rev_mismatch` erscheint nur, wenn Claude eine alte `tree_rev` benutzt.
- [ ] Nach erneutem Lesen (`lit-divi-outline`) gelingt die Änderung.
- [ ] Die im Builder gemachten Einstellungen bleiben erhalten.
## 4. Rückgängig
- [ ] Einen Abschnitt löschen lassen. Claude fragt nach (`confirm_required`) und löscht erst nach der
Bestätigung.
- [ ] Den Abschnitt über `lit/revision-restore` mit der gemeldeten `revision_id` zurückholen und im Builder
prüfen, dass er wieder vollständig da ist.
## 5. Text auf mehreren Seiten ersetzen
- [ ] „Ersetze auf allen Seiten ‚Termin‘ durch ‚Beratungstermin‘“. Erwartet:
- [ ] Claude zeigt erst den Probelauf (Treffer je Seite) und fragt nach.
- [ ] Erst danach ersetzt es.
- [ ] Im Protokoll-Tab (Einstellungen → LIT MCP → Protokoll) steht je geänderter Seite ein Eintrag mit
eigener Revision.
- [ ] Liegt ein Treffer in einem **globalen Modul**, ändert Claude ihn nicht, sondern nennt ihn
(`skipped_nodes`, „in der Divi-Bibliothek bearbeiten“).
## 6. Redakteur ohne `unfiltered_html`
- [ ] Mit einem Redakteurs-Konto verbinden; unter Einstellungen → LIT MCP → Zugriff muss die Rolle
freigegeben sein.
- [ ] Auf einer Seite eines Administrators einen Text ändern lassen.
- [ ] Die Seite im Builder öffnen. Erwartet:
- [ ] Eingebettete Inhalte des Administrators (z. B. iframe, eigenes HTML im Code-Modul) sind
unverändert.
- [ ] Die Änderung des Redakteurs ist da.
- [ ] Den Redakteur eigenes HTML/CSS/Attribute eines Moduls setzen lassen, z. B. „füge dem Button das
HTML-Attribut data-x hinzu“. Erwartet: Ablehnung mit „nur im Divi-Builder änderbar“.
## 7. Tool-Gruppen und „nur lesen“
- [ ] Unter Einstellungen → LIT MCP → Tools die Gruppe Divi auf „nur lesen“ stellen.
- [ ] Neu verbinden. Die Divi-Schreibwerkzeuge (`lit-divi-insert` usw.) fehlen; die Lesewerkzeuge sind
noch da.
- [ ] „Lege eine Entwurfsseite ‚Nur lesen‘ mit einem Abschnitt und einer Überschrift an“: `lit-content-create`
mit `divi` → `unsupported` mit Hinweis auf den Tools-Tab; ohne `divi` (einfacher Entwurf) gelingt
das Anlegen weiterhin. Dasselbe gilt, wenn nur `lit-divi-insert` deaktiviert oder die Gruppe Divi
ganz deaktiviert ist.
- [ ] `lit-content-create` bzw. `lit-content-update` mit Divi-Markup im Feld `content`
(`<!-- wp:divi/section -->…`) → `validation_failed` mit Hinweis auf `divi` bzw. die lit-divi-*-Tools
(unabhängig von „nur lesen“).
- [ ] Hinweis: `lit/post-duplicate`, `lit/post-replace-with-copy` und `lit/revision-restore` gehören zur
Gruppe WordPress und kopieren bzw. stellen gespeicherte Divi-Inhalte auch bei Divi „nur lesen“ her;
sie schreiben keine neuen Divi-Werte vom Client.
- [ ] Die Einstellung zurücksetzen.
## 8. Builder-Fixtures aus 2a (falls noch offen; Ruling S20)
- [ ] Seiten mit **globalem Modul**, Preset, Variablen und Dynamic Content exportieren:
`tests/Integration/divi-export-page.php` (Anleitung in `2026-09-26-etappe-2a-abnahme.md` §1).
`composer test` bleibt grün.
- [ ] Auf einer Kopie einer solchen Seite `lit-divi-update` an einem normalen Modul ausführen. Das
globale Modul bleibt byte-identisch: Export vorher und nachher vergleichen.
- [ ] Hat die Seite Module mit eigenen HTML-Attributen oder einem eigenen HTML-Element (Erweitert →
Attribute/HTML), meldet die Antwort evtl. „Inhalt beim Speichern verändert“. Das ist dokumentiert
(Ruling S7: Divi normalisiert solche Seiten selbst). Prüfen, dass die Seite im Builder danach
einwandfrei ist.