TenantAtlas/apps/platform/app/Support/Governance/Controls/ArtifactSuitability.php
ahmido be314c577f Spec 400: rebuild Tenantial homepage visuals (#387)
## 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
2026-05-18 14:38:11 +00:00

67 lines
1.8 KiB
PHP

<?php
declare(strict_types=1);
namespace App\Support\Governance\Controls;
use InvalidArgumentException;
final readonly class ArtifactSuitability
{
public function __construct(
public bool $baseline,
public bool $drift,
public bool $finding,
public bool $exception,
public bool $evidence,
public bool $review,
public bool $report,
) {}
/**
* @param array<string, mixed> $data
*/
public static function fromArray(array $data): self
{
foreach (self::requiredKeys() as $key) {
if (! array_key_exists($key, $data)) {
throw new InvalidArgumentException(sprintf('Canonical control artifact suitability is missing [%s].', $key));
}
}
return new self(
baseline: (bool) $data['baseline'],
drift: (bool) $data['drift'],
finding: (bool) $data['finding'],
exception: (bool) $data['exception'],
evidence: (bool) $data['evidence'],
review: (bool) $data['review'],
report: (bool) $data['report'],
);
}
/**
* @return array{baseline: bool, drift: bool, finding: bool, exception: bool, evidence: bool, review: bool, report: bool}
*/
public function toArray(): array
{
return [
'baseline' => $this->baseline,
'drift' => $this->drift,
'finding' => $this->finding,
'exception' => $this->exception,
'evidence' => $this->evidence,
'review' => $this->review,
'report' => $this->report,
];
}
/**
* @return list<string>
*/
public static function requiredKeys(): array
{
return ['baseline', 'drift', 'finding', 'exception', 'evidence', 'review', 'report'];
}
}