## Summary - rename the tenant dashboard operations KPI to attention-first wording and keep the primary header CTA derived from the highest-priority recommended action - restyle the `Operations requiring attention` card to match the existing neutral dashboard card language while keeping only a subtle per-item attention accent - replace technical operation identifiers on the dashboard with calmer timing/copy, including provider-consent follow-up messaging for blocked permission posture checks - refresh the local Spec Kit artifacts for spec 273 so the branch documentation matches the implemented attention-only dashboard scope ## Validation - `export PATH="/bin:/usr/bin:/usr/local/bin:$PATH" && cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Feature/Dashboard/TenantDashboardProductizationSummaryTest.php tests/Feature/Dashboard/TenantDashboardProductizationActionsTest.php tests/Feature/Dashboard/TenantDashboardProductizationAuthorizationTest.php tests/Feature/Filament/DashboardKpisWidgetTest.php tests/Feature/Filament/TenantDashboardDbOnlyTest.php tests/Browser/Dashboard/TenantDashboardProductizationSmokeTest.php` - `export PATH="/bin:/usr/bin:/usr/local/bin:$PATH" && cd apps/platform && ./vendor/bin/sail bin pint --dirty --format agent` Co-authored-by: Ahmed Darrazi <ahmed.darrazi@live.de> Reviewed-on: #338
58 lines
2.2 KiB
PHP
58 lines
2.2 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Support\TenantDashboard;
|
|
|
|
final readonly class TenantDashboardSummary
|
|
{
|
|
/**
|
|
* @param array{workspace:string,tenant:string,provider:?string,providerKey:?string,latestActivity:?string} $context
|
|
* @param array{status:string,tone:string,headline:string,summary:string} $posture
|
|
* @param list<array<string, mixed>> $kpis
|
|
* @param list<array<string, mixed>> $recommendedActions
|
|
* @param list<array<string, mixed>> $governanceStatus
|
|
* @param list<array<string, mixed>> $readinessCards
|
|
* @param array<string, mixed>|null $activeOperationSummary
|
|
* @param list<array<string, mixed>> $recentOperations
|
|
*/
|
|
public function __construct(
|
|
public array $context,
|
|
public array $posture,
|
|
public array $kpis,
|
|
public array $recommendedActions,
|
|
public array $governanceStatus,
|
|
public array $readinessCards,
|
|
public ?array $activeOperationSummary,
|
|
public array $recentOperations,
|
|
public ?string $pollingInterval,
|
|
) {}
|
|
|
|
/**
|
|
* @return array{
|
|
* context: array{workspace:string,tenant:string,provider:?string,providerKey:?string,latestActivity:?string},
|
|
* posture: array{status:string,tone:string,headline:string,summary:string},
|
|
* kpis: list<array<string, mixed>>,
|
|
* recommendedActions: list<array<string, mixed>>,
|
|
* governanceStatus: list<array<string, mixed>>,
|
|
* readinessCards: list<array<string, mixed>>,
|
|
* activeOperationSummary: array<string, mixed>|null,
|
|
* recentOperations: list<array<string, mixed>>,
|
|
* pollingInterval: ?string,
|
|
* }
|
|
*/
|
|
public function toArray(): array
|
|
{
|
|
return [
|
|
'context' => $this->context,
|
|
'posture' => $this->posture,
|
|
'kpis' => $this->kpis,
|
|
'recommendedActions' => $this->recommendedActions,
|
|
'governanceStatus' => $this->governanceStatus,
|
|
'readinessCards' => $this->readinessCards,
|
|
'activeOperationSummary' => $this->activeOperationSummary,
|
|
'recentOperations' => $this->recentOperations,
|
|
'pollingInterval' => $this->pollingInterval,
|
|
];
|
|
}
|
|
} |