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');