## Summary - codify Spec 193 as an explicit monitoring/workbench surface inventory with validator and guard coverage - refactor the Finding Exceptions Queue, Operations landing, and tenantless operation viewer into clearer context, navigation, utility, drilldown, and focused-work lanes - align Alerts, Audit Log, and Alert Deliveries with quiet origin-context handling while preserving calm reference surfaces and the explicit Tenant Diagnostics exception - add focused feature coverage, guard coverage, browser smoke coverage, and the full spec artifacts for Spec 193 ## Verification - `cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Feature/Guards/ActionSurfaceContractTest.php tests/Feature/Guards/ActionSurfaceValidatorTest.php tests/Feature/Guards/Spec193MonitoringSurfaceHierarchyGuardTest.php tests/Feature/OpsUx/OperateHubShellTest.php tests/Feature/Operations/TenantlessOperationRunViewerTest.php tests/Feature/Monitoring/FindingExceptionsQueueHierarchyTest.php tests/Browser/Spec193MonitoringSurfaceHierarchySmokeTest.php` - `cd apps/platform && ./vendor/bin/sail bin pint --dirty --format agent` - integrated-browser smoke pass over queue, operations, operation detail, alerts, audit log, and tenant diagnostics ## Notes - Livewire v4 / Filament v5 stack unchanged - no provider-registration changes; Laravel 11+ provider registration remains in `bootstrap/providers.php` - no new global-search behavior was introduced - destructive and governance-changing actions keep their existing confirmation and authorization semantics - no new assets or migrations were added Co-authored-by: Ahmed Darrazi <ahmed.darrazi@live.de> Reviewed-on: #227
78 lines
4.0 KiB
PHP
78 lines
4.0 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
use App\Filament\Pages\BaselineCompareLanding;
|
|
use App\Filament\Pages\BaselineCompareMatrix;
|
|
use App\Filament\Pages\Monitoring\Alerts;
|
|
use App\Filament\Pages\Monitoring\AuditLog as AuditLogPage;
|
|
use App\Filament\Pages\Monitoring\EvidenceOverview;
|
|
use App\Filament\Pages\Monitoring\FindingExceptionsQueue;
|
|
use App\Filament\Pages\Monitoring\Operations;
|
|
use App\Filament\Pages\Operations\TenantlessOperationRunViewer;
|
|
use App\Filament\Pages\Reviews\ReviewRegister;
|
|
use App\Filament\Pages\TenantDiagnostics;
|
|
use App\Filament\Resources\AlertDeliveryResource\Pages\ListAlertDeliveries;
|
|
use App\Support\Ui\ActionSurface\ActionSurfaceExemptions;
|
|
use App\Support\Ui\ActionSurface\ActionSurfaceValidator;
|
|
|
|
it('keeps the spec 193 monitoring inventory complete and explicitly classified', function (): void {
|
|
$inventory = ActionSurfaceExemptions::spec193MonitoringSurfaceInventory();
|
|
|
|
expect(array_keys($inventory))->toEqualCanonicalizing([
|
|
FindingExceptionsQueue::class,
|
|
TenantlessOperationRunViewer::class,
|
|
Operations::class,
|
|
Alerts::class,
|
|
AuditLogPage::class,
|
|
ListAlertDeliveries::class,
|
|
EvidenceOverview::class,
|
|
BaselineCompareLanding::class,
|
|
BaselineCompareMatrix::class,
|
|
ReviewRegister::class,
|
|
TenantDiagnostics::class,
|
|
])
|
|
->and(ActionSurfaceExemptions::spec193MonitoringSurface(FindingExceptionsQueue::class)['classification'] ?? null)->toBe('remediation_required')
|
|
->and(ActionSurfaceExemptions::spec193MonitoringSurface(FindingExceptionsQueue::class)['surfaceKind'] ?? null)->toBe('queue_workbench')
|
|
->and(ActionSurfaceExemptions::spec193MonitoringSurface(FindingExceptionsQueue::class)['primaryInspectModel'] ?? null)->toBe('explicit_inspect_action')
|
|
->and(ActionSurfaceExemptions::spec193MonitoringSurface(Alerts::class)['classification'] ?? null)->toBe('minor_alignment_only')
|
|
->and(ActionSurfaceExemptions::spec193MonitoringSurface(EvidenceOverview::class)['classification'] ?? null)->toBe('compliant_no_op')
|
|
->and(ActionSurfaceExemptions::spec193MonitoringSurface(TenantDiagnostics::class)['classification'] ?? null)->toBe('special_type_acceptable');
|
|
});
|
|
|
|
it('keeps tenant diagnostics as the only explicit spec 193 exception surface', function (): void {
|
|
$inventory = ActionSurfaceExemptions::spec193MonitoringSurfaceInventory();
|
|
|
|
$exceptionPages = collect($inventory)
|
|
->filter(fn (array $surface): bool => $surface['classification'] === 'special_type_acceptable')
|
|
->keys()
|
|
->values()
|
|
->all();
|
|
|
|
expect($exceptionPages)->toBe([
|
|
TenantDiagnostics::class,
|
|
])
|
|
->and(ActionSurfaceExemptions::spec193MonitoringSurface(TenantDiagnostics::class)['exceptionReason'] ?? null)->toContain('diagnostic')
|
|
->and(ActionSurfaceExemptions::spec193MonitoringSurface(TenantDiagnostics::class)['surfaceKind'] ?? null)->toBe('diagnostic_exception')
|
|
->and(ActionSurfaceExemptions::spec193MonitoringSurface(TenantDiagnostics::class)['primaryInspectModel'] ?? null)->toBe('singleton_detail_surface')
|
|
->and(collect($inventory)
|
|
->except([TenantDiagnostics::class])
|
|
->every(fn (array $surface): bool => ($surface['exceptionReason'] ?? null) === null))->toBeTrue();
|
|
});
|
|
|
|
it('keeps the spec 193 monitoring inventory valid inside the action-surface validator', function (): void {
|
|
$result = ActionSurfaceValidator::withBaselineExemptions()->validateComponents([]);
|
|
|
|
expect($result->hasIssues())->toBeFalse($result->formatForAssertion());
|
|
});
|
|
|
|
it('keeps spec 193 monitoring surfaces out of record-page header layouts', function (): void {
|
|
foreach (array_keys(ActionSurfaceExemptions::spec193MonitoringSurfaceInventory()) as $className) {
|
|
$source = file_get_contents((string) (new \ReflectionClass($className))->getFileName()) ?: '';
|
|
|
|
expect($source)
|
|
->not->toContain('EnterpriseDetail')
|
|
->not->toContain('enterprise-detail/header');
|
|
}
|
|
});
|