## Summary - rebuild the public Tenantial homepage around an evidence-first Microsoft tenant governance narrative - replace the old hero visual with a new static dashboard preview and add dedicated Trust Bar and Feature Pillars sections - update the shared public shell, navigation, footer, dark design tokens, assets, and homepage content to match the new brand direction - align website smoke coverage and Spec 400 artifacts with the rebuilt homepage ## Testing - not run in this pass - updated website smoke specs under apps/website/tests/smoke ## Note - `website-dev` was pushed to `origin` so the requested PR base exists remotely - the remote `website-dev` branch is an ancestor of `origin/dev`, so this PR may also show upstream `dev` history relative to that base Co-authored-by: Ahmed Darrazi <ahmed.darrazi@live.de> Reviewed-on: #387
31 lines
843 B
PHP
31 lines
843 B
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Support\OperationalControls;
|
|
|
|
use RuntimeException;
|
|
|
|
final class OperationalControlBlockedException extends RuntimeException
|
|
{
|
|
private function __construct(
|
|
public readonly OperationalControlDecision $decision,
|
|
public readonly string $actionLabel,
|
|
) {
|
|
$message = trim($decision->reasonText ?? '');
|
|
|
|
parent::__construct($message !== ''
|
|
? sprintf('%s is currently paused. %s', $actionLabel, $message)
|
|
: sprintf('%s is currently paused.', $actionLabel));
|
|
}
|
|
|
|
public static function forDecision(OperationalControlDecision $decision, string $actionLabel): self
|
|
{
|
|
return new self($decision, $actionLabel);
|
|
}
|
|
|
|
public function title(): string
|
|
{
|
|
return sprintf('%s paused', $this->actionLabel);
|
|
}
|
|
} |