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>
This commit is contained in:
Jan-Niclas Loosen
2026-10-18 22:49:30 +02:00
co-authored by Claude Opus 5.5
parent 56947e54cf
commit c036a92b60
3 changed files with 24 additions and 6 deletions
@@ -25,8 +25,12 @@ pauschale Sperre der Divi-Absicherung (2026-09-29) durch eine Freigabe je Fähig
Builder) tragen alle betroffenen, ein Bruch sperrt bewusst beide. Ein Test verlangt mindestens eine Fähigkeit je Builder) tragen alle betroffenen, ein Bruch sperrt bewusst beide. Ein Test verlangt mindestens eine Fähigkeit je
Anforderung. Anforderung.
- **Werkzeuge erklären ihre Fähigkeiten** (`RequiresDiviFeatures`, `DeclaresRequirements` für `lit-content-create`, - **Werkzeuge erklären ihre Fähigkeiten** (`RequiresDiviFeatures`, `DeclaresRequirements` für `lit-content-create`,
das nur mit `divi` `page-write` braucht). `DiviFeatureGate` prüft sie vor dem Aufruf, auch im `permission_callback` das nur mit `divi` und nur bei aktivem Divi 5 etwas braucht: `page-read`, `page-write`, `catalog`, `design-read`,
(nur bei `tools/call`, nicht beim Auflisten). Die Adapter prüfen vor jedem Schreiben zusätzlich selbst `dynamic-sources` – `DiviContentComposer::FEATURES`; ohne aktives Divi antwortet das Werkzeug selbst mit
`unsupported`). `DiviFeatureGate` prüft sie vor dem Aufruf, auch im `permission_callback`. Im vendorten mcp-adapter
ruft nur der Werkzeugaufruf diesen Callback auf (`tools/call`: `Handlers/Tools/ToolsHandler.php`, `call_tool()`;
`mcp-adapter-execute-ability`: `Abilities/ExecuteAbilityAbility.php`), das Auflisten nicht. Die Adapter prüfen vor
jedem Schreiben zusätzlich selbst
(`assertFeature`); `DiviSaver` ergänzt je Speicherbereich `library-write` bzw. `tb-write`. (`assertFeature`); `DiviSaver` ergänzt je Speicherbereich `library-write` bzw. `tb-write`.
- **Ablehnung:** `divi_untested` (mindestens eine Fähigkeit ungetestet, keine inkompatibel) oder `divi_incompatible`, - **Ablehnung:** `divi_untested` (mindestens eine Fähigkeit ungetestet, keine inkompatibel) oder `divi_incompatible`,
HTTP 423, Details `features` (`id`, `label`, `state`, `problems`) und ein Hinweis, der die Fähigkeiten nennt und HTTP 423, Details `features` (`id`, `label`, `state`, `problems`) und ein Hinweis, der die Fähigkeiten nennt und
@@ -44,12 +48,19 @@ pauschale Sperre der Divi-Absicherung (2026-09-29) durch eine Freigabe je Fähig
Divi-Symbole sind untypisiert; dort sichert der Hash nur Aufrufform und Parameterzahl. Ein neuer optionaler Divi-Symbole sind untypisiert; dort sichert der Hash nur Aufrufform und Parameterzahl. Ein neuer optionaler
Parameter am Ende sperrt die Fähigkeit (fail closed, gewollt); ein geänderter Default-Wert fällt nicht auf. Die Parameter am Ende sperrt die Fähigkeit (fail closed, gewollt); ein geänderter Default-Wert fällt nicht auf. Die
automatische Freigabe sagt daher „Aufrufe unverändert“, nicht „funktioniert“. automatische Freigabe sagt daher „Aufrufe unverändert“, nicht „funktioniert“.
- **Referenz und PHP-Version:** `fingerprints.json` wurde unter PHP 8.4 berechnet. Reflection gibt Typen je
PHP-Version unterschiedlich aus (z. B. `iterable` ab 8.2 als `Traversable|array`); eine andere PHP-Version in
Produktion kann deshalb scheinbare `signature`-Probleme melden. Das zählt nur für die automatische Freigabe einer
nicht freigegebenen Divi-Version und schlägt geschlossen fehl: Es entsteht schlimmstenfalls ein falsches
„inkompatibel“/„ungetestet“, nie eine falsche Freigabe. `wp lit-mcp divi-check --update-reference` erzeugt die
Referenz neu.
- **Mirror ohne Referenz ist ein harter Befund** (Art `mirror`), auch bei freigegebener Version: sonst würde ein - **Mirror ohne Referenz ist ein harter Befund** (Art `mirror`), auch bei freigegebener Version: sonst würde ein
Nachbau ungeprüft schreiben. „Referenz fehlt → ungetestet“ gilt nur für Aufruf-Signaturen und nur bei nicht Nachbau ungeprüft schreiben. „Referenz fehlt → ungetestet“ gilt nur für Aufruf-Signaturen und nur bei nicht
freigegebener Version. freigegebener Version.
- **Admin-Freigabe und Signaturen:** Die Admin-Freigabe berücksichtigt Signatur-Probleme nicht; Signaturen dienen der - **Freigabe und Signaturen:** Eine freigegebene Version – per Admin-Freigabe (`ReleaseStore`) oder im Code getestet
Automatik für Versionen ohne Freigabe. Ein Divi-Hotfix ohne Versionssprung, der nur eine Signatur ändert, sperrt (`DiviReleases::TESTED`) – berücksichtigt Signatur-Probleme nicht; Signaturen dienen der Automatik für Versionen ohne
nach einer Admin-Freigabe nicht; Aufrufe, Mirrors und Konstanten sperren weiter. Freigabe. Ein Divi-Hotfix ohne Versionssprung, der nur eine Signatur ändert, sperrt bei einer freigegebenen Version
nicht; Aufrufe, Mirrors und Konstanten sperren weiter.
- **Registrierungs-Prüfungen** (Post-Typen, Taxonomien, Block-Typen) bleiben informativ und sperren nicht. Die - **Registrierungs-Prüfungen** (Post-Typen, Taxonomien, Block-Typen) bleiben informativ und sperren nicht. Die
Schreibprobe bleibt der Seitenpfad und ist nur für die Admin-Freigabe nötig. Schreibprobe bleibt der Seitenpfad und ist nur für die Admin-Freigabe nötig.
- **Protokoll:** Ablehnungen (`ChangeLog`, Ergebnis `refused`) werden nur für schreibende Werkzeuge protokolliert; eine - **Protokoll:** Ablehnungen (`ChangeLog`, Ergebnis `refused`) werden nur für schreibende Werkzeuge protokolliert; eine
+4 -1
View File
@@ -13,6 +13,9 @@ defined('ABSPATH') || exit;
*/ */
interface Bootable interface Bootable
{ {
/** Registers the integration's own hooks, routes, CLI commands and admin tabs. Called once by Plugin. */ /**
* Registers the integration's own hooks, routes, CLI commands and admin tabs. IntegrationRegistry::boot() calls it
* at most once per request.
*/
public function boot(): void; public function boot(): void;
} }
@@ -27,6 +27,10 @@ defined('ABSPATH') || exit;
* requests and that change spelling without changing meaning; only "has a default" matters for the number of * requests and that change spelling without changing meaning; only "has a default" matters for the number of
* arguments the plugin may omit. * arguments the plugin may omit.
* - The body: a changed body is no change of the interface (mirrors cover the code the plugin repeats). * - The body: a changed body is no change of the interface (mirrors cover the code the plugin repeats).
*
* Type strings come from Reflection and differ between PHP versions (e.g. `iterable` reads as `Traversable|array`
* from 8.2). The reference was computed under PHP 8.4; another PHP version can therefore report a spurious signature
* problem – it only blocks the automatic release (fail closed), never releases; --update-reference regenerates it.
*/ */
final class SignatureFingerprint final class SignatureFingerprint
{ {