Jan-Niclas Loosen and Claude Sonnet 5.5
39a5782562
feat: ColorDiff beschreibt Farbänderungen (angelegt, geändert, deaktiviert, aktiviert) samt Zusammenfassung
...
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com >
2026-10-19 13:58:00 +02:00
Jan-Niclas Loosen and Claude Sonnet 5.5
2428801bc9
feat: ColorBook als reiner Farbbestand mit Auflösung nach ID/Alias/Label, Verweisen, Zyklusprüfung und Änderungsmenge
...
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com >
2026-10-19 13:57:23 +02:00
Jan-Niclas Loosen and Claude Sonnet 5.5
fb46078d42
feat: ColorValue prüft Farbwerte (Hex, rgb/hsl, Schlüsselwort) und die relativen Einstellungen von Farbverweisen
...
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com >
2026-10-19 13:56:34 +02:00
Jan-Niclas Loosen and Claude Sonnet 5.5
9b7c3c1d3b
feat: Fähigkeiten color-write/variable-write; GlobalColorsAdapter und GlobalVariablesAdapter (Manifest, Signatur-Referenzen) und DesignRights::colors()/variables()
...
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com >
2026-10-19 13:55:09 +02:00
Jan-Niclas Loosen and Claude Opus 5.5
d0d3488df8
refactor: Übergangs-API der Gesamtsperre entfernt (assertWritable, writable, refusal, writeFeatures, released); DiviLocked verlangt die gesperrten Fähigkeiten, Tests bauen Zustände über ReleaseMatrices
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-18 22:53:00 +02:00
Jan-Niclas Loosen and Claude Opus 5.5
e387d8d29e
feat: Divi-Adapter sperren je Fähigkeit – ReleaseGate::feature/assertFeature(s), DiviLocked und Ablehnung nennen die betroffenen Fähigkeiten (D6), DiviSaver prüft Seiten schreiben und die Fähigkeit des Speicherbereichs (D5), DesignArea::feature; Test-Standard alle Fähigkeiten freigegeben
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-18 22:10:41 +02:00
Jan-Niclas Loosen and Claude Sonnet 5.5
06398242d6
fix: detach meldet nicht „alles erledigt“, solange nicht lesbare Fundstellen Verweise enthalten können; PageRewriter::apply liefert hidden_count; Tests für Sperre durch nicht lesbare Seiten und post_ids über der Obergrenze
...
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com >
2026-10-18 17:38:01 +02:00
Jan-Niclas Loosen and Claude Sonnet 5.5
b805ed64dd
fix: lit/divi-presets-assign verweigert leeren Text als Preset (Eingabe und Gruppen); Stapelgrenze und Preset-Schema aus PresetAssignment
...
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com >
2026-10-18 17:36:45 +02:00
Jan-Niclas Loosen and Claude Sonnet 5.5
6b5de199f9
fix: Texte zu post_ids und Bearbeitungsrecht nennen forbidden für genannte Live-Seiten; Test für genannte blockierte Live-Seite; Smoke prüft Seiten-IDs numerisch
...
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com >
2026-10-18 17:28:19 +02:00
Jan-Niclas Loosen and Claude Opus 5.5
5e56cc38f0
fix: lit/divi-design-detach nennt Snapshot und diff auch, wenn die erste Seite nach dem Preset-Schritt scheitert; Tests für Sperre, Markup und fehlende design_rev
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-18 17:15:40 +02:00
Jan-Niclas Loosen and Claude Opus 5.5
607e0a21ca
feat: lit/divi-design-detach – Preset-Verweise aus Seiten und verschachtelten Presets entfernen
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-18 17:09:49 +02:00
Jan-Niclas Loosen and Claude Sonnet 5.5
d4f235ae5e
feat: lit/divi-presets-assign – Presets site-weit zuweisen mit Probelauf und höchstens 50 Seiten je Aufruf
...
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com >
2026-10-18 17:07:04 +02:00
Jan-Niclas Loosen and Claude Opus 5.5
65a207488e
fix: Umschreiber nennt Bibliotheks-IDs globaler Instanzen nur bei sichtbaren Bibliotheks-IDs (P13)
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-18 17:04:30 +02:00
Jan-Niclas Loosen and Claude Opus 5.5
d7a991d130
feat: Seiten-Umschreiber für site-weite Preset-Änderungen (Probelauf, höchstens 50 Seiten, Revision und Protokoll je Seite)
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-18 16:59:39 +02:00
Jan-Niclas Loosen and Claude Sonnet 5.5
d36e8286e8
feat: Umschreib-Strategien für Preset-Zuweisung und -Entkopplung (TreeRewrite, AssignRewrite, DetachRewrite)
...
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com >
2026-10-18 16:57:33 +02:00
Jan-Niclas Loosen and Claude Sonnet 5.5
763d765660
feat: Fundstellen aller Module eines Typs, Standard-Gruppen-Presets in der Fundstellensuche (ModuleUsageQuery)
...
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com >
2026-10-18 16:55:54 +02:00
Jan-Niclas Loosen and Claude Sonnet 5.5
fafa140546
feat: GroupKeys und PresetAssignment – Preset-Stapel und Gruppen-Presets über eine Engstelle
...
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com >
2026-10-18 16:45:29 +02:00
Jan-Niclas Loosen and Claude Sonnet 5.5
6546e23e7f
feat: PresetOverrides – lokale Werte finden, beschreiben und entfernen, die Presets überdecken
...
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com >
2026-10-18 16:43:39 +02:00
Jan-Niclas Loosen and Claude Opus 5.5
d5fd1642b8
fix: PresetComposer liest nur den von der Ability bereinigten Namen
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-16 18:10:47 +02:00
Jan-Niclas Loosen and Claude Opus 5.5
3d760113ec
fix: Standard-Preset löschen – nur ausdrückliche Verweise blockieren, implizite Nutzung im Probelauf
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-16 18:10:11 +02:00
Jan-Niclas Loosen and Claude Opus 5.5
75714429be
fix: Preset-Änderungen ohne unfiltered_html ablehnen, wenn Divi HTML/CSS anderer Presets entfernen würde
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-16 18:09:31 +02:00
Jan-Niclas Loosen and Claude Opus 5.5
048cd9353d
fix: DesignLock gegen parallele Bestätigungen; confirm ohne design_rev ist ein Eingabefehler
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-16 18:06:52 +02:00
Jan-Niclas Loosen and Claude Opus 5.5
fc8ffeba9e
fix: DesignArea mit restore() fürs Zurückschreiben und differences() für bereinigte Werte
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-16 18:04:34 +02:00
Jan-Niclas Loosen and Claude Opus 5.5
60c31f9697
fix: Snapshot-Option je Bereich auf 8 MB begrenzen, älteste Einträge fallen heraus
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-16 18:03:49 +02:00
Jan-Niclas Loosen and Claude Opus 5.5
fe8a01f878
fix: Sicherheitstest für Redakteure ohne unfiltered_html prüft einen echten Builder-Pfad
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-16 18:03:21 +02:00
Jan-Niclas Loosen and Claude Sonnet 5.5
327f8d2d35
feat: lit/divi-design-snapshots und lit/divi-design-restore (Bereich presets)
...
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com >
2026-10-16 17:52:20 +02:00
Jan-Niclas Loosen and Claude Sonnet 5.5
2e8f723b01
feat: lit/divi-presets-delete – unbenutzte Presets löschen
...
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com >
2026-10-16 17:50:29 +02:00
Jan-Niclas Loosen and Claude Sonnet 5.5
25720ad086
fix: lit/divi-presets-set – name und rename schließen sich aus, Namensprüfung vorziehen
...
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com >
2026-10-16 17:48:43 +02:00
Jan-Niclas Loosen and Claude Sonnet 5.5
b3c3e69a53
feat: lit/divi-presets-set – Presets anlegen und ändern mit Probelauf und Snapshot
...
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com >
2026-10-16 17:47:16 +02:00
Jan-Niclas Loosen and Claude Sonnet 5.5
341782a34f
feat: lit/divi-preset-get – Preset mit Einstellungen und Fundstellen lesen
...
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com >
2026-10-16 17:44:09 +02:00
Jan-Niclas Loosen and Claude Sonnet 5.5
cc20100cbc
feat: PresetComposer – Preset aus Kurz-/Vollform, Modul und Gruppen-Presets
...
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com >
2026-10-16 17:42:18 +02:00
Jan-Niclas Loosen and Claude Sonnet 5.5
bb4d9b3baf
feat: Änderungs-Pipeline des Designsystems (Probelauf, design_rev, Snapshot, Rollback) und Bereich presets
...
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com >
2026-10-16 17:39:58 +02:00
Jan-Niclas Loosen and Claude Haiku 5.5
bfd3840eb1
feat: Fundstellen eines Presets (PresetUsageMatcher, PresetUsageQuery)
...
Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com >
2026-10-16 17:38:22 +02:00
Jan-Niclas Loosen and Claude Sonnet 5.5
3fe83e39d3
feat: DesignSystemWriter – Presets über Divis Sync-Ablauf schreiben (Mirror preset-sync)
...
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com >
2026-10-16 17:34:49 +02:00
Jan-Niclas Loosen and Claude Haiku 5.5
6ee8f9258a
fix: SnapshotStore verweigert nicht kodierbare Snapshots
...
Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com >
2026-10-16 17:33:03 +02:00
Jan-Niclas Loosen and Claude Haiku 5.5
5ba52b98b3
feat: SnapshotStore – Snapshots des Designsystems je Bereich
...
Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com >
2026-10-16 17:31:48 +02:00
Jan-Niclas Loosen and Claude Haiku 5.5
388b52ea76
feat: PresetDiff – Unterschied zweier Preset-Bestände für den Probelauf
...
Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com >
2026-10-16 17:29:51 +02:00
Jan-Niclas Loosen and Claude Haiku 5.5
578ccba118
feat: PresetScope und PresetBook – Preset-Bestand im Divi-Speicherformat
...
Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com >
2026-10-16 17:27:27 +02:00
janniclas.loosen and Claude Opus 5.5
1a215fd7bf
refactor: Divi design adapter, logo lookup moves out of media
...
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com >
2026-09-30 01:31:23 +02:00
janniclas.loosen and Claude Opus 5.5
031f01451b
fix: note the library-list scan cap; preset-cap note only with presets (M-11, M-12)
...
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com >
2026-09-27 04:19:05 +02:00
janniclas.loosen and Claude Opus 5.5
a3a807051f
feat: design-system filters and global module ids in node-get/outline (S19)
...
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01At3V6SjwbMe6eMzVGW3Hs7
2026-09-27 00:44:58 +02:00
janniclas.loosen and Claude Opus 5.5
203d14a2f9
refactor: one VariableRef per composition, design lookups in DesignSystem (H3)
...
- DiviComposition::references() builds the one VariableRef with the entry's
live map (S22/S31) and passes it to AttrWriter; Placeholders only needs the
design system now, Placeholders::references() is gone (no reach-through).
- DesignSystem::colorIdFor()/variableFor() replace the dead colorId()/variable()
and carry Placeholders' lookup incl. the S13a ambiguity check (byLabel moved,
messages unchanged); isColorVariable() decides color vs content for {{var:}}.
- DesignSystem::colorReferenceIds() (VariableRef color names) and
contentVariableIds() (DynamicContentRules design names) replace the two
inline computations; same lists, same order.
Tests: fixtures/tests get the VariableRef from ComposeFixture::references() or
build it with the map; DesignSystemTest uses the new lookups (+2 tests).
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01At3V6SjwbMe6eMzVGW3Hs7
2026-09-26 18:07:56 +02:00
janniclas.loosen and Claude Opus 5.5
60290c85a5
test: AssertsToolErrors helper for tool error assertions (T3)
...
tests/Support/AssertsToolErrors (used by TestCase): assertToolError($result, code)
checks the WP_Error code lit_<code> and the code of the client JSON and returns the
payload; clientError() decodes the payload; errorFields() returns the fields and
asserts they exist. Replaces the private clientError() decoders of
DiviWriteAbilitiesTest/DiviReplaceTextAbilityTest, 216 single-line
assertSame('lit_…', …->get_error_code()) assertions, 24 get_error_data()['fields']
digs and two json_decode(message) reads. ErrorsTest keeps json_decode: it tests
the format itself. Tests 1404 -> 1409 (AssertsToolErrorsTest); no test has fewer
assertions.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com >
2026-09-26 17:55:35 +02:00
janniclas.loosen and Claude Opus 5.5
3d96a41366
test: shared Divi fixtures in tests/Support (T1)
...
- DiviFixtures: markup(), givenPost(), schema(), designSystem(), catalog(),
dynamicContentRegistry(), maliciousRefs() - moved verbatim out of
DiviPageLoaderTest, DesignSystemTest, ModuleCatalogTest, DynamicContentMapTest
and VariableRefTest (its malicious() provider now returns maliciousRefs()).
- ComposeFixture moves to tests/Support.
- DiviWriterFixture: modules(), designReader(), composition(), a recording saver(),
log() and writer(&$saved, &$failures, unfiltered, loader) for the five tests that
wired the Divi write stack by hand.
No test cases or assertions changed (1397 / 5834).
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com >
2026-09-26 17:47:11 +02:00
janniclas.loosen and Claude Opus 5.5
8688a02402
fix: Task 3 review round 1 - strip control chars before the sanitizer (S32a), S34 minors
...
Control characters now go on the raw value in AttrWriter::cleanNode and
VariableRef::setting; after the sanitizer only rejection remains ('<' + VT/FF
no longer turns into a tag). VALUE_KEY anchored with D, exact column-width
fractions, nested rows in columns, specialty columns refused, fullwidth by
catalog category, preset ambiguity in DesignSystem::modulePresetId().
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01At3V6SjwbMe6eMzVGW3Hs7
2026-09-26 14:26:18 +02:00
janniclas.loosen and Claude Opus 5.5
a54a337e0b
feat: read the Divi design system live – lit/divi-design-system
...
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01At3V6SjwbMe6eMzVGW3Hs7
2026-09-26 12:06:15 +02:00