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
|
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
|
||||||
|
|||||||
@@ -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
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user