chore: Version 0.7.0 (Etappe 4); Spec und Notizen nachgeführt
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 5.5
parent
1fdcb2e075
commit
b91c356a28
@@ -120,3 +120,44 @@ Belege: `2026-10-19-etappe-4d-divi-recherche.md`; Formate-Nachtrag „Etappe 4d
|
||||
- Smoke-Skripte: fehlende `file_exists`-Prüfung in Schritt 7, Format-Grep im Probelauf vakuos (stattdessen `sha256`/`bytes` prüfen), Namenskonflikt prüft nicht auf `conflict`, `'none'` nicht isoliert, kein Zurücklesen von `body_font`, EXIT-Trap stellt ganz `et_divi` wieder her (Admin-Änderungen während des Laufs gehen verloren) und räumt Snapshots sowie Dateien fälschlich akzeptierter Schriften nicht auf, Sentinel-Prüfung vakuos, `restore()` verbirgt stderr.
|
||||
- Protokoll: `src/Admin/LogObjects.php` kennt den Objekttyp `divi_font` nicht (Anzeige als Code).
|
||||
- Kleinkram: Reihenfolge der `use`-Blöcke; `DiviLocked`-Rethrow setzt voraus, dass die Sperre vor jedem Schreiben greift.
|
||||
|
||||
## Etappe 4e (Plan 2026-10-19-etappe-4e-schleifen-guides-audit.md)
|
||||
|
||||
Belege: `2026-10-19-etappe-4e-recherche-schleifen.md` (rekonstruiert, siehe dort), Audit `2026-10-19-etappe-4e-security-audit.md` (Status nach der Fix-Welle). Die Rulings amendieren Spec §9.
|
||||
|
||||
- **X1:** Der Schleifen-Kontext ist der des nächsten Vorfahren-oder-selbst mit `loop.desktop.value.enable === "on"`; `queryType` fehlt → `post_types`; die innerste Schleife gilt.
|
||||
- **X2:** Arten `post`, `term`, `user`, `menu`; die Art einer Option folgt der Divi-Gruppe, die Meta-Schlüssel-Optionen dem Namen; gespeichert wird der Array-Schlüssel.
|
||||
- **X3:** `VariableRef` und `DynamicContentRules` bekommen einen `LoopScope`; Insert, Update und Move prüfen im Kontext des Ziels, Move warnt statt abzulehnen (A11); `lit-content-create` hat nie einen Kontext.
|
||||
- **X4:** Kurzform `{{loop:<option>}}` über die Tabelle `LOOP` in `Placeholders`.
|
||||
- **X5:** Neue Meldungen („braucht eine Divi-Schleife“, „passt nicht zur Schleife … (Typ: …)“); Ruling S36 abgelöst.
|
||||
- **X6:** `lit/divi-dynamic-sources` mit `post_id` + `node` nennt die zur Schleife des Knotens passenden Quellen.
|
||||
- **X7:** Grenzen statt Lösung: Schleifen über `attrs` schaltbar, globale Module ohne Kontext, Kopieren mit `unfiltered_html`, Preset-Schleifen unerkannt, ACF-Wiederholungsfelder nicht unterstützt.
|
||||
- **X8:** Guides ohne Prompts: Ablauf „Corporate Design übernehmen“ in `workflows.md`, Design-Tools und Fehlercodes in `divi-design-system.md`/`overview.md`, Loop-Regeln in `divi-placeholders.md`/`divi-shortform.md`.
|
||||
- **X9:** Unabhängiger Security-Audit (0 kritisch, 0 hoch, 1 mittel, 9 niedrig, 10 Info); Fix-Welle für M1, L1 (Option B), L2, L4–L8 und DNS-Rebinding.
|
||||
- **X10:** Version 0.6.1 → 0.7.0, kein Tag, kein Release.
|
||||
- **Zusätze aus dem Audit:** Kettenregel für `_meta_key_`-Optionen (M1), `queryType` wie `sanitize_key` mit Aliasen `terms`/`users` (L2), Rechteprüfung für Schleifen-Einstellungen (L1 B: `list_users`, `read_private_posts`), Restore berechnet Fundstellen (L4), ein Lock für Farben und Theme-Optionen, atomarer `DesignLock` (L5, L6), `CURLOPT_RESOLVE` gegen DNS-Rebinding und Abruf nur mit cURL (L8).
|
||||
|
||||
### Folgearbeit nach Etappe 4
|
||||
|
||||
Aus dem Audit (nicht behoben):
|
||||
- **L3:** Globale Instanzen und Kopien (`unfiltered_html`: `lit/library-insert` im Kopiermodus, `lit/divi-node-copy`) tragen `loop_*`-Inhalt über Schleifen-Arten ohne Prüfung oder Warnung; braucht einen eigenen Plan.
|
||||
- **L9:** Der Seiten-Umschreiber parst jeden Kandidaten bei jedem Probelauf und Confirm, ohne Cap für Entwürfe (Administrator-Niveau, Wirkung endet mit dem Request).
|
||||
- **L8-Rest:** Bei https mit einem cURL ohne SSL kann Requests auf fsockopen ausweichen (selten, bewusst belassen).
|
||||
- **I1–I10:** I1 Preset-Detach ohne Marker-Prüfung der Affixe; I2 abgelöster Variablenwert ohne Bereinigung für den Feldtyp; I3 `from_node` mit `unfiltered_html` kopiert `loop_*` ungeprüft in Presets; I4 Lese-Tools prüfen Rechte nur in `permission()`; I5 Shortcodes und Bedingungen in Term-/Benutzer-/Menü-Schleifen laufen gegen den Beitrag mit der Term-/Benutzer-ID; I6 Font-Probelauf verrät private DNS-Auflösung; I7 Font-Confirm ist nicht an die Probelauf-SHA-256 gebunden; I8 Font-Download bis ca. 120 s je Aufruf, Temp-Reste bei Abbruch; I9 Lost Update auf `et_uploaded_fonts`; I10 `numbers`-Variablen akzeptieren `url(https://…)`.
|
||||
- **Z1:** Schleifen und `loop_*`-Verweise aus Presets erkennt die Baumprüfung nicht (fail closed; auf der Website ohne Wirkung, weil Divi die Schleife aus dem rohen Dokument liest).
|
||||
|
||||
Übernommen aus 4d und früher:
|
||||
- Schema-Fehler-Form projektweit (Adapter-Eingabeschema statt `validation_failed`-Feldpfade).
|
||||
- Schriftnamen in Preset- und Modul-Attributen prüfen; `lit/divi-fonts-list`/Schriftsuche; Entfernen hochgeladener Schriften; Format `eot`.
|
||||
- Rev-Helfer der Book-Klassen vereinheitlichen.
|
||||
- `dryRun()`/`installed()` aus `DiviFontsUploadAbility::upload()` herauslösen.
|
||||
- sha256-Pin beim Upload-`confirm` (`expected_sha256`).
|
||||
- Weitere Minor-Punkte aus den Abschnitten „Offene Kleinpunkte“ (4a, 4d) und unten (4e).
|
||||
|
||||
### Offene Kleinpunkte aus 4e (Ledger, nicht behoben)
|
||||
- `LoopScope`/`LoopContext`: `LOOP`-Tabelle mit 31 Identitätszuordnungen (Stil); Lücken bei Tests (int/bool `queryType`, Groß-/Kleinschreibung, Wurzelknoten opak, kein Test für den Standard-Konstruktor von `Placeholders`).
|
||||
- `DynamicContentMapTest` prüft nur „Schleifen“ statt „braucht eine Divi-Schleife“; die Fehlanpassungsmatrix hat nicht alle Zeilen (Benutzer-Meta in Term-/Menü-Schleife, `loop_product_*` in Nicht-Beitrags-Schleifen); ein nicht unterstützter `queryType` erscheint roh im Fehlertext; `VariableRefTest` akzeptiert zwei Meldungen.
|
||||
- Insert: Meldung „braucht eine Divi-Schleife“, wenn derselbe Aufruf die Schleife am Knoten setzt, dessen Elternteil keine hat; doppelter Warntext, wenn Vorfahr und Nachfahr zugleich geändert werden; Wechsel von keiner zu nicht unterstützter Schleife ohne Warnung; Cache-Schlüssel `''` für „keine“ und „nicht unterstützt“ geteilt; Wortlaut der Move-Warnung „Divi zeigt sie dort leer“ für nicht unterstützte Ziele.
|
||||
- Tests: `testInLoopChecksLoopContentAgainstItsScope` und `testLoopContentBelowANewLoopContainerIsRefused` zu schwach; Obfuskations-Datenprovider prüft nur `problems !== ''`; kein Test „keine Schleifen-Warnung bei einfachem Update in der Schleife“; Testzeilen über 120 Zeichen (Tests außerhalb des Lints).
|
||||
- `lit/divi-dynamic-sources`: Bibliothekseinträge und Theme-Builder-Layouts nicht erreichbar (Docblock verspricht mehr); `page()` lädt zweimal; tote Fixture-Einträge in `withLoopPage`.
|
||||
- Audit-Spur: Innerhalb einer Schleife reicht Divi `loop_id`/`loop_query_type`/`loop_object` an jede Inhaltsvariable; Resolver von Nicht-Loop-Optionen, die `loop_id` nutzen, sind nicht einzeln nachverfolgt (I5 deckt Shortcodes ab).
|
||||
|
||||
Reference in New Issue
Block a user