Commit Graph
112 Commits
Author SHA1 Message Date
Jan-Niclas LoosenandClaude Sonnet 5.5 d1a0e77f28 docs: Gerüst Plan Etappe 4d – Theme-Optionen und Schriften (Rulings, Schnittstellenvertrag)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-19 17:15:36 +02:00
Jan-Niclas LoosenandClaude Sonnet 5.5 25252c92f2 docs: Spec 4c – Item-Form nur mit id, Archivieren statt Löschen, affected vs. warnings (V8)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-19 14:39:51 +02:00
Jan-Niclas LoosenandClaude Sonnet 5.5 bb2377991d test: Smoke für Farben und Variablen gegen Divi 5.15.1; docs: Formate-Nachtrag 4c, Variablen nur archivieren (Spec §7.2)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-19 14:31:58 +02:00
Jan-Niclas LoosenandClaude Sonnet 5.5 0893b7e184 feat: lit/divi-colors-set und lit/divi-variables-set in der Divi-Integration; je ein geteilter Farben- und Variablen-Adapter
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-19 14:24:55 +02:00
Jan-Niclas LoosenandClaude Sonnet 5.5 d73144ab36 docs: Plan Etappe 4c – Farben und Variablen schreiben
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-19 12:49:58 +02:00
Jan-Niclas LoosenandClaude Opus 5.5 7f9a087b8b refactor: Divi-Reiter und divi-check in die Divi-Integration verschoben; CoreIndependenceTest prüft auch Cli, ChangeLog, Pods und die Wurzeldateien, erkennt Alias-Importe und kennt nur noch Plugin.php als Ausnahme
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 22:55:02 +02:00
Jan-Niclas LoosenandClaude Opus 5.5 c036a92b60 docs: Entscheidungsnotiz nennt PHP-8.4-Grenze der Signatur-Referenz, die Fähigkeiten von lit-content-create, Freigabe-Ruling auch für TESTED und belegt den permission_callback im mcp-adapter; Bootable-Docblock
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 22:49:30 +02:00
Jan-Niclas LoosenandClaude Sonnet 5.5 20ee173cd0 docs: Guides und Entscheidungsnotiz zur Divi-Freigabe je Fähigkeit
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-18 22:33:10 +02:00
Jan-Niclas LoosenandClaude Opus 5.5 a7a9c09de8 docs: Diagramm der Zielarchitektur (Divi-Freigabe je Fähigkeit) statt Fahrplan-Übersicht
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 21:44:20 +02:00
Jan-Niclas LoosenandClaude Opus 5.5 2facad1cbe docs: Plan Zwischenschritt – Kern entkoppeln und Divi-Freigabe je Fähigkeit; Übersicht der Pläne (archify)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 21:35:57 +02:00
Jan-Niclas LoosenandClaude Sonnet 5.5 6d7c59e3fa 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>
2026-10-18 17:38:30 +02:00
Jan-Niclas LoosenandClaude 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 LoosenandClaude Sonnet 5.5 10bed73b24 test: Ende-zu-Ende-Test der Zuweisung (Stapel, Gruppen, Überdeckung, Massenzuweisung, detach); Entscheidungsnotiz zu 4b
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-18 17:25:16 +02:00
Jan-Niclas LoosenandClaude Sonnet 5.5 17af3b05df docs: Guides zu Preset-Stapeln, Gruppen-Presets, Überdeckungen, Massenzuweisung und detach
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-18 17:25:16 +02:00
Jan-Niclas LoosenandClaude Opus 5.5 ca3bbf5ad1 docs: Plan Etappe 4b – Presets an Seiten zuweisen, Massenzuweisung, detach
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 16:34:17 +02:00
Jan-Niclas LoosenandClaude Opus 5.5 3e774507f2 docs: offene Kleinpunkte aus Etappe 4a festgehalten
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 18:13:14 +02:00
Jan-Niclas LoosenandClaude Opus 5.5 bae454c25c fix: Guide zum Designsystem – Namensregeln, unfiltered_html, Standard-Preset löschen, conflict
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 18:11:02 +02:00
Jan-Niclas LoosenandClaude Sonnet 5.5 2ed6093f97 test: Ende-zu-Ende-Test der Presets gegen Divi; Guide und Entscheidungsnotiz zu 4a
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-16 17:56:07 +02:00
Jan-Niclas LoosenandClaude Haiku 5.5 36af846b3e docs: Divi-Formate der Presets gegen 5.15.1 geprüft
Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-16 17:24:46 +02:00
Jan-Niclas LoosenandClaude Opus 5.5 47090621c7 docs: Implementierungsplan Etappe 4a (Pipeline, Snapshots, Presets)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 16:35:09 +02:00
Jan-Niclas LoosenandClaude Opus 5.5 d391cb5112 docs: Etappe 4 Designsystem – Spec (Presets, Farben, Variablen, Theme-Optionen, Schriften, Schleifen)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 16:13:12 +02:00
janniclas.loosenandClaude Opus 5.5 cc72f9b946 docs: Etappe 4 decisions draft (brainstorming paused)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01At3V6SjwbMe6eMzVGW3Hs7
2026-09-30 06:03:54 +02:00
janniclas.loosenandClaude Opus 5.5 2e4309cb42 test: Divi 5 design system fixtures and format notes for Etappe 4
Seed script writes four global colors (one relative), one variable per
type, four module presets (one default) and two option group presets plus
the draft page "[Fixture] Designsystem" through Divi's own builder REST
routes; export script saves them to tests/Fixtures/divi/stage4/. Notes
document storage, write functions, side effects and permissions.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01At3V6SjwbMe6eMzVGW3Hs7
2026-09-30 06:03:54 +02:00
janniclas.loosenandClaude Opus 5.5 3d14a2e187 docs: Divi safeguard security audit
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-30 03:36:25 +02:00
janniclas.loosenandClaude Opus 5.5 35ea47d832 chore: release 0.6.0 with Divi release gate, smoke test and acceptance notes
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-30 03:19:31 +02:00
janniclas.loosenandClaude Opus 5.5 ca40e39b18 docs: Divi safeguard implementation plan
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-30 00:36:19 +02:00
janniclas.loosenandClaude Opus 5.5 94b8c7b338 docs: Divi safeguard design spec (version gate, Divi boundary, admin check)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-30 00:01:20 +02:00
janniclas.loosenandClaude Opus 5.5 066fe408ea docs: Etappe 3b rulings and security audit
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01At3V6SjwbMe6eMzVGW3Hs7
2026-09-27 23:32:11 +02:00
janniclas.loosenandClaude Opus 5.5 66f012befd docs: check the page after restoring a layout revision in WordPress (re-review N-2)
A restore in the revision screen does not go through the plugin's cache
clear, so the Theme Builder guide asks to check the builder or the website
and to clear Divi's static CSS if the old state still shows.

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:59 +02:00
janniclas.loosenandClaude Opus 5.5 50cfa42358 docs: only the group switch keeps the Divi tools off Theme Builder layouts (audit I2)
The Theme Builder guide says that switching off single lit/tb-* tools does
not stop the lit-divi-* tools from editing layouts, and that "nur lesen"
also covers global modules in layouts. The decisions note records Q17 M1
and the restore_url answer of audit L3.

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:40 +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 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 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 0b7a1c28ec test: Etappe 3b end-to-end smoke and acceptance checklist
tb-smoke.sh checks the Theme Builder tools, Pods field warnings (own
temporary pod, ruling Q6), find-similar, make-global, P13 and P10 through
the OAuth endpoint. The only enabled template targets a temporary draft
page; cleanup goes by exact IDs and the last section verifies the Theme
Builder list, enabled states and options equal the state before the run.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01At3V6SjwbMe6eMzVGW3Hs7
2026-09-27 22:37:12 +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 0edb474d78 docs: Etappe 3b implementation plan (Theme Builder)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-27 12:16:15 +02:00
janniclas.loosenandClaude Opus 5.5 e049959482 docs: Etappe 3a rulings and security audit
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-27 04:57:43 +02:00
janniclas.loosenandClaude Opus 5.5 b6d791d46a fix: UsageMatcher reads Divi 4 shortcodes like WordPress and Divi, everywhere (ruling P24)
- G1: every decoded string value of a Divi 5 opener is scanned for shortcodes;
  outside the openers only the remaining content is.
- G2: attributes are parsed like shortcode_parse_atts() and global_module is
  cast with (int), as Divi does.
- G3: a non-empty global_module other than "0" that casts to 0 makes Divi
  render the newest layout, so it counts for every entry (fail closed).
- The prefilter LIKEs use LOWER(post_content), so they are case-insensitive
  under any collation.
- The guide describes the fail-closed rule without an absolute claim.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-27 04:53:54 +02:00
janniclas.loosenandClaude Opus 5.5 8f87ec6163 docs: library guide speaks of references in every place (P23)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-27 04:42:59 +02:00
janniclas.loosenandClaude Opus 5.5 fec5d9da7b fix: GlobalUsages finds every reference Divi renders, fail closed (F1, ruling P23)
Candidates come from one ID/status/type query: content with globalModule,
global_module or a JSON-escaped letter. Their content is read in chunks of
50 and parsed by UsageMatcher: Divi 5 openers are json-decoded (escaped keys
and values, leading zeros, any depth), and Divi 4 global_module attributes
are read in any quoting. An undecodable escaped opener counts as a possible
reference. Beyond 5000 candidates the rest count unread. The guide names
the formats and the wp_block parity. Also fixes the grammar of the
blocked-hidden count.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-27 04:42:46 +02:00
janniclas.loosenandClaude Opus 5.5 dcbd52e51d docs: acceptance note without CLI, with the editor connection and the read-only hint (M-15)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-27 04:24:01 +02:00
janniclas.loosenandClaude Opus 5.5 695f7b91ac docs: neutral client wording in the plugin header and the spec (T16)
The header says "mit OAuth für KI-Assistenten" like the readme; the spec names
the client neutrally and keeps claude.ai only where the connector is meant.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-27 04:21:25 +02:00
janniclas.loosenandClaude Opus 5.5 395049ec97 fix: global-edit rules for every library entry that pages show (L2)
Divi renders any referenced et_pb_layout, whatever its scope term. A normal
entry with usages now gets the dry run, confirm, P8a, backup and the
site-wide GlobalItem scope; lit-divi-delete's notice and the library-list
detail name its pages too. The usage scan is the same single query.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-27 04:14:58 +02:00
janniclas.loosenandClaude Opus 5.5 8aacc5dc4f fix: P8a blocks Theme Builder layouts without Divi's theme_builder role (L6)
et_header_layout, et_body_layout, et_footer_layout and et_template showing a
global entry now block a confirmed edit unless et_pb_is_allowed('theme_builder'),
like Divi's own check for TB layouts.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-27 04:13:14 +02:00
janniclas.loosenandClaude Opus 5.5 e8f69f67ea fix: bounded usage scan and count-only unreadable posts in global edits (L1, L4)
GlobalUsages runs one query per request (ID, status, type – no content),
checks read_post/edit_post in chunks of 200 with a primed and released post
cache, lists at most 50 readable posts and refuses a confirmed global edit
above 2000 live references (unsupported, edit in the Divi builder). Posts the
caller may not read appear only as hidden_count / blocked_hidden_count;
blocked_ids names readable posts only.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-27 04:12:38 +02:00
janniclas.loosenandClaude Opus 5.5 bd28c32513 docs: state the P13 limit honestly in the library guide (I-2)
With the library group disabled the entries stay unreadable and unwritable, but
page outline, node-get and render summary still name global module IDs; full
hiding follows in 3b.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-27 04:07:24 +02:00