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:
co-authored by
Claude Opus 5.5
parent
56947e54cf
commit
c036a92b60
@@ -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
|
||||
Anforderung.
|
||||
- **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`
|
||||
(nur bei `tools/call`, nicht beim Auflisten). Die Adapter prüfen vor jedem Schreiben zusätzlich selbst
|
||||
das nur mit `divi` und nur bei aktivem Divi 5 etwas braucht: `page-read`, `page-write`, `catalog`, `design-read`,
|
||||
`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`.
|
||||
- **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
|
||||
@@ -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
|
||||
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“.
|
||||
- **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
|
||||
Nachbau ungeprüft schreiben. „Referenz fehlt → ungetestet“ gilt nur für Aufruf-Signaturen und nur bei nicht
|
||||
freigegebener Version.
|
||||
- **Admin-Freigabe und Signaturen:** Die Admin-Freigabe berücksichtigt Signatur-Probleme nicht; Signaturen dienen der
|
||||
Automatik für Versionen ohne Freigabe. Ein Divi-Hotfix ohne Versionssprung, der nur eine Signatur ändert, sperrt
|
||||
nach einer Admin-Freigabe nicht; Aufrufe, Mirrors und Konstanten sperren weiter.
|
||||
- **Freigabe und Signaturen:** Eine freigegebene Version – per Admin-Freigabe (`ReleaseStore`) oder im Code getestet
|
||||
(`DiviReleases::TESTED`) – berücksichtigt Signatur-Probleme nicht; Signaturen dienen der Automatik für Versionen ohne
|
||||
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
|
||||
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
|
||||
|
||||
@@ -13,6 +13,9 @@ defined('ABSPATH') || exit;
|
||||
*/
|
||||
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;
|
||||
}
|
||||
|
||||
@@ -27,6 +27,10 @@ defined('ABSPATH') || exit;
|
||||
* requests and that change spelling without changing meaning; only "has a default" matters for the number of
|
||||
* arguments the plugin may omit.
|
||||
* - 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
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user