Commit Graph
258 Commits
Author SHA1 Message Date
Jan-Niclas LoosenandClaude 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 LoosenandClaude 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 LoosenandClaude 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 LoosenandClaude 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 LoosenandClaude 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 LoosenandClaude 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 LoosenandClaude 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 LoosenandClaude 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 LoosenandClaude 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 LoosenandClaude 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 LoosenandClaude 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 LoosenandClaude 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 LoosenandClaude Sonnet 5.5 454116851e refactor: GlobalUsages sucht über UsageQuery – Bibliothekssuche als LibraryUsageQuery
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-16 17:36:21 +02:00
Jan-Niclas LoosenandClaude 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 LoosenandClaude 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 LoosenandClaude 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 LoosenandClaude 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 LoosenandClaude 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
Jan-Niclas LoosenandClaude Fable 5.1 1b73f0652a fix: Admin-UX aus dem Review – Live-Gruppenfeedback, Protokollfilter, Divi-Hinweis, Rollen-Rückfrage
- Tools: „Ganze Gruppe“ und „Nur lesen“ wirken sofort auf die Zeilen
  (Option „wie Gruppe (…)“, gesperrte Selects mit Hinweis), der Server
  bleibt die Wahrheit; Markup trägt die nötigen data-Attribute.
- Protokoll: Filter in eigenem Block über der Tabelle (Core blendet
  .tablenav .actions auf Telefonen aus); „Protokoll leeren“ nur bei
  Einträgen, rechtsbündig, mit Gesamtzahl über ChangeLog::count().
- Divi: Beschreibung unter „Prüfung starten“, Button primär solange
  ungetestet ohne frischen Bericht.
- Zugriff: Rückfrage vor dem Speichern ohne Rolle oder ohne eigene Rolle.
- Verbindung: HTTPS-Hinweis nicht doppelt neben der Statusliste.
- Mobil: breitere Einstellungs-Spalte im Tools-Reiter.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 16:39:44 +02:00
janniclas.loosenandClaude Opus 5.5 43c0a78374 fix: Divi-Reiter ohne Divi, Zustandstexte, Schreibsperren und Aufräum-Filter aus der Abschlussprüfung
Behebt die fünf Befunde der Abschlussprüfung von divi-absicherung: Divi-Reiter ohne aktives Divi zeigt nur
noch einen Hinweis (kein Status, keine Prüfung, kein Aufräumen), Zustandstexte werden erst beim Rendern
übersetzt, DiviPages::setFlags() und DiviThemeBuilder::liveId(true) prüfen jetzt selbst die
Freigabesperre, WriteProbe::removeOrphans() löscht nur noch Entwürfe mit passendem Titel, und
wp lit-mcp divi-check --update-reference verweigert sich ohne Entwicklungskopie, bevor irgendetwas
geschrieben wird.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-30 03:33:16 +02:00
janniclas.loosenandClaude Opus 5.5 4b619d12e9 fix: write reference sources before fingerprints.json, atomic on failure
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-30 02:59:27 +02:00
janniclas.loosenandClaude Opus 5.5 ed806a1cc8 feat: wp lit-mcp divi-check with diff and reference update
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-30 02:52:17 +02:00
janniclas.loosenandClaude Opus 5.5 b441febd81 fix: atomic Divi check lock, failed-check notice, test fixes
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-30 02:45:50 +02:00
janniclas.loosenandClaude Opus 5.5 6113e5ad5a feat: Divi tab with REST check, release and withdrawal
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-30 02:39:21 +02:00
janniclas.loosenandClaude Opus 5.5 47040aa43d feat: admin check steps with throwaway write test and reports
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-30 02:21:09 +02:00
janniclas.loosenandClaude Opus 5.5 c6a1996be6 feat: adapter-level Divi release lock, content-create and site status
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-30 02:04:49 +02:00
janniclas.loosenandClaude Opus 5.5 adfe0adfc2 feat: central Divi release lock for the Divi tools
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-30 01:54:36 +02:00
janniclas.loosenandClaude Opus 5.5 cf3c5dfe76 feat: Divi release status, store, resolver and gate
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-30 01:46:05 +02:00
janniclas.loosenandClaude Opus 5.5 6b93df94c3 feat: manifest checks, Divi compatibility from manifests, reference fingerprints
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-30 01:37:51 +02:00
janniclas.loosenandClaude 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.loosenandClaude Opus 5.5 7fc41bc2ac refactor: Theme Builder adapter manifest with three mirrors
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-30 01:25:39 +02:00
janniclas.loosenandClaude Opus 5.5 e972898f52 refactor: Divi library adapters with manifest and submit-layout mirror
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-30 01:16:23 +02:00
janniclas.loosenandClaude Opus 5.5 fed77b0584 refactor: Divi pages adapter replaces DiviFlags
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-30 01:08:08 +02:00
janniclas.loosenandClaude Opus 5.5 fc7a84d239 refactor: Divi catalog adapter with manifest
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-30 00:54:48 +02:00
janniclas.loosenandClaude Sonnet 5 5e6d5ff3e1 feat: Divi manifests, adapter register and boundary test
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-30 00:46:16 +02:00
janniclas.loosenandClaude Haiku 4.5 905bb8c2f3 feat: fingerprint Divi functions from source tokens
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-09-30 00:39:22 +02:00
janniclas.loosenandClaude Opus 5.5 a8afa37208 fix: make-global keeps the backup sentence on a failure on page 2+ (ruling P14)
failedOn() replaced the hint for a failure after earlier pages were
replaced, so the "Sicherung X liegt im Papierkorb" sentence of the failed
page's backup was lost. The hint now leads with it when a backup exists.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01At3V6SjwbMe6eMzVGW3Hs7
2026-09-27 23:25:53 +02:00
janniclas.loosenandClaude Opus 5.5 771f3794a0 fix: failed library and layout saves name the revision screen (audit L3)
A failed save of a library entry or Theme Builder layout now carries
restore_url when a revision exists; a partial write's hint points to the
WordPress revision screen and lit-divi-outline instead of
lit/revisions-list and lit/revision-restore, which answer not found for
these types. Pages keep the default hint.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01At3V6SjwbMe6eMzVGW3Hs7
2026-09-27 23:25:16 +02:00
janniclas.loosenandClaude Opus 5.5 6288acf0e6 perf: DynamicFields reads each post type's fields once per check (review M-12 b)
reason() and note() run per key and type of a body check; they now share one
offered() result per post type, so the default storage callback loads each
pod once instead of per call.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01At3V6SjwbMe6eMzVGW3Hs7
2026-09-27 23:12:14 +02:00
janniclas.loosenandClaude Opus 5.5 14bc954ecc fix: Theme Builder minors of the final review (M-4, M-5, M-6, M-9, M-10, M-11, M-12 c)
- tb-list applies the detached limit after the edit filter (reads up to 500
  IDs) and notes when more are not listed (M-4); an invalid template_id is
  invalid input, shared with ThemeBuilderAccess::template() (M-5).
- Templates carry their status; tb-list notes that a live template outside
  publish (e.g. trashed) can only be switched off (M-10).
- changeableTemplate() refuses without canUse() first, like tb-list and
  tb-create-template; the layout/template refusal difference is documented
  (M-9).
- tb-create-template reads the default template from editableLiveTemplates()
  (M-11); the condition-ID character set (role slugs) is documented (M-6);
  tb-assign documents that a failed reattach keeps Divi's unused marks
  removed (M-12 c).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01At3V6SjwbMe6eMzVGW3Hs7
2026-09-27 23:12:14 +02:00
janniclas.loosenandClaude Opus 5.5 e7bbe1e9d7 fix: find-similar marks replaceable matches and names excluded types (review M-3, M-7, M-8)
Every match carries replaceable: true only when it is identical and in a
page or post, the scope lit/library-make-global replaces; the description
and the guide say so. An excluded post type is answered like any
unavailable one, by its name (PostGuard::unavailableType()), and the
excluded list takes the Theme Builder types from DiviThemeBuilder::postTypes().

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01At3V6SjwbMe6eMzVGW3Hs7
2026-09-27 23:09:13 +02:00
janniclas.loosenandClaude Opus 5.5 5290a9d81d refactor: one site-wide Divi cache clear and one compatibility row (review M-1, M-2)
DiviSaver's site-wide scopes and the Theme Builder tools now share
DiviThemeBuilder::clearSiteCaches(), which clears the Theme Builder cache
even when ET_Core_PageResource is missing. lit-site-status no longer lists
et_theme_builder_clear_wp_cache twice: the Theme Builder functions row
covers it, and the post-type row uses DiviThemeBuilder::postTypes().

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01At3V6SjwbMe6eMzVGW3Hs7
2026-09-27 23:07:57 +02:00
janniclas.loosenandClaude Opus 5.5 e64d32b1f1 fix: tb-assign reattaches only templates no Theme Builder post lists (audit L4)
"Detached" now means for lit/tb-assign what lit/tb-list shows as detached:
DiviThemeBuilder::isListedAnywhere() looks for any _et_template row (live,
draft or Theme Builder library post). A template another Theme Builder post
lists is refused with or without reattach; nothing is written.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01At3V6SjwbMe6eMzVGW3Hs7
2026-09-27 23:06:35 +02:00
janniclas.loosenandClaude Opus 5.5 dcae2d4b91 fix: name the WordPress revision screen for library and layout revisions (audit L3)
lit/revision-restore takes only content types, so a write to a library entry
or a Theme Builder layout now answers with restore_url (wp-admin
revision.php for its revision_id), also per page in lit/divi-replace-text.
The guides and readme no longer present lit/revision-restore as the way back
for these types.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01At3V6SjwbMe6eMzVGW3Hs7
2026-09-27 23:05:05 +02:00
janniclas.loosenandClaude Opus 5.5 79f2fdbda6 test: fix the P9/P14 backup wording of every VisibleEdits caller (ruling Q17 M3)
VisibleEditsTest asserts the exact refusal messages (no unfiltered_html,
trash disabled) and the keepingBackup() hints for rolled-back and partial
failures with each caller's label and entry. The callers' own tests drive
GlobalEdits, ThemeBuilderEdits (through DiviWriter) and make-global with
revisions off and assert the same sentences.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01At3V6SjwbMe6eMzVGW3Hs7
2026-09-27 23:03:05 +02:00
janniclas.loosenandClaude Opus 5.5 43dc3fb889 fix: global usages follow the Theme Builder access (ruling Q17 M1)
GlobalUsages gets the Theme Builder access injected as a closure
(ThemeBuilderAccess::usageState(), wired at both construction sites through
DiviIntegration::globalUsages()). Theme Builder posts are named only while
the Theme Builder is visible to the account, otherwise only counted (also
in blocked_ids); a global edit that changes them needs canUse(), a writable
"Divi Theme Builder" group and edit_post. Without an injected access the
fail-safe default checks what canUse() checks. The duplicate
THEME_BUILDER_TYPES list gives way to DiviThemeBuilder::postTypes().

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01At3V6SjwbMe6eMzVGW3Hs7
2026-09-27 23:00:36 +02:00
janniclas.loosenandClaude Opus 5.5 7590da4d96 fix: layout-edit dry runs name only editable live templates (ruling Q22)
ThemeBuilderEdits::showing() splits the live templates that show a layout
into editable ones (named under templates) and a hidden_templates count;
confirm is still decided on all of them, so a layout shown only by
uneditable templates still needs confirm. The live split is read once per
write for the confirm check and the field warnings, and field warnings now
also survive a non-confirm refusal such as the P9 backup refusal (M-12 a).
replace-text passes hidden_templates on; the write schema lists it.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01At3V6SjwbMe6eMzVGW3Hs7
2026-09-27 22:57:45 +02:00
janniclas.loosenandClaude Opus 5.5 3db96a3f5b docs: Theme Builder guide, instructions, readme and spec for 0.5.0
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-27 22:05:33 +02:00
janniclas.loosenandClaude Opus 5.5 4e959833b9 fix: identical means identical bytes – text parts count, pages and posts only (ruling Q25)
- Fingerprint::content() includes non-whitespace text parts (raw HTML between
  blocks, inner HTML of core blocks) and opaque blocks with all their bytes;
  structure() unchanged; find-similar "identical" follows
- make-global mode 2 also compares Fingerprint::canonical() bytes of each node
- sources and targets: post types page and post only (POST_TYPES)
- a rolled-back page N>1 keeps DiviSaver's "Revision X bleibt erhalten"
- guide: escaped divi/global-layout re-expanded by Divi's do_blocks in
  shortcode-module and WooCommerce text output documented as residual risk

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01At3V6SjwbMe6eMzVGW3Hs7
2026-09-27 21:59:20 +02:00
janniclas.loosenandClaude Opus 5.5 e733065b60 feat: lit/library-make-global replaces identical occurrences – dry run, confirm, revision per page
- library_id + targets (post_id, tree_rev, ids from lit/library-find-similar):
  only nodes with the entry's content fingerprint, pages and posts only
- every target checked first (DiviWriter::page: edit_post + tree_rev, P8a;
  StoredNodeGuard of the page on the instance); the entry must be an active
  global entry with one readable root and no reference in any spelling (Q7)
- dry run lists pages with tree_rev, status and live flag; confirm writes each
  page through DiviWriter::commit (revision, change log); live pages without
  revisions get VisibleEdits' backup, refused up front where not faithful
- failure on page N: earlier pages stay replaced, N rolled back, later pages
  untouched; the error names changed_posts/pages, failed_post, unchanged_posts

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01At3V6SjwbMe6eMzVGW3Hs7
2026-09-27 21:41:23 +02:00