## Summary - add Spec 185 workspace recovery posture visibility artifacts under `specs/185-workspace-recovery-posture-visibility` - promote tenant backup health and recovery evidence onto the workspace overview with separate metrics, attention ordering, calmness coverage, and tenant-dashboard drill-throughs - batch visible-tenant backup/recovery derivation to keep the workspace overview query-bounded - align follow-up fixes from the authoritative suite rerun, including dashboard truth-alignment fixtures, canonical backup schedule tenant context, guard-path cleanup, smoke-fixture credential removal, and robust theme asset manifest handling ## Testing - `cd apps/platform && ./vendor/bin/sail bin pint --dirty --format agent` - `cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Unit/Filament/PanelThemeAssetTest.php tests/Feature/Guards/DerivedStateConsumerAdoptionGuardTest.php` - focused regression pack for the previously failing cases passed - full suite JUnit run passed: `3401` tests, `18849` assertions, `0` failures, `0` errors, `8` skips ## Notes - no new schema or persisted workspace recovery model - no provider-registration changes; Filament/Livewire stack remains on Filament v5 and Livewire v4 - no new destructive actions or global search changes Co-authored-by: Ahmed Darrazi <ahmed.darrazi@live.de> Reviewed-on: #216
46 lines
1.0 KiB
PHP
46 lines
1.0 KiB
PHP
<?php
|
|
|
|
namespace App\Support\Filament;
|
|
|
|
use Illuminate\Support\Facades\Vite;
|
|
|
|
class PanelThemeAsset
|
|
{
|
|
public static function resolve(string $entry): ?string
|
|
{
|
|
if (app()->runningUnitTests()) {
|
|
return static::resolveFromManifest($entry);
|
|
}
|
|
|
|
if (is_file(public_path('hot'))) {
|
|
return Vite::asset($entry);
|
|
}
|
|
|
|
return static::resolveFromManifest($entry);
|
|
}
|
|
|
|
private static function resolveFromManifest(string $entry): ?string
|
|
{
|
|
$manifest = public_path('build/manifest.json');
|
|
|
|
if (! is_file($manifest)) {
|
|
return null;
|
|
}
|
|
|
|
/** @var array<string, array{file?: string}>|null $decoded */
|
|
$decoded = json_decode((string) file_get_contents($manifest), true);
|
|
|
|
if (! is_array($decoded)) {
|
|
return null;
|
|
}
|
|
|
|
$file = $decoded[$entry]['file'] ?? null;
|
|
|
|
if (! is_string($file) || $file === '') {
|
|
return null;
|
|
}
|
|
|
|
return asset('build/'.$file);
|
|
}
|
|
}
|