docs: fix review round 1 - tree_rev in save pipeline, single-source D7 in Sec 10/11.3/14
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01At3V6SjwbMe6eMzVGW3Hs7
This commit is contained in:
@@ -234,7 +234,7 @@ Kurzform setzt Admin-Labels automatisch (`<Abschnitt> – <Modul>`), sofern nich
|
|||||||
|
|
||||||
### 5.6 Speicher-Pipeline
|
### 5.6 Speicher-Pipeline
|
||||||
|
|
||||||
1. Rechte prüfen (`edit_post`), `rev` prüfen.
|
1. Rechte prüfen (`edit_post`), `tree_rev` prüfen.
|
||||||
2. Änderung auf dem BlockTree ausführen, validieren (alles oder nichts).
|
2. Änderung auf dem BlockTree ausführen, validieren (alles oder nichts).
|
||||||
3. Serialisieren, `wp_slash()`, `wp_update_post()` – Status unverändert, vorher Wiederherstellungspunkt (Revision). Für Benutzer ohne `unfiltered_html` wird kses für genau diesen Aufruf abgeschaltet: `filter_block_content()` würde sonst jeden unveränderten Block neu serialisieren (Byte-Identität, globale Module; in DDEV nachgewiesen). Das ist nur vertretbar, weil keine client-gelieferte Zeichenkette ungeprüft in `post_content` gelangt (D7): Klartext-Werte werden je Feldtyp bereinigt (Text: `sanitize_text_field`; Rich-Text: `wp_kses_post`, abhängig von `unfiltered_html`; URLs: `esc_url_raw`, geroutet über die Attribut-Metadaten des Katalogs, ersatzweise über den Schlüsselnamen). Werte mit `$variable(...)$` – ob aus Platzhaltern erzeugt oder unverändert aus `lit/divi-node-get` zurückgegeben – werden geparst, streng geprüft (zulässiger Typ, existierende gcid-/gvid-/Dynamic-Content-Quellennamen, whitelisted Settings-Schlüssel, String-Settings bereinigt) und vom Plugin neu serialisiert; alles andere wird mit `validation_failed` abgelehnt. Ob Divi das Dynamic-Content-`before`/`after` bei der Ausgabe selbst escaped, wird in Etappe 2b im Divi-Quellcode verifiziert; die Bereinigung gilt unabhängig davon (Verteidigung in der Tiefe, R2).
|
3. Serialisieren, `wp_slash()`, `wp_update_post()` – Status unverändert, vorher Wiederherstellungspunkt (Revision). Für Benutzer ohne `unfiltered_html` wird kses für genau diesen Aufruf abgeschaltet: `filter_block_content()` würde sonst jeden unveränderten Block neu serialisieren (Byte-Identität, globale Module; in DDEV nachgewiesen). Das ist nur vertretbar, weil keine client-gelieferte Zeichenkette ungeprüft in `post_content` gelangt (D7): Klartext-Werte werden je Feldtyp bereinigt (Text: `sanitize_text_field`; Rich-Text: `wp_kses_post`, abhängig von `unfiltered_html`; URLs: `esc_url_raw`, geroutet über die Attribut-Metadaten des Katalogs, ersatzweise über den Schlüsselnamen). Werte mit `$variable(...)$` – ob aus Platzhaltern erzeugt oder unverändert aus `lit/divi-node-get` zurückgegeben – werden geparst, streng geprüft (zulässiger Typ, existierende gcid-/gvid-/Dynamic-Content-Quellennamen, whitelisted Settings-Schlüssel, String-Settings bereinigt) und vom Plugin neu serialisiert; alles andere wird mit `validation_failed` abgelehnt. Ob Divi das Dynamic-Content-`before`/`after` bei der Ausgabe selbst escaped, wird in Etappe 2b im Divi-Quellcode verifiziert; die Bereinigung gilt unabhängig davon (Verteidigung in der Tiefe, R2).
|
||||||
4. Post-Meta `_et_pb_use_divi_5=on`, `_et_pb_use_builder=on` setzen.
|
4. Post-Meta `_et_pb_use_divi_5=on`, `_et_pb_use_builder=on` setzen.
|
||||||
@@ -419,7 +419,7 @@ Themen: `overview`, `divi-structure`, `divi-shortform`, `divi-attrs`, `divi-plac
|
|||||||
- Whitelists für WP-Einstellungen und Divi-Theme-Optionen.
|
- Whitelists für WP-Einstellungen und Divi-Theme-Optionen.
|
||||||
- Uploads: `wp_safe_remote_get`, MIME-Whitelist, Größenlimits.
|
- Uploads: `wp_safe_remote_get`, MIME-Whitelist, Größenlimits.
|
||||||
- Destruktive Aktionen: `confirm: true` erforderlich; kein endgültiges Löschen von Posts.
|
- Destruktive Aktionen: `confirm: true` erforderlich; kein endgültiges Löschen von Posts.
|
||||||
- Eingaben werden gegen JSON Schema und fachlich validiert; Texte in Divi-Attributen mit `wp_kses_post` (Text-Module) bzw. `sanitize_text_field` (einfache Felder).
|
- Eingaben werden gegen JSON Schema und fachlich validiert; Bereinigung von Divi-Schreibwerten siehe §5.6/D7 (eine Quelle der Wahrheit): je Feldtyp (`sanitize_text_field`/`wp_kses_post`/`esc_url_raw`, URLs geroutet über Katalog-Metadaten bzw. Schlüsselname), `$variable(...)$`-Werte geparst/geprüft/neu serialisiert, sonst `validation_failed`.
|
||||||
- HTTPS erforderlich (Hinweis im Admin, wenn nicht aktiv).
|
- HTTPS erforderlich (Hinweis im Admin, wenn nicht aktiv).
|
||||||
|
|
||||||
## 11. MCP-Konformität
|
## 11. MCP-Konformität
|
||||||
@@ -444,7 +444,7 @@ Referenz: https://modelcontextprotocol.io/specification
|
|||||||
- `inputSchema` für jedes Tool, `outputSchema` wo strukturiert (JSON Schema 2020-12); Ergebnisse als `structuredContent` + Text.
|
- `inputSchema` für jedes Tool, `outputSchema` wo strukturiert (JSON Schema 2020-12); Ergebnisse als `structuredContent` + Text.
|
||||||
- Fachliche Fehler als `isError: true`, Protokollfehler als JSON-RPC-Fehler.
|
- Fachliche Fehler als `isError: true`, Protokollfehler als JSON-RPC-Fehler.
|
||||||
- Annotations korrekt: `readOnlyHint` (Lese-Tools), `destructiveHint` (Löschen, Ersetzen, Austausch), `idempotentHint`.
|
- Annotations korrekt: `readOnlyHint` (Lese-Tools), `destructiveHint` (Löschen, Ersetzen, Austausch), `idempotentHint`.
|
||||||
- Zustandslos: kein serverseitiger Sitzungszustand; `rev` als explizites, servererzeugtes Handle in Tool-Argumenten.
|
- Zustandslos: kein serverseitiger Sitzungszustand; `rev`/`tree_rev` als explizite, servererzeugte Handles in Tool-Argumenten.
|
||||||
- Deterministische Reihenfolge der Tool-Liste.
|
- Deterministische Reihenfolge der Tool-Liste.
|
||||||
- Cursor-Paginierung für Listen.
|
- Cursor-Paginierung für Listen.
|
||||||
- Tool-Namen spezifikationskonform und eindeutig (`lit-…`).
|
- Tool-Namen spezifikationskonform und eindeutig (`lit-…`).
|
||||||
@@ -487,7 +487,7 @@ Kann-Kriterien nach Etappe 4 oder bei freier Kapazität.
|
|||||||
| Divi ändert Speicherformat | Divi-eigene Metadaten/Funktionen nutzen, Fixtures, Tests je Divi-Update, `builderVersion` setzen |
|
| Divi ändert Speicherformat | Divi-eigene Metadaten/Funktionen nutzen, Fixtures, Tests je Divi-Update, `builderVersion` setzen |
|
||||||
| `.well-known`/POST auf `/wp-json/` durch Hoster/WAF blockiert | Site-Health-Test, Fehlersuche-Doku |
|
| `.well-known`/POST auf `/wp-json/` durch Hoster/WAF blockiert | Site-Health-Test, Fehlersuche-Doku |
|
||||||
| Design-Qualität neuer Abschnitte ohne Vorlagen | Library-first-Arbeitsweise, Designsystem-Platzhalter, Guides, Warnungen |
|
| Design-Qualität neuer Abschnitte ohne Vorlagen | Library-first-Arbeitsweise, Designsystem-Platzhalter, Guides, Warnungen |
|
||||||
| Parallele Bearbeitung im Builder | `rev`-Sperre |
|
| Parallele Bearbeitung im Builder | `tree_rev`-Sperre |
|
||||||
| Datenformate Designsystem nur aus Code abgeleitet (lokal keine Daten) | vor Etappe 4 echte Daten im Builder anlegen und als Fixtures sichern |
|
| Datenformate Designsystem nur aus Code abgeleitet (lokal keine Daten) | vor Etappe 4 echte Daten im Builder anlegen und als Fixtures sichern |
|
||||||
|
|
||||||
## 15. Offene Punkte (in Etappen zu klären)
|
## 15. Offene Punkte (in Etappen zu klären)
|
||||||
|
|||||||
Reference in New Issue
Block a user