docs: Tool-Texte und Guide zu Obergrenze ohne Rechtevorabprüfung, partial_write, Live-Sperre aus der Suche, PAGE_LIMIT; Entscheidungsnotiz zu R11

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
Jan-Niclas Loosen
2026-10-18 17:38:30 +02:00
co-authored by Claude Sonnet 5.5
parent 06398242d6
commit 6d7c59e3fa
4 changed files with 28 additions and 17 deletions
+13 -5
View File
@@ -71,7 +71,8 @@ Einzelne Module bekommen Presets mit `lit-divi-insert`, `lit-divi-update` und `l
- Filter: `post_ids` (1–50 Einträge; ohne die Angabe alle Fundstellen mit diesem Modultyp), - Filter: `post_ids` (1–50 Einträge; ohne die Angabe alle Fundstellen mit diesem Modultyp),
`only_without_preset: true` (nur Module ohne Preset) oder `only_with_preset: "<Name>"` (nur Module, die dieses `only_without_preset: true` (nur Module ohne Preset) oder `only_with_preset: "<Name>"` (nur Module, die dieses
Preset schon tragen; nicht zusammen), `clear_overrides: true` (lokale Werte entfernen, die das Preset überdecken). Preset schon tragen; nicht zusammen), `clear_overrides: true` (lokale Werte entfernen, die das Preset überdecken).
- `preset: null` und `null` als Wert in `group_presets` werden abgewiesen (`validation_failed`): site-weit entfernt - `preset: null`, ein leerer Text und `null` oder ein leerer Text als Wert in `group_presets` werden abgewiesen
(`validation_failed`): site-weit entfernt
`lit/divi-design-detach` Verweise. `lit/divi-design-detach` Verweise.
- Ablauf: erst ohne `confirm` aufrufen (Probelauf: `confirm_required` mit `pages` – je Seite `post_id`, `title`, - Ablauf: erst ohne `confirm` aufrufen (Probelauf: `confirm_required` mit `pages` – je Seite `post_id`, `title`,
`status`, die betroffenen Knoten mit Pfad-ID, Modul und Label sowie `warnings` zu überdeckten Werten –, dazu `status`, die betroffenen Knoten mit Pfad-ID, Modul und Label sowie `warnings` zu überdeckten Werten –, dazu
@@ -89,10 +90,15 @@ Einzelne Module bekommen Presets mit `lit-divi-insert`, `lit-divi-update` und `l
- Mit `post_ids` blockieren nur die genannten Seiten, die Obergrenze von 2000 gilt nicht. Eine genannte - Mit `post_ids` blockieren nur die genannten Seiten, die Obergrenze von 2000 gilt nicht. Eine genannte
veröffentlichte, private oder geplante Seite ohne Bearbeitungsrecht verweigert den ganzen Aufruf (`forbidden` veröffentlichte, private oder geplante Seite ohne Bearbeitungsrecht verweigert den ganzen Aufruf (`forbidden`
mit `blocked_ids`, nichts wird geschrieben; der Probelauf listet sie unter `blocked_ids`). Eine genannte mit `blocked_ids`, nichts wird geschrieben; der Probelauf listet sie unter `blocked_ids`). Eine genannte
Seite, die nicht live ist (Entwurf usw.) und nicht bearbeitet werden darf, steht unter `skipped`. Seite, die nicht live ist (Entwurf usw.) und nicht bearbeitet werden darf, steht unter `skipped`. Gibt es mehr als
- Scheitert das Speichern mitten im Lauf, 2000 Live-Fundstellen, entfällt die Vorabprüfung der Bearbeitungsrechte; dann steht auch eine genannte Live-Seite
meldet `partial_write` die bis dahin gespeicherten Seiten (`saved`); die übrigen mit einem neuen Probelauf ohne Bearbeitungsrecht unter `skipped` statt in `forbidden`.
weiterführen. - Die Sperre für Live-Seiten ergibt sich allein aus der Fundstellensuche: Eine Live-Seite, die das Konto nicht
bearbeiten darf, blockiert den ganzen Aufruf, auch wenn die Filter (`only_with_preset`, `only_without_preset`)
auf dieser Seite nichts ändern würden.
- Scheitert das Speichern mitten im Lauf, meldet `partial_write` die bis dahin gespeicherten Seiten (`saved`):
zuerst die genannte fehlgeschlagene Seite prüfen (`lit-divi-outline`), dann denselben Aufruf mit `confirm: true`
wiederholen; bereits geänderte Module trifft er nicht noch einmal.
- Globale Module und die Bibliothek: Eine globale Instanz (`[global <ID>]` in `lit-divi-outline`) wird auf der Seite - Globale Module und die Bibliothek: Eine globale Instanz (`[global <ID>]` in `lit-divi-outline`) wird auf der Seite
nicht umgeschrieben, sondern unter `skipped` gemeldet – „globales Modul – im Bibliothekseintrag <ID> ändern“, nicht umgeschrieben, sondern unter `skipped` gemeldet – „globales Modul – im Bibliothekseintrag <ID> ändern“,
wenn das Konto Bibliotheks-IDs sehen darf, sonst „globales Modul – im Divi-Builder ändern“. Der wenn das Konto Bibliotheks-IDs sehen darf, sonst „globales Modul – im Divi-Builder ändern“. Der
@@ -120,5 +126,7 @@ Einzelne Module bekommen Presets mit `lit-divi-insert`, `lit-divi-update` und `l
entfernt dort nur ausdrückliche Verweise und sagt das in `warnings`. Zum Beenden der Standardwirkung das Preset entfernt dort nur ausdrückliche Verweise und sagt das in `warnings`. Zum Beenden der Standardwirkung das Preset
löschen (`lit/divi-presets-delete`) oder mit `make_default: false` den Standard aufheben. löschen (`lit/divi-presets-delete`) oder mit `make_default: false` den Standard aufheben.
- Variablen: `variable` wird noch nicht unterstützt (`unsupported`; Variablen folgen mit Etappe 4c). - Variablen: `variable` wird noch nicht unterstützt (`unsupported`; Variablen folgen mit Etappe 4c).
- Meldet die Antwort `hidden_count` größer als 0, können Seiten, die dieses Konto nicht lesen darf, noch Verweise
enthalten; dann nennt sie den Hinweis auf `lit/divi-presets-delete` nicht.
- Danach `lit/divi-presets-delete` aufrufen (Probelauf, `confirm`, `design_rev`); es meldet kein `in_use` mehr, - Danach `lit/divi-presets-delete` aufrufen (Probelauf, `confirm`, `design_rev`); es meldet kein `in_use` mehr,
solange niemand das Preset neu zugewiesen hat. solange niemand das Preset neu zugewiesen hat.
@@ -50,8 +50,9 @@ Ansätze vorschlagen → Entwurf abschnittsweise freigeben → Spec schreiben
- P8a mit post_ids: nur die genannten Seiten können das Schreiben blockieren, HARD_CAP gilt nicht (die Rechteprüfung der Live-Seiten entfällt dann vorab, loadWritable() prüft jede Seite einzeln und meldet skipped). Eine genannte veröffentlichte, private oder geplante Seite ohne Bearbeitungsrecht verweigert den ganzen Aufruf (forbidden, blocked_ids, nichts geschrieben; der Probelauf listet sie in blocked_ids); eine genannte Seite, die nicht live ist (Entwurf usw.) und nicht bearbeitet werden darf, steht in skipped. Ohne post_ids verweigert jede blockierte Live-Fundstelle oder zu viele Fundstellen den ganzen Aufruf, nichts wird geschrieben. - P8a mit post_ids: nur die genannten Seiten können das Schreiben blockieren, HARD_CAP gilt nicht (die Rechteprüfung der Live-Seiten entfällt dann vorab, loadWritable() prüft jede Seite einzeln und meldet skipped). Eine genannte veröffentlichte, private oder geplante Seite ohne Bearbeitungsrecht verweigert den ganzen Aufruf (forbidden, blocked_ids, nichts geschrieben; der Probelauf listet sie in blocked_ids); eine genannte Seite, die nicht live ist (Entwurf usw.) und nicht bearbeitet werden darf, steht in skipped. Ohne post_ids verweigert jede blockierte Live-Fundstelle oder zu viele Fundstellen den ganzen Aufruf, nichts wird geschrieben.
- R9 Kein unfiltered_html-Zwang: der Umschreiber ändert nur Preset-Verweise und entfernt lokale Werte, Speichern über DiviSaver. - R9 Kein unfiltered_html-Zwang: der Umschreiber ändert nur Preset-Verweise und entfernt lokale Werte, Speichern über DiviSaver.
- R10 detach nur Presets: Eingabe preset = Objekt {module|group, preset}; variable → unsupported (4c); ohne post_ids zuerst verschachtelte Verweise über DesignChange (Snapshot, design_rev), danach Seiten (≤ 50); scheitert die erste Seite danach, nennt der Fehler Snapshot und diff; Standard-Presets nur ausdrückliche Verweise. - R10 detach nur Presets: Eingabe preset = Objekt {module|group, preset}; variable → unsupported (4c); ohne post_ids zuerst verschachtelte Verweise über DesignChange (Snapshot, design_rev), danach Seiten (≤ 50); scheitert die erste Seite danach, nennt der Fehler Snapshot und diff; Standard-Presets nur ausdrückliche Verweise.
- lit/divi-presets-assign: preset: null und null in group_presets werden abgewiesen (Hinweis auf lit/divi-design-detach); ein leerer Probelauf ist ein normales „nichts zu tun“. - lit/divi-presets-assign: preset: null, leerer Text und null in group_presets werden abgewiesen (Hinweis auf lit/divi-design-detach); ein leerer Probelauf ist ein normales „nichts zu tun“.
- R11 Standard-Gruppen-Presets: PresetUsageMatcher erkennt implizite Nutzung (Modul hat die Gruppe, kein ausdrücklicher Eintrag); Kandidaten fail closed über wp:divi/; der 4a-Hinweis „nicht aufgelistet“ entfällt. - R11 Standard-Gruppen-Presets: PresetUsageMatcher erkennt implizite Nutzung (Modul hat die Gruppe, kein ausdrücklicher Eintrag); Kandidaten fail closed über wp:divi/; der 4a-Hinweis „nicht aufgelistet“ entfällt.
- 4b-Nachtrag zu R11: Das ändert das 4a-Verhalten. lit/divi-presets-set und lit/divi-presets-delete eines Standard-GRUPPEN-Presets nehmen jetzt jede Divi-Seite mit dieser Gruppe in ihren Fundstellenbericht auf; auf Sites mit mehr als 2000 Live-Divi-Seiten wird die bestätigte Änderung daher abgewiesen (tooMany), wie bisher nur bei Standard-Modul-Presets; konsistent mit P8a.
- Grenze je Aufruf A6: 50 Seiten, remaining; Teilerfolg partial_write mit den gespeicherten Seiten. - Grenze je Aufruf A6: 50 Seiten, remaining; Teilerfolg partial_write mit den gespeicherten Seiten.
- Offen für 4c: detach für Variablen (A7: Referenz durch den aktuellen Wert ersetzen, bei Farben entfällt detach), Wiederverwendung des PageRewriter/TreeRewrite dafür (NodeRewrite-Strategie `VariableDetachRewrite`). - Offen für 4c: detach für Variablen (A7: Referenz durch den aktuellen Wert ersetzen, bei Farben entfällt detach), Wiederverwendung des PageRewriter/TreeRewrite dafür (NodeRewrite-Strategie `VariableDetachRewrite`).
- Offen für 4c/4e: Smoke divi-presets-assign-smoke.sh läuft nur mit deaktivierten Plugins postlos und asynclistry. - Offen für 4c/4e: Smoke divi-presets-assign-smoke.sh läuft nur mit deaktivierten Plugins postlos und asynclistry.
@@ -65,12 +65,13 @@ final class DiviDesignDetachAbility implements Ability
. 'Module fallen auf das nächste Preset im Stapel bzw. das Standard-Preset zurück. post_ids beschränkt auf ' . 'Module fallen auf das nächste Preset im Stapel bzw. das Standard-Preset zurück. post_ids beschränkt auf '
. 'diese Seiten (Verweise in Presets bleiben dann). Zuerst Probelauf (pages; bei Verweisen in Presets diff ' . 'diese Seiten (Verweise in Presets bleiben dann). Zuerst Probelauf (pages; bei Verweisen in Presets diff '
. 'und design_rev), nach Rückfrage beim Nutzer confirm: true (mit design_rev, wenn der Probelauf eine ' . 'und design_rev), nach Rückfrage beim Nutzer confirm: true (mit design_rev, wenn der Probelauf eine '
. 'nennt); je Aufruf höchstens 50 Seiten, remaining nennt den Rest. Mit post_ids können nur die ' . 'nennt); je Aufruf höchstens ' . PageRewriter::PAGE_LIMIT . ' Seiten, remaining nennt den Rest. Mit '
. 'genannten Seiten das Schreiben blockieren und die Obergrenze für sehr viele Seiten gilt nicht; eine ' . 'post_ids können nur die genannten Seiten das Schreiben blockieren und die Obergrenze für sehr viele '
. 'genannte veröffentlichte, private oder geplante Seite ohne Bearbeitungsrecht verweigert den ganzen ' . 'Seiten gilt nicht; eine genannte veröffentlichte, private oder geplante Seite ohne Bearbeitungsrecht '
. 'Aufruf (forbidden, blocked_ids), eine genannte andere Seite ohne ' . 'verweigert den ganzen Aufruf (forbidden, blocked_ids), eine genannte andere Seite ohne '
. 'Bearbeitungsrecht steht in skipped. Danach kann lit/divi-presets-delete ' . 'Bearbeitungsrecht steht in skipped (bei mehr als 2000 Live-Fundstellen entfällt die Vorabprüfung, '
. 'das Preset löschen. ' . self::VARIABLES; . 'dann auch eine genannte Live-Seite). Danach kann lit/divi-presets-delete das Preset löschen. '
. self::VARIABLES;
} }
public function inputSchema(): array public function inputSchema(): array
@@ -56,11 +56,12 @@ final class DiviPresetsAssignAbility implements Ability
. 'und/oder Gruppen-Presets (group_presets) zu. Filter: post_ids, only_without_preset oder ' . 'und/oder Gruppen-Presets (group_presets) zu. Filter: post_ids, only_without_preset oder '
. 'only_with_preset; clear_overrides: true entfernt lokale Werte, die das Preset überdecken. Zuerst ' . 'only_with_preset; clear_overrides: true entfernt lokale Werte, die das Preset überdecken. Zuerst '
. 'Probelauf (betroffene Seiten und Module), nach Rückfrage beim Nutzer confirm: true; je Aufruf höchstens ' . 'Probelauf (betroffene Seiten und Module), nach Rückfrage beim Nutzer confirm: true; je Aufruf höchstens '
. '50 Seiten, jede mit Revision; remaining nennt den Rest. Mit post_ids können nur die genannten Seiten ' . PageRewriter::PAGE_LIMIT . ' Seiten, jede mit Revision; remaining nennt den Rest. Mit post_ids '
. 'das Schreiben blockieren und die Obergrenze für sehr viele Seiten gilt nicht; eine genannte ' . 'können nur die genannten Seiten das Schreiben blockieren und die Obergrenze für sehr viele Seiten '
. 'veröffentlichte, private oder geplante Seite ohne Bearbeitungsrecht verweigert den ganzen Aufruf ' . 'gilt nicht; eine genannte veröffentlichte, private oder geplante Seite ohne Bearbeitungsrecht '
. '(forbidden, blocked_ids), eine genannte andere Seite ohne ' . 'verweigert den ganzen Aufruf (forbidden, blocked_ids), eine genannte andere Seite ohne '
. 'Bearbeitungsrecht steht in skipped. Verweise entfernen: lit/divi-design-detach.'; . 'Bearbeitungsrecht steht in skipped (bei mehr als 2000 Live-Fundstellen entfällt die Vorabprüfung, '
. 'dann auch eine genannte Live-Seite). Verweise entfernen: lit/divi-design-detach.';
} }
public function inputSchema(): array public function inputSchema(): array