refactor(compat): Freigabe-Bausteine generisch

ReleaseStore, CheckReportStore, CheckReport, CheckStep und CompatibilityCheck liegen im Kern und arbeiten je Profil (Optionen lit_mcp_<id>_releases|_check_report; Divi behält Namen und Schlüssel divi_version). Divi hängt Katalog-, Format- und Schreibtest über Profile::extraSteps an. Ein roter Prüfbericht für den aktuellen Stand sperrt LockOnFailure-Profile bis zur nächsten grünen Prüfung; Sperrgründe nennen nur Schritt-Labels, Ausnahmen gehen ins Error-Log. Profile bekommt testedVersions, stateKey, extraSteps, manifestCheck und reportVersionKey und wird mit benannten Argumenten gebaut.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Jan-Niclas Loosen
2026-11-06 12:51:03 +01:00
co-authored by Claude Opus 5.5
parent c85131603b
commit 7d6a97a54e
48 changed files with 1469 additions and 647 deletions
@@ -22,16 +22,16 @@ final class CompatibilityComponentTest extends TestCase
private function profile(bool $active, bool $broken = false): Profile
{
return new Profile(
'fake',
'Fake Plugin',
Tier::LockOnFailure,
[FakeCapability::Read, FakeCapability::Write],
[new Manifest(
id: 'fake',
label: 'Fake Plugin',
tier: Tier::LockOnFailure,
capabilities: [FakeCapability::Read, FakeCapability::Write],
manifests: [new Manifest(
'Fake',
calls: $broken ? [new Call('lit_mcp_missing_function', 0, [FakeCapability::Write])] : []
)],
static fn (): bool => $active,
static fn (): string => '4.2.0'
active: static fn (): bool => $active,
version: static fn (): string => '4.2.0'
);
}
@@ -85,10 +85,10 @@ final class CompatibilityComponentTest extends TestCase
public function testAReleasePerVersionProfileHasItsOwnComponent(): void
{
$profile = new Profile(
'rel',
'Rel',
Tier::ReleasePerVersion,
[FakeCapability::Other],
id: 'rel',
label: 'Rel',
tier: Tier::ReleasePerVersion,
capabilities: [FakeCapability::Other],
matrix: static fn (): CompatibilityMatrix => CompatibilityMatrix::allReleased([FakeCapability::Other])
);
@@ -101,10 +101,10 @@ final class CompatibilityComponentTest extends TestCase
{
$plain = $this->profile(true);
$release = new Profile(
'rel',
'Rel',
Tier::ReleasePerVersion,
[FakeCapability::Other],
id: 'rel',
label: 'Rel',
tier: Tier::ReleasePerVersion,
capabilities: [FakeCapability::Other],
matrix: static fn (): CompatibilityMatrix => CompatibilityMatrix::allReleased([FakeCapability::Other])
);