diff --git a/docs/superpowers/notes/2026-09-28-etappe-4-entscheidungen-entwurf.md b/docs/superpowers/notes/2026-09-28-etappe-4-entscheidungen-entwurf.md index 8578c87..f515bc9 100644 --- a/docs/superpowers/notes/2026-09-28-etappe-4-entscheidungen-entwurf.md +++ b/docs/superpowers/notes/2026-09-28-etappe-4-entscheidungen-entwurf.md @@ -36,3 +36,27 @@ Ansätze vorschlagen → Entwurf abschnittsweise freigeben → Spec schreiben - Tools: lit/divi-preset-get, lit/divi-presets-set, lit/divi-presets-delete, lit/divi-design-snapshots, lit/divi-design-restore (alle indirekt). - Schreiben über die Schrittfolge von `GlobalPresetController::sync` (Mirror `preset-sync`). - Offen für 4b: Fundstellen von Standard-Gruppen-Presets (Gruppenliste je Modul), lit/divi-design-detach. + +## Offene Kleinpunkte aus 4a (Reviews, nicht merge-relevant) +- Task 1: minor (deferred): Nachtrag verweist nicht auf §7 Punkt 4 („strenger als Divi“ gilt für Presets nicht mehr) +- Task 2: minor (deferred): PresetBook::with() erzwingt kein id-Feld +- Task 2: minor (deferred): rein numerische IDs/Namen werden int-Keys → TypeError bei new PresetScope (scopeOf/nestedUsers/toRest); (string)-Cast +- Task 2: minor (deferred): PresetScope-Regex lehnt "_" ab +- Task 3: minor (deferred): Standardwechsel X→Y meldet nur default_set Y, nicht default_cleared X +- Task 3: minor (deferred): Testabdeckung dünn (Gruppen, Standardwechsel, name-only) +- Task 4: minor (deferred): attachLog ignoriert fehlgeschlagenes update_option; RMW ohne Lock; Testlücken (Grenze MAX_BYTES, attachLog null/unbekannt) +- Task 5: minor (deferred): savePresets bereinigt bei mayRemove beide Arten (Obermenge von Divi), ACTION_DELETE_GROUP ungenutzt, Docblock erwähnt es nicht +- Task 5: minor (deferred): keine Unit-Tests für WP_Error→RuntimeException und Cleanup-Pfad (Integration in Task 14) +- Task 6: minor (deferred): UsageQuery-Vertrag „bereits vorbereitet“ nur Konvention; kein reportFor()-Test +- Task 7: minor (deferred): leere ID → LIKE %% (teuer); Testlücken _initial/[""]/Legacy-String beim Standard +- Task 8: minor (deferred): kein RED-Lauf dokumentiert (Tests und Code in einem Schritt) +- Task 8: minor (deferred): kein Test für DiviLocked aus area->write(); Read-back-Test prüft Rollback nur lose; kein Test für fehlende design_rev +- Task 9: minor (deferred): META_KEYS (modulePreset, groupPreset, globalModule, localAttrs) im Post-Check unsichtbar – heute nicht erreichbar; explizite Ablehnung als Defense in Depth +- Task 10: minor (deferred): Scope-Fehler immer unter fields.module; fehlendes preset → not_found statt validation_failed +- Task 11: minor (deferred): Test „nichts geschrieben“ prüft nicht, dass items[0] fehlerfrei ist +- Task 12: minor (deferred): in_use-Antwort ohne affected_count/hidden_count; Testlücken (verschachtelt+mitgelöscht, mehrere Items, Rechte) +- Task 13: minor (deferred): kein Paginierungs-/next_cursor-Test; Restore-Rechte nicht im Ability-Test +- Task 14: minor (deferred): Guide nennt Exklusivität name/rename und Namensgrenzen nicht ausdrücklich; Smoke hinterlässt Snapshots im SnapshotStore; Restore-Check vergleicht nicht den ganzen Bestand +- DesignLock: zwei gleichzeitige Übernahmen einer veralteten Sperre möglich (sehr kleines Fenster); Schreibvorgang > 120 s kann Sperre verlieren +- Verwaister @param-Docblock in DiviPresetsDeleteAbility +- Smoke divi-presets-smoke.sh läuft nur mit deaktivierten Plugins postlos (Monolog 2) und asynclistry (Deprecated-Ausgabe)