## Summary - introduce a shared operator outcome taxonomy with semantic axes, severity bands, and next-action policy - apply the taxonomy to operations, evidence/review completeness, baseline semantics, and restore semantics - harden badge rendering, tenant-safe filtering/search behavior, and operator-facing summary/notification wording - add the spec kit artifacts, reference documentation, and regression coverage for diagnostic-vs-primary state handling ## Testing - focused Pest coverage for taxonomy registry and badge guardrails - operations presentation and notification tests - evidence, baseline, restore, and tenant-scope regression tests ## Notes - Livewire v4.0+ compliance is preserved in the existing Filament v5 stack - panel provider registration remains unchanged in bootstrap/providers.php - no new globally searchable resource was added; adopted resources remain tenant-safe and out of global search where required - no new destructive action family was introduced; existing actions keep their current authorization and confirmation behavior - no new frontend asset strategy was introduced; existing deploy flow with filament:assets remains unchanged Co-authored-by: Ahmed Darrazi <ahmed.darrazi@live.de> Reviewed-on: #186
30 lines
1.1 KiB
PHP
30 lines
1.1 KiB
PHP
<?php
|
||
|
||
declare(strict_types=1);
|
||
|
||
use App\Support\OpsUx\OperationUxPresenter;
|
||
|
||
it('builds canonical queued toast copy', function (): void {
|
||
$toast = OperationUxPresenter::queuedToast('policy.sync');
|
||
|
||
expect($toast->getTitle())->toBe('Policy sync queued');
|
||
expect($toast->getBody())->toBe('Queued for execution. Open the run for progress and next steps.');
|
||
})->group('ops-ux');
|
||
|
||
it('enforces queued toast duration within 3–5 seconds', function (): void {
|
||
$toast = OperationUxPresenter::queuedToast('policy.sync');
|
||
|
||
$duration = $toast->getDuration();
|
||
|
||
expect($duration)->toBeInt();
|
||
expect($duration)->toBeGreaterThanOrEqual(3000);
|
||
expect($duration)->toBeLessThanOrEqual(5000);
|
||
})->group('ops-ux');
|
||
|
||
it('builds canonical already-queued toast copy', function (): void {
|
||
$toast = OperationUxPresenter::alreadyQueuedToast('backup_set.add_policies');
|
||
|
||
expect($toast->getTitle())->toBe('Backup set update already queued');
|
||
expect($toast->getBody())->toBe('A matching run is already queued or running. No action needed unless it stays stuck.');
|
||
})->group('ops-ux');
|