From 4dbb0249bd0593e8f6b43a8f1fa997424fb69d50 Mon Sep 17 00:00:00 2001 From: Ahmed Darrazi Date: Wed, 10 Jun 2026 13:58:51 +0200 Subject: [PATCH] feat(ui): implement baseline profile decision view Added a decision-first section to the Baseline Profile detail page. Includes request caching for summary metrics and corresponding browser/feature tests. --- .../Resources/BaselineProfileResource.php | 340 ++++++++++++++++-- ...69BaselineProfileDecisionViewSmokeTest.php | 85 +++++ ...Spec369BaselineProfileDecisionViewTest.php | 156 ++++++++ .../page-reports/ui-010-baseline-profiles.md | 8 +- .../screenshots/decision-first-detail.png | Bin 0 -> 207330 bytes .../checklists/requirements.md | 47 +++ .../plan.md | 198 ++++++++++ .../spec.md | 289 +++++++++++++++ .../tasks.md | 101 ++++++ 9 files changed, 1192 insertions(+), 32 deletions(-) create mode 100644 apps/platform/tests/Browser/Spec369BaselineProfileDecisionViewSmokeTest.php create mode 100644 apps/platform/tests/Feature/Filament/Spec369BaselineProfileDecisionViewTest.php create mode 100644 specs/369-baseline-profile-decision-view/artifacts/screenshots/decision-first-detail.png create mode 100644 specs/369-baseline-profile-decision-view/checklists/requirements.md create mode 100644 specs/369-baseline-profile-decision-view/plan.md create mode 100644 specs/369-baseline-profile-decision-view/spec.md create mode 100644 specs/369-baseline-profile-decision-view/tasks.md diff --git a/apps/platform/app/Filament/Resources/BaselineProfileResource.php b/apps/platform/app/Filament/Resources/BaselineProfileResource.php index 8806151b..0fb5525f 100644 --- a/apps/platform/app/Filament/Resources/BaselineProfileResource.php +++ b/apps/platform/app/Filament/Resources/BaselineProfileResource.php @@ -273,6 +273,69 @@ public static function infolist(Schema $schema): Schema { return $schema ->schema([ + Section::make('Decision') + ->schema([ + TextEntry::make('baseline_decision_readiness') + ->label('Readiness') + ->badge() + ->state(fn (BaselineProfile $record): string => self::baselineDecisionSummary($record)['readiness']) + ->color(fn (BaselineProfile $record): string => self::baselineDecisionSummary($record)['readiness_color']) + ->icon(fn (BaselineProfile $record): ?string => self::baselineDecisionSummary($record)['readiness_icon']), + TextEntry::make('baseline_decision_reason') + ->label('Decision reason') + ->state(fn (BaselineProfile $record): string => self::baselineDecisionSummary($record)['reason']) + ->columnSpanFull(), + TextEntry::make('baseline_decision_impact') + ->label('Operational impact') + ->state(fn (BaselineProfile $record): string => self::baselineDecisionSummary($record)['impact']) + ->columnSpanFull(), + TextEntry::make('baseline_decision_snapshot_basis') + ->label('Snapshot basis') + ->state(fn (BaselineProfile $record): string => self::baselineDecisionSummary($record)['snapshot_basis']), + TextEntry::make('baseline_decision_latest_attempt') + ->label('Latest attempt') + ->state(fn (BaselineProfile $record): string => self::baselineDecisionSummary($record)['latest_attempt']), + TextEntry::make('baseline_decision_assignments') + ->label('Assignment signal') + ->state(fn (BaselineProfile $record): string => self::baselineDecisionSummary($record)['assignment_signal']) + ->columnSpanFull(), + TextEntry::make('baseline_decision_next_action') + ->label('Dominant next action') + ->state(fn (BaselineProfile $record): string => self::baselineDecisionSummary($record)['next_action']) + ->columnSpanFull(), + ]) + ->columns(2) + ->columnSpanFull(), + Section::make('Baseline truth') + ->schema([ + TextEntry::make('current_snapshot_truth') + ->label('Current snapshot') + ->state(fn (BaselineProfile $record): string => self::currentSnapshotLabel($record)), + TextEntry::make('latest_attempted_snapshot_truth') + ->label('Latest attempt') + ->state(fn (BaselineProfile $record): string => self::latestAttemptedSnapshotLabel($record)), + TextEntry::make('compare_readiness') + ->label('Compare readiness') + ->badge() + ->state(fn (BaselineProfile $record): string => self::compareReadinessLabel($record)) + ->color(fn (BaselineProfile $record): string => self::compareReadinessColor($record)) + ->icon(fn (BaselineProfile $record): ?string => self::compareReadinessIcon($record)), + TextEntry::make('baseline_next_step') + ->label('Next step') + ->state(fn (BaselineProfile $record): string => self::profileNextStep($record)) + ->columnSpanFull(), + ]) + ->columns(2) + ->columnSpanFull(), + Section::make('Related context') + ->schema([ + ViewEntry::make('related_context') + ->label('') + ->view('filament.infolists.entries.related-context') + ->state(fn (BaselineProfile $record): array => self::detailRelatedContextEntries($record)) + ->columnSpanFull(), + ]) + ->columnSpanFull(), Section::make('Profile') ->schema([ TextEntry::make('name'), @@ -347,36 +410,6 @@ public static function infolist(Schema $schema): Schema ->placeholder('None'), ]) ->columnSpanFull(), - Section::make('Baseline truth') - ->schema([ - TextEntry::make('current_snapshot_truth') - ->label('Current snapshot') - ->state(fn (BaselineProfile $record): string => self::currentSnapshotLabel($record)), - TextEntry::make('latest_attempted_snapshot_truth') - ->label('Latest attempt') - ->state(fn (BaselineProfile $record): string => self::latestAttemptedSnapshotLabel($record)), - TextEntry::make('compare_readiness') - ->label('Compare readiness') - ->badge() - ->state(fn (BaselineProfile $record): string => self::compareReadinessLabel($record)) - ->color(fn (BaselineProfile $record): string => self::compareReadinessColor($record)) - ->icon(fn (BaselineProfile $record): ?string => self::compareReadinessIcon($record)), - TextEntry::make('baseline_next_step') - ->label('Next step') - ->state(fn (BaselineProfile $record): string => self::profileNextStep($record)) - ->columnSpanFull(), - ]) - ->columns(2) - ->columnSpanFull(), - Section::make('Related context') - ->schema([ - ViewEntry::make('related_context') - ->label('') - ->view('filament.infolists.entries.related-context') - ->state(fn (BaselineProfile $record): array => self::detailRelatedContextEntries($record)) - ->columnSpanFull(), - ]) - ->columnSpanFull(), Section::make('Metadata') ->schema([ TextEntry::make('createdByUser.name') @@ -756,6 +789,202 @@ private static function archiveTableAction(?Workspace $workspace): Action return $action; } + /** + * @return array{ + * readiness: string, + * readiness_color: string, + * readiness_icon: string|null, + * reason: string, + * impact: string, + * snapshot_basis: string, + * latest_attempt: string, + * assignment_signal: string, + * next_action: string, + * } + */ + private static function baselineDecisionSummary(BaselineProfile $profile): array + { + $cacheKey = self::profileRequestCacheKey($profile, 'decision-summary'); + + if (request()->attributes->has($cacheKey)) { + $cached = request()->attributes->get($cacheKey); + + if (is_array($cached)) { + return $cached; + } + } + + $reasonCode = self::compareAvailabilityReason($profile); + + $summary = [ + 'readiness' => self::baselineDecisionReadiness($reasonCode), + 'readiness_color' => self::baselineDecisionReadinessColor($reasonCode), + 'readiness_icon' => self::baselineDecisionReadinessIcon($reasonCode), + 'reason' => self::baselineDecisionReason($profile, $reasonCode), + 'impact' => self::baselineDecisionImpact($reasonCode), + 'snapshot_basis' => self::currentSnapshotLabel($profile), + 'latest_attempt' => self::latestAttemptedSnapshotLabel($profile), + 'assignment_signal' => self::assignmentSignal($profile), + 'next_action' => self::baselineDecisionNextAction($profile, $reasonCode), + ]; + + request()->attributes->set($cacheKey, $summary); + + return $summary; + } + + private static function baselineDecisionReadiness(?string $reasonCode): string + { + if ($reasonCode === null) { + return 'Ready to compare'; + } + + return match ($reasonCode) { + BaselineReasonCodes::COMPARE_PROFILE_NOT_ACTIVE => 'Profile not active', + BaselineReasonCodes::COMPARE_INVALID_SCOPE, + BaselineReasonCodes::COMPARE_MIXED_SCOPE, + BaselineReasonCodes::COMPARE_UNSUPPORTED_SCOPE => 'Scope review required', + BaselineReasonCodes::COMPARE_NO_ACTIVE_SNAPSHOT, + BaselineReasonCodes::COMPARE_NO_CONSUMABLE_SNAPSHOT, + BaselineReasonCodes::COMPARE_SNAPSHOT_BUILDING, + BaselineReasonCodes::COMPARE_SNAPSHOT_INCOMPLETE, + BaselineReasonCodes::COMPARE_SNAPSHOT_SUPERSEDED, + BaselineReasonCodes::COMPARE_INVALID_SNAPSHOT => 'Capture needed before compare', + BaselineReasonCodes::COMPARE_NO_ASSIGNMENT, + BaselineReasonCodes::COMPARE_NO_ELIGIBLE_TARGET => 'Assignment or access required', + default => 'Compare blocked', + }; + } + + private static function baselineDecisionReadinessColor(?string $reasonCode): string + { + return match ($reasonCode) { + null => 'success', + BaselineReasonCodes::COMPARE_PROFILE_NOT_ACTIVE => 'gray', + BaselineReasonCodes::COMPARE_INVALID_SCOPE, + BaselineReasonCodes::COMPARE_MIXED_SCOPE, + BaselineReasonCodes::COMPARE_UNSUPPORTED_SCOPE => 'danger', + default => 'warning', + }; + } + + private static function baselineDecisionReadinessIcon(?string $reasonCode): ?string + { + return match ($reasonCode) { + null => 'heroicon-m-check-badge', + BaselineReasonCodes::COMPARE_PROFILE_NOT_ACTIVE => 'heroicon-m-pause-circle', + BaselineReasonCodes::COMPARE_INVALID_SCOPE, + BaselineReasonCodes::COMPARE_MIXED_SCOPE, + BaselineReasonCodes::COMPARE_UNSUPPORTED_SCOPE => 'heroicon-m-no-symbol', + default => 'heroicon-m-exclamation-triangle', + }; + } + + private static function baselineDecisionReason(BaselineProfile $profile, ?string $reasonCode): string + { + if ($reasonCode === null) { + return 'Current snapshot is consumable and at least one assigned environment is available for compare.'; + } + + return match ($reasonCode) { + BaselineReasonCodes::COMPARE_PROFILE_NOT_ACTIVE => 'Only active baseline profiles can be captured or compared.', + BaselineReasonCodes::COMPARE_INVALID_SCOPE => 'Stored governed-subject scope is invalid. Review the profile definition before compare.', + BaselineReasonCodes::COMPARE_MIXED_SCOPE => 'This profile mixes governed subjects that require different compare strategies. Narrow the selection before compare.', + BaselineReasonCodes::COMPARE_UNSUPPORTED_SCOPE => 'This profile includes governed subjects that are not currently supported for compare.', + BaselineReasonCodes::COMPARE_NO_ELIGIBLE_TARGET => 'No assigned environment is available to this actor for compare.', + default => app(ReasonPresenter::class)->forArtifactTruth($reasonCode, 'artifact_truth')?->shortExplanation + ?: 'Resolve the compare prerequisite before starting this baseline workflow.', + }; + } + + private static function baselineDecisionImpact(?string $reasonCode): string + { + if ($reasonCode === null) { + return 'Operators can compare assigned environments against the current baseline snapshot.'; + } + + return match ($reasonCode) { + BaselineReasonCodes::COMPARE_PROFILE_NOT_ACTIVE => 'Inactive baselines do not drive capture or compare until the profile is reactivated.', + BaselineReasonCodes::COMPARE_INVALID_SCOPE, + BaselineReasonCodes::COMPARE_MIXED_SCOPE, + BaselineReasonCodes::COMPARE_UNSUPPORTED_SCOPE => 'Capture and compare are blocked until governed-subject scope is reviewed.', + BaselineReasonCodes::COMPARE_NO_ACTIVE_SNAPSHOT, + BaselineReasonCodes::COMPARE_NO_CONSUMABLE_SNAPSHOT, + BaselineReasonCodes::COMPARE_SNAPSHOT_BUILDING, + BaselineReasonCodes::COMPARE_SNAPSHOT_INCOMPLETE, + BaselineReasonCodes::COMPARE_SNAPSHOT_SUPERSEDED, + BaselineReasonCodes::COMPARE_INVALID_SNAPSHOT => 'Assignments can be prepared, but compare waits for a complete current snapshot.', + BaselineReasonCodes::COMPARE_NO_ASSIGNMENT, + BaselineReasonCodes::COMPARE_NO_ELIGIBLE_TARGET => 'Compare results stay unavailable until an assigned environment is visible to an authorized operator.', + default => 'Operator action is blocked until the listed prerequisite is resolved.', + }; + } + + private static function baselineDecisionNextAction(BaselineProfile $profile, ?string $reasonCode): string + { + if ($reasonCode === null) { + return 'Compare now'; + } + + if (in_array($reasonCode, [ + BaselineReasonCodes::COMPARE_NO_ACTIVE_SNAPSHOT, + BaselineReasonCodes::COMPARE_NO_CONSUMABLE_SNAPSHOT, + BaselineReasonCodes::COMPARE_SNAPSHOT_BUILDING, + BaselineReasonCodes::COMPARE_SNAPSHOT_INCOMPLETE, + BaselineReasonCodes::COMPARE_SNAPSHOT_SUPERSEDED, + BaselineReasonCodes::COMPARE_INVALID_SNAPSHOT, + ], true)) { + return self::hasManageCapability() + ? 'Capture baseline' + : 'Ask a workspace manager to capture a baseline'; + } + + if (in_array($reasonCode, [ + BaselineReasonCodes::COMPARE_PROFILE_NOT_ACTIVE, + BaselineReasonCodes::COMPARE_INVALID_SCOPE, + BaselineReasonCodes::COMPARE_MIXED_SCOPE, + BaselineReasonCodes::COMPARE_UNSUPPORTED_SCOPE, + ], true)) { + return self::hasManageCapability() + ? 'Edit profile definition' + : 'Ask a workspace manager to review the profile'; + } + + if (in_array($reasonCode, [ + BaselineReasonCodes::COMPARE_NO_ASSIGNMENT, + BaselineReasonCodes::COMPARE_NO_ELIGIBLE_TARGET, + ], true)) { + return self::hasManageCapability() + ? 'Assign environments or review access' + : 'Open compare matrix'; + } + + return app(ReasonPresenter::class)->forArtifactTruth($reasonCode, 'artifact_truth')?->guidanceText() + ?? 'No action needed.'; + } + + private static function assignmentSignal(BaselineProfile $profile): string + { + $assignmentCount = BaselineTenantAssignment::query() + ->where('workspace_id', (int) $profile->workspace_id) + ->where('baseline_profile_id', (int) $profile->getKey()) + ->count(); + + if ($assignmentCount === 0) { + return 'No assigned environments. Assign a managed environment before compare results are useful.'; + } + + $label = $assignmentCount === 1 + ? 'Assigned to 1 environment' + : sprintf('Assigned to %d environments', $assignmentCount); + + if (self::hasEligibleCompareTarget($profile)) { + return $label.' with compare access.'; + } + + return $label.', but no eligible compare target is available to this actor.'; + } + private static function currentSnapshotLabel(BaselineProfile $profile): string { $snapshot = self::effectiveSnapshot($profile); @@ -902,31 +1131,49 @@ private static function latestBaselineCaptureEnvelope(BaselineProfile $profile): private static function compareAvailabilityReason(BaselineProfile $profile): ?string { + $cacheKey = self::profileRequestCacheKey($profile, 'compare-availability-reason'); + + if (request()->attributes->has($cacheKey)) { + $cached = request()->attributes->get($cacheKey); + + return is_string($cached) ? $cached : null; + } + $status = $profile->status instanceof BaselineProfileStatus ? $profile->status : BaselineProfileStatus::tryFrom((string) $profile->status); if ($status !== BaselineProfileStatus::Active) { + request()->attributes->set($cacheKey, BaselineReasonCodes::COMPARE_PROFILE_NOT_ACTIVE); + return BaselineReasonCodes::COMPARE_PROFILE_NOT_ACTIVE; } try { $scope = BaselineScope::fromJsonb(self::scopePayload($profile)); } catch (InvalidArgumentException) { + request()->attributes->set($cacheKey, BaselineReasonCodes::COMPARE_INVALID_SCOPE); + return BaselineReasonCodes::COMPARE_INVALID_SCOPE; } if ($scope->allTypes() === []) { + request()->attributes->set($cacheKey, BaselineReasonCodes::COMPARE_INVALID_SCOPE); + return BaselineReasonCodes::COMPARE_INVALID_SCOPE; } $selection = app(CompareStrategyRegistry::class)->select($scope); if ($selection->isMixed()) { + request()->attributes->set($cacheKey, BaselineReasonCodes::COMPARE_MIXED_SCOPE); + return BaselineReasonCodes::COMPARE_MIXED_SCOPE; } if (! $selection->isSupported()) { + request()->attributes->set($cacheKey, BaselineReasonCodes::COMPARE_UNSUPPORTED_SCOPE); + return BaselineReasonCodes::COMPARE_UNSUPPORTED_SCOPE; } @@ -934,13 +1181,19 @@ private static function compareAvailabilityReason(BaselineProfile $profile): ?st $reasonCode = $resolution['reason_code'] ?? null; if (is_string($reasonCode) && trim($reasonCode) !== '') { + request()->attributes->set($cacheKey, trim($reasonCode)); + return trim($reasonCode); } if (! self::hasEligibleCompareTarget($profile)) { + request()->attributes->set($cacheKey, BaselineReasonCodes::COMPARE_NO_ELIGIBLE_TARGET); + return BaselineReasonCodes::COMPARE_NO_ELIGIBLE_TARGET; } + request()->attributes->set($cacheKey, null); + return null; } @@ -964,9 +1217,17 @@ private static function snapshotReference(BaselineSnapshot $snapshot): string private static function hasEligibleCompareTarget(BaselineProfile $profile): bool { + $cacheKey = self::profileRequestCacheKey($profile, 'eligible-compare-target'); + + if (request()->attributes->has($cacheKey)) { + return (bool) request()->attributes->get($cacheKey); + } + $user = auth()->user(); if (! $user instanceof User) { + request()->attributes->set($cacheKey, false); + return false; } @@ -977,16 +1238,33 @@ private static function hasEligibleCompareTarget(BaselineProfile $profile): bool ->all(); if ($tenantIds === []) { + request()->attributes->set($cacheKey, false); + return false; } $resolver = app(CapabilityResolver::class); - return ManagedEnvironment::query() + $hasEligibleTarget = ManagedEnvironment::query() ->where('workspace_id', (int) $profile->workspace_id) ->whereIn('id', $tenantIds) ->get(['id']) ->contains(fn (ManagedEnvironment $tenant): bool => $resolver->can($user, $tenant, Capabilities::TENANT_SYNC)); + + request()->attributes->set($cacheKey, $hasEligibleTarget); + + return $hasEligibleTarget; + } + + private static function profileRequestCacheKey(BaselineProfile $profile, string $suffix): string + { + return sprintf( + 'baseline-profile-resource:%s:%s:%s:%s', + $suffix, + (string) $profile->getKey(), + (string) (auth()->id() ?? 'guest'), + (string) (app(WorkspaceContext::class)->currentWorkspaceId(request()) ?? 'workspace-missing'), + ); } /** diff --git a/apps/platform/tests/Browser/Spec369BaselineProfileDecisionViewSmokeTest.php b/apps/platform/tests/Browser/Spec369BaselineProfileDecisionViewSmokeTest.php new file mode 100644 index 00000000..b1dbe7a7 --- /dev/null +++ b/apps/platform/tests/Browser/Spec369BaselineProfileDecisionViewSmokeTest.php @@ -0,0 +1,85 @@ +browser()->timeout(60_000); + +function spec369BrowserScreenshotName(string $name): string +{ + return 'spec369-baseline-profile-decision-view-'.$name; +} + +function spec369CopyBrowserScreenshot(string $name): void +{ + $filename = spec369BrowserScreenshotName($name).'.png'; + $source = base_path('tests/Browser/Screenshots/'.$filename); + $targetDirectory = repo_path('specs/369-baseline-profile-decision-view/artifacts/screenshots'); + + if (! is_dir($targetDirectory)) { + @mkdir($targetDirectory, 0755, true); + } + + if (! is_file($source)) { + $source = \Pest\Browser\Support\Screenshot::path($filename); + } + + for ($attempt = 0; $attempt < 10 && ! is_file($source); $attempt++) { + usleep(100_000); + clearstatcache(true, $source); + } + + if (is_file($source) && is_dir($targetDirectory) && is_writable($targetDirectory)) { + @copy($source, $targetDirectory.DIRECTORY_SEPARATOR.$name.'.png'); + } +} + +it('smokes the Baseline Profile decision-first detail view in Spec369', function (): void { + $this->withoutVite(); + + [$user, $tenant] = createUserWithTenant(role: 'owner'); + [$profile] = seedActiveBaselineForTenant($tenant); + + $profile->forceFill([ + 'name' => 'Spec369 Browser Decision Baseline', + 'capture_mode' => BaselineCaptureMode::Opportunistic->value, + ])->save(); + + $this->actingAs($user)->withSession([ + WorkspaceContext::SESSION_KEY => (int) $tenant->workspace_id, + ]); + session()->put(WorkspaceContext::SESSION_KEY, (int) $tenant->workspace_id); + + $path = parse_url( + BaselineProfileResource::getUrl('view', ['record' => $profile], panel: 'admin'), + PHP_URL_PATH, + ); + + $page = visit(is_string($path) ? $path : '/admin/baseline-profiles/'.$profile->getKey()) + ->waitForText('Decision') + ->assertSee('Ready to compare') + ->assertSee('Assignment signal') + ->assertSee('Assigned to 1 environment with compare access.') + ->assertSee('Dominant next action') + ->assertSee('Compare now') + ->assertSee('Related context') + ->assertScript( + "(() => { + const text = document.body.innerText; + + return text.indexOf('Decision') !== -1 + && text.indexOf('Decision') < text.indexOf('Normalization lineage') + && text.indexOf('Decision') < text.indexOf('Metadata') + && text.indexOf('Ready to compare') < text.indexOf('Scope'); + })()", + true, + ) + ->assertNoJavaScriptErrors() + ->assertNoConsoleLogs(); + + $page->screenshot(true, spec369BrowserScreenshotName('decision-first-detail')); + spec369CopyBrowserScreenshot('decision-first-detail'); +}); diff --git a/apps/platform/tests/Feature/Filament/Spec369BaselineProfileDecisionViewTest.php b/apps/platform/tests/Feature/Filament/Spec369BaselineProfileDecisionViewTest.php new file mode 100644 index 00000000..79aae2d2 --- /dev/null +++ b/apps/platform/tests/Feature/Filament/Spec369BaselineProfileDecisionViewTest.php @@ -0,0 +1,156 @@ +forceFill([ + 'name' => 'Spec369 Ready Baseline', + 'capture_mode' => BaselineCaptureMode::Opportunistic->value, + ])->save(); + + session()->put(WorkspaceContext::SESSION_KEY, (int) $tenant->workspace_id); + + return [$user, $tenant, $profile->fresh(), $snapshot->fresh()]; +} + +it('renders a ready baseline profile with a decision-first summary before technical scope', function (): void { + [$user, , $profile, $snapshot] = spec369ReadyProfile(); + + $this->actingAs($user) + ->get(BaselineProfileResource::getUrl('view', ['record' => $profile], panel: 'admin')) + ->assertOk() + ->assertSee('Decision') + ->assertSee('Ready to compare') + ->assertSee('Current snapshot is consumable and at least one assigned environment is available for compare.') + ->assertSee('Operators can compare assigned environments against the current baseline snapshot.') + ->assertSee('Snapshot #'.$snapshot->getKey().' (Complete)') + ->assertSee('Matches current snapshot') + ->assertSee('Assigned to 1 environment with compare access.') + ->assertSee('Dominant next action') + ->assertSee('Compare now') + ->assertSeeInOrder([ + 'Decision', + 'Ready to compare', + 'Baseline truth', + 'Related context', + 'Profile', + 'Scope', + 'Normalization lineage', + 'Metadata', + ]); +}); + +it('shows capture-oriented decision guidance when no consumable snapshot exists', function (): void { + [$user, $tenant] = createUserWithTenant(role: 'owner'); + + $profile = BaselineProfile::factory()->active()->create([ + 'workspace_id' => (int) $tenant->workspace_id, + 'name' => 'Spec369 Capture Needed Baseline', + ]); + + BaselineTenantAssignment::factory()->create([ + 'workspace_id' => (int) $tenant->workspace_id, + 'managed_environment_id' => (int) $tenant->getKey(), + 'baseline_profile_id' => (int) $profile->getKey(), + ]); + + session()->put(WorkspaceContext::SESSION_KEY, (int) $tenant->workspace_id); + + $this->actingAs($user) + ->get(BaselineProfileResource::getUrl('view', ['record' => $profile], panel: 'admin')) + ->assertOk() + ->assertSee('Decision') + ->assertSee('Capture needed before compare') + ->assertSee('Assignments can be prepared, but compare waits for a complete current snapshot.') + ->assertSee('No complete snapshot') + ->assertSee('No capture attempts yet') + ->assertSee('Assigned to 1 environment with compare access.') + ->assertSee('Capture baseline') + ->assertSeeInOrder(['Decision', 'Capture needed before compare', 'Baseline truth', 'Scope']); +}); + +it('shows scope repair guidance for invalid governed-subject scope without exposing raw scope json', function (): void { + [$user, , $profile] = spec369ReadyProfile(); + + DB::table('baseline_profiles') + ->where('id', (int) $profile->getKey()) + ->update([ + 'scope_jsonb' => json_encode([ + 'version' => 2, + 'entries' => [], + ], JSON_THROW_ON_ERROR), + 'updated_at' => now(), + ]); + + $profile = $profile->fresh(); + + $this->actingAs($user) + ->get(BaselineProfileResource::getUrl('view', ['record' => $profile], panel: 'admin')) + ->assertOk() + ->assertSee('Scope review required') + ->assertSee('Stored governed-subject scope is invalid. Review the profile definition before compare.') + ->assertSee('Capture and compare are blocked until governed-subject scope is reviewed.') + ->assertSee('Edit profile definition') + ->assertDontSee('subject_type_keys') + ->assertDontSee('canonical_scope') + ->assertSeeInOrder(['Decision', 'Scope review required', 'Scope', 'Stored scope is invalid']); +}); + +it('keeps readonly members on non-mutating decision copy and disabled high-impact actions', function (): void { + [$owner, $tenant, $profile] = spec369ReadyProfile(); + [$readonly] = createUserWithTenant(tenant: $tenant, user: null, role: 'readonly', workspaceRole: 'readonly'); + + session()->put(WorkspaceContext::SESSION_KEY, (int) $tenant->workspace_id); + + Livewire::actingAs($readonly) + ->test(ViewBaselineProfile::class, ['record' => $profile->getKey()]) + ->assertSee('Assignment or access required') + ->assertSee('No assigned environment is available to this actor for compare.') + ->assertSee('Open compare matrix') + ->assertActionVisible('capture') + ->assertActionDisabled('capture') + ->assertActionVisible('compareNow') + ->assertActionDisabled('compareNow'); + + $this->actingAs($owner); +}); + +it('keeps related snapshot and compare matrix context available below the decision', function (): void { + [$user, , $profile] = spec369ReadyProfile(); + + $this->actingAs($user); + + $entryKeys = collect(BaselineProfileResource::detailRelatedContextEntries($profile)) + ->pluck('key') + ->all(); + + expect($entryKeys)->toContain('baseline_snapshot', 'compare_matrix'); + + $this->get(BaselineProfileResource::getUrl('view', ['record' => $profile], panel: 'admin')) + ->assertOk() + ->assertSee('Related context') + ->assertSee('View snapshot') + ->assertSee('Open compare matrix') + ->assertSeeInOrder(['Decision', 'Related context', 'View snapshot', 'Compare matrix', 'Open compare matrix']); +}); diff --git a/docs/ui-ux-enterprise-audit/page-reports/ui-010-baseline-profiles.md b/docs/ui-ux-enterprise-audit/page-reports/ui-010-baseline-profiles.md index 468ccd0f..e4a44e12 100644 --- a/docs/ui-ux-enterprise-audit/page-reports/ui-010-baseline-profiles.md +++ b/docs/ui-ux-enterprise-audit/page-reports/ui-010-baseline-profiles.md @@ -23,6 +23,12 @@ ## Productization Review - Customer/auditor safety: not directly customer-facing. - Diagnostics: capture/compare evidence should be available on demand. +## Spec 369 Detail Update + +The Baseline Profile detail page now opens with a Decision section before profile metadata or governed-subject normalization detail. The first read answers readiness, decision reason, operational impact, snapshot basis, assignment usefulness, and one dominant next action while keeping Baseline truth and Related context immediately below it. + +Screenshot evidence: `../../specs/369-baseline-profile-decision-view/artifacts/screenshots/decision-first-detail.png`. + ## Information Inventory Default content should include profile status, capture mode, latest snapshot, assignment count, compare posture, and next action. @@ -40,7 +46,7 @@ ## Scores ## Top Issues 1. Generic resource feel hides the product role of baselines. -2. Snapshot truth and assigned-environment impact need stronger hierarchy. +2. Snapshot truth and assigned-environment impact need stronger hierarchy. Spec 369 improves this on the detail page. 3. Dangerous capture/compare actions need target-state review. ## Target Direction diff --git a/specs/369-baseline-profile-decision-view/artifacts/screenshots/decision-first-detail.png b/specs/369-baseline-profile-decision-view/artifacts/screenshots/decision-first-detail.png new file mode 100644 index 0000000000000000000000000000000000000000..1938a2de6c949274158a89cc36193c4d3b54d5cd GIT binary patch literal 207330 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Ðuabe*2o9>#g|FpPbItJ* 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

b6z5> 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 literal 0 HcmV?d00001 diff --git a/specs/369-baseline-profile-decision-view/checklists/requirements.md b/specs/369-baseline-profile-decision-view/checklists/requirements.md new file mode 100644 index 00000000..c7f9b4ab --- /dev/null +++ b/specs/369-baseline-profile-decision-view/checklists/requirements.md @@ -0,0 +1,47 @@ +# Specification Quality Checklist: Spec 369 - Baseline Profile Decision View + +**Purpose**: Validate specification completeness and readiness before implementation +**Created**: 2026-06-09 +**Feature**: `specs/369-baseline-profile-decision-view/spec.md` + +## Candidate Selection Gate + +- [x] CHK001 Selected candidate exists in repo source material (`specs/368-platform-ui-signal-to-noise-browser-audit`). +- [x] CHK002 Selected candidate is not already covered by an active or completed spec. +- [x] CHK003 Completed specs are treated as historical context only. +- [x] CHK004 Scope is the smallest viable slice: existing Baseline Profile detail page only. +- [x] CHK005 Close alternatives are deferred instead of hidden in scope. +- [x] CHK006 Candidate aligns with platform productization and governance operator value. + +## Content Quality + +- [x] CHK007 Spec has clear problem statement and user value. +- [x] CHK008 Spec includes primary users/operators and user stories. +- [x] CHK009 Functional and non-functional requirements are testable. +- [x] CHK010 Out-of-scope boundaries are explicit. +- [x] CHK011 Assumptions and risks are documented. +- [x] CHK012 No `[NEEDS CLARIFICATION]` markers remain. + +## Constitution Alignment + +- [x] CHK013 Workspace ownership and RBAC expectations are stated. +- [x] CHK014 Existing high-impact actions retain confirmation, authorization, audit, and OperationRun behavior. +- [x] CHK015 No new persisted truth, enum/status family, or broad abstraction is introduced. +- [x] CHK016 Provider/platform boundary impact is bounded and documented. +- [x] CHK017 UI/Productization Coverage is completed because a reachable UI surface changes. +- [x] CHK018 Test-governance lane classification is present. + +## Spec Readiness Gate + +- [x] CHK019 `spec.md`, `plan.md`, and `tasks.md` exist. +- [x] CHK020 Plan identifies likely affected repo surfaces and does not contradict current architecture. +- [x] CHK021 Tasks are ordered, small, verifiable, and include tests/validation. +- [x] CHK022 Open questions do not block safe implementation. +- [x] CHK023 Scope is bounded enough for a later implementation loop. +- [x] CHK024 Recommended next step is implementation, not additional preparation. + +## Review Outcome + +- **Candidate Selection Gate**: PASS. +- **Spec Readiness Gate**: PASS after preparation analysis. +- **Manual note**: Implementation must stop and update the spec first if it needs new persistence, a new readiness taxonomy, a global UI framework, or baseline engine changes. diff --git a/specs/369-baseline-profile-decision-view/plan.md b/specs/369-baseline-profile-decision-view/plan.md new file mode 100644 index 00000000..0490d538 --- /dev/null +++ b/specs/369-baseline-profile-decision-view/plan.md @@ -0,0 +1,198 @@ +# Implementation Plan: Spec 369 - Baseline Profile Decision View + +**Branch**: `369-baseline-profile-decision-view` | **Date**: 2026-06-09 | **Spec**: `specs/369-baseline-profile-decision-view/spec.md` +**Input**: Feature specification from `specs/369-baseline-profile-decision-view/spec.md` + +## Summary + +Productize the existing Baseline Profile detail page into a decision-first governance surface. The implementation should keep the existing route, resource, actions, policies, OperationRun start UX, and baseline domain truth intact while changing first-read hierarchy: readiness, reason, impact, snapshot basis, assignment/usefulness, and one safe next action must appear before governed-subject normalization lineage and metadata. + +## Technical Context + +**Language/Version**: PHP 8.4.15 +**Primary Dependencies**: Laravel 12.52, Filament 5.2.1, Livewire 4.1.4, Pest 4.3.1, PostgreSQL via Sail +**Storage**: PostgreSQL, no schema changes expected +**Testing**: Pest Feature/Livewire tests plus bounded Pest Browser smoke if implementation changes rendered layout +**Target Platform**: Laravel Sail local development, Dokploy container deployment later +**Project Type**: Laravel monolith, Filament admin panel +**Performance Constraints**: No new Graph calls or expensive queries during render; reuse existing eager loading and helper methods where possible +**Constraints**: Page-local UI/productization only; no baseline engine, OperationRun lifecycle, provider, shell, route, or migration changes +**Scale/Scope**: Existing Baseline Profile detail route and regression coverage only + +## Candidate Selection Gate + +- **Selected candidate exists in source material**: yes, Spec 368 finding `UI-AUDIT-368-F03` and Candidate B. +- **Not already covered by active/completed spec**: yes. Existing specs cover baseline engine/truth/compare (`116`, `159`, `336`) but not the Spec 368 browser-verified Baseline Profile detail signal-to-noise finding. +- **Completed-spec guardrail**: Related completed specs are context only and must not be edited. +- **Roadmap/product alignment**: yes. This supports the current platform productization direction and closes a high-value governance operator surface gap. +- **Small, reviewable slice**: yes. One existing detail page plus focused tests/smoke. +- **Deferred adjacent concerns**: Backup Set, OperationRun View, Provider Connections, Diagnostics, and global UI rule pack remain follow-ups. +- **Result**: PASS. + +## Constitution Check + +- **Inventory-first, snapshots-second**: PASS - the page continues to display existing Baseline Profile/Snapshot truth and does not fetch Graph data. +- **Read/write separation by default**: PASS - no new mutation is introduced; existing capture/compare high-impact actions retain confirmation and authorization. +- **Single Contract Path to Graph**: PASS - no Graph calls are introduced. +- **Deterministic Capabilities**: PASS - existing `WorkspaceUiEnforcement`, capability resolvers, and policies remain the action truth. +- **Proportionality / Anti-bloat**: PASS - no new persistence, status family, or cross-domain UI framework is planned. +- **Workspace isolation**: PASS - Baseline Profile remains workspace-owned and workspace-scoped. +- **Tenant isolation**: PASS - tenant/environment data appears only through existing assignments, snapshot links, and action targets. +- **RBAC-UX**: PASS - UI state remains non-authoritative; server-side action authorization remains required. +- **UI-COV-001**: PASS with required page-report/coverage update or explicit no-route-change rationale. +- **TEST-GOV-001**: PASS with focused Feature/Browser lane classification. + +## Existing Repository Surfaces + +- `apps/platform/app/Filament/Resources/BaselineProfileResource.php` + - Current infolist sections: Profile, Scope, Baseline truth, Related context, Metadata. + - Existing helper methods already expose scope summary, support readiness, current snapshot, latest attempt, compare readiness, and next step. + - `protected static bool $isGloballySearchable = false`; keep unchanged. +- `apps/platform/app/Filament/Resources/BaselineProfileResource/Pages/ViewBaselineProfile.php` + - Header actions: capture, compare now, More group with compare assigned environments and edit. + - Capture/compare use `->requiresConfirmation()`, shared OperationRun feedback, and workspace capability enforcement. +- Existing tests: + - `apps/platform/tests/Feature/Filament/BaselineProfileCaptureStartSurfaceTest.php` + - `apps/platform/tests/Feature/Filament/BaselineProfileCompareStartSurfaceTest.php` + - `apps/platform/tests/Feature/Baselines/BaselineProfileAuthorizationTest.php` + - `apps/platform/tests/Browser/Spec192RecordPageHeaderDisciplineSmokeTest.php` + - `apps/platform/tests/Browser/Spec202GovernanceSubjectTaxonomySmokeTest.php` +- UI audit sources: + - `specs/368-platform-ui-signal-to-noise-browser-audit/*` + - `docs/ui-ux-enterprise-audit/page-reports/ui-010-baseline-profiles.md` + - `docs/ui-ux-enterprise-audit/route-inventory.md` + - `docs/ui-ux-enterprise-audit/design-coverage-matrix.md` + +## Technical Approach + +1. Verify the current Baseline Profile detail states that need to drive the decision summary: + - active with consumable snapshot + - active without consumable snapshot + - draft/inactive/archived + - invalid/unsupported/mixed governed-subject scope + - assigned and unassigned environments + - authorized and readonly actor states +2. Introduce the smallest derived decision summary shape: + - Prefer existing methods in `BaselineProfileResource`. + - Add a page-local helper only if repeated inline `TextEntry` closures become hard to review. + - Keep it derived-only and request-scoped. +3. Recompose the infolist: + - Add a decision-first section above `Profile`/`Scope`. + - Move normalization lineage and technical metadata below the decision and proof sections. + - Keep current snapshot/latest attempt/compare readiness and related context accessible. +4. Preserve action safety: + - Do not change capture/compare modal behavior except copy/hierarchy if required. + - Keep confirmation, capability checks, notifications, OperationRun links, and browser events. +5. Update focused tests and browser smoke: + - Assert decision content is visible and technical content is secondary. + - Assert readonly/owner action behavior remains stable. + - Capture a bounded browser smoke screenshot for the improved detail page. +6. Update UI audit coverage artifacts: + - Update page report/coverage note for UI-057 detail work. + - If route inventory counts are unchanged, document no route change rather than touching route count tables unnecessarily. + +## Domain / Model Implications + +- No model, migration, table, enum, persisted status, or source-of-truth change. +- Baseline readiness remains derived from existing Baseline Profile/Snapshot/Assignment/Compare truth. +- No data backfill or compatibility behavior is needed. + +## UI / Filament Implications + +- Filament v5 / Livewire v4.1.4 compliance is required. +- Panel providers remain in `apps/platform/bootstrap/providers.php`; no provider registration change. +- `BaselineProfileResource` global search stays disabled. It already has a View page and `$recordTitleAttribute`, but global search is intentionally off for this workspace-owned governance surface. +- Detail page should use native Filament sections/infolist entries where possible. +- Header action discipline remains: one state-sensitive primary action where possible, secondary actions in More or related context, dangerous/destructive actions confirmed. +- No asset registration is expected; `filament:assets` is not newly required by this spec. + +## RBAC / Policy Implications + +- Workspace member access and baseline capabilities remain source of truth. +- Non-member/wrong-workspace access stays deny-as-not-found. +- Readonly members may view but not mutate according to existing tests. +- High-impact actions must continue to enforce authorization server-side, not only through disabled UI state. + +## OperationRun / Observability Implications + +- Existing capture/compare actions continue to create/reuse `OperationRun` values through existing services. +- Existing `OperationUxPresenter`, `OperationRunLinks`, and `OpsUxBrowserEvents` continue to own queued/already-queued feedback. +- No new OperationRun type, lifecycle state, queued notification policy, or reconciliation behavior is introduced. + +## Audit / Evidence Implications + +- No new audit action is expected for pure page render changes. +- Existing capture/compare/archive audit behavior must remain intact. +- Current snapshot and compare matrix links remain evidence/proof navigation, not duplicated truth. + +## Test Strategy + +- Add or update Feature/Livewire tests for: + - ready profile decision summary + - blocked/no snapshot decision summary + - invalid/unsupported scope decision summary + - readonly/member action state + - no raw scope JSON or normalization lineage in the primary decision summary +- Preserve existing tests for: + - capture start authorization and OperationRun feedback + - compare start authorization and OperationRun feedback + - Baseline Profile RBAC 404/403 behavior + - record-page header discipline +- Add bounded browser smoke if rendered hierarchy changes: + - login/fixture using existing helpers + - visit Baseline Profile detail + - assert decision summary appears before technical lineage/metadata in visible page order + - assert no JavaScript errors + - save screenshot in `specs/369-baseline-profile-decision-view/artifacts/screenshots/` + +## Rollout / Deployment Considerations + +- **Migrations**: none expected. +- **Env vars**: none expected. +- **Queues**: no new queues or workers; existing capture/compare queue behavior unchanged. +- **Scheduler**: none. +- **Storage/volumes**: none. +- **Assets**: no new Filament assets expected; no deploy-specific `filament:assets` change. +- **Staging/Production**: Validate on staging with focused Baseline Profile view smoke before production promotion once production exists. + +## UI Audit Close-Out + +- **Route/design coverage counts**: no count change. Spec 369 recomposes the existing Baseline Profile detail view under the existing Filament resource route; it does not add, remove, or reclassify a route. +- **Design coverage matrix**: no count change. `UI-010 Baseline Profiles` remains a Strategic Surface, with the detail-page hierarchy updated inside the existing coverage row. +- **Page report**: `docs/ui-ux-enterprise-audit/page-reports/ui-010-baseline-profiles.md` records the decision-first detail update. +- **Screenshot evidence**: `specs/369-baseline-profile-decision-view/artifacts/screenshots/decision-first-detail.png`. + +## Risk Controls + +- Stop implementation if improving the page requires new persistence, a new readiness enum, a generic UI framework, or broad baseline engine changes. +- Preserve action names and tests unless a naming change is explicitly required by user-facing copy. +- Keep browser fixture cost bounded; do not create a platform-wide fixture suite inside this spec. +- Do not rewrite completed specs or Spec 368 audit history. + +## Implementation Phases + +### Phase 1 - Repo Truth And Test Baseline + +Confirm existing Baseline Profile detail states, helpers, action safety, and current browser evidence. Add failing tests for the desired decision-first first viewport. + +### Phase 2 - Decision Summary Composition + +Recompose the infolist to lead with readiness, reason, impact, snapshot basis, assignment signal, and next action. Demote technical scope/metadata. + +### Phase 3 - Action Safety And Coverage + +Verify capture/compare/archive confirmations, authorization, OperationRun feedback, and global-search posture remain unchanged. + +### Phase 4 - Browser Smoke And UI Audit Close-Out + +Capture before/after proof, update UI audit coverage notes, and record guardrail/smoke outcome. + +## Spec Readiness Gate + +- `spec.md`: present and scoped. +- `plan.md`: present and repo-aware. +- `tasks.md`: generated for later implementation. +- RBAC, workspace isolation, OperationRun semantics, evidence truth, UI coverage, destructive/high-impact action handling, and test lanes are addressed. +- No open question blocks safe implementation. +- Scope is small enough for a bounded implementation loop. +- **Result**: PASS after tasks/checklist generation and preparation analysis. diff --git a/specs/369-baseline-profile-decision-view/spec.md b/specs/369-baseline-profile-decision-view/spec.md new file mode 100644 index 00000000..91759112 --- /dev/null +++ b/specs/369-baseline-profile-decision-view/spec.md @@ -0,0 +1,289 @@ +# Feature Specification: Spec 369 - Baseline Profile Decision View + +**Feature Branch**: `369-baseline-profile-decision-view` +**Created**: 2026-06-09 +**Status**: Draft +**Input**: Spec 368 Platform UI Signal-to-Noise Browser Audit, Candidate B narrowed to the P1 Baseline Profile View finding. + +## Candidate Selection Summary + +- **Selected candidate**: Baseline Profile View decision-first productization. +- **Source**: `specs/368-platform-ui-signal-to-noise-browser-audit/findings.md` finding `UI-AUDIT-368-F03`, `audit.md` prioritized refactor candidate 1, and `spec-candidates.md` Candidate B. +- **Why selected**: It is the highest-priority browser-verified reachable page from Spec 368: the Baseline Profile detail view is a governance source-of-truth page, but its first viewport emphasizes long names, capture mode, normalization lineage, foundations, and metadata before the operator can answer readiness and next action. +- **Smallest viable slice**: Productize only the existing `BaselineProfileResource` detail view (`ViewBaselineProfile`) so it leads with baseline readiness, snapshot truth, assignment usefulness, compare/capture availability, and one safe next action before technical scope and metadata. +- **Deferred close alternatives**: + - Backup Set View: restore-critical but P2 and better handled after the baseline view pattern proves itself. + - OperationRun View: strong current foundation and recently changed by Specs 358-367; avoid reopening OperationRun surfaces immediately. + - Customer Review Workspace: materially covered by Specs 312, 326, 342, 343, 344, 349, and 351; only narrow polish remains. + - Provider Connections and Diagnostics: valid later slices, but lower priority than the P1 Baseline Profile finding for this preparation. + - Global Surface Information Architecture Contract v1: useful as a rule pack, but higher risk of over-generalization; this spec keeps the work page-local. +- **Completed-spec guardrail**: Related baseline truth and compare specs (`116`, `159`, `336`) are completed historical/runtime context and must not be rewritten. Spec `368` is an audit artifact with no application implementation and is used only as candidate source. + +## Spec Candidate Check *(mandatory - SPEC-GATE-001)* + +- **Problem**: Operators open a Baseline Profile detail page to decide whether a governance standard is usable, assigned, captured, comparable, and safe to act on, but the current default layout makes them parse technical scope and metadata before the decision. +- **Today's failure**: An operator can see status, capture mode, governed subject summary, normalization lineage, current snapshot, latest attempt, compare readiness, related context, and metadata as peer sections without a single first-read answer about readiness and the next safe action. +- **User-visible improvement**: The Baseline Profile detail page starts with a decision summary that states readiness, reason, impact, evidence/snapshot basis, assignment/usefulness, and one dominant next action. Technical details remain available but are secondary. +- **Smallest enterprise-capable version**: Reorder and lightly reshape the existing detail view using current Baseline Profile, Snapshot, Assignment, Compare readiness, and OperationRun link truth. Do not create new persistence, engines, statuses, Graph calls, or broad UI frameworks. +- **Explicit non-goals**: No Baseline engine rewrite, no compare algorithm changes, no new BaselineProfile table/columns, no new OperationRun type, no new Graph contract, no restore/backup UI work, no shell/sidebar work, no broad global UI standard, and no customer portal. +- **Permanent complexity imported**: Focused page-local presentation helpers may be added only if the existing resource methods become hard to review. Tests and one browser smoke may be added. No new persisted entity, enum/status family, cross-domain UI framework, or provider abstraction is expected. +- **Why now**: Spec 368 browser-verified this as the highest-priority reachable P1 productization gap after the platform-wide signal-to-noise audit. +- **Why not local**: A purely cosmetic reorder without explicit spec guardrails could leave dangerous actions, OperationRun links, snapshot truth, and technical metadata competing again. This spec defines the bounded decision-first contract and proof requirements. +- **Approval class**: Workflow Compression. +- **Red flags triggered**: UI framework risk (mitigated by page-local scope), high-impact action surface risk (mitigated by preserving existing confirmation/authorization/audit/OperationRun behavior). +- **Score**: Nutzen: 2 | Dringlichkeit: 2 | Scope: 2 | Komplexität: 1 | Produktnähe: 2 | Wiederverwendung: 1 | **Gesamt: 10/12** +- **Decision**: approve. + +## Spec Scope Fields *(mandatory)* + +- **Scope**: workspace. +- **Primary Routes**: `/admin/baseline-profiles/{record}` (`BaselineProfileResource` view page). +- **Secondary Routes For Regression Only**: `/admin/baseline-profiles`, `/admin/baseline-profiles/{record}/compare-matrix`, `/admin/workspaces/{workspace}/environments/{environment}/baseline-compare`. +- **Data Ownership**: `baseline_profiles`, `baseline_snapshots`, and baseline assignments remain workspace-owned or existing tenant/environment-linked truth as currently modeled. No schema change is introduced. +- **RBAC**: Workspace membership plus existing baseline capabilities continue to govern view/manage actions. Non-member/wrong-workspace access remains deny-as-not-found; members missing capabilities remain forbidden or disabled according to existing policy/UI enforcement. + +## UI Surface Impact *(mandatory - UI-COV-001)* + +Does this spec add, remove, rename, or materially change any reachable UI surface? + +- [ ] No UI surface impact +- [x] Existing page changed +- [ ] New page/route added +- [ ] Navigation changed +- [ ] Filament panel/provider surface changed +- [ ] New modal/drawer/wizard/action added +- [x] New table/form/state added +- [ ] Customer-facing surface changed +- [x] Dangerous action changed +- [x] Status/evidence/review presentation changed +- [ ] Workspace/environment context presentation changed + +## UI/Productization Coverage *(mandatory when UI Surface Impact is not "No UI surface impact")* + +- **Route/page/surface**: `/admin/baseline-profiles/{record}`, `apps/platform/app/Filament/Resources/BaselineProfileResource.php`, `apps/platform/app/Filament/Resources/BaselineProfileResource/Pages/ViewBaselineProfile.php`. +- **Current or new page archetype**: Drift / Diff strategic detail surface, existing `UI-057 Baseline Profile Detail/Edit`. +- **Design depth**: Strategic Surface. +- **Repo-truth level**: repo-verified and browser-verified by Spec 368 screenshot `artifacts/screenshots/admin/008-decision-surface-view-baseline-profile.png`. +- **Existing pattern reused**: Baseline Compare decision-first summary from Spec 336, existing `ActionSurfaceDeclaration`, `WorkspaceUiEnforcement`, `BadgeCatalog`/`BadgeRenderer`, `OperationUxPresenter`, and existing Baseline Profile truth helpers. +- **New pattern required**: none beyond a page-local decision summary if existing methods cannot express the hierarchy cleanly. +- **Screenshot required**: yes, before/after desktop; mobile or narrow viewport if the implementation materially changes responsive structure. +- **Page audit required**: yes, update `docs/ui-ux-enterprise-audit/page-reports/ui-010-baseline-profiles.md` and the relevant UI-057 coverage note if runtime changes are implemented. +- **Customer-safe review required**: no; this is an operator/MSP governance surface, not a customer-facing page. +- **Dangerous-action review required**: yes; capture, compare, compare assigned environments, and archive must retain confirmation, authorization, audit/OperationRun behavior, and action hierarchy. +- **Coverage files updated or explicitly not needed**: + - [x] `docs/ui-ux-enterprise-audit/route-inventory.md` - no route change expected; implementation must document no route-inventory change or update only if classification changes. + - [x] `docs/ui-ux-enterprise-audit/design-coverage-matrix.md` - update only if coverage counts/screenshot references change. + - [x] `docs/ui-ux-enterprise-audit/page-reports/...` - update `ui-010-baseline-profiles.md` / UI-057 note after implementation. + - [ ] `docs/ui-ux-enterprise-audit/strategic-surfaces.md` + - [ ] `docs/ui-ux-enterprise-audit/grouped-follow-up-candidates.md` + - [ ] `docs/ui-ux-enterprise-audit/unresolved-pages.md` + - [ ] `N/A - no reachable UI surface impact` +- **No-impact rationale when applicable**: N/A. + +## Cross-Cutting / Shared Pattern Reuse + +- **Cross-cutting feature?**: yes. +- **Interaction class(es)**: status messaging, header actions, action links, evidence/snapshot viewer links, OperationRun links. +- **Systems touched**: Baseline Profile detail infolist, header actions, related context entries, compare/capture notifications, existing baseline action tests, browser smoke. +- **Existing pattern(s) to extend**: Baseline Compare decision-first flow, `ActionSurfaceDeclaration`, `WorkspaceUiEnforcement`, `OperationUxPresenter`, `OperationRunLinks`, `BadgeCatalog`/`BadgeRenderer`. +- **Shared contract / presenter / builder / renderer to reuse**: Existing resource methods first; use `BadgeCatalog`/`BadgeRenderer` for status-like badges; use `OperationRunLinks`/`OperationUxPresenter` for run links/toasts. +- **Why the existing shared path is sufficient or insufficient**: Existing helpers already know snapshot truth, compare readiness, next step, action authorization, and run linking. The gap is hierarchy, not missing domain truth. +- **Allowed deviation and why**: A small page-local derived summary helper is allowed if it replaces scattered inline logic and remains derived-only. +- **Consistency impact**: Baseline detail wording must stay aligned with Baseline Profiles list, Baseline Compare Landing, Baseline Snapshot detail, OperationRun detail, and audit/notification wording. +- **Review focus**: Verify no page-local status taxonomy, duplicate readiness model, or second action eligibility source is introduced. + +## OperationRun UX Impact + +- **Touches OperationRun start/completion/link UX?**: yes, existing capture/compare start and links only. +- **Shared OperationRun UX contract/layer reused**: existing `OperationUxPresenter`, `OperationRunLinks`, `OpsUxBrowserEvents`, and `OperationRunService`-backed capture/compare flows. +- **Delegated start/completion UX behaviors**: queued toast, already-queued toast, `Open operation` link, run-enqueued browser event, and tenant/workspace-safe URL resolution remain delegated to existing shared paths. +- **Local surface-owned behavior that remains**: initiation inputs and page-level guidance only. +- **Queued DB-notification policy**: no new policy; preserve current capture/compare behavior. +- **Terminal notification path**: unchanged. +- **Exception required?**: none expected. + +## Provider Boundary / Platform Core Check + +- **Shared provider/platform boundary touched?**: no material boundary change. +- **Boundary classification**: Baseline Profile UI remains platform-core governance truth; provider-specific details remain under governed subject / Intune scope copy already present. +- **Seams affected**: Display wording for governed subject scope and normalization lineage only. +- **Neutral platform terms preserved or introduced**: workspace, managed environment, baseline, snapshot, compare readiness, governed subject, operation. +- **Provider-specific semantics retained and why**: Intune-specific policy/foundation scope terms remain where they describe current baseline subject support. +- **Why this does not deepen provider coupling accidentally**: The spec does not change contracts, persistence, provider adapters, Graph calls, or subject taxonomy. +- **Follow-up path**: none. + +## UI / Surface Guardrail Impact + +| Surface / Change | Operator-facing surface change? | Native vs Custom | Shared-Family Relevance | State Layers Touched | Exception Needed? | Low-Impact / `N/A` Note | +|---|---|---|---|---|---|---| +| Baseline Profile detail decision summary | yes | Native Filament infolist/resource page, page-local helper if needed | status messaging, action links, evidence links | page, derived display state | no | Existing route and resource only | +| Header action hierarchy | yes | Native Filament actions | dangerous/high-impact action surface | page/action state | no | Preserve existing confirmation/authorization | +| Technical metadata demotion | yes | Native Sections/details/aside where possible | diagnostics/progressive disclosure | page display | no | No raw data removal, only default hierarchy | + +## Decision-First Surface Role + +| Surface | Decision Role | Human-in-the-loop Moment | Immediately Visible for First Decision | On-Demand Detail / Evidence | Why This Is Primary or Why Not | Workflow Alignment | Attention-load Reduction | +|---|---|---|---|---|---|---|---| +| Baseline Profile detail | Primary Decision Surface | Operator decides whether this baseline is ready to capture, compare, assign, or inspect | readiness, reason, impact, snapshot basis, assigned environment signal, one next action | governed subject scope, normalization lineage, metadata, detailed related links | Primary for one baseline's governance standard truth | Baseline setup, capture, compare, and drift workflow | Removes first-read parsing across scope, metadata, and action rows | + +## Audience-Aware Disclosure + +| Surface | Audience Modes In Scope | Decision-First Default-Visible Content | Operator Diagnostics | Support / Raw Evidence | One Dominant Next Action | Hidden / Gated By Default | Duplicate-Truth Prevention | +|---|---|---|---|---|---|---|---| +| Baseline Profile detail | operator-MSP, workspace manager, readonly reviewer | readiness, reason, impact, current snapshot, latest attempt, assignment count/state, compare/capture availability | normalization lineage, governed subject detail, related context | operation proof, raw snapshot/detail pages through existing links | capture baseline, compare now, open snapshot, open compare matrix, or edit profile depending on state/capability | technical IDs/timestamps, normalization lineage, low-level scope payload | One summary states decision; existing sections add proof/detail without restating the same decision | + +## UI/UX Surface Classification + +| Surface | Action Surface Class | Surface Type | Likely Next Operator Action | Primary Inspect/Open Model | Row Click | Secondary Actions Placement | Destructive Actions Placement | Canonical Collection Route | Canonical Detail Route | Scope Signals | Canonical Noun | Critical Truth Visible by Default | Exception Type / Justification | +|---|---|---|---|---|---|---|---|---|---|---|---|---|---| +| Baseline Profile detail | Detail / Header Actions | Drift / Diff decision detail | Capture, compare, open current snapshot, inspect compare matrix, or edit profile | Existing record view | N/A | More group or related context | Existing archive action remains in More/list flow with confirmation | `/admin/baseline-profiles` | `/admin/baseline-profiles/{record}` | workspace-owned profile, assigned managed environments | Baseline profile | readiness, reason, impact, snapshot basis, assignment/usefulness, one next action | none | + +## Operator Surface Contract + +| Surface | Primary Persona | Decision / Operator Action Supported | Surface Type | Primary Operator Question | Default-visible Information | Diagnostics-only Information | Status Dimensions Used | Mutation Scope | Primary Actions | Dangerous Actions | +|---|---|---|---|---|---|---|---|---|---|---| +| Baseline Profile detail | Workspace manager / governance operator | Decide if the baseline can be captured, compared, or needs setup | Baseline governance detail | Is this baseline ready and what should I do next? | readiness, reason, impact, current snapshot truth, latest attempt, assignment state, compare/capture availability | normalization lineage, technical metadata, raw snapshot/run diagnostics through existing related routes | lifecycle, snapshot usability, assignment coverage, compare readiness, operation availability | TenantPilot queues capture/compare OperationRuns; no Microsoft configuration mutation | Capture baseline, Compare now, Open current snapshot, Open compare matrix, Edit profile | Capture/compare/compare assigned remain high-impact confirmed actions; archive remains destructive and confirmed | + +## Proportionality Review + +- **New source of truth?**: no. +- **New persisted entity/table/artifact?**: no. +- **New abstraction?**: no expected; optional page-local helper only if it reduces current inline complexity. +- **New enum/state/reason family?**: no. +- **New cross-domain UI framework/taxonomy?**: no. +- **Current operator problem**: The page does not answer readiness and next action before technical detail. +- **Existing structure is insufficient because**: Existing helper methods expose individual truths, but the page hierarchy still presents them as peer sections. +- **Narrowest correct implementation**: Recompose the existing detail view around a derived decision summary and demote technical detail; preserve all domain behavior. +- **Ownership cost**: Focused tests, screenshot evidence, and one page-report update. +- **Alternative intentionally rejected**: A global UI framework/rule system from Spec 368 Candidate A; this spec keeps the fix page-local. +- **Release truth**: current-release productization truth. + +### Compatibility posture + +This feature assumes a pre-production environment. Backward compatibility, legacy aliases, migration shims, historical fixtures, and compatibility-specific tests are out of scope unless explicitly required by the implementation loop. + +## Testing / Lane / Runtime Impact + +- **Test purpose / classification**: Feature for Filament/Livewire rendering and action state; Browser for integrated first-viewport/screenshot proof. +- **Validation lane(s)**: fast-feedback for focused Pest tests; browser for bounded smoke; `git diff --check`; Pint for touched PHP if implementation changes PHP. +- **Why this classification and these lanes are sufficient**: The change is a Filament detail-view hierarchy and action-affordance change. Feature tests prove server-rendered text/action behavior; browser smoke proves first-viewport signal-to-noise and no JS/layout regression. +- **New or expanded test families**: `Spec369BaselineProfileDecisionViewTest` and optional `Spec369BaselineProfileDecisionViewSmokeTest`. +- **Fixture / helper cost impact**: Use existing baseline profile, snapshot, assignment, and workspace helpers/factories. Do not introduce broad seeded demo fixtures. +- **Heavy-family visibility / justification**: Browser coverage is explicit and limited to the Baseline Profile detail page because the source finding is browser-verified UI signal-to-noise. +- **Special surface test profile**: shared-detail-family / strategic-surface. +- **Standard-native relief or required special coverage**: Native Filament components should carry layout; special coverage required for decision-first default visibility and dangerous-action preservation. +- **Reviewer handoff**: Reviewers must confirm no new readiness truth, no action authorization regression, no technical detail hidden from permitted users, and no raw metadata in the primary decision block. +- **Budget / baseline / trend impact**: none expected; record if browser smoke or fixture setup expands materially. +- **Planned validation commands**: + - `cd apps/platform && ./vendor/bin/sail artisan test --compact --filter=Spec369` + - `cd apps/platform && ./vendor/bin/sail php vendor/bin/pest tests/Browser/Spec369BaselineProfileDecisionViewSmokeTest.php --compact` if browser test is added + - `cd apps/platform && ./vendor/bin/sail artisan test --compact --filter=BaselineProfile` + - `cd apps/platform && ./vendor/bin/sail pint --dirty` + - `git diff --check` +- **Runtime impact**: UI rendering and action hierarchy only; no migrations, env vars, queues, scheduler, storage, or external API changes expected. + +## User Stories & Testing + +### User Story 1 - Decide baseline readiness quickly (Priority: P1) + +As a workspace manager, I want the Baseline Profile detail page to summarize whether the baseline is ready and what I should do next, so I can act without parsing technical scope and metadata first. + +**Independent Test**: Render a profile with current snapshot, latest attempt, assignments, and compare readiness. Assert the first decision section contains readiness, reason, impact, snapshot basis, assignment signal, and one dominant next action before normalization lineage or metadata. + +**Acceptance Scenarios**: + +1. **Given** an active baseline profile with a consumable current snapshot and assigned environments, **When** the detail page renders, **Then** it shows a ready/comparable decision summary and the dominant safe action is compare-oriented when authorized. +2. **Given** an active profile without a consumable snapshot, **When** the detail page renders, **Then** it shows why compare is blocked and the dominant safe action is capture-oriented when authorized. +3. **Given** an invalid or unsupported governed-subject scope, **When** the detail page renders, **Then** it explains the blocker and points to profile review/edit without exposing raw scope JSON in the decision block. + +### User Story 2 - Preserve high-impact action safety (Priority: P1) + +As a reviewer, I want capture/compare/archive actions to keep their confirmation, authorization, audit, and OperationRun behavior while the page layout changes, so productization does not weaken governance safety. + +**Independent Test**: Use existing Livewire action tests plus new assertions to prove capture, compare, and compare assigned environments remain confirmed/capability-gated and keep `Open operation` links/toasts when a run starts or is already queued. + +**Acceptance Scenarios**: + +1. **Given** a readonly workspace member, **When** the detail page renders, **Then** high-impact actions are disabled or hidden exactly as existing policy requires and the decision summary does not imply the actor can mutate. +2. **Given** an owner starts capture or compare, **When** the action succeeds, **Then** the existing OperationRun queued/duplicate feedback and canonical operation link behavior remains unchanged. +3. **Given** an archive/destructive action remains available through existing placement, **When** it is inspected in tests, **Then** it still requires confirmation and authorization. + +### User Story 3 - Keep technical proof accessible but secondary (Priority: P2) + +As a support-oriented operator, I want normalization lineage, timestamps, related context, and technical proof links available after the main decision, so I can diagnose without making every operator parse internals first. + +**Independent Test**: Render the detail page and assert normalization lineage, metadata, related snapshot, compare matrix, and operation proof links remain accessible but are not the first decision content. + +**Acceptance Scenarios**: + +1. **Given** a profile with canonical governed-subject scope, **When** the detail page renders, **Then** normalization lineage is visible in a secondary section or disclosure, not in the main decision block. +2. **Given** a profile has a current snapshot or compare matrix route, **When** the page renders, **Then** related context links remain available and capability-safe. +3. **Given** browser smoke captures the page, **When** the first viewport is reviewed, **Then** technical metadata no longer competes with the primary readiness decision. + +## Functional Requirements + +- **FR-001**: The Baseline Profile detail page MUST render a first-read decision summary above technical scope and metadata. +- **FR-002**: The decision summary MUST state baseline readiness, reason, impact, current snapshot basis, latest attempt state, assignment/usefulness signal, and one dominant next action when a safe action exists. +- **FR-003**: The summary MUST derive only from existing `BaselineProfile`, `BaselineSnapshot`, `BaselineTenantAssignment`, compare readiness, and OperationRun/link truth. +- **FR-004**: The page MUST NOT create a new persisted readiness field, status family, or source of truth. +- **FR-005**: Technical scope detail, normalization lineage, timestamps, raw IDs, and support diagnostics MUST be secondary to the primary decision. +- **FR-006**: Existing related context links to current snapshot and compare matrix MUST remain available and capability-safe. +- **FR-007**: Capture baseline, compare now, compare assigned environments, edit, and archive action availability MUST remain governed by existing server-side authorization and UI enforcement. +- **FR-008**: High-impact capture/compare actions MUST retain `->action(...)`, `->requiresConfirmation()`, existing modal inputs, existing OperationRun queued/duplicate feedback, and canonical `Open operation` links. +- **FR-009**: No existing destructive action may move into a more prominent unsafe placement without explicit confirmation, authorization, and audit proof. +- **FR-010**: The implementation MUST keep `BaselineProfileResource` global search disabled unless a separate spec changes global search posture. +- **FR-011**: The page MUST remain workspace-owned and MUST not inherit hidden environment context for authorization or primary scope. +- **FR-012**: The implementation MUST update UI audit coverage notes or explicitly document why route/design-coverage counts are unchanged. + +## Non-Functional Requirements + +- **NFR-001**: The change MUST remain page-local to Baseline Profile detail unless implementation proves a minimal shared helper is required. +- **NFR-002**: The decision summary MUST remain scan-first and avoid duplicating the same status/reason/next-action content across multiple first-viewport sections. +- **NFR-003**: No Graph calls may occur during UI rendering. +- **NFR-004**: The page MUST continue to render using Filament v5 / Livewire v4-compatible components and tests. +- **NFR-005**: Browser smoke MUST stay bounded to the Baseline Profile detail view and required before/after screenshot evidence. + +## Out Of Scope + +- Baseline capture engine, compare engine, snapshot storage, assignment model, OperationRun lifecycle, provider contracts, migrations, queues, restore/backup workflows, system panel fixtures, global shell density work, and broad UI standards. + +## Acceptance Criteria + +- **AC-001**: Baseline Profile detail first viewport answers "Is this baseline ready and what should I do next?" before showing normalization lineage or metadata. +- **AC-002**: Authorized and unauthorized users see action affordances consistent with existing policy/capability behavior. +- **AC-003**: Capture and compare actions still create or reuse OperationRun feedback through existing shared paths. +- **AC-004**: Current snapshot, latest attempt, compare readiness, assigned environments, and related context remain accurate and accessible. +- **AC-005**: UI audit/page-report coverage is updated or explicitly marked unchanged with a rationale. +- **AC-006**: Focused Pest/Livewire tests and bounded browser smoke pass or a non-run reason is documented. + +## Success Criteria + +- Operators can identify readiness, blocker/reason, impact, and next action from the first decision block without reading normalization lineage. +- No new persisted truth, status family, or broad UI framework is introduced. +- Existing Baseline Profile action safety tests remain green. +- The page earns a materially better signal-to-noise assessment than Spec 368's `2.8` baseline in a follow-up browser review. + +## Risks + +- Moving sections could hide technical evidence needed by support users. +- A derived summary helper could accidentally become a second readiness source. +- Header action hierarchy could regress existing high-impact action safety. +- Browser smoke may require a stable baseline fixture with snapshot and assignment state. + +## Assumptions + +- The existing baseline helpers (`currentSnapshotLabel`, `latestAttemptedSnapshotLabel`, `compareReadinessLabel`, `profileNextStep`, related context entries) are sufficient starting points. +- No schema change is needed. +- `BaselineProfileResource` remains globally searchable disabled. +- Spec 368's browser screenshot is sufficient before-state evidence for candidate selection. + +## Open Questions + +- None blocking preparation. Implementation should verify whether the decision summary can be expressed cleanly inside `BaselineProfileResource::infolist()` or needs one small page-local helper. + +## Follow-up Spec Candidates + +- Backup Set View decision-first productization. +- OperationRun View metadata/proof separation polish, only after Spec 367 actionability settles. +- Global Surface Information Architecture Contract v1 if repeated bloat persists after page-local fixes. +- Diagnostic Surface Separation v1 for Environment Diagnostics, Required Permissions, and system panel fixture coverage. diff --git a/specs/369-baseline-profile-decision-view/tasks.md b/specs/369-baseline-profile-decision-view/tasks.md new file mode 100644 index 00000000..cea0deca --- /dev/null +++ b/specs/369-baseline-profile-decision-view/tasks.md @@ -0,0 +1,101 @@ +# Tasks: Spec 369 - Baseline Profile Decision View + +**Input**: `specs/369-baseline-profile-decision-view/spec.md`, `specs/369-baseline-profile-decision-view/plan.md` +**Prerequisites**: Do not implement until this preparation package has been reviewed. Related completed specs (`116`, `159`, `336`, `368`) are context only and must not be rewritten. + +## Phase 1: Setup And Repo Truth + +**Purpose**: Confirm current implementation truth and protect the existing action safety baseline. + +- [x] T001 Re-read `specs/369-baseline-profile-decision-view/spec.md`, `plan.md`, and `tasks.md` together with `.specify/memory/constitution.md`, `docs/ai-coding-rules.md`, `docs/architecture-guidelines.md`, `docs/filament-guidelines.md`, and `docs/testing-guidelines.md`. +- [x] T002 [P] Inspect current Baseline Profile detail implementation in `apps/platform/app/Filament/Resources/BaselineProfileResource.php` and `apps/platform/app/Filament/Resources/BaselineProfileResource/Pages/ViewBaselineProfile.php`. +- [x] T003 [P] Inspect existing Baseline Profile action and RBAC tests in `apps/platform/tests/Feature/Filament/BaselineProfileCaptureStartSurfaceTest.php`, `apps/platform/tests/Feature/Filament/BaselineProfileCompareStartSurfaceTest.php`, and `apps/platform/tests/Feature/Baselines/BaselineProfileAuthorizationTest.php`. +- [x] T004 [P] Inspect Spec 368 before-state evidence in `specs/368-platform-ui-signal-to-noise-browser-audit/findings.md`, `audit.md`, `page-scorecard.csv`, and screenshot `specs/368-platform-ui-signal-to-noise-browser-audit/artifacts/screenshots/admin/008-decision-surface-view-baseline-profile.png`. +- [x] T005 Confirm `BaselineProfileResource::$isGloballySearchable` stays disabled and provider registration remains unchanged in `apps/platform/bootstrap/providers.php`. + +--- + +## Phase 2: User Story 1 - Decide Baseline Readiness Quickly (P1) + +**Goal**: The Baseline Profile detail page answers readiness, reason, impact, snapshot basis, assignment/usefulness, and one next action before technical detail. + +**Independent Test**: Render profiles in ready, blocked/no-snapshot, and invalid-scope states and assert the decision section appears before normalization lineage or metadata. + +- [x] T006 [P] [US1] Add failing Feature/Livewire coverage for a ready profile decision summary in `apps/platform/tests/Feature/Filament/Spec369BaselineProfileDecisionViewTest.php`. +- [x] T007 [P] [US1] Add failing Feature/Livewire coverage for a no-consumable-snapshot profile showing blocked compare reason and capture-oriented next action in `apps/platform/tests/Feature/Filament/Spec369BaselineProfileDecisionViewTest.php`. +- [x] T008 [P] [US1] Add failing Feature/Livewire coverage for invalid or unsupported governed-subject scope showing review/edit guidance without raw scope JSON in `apps/platform/tests/Feature/Filament/Spec369BaselineProfileDecisionViewTest.php`. +- [x] T009 [US1] Recompose `BaselineProfileResource::infolist()` in `apps/platform/app/Filament/Resources/BaselineProfileResource.php` so the first section is a decision summary with readiness, reason, impact, snapshot basis, assignment signal, and one next action. +- [x] T010 [US1] Reuse existing helper truth in `apps/platform/app/Filament/Resources/BaselineProfileResource.php` for current snapshot, latest attempt, compare readiness, and profile next step before adding any new helper. +- [x] T011 [US1] If repeated inline closures become hard to review, add one derived page-local helper in `apps/platform/app/Filament/Resources/BaselineProfileResource.php` for the decision summary; keep it non-persisted and resource-local. +- [x] T012 [US1] Ensure the decision summary does not render `scope_jsonb`, `subject_type_keys`, `canonical_scope`, raw IDs, or normalization lineage as default primary decision content. + +--- + +## Phase 3: User Story 2 - Preserve High-Impact Action Safety (P1) + +**Goal**: Capture/compare/archive behavior remains confirmed, authorized, audited, and OperationRun-linked while the page hierarchy changes. + +**Independent Test**: Existing capture/compare tests plus new Spec 369 assertions prove actions keep current visibility/disabled/execution semantics. + +- [x] T013 [P] [US2] Extend `apps/platform/tests/Feature/Filament/Spec369BaselineProfileDecisionViewTest.php` or existing BaselineProfile action tests to assert readonly users see non-mutating decision copy and cannot execute capture/compare. +- [x] T014 [P] [US2] Extend action hierarchy assertions in `apps/platform/tests/Feature/Filament/BaselineProfileCaptureStartSurfaceTest.php` and `apps/platform/tests/Feature/Filament/BaselineProfileCompareStartSurfaceTest.php` only if header action order or placement changes. +- [x] T015 [US2] Keep `capture`, `compareNow`, and `compareAssignedTenants` in `apps/platform/app/Filament/Resources/BaselineProfileResource/Pages/ViewBaselineProfile.php` on existing `->action(...)`, `->requiresConfirmation()`, capability enforcement, notification, and `OperationRunLinks` paths. +- [x] T016 [US2] Keep archive behavior in `apps/platform/app/Filament/Resources/BaselineProfileResource.php` confirmed and authorization-gated; do not make destructive actions more visually prominent. +- [x] T017 [US2] Verify queued/already-queued capture and compare feedback still uses `OperationUxPresenter`, `OperationRunLinks`, and `OpsUxBrowserEvents` in `apps/platform/app/Filament/Resources/BaselineProfileResource/Pages/ViewBaselineProfile.php`. + +--- + +## Phase 4: User Story 3 - Keep Technical Proof Accessible But Secondary (P2) + +**Goal**: Technical proof remains reachable after the primary decision, without competing in the first viewport. + +**Independent Test**: Render the page and assert related context, normalization lineage, and metadata remain accessible but are not first-decision content. + +- [x] T018 [P] [US3] Add assertions in `apps/platform/tests/Feature/Filament/Spec369BaselineProfileDecisionViewTest.php` that related context links still include current snapshot and compare matrix when available. +- [x] T019 [P] [US3] Add assertions in `apps/platform/tests/Feature/Filament/Spec369BaselineProfileDecisionViewTest.php` that normalization lineage and metadata remain visible in secondary placement. +- [x] T020 [US3] Adjust section ordering or disclosure treatment in `apps/platform/app/Filament/Resources/BaselineProfileResource.php` so Profile/Scope/Metadata no longer precede the decision summary. +- [x] T021 [US3] Keep `BaselineProfileResource::detailRelatedContextEntries()` links capability-safe and pointed at existing snapshot / compare matrix routes. + +--- + +## Phase 5: UI Audit, Browser Smoke, And Validation + +**Purpose**: Prove the productization change and close the active UI guardrail loop. + +- [x] T022 [P] Add bounded browser smoke in `apps/platform/tests/Browser/Spec369BaselineProfileDecisionViewSmokeTest.php` that visits a Baseline Profile detail with a snapshot and assignment, asserts no JavaScript errors, and verifies the decision summary appears before technical metadata. +- [x] T023 [P] Save after screenshot evidence under `specs/369-baseline-profile-decision-view/artifacts/screenshots/` during browser smoke or manual verification. +- [x] T024 Update `docs/ui-ux-enterprise-audit/page-reports/ui-010-baseline-profiles.md` with the Baseline Profile detail decision-view change and the Spec 369 screenshot/reference. +- [x] T025 Update `docs/ui-ux-enterprise-audit/design-coverage-matrix.md` or record an explicit no-count-change rationale in `specs/369-baseline-profile-decision-view/plan.md` if route/design coverage counts do not change. +- [x] T026 Confirm the implementation does not add Graph/provider client calls to the Baseline Profile detail render path. +- [x] T027 Run `cd apps/platform && ./vendor/bin/sail artisan test --compact --filter=Spec369`. +- [x] T028 Run `cd apps/platform && ./vendor/bin/sail artisan test --compact --filter=BaselineProfile`. +- [x] T029 Run `cd apps/platform && ./vendor/bin/sail php vendor/bin/pest tests/Browser/Spec369BaselineProfileDecisionViewSmokeTest.php --compact` if the browser smoke test is added. +- [x] T030 Run `cd apps/platform && ./vendor/bin/sail pint --dirty`. +- [x] T031 Run `git diff --check`. +- [x] T032 Record the final Livewire v4 compliance, provider registration impact, global-search posture, destructive/high-impact action confirmation/authorization/audit status, asset strategy, tests, deployment impact, and Guardrail / Smoke Coverage result in the implementation close-out response. + +## Dependencies + +- Phase 1 before all implementation tasks. +- US1 before US3 section-order finalization. +- US2 can run in parallel with US1 after action baseline is understood. +- Phase 5 after runtime changes. + +## Parallel Execution Examples + +- T002, T003, and T004 can run in parallel. +- T006, T007, and T008 can be authored in parallel in the same test file only if coordinated carefully; otherwise sequence them to avoid conflicts. +- T013 and T018/T019 can be authored after the primary test fixture shape exists. + +## Test Governance Checklist + +- [x] Lane assignment is named and is the narrowest sufficient proof for the changed behavior. +- [x] New or changed tests stay in the smallest honest family, and browser coverage is explicit. +- [x] Shared helpers, factories, seeds, fixtures, and context defaults stay cheap by default. +- [x] Planned validation commands cover the change without pulling in unrelated lane cost. +- [x] The declared surface test profile (`shared-detail-family` / strategic surface) is explicit. +- [x] Any material budget, baseline, trend, or escalation note is recorded in the active spec or PR. + +## Explicit Non-Goals + +- No migrations, models, services, jobs, policies, routes, Graph contracts, provider adapters, global UI framework, customer portal, backup/restore productization, or OperationRun lifecycle changes unless the spec is updated first.