From edc33a5a1762607661a15a52245a5f2197a85532 Mon Sep 17 00:00:00 2001 From: ahmido Date: Sat, 16 May 2026 22:55:57 +0000 Subject: [PATCH 1/4] spec: add environment-owned surface routing contract (#377) ## Summary\n- add completed Spec 319 artifacts for the environment-owned Baseline Compare routing contract\n- include browser-smoke screenshots and focused validation notes\n- keep the PR diff limited to Spec 319 artifacts because runtime is already present in platform-dev via #374\n\n## Testing\n- git diff --check\n- focused validation recorded in specs/319-environment-owned-surface-routing-shell-context-contract/tasks.md Co-authored-by: Ahmed Darrazi Reviewed-on: https://git.cloudarix.de/ahmido/TenantAtlas/pulls/377 --- .../artifacts/screenshots/.gitkeep | 1 + .../baseline-compare--after-reload.png | Bin 0 -> 110791 bytes .../baseline-compare--back-forward.png | Bin 0 -> 110791 bytes .../decision-register--regression.png | Bin 0 -> 101252 bytes ...rect-clean--baseline-compare--rejected.png | Bin 0 -> 7295 bytes ...t-filtered--baseline-compare--rejected.png | Bin 0 -> 7295 bytes .../environment-cta--baseline-compare.png | Bin 0 -> 110800 bytes .../checklists/requirements.md | 75 +++ .../plan.md | 403 +++++++++++++++ .../spec.md | 489 ++++++++++++++++++ .../tasks.md | 174 +++++++ 11 files changed, 1142 insertions(+) create mode 100644 specs/319-environment-owned-surface-routing-shell-context-contract/artifacts/screenshots/.gitkeep create mode 100644 specs/319-environment-owned-surface-routing-shell-context-contract/artifacts/screenshots/baseline-compare--after-reload.png create mode 100644 specs/319-environment-owned-surface-routing-shell-context-contract/artifacts/screenshots/baseline-compare--back-forward.png create mode 100644 specs/319-environment-owned-surface-routing-shell-context-contract/artifacts/screenshots/decision-register--regression.png create mode 100644 specs/319-environment-owned-surface-routing-shell-context-contract/artifacts/screenshots/direct-clean--baseline-compare--rejected.png create mode 100644 specs/319-environment-owned-surface-routing-shell-context-contract/artifacts/screenshots/direct-filtered--baseline-compare--rejected.png create mode 100644 specs/319-environment-owned-surface-routing-shell-context-contract/artifacts/screenshots/environment-cta--baseline-compare.png create mode 100644 specs/319-environment-owned-surface-routing-shell-context-contract/checklists/requirements.md create mode 100644 specs/319-environment-owned-surface-routing-shell-context-contract/plan.md create mode 100644 specs/319-environment-owned-surface-routing-shell-context-contract/spec.md create mode 100644 specs/319-environment-owned-surface-routing-shell-context-contract/tasks.md diff --git a/specs/319-environment-owned-surface-routing-shell-context-contract/artifacts/screenshots/.gitkeep b/specs/319-environment-owned-surface-routing-shell-context-contract/artifacts/screenshots/.gitkeep new file mode 100644 index 00000000..5e683e28 --- /dev/null +++ b/specs/319-environment-owned-surface-routing-shell-context-contract/artifacts/screenshots/.gitkeep @@ -0,0 +1 @@ +Spec 319 browser verification screenshots are saved here during implementation. diff --git a/specs/319-environment-owned-surface-routing-shell-context-contract/artifacts/screenshots/baseline-compare--after-reload.png b/specs/319-environment-owned-surface-routing-shell-context-contract/artifacts/screenshots/baseline-compare--after-reload.png new file mode 100644 index 0000000000000000000000000000000000000000..12302a986b7465370bf29f2b83fd30182ccc44f8 GIT binary patch literal 110791 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 z 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 literal 0 HcmV?d00001 diff --git a/specs/319-environment-owned-surface-routing-shell-context-contract/artifacts/screenshots/baseline-compare--back-forward.png b/specs/319-environment-owned-surface-routing-shell-context-contract/artifacts/screenshots/baseline-compare--back-forward.png new file mode 100644 index 0000000000000000000000000000000000000000..12302a986b7465370bf29f2b83fd30182ccc44f8 GIT binary patch literal 110791 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 z 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 literal 0 HcmV?d00001 diff --git a/specs/319-environment-owned-surface-routing-shell-context-contract/artifacts/screenshots/decision-register--regression.png b/specs/319-environment-owned-surface-routing-shell-context-contract/artifacts/screenshots/decision-register--regression.png new file mode 100644 index 0000000000000000000000000000000000000000..d89e0169d89ca23064679867a13b5089434c30b6 GIT binary patch literal 101252 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 literal 0 HcmV?d00001 diff --git a/specs/319-environment-owned-surface-routing-shell-context-contract/artifacts/screenshots/direct-filtered--baseline-compare--rejected.png b/specs/319-environment-owned-surface-routing-shell-context-contract/artifacts/screenshots/direct-filtered--baseline-compare--rejected.png new file mode 100644 index 0000000000000000000000000000000000000000..74afb3e9717ccf976bc1b5689d69f4b3dc8a83a8 GIT binary patch literal 7295 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 literal 0 HcmV?d00001 diff --git a/specs/319-environment-owned-surface-routing-shell-context-contract/artifacts/screenshots/environment-cta--baseline-compare.png b/specs/319-environment-owned-surface-routing-shell-context-contract/artifacts/screenshots/environment-cta--baseline-compare.png new file mode 100644 index 0000000000000000000000000000000000000000..78ea0564d656fea1f8b53766e9ab145105085360 GIT binary patch literal 110800 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 literal 0 HcmV?d00001 diff --git a/specs/320-workspace-owned-analysis-surface-registration-shell-cutover/artifacts/screenshots/decision-register--regression-workspace-hub.png b/specs/320-workspace-owned-analysis-surface-registration-shell-cutover/artifacts/screenshots/decision-register--regression-workspace-hub.png new file mode 100644 index 0000000000000000000000000000000000000000..a8861ae4a00234a26e8b2414d5e7eb49fae4c2c8 GIT binary patch literal 72690 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 diff --git a/apps/platform/resources/views/filament/pages/monitoring/audit-log.blade.php b/apps/platform/resources/views/filament/pages/monitoring/audit-log.blade.php index 45431798..d91d145c 100644 --- a/apps/platform/resources/views/filament/pages/monitoring/audit-log.blade.php +++ b/apps/platform/resources/views/filament/pages/monitoring/audit-log.blade.php @@ -1,6 +1,7 @@ @php($selectedAudit = $this->selectedAuditRecord()) @php($selectedAuditLink = $this->selectedAuditTargetLink()) + @php($environmentFilterChip = $this->environmentFilterChip())
@@ -19,6 +20,14 @@
The selected event is URL-addressable through the event query parameter. If the event is no longer visible in the current history view, the page quietly falls back to the unselected log.
+ + @if ($environmentFilterChip !== null) + @include('filament.partials.workspace-hub-environment-filter-chip', [ + 'label' => $environmentFilterChip['label'], + 'clearUrl' => $environmentFilterChip['clear_url'], + 'description' => $environmentFilterChip['description'], + ]) + @endif
diff --git a/apps/platform/tests/Feature/Navigation/Spec321AlertsAuditEnvironmentFilterContractTest.php b/apps/platform/tests/Feature/Navigation/Spec321AlertsAuditEnvironmentFilterContractTest.php new file mode 100644 index 00000000..7617743b --- /dev/null +++ b/apps/platform/tests/Feature/Navigation/Spec321AlertsAuditEnvironmentFilterContractTest.php @@ -0,0 +1,382 @@ +active()->create([ + 'name' => 'Spec321 Environment A', + 'external_id' => 'spec321-environment-a', + ]); + + [$user, $environmentA] = createUserWithTenant(tenant: $environmentA, role: 'owner', workspaceRole: 'owner'); + + $environmentB = ManagedEnvironment::factory()->active()->create([ + 'workspace_id' => (int) $environmentA->workspace_id, + 'name' => 'Spec321 Environment B', + 'external_id' => 'spec321-environment-b', + ]); + + createUserWithTenant(tenant: $environmentB, user: $user, role: 'owner', workspaceRole: 'owner'); + + $workspaceId = (int) $environmentA->workspace_id; + + $rule = AlertRule::factory()->create([ + 'workspace_id' => $workspaceId, + ]); + + $destination = AlertDestination::factory()->create([ + 'workspace_id' => $workspaceId, + ]); + + $deliveryA = AlertDelivery::factory()->create([ + 'workspace_id' => $workspaceId, + 'managed_environment_id' => (int) $environmentA->getKey(), + 'alert_rule_id' => (int) $rule->getKey(), + 'alert_destination_id' => (int) $destination->getKey(), + 'status' => AlertDelivery::STATUS_FAILED, + 'created_at' => now()->subHour(), + ]); + + $deliveryB = AlertDelivery::factory()->create([ + 'workspace_id' => $workspaceId, + 'managed_environment_id' => (int) $environmentB->getKey(), + 'alert_rule_id' => (int) $rule->getKey(), + 'alert_destination_id' => (int) $destination->getKey(), + 'status' => AlertDelivery::STATUS_SENT, + 'created_at' => now()->subHour(), + ]); + + $auditA = spec321AuditRecord($environmentA, [ + 'summary' => 'Spec321 audit event A', + 'resource_id' => '321-a', + ]); + + $auditB = spec321AuditRecord($environmentB, [ + 'summary' => 'Spec321 audit event B', + 'resource_id' => '321-b', + ]); + + $auditWorkspace = spec321AuditRecord(null, [ + 'workspace_id' => $workspaceId, + 'summary' => 'Spec321 workspace audit event', + 'resource_id' => '321-workspace', + ]); + + session()->put(WorkspaceContext::SESSION_KEY, $workspaceId); + + return [$user, $environmentA, $environmentB, compact( + 'workspaceId', + 'rule', + 'destination', + 'deliveryA', + 'deliveryB', + 'auditA', + 'auditB', + 'auditWorkspace', + )]; +} + +function spec321AuditRecord(?ManagedEnvironment $environment, array $attributes = []): AuditLogModel +{ + $workspaceId = array_key_exists('workspace_id', $attributes) + ? (int) $attributes['workspace_id'] + : (int) ($environment?->workspace_id); + + return AuditLogModel::query()->create(array_merge([ + 'workspace_id' => $workspaceId, + 'managed_environment_id' => $environment?->getKey(), + 'actor_email' => 'spec321@example.test', + 'actor_name' => 'Spec321 Operator', + 'action' => 'operation.completed', + 'status' => 'success', + 'resource_type' => 'operation_run', + 'resource_id' => '321', + 'summary' => 'Spec321 audit event', + 'metadata' => [], + 'recorded_at' => now(), + ], $attributes)); +} + +function spec321AlertsKpiValues($component): array +{ + $method = new ReflectionMethod(AlertsKpiHeader::class, 'getStats'); + $method->setAccessible(true); + + return collect($method->invoke($component->instance())) + ->mapWithKeys(fn (Stat $stat): array => [ + (string) $stat->getLabel() => (string) $stat->getValue(), + ]) + ->all(); +} + +function spec321QueryKeys(string $url): array +{ + $query = []; + parse_str((string) parse_url($url, PHP_URL_QUERY), $query); + + return $query; +} + +it('documents_alerts_and_audit_log_filter_contract_decisions', function (): void { + $decision = file_get_contents(repo_path('specs/321-alerts-audit-log-environment-filter-contract-decision/decision.md')); + + expect($decision)->toBeString() + ->and($decision)->toContain('Alerts and Audit Log remain Workspace-owned surfaces.') + ->and($decision)->toContain('environment_filterable_workspace_hub') + ->and($decision)->toContain('configuration_workspace_surface') + ->and($decision)->toContain('environment_id') + ->and($decision)->toContain('No legacy aliases are accepted'); +}); + +it('alerts_support_environment_id_filter_with_visible_chip_and_clear', function (): void { + [$user, $environmentA, , $records] = spec321WorkspaceFixture(); + + $this->actingAs($user); + setAdminPanelContext(); + + $this->get(route('filament.admin.alerts', ['environment_id' => (int) $environmentA->getKey()])) + ->assertRedirect(AlertDeliveryResource::getUrl('index', ['environment_id' => (int) $environmentA->getKey()], panel: 'admin')); + + $this->followingRedirects() + ->get(route('filament.admin.alerts', ['environment_id' => (int) $environmentA->getKey()])) + ->assertOk() + ->assertSee('Environment filter:') + ->assertSee('Spec321 Environment A') + ->assertSee('Clear filter'); + + $values = spec321AlertsKpiValues( + Livewire::withQueryParams(['environment_id' => (int) $environmentA->getKey()]) + ->actingAs($user) + ->test(AlertsKpiHeader::class) + ); + + expect($values)->toMatchArray([ + 'Deliveries (24h)' => '1', + 'Failed (7d)' => '1', + ]); + + $this->followingRedirects() + ->get(route('filament.admin.alerts')) + ->assertOk() + ->assertDontSee('Environment filter:'); + + Livewire::withQueryParams([]) + ->actingAs($user) + ->test(ListAlertDeliveries::class) + ->assertCanSeeTableRecords([$records['deliveryA'], $records['deliveryB']]); +}); + +it('alert_deliveries_support_environment_id_filter_with_visible_chip_and_clear', function (): void { + [$user, $environmentA, , $records] = spec321WorkspaceFixture(); + + $this->actingAs($user); + setAdminPanelContext(); + + $component = Livewire::withQueryParams(['environment_id' => (int) $environmentA->getKey()]) + ->actingAs($user) + ->test(ListAlertDeliveries::class) + ->assertSee('Environment filter:') + ->assertSee('Spec321 Environment A') + ->assertSee('Clear filter') + ->assertSet('tableFilters.managed_environment_id.value', (string) $environmentA->getKey()) + ->assertCanSeeTableRecords([$records['deliveryA']]) + ->assertCanNotSeeTableRecords([$records['deliveryB']]); + + session()->put($component->instance()->getTableFiltersSessionKey(), [ + 'managed_environment_id' => ['value' => (string) $environmentA->getKey()], + 'tableFilters' => [ + 'managed_environment_id' => ['value' => (string) $environmentA->getKey()], + ], + ]); + + $this->get(AlertDeliveryResource::getUrl(panel: 'admin')) + ->assertOk() + ->assertDontSee('Environment filter:'); + + expect(data_get(session()->get($component->instance()->getTableFiltersSessionKey(), []), 'managed_environment_id.value')) + ->toBeNull(); + + Livewire::withQueryParams([]) + ->actingAs($user) + ->test(ListAlertDeliveries::class) + ->assertSet('tableFilters.managed_environment_id.value', null) + ->assertCanSeeTableRecords([$records['deliveryA'], $records['deliveryB']]); +}); + +it('audit_log_supports_environment_id_filter_with_visible_chip_and_clear', function (): void { + [$user, $environmentA, , $records] = spec321WorkspaceFixture(); + + $this->actingAs($user); + setAdminPanelContext(); + + Livewire::withQueryParams([ + 'environment_id' => (int) $environmentA->getKey(), + 'event' => (int) $records['auditB']->getKey(), + ]) + ->actingAs($user) + ->test(AuditLogPage::class) + ->assertSee('Environment filter:') + ->assertSee('Spec321 Environment A') + ->assertSet('tableFilters.managed_environment_id.value', (string) $environmentA->getKey()) + ->assertSet('selectedAuditLogId', null) + ->assertCanSeeTableRecords([$records['auditA']]) + ->assertCanNotSeeTableRecords([$records['auditB'], $records['auditWorkspace']]); + + $this->get(route('admin.monitoring.audit-log')) + ->assertOk() + ->assertDontSee('Environment filter:'); + + Livewire::withQueryParams([]) + ->actingAs($user) + ->test(AuditLogPage::class) + ->assertSet('tableFilters.managed_environment_id.value', null) + ->assertCanSeeTableRecords([$records['auditA'], $records['auditB'], $records['auditWorkspace']]); +}); + +it('alerts_and_audit_log_do_not_accept_legacy_environment_query_aliases', function (): void { + [$user, $environmentA, , $records] = spec321WorkspaceFixture(); + + $this->actingAs($user); + setAdminPanelContext(); + + $this->get(route('filament.admin.alerts', ['managed_environment_id' => (int) $environmentA->getKey()])) + ->assertRedirect(AlertDeliveryResource::getUrl(panel: 'admin')); + + Livewire::withQueryParams(['managed_environment_id' => (int) $environmentA->getKey()]) + ->actingAs($user) + ->test(ListAlertDeliveries::class) + ->assertSet('tableFilters.managed_environment_id.value', null) + ->assertCanSeeTableRecords([$records['deliveryA'], $records['deliveryB']]); + + Livewire::withQueryParams([ + 'tenant' => (int) $environmentA->getKey(), + 'tenant_id' => (int) $environmentA->getKey(), + 'managed_environment_id' => (int) $environmentA->getKey(), + 'environment' => (int) $environmentA->getKey(), + 'tenant_scope' => 'environment', + 'tableFilters' => [ + 'managed_environment_id' => ['value' => (string) $environmentA->getKey()], + ], + ]) + ->actingAs($user) + ->test(AuditLogPage::class) + ->assertSet('tableFilters.managed_environment_id.value', null) + ->assertCanSeeTableRecords([$records['auditA'], $records['auditB'], $records['auditWorkspace']]); +}); + +it('alerts_and_audit_log_reject_cross_workspace_environment_filters', function (): void { + [$user, $environmentA] = spec321WorkspaceFixture(); + + $otherEnvironment = ManagedEnvironment::factory()->active()->create([ + 'name' => 'Spec321 Other Workspace Environment', + ]); + + $this->actingAs($user); + setAdminPanelContext(); + session()->put(WorkspaceContext::SESSION_KEY, (int) $environmentA->workspace_id); + + $this->get(route('filament.admin.alerts', ['environment_id' => (int) $otherEnvironment->getKey()])) + ->assertNotFound(); + + $this->get(route('admin.monitoring.audit-log', ['environment_id' => (int) $otherEnvironment->getKey()])) + ->assertNotFound(); +}); + +it('alerts_and_audit_log_sidebar_entry_is_workspace_wide', function (): void { + [, $environmentA] = spec321WorkspaceFixture(); + + $alertUrl = route('filament.admin.alerts'); + $auditUrl = route('admin.monitoring.audit-log'); + + expect(WorkspaceHubRegistry::cleanUrl($alertUrl))->toBe($alertUrl) + ->and(WorkspaceHubRegistry::cleanUrl($auditUrl))->toBe($auditUrl) + ->and(WorkspaceHubRegistry::cleanUrl(route('filament.admin.alerts', ['environment_id' => (int) $environmentA->getKey()]))) + ->toBe($alertUrl) + ->and(WorkspaceHubRegistry::cleanUrl(route('admin.monitoring.audit-log', ['environment_id' => (int) $environmentA->getKey()]))) + ->toBe($auditUrl); +}); + +it('environment_ctas_to_alerts_and_audit_log_use_environment_id', function (): void { + [$user, $environmentA] = spec321WorkspaceFixture(); + + $this->actingAs($user); + setAdminPanelContext(); + + $targetMethod = new ReflectionMethod(WorkspaceOverviewBuilder::class, 'alertsOverviewTarget'); + $targetMethod->setAccessible(true); + + $alertsDestination = $targetMethod->invoke( + app(WorkspaceOverviewBuilder::class), + new CanonicalNavigationContext( + sourceSurface: 'workspace.overview', + canonicalRouteName: 'admin.home', + backLinkLabel: 'Back to overview', + backLinkUrl: route('admin.home'), + ), + true, + 'Open alerts', + $environmentA, + ); + + expect(spec321QueryKeys((string) $alertsDestination['url'])) + ->toHaveKey('environment_id', (string) $environmentA->getKey()) + ->not->toHaveKey('managed_environment_id'); + + $alertsPage = Livewire::withQueryParams(['environment_id' => (int) $environmentA->getKey()]) + ->actingAs($user) + ->test(Alerts::class) + ->instance(); + + expect(spec321QueryKeys($alertsPage->alertDeliveriesUrl())) + ->toHaveKey('environment_id', (string) $environmentA->getKey()) + ->and(spec321QueryKeys($alertsPage->auditLogUrl())) + ->toHaveKey('environment_id', (string) $environmentA->getKey()); +}); + +it('alert_configuration_surfaces_do_not_emit_environment_filters', function (): void { + [$user, $environmentA] = spec321WorkspaceFixture(); + + $this->actingAs($user); + setAdminPanelContext(); + + $alertsPage = Livewire::withQueryParams(['environment_id' => (int) $environmentA->getKey()]) + ->actingAs($user) + ->test(Alerts::class) + ->instance(); + + expect(spec321QueryKeys($alertsPage->alertRulesUrl())) + ->not->toHaveKey('environment_id') + ->and(spec321QueryKeys($alertsPage->alertDestinationsUrl())) + ->not->toHaveKey('environment_id'); + + $this->get(AlertRuleResource::getUrl('index', ['environment_id' => (int) $environmentA->getKey()], panel: 'admin')) + ->assertOk() + ->assertDontSee('Environment filter:'); + + $this->get(AlertDestinationResource::getUrl('index', ['environment_id' => (int) $environmentA->getKey()], panel: 'admin')) + ->assertOk() + ->assertDontSee('Environment filter:'); + + expect(AlertDeliveryResource::makeViewAlertRulesAction()->getUrl()) + ->toBe(AlertRuleResource::getUrl(panel: 'admin')); +}); diff --git a/specs/321-alerts-audit-log-environment-filter-contract-decision/checklists/requirements.md b/specs/321-alerts-audit-log-environment-filter-contract-decision/checklists/requirements.md new file mode 100644 index 00000000..6d4cd176 --- /dev/null +++ b/specs/321-alerts-audit-log-environment-filter-contract-decision/checklists/requirements.md @@ -0,0 +1,52 @@ +# Requirements Quality Checklist: Spec 321 + +**Purpose**: Validate that the Spec 321 artifacts are complete enough for implementation. +**Created**: 2026-05-17 +**Feature**: `321-alerts-audit-log-environment-filter-contract-decision` + +## Content Quality + +- [x] No implementation details in `spec.md` beyond necessary system contracts and known seams. +- [x] User value and operator/governance outcomes are clear. +- [x] Surface role decisions are explicit. +- [x] All mandatory sections are present. +- [x] No unresolved clarification markers remain. + +## Requirement Completeness + +- [x] Alerts have a final contract. +- [x] Alert Deliveries have a final contract. +- [x] Alert Rules have a final contract. +- [x] Alert Destinations have a final contract. +- [x] Audit Log has a final contract. +- [x] Audit event detail/selection behavior is covered. +- [x] Environment Dashboard CTA behavior is covered. +- [x] Legacy alias rejection is covered. +- [x] Cross-workspace Environment handling is covered. +- [x] Clear/reload/back behavior is covered for filterable surfaces. +- [x] Data scope and visible UI state are both covered. +- [x] Acceptance criteria are measurable. +- [x] Test requirements are explicit. +- [x] Browser verification is explicit. + +## Constitution / Repo Fit + +- [x] Completed specs 313 through 320 were treated as context, not modified. +- [x] Hard cutover/no compatibility posture is explicit. +- [x] No new persisted entity, enum/status family, taxonomy, or framework is introduced. +- [x] No migration is expected. +- [x] Shared pattern reuse is required before new abstraction. +- [x] Filament v5 / Livewire v4 compliance is stated. +- [x] Provider boundary is stated. +- [x] OperationRun impact is stated. + +## Readiness + +- [x] `decision.md` exists and classifies every in-scope surface. +- [x] `plan.md` identifies runtime areas, test lanes, and deployment impact. +- [x] `tasks.md` is ordered and implementation-ready. +- [x] No application implementation was performed during preparation. + +## Notes + +This checklist validates preparation artifacts only. Runtime acceptance remains pending until implementation, tests, and browser verification are completed. diff --git a/specs/321-alerts-audit-log-environment-filter-contract-decision/decision.md b/specs/321-alerts-audit-log-environment-filter-contract-decision/decision.md new file mode 100644 index 00000000..8ee6dd1a --- /dev/null +++ b/specs/321-alerts-audit-log-environment-filter-contract-decision/decision.md @@ -0,0 +1,58 @@ +# Spec 321 Decision: Alerts / Audit Log Environment Filter Contract + +**Status**: Draft decision artifact +**Date**: 2026-05-17 +**Branch**: `321-alerts-audit-log-environment-filter-contract-decision` + +## Decision Summary + +Alerts and Audit Log remain Workspace-owned surfaces. + +The canonical Environment filter key is: + +```text +environment_id +``` + +No legacy aliases are accepted. No remembered Environment fallback is accepted. No Filament tenant fallback is accepted. + +## Surface Decisions + +| Surface | Current behavior | Data model supports environment attribution? | Chosen contract | Reason | Implementation impact | Test impact | +| --- | --- | --- | --- | --- | --- | --- | +| Alerts overview / Alert Center | Registered workspace hub, but Spec 318 found `/admin/alerts?environment_id=...` redirects/drops query or lacks full filter contract. | Partially, through environment-attributable alert delivery signal. Alert rules/destinations are workspace configuration. | `environment_filterable_workspace_hub` | Alerts are an operational signal hub. Operators need "show me alerts for this Environment" behavior, and the delivery signal has reliable `managed_environment_id`. | Resolve canonical `environment_id`, show shared chip, scope environment-attributable KPI/signal data, keep shell Workspace-only, clear with shared resetter. | Clean URL, filtered URL, visible chip, clear, reload, legacy alias rejection, cross-workspace guard. | +| Alert Deliveries | Registered workspace hub/table resource. Has current table filter for `managed_environment_id`, but no canonical visible workspace-hub chip contract. | Yes. `alert_deliveries.managed_environment_id` exists, is nullable, workspace-constrained, and indexed. | `environment_filterable_workspace_hub` | Deliveries are the table-backed alert event/signal surface and can be filtered without inference. | Apply canonical `environment_id` to query/table state using shared resolver, render chip, clear stale Filament/session table filters. | Filtered rows prove data scope; clear and reload safety; legacy aliases ignored. | +| Alert Rules | Registered under Alerts. Workspace configuration surface. Uses workspace-level rule configuration, including targeting settings. | No page-level filter attribution. Rule targeting config is not the same as page ownership/filter state. | `configuration_workspace_surface` | Rules configure workspace alert behavior and should not appear Environment-owned or Environment-filtered. | Do not render chip. Do not accept `environment_id` as filter state. Keep clean links from navigation/CTAs. | Assert `environment_id` does not create chip/filter and Environment CTAs do not emit filters to this surface. | +| Alert Destinations | Registered under Alerts. Workspace configuration surface. | No. Destinations are workspace notification targets. | `configuration_workspace_surface` | Notification destinations are workspace-level configuration, not Environment-scoped operational signal. | Do not render chip. Do not accept `environment_id` as filter state. Keep clean links from navigation/CTAs. | Assert `environment_id` does not create chip/filter and Environment CTAs do not emit filters to this surface. | +| Audit Log | Registered workspace hub. Spec 318 found `/admin/audit-log?environment_id=...` preserves query but shows no visible chip. | Yes. `audit_logs.managed_environment_id` exists, is nullable, indexed, and tied to workspace attribution. | `environment_filterable_workspace_hub` | Audit Log is a workspace governance surface, but many records are reliably Environment-attributable. Filtering by direct attribution is useful and safe. | Resolve canonical `environment_id`, filter by `audit_logs.managed_environment_id`, render chip, keep shell Workspace-only, clear stale query/table/session state. | Clean URL, filtered URL, visible chip, filtered rows, selected event consistency, clear, reload, legacy alias rejection, cross-workspace guard. | +| Audit event detail / selected event state | Same Audit Log page, usually selected through query/state. | Yes when the selected event row has `managed_environment_id`. | `environment_filterable_workspace_hub` | Event detail is metadata inside the Audit Log surface, not a separate Environment-owned page. | If a filter is active, selected event state must remain inside the filtered query scope or be neutralized. Show Environment metadata as event data, not shell ownership. | Assert selected event outside active Environment filter is not shown as the selected detail. | +| Environment Dashboard CTAs to Alerts / Alert Deliveries / Audit Log | Must be inspected during implementation. | Yes for the filterable destinations above. | `environment_filterable_workspace_hub` destinations use canonical `environment_id`. | Environment-origin navigation may preserve Environment focus only when the destination supports the full filter contract. | Add or update links to use `environment_id` only. No legacy params. | Assert CTAs use canonical `environment_id` and no legacy aliases. | +| Environment Dashboard CTAs to Alert Rules / Alert Destinations | Must be inspected during implementation. | No page-level filter attribution. | `configuration_workspace_surface` destinations use clean workspace links or are omitted. | Configuration surfaces should not imply Environment-specific state. | Remove Environment filter params from these destinations. | Assert CTAs emit no Environment filter params. | + +## Final Contract Values + +Allowed values used in this decision: + +```text +environment_filterable_workspace_hub +configuration_workspace_surface +``` + +No surface in scope remains ambiguous. + +## Runtime Constraints + +- Shell remains Workspace-only for all surfaces in this decision. +- Filterable surfaces accept only `environment_id`. +- Legacy aliases are invalid as Environment filter input. +- Cross-workspace or unauthorized Environment IDs must be rejected safely. +- Clear behavior must remove URL, table, deferred table, session, and page Environment filter state. +- No migrations are expected. + +## Reopen Conditions + +Update this decision before implementation continues if: + +- Runtime discovery shows `audit_logs.managed_environment_id` or `alert_deliveries.managed_environment_id` is not reliable. +- A migration or new persisted attribution field becomes necessary. +- A new Alert or Audit sub-surface is discovered that cannot be classified by this artifact. diff --git a/specs/321-alerts-audit-log-environment-filter-contract-decision/plan.md b/specs/321-alerts-audit-log-environment-filter-contract-decision/plan.md new file mode 100644 index 00000000..2ab11642 --- /dev/null +++ b/specs/321-alerts-audit-log-environment-filter-contract-decision/plan.md @@ -0,0 +1,240 @@ +# Implementation Plan: Alerts / Audit Log Environment Filter Contract Decision + +**Branch**: `321-alerts-audit-log-environment-filter-contract-decision` +**Date**: 2026-05-17 +**Spec**: `specs/321-alerts-audit-log-environment-filter-contract-decision/spec.md` +**Decision Artifact**: `specs/321-alerts-audit-log-environment-filter-contract-decision/decision.md` +**Status**: Draft + +## Summary + +Make Alerts and Audit Log unambiguous Workspace-owned surfaces. Alerts overview, Alert Deliveries, and Audit Log become canonical `environment_id` filterable workspace hubs with visible chip and clear behavior. Alert Rules and Alert Destinations remain workspace-level configuration surfaces and must not accept Environment filter state. + +No runtime implementation is performed by this preparation. Runtime work must follow this plan and the tasks file. + +## Technical Context + +**Language / Version**: PHP 8.4.15 +**Primary Framework**: Laravel 12.52.0 +**Admin UI**: Filament 5.2.1 +**Reactive Layer**: Livewire 4.1.4 +**Database**: PostgreSQL +**Testing**: Pest 4.3.1, PHPUnit 12 +**Local Runtime**: Laravel Sail first + +Relevant package posture: + +- Filament v5 requires Livewire v4.0+; this app uses Livewire 4.1.4. +- Laravel 12 provider registration remains in `apps/platform/bootstrap/providers.php`; this spec does not add a panel provider. +- No frontend asset registration or `filament:assets` deployment change is planned. + +## Constitutional Check + +### Pre-Implementation + +- **LEAN-001 Hard Cutover**: Pass. No legacy aliases, compatibility redirects, or dual contracts are allowed. +- **Tenant / Workspace Isolation**: Pass with implementation requirement. `environment_id` must be resolved through workspace and user access checks. +- **Shared Pattern First**: Pass. Reuse `WorkspaceHubEnvironmentFilter`, `WorkspaceHubFilterStateResetter`, clear trait, and shared chip partial. +- **Proportionality**: Pass. No new persisted entity, enum/status family, taxonomy, framework, migration, or dependency. +- **Test Governance**: Pass with required tests and browser verification listed below. +- **Spec Candidate Gate**: Pass. User manually promoted a direct follow-up to Spec 318 findings; completed specs 313-320 were inspected as context. + +### Post-Design + +- No constitutional violation is expected. +- If implementation discovers missing reliable Environment attribution, the spec and decision artifact must be updated before runtime work continues. +- If implementation requires a new persisted attribute or abstraction, the proportionality review must be reopened before code changes continue. + +## Project Structure + +### Documentation / Spec Artifacts + +```text +specs/321-alerts-audit-log-environment-filter-contract-decision/spec.md +specs/321-alerts-audit-log-environment-filter-contract-decision/plan.md +specs/321-alerts-audit-log-environment-filter-contract-decision/tasks.md +specs/321-alerts-audit-log-environment-filter-contract-decision/decision.md +specs/321-alerts-audit-log-environment-filter-contract-decision/checklists/requirements.md +specs/321-alerts-audit-log-environment-filter-contract-decision/artifacts/screenshots/ +``` + +### Runtime Areas For Later Implementation + +```text +apps/platform/app/Support/Navigation/WorkspaceHubRegistry.php +apps/platform/app/Support/Navigation/AdminSurfaceScope.php +apps/platform/app/Support/Navigation/WorkspaceSidebarNavigation.php +apps/platform/app/Support/Navigation/WorkspaceHubEnvironmentFilter.php +apps/platform/app/Support/Navigation/WorkspaceHubFilterStateResetter.php +apps/platform/app/Filament/Concerns/ClearsWorkspaceHubEnvironmentFilterState.php +apps/platform/app/Filament/Pages/Monitoring/Alerts.php +apps/platform/app/Filament/Widgets/AlertsKpiHeader.php +apps/platform/app/Filament/Resources/AlertDeliveryResource.php +apps/platform/app/Filament/Resources/AlertRuleResource.php +apps/platform/app/Filament/Resources/AlertDestinationResource.php +apps/platform/app/Filament/Pages/Monitoring/AuditLog.php +apps/platform/resources/views/filament/pages/monitoring/alerts.blade.php +apps/platform/resources/views/filament/pages/monitoring/audit-log.blade.php +apps/platform/resources/views/filament/partials/workspace-hub-environment-filter-chip.blade.php +apps/platform/app/Support/ManagedEnvironmentLinks.php +apps/platform/app/Support/Operations/OperationRunLinks.php +apps/platform/tests/Feature/Navigation +apps/platform/tests/Feature/Filament +``` + +## Data Model Decision + +No migration is planned. + +Discovered attribution support: + +- `alert_deliveries.managed_environment_id`: reliable nullable Environment attribution with workspace constraint and index. +- `audit_logs.managed_environment_id`: reliable nullable Environment attribution with workspace constraint and indexes. +- `alert_rules`: workspace configuration; no page-level Environment filter contract. +- `alert_destinations`: workspace configuration; no page-level Environment filter contract. + +Filtering must use direct normalized attribution only. It must not infer Environment from text, labels, JSON payload contents, actor/session context, remembered state, provider tenant IDs, or Filament tenant context. + +## UI / Filament Plan + +### Alerts Overview + +- Keep Workspace-only shell. +- Resolve canonical `environment_id` if present and valid. +- Render the shared Environment filter chip in filtered state. +- Ensure KPI/header data that is Environment-attributable is scoped by the active filter. +- Ensure configuration counts are either not presented as Environment-filtered or are clearly workspace-level. +- Link to Alert Deliveries with `environment_id` when filtered. +- Link to Alert Rules and Alert Destinations without Environment filter params. + +### Alert Deliveries + +- Keep table-backed workspace hub behavior. +- Apply `environment_id` as canonical URL filter and synchronize table query state without accepting legacy query aliases. +- Use visible chip and shared clear behavior. +- Filter rows by `managed_environment_id`. + +### Alert Rules / Alert Destinations + +- Remain workspace configuration surfaces. +- Do not render Environment filter chip. +- Do not accept `environment_id` as filter state. +- Keep sidebar/global navigation clean. + +### Audit Log + +- Keep Workspace-only shell. +- Resolve canonical `environment_id` if present and valid. +- Render visible shared chip in filtered state. +- Filter rows by `audit_logs.managed_environment_id`. +- Ensure selected event/detail state cannot show an event outside the active filter. +- Clear URL, chip, table/session filter state, and selected stale filter state. + +## Authorization / Security Plan + +- Use the existing workspace/user access model for Environment resolution. +- Cross-workspace or unauthorized Environment IDs must result in 404 / safe no-access behavior. +- UI visibility is not authorization. +- No page may use remembered Environment, Filament tenant context, or provider tenant aliases as access control input. + +## Navigation / CTA Plan + +- Sidebar and global entries remain clean workspace URLs. +- Environment-owned CTAs to Alerts, Alert Deliveries, and Audit Log may include canonical `environment_id` when preserving Environment focus. +- Environment-owned CTAs to Alert Rules and Alert Destinations must use clean workspace links or be omitted. +- No CTA may emit `tenant`, `tenant_id`, `managed_environment_id`, `environment`, `tenant_scope`, or `tableFilters` as Environment filter input. + +## Testing Plan + +Use Pest 4 feature/browser style matching existing tests. + +Target tests: + +- Decision artifact static guard. +- Alerts overview filtered/clean/chip/clear behavior. +- Alert Deliveries filtered rows/chip/clear behavior. +- Audit Log filtered rows/chip/clear behavior. +- Legacy alias guard for Alerts and Audit Log. +- Cross-workspace Environment guard for filterable surfaces. +- Sidebar/global clean URL regression. +- Environment CTA contract. +- Alert configuration surfaces reject Environment filter state. + +Regression lanes: + +```bash +cd apps/platform && ./vendor/bin/sail artisan test --filter=WorkspaceHubEnvironmentFilterContractTest +cd apps/platform && ./vendor/bin/sail artisan test --filter=WorkspaceHubClearFilterContractTest +cd apps/platform && ./vendor/bin/sail artisan test --filter=LegacyTenantPlatformContextCleanup +cd apps/platform && ./vendor/bin/sail artisan test --filter=WorkspaceOwnedAnalysisSurface +cd apps/platform && ./vendor/bin/sail artisan test --filter=BaselineCompare +``` + +Exact class/filter names may be adjusted to match the repository during implementation. + +## Browser Verification Plan + +Use the in-app browser or project browser smoke workflow after runtime code changes: + +- Alerts clean +- Alerts filtered +- Alerts after clear +- Alerts after reload +- Alert Deliveries filtered +- Audit Log clean +- Audit Log filtered +- Audit Log after clear +- Audit Log after reload +- Environment Dashboard CTA to Alerts/Audit Log + +Save screenshots under: + +```text +specs/321-alerts-audit-log-environment-filter-contract-decision/artifacts/screenshots/ +``` + +## Filament v5 Output Contract + +1. **Livewire v4.0+ compliance**: Required. The app uses Livewire 4.1.4; implementation must not introduce Livewire v3 references. +2. **Provider registration location**: No new panel provider is planned. If one is unexpectedly required, Laravel 12 registration belongs in `apps/platform/bootstrap/providers.php`, not `bootstrap/app.php`. +3. **Global search resources**: `AlertDeliveryResource`, `AlertRuleResource`, and `AlertDestinationResource` currently disable global search. Alerts and Audit Log are pages, not globally searchable resources. This spec must not make them globally searchable without Edit/View page review. +4. **Destructive actions**: This spec should not introduce destructive actions. Existing destructive alert rule/destination actions must preserve confirmation and authorization. Any new destructive action is forbidden unless it executes through `Action::make(...)->action(...)`, has `->requiresConfirmation()`, and enforces authorization. +5. **Asset strategy**: No global or on-demand assets are planned. No deployment `filament:assets` change is required. +6. **Testing plan**: Cover Filament pages/resources as Livewire components and table/action behavior using Filament/Pest patterns already present in the repo. + +## Implementation Phases + +1. Confirm decision artifact and static guards. +2. Add failing contract tests. +3. Implement shared filter resolution/chip/clear on Alerts overview, Alert Deliveries, and Audit Log. +4. Ensure Alert Rules and Alert Destinations reject Environment filter state. +5. Update CTA and navigation helpers. +6. Run targeted tests and regression lanes. +7. Perform focused browser verification and capture screenshots. +8. Run formatting and diff checks. + +## Complexity Tracking + +No complexity violation is expected. + +Potential implementation complexity: + +- Audit Log selected event state may require careful reconciliation with the active Environment filter. +- Alert overview KPIs combine workspace configuration counts and delivery signal counts. +- Existing persisted Filament table filters must be cleared without resurrecting legacy aliases. + +These risks should be handled within existing shared patterns. + +## Deployment / Operations Impact + +Expected: + +- No migrations. +- No seeders. +- No package changes. +- No environment variable changes. +- No queue, scheduler, storage, or volume changes. +- No Dokploy deployment changes. +- No asset build/deploy changes. + +Implementation should still mention staging validation because this changes admin navigation/filter behavior. diff --git a/specs/321-alerts-audit-log-environment-filter-contract-decision/spec.md b/specs/321-alerts-audit-log-environment-filter-contract-decision/spec.md new file mode 100644 index 00000000..aa38f0e4 --- /dev/null +++ b/specs/321-alerts-audit-log-environment-filter-contract-decision/spec.md @@ -0,0 +1,473 @@ +# Feature Specification: Alerts / Audit Log Environment Filter Contract Decision + +**Feature Branch**: `321-alerts-audit-log-environment-filter-contract-decision` +**Created**: 2026-05-17 +**Status**: Draft +**Input**: User supplied Spec 321 draft: "Alerts / Audit Log Environment Filter Contract Decision" +**Type**: Product contract decision / runtime hardening / filter consistency +**Runtime Posture**: Hard cutover. No backwards compatibility. No legacy alias support. + +## Dependencies + +- Spec 313: Full Workspace / Environment Context Browser Verification Audit +- Spec 314: Workspace Hub Navigation Context Contract +- Spec 315: Environment CTA Explicit Filter Contract +- Spec 316: Workspace Hub Clear Filter Contract +- Spec 317: Legacy Tenant / Environment Context Cleanup +- Spec 318: Admin Surface Scope & Shell Context Audit +- Spec 319: Environment-Owned Surface Routing & Shell Context Contract +- Spec 320: Workspace-Owned Analysis Surface Registration & Shell Cutover + +## Spec Candidate Check + +**Candidate Source**: Direct user-provided manual promotion, based on Spec 318 mismatch findings. + +**Completed-Spec Guardrail**: Specs 313 through 320 were inspected as completed context and remain unchanged by this preparation. Spec 321 addresses the unresolved Alerts / Audit Log contract gap explicitly called out by Spec 318. + +**Score**: 9/10. + +**Why now**: + +- Spec 318 identified Alerts and Audit Log as the remaining ambiguous workspace-hub filter surfaces. +- Specs 314 through 320 already established the shared workspace hub, environment filter, clear filter, legacy cleanup, and shell ownership contracts this work must reuse. +- The repo data model supports a hard decision now: + - `alert_deliveries.managed_environment_id` exists and is workspace constrained. + - `audit_logs.managed_environment_id` exists, is indexed, and is workspace constrained. + +**Alternatives deferred**: + +- Spec 322 durable browser no-drift regression coverage is explicitly out of scope. +- Broad redesign of alerts, audit logging, notification routing, or evidence flows is out of scope. +- New persisted entities, packages, migrations, or compatibility redirects are out of scope. + +## Summary + +Resolve the remaining Alerts / Audit Log environment-filter contract gap found by Spec 318. + +TenantPilot has two primary admin context contracts: + +- Workspace hubs use a Workspace-only shell. They may support an explicit, visible, clearable `environment_id` filter. +- Environment-owned pages require an Environment route or context. They show Workspace + Environment shell ownership and do not use workspace-hub-style `environment_id` access. + +Alerts and Audit Log are governance and observability surfaces. They stay Workspace-owned surfaces. This spec decides and prepares the implementation contract for optional canonical Environment filtering on those surfaces. + +## Product Decision + +The chosen contracts are: + +| Surface | Chosen contract | +| --- | --- | +| Alerts overview / Alert Center | `environment_filterable_workspace_hub` | +| Alert Deliveries | `environment_filterable_workspace_hub` | +| Alert Rules | `configuration_workspace_surface` | +| Alert Destinations | `configuration_workspace_surface` | +| Audit Log | `environment_filterable_workspace_hub` | +| Audit event detail state | Same `environment_filterable_workspace_hub` surface, not a separate Environment-owned page | + +Decision details are documented in: + +```text +specs/321-alerts-audit-log-environment-filter-contract-decision/decision.md +``` + +## Hard Cutover Policy + +There is no production data or production environment to preserve. The implementation must not introduce compatibility behavior. + +Only this Environment filter query key is canonical: + +```text +environment_id +``` + +These inputs must not create Environment filter state: + +```text +tenant +tenant_id +managed_environment_id +environment +tenant_scope +tableFilters as URL source +remembered Environment +Filament::getTenant() +getTenant() +``` + +No compatibility redirect, alias support, remembered fallback, hidden fallback, or dual contract is allowed. + +## Spec Scope Fields + +**Primary users**: Workspace operators, security/governance admins, support/admin users reviewing operational signal and auditability. + +**Primary surfaces**: + +- `GET /admin/alerts` +- `GET /admin/alerts/alert-deliveries` +- `GET /admin/alerts/alert-rules` +- `GET /admin/alerts/alert-destinations` +- `GET /admin/audit-log` + +**Related surfaces to inspect during implementation**: + +- Environment Dashboard CTAs and widgets +- Alert widgets/cards and alert KPI header +- Notification or alert link helpers +- Audit support links +- OperationRun and ManagedEnvironment link helpers +- Audit event selection/detail state + +**Persistence impact**: No migrations expected. Existing `managed_environment_id` columns provide the reliable attribution needed for the chosen filterable surfaces. + +**Runtime impact**: Query, navigation, chip, clear behavior, and test/browser coverage only. + +**Out of scope**: + +- Alert type redesign +- Audit schema redesign +- New alert rules or delivery engines +- Provider-specific tenant concepts +- Spec 322 durable browser no-drift infrastructure +- Broad rebaseline of existing browser artifacts + +## Current Repo Truth + +Discovery found these relevant seams: + +- `WorkspaceHubRegistry` already registers `audit_log`, `alerts`, `alert_deliveries`, `alert_rules`, and `alert_destinations` as workspace hub entries. +- `WorkspaceHubEnvironmentFilter` already resolves canonical `environment_id`, constrains by current workspace, checks current user Environment access, and rejects cross-workspace or unauthorized Environment IDs with 404 behavior. +- `WorkspaceHubFilterStateResetter` and `ClearsWorkspaceHubEnvironmentFilterState` already provide shared clear behavior for stale query/table/session filter state. +- `resources/views/filament/partials/workspace-hub-environment-filter-chip.blade.php` already provides a shared visible filter chip. +- `AlertDeliveryResource` is table-backed and has reliable `managed_environment_id` attribution. +- `AlertRuleResource` and `AlertDestinationResource` are workspace configuration resources and should not become environment-filtered. +- `AuditLog` has a table filter for `managed_environment_id`, but Spec 318 found canonical `environment_id` direct URLs currently lack a visible chip and full contract behavior. +- `audit_logs.managed_environment_id` exists, is indexed, and is a reliable attribution column. + +## User Scenarios & Testing + +### User Story 1: Workspace operator filters Alerts by Environment + +As a workspace operator, I can open Alerts cleanly for all environments or open Alerts with `?environment_id={id}` to focus on one Managed Environment without changing shell ownership. + +**Independent Test**: Open `/admin/alerts` and `/admin/alerts?environment_id={validEnvironmentId}`. Verify clean state is workspace-wide, filtered state shows the shared chip, the shell remains Workspace-only, clear returns to clean URL, and no legacy query alias creates filter state. + +**Acceptance Scenarios**: + +1. Given a Workspace has multiple Managed Environments and alert delivery data, when the operator opens the clean Alerts URL, then the page shows Workspace-only shell and all-environment copy. +2. Given a valid Environment ID in the current Workspace, when the operator opens Alerts with `environment_id`, then the page shows `Environment filter: {environment name}` and Environment-scoped signal where the data model supports it. +3. Given the operator clears the filter, when the page reloads, then the URL is clean and the Environment chip does not return. + +### User Story 2: Workspace operator filters Alert Deliveries by Environment + +As a workspace operator, I can use Alert Deliveries as the table-backed alert signal surface and apply the same canonical `environment_id` filter contract. + +**Independent Test**: Open `/admin/alerts/alert-deliveries?environment_id={validEnvironmentId}`. Verify visible chip, filtered rows, clear behavior, and no Environment shell ownership. + +**Acceptance Scenarios**: + +1. Given deliveries exist for two environments, when the filtered URL is opened for one Environment, then only deliveries for that Environment are shown. +2. Given alert rules or destinations are opened with `environment_id`, then those configuration surfaces do not create an Environment chip or Environment filter state. + +### User Story 3: Governance admin filters Audit Log by Environment + +As a governance admin, I can open Audit Log cleanly for workspace-wide events or explicitly filter it by Environment when audit entries carry reliable Environment attribution. + +**Independent Test**: Open `/admin/audit-log` and `/admin/audit-log?environment_id={validEnvironmentId}`. Verify clean state is workspace-wide, filtered state shows the chip, rows are filtered by `audit_logs.managed_environment_id`, selected event detail remains consistent with the filter, and clear is reload-safe. + +**Acceptance Scenarios**: + +1. Given audit logs exist for two environments, when the filtered URL is opened, then only matching Environment-attributed audit rows appear. +2. Given an audit event detail is selected while an Environment filter is active, when the event does not belong to that Environment, then it is not shown as the selected detail. +3. Given an audit row has no Environment attribution, when an Environment filter is active, then the row is excluded from the filtered results. + +### User Story 4: Environment Dashboard CTAs follow the contract + +As an operator starting from an Environment-owned page, I can use CTAs that either pass canonical `environment_id` to filterable workspace hubs or use clean workspace links for configuration surfaces. + +**Independent Test**: Inspect and browser-test Environment Dashboard or related Environment CTAs. Verify Alerts, Alert Deliveries, and Audit Log CTAs use `environment_id` when they claim Environment focus, while Alert Rules and Alert Destinations do not receive Environment filter params. + +## Edge Cases + +- `environment_id` belongs to another Workspace: reject with 404 / safe no-access and do not switch Workspace. +- `environment_id` belongs to current Workspace but current user lacks access: reject with 404 / safe no-access. +- `environment_id` is malformed or missing: no filter state should be created. +- Legacy aliases appear with or without `environment_id`: only canonical `environment_id` may control filter state. +- Stale `tableFilters`, `tableDeferredFilters`, persisted Filament/session state, or Livewire state exists: clear and clean entry must neutralize stale Environment-like state. +- Browser back/forward after filter and clear must not create mismatched URL/chip/data state. +- Alert Rules and Alert Destinations must stay workspace configuration surfaces even though rule configuration may contain tenant/environment targeting semantics. +- Audit events with null `managed_environment_id` remain visible in workspace-wide Audit Log but are excluded from Environment-filtered Audit Log. + +## Requirements + +### Functional Requirements + +- **FR-001**: The implementation MUST preserve Workspace-only shell ownership for Alerts, Alert Deliveries, Alert Rules, Alert Destinations, and Audit Log. +- **FR-002**: Alerts overview MUST support clean workspace-wide URL `/admin/alerts` and filtered URL `/admin/alerts?environment_id={id}`. +- **FR-003**: Alert Deliveries MUST support clean workspace-wide URL `/admin/alerts/alert-deliveries` and filtered URL `/admin/alerts/alert-deliveries?environment_id={id}`. +- **FR-004**: Audit Log MUST support clean workspace-wide URL `/admin/audit-log` and filtered URL `/admin/audit-log?environment_id={id}`. +- **FR-005**: Alert Rules and Alert Destinations MUST remain workspace configuration surfaces and MUST NOT create Environment filter state from `environment_id`. +- **FR-006**: Filterable surfaces MUST resolve `environment_id` through the shared `WorkspaceHubEnvironmentFilter` or an equivalent shared adapter that preserves workspace and user access checks. +- **FR-007**: Filterable surfaces MUST show the shared visible Environment filter chip when a valid `environment_id` filter is active. +- **FR-008**: The chip clear action MUST reuse the Spec 316 shared clear/reset behavior and remove URL, Livewire, Filament table, deferred table, and persisted session Environment-like state. +- **FR-009**: Sidebar and global workspace hub entries MUST generate clean URLs without Environment query params. +- **FR-010**: Environment-owned CTAs to filterable surfaces MUST use canonical `environment_id` if they intend to preserve Environment focus. +- **FR-011**: Environment-owned CTAs to Alert Rules or Alert Destinations MUST use clean workspace links or be omitted if an Environment-focused link would be misleading. +- **FR-012**: Legacy aliases `tenant`, `tenant_id`, `managed_environment_id`, `environment`, `tenant_scope`, and `tableFilters` as URL source MUST NOT create Environment filter state. +- **FR-013**: Cross-workspace or unauthorized Environment IDs MUST be rejected with safe no-access behavior and MUST NOT leak data or switch Workspace. +- **FR-014**: Alert Deliveries filtering MUST use reliable `managed_environment_id` attribution only. +- **FR-015**: Audit Log filtering MUST use reliable `audit_logs.managed_environment_id` attribution only. +- **FR-016**: The implementation MUST NOT infer Environment attribution from labels, descriptions, actor/session context, remembered Environment, provider tenant external IDs, or arbitrary JSON text. +- **FR-017**: Audit event detail/selection state MUST stay consistent with any active `environment_id` filter. +- **FR-018**: Alerts overview KPI or summary data MUST either apply the active Environment filter where it uses environment-attributable data or clearly avoid implying Environment-specific counts for non-attributable configuration data. +- **FR-019**: Workspace-wide copy MUST say all environments, workspace-wide, all alerts, or all events as appropriate when no filter is active. +- **FR-020**: Filtered copy MUST use `Environment filter: {environment name}` through the shared chip pattern. +- **FR-021**: No migration, seeder, package, environment variable, queue, scheduler, storage, or deployment asset change is expected or allowed unless the spec is updated before implementation. +- **FR-022**: No backwards compatibility layer, legacy query alias support, compatibility redirect, or dual contract is allowed. + +### Non-Functional Requirements + +- **NFR-001**: Workspace and Environment isolation MUST remain enforceable in queries and authorization. +- **NFR-002**: Data filtering MUST be reload-safe, shareable by URL, and safe across browser back/forward where covered by browser verification. +- **NFR-003**: The implementation MUST reuse existing shared navigation/filter/reset/chip seams before introducing any new abstraction. +- **NFR-004**: Filament v5 and Livewire v4 patterns MUST be used. No Filament v3/v4 APIs or Livewire v3 references are allowed. +- **NFR-005**: Tests MUST cover both visible UI state and actual data scope for filterable surfaces. + +## UI / Surface Guardrail Impact + +### Decision-First Surface Role + +- Alerts overview: Workspace-owned operational signal hub with optional explicit Environment filter. +- Alert Deliveries: Workspace-owned table-backed operational signal hub with optional explicit Environment filter. +- Alert Rules: Workspace-level configuration surface. +- Alert Destinations: Workspace-level configuration surface. +- Audit Log: Workspace-owned auditability surface with optional explicit Environment filter. + +### Audience-Aware Disclosure + +Filtered state must be visible and unambiguous. Operators must never have to infer from URL alone whether the page is Environment-filtered. + +### UI/UX Surface Classification + +This is an operator/admin UX change to existing Filament pages and resources. It is not a marketing, website, or public-facing surface. + +### Operator Surface Contract + +- Use existing Filament table/page structure. +- Use the shared workspace hub Environment filter chip where possible. +- Do not introduce custom visual systems, new card-heavy layouts, or marketing copy. +- Do not publish Filament internal views. + +## Cross-Cutting / Shared Pattern Reuse + +Implementation must inspect and reuse these existing seams before adding code: + +- `WorkspaceHubRegistry` +- `AdminSurfaceScope` +- `WorkspaceSidebarNavigation` +- `WorkspaceHubEnvironmentFilter` +- `WorkspaceHubFilterStateResetter` +- `ClearsWorkspaceHubEnvironmentFilterState` +- `workspace-hub-environment-filter-chip` partial +- Existing page state contract helpers +- Existing audit and alert resource query scopes + +Any new helper must be justified by reducing duplication across Alerts and Audit Log without weakening existing contracts from Specs 314 through 320. + +## OperationRun UX Impact + +No new operation start, operation run detail, or operation lifecycle behavior is introduced. Existing OperationRun audit or navigation links must only be updated if they currently emit non-canonical Environment parameters or imply a filtered Alerts/Audit destination without using `environment_id`. + +## Provider Boundary + +This spec is provider-neutral. It must not introduce Microsoft Graph tenant concepts, provider tenant aliases, or provider-specific Environment inference. The only Environment filter key is internal canonical `environment_id`. + +## Proportionality Review + +This spec introduces no new persisted entity, enum/status family, taxonomy, or framework. It updates the product contract and prepares implementation for existing surfaces using existing columns and shared navigation/filter abstractions. Therefore the constitution proportionality threshold for new persisted abstractions is not triggered. + +If implementation discovers that a new persisted attribute or abstraction is required, work must stop and this spec/plan/tasks must be updated before runtime changes continue. + +## Testing Requirements + +Required tests: + +- `it('documents_alerts_and_audit_log_filter_contract_decisions')` +- `it('alerts_support_environment_id_filter_with_visible_chip_and_clear')` +- `it('alert_deliveries_support_environment_id_filter_with_visible_chip_and_clear')` +- `it('audit_log_supports_environment_id_filter_with_visible_chip_and_clear')` +- `it('alerts_and_audit_log_do_not_accept_legacy_environment_query_aliases')` +- `it('alerts_and_audit_log_reject_cross_workspace_environment_filters')` +- `it('alerts_and_audit_log_sidebar_entry_is_workspace_wide')` +- `it('environment_ctas_to_alerts_and_audit_log_use_environment_id')` +- `it('alert_configuration_surfaces_do_not_emit_environment_filters')` + +Regression lanes: + +- Workspace hub registry and clean navigation tests from Spec 314. +- Environment CTA explicit filter tests from Spec 315. +- Clear filter contract tests from Spec 316. +- Legacy tenant/environment cleanup tests from Spec 317. +- Baseline Compare Environment-owned tests from Spec 319. +- Workspace-owned analysis shell tests from Spec 320. + +## Browser Verification Required + +Perform focused browser verification after runtime implementation: + +1. Open Alerts clean URL and verify Workspace-only shell, workspace-wide copy, and no chip. +2. Open Alerts with `?environment_id={id}` and verify chip, Workspace-only shell, and aligned filtered signal. +3. Clear Alerts filter, reload, and verify clean workspace-wide state. +4. Open Alert Deliveries with `?environment_id={id}` and verify chip, filtered rows, clear, and reload safety. +5. Open Audit Log clean URL and verify Workspace-only shell, workspace-wide copy, and no chip. +6. Open Audit Log with `?environment_id={id}` and verify chip, filtered rows, selected event consistency, clear, and reload safety. +7. Verify Environment Dashboard CTAs use `environment_id` only for filterable destinations and clean links for configuration destinations. +8. Verify browser back/forward after filter and clear does not create URL/chip/data mismatch. + +Screenshots, when captured, should be saved under: + +```text +specs/321-alerts-audit-log-environment-filter-contract-decision/artifacts/screenshots/ +``` + +Suggested names: + +```text +alerts--clean.png +alerts--filtered.png +alerts--after-clear.png +alerts--after-reload.png +alert-deliveries--filtered.png +audit-log--clean.png +audit-log--filtered.png +audit-log--after-clear.png +audit-log--after-reload.png +environment-cta--alerts.png +environment-cta--audit-log.png +``` + +## Acceptance Criteria + +### Decision + +- [ ] `decision.md` exists. +- [ ] Alerts have final contract `environment_filterable_workspace_hub`. +- [ ] Alert Deliveries have final contract `environment_filterable_workspace_hub`. +- [ ] Alert Rules have final contract `configuration_workspace_surface`. +- [ ] Alert Destinations have final contract `configuration_workspace_surface`. +- [ ] Audit Log has final contract `environment_filterable_workspace_hub`. +- [ ] No Alerts/Audit surface remains ambiguous. + +### URL / Query + +- [ ] Clean URLs open workspace-wide. +- [ ] Sidebar/global URLs contain no Environment params. +- [ ] Only `environment_id` is accepted for filterable surfaces. +- [ ] Legacy query aliases are not accepted. +- [ ] Cross-workspace Environment IDs are rejected. + +### Shell / UI + +- [ ] Alerts shell is Workspace-only. +- [ ] Alert Deliveries shell is Workspace-only. +- [ ] Alert Rules and Alert Destinations shell remains Workspace-only configuration. +- [ ] Audit Log shell is Workspace-only. +- [ ] Filtered state uses visible Environment chip. +- [ ] Workspace-wide state does not show Environment chip. +- [ ] No active Environment shell ownership appears. + +### Data Scope + +- [ ] Alert Deliveries are filtered by reliable `managed_environment_id`. +- [ ] Alerts overview Environment-attributable signal is filtered or non-attributable configuration counts are clearly not implied to be filtered. +- [ ] Audit Log is filtered by reliable `audit_logs.managed_environment_id`. +- [ ] No remembered Environment fallback applies. +- [ ] No Filament tenant fallback applies. +- [ ] No legacy table filter resurrects Environment scope. + +### Clear / Reload + +- [ ] Clear removes `environment_id`. +- [ ] Clear removes visible chip. +- [ ] Clear neutralizes stale table/session state. +- [ ] Reload after clear stays workspace-wide. +- [ ] Browser back/forward does not create mismatch where covered. + +### CTAs + +- [ ] Environment CTAs to Alerts, Alert Deliveries, or Audit Log use `environment_id` when preserving Environment focus. +- [ ] Environment CTAs to Alert Rules or Alert Destinations do not emit Environment filters. +- [ ] No CTA emits legacy params. + +### Regression + +- [ ] Spec 314 clean workspace hub entry remains green. +- [ ] Spec 315 `environment_id` contract remains green. +- [ ] Spec 316 clear filter remains green. +- [ ] Spec 317 legacy cleanup remains green. +- [ ] Spec 319 Baseline Compare remains Environment-owned. +- [ ] Spec 320 workspace-owned analysis remains Workspace-only. + +## Success Criteria + +- **SC-001**: A valid filtered Alerts or Audit Log URL visibly shows exactly one active Environment chip and Workspace-only shell. +- **SC-002**: A clean Alerts or Audit Log URL never inherits remembered Environment state. +- **SC-003**: Legacy query aliases do not change data, chip, shell, or clear state. +- **SC-004**: Cross-workspace Environment IDs never leak data. +- **SC-005**: Clear returns the page to a shareable, reload-safe clean URL. + +## Assumptions + +- The app remains pre-production; hard cutover is acceptable. +- Existing `managed_environment_id` columns are the reliable attribution source for chosen filterable surfaces. +- No migration is needed. +- Alert Rules and Alert Destinations remain workspace-level configuration, even when individual rule configuration can target tenants/environments. + +## Risks + +- Existing persisted Filament table filter state may conflict with canonical URL filter state if not explicitly reset. +- Alerts overview combines configuration and delivery data, so implementation must avoid implying that workspace-level configuration counts are Environment-filtered unless they truly are. +- Audit event detail selection could show a stale event outside the active Environment filter if selection state is not reconciled. + +## Follow-Up + +Spec 322 should add durable browser no-drift regression coverage for all context contracts after Spec 321 runtime implementation is complete. + +## Required Final Report For Implementation + +When Spec 321 runtime implementation completes, report: + +```text +Spec 321 completed. + +Chosen contracts: +- Alerts: environment_filterable_workspace_hub +- Alert Deliveries: environment_filterable_workspace_hub +- Alert Rules: configuration_workspace_surface +- Alert Destinations: configuration_workspace_surface +- Audit Log: environment_filterable_workspace_hub + +Changed behavior: +... + +Decision artifact: +specs/321-alerts-audit-log-environment-filter-contract-decision/decision.md + +Files changed: +... + +Tests: +- command: +- result: + +Browser verification: +... + +Remaining follow-up: +- 322: + +No migrations were created. +No seeders were changed. +No packages, env vars, queues, scheduler, storage, or deployment asset changes were made. +No backwards compatibility layer was introduced. +No legacy query alias support was added. +``` diff --git a/specs/321-alerts-audit-log-environment-filter-contract-decision/tasks.md b/specs/321-alerts-audit-log-environment-filter-contract-decision/tasks.md new file mode 100644 index 00000000..e747aba3 --- /dev/null +++ b/specs/321-alerts-audit-log-environment-filter-contract-decision/tasks.md @@ -0,0 +1,123 @@ +# Tasks: Alerts / Audit Log Environment Filter Contract Decision + +**Input**: Spec artifacts from `specs/321-alerts-audit-log-environment-filter-contract-decision/` +**Prerequisites**: `spec.md`, `plan.md`, `decision.md` +**Runtime posture**: Hard cutover. No legacy alias support. + +## Phase 1: Discovery Confirmation + +- [x] T001 Re-read `specs/321-alerts-audit-log-environment-filter-contract-decision/spec.md`, `plan.md`, and `decision.md` before runtime implementation starts. +- [x] T002 Re-read Spec 318 artifacts: `audit-report.md`, `surface-inventory.md`, `page-matrix.md`, `mismatch-findings.md`, and `recommended-fixes.md`. +- [x] T003 Confirm related completed specs 314 through 320 are context only and do not need edits for Spec 321. +- [x] T004 Confirm `alert_deliveries.managed_environment_id` and `audit_logs.managed_environment_id` are still present and indexed before implementing filter queries. +- [x] T005 Inspect current route names for Alerts, Alert Deliveries, Alert Rules, Alert Destinations, and Audit Log. + +## Phase 2: Tests First + +- [x] T006 Add a static/spec guard test named `it('documents_alerts_and_audit_log_filter_contract_decisions')`. +- [x] T007 Add Alerts overview contract test `it('alerts_support_environment_id_filter_with_visible_chip_and_clear')`. +- [x] T008 Add Alert Deliveries contract test `it('alert_deliveries_support_environment_id_filter_with_visible_chip_and_clear')`. +- [x] T009 Add Audit Log contract test `it('audit_log_supports_environment_id_filter_with_visible_chip_and_clear')`. +- [x] T010 Add legacy alias guard test `it('alerts_and_audit_log_do_not_accept_legacy_environment_query_aliases')`. +- [x] T011 Add cross-workspace guard test `it('alerts_and_audit_log_reject_cross_workspace_environment_filters')`. +- [x] T012 Add sidebar/global navigation regression test `it('alerts_and_audit_log_sidebar_entry_is_workspace_wide')`. +- [x] T013 Add Environment CTA contract test `it('environment_ctas_to_alerts_and_audit_log_use_environment_id')`. +- [x] T014 Add configuration-surface guard test `it('alert_configuration_surfaces_do_not_emit_environment_filters')`. +- [x] T015 Ensure tests prove data scope, not only URL or visible chip state. + +## Phase 3: Shared Contract Wiring + +- [x] T016 Inspect `apps/platform/app/Support/Navigation/WorkspaceHubRegistry.php` and confirm Alerts, Alert Deliveries, and Audit Log remain registered as workspace hubs. +- [x] T017 Confirm `WorkspaceHubRegistry::cleanUrl()` continues to strip Environment query params from sidebar/global entries. +- [x] T018 Inspect `apps/platform/app/Support/Navigation/WorkspaceHubEnvironmentFilter.php` and reuse it for canonical `environment_id` resolution. +- [x] T019 Reuse `apps/platform/app/Support/Navigation/WorkspaceHubFilterStateResetter.php` for clear behavior. +- [x] T020 Reuse `apps/platform/app/Filament/Concerns/ClearsWorkspaceHubEnvironmentFilterState.php` where page/resource architecture supports it. +- [x] T021 Reuse `apps/platform/resources/views/filament/partials/workspace-hub-environment-filter-chip.blade.php` for visible filter state. +- [x] T022 Do not add a page-local Environment resolver unless existing architecture requires a minimal adapter. + +## Phase 4: Alerts Overview + +- [x] T023 Update `apps/platform/app/Filament/Pages/Monitoring/Alerts.php` to resolve canonical `environment_id` for the current Workspace. +- [x] T024 Keep Alerts overview shell Workspace-only in all filtered and unfiltered states. +- [x] T025 Render the shared Environment filter chip in `apps/platform/resources/views/filament/pages/monitoring/alerts.blade.php` when the filter is active. +- [x] T026 Ensure the clear action on Alerts overview uses shared reset behavior and returns to clean `/admin/alerts`. +- [x] T027 Update `apps/platform/app/Filament/Widgets/AlertsKpiHeader.php` so Environment-attributable delivery signal counts respect the active filter. +- [x] T028 Ensure workspace-level configuration counts on Alerts overview are not mislabeled as Environment-filtered counts. +- [x] T029 Ensure Alerts overview links to Alert Deliveries preserve canonical `environment_id` when filtered. +- [x] T030 Ensure Alerts overview links to Alert Rules and Alert Destinations do not include Environment filter params. + +## Phase 5: Alert Deliveries + +- [x] T031 Update `apps/platform/app/Filament/Resources/AlertDeliveryResource.php` query/table behavior to apply canonical `environment_id` through shared resolution. +- [x] T032 Filter Alert Deliveries rows by reliable `managed_environment_id`. +- [x] T033 Keep Alert Deliveries shell Workspace-only in all filtered and unfiltered states. +- [x] T034 Render the shared Environment filter chip on the Alert Deliveries list page when filtered. +- [x] T035 Ensure clear removes `environment_id`, `tableFilters`, `tableDeferredFilters`, persisted Filament/session filter state, and visible chip. +- [x] T036 Ensure legacy URL aliases do not prefill the table filter. +- [x] T037 Ensure clean Alert Deliveries entry is workspace-wide and reload-safe. + +## Phase 6: Alert Rules and Alert Destinations + +- [x] T038 Confirm `apps/platform/app/Filament/Resources/AlertRuleResource.php` remains a workspace configuration surface. +- [x] T039 Confirm `apps/platform/app/Filament/Resources/AlertDestinationResource.php` remains a workspace configuration surface. +- [x] T040 Ensure Alert Rules do not render an Environment filter chip from `environment_id`. +- [x] T041 Ensure Alert Destinations do not render an Environment filter chip from `environment_id`. +- [x] T042 Ensure Environment Dashboard or Alert overview CTAs to Alert Rules use clean workspace links. +- [x] T043 Ensure Environment Dashboard or Alert overview CTAs to Alert Destinations use clean workspace links. + +## Phase 7: Audit Log + +- [x] T044 Update `apps/platform/app/Filament/Pages/Monitoring/AuditLog.php` to resolve canonical `environment_id` for the current Workspace. +- [x] T045 Filter Audit Log rows by reliable `audit_logs.managed_environment_id` when the filter is active. +- [x] T046 Keep Audit Log shell Workspace-only in all filtered and unfiltered states. +- [x] T047 Render the shared Environment filter chip in `apps/platform/resources/views/filament/pages/monitoring/audit-log.blade.php` when filtered. +- [x] T048 Ensure Audit Log clear removes `environment_id`, table filters, deferred filters, persisted session state, and visible chip. +- [x] T049 Ensure Audit Log clean entry does not inherit remembered Environment state. +- [x] T050 Ensure selected audit event/detail state cannot show an event outside the active Environment filter. +- [x] T051 Ensure audit events with null `managed_environment_id` remain visible workspace-wide and are excluded when filtered. + +## Phase 8: Navigation, Links, and CTAs + +- [x] T052 Inspect `apps/platform/app/Support/Navigation/WorkspaceSidebarNavigation.php` and confirm sidebar entries for Alerts and Audit Log remain clean. +- [x] T053 Inspect Environment Dashboard CTAs and widgets for Alerts or Audit Log links. +- [x] T054 Update Environment-origin CTAs to Alerts, Alert Deliveries, and Audit Log to use canonical `environment_id` only when preserving Environment focus. +- [x] T055 Remove `environment_id` from Environment-origin CTAs to Alert Rules and Alert Destinations. +- [x] T056 Inspect `apps/platform/app/Support/ManagedEnvironmentLinks.php` for any Alerts/Audit helpers or related links that need canonicalization. +- [x] T057 Inspect `apps/platform/app/Support/Operations/OperationRunLinks.php` for Alerts/Audit links that need canonicalization. +- [x] T058 Inspect notification, alert, and audit link helpers for legacy `tenant`, `tenant_id`, `managed_environment_id`, `environment`, `tenant_scope`, or `tableFilters` query output. + +## Phase 9: Regression and Safety + +- [x] T059 Run targeted Alerts/Audit contract tests. +- [x] T060 Run Spec 315 environment filter contract regression tests. +- [x] T061 Run Spec 316 clear filter contract regression tests. +- [x] T062 Run Spec 317 legacy tenant cleanup regression tests. +- [x] T063 Run Spec 314 workspace hub navigation regression tests. +- [x] T064 Run Spec 319 Baseline Compare Environment-owned regression tests. +- [x] T065 Run Spec 320 workspace-owned analysis shell regression tests. +- [x] T066 Run formatting for touched PHP files. +- [x] T067 Run `git diff --check`. + +## Phase 10: Browser Verification + +> 2026-05-17 note: attempted integrated browser verification, but the Playwright MCP browser profile was locked by another running browser process (`mcp-chrome-6176c52`). Existing Pest browser smoke `tests/Browser/Spec193MonitoringSurfaceHierarchySmokeTest.php` passed and covers `/admin/alerts`, but the requested screenshot set remains pending. + +- [ ] T068 Start the local Sail/browser-ready environment. +- [ ] T069 Open Alerts clean URL and capture `artifacts/screenshots/alerts--clean.png`. +- [ ] T070 Open Alerts filtered URL and capture `artifacts/screenshots/alerts--filtered.png`. +- [ ] T071 Clear Alerts filter, reload, and capture `artifacts/screenshots/alerts--after-clear.png` and `alerts--after-reload.png`. +- [ ] T072 Open Alert Deliveries filtered URL and capture `artifacts/screenshots/alert-deliveries--filtered.png`. +- [ ] T073 Open Audit Log clean URL and capture `artifacts/screenshots/audit-log--clean.png`. +- [ ] T074 Open Audit Log filtered URL and capture `artifacts/screenshots/audit-log--filtered.png`. +- [ ] T075 Clear Audit Log filter, reload, and capture `artifacts/screenshots/audit-log--after-clear.png` and `audit-log--after-reload.png`. +- [ ] T076 Verify Environment Dashboard CTAs to Alerts/Audit Log and capture useful CTA screenshots. +- [ ] T077 Verify browser back/forward after filter and clear does not create URL/chip/data mismatch. + +## Phase 11: Final Report + +- [ ] T078 Report chosen contracts for Alerts, Alert Deliveries, Alert Rules, Alert Destinations, and Audit Log. +- [ ] T079 Report changed behavior and files changed. +- [ ] T080 Report test commands and results, including any unrelated residual failures. +- [ ] T081 Report browser verification and screenshot paths. +- [ ] T082 Report that no migrations, seeders, packages, env vars, queues, scheduler, storage, or deployment asset changes were made unless the spec was explicitly updated. +- [ ] T083 Report that no backwards compatibility layer or legacy query alias support was introduced. From ec4ff1074c46a11484bfaebc9d46a354c08a3a18 Mon Sep 17 00:00:00 2001 From: ahmido Date: Sun, 17 May 2026 11:34:31 +0000 Subject: [PATCH 4/4] Spec 322: add browser no-drift regression guards (#379) ## Summary - add the Spec 322 artifact set for the browser no-drift regression guard - add Feature navigation guards for admin surface scope, environment CTA URLs, and legacy alias rejection - add Browser smoke coverage for workspace hubs, environment-owned surfaces, workspace-owned analysis surfaces, and alerts/audit flows - add the Spec 322 browser support harness used by the new smoke coverage ## Validation - `cd apps/platform && ./vendor/bin/sail artisan test tests/Feature/Navigation/Spec322AdminSurfaceScopeContractTest.php tests/Feature/Navigation/Spec322LegacyQueryAliasGuardTest.php tests/Feature/Navigation/Spec322EnvironmentCtaUrlContractTest.php --compact` - `cd apps/platform && ./vendor/bin/sail artisan test tests/Browser/Spec322WorkspaceHubNoDriftSmokeTest.php tests/Browser/Spec322EnvironmentOwnedSurfaceSmokeTest.php tests/Browser/Spec322WorkspaceOwnedAnalysisSmokeTest.php tests/Browser/Spec322AlertsAuditNoDriftSmokeTest.php --compact` - `cd apps/platform && ./vendor/bin/sail pint --dirty` - `git diff --check` ## Notes - a broader filtered regression run still reports existing Baseline Compare feature-test failures outside this diff Co-authored-by: Ahmed Darrazi Reviewed-on: https://git.cloudarix.de/ahmido/TenantAtlas/pulls/379 --- .../Spec322AlertsAuditNoDriftSmokeTest.php | 91 ++++ ...pec322EnvironmentOwnedSurfaceSmokeTest.php | 62 +++ .../Spec322WorkspaceHubNoDriftSmokeTest.php | 123 ++++++ ...Spec322WorkspaceOwnedAnalysisSmokeTest.php | 51 +++ ...c322WorkspaceEnvironmentBrowserHarness.php | 307 ++++++++++++++ .../Spec322AdminSurfaceScopeContractTest.php | 184 ++++++++ .../Spec322EnvironmentCtaUrlContractTest.php | 105 +++++ .../Spec322LegacyQueryAliasGuardTest.php | 267 ++++++++++++ .../artifacts/screenshots/.gitkeep | 1 + .../checklists/requirements.md | 59 +++ .../coverage-manifest.md | 65 +++ .../plan.md | 314 ++++++++++++++ .../spec.md | 393 ++++++++++++++++++ .../tasks.md | 217 ++++++++++ .../test-plan.md | 139 +++++++ 15 files changed, 2378 insertions(+) create mode 100644 apps/platform/tests/Browser/Spec322AlertsAuditNoDriftSmokeTest.php create mode 100644 apps/platform/tests/Browser/Spec322EnvironmentOwnedSurfaceSmokeTest.php create mode 100644 apps/platform/tests/Browser/Spec322WorkspaceHubNoDriftSmokeTest.php create mode 100644 apps/platform/tests/Browser/Spec322WorkspaceOwnedAnalysisSmokeTest.php create mode 100644 apps/platform/tests/Browser/Support/Spec322WorkspaceEnvironmentBrowserHarness.php create mode 100644 apps/platform/tests/Feature/Navigation/Spec322AdminSurfaceScopeContractTest.php create mode 100644 apps/platform/tests/Feature/Navigation/Spec322EnvironmentCtaUrlContractTest.php create mode 100644 apps/platform/tests/Feature/Navigation/Spec322LegacyQueryAliasGuardTest.php create mode 100644 specs/322-browser-no-drift-regression-guard/artifacts/screenshots/.gitkeep create mode 100644 specs/322-browser-no-drift-regression-guard/checklists/requirements.md create mode 100644 specs/322-browser-no-drift-regression-guard/coverage-manifest.md create mode 100644 specs/322-browser-no-drift-regression-guard/plan.md create mode 100644 specs/322-browser-no-drift-regression-guard/spec.md create mode 100644 specs/322-browser-no-drift-regression-guard/tasks.md create mode 100644 specs/322-browser-no-drift-regression-guard/test-plan.md diff --git a/apps/platform/tests/Browser/Spec322AlertsAuditNoDriftSmokeTest.php b/apps/platform/tests/Browser/Spec322AlertsAuditNoDriftSmokeTest.php new file mode 100644 index 00000000..425b1e70 --- /dev/null +++ b/apps/platform/tests/Browser/Spec322AlertsAuditNoDriftSmokeTest.php @@ -0,0 +1,91 @@ +browser()->timeout(45_000); + +it('Spec322 smokes alerts overview and alert deliveries no drift behavior', function (): void { + $fixture = Spec322Harness::fixture(); + + Spec322Harness::authenticate($this, $fixture['user'], $fixture['workspace'], $fixture['environmentA']); + + Spec322Harness::assertWorkspaceOnly( + visit(route('filament.admin.alerts'))->waitForText('Alerts'), + null, + $fixture['environmentA']->name, + ); + + $filteredAlerts = visit(route('filament.admin.alerts', [ + 'environment_id' => (int) $fixture['environmentA']->getKey(), + ])); + + Spec322Harness::assertFilteredWorkspaceHub($filteredAlerts, $fixture['environmentA'], 'Sent'); + + $page = visit(AlertDeliveryResource::getUrl('index', [ + 'environment_id' => (int) $fixture['environmentA']->getKey(), + ], panel: 'admin')); + + Spec322Harness::assertFilteredWorkspaceHub($page, $fixture['environmentA'], 'Sent'); + + Spec322Harness::clearWorkspaceHubEnvironmentFilter($page); + + Spec322Harness::assertWorkspaceOnly($page, 'Sent', $fixture['environmentA']->name); + + $page->script('window.location.reload();'); + Spec322Harness::assertWorkspaceOnly($page, 'Sent', $fixture['environmentA']->name); + + $page->script('window.history.back();'); + Spec322Harness::assertFilteredWorkspaceHub($page, $fixture['environmentA'], 'Sent'); + + $page->script('window.history.forward();'); + Spec322Harness::assertWorkspaceOnly($page, 'Sent', $fixture['environmentA']->name); +}); + +it('Spec322 smokes audit log filtered and clean entries without shell drift', function (): void { + $fixture = Spec322Harness::fixture(); + + Spec322Harness::authenticate($this, $fixture['user'], $fixture['workspace'], $fixture['environmentA']); + + Spec322Harness::assertFilteredWorkspaceHub( + visit(route('admin.monitoring.audit-log', [ + 'environment_id' => (int) $fixture['environmentA']->getKey(), + ])), + $fixture['environmentA'], + 'Spec322 browser audit B', + ); + + $page = visit(route('admin.monitoring.audit-log')); + + Spec322Harness::assertWorkspaceOnly($page, 'Spec322 browser audit B', $fixture['environmentA']->name); + + $page->script('window.location.reload();'); + Spec322Harness::assertWorkspaceOnly($page, 'Spec322 browser audit B', $fixture['environmentA']->name); +}); + +it('Spec322 smokes alert configuration surfaces ignore stray environment filters', function (): void { + $fixture = Spec322Harness::fixture(); + + Spec322Harness::authenticate($this, $fixture['user'], $fixture['workspace'], $fixture['environmentA']); + + $configurationUrls = [ + AlertRuleResource::getUrl('index', [ + 'environment_id' => (int) $fixture['environmentA']->getKey(), + ], panel: 'admin'), + AlertDestinationResource::getUrl('index', [ + 'environment_id' => (int) $fixture['environmentA']->getKey(), + ], panel: 'admin'), + ]; + + foreach ($configurationUrls as $url) { + visit($url) + ->waitForText(__('localization.shell.no_environment_selected')) + ->assertDontSee('Environment filter:') + ->assertNoJavaScriptErrors() + ->assertNoConsoleLogs(); + } +}); diff --git a/apps/platform/tests/Browser/Spec322EnvironmentOwnedSurfaceSmokeTest.php b/apps/platform/tests/Browser/Spec322EnvironmentOwnedSurfaceSmokeTest.php new file mode 100644 index 00000000..7c66404f --- /dev/null +++ b/apps/platform/tests/Browser/Spec322EnvironmentOwnedSurfaceSmokeTest.php @@ -0,0 +1,62 @@ +browser()->timeout(45_000); + +it('Spec322 smokes environment owned route and shell contracts', function (): void { + $fixture = Spec322Harness::fixture(); + + Spec322Harness::authenticate($this, $fixture['user'], $fixture['workspace'], $fixture['environmentA']); + + $environmentRoutes = [ + 'environment dashboard' => [ + 'url' => EnvironmentDashboard::getUrl(panel: 'admin', tenant: $fixture['environmentA']), + 'text' => $fixture['environmentA']->name, + ], + 'baseline compare' => [ + 'url' => ManagedEnvironmentLinks::baselineCompareUrl($fixture['environmentA']), + 'text' => 'Baseline Compare', + ], + 'required permissions' => [ + 'url' => ManagedEnvironmentLinks::requiredPermissionsUrl($fixture['environmentA']), + 'text' => 'Required permissions', + ], + ]; + + foreach ($environmentRoutes as $route) { + $page = visit($route['url']) + ->waitForText($route['text']) + ->assertSee($fixture['environmentA']->name) + ->assertScript('window.location.pathname.includes("/workspaces/")', true) + ->assertScript('window.location.pathname.includes("/environments/")', true) + ->assertScript('! window.location.search.includes("environment_id=")', true) + ->assertNoJavaScriptErrors() + ->assertNoConsoleLogs(); + + $page->script('window.location.reload();'); + + $page + ->waitForText($route['text']) + ->assertSee($fixture['environmentA']->name) + ->assertNoJavaScriptErrors() + ->assertNoConsoleLogs(); + } +}); + +it('Spec322 smokes baseline compare rejects old workspace style access', function (): void { + $fixture = Spec322Harness::fixture(); + + Spec322Harness::authenticate($this, $fixture['user'], $fixture['workspace'], $fixture['environmentA']); + + visit('/admin/baseline-compare-landing?environment_id='.(int) $fixture['environmentA']->getKey()) + ->assertScript( + 'document.body.innerText.includes("404") || document.body.innerText.includes("Not Found") || document.body.innerText.includes("No access")', + true, + ) + ->assertNoJavaScriptErrors(); +}); diff --git a/apps/platform/tests/Browser/Spec322WorkspaceHubNoDriftSmokeTest.php b/apps/platform/tests/Browser/Spec322WorkspaceHubNoDriftSmokeTest.php new file mode 100644 index 00000000..2dd80710 --- /dev/null +++ b/apps/platform/tests/Browser/Spec322WorkspaceHubNoDriftSmokeTest.php @@ -0,0 +1,123 @@ +browser()->timeout(90_000); + +it('Spec322 smokes clean workspace hub entry from environment origin without drift', function (): void { + $fixture = Spec322Harness::fixture(); + + Spec322Harness::authenticate($this, $fixture['user'], $fixture['workspace'], $fixture['environmentA']); + + visit(EnvironmentDashboard::getUrl(panel: 'admin', tenant: $fixture['environmentA'])) + ->assertSee($fixture['environmentA']->name) + ->assertNoJavaScriptErrors() + ->assertNoConsoleLogs(); + + $cleanHubs = [ + 'operations' => [ + 'url' => OperationRunLinks::index(workspace: $fixture['workspace']), + 'wide_text' => 'Inventory sync', + ], + 'governance inbox' => [ + 'url' => GovernanceInbox::getUrl(panel: 'admin'), + 'wide_text' => 'Spec322 Browser Governance B', + ], + 'provider connections' => [ + 'url' => ProviderConnectionResource::getUrl('index', panel: 'admin'), + 'wide_text' => 'Spec322 Browser Provider B', + ], + 'evidence overview' => [ + 'url' => route('admin.evidence.overview'), + 'wide_text' => $fixture['environmentB']->name, + ], + ]; + + foreach ($cleanHubs as $hub) { + $page = visit($hub['url']); + + Spec322Harness::assertWorkspaceOnly($page, $hub['wide_text'], $fixture['environmentA']->name); + + $page->script('window.location.reload();'); + + Spec322Harness::assertWorkspaceOnly($page, $hub['wide_text'], $fixture['environmentA']->name); + } +}); + +it('Spec322 smokes filtered workspace hub clear reload and history alignment', function (): void { + $fixture = Spec322Harness::fixture(); + + Spec322Harness::authenticate($this, $fixture['user'], $fixture['workspace'], $fixture['environmentA']); + + $filteredHubs = [ + 'provider connections' => [ + 'filtered_url' => ProviderConnectionResource::getUrl('index', [ + 'environment_id' => (int) $fixture['environmentA']->getKey(), + ], panel: 'admin'), + 'wide_text' => 'Spec322 Browser Provider B', + 'hidden_text' => 'Spec322 Browser Provider B', + ], + 'evidence overview' => [ + 'filtered_url' => route('admin.evidence.overview', [ + 'environment_id' => (int) $fixture['environmentA']->getKey(), + ]), + 'wide_text' => $fixture['environmentB']->name, + 'hidden_text' => $fixture['environmentB']->name, + ], + ]; + + foreach ($filteredHubs as $hub) { + $page = visit($hub['filtered_url']); + + Spec322Harness::assertFilteredWorkspaceHub($page, $fixture['environmentA'], $hub['hidden_text']); + + Spec322Harness::clearWorkspaceHubEnvironmentFilter($page); + + Spec322Harness::assertWorkspaceOnly($page, $hub['wide_text'], $fixture['environmentA']->name); + + $page->script('window.location.reload();'); + Spec322Harness::assertWorkspaceOnly($page, $hub['wide_text'], $fixture['environmentA']->name); + + $page->script('window.history.back();'); + Spec322Harness::assertFilteredWorkspaceHub($page, $fixture['environmentA'], $hub['hidden_text']); + + $page->script('window.history.forward();'); + Spec322Harness::assertWorkspaceOnly($page, $hub['wide_text'], $fixture['environmentA']->name); + } +}); + +it('Spec322 smokes representative legacy aliases without creating filter state', function (): void { + $fixture = Spec322Harness::fixture(); + + Spec322Harness::authenticate($this, $fixture['user'], $fixture['workspace'], $fixture['environmentA']); + + $legacyUrls = [ + ProviderConnectionResource::getUrl('index', [ + 'managed_environment_id' => (int) $fixture['environmentA']->getKey(), + ], panel: 'admin'), + FindingExceptionsQueue::getUrl(panel: 'admin', parameters: [ + 'tenant' => (string) $fixture['environmentA']->getKey(), + ]), + route('admin.monitoring.audit-log', [ + 'tableFilters' => [ + 'managed_environment_id' => ['value' => (string) $fixture['environmentA']->getKey()], + ], + ]), + ]; + + foreach ($legacyUrls as $url) { + visit($url) + ->waitForText(__('localization.shell.no_environment_selected')) + ->assertDontSee('Environment filter:') + ->assertSee($fixture['environmentB']->name) + ->assertNoJavaScriptErrors() + ->assertNoConsoleLogs(); + } +}); diff --git a/apps/platform/tests/Browser/Spec322WorkspaceOwnedAnalysisSmokeTest.php b/apps/platform/tests/Browser/Spec322WorkspaceOwnedAnalysisSmokeTest.php new file mode 100644 index 00000000..af32d06f --- /dev/null +++ b/apps/platform/tests/Browser/Spec322WorkspaceOwnedAnalysisSmokeTest.php @@ -0,0 +1,51 @@ +browser()->timeout(45_000); + +it('Spec322 smokes workspace owned analysis and configuration surfaces stay workspace only', function (): void { + $fixture = Spec322Harness::fixture(); + + Spec322Harness::authenticate($this, $fixture['user'], $fixture['workspace'], $fixture['environmentA']); + + visit(EnvironmentDashboard::getUrl(panel: 'admin', tenant: $fixture['environmentA'])) + ->assertSee($fixture['environmentA']->name) + ->assertNoJavaScriptErrors() + ->assertNoConsoleLogs(); + + $surfaces = [ + 'baseline profiles' => [ + 'url' => BaselineProfileResource::getUrl('index', panel: 'admin'), + ], + 'my findings' => [ + 'url' => MyFindingsInbox::getUrl(panel: 'admin'), + ], + 'cross-environment compare' => [ + 'url' => CrossEnvironmentComparePage::getUrl(panel: 'admin'), + ], + 'workspace settings' => [ + 'url' => WorkspaceSettings::getUrl(panel: 'admin'), + ], + ]; + + foreach ($surfaces as $surface) { + $expectedPath = json_encode((string) parse_url($surface['url'], PHP_URL_PATH), JSON_THROW_ON_ERROR); + $page = visit($surface['url']); + + Spec322Harness::assertWorkspaceOnly($page, null, $fixture['environmentA']->name); + $page->assertScript("window.location.pathname === {$expectedPath}", true); + + $page->script('window.location.reload();'); + + Spec322Harness::assertWorkspaceOnly($page, null, $fixture['environmentA']->name); + $page->assertScript("window.location.pathname === {$expectedPath}", true); + } +}); diff --git a/apps/platform/tests/Browser/Support/Spec322WorkspaceEnvironmentBrowserHarness.php b/apps/platform/tests/Browser/Support/Spec322WorkspaceEnvironmentBrowserHarness.php new file mode 100644 index 00000000..a4347956 --- /dev/null +++ b/apps/platform/tests/Browser/Support/Spec322WorkspaceEnvironmentBrowserHarness.php @@ -0,0 +1,307 @@ +active()->create([ + 'name' => 'Spec322 Browser Environment A', + 'external_id' => 'spec322-browser-environment-a', + ]); + [$user, $environmentA] = \createUserWithTenant(tenant: $environmentA, role: 'owner', workspaceRole: 'owner'); + + $environmentB = ManagedEnvironment::factory()->active()->create([ + 'workspace_id' => (int) $environmentA->workspace_id, + 'name' => 'Spec322 Browser Environment B', + 'external_id' => 'spec322-browser-environment-b', + ]); + \createUserWithTenant(tenant: $environmentB, user: $user, role: 'owner', workspaceRole: 'owner'); + + $workspace = $environmentA->workspace()->firstOrFail(); + + $runA = OperationRun::factory()->forTenant($environmentA)->create(['type' => 'policy.sync']); + $runB = OperationRun::factory()->forTenant($environmentB)->create(['type' => 'inventory_sync']); + + $exceptionA = self::findingException($environmentA, $user, 'Spec322 Browser Governance A', 'Spec322 Browser Decision A'); + $exceptionB = self::findingException($environmentB, $user, 'Spec322 Browser Governance B', 'Spec322 Browser Decision B'); + + $connectionA = ProviderConnection::factory()->create([ + 'workspace_id' => (int) $workspace->getKey(), + 'managed_environment_id' => (int) $environmentA->getKey(), + 'display_name' => 'Spec322 Browser Provider A', + ]); + $connectionB = ProviderConnection::factory()->create([ + 'workspace_id' => (int) $workspace->getKey(), + 'managed_environment_id' => (int) $environmentB->getKey(), + 'display_name' => 'Spec322 Browser Provider B', + ]); + + $snapshotA = self::evidenceSnapshot($environmentA); + $snapshotB = self::evidenceSnapshot($environmentB); + + $reviewA = self::publishedReview($environmentA, $user, $snapshotA); + $reviewB = self::publishedReview($environmentB, $user, $snapshotB); + + $rule = AlertRule::factory()->create(['workspace_id' => (int) $workspace->getKey()]); + $destination = AlertDestination::factory()->create(['workspace_id' => (int) $workspace->getKey()]); + + $deliveryA = AlertDelivery::factory()->create([ + 'workspace_id' => (int) $workspace->getKey(), + 'managed_environment_id' => (int) $environmentA->getKey(), + 'alert_rule_id' => (int) $rule->getKey(), + 'alert_destination_id' => (int) $destination->getKey(), + 'status' => AlertDelivery::STATUS_FAILED, + 'created_at' => now()->subHour(), + ]); + $deliveryB = AlertDelivery::factory()->create([ + 'workspace_id' => (int) $workspace->getKey(), + 'managed_environment_id' => (int) $environmentB->getKey(), + 'alert_rule_id' => (int) $rule->getKey(), + 'alert_destination_id' => (int) $destination->getKey(), + 'status' => AlertDelivery::STATUS_SENT, + 'created_at' => now()->subHour(), + ]); + + $auditA = self::auditRecord($environmentA, 'Spec322 browser audit A'); + $auditB = self::auditRecord($environmentB, 'Spec322 browser audit B'); + $auditWorkspace = self::auditRecord(null, 'Spec322 browser workspace audit', [ + 'workspace_id' => (int) $workspace->getKey(), + ]); + + return compact( + 'user', + 'workspace', + 'environmentA', + 'environmentB', + 'runA', + 'runB', + 'connectionA', + 'connectionB', + 'exceptionA', + 'exceptionB', + 'snapshotA', + 'snapshotB', + 'reviewA', + 'reviewB', + 'deliveryA', + 'deliveryB', + 'auditA', + 'auditB', + 'auditWorkspace', + ); + } + + public static function authenticate(object $testCase, User $user, Workspace $workspace, ?ManagedEnvironment $rememberedEnvironment = null): void + { + $session = [ + WorkspaceContext::SESSION_KEY => (int) $workspace->getKey(), + ]; + + if ($rememberedEnvironment instanceof ManagedEnvironment) { + $session[WorkspaceContext::LAST_ENVIRONMENT_IDS_SESSION_KEY] = [ + (string) $workspace->getKey() => (int) $rememberedEnvironment->getKey(), + ]; + } + + $testCase->actingAs($user)->withSession($session); + + foreach ($session as $key => $value) { + session()->put($key, $value); + } + + \setAdminPanelContext($rememberedEnvironment); + } + + public static function assertWorkspaceOnly(mixed $page, ?string $wideText = null, ?string $environmentName = null): mixed + { + $page + ->waitForText(__('localization.shell.no_environment_selected')) + ->assertDontSee('Environment filter:') + ->assertNoJavaScriptErrors() + ->assertNoConsoleLogs(); + + if ($wideText !== null) { + $page->assertSee($wideText); + } + + if ($environmentName !== null) { + $page->assertDontSee(__('localization.shell.environment_scope').': '.$environmentName); + } + + return self::assertNoLegacyQuery($page); + } + + public static function assertFilteredWorkspaceHub(mixed $page, ManagedEnvironment $environment, ?string $hiddenText = null): mixed + { + $page + ->waitForText('Environment filter:') + ->assertSee($environment->name) + ->assertDontSee(__('localization.shell.environment_scope').': '.$environment->name) + ->assertSee('Clear filter') + ->assertScript('window.location.search.includes("environment_id=")', true) + ->assertScript('! window.location.search.includes("tenant=")', true) + ->assertScript('! window.location.search.includes("tenant_id=")', true) + ->assertScript('! window.location.search.includes("managed_environment_id=")', true) + ->assertScript('! window.location.search.includes("tenant_scope=")', true) + ->assertScript('! window.location.search.includes("tableFilters")', true) + ->assertNoJavaScriptErrors() + ->assertNoConsoleLogs(); + + if ($hiddenText !== null) { + $page->assertDontSee($hiddenText); + } + + return $page; + } + + public static function assertNoLegacyQuery(mixed $page): mixed + { + return $page + ->assertScript('! window.location.search.includes("environment_id=")', true) + ->assertScript('! window.location.search.includes("tenant=")', true) + ->assertScript('! window.location.search.includes("tenant_id=")', true) + ->assertScript('! window.location.search.includes("managed_environment_id=")', true) + ->assertScript('! window.location.search.includes("tenant_scope=")', true) + ->assertScript('! window.location.search.includes("tableFilters")', true); + } + + public static function clearWorkspaceHubEnvironmentFilter(mixed $page): mixed + { + $page->assertScript('document.querySelector(\'[data-testid="workspace-hub-environment-filter-clear"]\') instanceof HTMLAnchorElement', true); + $page->script('window.location.assign(document.querySelector(\'[data-testid="workspace-hub-environment-filter-clear"]\').href);'); + + return $page->waitForText(__('localization.shell.no_environment_selected')); + } + + private static function findingException( + ManagedEnvironment $environment, + User $actor, + string $requestReason, + string $decisionReason, + ): FindingException { + $finding = Finding::factory()->for($environment)->riskAccepted()->create([ + 'workspace_id' => (int) $environment->workspace_id, + 'subject_external_id' => str()->slug($requestReason), + ]); + + $exception = FindingException::query()->create([ + 'workspace_id' => (int) $environment->workspace_id, + 'managed_environment_id' => (int) $environment->getKey(), + 'finding_id' => (int) $finding->getKey(), + 'requested_by_user_id' => (int) $actor->getKey(), + 'owner_user_id' => (int) $actor->getKey(), + 'status' => FindingException::STATUS_PENDING, + 'current_validity_state' => FindingException::VALIDITY_MISSING_SUPPORT, + 'request_reason' => $requestReason, + 'requested_at' => now()->subDay(), + 'review_due_at' => now()->addDay(), + 'evidence_summary' => ['reference_count' => 0], + ]); + + $decision = $exception->decisions()->create([ + 'workspace_id' => (int) $environment->workspace_id, + 'managed_environment_id' => (int) $environment->getKey(), + 'actor_user_id' => (int) $actor->getKey(), + 'decision_type' => FindingExceptionDecision::TYPE_REQUESTED, + 'reason' => $decisionReason, + 'metadata' => [], + 'decided_at' => now()->subDay(), + ]); + + $exception->forceFill(['current_decision_id' => (int) $decision->getKey()])->save(); + + return $exception->fresh(['currentDecision']); + } + + private static function evidenceSnapshot(ManagedEnvironment $environment): EvidenceSnapshot + { + return EvidenceSnapshot::query()->create([ + 'managed_environment_id' => (int) $environment->getKey(), + 'workspace_id' => (int) $environment->workspace_id, + 'status' => EvidenceSnapshotStatus::Active->value, + 'summary' => ['missing_dimensions' => 0, 'stale_dimensions' => 0], + 'generated_at' => now(), + ]); + } + + private static function publishedReview(ManagedEnvironment $environment, User $user, EvidenceSnapshot $snapshot): EnvironmentReview + { + $review = \composeEnvironmentReviewForTest($environment, $user, $snapshot); + $review->forceFill([ + 'status' => EnvironmentReviewStatus::Published->value, + 'published_at' => now(), + 'published_by_user_id' => (int) $user->getKey(), + ])->save(); + + return $review->fresh(); + } + + /** + * @param array $attributes + */ + private static function auditRecord(?ManagedEnvironment $environment, string $summary, array $attributes = []): AuditLog + { + $workspaceId = array_key_exists('workspace_id', $attributes) + ? (int) $attributes['workspace_id'] + : (int) ($environment?->workspace_id); + + return AuditLog::query()->create(array_merge([ + 'workspace_id' => $workspaceId, + 'managed_environment_id' => $environment?->getKey(), + 'actor_email' => 'spec322-browser@example.test', + 'actor_name' => 'Spec322 Browser Operator', + 'action' => 'operation.completed', + 'status' => 'success', + 'resource_type' => 'operation_run', + 'resource_id' => '322', + 'summary' => $summary, + 'metadata' => [], + 'recorded_at' => now(), + ], $attributes)); + } +} diff --git a/apps/platform/tests/Feature/Navigation/Spec322AdminSurfaceScopeContractTest.php b/apps/platform/tests/Feature/Navigation/Spec322AdminSurfaceScopeContractTest.php new file mode 100644 index 00000000..86138552 --- /dev/null +++ b/apps/platform/tests/Feature/Navigation/Spec322AdminSurfaceScopeContractTest.php @@ -0,0 +1,184 @@ +toBe(AdminSurfaceScope::WorkspaceWideSurface, $path); + } + + $workspaceOwnedAnalysisPaths = [ + '/admin/baseline-profiles', + '/admin/baseline-profiles/42', + '/admin/baseline-profiles/42/edit', + '/admin/baseline-profiles/42/compare-matrix', + '/admin/baseline-snapshots', + '/admin/baseline-snapshots/42', + '/admin/findings/my-work', + '/admin/findings/intake', + '/admin/findings/hygiene', + '/admin/cross-environment-compare', + ]; + + foreach ($workspaceOwnedAnalysisPaths as $path) { + expect(AdminSurfaceScope::fromPath($path))->toBe(AdminSurfaceScope::WorkspaceOwnedAnalysisSurface, $path); + } + + $environmentOwnedPaths = [ + '/admin/workspaces/acme/environments/prod', + '/admin/workspaces/acme/environments/prod/baseline-compare', + '/admin/workspaces/acme/environments/prod/required-permissions', + '/admin/workspaces/acme/environments/prod/inventory', + '/admin/workspaces/acme/environments/prod/inventory/inventory-coverage', + '/admin/workspaces/acme/environments/prod/diagnostics', + ]; + + foreach ($environmentOwnedPaths as $path) { + expect(AdminSurfaceScope::fromPath($path))->toBe(AdminSurfaceScope::EnvironmentBound, $path); + } +}); + +it('workspace_hub_clean_urls_never_emit_environment_or_legacy_query_params', function (): void { + $environment = ManagedEnvironment::factory()->active()->create(); + [$user, $environment] = createUserWithTenant(tenant: $environment, role: 'owner', workspaceRole: 'owner'); + $workspace = $environment->workspace()->firstOrFail(); + + $this->actingAs($user); + setAdminPanelContext(); + session()->put(WorkspaceContext::SESSION_KEY, (int) $workspace->getKey()); + + $cleanUrls = [ + OperationRunLinks::index(workspace: $workspace), + ProviderConnectionResource::getUrl('index', panel: 'admin'), + FindingExceptionsQueue::getUrl(panel: 'admin'), + route('admin.evidence.overview'), + route('filament.admin.pages.reviews'), + route('filament.admin.pages.reviews.workspace'), + GovernanceInbox::getUrl(panel: 'admin'), + DecisionRegister::getUrl(panel: 'admin'), + route('admin.monitoring.audit-log'), + route('filament.admin.alerts'), + AlertDeliveryResource::getUrl('index', panel: 'admin'), + route('filament.admin.alerts.resources.alert-rules.index'), + route('filament.admin.alerts.resources.alert-destinations.index'), + route('filament.admin.pages.settings.workspace'), + ]; + + foreach ($cleanUrls as $url) { + expect($url)->not->toContain('environment_id=', $url) + ->and($url)->not->toContain('tenant=', $url) + ->and($url)->not->toContain('tenant_id=', $url) + ->and($url)->not->toContain('managed_environment_id=', $url) + ->and($url)->not->toContain('environment=', $url) + ->and($url)->not->toContain('tenant_scope=', $url) + ->and($url)->not->toContain('tableFilters', $url) + ->and(WorkspaceHubRegistry::hasForbiddenQuery($url))->toBeFalse($url); + } +}); + +it('clear_filter_results_match_clean_workspace_hub_entry_for_filterable_hubs', function (): void { + $environment = ManagedEnvironment::factory()->active()->create(); + [$user, $environment] = createUserWithTenant(tenant: $environment, role: 'owner', workspaceRole: 'owner'); + $workspace = $environment->workspace()->firstOrFail(); + + $this->actingAs($user); + setAdminPanelContext(); + session()->put(WorkspaceContext::SESSION_KEY, (int) $workspace->getKey()); + + $dirtyQuery = [ + 'environment_id' => (int) $environment->getKey(), + 'tenant' => (string) $environment->external_id, + 'tenant_id' => (int) $environment->getKey(), + 'managed_environment_id' => (int) $environment->getKey(), + 'environment' => (string) $environment->getRouteKey(), + 'tenant_scope' => 'environment', + 'tableFilters' => [ + 'managed_environment_id' => ['value' => (string) $environment->getKey()], + ], + 'activeTab' => 'failed', + ]; + + $cases = [ + OperationRunLinks::index(workspace: $workspace).'?'.http_build_query($dirtyQuery), + ProviderConnectionResource::getUrl('index', $dirtyQuery, panel: 'admin'), + FindingExceptionsQueue::getUrl(panel: 'admin', parameters: $dirtyQuery), + route('admin.evidence.overview', $dirtyQuery), + GovernanceInbox::getUrl(panel: 'admin', parameters: $dirtyQuery), + DecisionRegister::getUrl(panel: 'admin', parameters: $dirtyQuery), + route('admin.monitoring.audit-log', $dirtyQuery), + AlertDeliveryResource::getUrl('index', $dirtyQuery, panel: 'admin'), + ]; + + foreach ($cases as $dirtyUrl) { + $cleanUrl = WorkspaceHubRegistry::cleanUrl($dirtyUrl); + $query = []; + parse_str((string) parse_url($cleanUrl, PHP_URL_QUERY), $query); + + expect(WorkspaceHubRegistry::hasForbiddenQuery($cleanUrl))->toBeFalse($cleanUrl) + ->and($query)->toHaveKey('activeTab', 'failed'); + } +}); + +it('environment_id_filters_reject_cross_workspace_environment_ids', function (): void { + $environment = ManagedEnvironment::factory()->active()->create(); + [$user, $environment] = createUserWithTenant(tenant: $environment, role: 'owner', workspaceRole: 'owner'); + $workspace = $environment->workspace()->firstOrFail(); + + $foreignEnvironment = ManagedEnvironment::factory()->active()->create([ + 'name' => 'Spec322 Foreign Environment', + ]); + + $this->actingAs($user); + setAdminPanelContext(); + session()->put(WorkspaceContext::SESSION_KEY, (int) $workspace->getKey()); + + $urls = [ + route('admin.operations.index', [ + 'workspace' => $workspace, + 'environment_id' => (int) $foreignEnvironment->getKey(), + ]), + ProviderConnectionResource::getUrl('index', [ + 'environment_id' => (int) $foreignEnvironment->getKey(), + ], panel: 'admin'), + AlertDeliveryResource::getUrl('index', [ + 'environment_id' => (int) $foreignEnvironment->getKey(), + ], panel: 'admin'), + route('admin.monitoring.audit-log', [ + 'environment_id' => (int) $foreignEnvironment->getKey(), + ]), + ]; + + foreach ($urls as $url) { + $this->get($url)->assertNotFound(); + } +}); diff --git a/apps/platform/tests/Feature/Navigation/Spec322EnvironmentCtaUrlContractTest.php b/apps/platform/tests/Feature/Navigation/Spec322EnvironmentCtaUrlContractTest.php new file mode 100644 index 00000000..1dd636cf --- /dev/null +++ b/apps/platform/tests/Feature/Navigation/Spec322EnvironmentCtaUrlContractTest.php @@ -0,0 +1,105 @@ +active()->create([ + 'name' => 'Spec322 CTA Environment', + ]); + [$user, $environment] = createUserWithTenant(tenant: $environment, role: 'owner', workspaceRole: 'owner'); + $workspace = $environment->workspace()->firstOrFail(); + + $this->actingAs($user); + setAdminPanelContext($environment); + + $workspaceHubUrls = [ + OperationRunLinks::index($environment), + ManagedEnvironmentLinks::operationsUrl($environment), + ManagedEnvironmentLinks::providerConnectionsUrl($environment), + ProviderConnectionResource::getUrl('index', ['environment_id' => (int) $environment->getKey()], panel: 'admin'), + CustomerReviewWorkspace::environmentFilterUrl($environment), + GovernanceInbox::getUrl(panel: 'admin', parameters: ['environment_id' => (int) $environment->getKey()]), + DecisionRegister::getUrl(panel: 'admin', parameters: ['environment_id' => (int) $environment->getKey()]), + FindingExceptionsQueue::getUrl(panel: 'admin', parameters: ['environment_id' => (int) $environment->getKey()]), + route('admin.evidence.overview', ['environment_id' => (int) $environment->getKey()]), + ReviewRegister::getUrl(panel: 'admin', parameters: ['environment_id' => (int) $environment->getKey()]), + route('admin.monitoring.audit-log', ['environment_id' => (int) $environment->getKey()]), + AlertDeliveryResource::getUrl('index', ['environment_id' => (int) $environment->getKey()], panel: 'admin'), + ]; + + foreach ($workspaceHubUrls as $url) { + $query = spec322Query($url); + + expect($query)->toHaveKey('environment_id', (string) $environment->getKey()) + ->and($query)->not->toHaveKey('tenant') + ->and($query)->not->toHaveKey('tenant_id') + ->and($query)->not->toHaveKey('managed_environment_id') + ->and($query)->not->toHaveKey('environment') + ->and($query)->not->toHaveKey('tenant_scope') + ->and($query)->not->toHaveKey('tableFilters'); + } + + $environmentOwnedUrls = [ + ManagedEnvironmentLinks::viewUrl($environment), + ManagedEnvironmentLinks::baselineCompareUrl($environment), + BaselineCompareLanding::getUrl(panel: 'admin', tenant: $environment), + ManagedEnvironmentLinks::requiredPermissionsUrl($environment), + ManagedEnvironmentLinks::diagnosticsUrl($environment), + route('filament.admin.workspaces.{workspace}.environments.{environment}.inventory', [ + 'workspace' => ManagedEnvironmentLinks::workspaceRouteKey($workspace), + 'environment' => ManagedEnvironmentLinks::environmentRouteKey($environment), + ]), + route('filament.admin.workspaces.{workspace}.environments.{environment}.inventory.pages.inventory-coverage', [ + 'workspace' => ManagedEnvironmentLinks::workspaceRouteKey($workspace), + 'environment' => ManagedEnvironmentLinks::environmentRouteKey($environment), + ]), + ]; + + foreach ($environmentOwnedUrls as $url) { + expect((string) parse_url($url, PHP_URL_PATH)) + ->toContain('/admin/workspaces/'.ManagedEnvironmentLinks::workspaceRouteKey($workspace).'/environments/'.ManagedEnvironmentLinks::environmentRouteKey($environment)) + ->and(spec322Query($url))->not->toHaveKey('environment_id') + ->and(spec322Query($url))->not->toHaveKey('managed_environment_id') + ->and(spec322Query($url))->not->toHaveKey('tenant') + ->and(spec322Query($url))->not->toHaveKey('tableFilters'); + } + + $workspaceConfigurationUrls = [ + AlertRuleResource::getUrl('index', panel: 'admin'), + AlertDestinationResource::getUrl('index', panel: 'admin'), + WorkspaceSettings::getUrl(panel: 'admin'), + ]; + + foreach ($workspaceConfigurationUrls as $url) { + expect(spec322Query($url))->not->toHaveKey('environment_id') + ->and(spec322Query($url))->not->toHaveKey('managed_environment_id') + ->and(spec322Query($url))->not->toHaveKey('tenant') + ->and(spec322Query($url))->not->toHaveKey('tableFilters'); + } +}); + +/** + * @return array + */ +function spec322Query(string $url): array +{ + $query = []; + parse_str((string) parse_url($url, PHP_URL_QUERY), $query); + + return $query; +} diff --git a/apps/platform/tests/Feature/Navigation/Spec322LegacyQueryAliasGuardTest.php b/apps/platform/tests/Feature/Navigation/Spec322LegacyQueryAliasGuardTest.php new file mode 100644 index 00000000..4c0c64de --- /dev/null +++ b/apps/platform/tests/Feature/Navigation/Spec322LegacyQueryAliasGuardTest.php @@ -0,0 +1,267 @@ +actingAs($user); + setAdminPanelContext(); + session()->put(WorkspaceContext::SESSION_KEY, (int) $environmentA->workspace_id); + + $legacyQueries = [ + 'tenant' => ['tenant' => (string) $environmentA->getKey()], + 'tenant_id' => ['tenant_id' => (int) $environmentA->getKey()], + 'managed_environment_id' => ['managed_environment_id' => (int) $environmentA->getKey()], + 'environment' => ['environment' => (string) $environmentA->getRouteKey()], + 'tenant_scope' => ['tenant_scope' => 'environment'], + 'tableFilters' => [ + 'tableFilters' => [ + 'managed_environment_id' => ['value' => (string) $environmentA->getKey()], + ], + ], + ]; + + foreach ($legacyQueries as $query) { + Livewire::withQueryParams($query) + ->actingAs($user) + ->test(Operations::class) + ->assertSet('tableFilters.managed_environment_id.value', null) + ->assertDontSee('Environment filter:') + ->assertCanSeeTableRecords([$records['runA'], $records['runB']]); + + Livewire::withQueryParams($query) + ->actingAs($user) + ->test(ListAlertDeliveries::class) + ->assertSet('tableFilters.managed_environment_id.value', null) + ->assertDontSee('Environment filter:') + ->assertCanSeeTableRecords([$records['deliveryA'], $records['deliveryB']]); + + Livewire::withQueryParams($query) + ->actingAs($user) + ->test(AuditLogPage::class) + ->assertSet('tableFilters.managed_environment_id.value', null) + ->assertDontSee('Environment filter:') + ->assertCanSeeTableRecords([$records['auditA'], $records['auditB'], $records['auditWorkspace']]); + } +}); + +it('has_no_active_legacy_tenant_panel_routes', function (): void { + $legacyRouteUris = collect(Route::getRoutes()) + ->map(fn ($route): string => ltrim((string) $route->uri(), '/')) + ->filter(fn (string $uri): bool => preg_match('#^admin/t(?:/|$)#', $uri) === 1) + ->values(); + + $registeredProviders = require base_path('bootstrap/providers.php'); + $tenantPanelProviders = collect($registeredProviders) + ->filter(fn (string $provider): bool => str_contains($provider, 'TenantPanelProvider')) + ->values(); + + expect($legacyRouteUris)->toBeEmpty() + ->and($tenantPanelProviders)->toBeEmpty() + ->and(file_exists(app_path('Providers/Filament/TenantPanelProvider.php')))->toBeFalse() + ->and(file_exists(app_path('Filament/Providers/TenantPanelProvider.php')))->toBeFalse() + ->and(Filament::getPanel('tenant'))->toBeNull(); + + $this->get('/admin/t/example')->assertNotFound(); +}); + +it('allows_tenant_terms_only_in_provider_boundary_contexts', function (): void { + $files = spec322LegacyGuardFiles([ + base_path('app/Support/Navigation'), + base_path('app/Filament/Pages/Monitoring/Operations.php'), + base_path('app/Filament/Pages/Monitoring/FindingExceptionsQueue.php'), + base_path('app/Filament/Pages/Governance/GovernanceInbox.php'), + base_path('app/Filament/Pages/Governance/DecisionRegister.php'), + base_path('app/Filament/Pages/Monitoring/EvidenceOverview.php'), + base_path('app/Filament/Pages/Reviews/ReviewRegister.php'), + base_path('app/Filament/Pages/Reviews/CustomerReviewWorkspace.php'), + base_path('app/Filament/Resources/ProviderConnectionResource.php'), + base_path('app/Filament/Resources/ProviderConnectionResource/Pages/ListProviderConnections.php'), + base_path('routes/web.php'), + ]); + + $hits = spec322LegacyPatternHits($files, [ + '/\btenantPrefilterUrl\s*\(/', + '/\bCanonicalAdminTenantFilterState\b/', + '/\bWorkspaceScopedTenantRoutes\b/', + '/\bTenantPageCategory\b/', + '/\bEnsureFilamentTenantSelected\b/', + '/'.'ensure-filament-'.'tenant-selected'.'/', + '/\blastTenantId\s*\(/', + '/\brememberedTenant\s*\(/', + '/\brememberTenantContext\s*\(/', + '/\bLAST_TENANT_IDS_SESSION_KEY\b/', + '/\bTenantBound\b/', + '/\bTenantScopedEvidence\b/', + ]); + + expect($hits)->toBeEmpty("Retired Tenant platform-context terms remain:\n".implode("\n", $hits)); +}); + +/** + * @return array{0: \App\Models\User, 1: ManagedEnvironment, 2: ManagedEnvironment, 3: array} + */ +function spec322LegacyAliasFixture(): array +{ + $environmentA = ManagedEnvironment::factory()->active()->create([ + 'name' => 'Spec322 Alias Environment A', + 'external_id' => 'spec322-alias-environment-a', + ]); + [$user, $environmentA] = createUserWithTenant(tenant: $environmentA, role: 'owner', workspaceRole: 'owner'); + + $environmentB = ManagedEnvironment::factory()->active()->create([ + 'workspace_id' => (int) $environmentA->workspace_id, + 'name' => 'Spec322 Alias Environment B', + 'external_id' => 'spec322-alias-environment-b', + ]); + createUserWithTenant(tenant: $environmentB, user: $user, role: 'owner', workspaceRole: 'owner'); + + $runA = OperationRun::factory()->forTenant($environmentA)->create(['type' => 'policy.sync']); + $runB = OperationRun::factory()->forTenant($environmentB)->create(['type' => 'inventory_sync']); + + $rule = AlertRule::factory()->create(['workspace_id' => (int) $environmentA->workspace_id]); + $destination = AlertDestination::factory()->create(['workspace_id' => (int) $environmentA->workspace_id]); + + $deliveryA = AlertDelivery::factory()->create([ + 'workspace_id' => (int) $environmentA->workspace_id, + 'managed_environment_id' => (int) $environmentA->getKey(), + 'alert_rule_id' => (int) $rule->getKey(), + 'alert_destination_id' => (int) $destination->getKey(), + 'status' => AlertDelivery::STATUS_FAILED, + ]); + $deliveryB = AlertDelivery::factory()->create([ + 'workspace_id' => (int) $environmentA->workspace_id, + 'managed_environment_id' => (int) $environmentB->getKey(), + 'alert_rule_id' => (int) $rule->getKey(), + 'alert_destination_id' => (int) $destination->getKey(), + 'status' => AlertDelivery::STATUS_SENT, + ]); + + $auditA = spec322LegacyAuditRecord($environmentA, 'Spec322 alias audit A'); + $auditB = spec322LegacyAuditRecord($environmentB, 'Spec322 alias audit B'); + $auditWorkspace = spec322LegacyAuditRecord(null, 'Spec322 workspace audit', [ + 'workspace_id' => (int) $environmentA->workspace_id, + ]); + + return [$user, $environmentA, $environmentB, compact( + 'runA', + 'runB', + 'deliveryA', + 'deliveryB', + 'auditA', + 'auditB', + 'auditWorkspace', + )]; +} + +/** + * @param array $attributes + */ +function spec322LegacyAuditRecord(?ManagedEnvironment $environment, string $summary, array $attributes = []): AuditLogModel +{ + $workspaceId = array_key_exists('workspace_id', $attributes) + ? (int) $attributes['workspace_id'] + : (int) ($environment?->workspace_id); + + return AuditLogModel::query()->create(array_merge([ + 'workspace_id' => $workspaceId, + 'managed_environment_id' => $environment?->getKey(), + 'actor_email' => 'spec322@example.test', + 'actor_name' => 'Spec322 Operator', + 'action' => 'operation.completed', + 'status' => 'success', + 'resource_type' => 'operation_run', + 'resource_id' => '322', + 'summary' => $summary, + 'metadata' => [], + 'recorded_at' => now(), + ], $attributes)); +} + +/** + * @param list $roots + * @return list + */ +function spec322LegacyGuardFiles(array $roots): array +{ + $files = []; + + foreach ($roots as $root) { + if (is_file($root)) { + $files[] = $root; + + continue; + } + + if (! is_dir($root)) { + continue; + } + + $iterator = new RecursiveIteratorIterator( + new RecursiveDirectoryIterator($root, FilesystemIterator::SKIP_DOTS), + ); + + foreach ($iterator as $file) { + if (! $file instanceof SplFileInfo || ! $file->isFile()) { + continue; + } + + if (! in_array($file->getExtension(), ['php', 'md'], true)) { + continue; + } + + $files[] = $file->getPathname(); + } + } + + sort($files); + + return array_values(array_unique($files)); +} + +/** + * @param list $files + * @param list $patterns + * @return list + */ +function spec322LegacyPatternHits(array $files, array $patterns): array +{ + $hits = []; + + foreach ($files as $path) { + $contents = file_get_contents($path); + + if (! is_string($contents)) { + continue; + } + + $lines = preg_split('/\R/', $contents) ?: []; + + foreach ($patterns as $pattern) { + foreach ($lines as $lineNumber => $line) { + if (preg_match($pattern, $line) !== 1) { + continue; + } + + $hits[] = str_replace(repo_path().'/', '', $path).':'.($lineNumber + 1).' -> '.trim($line); + } + } + } + + return $hits; +} diff --git a/specs/322-browser-no-drift-regression-guard/artifacts/screenshots/.gitkeep b/specs/322-browser-no-drift-regression-guard/artifacts/screenshots/.gitkeep new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/specs/322-browser-no-drift-regression-guard/artifacts/screenshots/.gitkeep @@ -0,0 +1 @@ + diff --git a/specs/322-browser-no-drift-regression-guard/checklists/requirements.md b/specs/322-browser-no-drift-regression-guard/checklists/requirements.md new file mode 100644 index 00000000..da7f3fa6 --- /dev/null +++ b/specs/322-browser-no-drift-regression-guard/checklists/requirements.md @@ -0,0 +1,59 @@ +# Specification Quality Checklist: Browser No-Drift Regression Guard + +**Purpose**: Validate preparation completeness and quality before implementation. +**Created**: 2026-05-17 +**Feature**: `specs/322-browser-no-drift-regression-guard/spec.md` + +## Content Quality + +- [x] Spec Candidate Check is completed. +- [x] The selected candidate is direct user-provided manual promotion. +- [x] Related completed specs are treated as historical context and not rewritten. +- [x] The scope is focused on durable guards and no-drift regression coverage. +- [x] No application implementation is included in preparation artifacts. +- [x] No migration, seeder, package, env var, queue, scheduler, storage, or deployment asset change is planned. + +## Requirement Completeness + +- [x] No `[NEEDS CLARIFICATION]` markers remain. +- [x] Functional requirements are testable and unambiguous. +- [x] Non-functional requirements cover browser stability, lane cost, fixture cost, and no Playwright MCP dependency. +- [x] Success criteria are measurable by artifacts and test results. +- [x] All user stories include independent test descriptions and acceptance scenarios. +- [x] Edge cases cover cross-workspace IDs, legacy aliases, stale state, back/forward, old clean URLs, and browser blockers. +- [x] Dependencies and assumptions are identified. + +## Feature Readiness + +- [x] `spec.md` exists. +- [x] `plan.md` exists. +- [x] `tasks.md` exists. +- [x] `test-plan.md` exists. +- [x] `coverage-manifest.md` exists. +- [x] Screenshots artifact directory is represented by `.gitkeep`. +- [x] Tasks are ordered, small, and verifiable. +- [x] Tasks include Feature/static guards and Browser guard coverage. +- [x] Tasks include validation commands and final report obligations. +- [x] Tasks include explicit non-goals and stop conditions. + +## Constitution / Repo Alignment + +- [x] Workspace isolation and cross-workspace rejection are explicit. +- [x] Legacy Tenant aliases remain invalid and no compatibility layer is allowed. +- [x] Provider Tenant terminology remains provider-boundary only. +- [x] Proportionality review covers the new test/manifest ownership cost. +- [x] Test governance names Browser lane expansion and fixture/helper cost controls. +- [x] Filament v5 / Livewire v4 compliance is explicitly addressed. +- [x] Provider registration location remains `apps/platform/bootstrap/providers.php`; no provider change is planned. +- [x] Global search and destructive action output-contract points are addressed. +- [x] Asset strategy is explicit; no `filament:assets` deployment change is planned. + +## Preparation Analysis Outcome + +- [x] Preparation artifacts are internally consistent after review. +- [x] No preparation issue requires application implementation. +- [x] No open question blocks implementation. + +## Notes + +Runtime acceptance remains pending until implementation, targeted Feature/static tests, targeted Browser tests, formatting, and `git diff --check` are completed. diff --git a/specs/322-browser-no-drift-regression-guard/coverage-manifest.md b/specs/322-browser-no-drift-regression-guard/coverage-manifest.md new file mode 100644 index 00000000..66f85222 --- /dev/null +++ b/specs/322-browser-no-drift-regression-guard/coverage-manifest.md @@ -0,0 +1,65 @@ +# Spec 322 Coverage Manifest + +This manifest is the review surface for durable Workspace / Environment no-drift coverage. + +Coverage statuses: + +- `existing`: already covered by a related test before Spec 322. +- `spec322`: covered by the Spec 322 implementation. +- `spec322-partial`: partially covered by Spec 322 browser coverage with deterministic Feature/static fallback. +- `gap`: browser coverage is blocked or intentionally excluded; notes must explain the deterministic fallback. + +Spec 322 browser fixture boundary: browser tests create one workspace, two active Managed Environments, one user with workspace/environment membership, and only the records needed to prove visible/hidden scope across operations, provider connections, evidence, alerts, audit log, governance, reviews, baselines, findings, and settings. Exhaustive surface permutations stay in Feature/static guards. + +| Surface | Classification | Clean URL | Filtered URL supported? | Environment route required? | Clear supported? | Browser covered? | Feature covered? | Notes | +| --- | --- | --- | --- | --- | --- | --- | --- | --- | +| Operations | workspace_hub | `/admin/workspaces/{workspace}/operations` | yes | no | yes | spec322-partial | spec322 | Spec322 browser covers clean entry/reload; filtered clear/history remains covered by existing Spec316 browser and Spec322 Feature guards. | +| Governance Inbox | workspace_hub | `/admin/governance/inbox` | yes | no | yes | spec322-partial | spec322 | Spec322 browser covers clean entry/reload; existing Spec314/316 browser plus Spec322 Feature guards cover filtered permutations. | +| Decision Register | workspace_hub | `/admin/governance/decisions` | yes | no | yes | existing | spec322 | Existing Spec314/316 browser coverage remains the browser anchor; Spec322 Feature guards include classification and URL contracts. | +| Finding Exceptions Queue | workspace_hub | `/admin/finding-exceptions/queue` | yes | no | yes | existing | spec322 | Existing Spec314/316 browser coverage remains the browser anchor; Spec322 representative legacy alias browser guard includes this surface. | +| Provider Connections | workspace_hub | `/admin/provider-connections` | yes | no | yes | spec322 | spec322 | Spec322 browser covers clean, filtered chip, clear, reload, back/forward, and representative legacy alias behavior. | +| Evidence Overview | workspace_hub | `/admin/evidence/overview` | yes | no | yes | spec322 | spec322 | Spec322 browser covers clean, filtered chip, clear, reload, and back/forward behavior. | +| Reviews | workspace_hub | `/admin/reviews` | yes | no | yes | existing | spec322 | Existing Spec314/316 browser coverage remains the browser anchor; Spec322 Feature guards include classification and URL contracts. | +| Customer Reviews | workspace_hub | `/admin/reviews/workspace` | yes | no | yes | existing | spec322 | Existing Spec314/316 browser coverage remains the browser anchor; Spec322 Feature guards include classification and URL contracts. | +| Alert Deliveries | workspace_hub | `/admin/alerts/alert-deliveries` | yes | no | yes | spec322 | spec322 | Spec322 browser covers filtered chip, clear, reload, and back/forward alignment. | +| Audit Log | workspace_hub | `/admin/audit-log` | yes | no | yes | spec322-partial | spec322 | Spec322 browser covers filtered and clean/reload shell state; clear/back-forward remains covered by Spec321/Spec322 Feature guards because browser click timing was unstable on this page. | +| Alerts Overview | workspace_hub | `/admin/alerts` | yes | no | yes | spec322-partial | spec322 | Spec322 browser covers clean and filtered shell state; clear contract remains covered by Spec321/Spec322 Feature guards. | +| Environment Dashboard | environment_owned_page | `/admin/workspaces/{workspace}/environments/{environment}` | no | yes | no | spec322 | spec322 | Browser covers Environment-owned route/shell and reload. | +| Baseline Compare | environment_owned_page | `/admin/workspaces/{workspace}/environments/{environment}/baseline-compare` | no | yes | no | spec322 | spec322 | Browser covers Environment-owned route/shell, reload, and old workspace-style invalid access. | +| Required Permissions | environment_owned_page | `/admin/workspaces/{workspace}/environments/{environment}/required-permissions` | no | yes | no | spec322 | spec322 | Browser covers route/shell and reload; Feature guards cover URL contract. | +| Provider Readiness / Onboarding Readiness | environment_owned_page | Environment Dashboard readiness section | no | yes | no | spec322-partial | spec322 | No separate route was confirmed; Environment Dashboard browser smoke and Feature URL/scope guards are the deterministic fallback. | +| Inventory / Inventory Coverage | environment_owned_page | `/admin/workspaces/{workspace}/environments/{environment}/inventory` and `/admin/workspaces/{workspace}/environments/{environment}/inventory/inventory-coverage` | no | yes | no | gap | spec322 | Browser coverage intentionally excluded for runtime cost; Feature URL/scope guards cover the route contract. | +| Environment Diagnostics | environment_owned_page | `/admin/workspaces/{workspace}/environments/{environment}/diagnostics` | no | yes | no | gap | spec322 | Browser coverage intentionally excluded for runtime cost; Feature URL/scope guards cover the route contract. | +| Baseline Profiles | workspace_owned_analysis_surface | `/admin/baseline-profiles` | no unless explicitly supported | no | no | spec322 | spec322 | Browser covers Workspace-only shell cutover from Environment origin plus reload. | +| Baseline Snapshots | workspace_owned_analysis_surface | `/admin/baseline-snapshots` | no unless explicitly supported | no | no | gap | spec322 | Browser coverage intentionally excluded for runtime cost; Feature classification and clean URL guards cover the contract. | +| My Findings | workspace_owned_analysis_surface | `/admin/findings/my-work` | no unless explicitly supported | no | no | spec322 | spec322 | Browser covers Workspace-only shell cutover from Environment origin plus reload. | +| Findings Intake | workspace_owned_analysis_surface | `/admin/findings/intake` | no unless explicitly supported | no | no | gap | spec322 | Browser coverage intentionally excluded for runtime cost; Feature classification and clean URL guards cover the contract. | +| Findings Hygiene | workspace_owned_analysis_surface | `/admin/findings/hygiene` | no unless explicitly supported | no | no | gap | spec322 | Browser coverage intentionally excluded for runtime cost; Feature classification and clean URL guards cover the contract. | +| Cross-environment Compare | workspace_owned_analysis_surface | `/admin/cross-environment-compare` | no unless explicitly supported | no | no | spec322 | spec322 | Browser covers Workspace-only shell cutover from Environment origin plus reload. | +| Alert Rules | workspace_configuration_surface | `/admin/alerts/alert-rules` | no | no | no | spec322 | spec322 | Browser covers stray `environment_id` rejection with no chip/shell. | +| Alert Destinations | workspace_configuration_surface | `/admin/alerts/alert-destinations` | no | no | no | spec322 | spec322 | Browser covers stray `environment_id` rejection with no chip/shell. | +| Workspace Settings | workspace_configuration_surface | `/admin/settings/workspace` | no | no | no | spec322 | spec322 | Browser covers Workspace-only shell cutover from Environment origin plus reload. | +| `/admin/t` legacy routes | out_of_scope | N/A | no | no | no | not applicable | spec322 | Spec322 Feature guard verifies no active legacy routes or TenantPanelProvider. | +| TenantPanelProvider | out_of_scope | N/A | no | no | no | not applicable | spec322 | Spec322 Feature guard verifies no runtime tenant panel registration or provider file. | +| Provider-boundary Tenant terminology | out_of_scope | N/A | no | no | no | not applicable | spec322 | Spec322 Feature guard checks retired platform-context Tenant terminology does not return outside allowed provider-boundary contexts. | + +## Optional Surfaces + +| Surface | Classification | Clean URL | Filtered URL supported? | Environment route required? | Clear supported? | Browser covered? | Feature covered? | Notes | +| --- | --- | --- | --- | --- | --- | --- | --- | --- | +| Notification Routing | workspace_configuration_surface | Not confirmed in Spec 322 prep | no unless explicitly supported | no | no | gap | gap | Optional; excluded until route/surface is confirmed. | +| Operational Controls | workspace_configuration_surface | Not confirmed in Spec 322 prep | no unless explicitly supported | no | no | gap | gap | Optional; excluded until route/surface is confirmed. | +| Customer Health | workspace_hub | Not confirmed in Spec 322 prep | not confirmed | no | not confirmed | gap | gap | Optional; not part of required Spec 322 surface list. | +| Stored Reports | environment_owned_page or workspace_hub depending route | Not confirmed in Spec 322 prep | not confirmed | route-specific | not confirmed | gap | existing | Existing environment route exclusions exist; not required for Spec 322 unless implementation discovers current drift. | +| Support Requests | out_of_scope | Not confirmed in Spec 322 prep | no | no | no | gap | existing | Modal/action support surface, not a primary no-drift browser target. | +| Review Packs / Exports | out_of_scope | Not confirmed in Spec 322 prep | no | route-specific | no | gap | existing | Artifact/download flows remain outside this guard unless linked from required surfaces. | +| Control Catalog | workspace_configuration_surface | Not confirmed in Spec 322 prep | no | no | no | gap | gap | Optional and excluded pending route/surface confirmation. | + +## Required Gap Handling + +If any planned browser coverage cannot be executed because of local browser profile lock, unavailable fixture, route unreachability, missing seeded data, or external process conflict: + +1. Keep or add deterministic Feature/Unit coverage for the same product contract. +2. Mark the row `gap` or `spec322-partial` with exact reason. +3. Do not claim full browser coverage for that surface. +4. Include the blocker in the final implementation report. diff --git a/specs/322-browser-no-drift-regression-guard/plan.md b/specs/322-browser-no-drift-regression-guard/plan.md new file mode 100644 index 00000000..2b01d228 --- /dev/null +++ b/specs/322-browser-no-drift-regression-guard/plan.md @@ -0,0 +1,314 @@ +# Implementation Plan: Browser No-Drift Regression Guard + +**Branch**: `322-browser-no-drift-regression-guard` +**Date**: 2026-05-17 +**Spec**: `specs/322-browser-no-drift-regression-guard/spec.md` +**Status**: Draft + +## Summary + +Create durable no-drift regression coverage for the Workspace / Environment contracts stabilized by Specs 314 through 321. The implementation is test/guard-first and must not add product behavior except narrow fixes required to make existing contracts deterministic. + +The plan adds: + +- Feature/static guards for surface classification, URL generation, canonical `environment_id`, clear-state contracts, cross-workspace rejection, legacy aliases, `/admin/t`, Tenant panel provider absence, and provider-boundary Tenant allowlist. +- Pest Browser smoke tests grouped by surface model for shell, chip, clear, reload, and back/forward alignment. +- A coverage manifest and test plan so future admin surfaces can update coverage deliberately. + +## Technical Context + +**Language / Version**: PHP 8.4.15 +**Primary Framework**: Laravel 12.52.0 +**Admin UI**: Filament 5.2.1 +**Reactive Layer**: Livewire 4.1.4 +**Database**: PostgreSQL via Sail +**Testing**: Pest 4.3.1, PHPUnit 12.5 +**Validation Lanes**: Feature/static guards, Browser lane, possible heavy-governance classification if discovery-style guards are broadened +**Target Platform**: Laravel monolith in `apps/platform` +**Project Type**: Web application +**Performance Goals**: Keep Browser tests focused and grouped so the lane remains stable and reviewable. +**Constraints**: No migrations, no seeders unless fixture determinism is impossible, no package changes, no env/queue/scheduler/storage changes, no Playwright MCP dependency, no backwards compatibility aliases. +**Scale / Scope**: Core admin surface contracts only; optional surfaces are documented rather than silently included. + +Package posture: + +- Filament v5 requires Livewire v4.0+; this repo uses Livewire 4.1.4. +- Laravel 12 panel providers are registered in `apps/platform/bootstrap/providers.php`; this spec does not add a panel provider. +- No frontend assets are added. No `filament:assets` deployment change is expected. + +## Current Repo Truth + +Relevant existing seams: + +```text +apps/platform/app/Support/Navigation/WorkspaceHubRegistry.php +apps/platform/app/Support/Navigation/AdminSurfaceScope.php +apps/platform/app/Support/Navigation/WorkspaceHubEnvironmentFilter.php +apps/platform/app/Support/Navigation/WorkspaceHubFilterStateResetter.php +apps/platform/app/Filament/Concerns/ClearsWorkspaceHubEnvironmentFilterState.php +apps/platform/resources/views/filament/partials/workspace-hub-environment-filter-chip.blade.php +apps/platform/app/Support/Navigation/WorkspaceSidebarNavigation.php +apps/platform/app/Support/ManagedEnvironmentLinks.php +apps/platform/app/Support/OperationRunLinks.php +apps/platform/routes/web.php +``` + +Existing related tests and smoke coverage: + +```text +apps/platform/tests/Feature/Navigation/WorkspaceHubRegistryTest.php +apps/platform/tests/Feature/Navigation/WorkspaceHubEnvironmentFilterContractTest.php +apps/platform/tests/Feature/Navigation/WorkspaceHubClearFilterContractTest.php +apps/platform/tests/Feature/Navigation/WorkspaceHubSidebarUrlContractTest.php +apps/platform/tests/Feature/Navigation/Spec321AlertsAuditEnvironmentFilterContractTest.php +apps/platform/tests/Feature/Guards/LegacyTenantPlatformContextCleanupTest.php +apps/platform/tests/Feature/Guards/NoLegacyTenantPanelRuntimeTest.php +apps/platform/tests/Feature/Filament/BaselineCompareEnvironmentRouteContractTest.php +apps/platform/tests/Browser/Spec314WorkspaceHubNavigationContextSmokeTest.php +apps/platform/tests/Browser/Spec316WorkspaceHubClearFilterSmokeTest.php +apps/platform/tests/Browser/Spec190BaselineCompareMatrixSmokeTest.php +``` + +Spec 322 should extend or add targeted files rather than replacing these proven anchors. + +## Project Structure + +### Spec Artifacts + +```text +specs/322-browser-no-drift-regression-guard/spec.md +specs/322-browser-no-drift-regression-guard/plan.md +specs/322-browser-no-drift-regression-guard/tasks.md +specs/322-browser-no-drift-regression-guard/test-plan.md +specs/322-browser-no-drift-regression-guard/coverage-manifest.md +specs/322-browser-no-drift-regression-guard/checklists/requirements.md +specs/322-browser-no-drift-regression-guard/artifacts/screenshots/.gitkeep +``` + +### Likely Runtime/Test Areas For Later Implementation + +```text +apps/platform/tests/Feature/Navigation/Spec322AdminSurfaceScopeContractTest.php +apps/platform/tests/Feature/Navigation/Spec322LegacyQueryAliasGuardTest.php +apps/platform/tests/Feature/Navigation/Spec322EnvironmentCtaUrlContractTest.php +apps/platform/tests/Browser/Spec322WorkspaceHubNoDriftSmokeTest.php +apps/platform/tests/Browser/Spec322EnvironmentOwnedSurfaceSmokeTest.php +apps/platform/tests/Browser/Spec322WorkspaceOwnedAnalysisSmokeTest.php +apps/platform/tests/Browser/Spec322AlertsAuditNoDriftSmokeTest.php +apps/platform/tests/Browser/Support/Spec322WorkspaceEnvironmentBrowserHarness.php +``` + +The support harness path is suggested, not mandatory. If existing helper conventions provide enough reuse, implementation should keep helpers local to the test files. + +## UI / Surface Guardrail Plan + +- **Guardrail scope**: Workflow-only guardrail over existing surfaces. +- **Native vs custom classification summary**: Existing Filament-native surfaces; no new product UI. +- **Shared-family relevance**: Navigation, shell, filter chip, clear/reset, browser history. +- **State layers in scope**: route path, query string, Livewire properties, Filament table filters, deferred filters, persisted/session filters, shell context, chip visibility, browser history. +- **Audience modes in scope**: operator-MSP and support-platform only as existing users; no new disclosure modes. +- **Decision/diagnostic/raw hierarchy plan**: N/A - guard assertions only. +- **Raw/support gating plan**: N/A. +- **One-primary-action / duplicate-truth control**: Existing clear action remains the only filter reset control under test. +- **Handling modes by drift class or surface**: Workspace/Environment mismatch is a hard-stop candidate for implementation; optional unreachable browser surfaces are document-in-feature only if Feature coverage proves the contract. +- **Repository-signal treatment**: Review-mandatory for new admin surfaces missing manifest/test coverage. +- **Special surface test profiles**: `global-context-shell`. +- **Required tests or manual smoke**: Feature/static guards plus Pest Browser smoke tests. +- **Exception path and spread control**: Any browser gap must be documented in `coverage-manifest.md` with deterministic non-browser proof. +- **Active feature PR close-out entry**: Guardrail / Smoke Coverage. + +## Shared Pattern & System Fit + +- **Cross-cutting feature marker**: yes +- **Systems touched**: Navigation registry, surface scope enum, Environment filter resolver, filter resetter, shell context, browser tests. +- **Shared abstractions reused**: `WorkspaceHubRegistry`, `AdminSurfaceScope`, `WorkspaceHubEnvironmentFilter`, `WorkspaceHubFilterStateResetter`, `ClearsWorkspaceHubEnvironmentFilterState`, shared filter chip partial. +- **New abstraction introduced? why?**: No runtime abstraction. Test-only helper extraction is allowed only when it reduces repeated fragile browser setup. +- **Why the existing abstraction was sufficient or insufficient**: Runtime abstractions are sufficient; current gap is durable cross-surface guard coverage. +- **Bounded deviation / spread control**: Test helpers must remain in test support or local browser test scope and must not become product navigation registries. + +## OperationRun UX Impact + +- **Touches OperationRun start/completion/link UX?**: no +- **Central contract reused**: N/A +- **Delegated UX behaviors**: N/A +- **Surface-owned behavior kept local**: Existing Operations hub may be used as a workspace hub test surface. +- **Queued DB-notification policy**: N/A +- **Terminal notification path**: N/A +- **Exception path**: none + +## Provider Boundary & Portability Fit + +- **Shared provider/platform boundary touched?**: yes, guard-only +- **Provider-owned seams**: Microsoft/Entra/provider Tenant identity terms remain allowed through Spec 317 allowlist. +- **Platform-core seams**: Workspace, Managed Environment, Environment filter query key, shell ownership, route ownership. +- **Neutral platform terms / contracts preserved**: Workspace, Managed Environment, Environment, Provider Connection. +- **Retained provider-specific semantics and why**: Provider Tenant terminology remains where it means external Microsoft/Entra tenant identity. +- **Bounded extraction or follow-up path**: none expected; implementation should add a follow-up only if a current provider-boundary term is ambiguous outside the allowlist. + +## Constitution Check + +### Pre-Implementation + +- **Inventory-first / Snapshots-second**: Pass. No inventory or snapshot truth changes. +- **Read/write separation**: Pass. No product write actions are introduced. +- **Graph contract path**: Pass. No Graph calls are introduced. +- **Deterministic capabilities**: Pass. Capability behavior is not changed. +- **Workspace isolation**: Pass with required tests. Cross-workspace Environment IDs must be rejected. +- **Tenant isolation / provider boundary**: Pass with required legacy alias and provider Tenant allowlist guards. +- **RBAC-UX**: Pass with required tests for non-member/unauthorized Environment behavior where applicable. +- **OperationRun UX**: N/A. +- **Test governance**: Requires explicit Browser lane expansion, manifest, and test-plan documentation. +- **Proportionality**: Pass. No runtime persistence, enum/status family, or runtime framework. Test-only helper extraction must stay narrow. +- **Shared Pattern First**: Pass. Existing runtime paths are reused. +- **Filament-native UI**: Pass. No product UI changes; assertions target existing native/shared surfaces. +- **Spec Candidate Gate**: Pass. Direct manual promotion and already referenced follow-up from completed specs. + +### Post-Design + +No constitutional violation is expected. + +If implementation discovers that passing the guards requires product behavior changes beyond a narrow fix to existing Specs 314 through 321 contracts, update `spec.md` and `plan.md` before continuing. + +If implementation adds a runtime registry, persisted entity, enum, or broad helper layer, reopen the proportionality review and stop for review. + +## Surface Classification Plan + +Source classification comes from existing runtime contracts plus Spec 318 audit terminology. + +| Classification | Runtime contract | +| --- | --- | +| `workspace_hub` | Workspace-only shell; optional explicit filter when supported | +| `environment_owned_page` | Workspace + Environment shell; Environment route required | +| `workspace_owned_analysis_surface` | Workspace-only shell; no remembered Environment shell inheritance | +| `workspace_configuration_surface` | Workspace-only shell; configuration semantics; no Environment chip unless explicitly supported | +| `system_platform_surface` | System panel or non-admin platform surface | +| `out_of_scope` | Not stable/reachable or not part of this guard | + +The manifest must use these labels and must be updated when future specs add admin surfaces. + +## Feature / Static Guard Plan + +Create or update focused tests for: + +- `it('classifies_core_admin_surfaces_without_scope_drift')` +- `it('workspace_hub_clean_urls_never_emit_environment_or_legacy_query_params')` +- `it('environment_cta_urls_use_the_correct_surface_contract')` +- `it('clear_filter_results_match_clean_workspace_hub_entry_for_filterable_hubs')` +- `it('environment_id_filters_reject_cross_workspace_environment_ids')` +- `it('legacy_environment_query_aliases_do_not_create_filter_or_shell_state')` +- `it('has_no_active_legacy_tenant_panel_routes')` +- `it('allows_tenant_terms_only_in_provider_boundary_contexts')` + +Use existing tests where possible and add Spec 322 coverage only for gaps. + +## Browser Guard Plan + +Use Pest Browser. Do not introduce Playwright MCP dependency. + +Group browser tests by contract: + +1. Workspace hub clean entry, reload, and sidebar/global/direct origins. +2. Workspace hub filtered entry, chip, clear, reload, and back/forward. +3. Environment-owned route/shell contract and invalid clean workspace access. +4. Workspace-owned analysis and workspace configuration shell cutover. +5. Alerts/Audit Log focused no-drift smoke. + +Screenshots are diagnostic only. Store useful artifacts under: + +```text +specs/322-browser-no-drift-regression-guard/artifacts/screenshots/ +``` + +## Data / Migration Plan + +No migrations are planned. + +No new tables, persisted entities, seeders, packages, env vars, queues, scheduler, storage, deployment assets, or compatibility layers are planned. + +If deterministic browser fixtures cannot be produced without a seeder change, update the spec and plan first. Prefer test factories and explicit fixture helpers. + +## Authorization / Security Plan + +- Use existing workspace and Managed Environment access helpers/factories. +- Assert cross-workspace and unauthorized Environment IDs do not leak data and do not switch Workspace. +- Keep UI state out of the authorization boundary; guard server-side behavior via Feature tests where possible. +- Keep `/admin/t` and `TenantPanelProvider` absence guarded. + +## Filament v5 Output Contract + +1. **Livewire v4.0+ compliance**: Required. The app uses Livewire 4.1.4; tests and any narrow fixes must not introduce Livewire v3 references. +2. **Provider registration location**: No provider changes are planned. Laravel 12 Filament panel providers remain in `apps/platform/bootstrap/providers.php`. +3. **Globally searchable resources**: Spec 322 should not make any resource globally searchable. Existing resources must continue either to have View/Edit pages or have global search disabled according to Filament v5 rules. +4. **Destructive actions**: Spec 322 introduces no destructive product actions. If a narrow runtime fix touches an existing destructive action, it must preserve `->action(...)`, `->requiresConfirmation()`, policy/gate authorization, and audit behavior. +5. **Asset strategy**: No global or on-demand Filament assets are planned. No deployment `filament:assets` change is required. +6. **Testing plan**: Feature/static guards plus Pest Browser tests for pages/resources as Livewire/browser-visible surfaces. Mutating actions are not introduced. + +## Test Governance Check + +- **Test purpose / classification by changed surface**: Feature/static for registries, URLs, aliases, and authorization; Browser for shell/chip/clear/reload/history. +- **Affected validation lanes**: fast-feedback, browser, and optional heavy-governance if discovery-style guard breadth expands. +- **Why this lane mix is the narrowest sufficient proof**: Feature tests can exhaustively prove deterministic contracts. Browser is required only for browser state and visible shell/chip/history. +- **Narrowest proving commands**: Listed in `test-plan.md`. +- **Fixture / helper / factory / seed / context cost risks**: Browser setup can grow. Keep helper defaults explicit and avoid global seed reliance. +- **Expensive defaults or shared helper growth introduced?**: Not by default. Any browser harness must be opt-in. +- **Heavy-family additions, promotions, or visibility changes**: Explicit `Spec322` Browser smoke files. +- **Surface-class relief / special coverage rule**: `global-context-shell`. +- **Closing validation and reviewer handoff**: Review manifest, test names, helper cost, focused commands, browser gap documentation, and absence of runtime compatibility aliases. +- **Budget / baseline / trend follow-up**: Document runtime if materially higher than existing Spec 314/316 browser smoke. +- **Review-stop questions**: Are browser tests focused? Are legacy aliases rejected rather than accepted? Are optional gaps documented? Does any helper create hidden fixture cost? +- **Escalation path**: document-in-feature; follow-up-spec only if browser lane cost becomes structural. +- **Active feature PR close-out entry**: Guardrail / Smoke Coverage. +- **Why no dedicated follow-up spec is needed**: Spec 322 is the dedicated no-drift guardrail package. + +## Implementation Phases + +1. Confirm existing surface classifications and route/helper names. +2. Add/update coverage manifest with all required surfaces and current planned coverage. +3. Add Feature/static guards for classifications, URLs, legacy aliases, cross-workspace rejection, `/admin/t`, and provider Tenant allowlist. +4. Add or refactor test-only browser helper patterns if existing duplication becomes brittle. +5. Add grouped Pest Browser smoke tests for workspace hubs, Environment-owned pages, workspace-owned analysis/configuration surfaces, and Alerts/Audit Log. +6. Run focused Feature/static tests. +7. Run focused Browser tests. +8. Update coverage manifest with actual coverage and any browser gaps. +9. Run formatting and `git diff --check`. +10. Report exact test commands/results and no-runtime-change confirmations. + +## Complexity Tracking + +| Violation | Why Needed | Simpler Alternative Rejected Because | +| --- | --- | --- | +| Browser lane expansion | Shell/chip/clear/reload/history alignment is browser-visible and cannot be proven by static tests alone | Existing per-spec smoke tests do not cover the full stabilized chain or Alerts/Audit Log after Spec 321 | +| Coverage manifest | Future surfaces need an explicit coverage contract | Relying on test file names alone would hide browser gaps and classification drift | + +## Rollout Considerations + +- No runtime rollout impact is expected. +- No staging/production migration or deployment step is expected. +- CI should include the focused Feature/static guard command and the Browser lane command when Browser infrastructure is available. +- Do not claim full suite green unless the full suite is actually run. + +## Risks And Controls + +| Risk | Control | +| --- | --- | +| Browser suite becomes flaky or too broad | Group smoke tests by surface model, assert stable text/URL/chip state, move exhaustive alias coverage to Feature tests | +| Test helper hides expensive setup | Keep workspace/environment/session setup explicit and opt-in | +| Optional surfaces are silently skipped | Document gaps and reasons in `coverage-manifest.md` | +| Legacy aliases are accidentally accepted in tests | Feature guards must assert aliases do not create filter or shell state | +| Runtime behavior changes beyond guard fixes | Update spec/plan before continuing | + +## Validation Plan + +See `test-plan.md` for exact targeted commands. + +Minimum final validation: + +```bash +cd apps/platform +./vendor/bin/sail artisan test tests/Feature/Navigation/Spec322AdminSurfaceScopeContractTest.php tests/Feature/Navigation/Spec322LegacyQueryAliasGuardTest.php tests/Feature/Navigation/Spec322EnvironmentCtaUrlContractTest.php --compact +./vendor/bin/sail artisan test tests/Browser/Spec322WorkspaceHubNoDriftSmokeTest.php tests/Browser/Spec322EnvironmentOwnedSurfaceSmokeTest.php tests/Browser/Spec322WorkspaceOwnedAnalysisSmokeTest.php tests/Browser/Spec322AlertsAuditNoDriftSmokeTest.php --compact +./vendor/bin/sail pint --dirty +git diff --check +``` + +Exact file names may be adjusted during implementation if existing repo conventions make narrower updates preferable. diff --git a/specs/322-browser-no-drift-regression-guard/spec.md b/specs/322-browser-no-drift-regression-guard/spec.md new file mode 100644 index 00000000..fcc0da2e --- /dev/null +++ b/specs/322-browser-no-drift-regression-guard/spec.md @@ -0,0 +1,393 @@ +# Feature Specification: Browser No-Drift Regression Guard + +**Feature Branch**: `322-browser-no-drift-regression-guard` +**Created**: 2026-05-17 +**Status**: Draft +**Input**: User supplied full Spec 322 draft: "Browser No-Drift Regression Guard" +**Type**: Durable regression coverage / browser contract guard / no-drift enforcement +**Runtime Posture**: Test/guard-first. No new product behavior unless required to make guards deterministic. + +## Dependencies + +- Spec 314: Workspace Hub Navigation Context Contract +- Spec 315: Environment CTA Explicit Filter Contract +- Spec 316: Workspace Hub Clear Filter Contract +- Spec 317: Legacy Tenant / Environment Context Cleanup +- Spec 318: Admin Surface Scope & Shell Context Audit +- Spec 319: Environment-Owned Surface Routing & Shell Context Contract +- Spec 320: Workspace-Owned Analysis Surface Registration & Shell Cutover +- Spec 321: Alerts / Audit Log Environment Filter Contract Decision + +## Spec Candidate Check + +- **Problem**: Workspace, Environment, filter, shell, clear-state, and legacy Tenant cleanup contracts now span routes, Filament pages/resources, Livewire state, session persistence, sidebar/global navigation, and browser history. Without durable guards, future specs can reintroduce hidden Environment shell inheritance or stale filter state. +- **Today's failure**: A future page or helper could emit `tenant`, `managed_environment_id`, remembered Environment state, or a workspace-clean URL that silently renders Environment-owned data. Operators would see mismatched shell, URL, filter chip, and data scope. +- **User-visible improvement**: Operators get consistent Workspace-only hubs, explicit Environment-owned pages, visible filtered state, reliable clear behavior, and no resurrected legacy Tenant platform context. +- **Smallest enterprise-capable version**: Add focused Feature/static guards plus grouped Pest Browser contract smoke tests for core high-risk surfaces, with a coverage manifest documenting any browser gaps. +- **Explicit non-goals**: No product redesign, no new Environment filters, no Alert/Audit contract change beyond Spec 321, no migrations, no seeders unless deterministic browser fixtures are impossible, no packages, no compatibility aliases, no Playwright MCP dependency, no visual-regression framework. +- **Permanent complexity imported**: New or updated Pest Feature tests, Pest Browser smoke tests, test-only helper structure where existing browser conventions are insufficient, coverage manifest, test plan, and ongoing maintenance obligation for new admin surfaces. +- **Why now**: Specs 314 through 321 intentionally stabilized the contracts and repeatedly deferred durable no-drift coverage to Spec 322. Spec 321 is now implemented on the current branch history, so the guard can cover the full chain. +- **Why not local**: Local tests per surface already exist, but drift risk is cross-surface and browser-state-dependent. A single future change can break URL/chip/shell/session/history alignment across several surfaces. +- **Approval class**: Core Enterprise +- **Red flags triggered**: Cross-surface coverage and test infrastructure. Defense: the scope is test-only and protects workspace isolation, Environment ownership, auditability, and operator trust without adding runtime product frameworking. +- **Score**: Nutzen: 2 | Dringlichkeit: 2 | Scope: 2 | Komplexitaet: 1 | Produktnaehe: 1 | Wiederverwendung: 2 | **Gesamt: 10/12** +- **Decision**: approve + +## Candidate Source And Guardrail Result + +**Candidate Source**: Direct user-provided manual promotion for Spec 322. The candidate is also referenced as deferred follow-up in Specs 319, 320, and 321. + +**Completed-Spec Guardrail**: Specs 314 through 321 were inspected as completed or historical context and remain unchanged by this preparation. This package creates a new Spec 322 path and does not rewrite close-out, validation, completed tasks, smoke evidence, or review history from earlier specs. + +**Close alternatives deferred**: + +- Customer Review Workspace v1 polish: productization lane after context foundations are protected. +- Decision-Based Governance Inbox v1 polish: product lane after no-drift guards exist. +- Localization v1 and commercial lifecycle maturity: roadmap product lanes, not guardrail completion. +- Broad visual regression framework: deferred as too heavy for the current need. + +## Summary + +Add durable browser and regression coverage to prevent Workspace / Environment context drift from returning. + +Specs 314 through 321 established these product contracts: + +- Workspace hubs use Workspace-only shell ownership. +- Environment Dashboard CTAs use canonical `?environment_id=...` when they intentionally filter a workspace hub. +- Clear filter removes URL, Livewire, Filament table, deferred table, session, and persisted state. +- Legacy Tenant platform context is removed or quarantined. +- Environment-owned pages require Environment route/shell context. +- Workspace-owned analysis pages cut over to Workspace-only shell. +- Alerts and Audit Log have explicit Spec 321 contracts. + +Spec 322 turns those contracts into maintainable guards. + +## Product Context + +TenantPilot is workspace-first. + +Workspace is the primary platform context. Managed Environment is a secondary operational context inside a Workspace. Provider Tenant remains only a provider-boundary concept, such as Microsoft/Entra/Graph tenant identity. + +The guarded admin surface models are: + +| Model | Expected contract | +| --- | --- | +| Workspace Hub | Workspace-only shell, clean workspace-wide URL, optional canonical `environment_id` filter if supported, visible chip when filtered, clear returns to clean state | +| Environment-Owned Page | Workspace + Environment shell, route encodes Environment ownership, no clean workspace-only rendering, no workspace-hub `environment_id` model | +| Workspace-Owned Analysis Surface | Workspace-only shell, no remembered Environment inheritance, optional `environment_id` only where explicitly supported | +| Workspace Configuration Surface | Workspace-only shell, no Environment filter unless explicitly supported | + +## Spec Scope Fields + +- **Scope**: canonical-view / workspace shell and Environment route guardrail +- **Primary Routes**: `/admin`, `/admin/workspaces/{workspace}/operations`, `/admin/provider-connections`, `/admin/finding-exceptions/queue`, `/admin/evidence/overview`, `/admin/reviews`, `/admin/reviews/workspace`, `/admin/governance/inbox`, `/admin/governance/decisions`, `/admin/audit-log`, `/admin/alerts`, `/admin/alerts/alert-deliveries`, `/admin/alerts/alert-rules`, `/admin/alerts/alert-destinations`, `/admin/settings/workspace`, `/admin/workspaces/{workspace}/environments/{environment}`, Environment-owned subroutes, `/admin/baseline-profiles`, `/admin/baseline-snapshots`, `/admin/findings/my-work`, `/admin/findings/intake`, `/admin/findings/hygiene`, `/admin/cross-environment-compare` +- **Data Ownership**: No new persisted data. Guards must prove existing workspace-owned and Environment-owned records remain scoped by current Workspace and authorized Environment membership. +- **RBAC**: Tests must use existing workspace membership and Managed Environment access fixtures. Cross-workspace or unauthorized Environment IDs must resolve as safe no-access / deny-as-not-found behavior. + +For canonical-view specs: + +- **Default filter behavior when Environment context is active**: Workspace hubs and workspace-owned analysis surfaces must remain Workspace-only unless a valid canonical `environment_id` query parameter is present and the surface explicitly supports it. +- **Explicit entitlement checks preventing cross-environment leakage**: Feature tests must prove cross-workspace and unauthorized Environment IDs do not switch Workspace, do not leak data, and do not create shell/filter state. + +## Cross-Cutting / Shared Pattern Reuse + +- **Cross-cutting feature?**: yes +- **Interaction class(es)**: navigation, context shell, filter chip, clear filter, browser history, global/sidebar entries, Environment Dashboard CTAs, test lane governance +- **Systems touched**: `WorkspaceHubRegistry`, `AdminSurfaceScope`, `WorkspaceHubEnvironmentFilter`, `WorkspaceHubFilterStateResetter`, `ClearsWorkspaceHubEnvironmentFilterState`, shared chip partial, route helpers, browser tests, Feature guards +- **Existing pattern(s) to extend**: Existing Spec 314, 316, 319, 320, and 321 guard tests and browser smoke tests +- **Shared contract / presenter / builder / renderer to reuse**: Existing navigation/filter/reset helpers and existing Pest Browser conventions +- **Why the existing shared path is sufficient or insufficient**: Existing paths are sufficient for runtime behavior. Spec 322 may add test-only helper organization if required to avoid copying brittle browser setup across every surface. +- **Allowed deviation and why**: Test-only helper extraction is allowed when it remains under test support paths and does not become a runtime surface registry. +- **Consistency impact**: URL, visible chip, shell text, data scope, clear action, reload, and browser history must remain aligned. +- **Review focus**: Verify guards protect contracts without changing product behavior or accepting legacy aliases. + +## OperationRun UX Impact + +- **Touches OperationRun start/completion/link UX?**: no +- **Shared OperationRun UX contract/layer reused**: N/A +- **Delegated start/completion UX behaviors**: N/A +- **Local surface-owned behavior that remains**: Existing Operations hub and OperationRun links may be used as tested surfaces only. +- **Queued DB-notification policy**: N/A +- **Terminal notification path**: N/A +- **Exception required?**: none + +## Provider Boundary / Platform Core Check + +- **Shared provider/platform boundary touched?**: yes, in guard assertions only +- **Boundary classification**: mixed; platform-core shell/query contracts are guarded while provider-boundary Tenant terminology remains allowlisted where it means Microsoft/Entra/provider tenant identity +- **Seams affected**: query keys, URL helpers, provider-boundary terminology allowlist, legacy Tenant route guards +- **Neutral platform terms preserved or introduced**: Workspace, Managed Environment, Environment, Provider Connection +- **Provider-specific semantics retained and why**: `tenant` remains allowed only in provider-boundary contexts documented by Spec 317 allowlist. +- **Why this does not deepen provider coupling accidentally**: The spec rejects Tenant as Environment/platform synonym and adds guards against old query aliases. +- **Follow-up path**: none unless implementation discovers a current provider-boundary ambiguity not covered by Spec 317. + +## 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 | +| --- | --- | --- | --- | --- | --- | --- | +| Browser regression guards for existing admin surfaces | no product UI change | Existing Filament surfaces | navigation, shell, filter chip | shell, URL-query, Livewire, table filters, session, browser history | no | Test-only guardrail | +| Coverage manifest | no | N/A | test governance | none | no | Documentation artifact for guard coverage | + +## Decision-First Surface Role + +Spec 322 does not add or materially change operator-facing surfaces. The guarded surfaces keep their existing roles: + +- Workspace hubs remain Secondary Context / operational workspace surfaces. +- Environment-owned pages remain Environment-specific decision/diagnostic surfaces. +- Workspace-owned analysis surfaces remain workspace-level analysis surfaces. +- Configuration surfaces remain workspace configuration surfaces. + +## Audience-Aware Disclosure + +N/A - no product-facing detail/status surface is added or materially changed. + +## UI/UX Surface Classification + +No operator-facing surface classification changes are introduced. The classifications are documented in `coverage-manifest.md` for guard coverage only. + +## Operator Surface Contract + +No new page contract is introduced. The tests must assert that existing page contracts remain truthful: + +- Workspace hub shell copy must not imply an active Environment when the URL is clean. +- Filtered workspace hubs must show visible Environment chip state. +- Environment-owned pages must show Workspace + active Environment shell context. +- Configuration surfaces must not show Environment filter chips from query aliases. + +## Proportionality Review + +- **New source of truth?**: no runtime source of truth; yes test-documentation truth in `coverage-manifest.md` +- **New persisted entity/table/artifact?**: no persisted entity/table; yes Spec Kit documentation artifacts +- **New abstraction?**: no runtime abstraction; possible test-only harness helpers if duplication requires them +- **New enum/state/reason family?**: no +- **New cross-domain UI framework/taxonomy?**: no runtime UI framework; the manifest uses test classifications already established by Specs 318 through 321 +- **Current operator problem**: Operators and reviewers need confidence that Workspace/Environment context cannot silently drift across navigation, filters, reload, and history. +- **Existing structure is insufficient because**: Current focused tests cover slices but do not provide a durable coverage map and grouped browser guard suite across the whole stabilized chain. +- **Narrowest correct implementation**: Add explicit Feature/static guards plus focused Browser smoke files grouped by surface model, reusing existing helpers and only extracting test helpers if repeated setup becomes brittle. +- **Ownership cost**: Browser lane runtime and future maintenance when new admin surfaces are added. +- **Alternative intentionally rejected**: Full visual regression framework and broad Playwright MCP dependency. +- **Release truth**: Current-release guardrail over existing implemented contracts. + +### 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. Legacy query aliases must not be supported or redirected. + +## Testing / Lane / Runtime Impact + +- **Test purpose / classification**: Feature, Heavy-Governance, Browser +- **Validation lane(s)**: fast-feedback for static/Feature guards; browser for critical shell/filter/history smoke; heavy-governance if a registry/discovery guard is added or materially expanded +- **Why this classification and these lanes are sufficient**: URL generation, classification, legacy alias rejection, and cross-workspace rejection are deterministic Feature tests. Shell/chip/reload/back-forward alignment is browser-visible and belongs in Browser lane. +- **New or expanded test families**: Expanded Spec 322 browser no-drift family plus feature guard files under `apps/platform/tests/Feature/Navigation` or existing guard directories. +- **Fixture / helper cost impact**: Existing workspace/environment factories and browser fixture patterns should be reused. Any new helper must keep workspace, membership, session, and Environment setup explicit. +- **Heavy-family visibility / justification**: Browser tests are explicitly named `Spec322...SmokeTest` and grouped by surface model to keep lane cost visible. +- **Special surface test profile**: global-context-shell +- **Standard-native relief or required special coverage**: Special coverage required because shell, URL, Livewire/table/session, and browser history can drift independently. +- **Reviewer handoff**: Reviewers must verify lane fit, helper cost, surface manifest accuracy, and that Browser tests do not become one large flaky scenario. +- **Budget / baseline / trend impact**: Browser lane expands. Runtime must be documented in implementation close-out if material. +- **Escalation needed**: document-in-feature unless the Browser lane becomes structurally expensive; then follow-up-spec. +- **Active feature PR close-out entry**: Guardrail / Smoke Coverage +- **Planned validation commands**: See `test-plan.md`. + +## User Scenarios & Testing + +### User Story 1 - Workspace hubs stay clean and reload-safe (Priority: P1) + +As a workspace operator who previously worked inside a Managed Environment, I can open workspace hubs from sidebar/global/direct clean URLs and see Workspace-only shell, no Environment filter chip, and no legacy query state. + +**Why this priority**: Clean workspace hub entry is the foundation for all other scope contracts. + +**Independent Test**: Start from an Environment Dashboard with remembered Environment state, open each required workspace hub clean URL or sidebar/global link, reload, and assert clean URL, Workspace-only shell, no chip, and no legacy query params. + +**Acceptance Scenarios**: + +1. Given an active remembered Environment, when Operations opens through its clean workspace URL, then no Environment query parameter, shell, or chip is present. +2. Given a clean workspace hub is reloaded, when the page returns, then no stale Environment shell or chip appears. + +### User Story 2 - Filtered workspace hubs expose visible and clearable Environment focus (Priority: P1) + +As an operator drilling from an Environment-owned page into a filterable workspace hub, I can see the canonical `environment_id` filter as a visible chip and clear it back to the clean workspace-wide page. + +**Why this priority**: Hidden filters create the highest trust risk because data can be narrowed while the shell looks workspace-wide. + +**Independent Test**: Open each filterable hub with `?environment_id={id}`, assert chip and filtered data, clear it, reload, and assert workspace-wide state. + +**Acceptance Scenarios**: + +1. Given a valid current Workspace Environment ID, when Provider Connections opens with `environment_id`, then the shell remains Workspace-only and the chip names that Environment. +2. Given the filter is cleared, when the browser reloads, then URL, chip, table state, and shell remain clean. + +### User Story 3 - Browser history never creates URL/chip/shell mismatch (Priority: P1) + +As an operator using browser back and forward after filtering and clearing, I see URL, visible chip, shell context, and data scope remain aligned. + +**Why this priority**: Browser history was a high-risk source of stale Livewire/session state in Specs 314 through 316. + +**Independent Test**: For required high-risk hubs, open filtered URL, clear, go back, go forward, and assert alignment after each transition. + +**Acceptance Scenarios**: + +1. Given back returns to a URL containing `environment_id`, then the chip exists and shell remains Workspace-only. +2. Given forward returns to a clean URL, then the chip is absent and shell remains Workspace-only. + +### User Story 4 - Environment-owned pages require Environment route and shell (Priority: P1) + +As an operator entering an Environment-owned page, I see Workspace + Environment shell context and cannot access that page through an old clean workspace-only URL or remembered fallback. + +**Why this priority**: Baseline Compare and adjacent Environment-owned pages must not regress into workspace-hub filter semantics. + +**Independent Test**: Open Environment-owned pages from Environment Dashboard or canonical Environment routes, reload, navigate away/back, and assert Environment shell. Attempt former clean workspace-only access where routes exist and assert safe 404/no-access/redirect behavior. + +**Acceptance Scenarios**: + +1. Given Baseline Compare opens from Environment Dashboard, then its URL contains the Environment route segment and no workspace-hub `environment_id` query model. +2. Given an old workspace-only Baseline Compare URL with `environment_id`, then it does not render a valid Environment page. + +### User Story 5 - Workspace-owned analysis and configuration surfaces cut away from Environment shell (Priority: P2) + +As an operator opening analysis or configuration pages from an Environment origin, I see Workspace-only shell and no remembered Environment shell inheritance. + +**Why this priority**: These surfaces are likely future navigation targets and must stay workspace-owned. + +**Independent Test**: Start from Environment Dashboard, open each analysis/configuration surface by clean URL or navigation, reload, and assert Workspace-only shell and no chip unless the URL explicitly supports filtering. + +**Acceptance Scenarios**: + +1. Given Baseline Profiles opens from Environment Dashboard, then shell is Workspace-only and no Environment chip appears. +2. Given Alert Rules opens with a stray `environment_id`, then no Environment chip or shell context appears. + +### User Story 6 - Legacy Tenant aliases remain invalid (Priority: P2) + +As a reviewer or future implementer, I have deterministic guards proving legacy Tenant query aliases and `/admin/t` routes cannot create Environment filter or shell state. + +**Why this priority**: Spec 317 cleanup must not be undone by future helper or copied test fixture drift. + +**Independent Test**: Feature tests cover all legacy alias keys across representative surfaces; browser smoke covers a representative subset without making the browser suite huge. + +**Acceptance Scenarios**: + +1. Given `tenant`, `tenant_id`, `managed_environment_id`, `environment`, `tenant_scope`, or `tableFilters` are present on a workspace hub URL, then no Environment filter state appears. +2. Given `/admin/t/...` is requested, then it is not an active route and no Tenant panel provider is registered. + +## Edge Cases + +- Cross-workspace `environment_id` is supplied to a filterable workspace hub. +- A valid current Workspace Environment ID is supplied but the actor lacks access. +- Legacy aliases appear together with unrelated query parameters. +- Legacy aliases appear together with canonical `environment_id`; only canonical behavior is allowed, and no legacy alias may survive generated links. +- Livewire table filters or deferred filters have remembered Environment-like state. +- Session-persisted table filters survive from an earlier page visit. +- Browser back/forward restores a filtered URL after clear. +- Environment-owned page has a legacy workspace-only route or landing alias. +- Alert/Audit rows with null Environment attribution exist. +- Optional pages are unreachable or lack deterministic fixtures. +- Browser profile or local environment blocks browser execution. + +## Requirements + +### Functional Requirements + +- **FR-001**: The coverage manifest MUST list every required surface with classification, clean URL, filtered URL support, Environment route requirement, clear support, Browser coverage status, Feature coverage status, and notes. +- **FR-002**: Workspace hub clean-entry guards MUST cover Operations, Governance Inbox, Decision Register, Finding Exceptions Queue, Provider Connections, Evidence Overview, Reviews, Customer Reviews, Alert Deliveries, and Audit Log. +- **FR-003**: Filtered workspace hub guards MUST cover filterable hubs using canonical `environment_id` and MUST reject legacy query aliases. +- **FR-004**: Clear-filter guards MUST prove URL, Livewire state, Filament table filters, deferred filters, persisted/session state, chip state, and shell context return to clean workspace-wide state where the surface supports clearing. +- **FR-005**: Browser back/forward guards MUST cover Provider Connections, Finding Exceptions Queue, Customer Reviews, Evidence Overview, Alert Deliveries, and Audit Log. +- **FR-006**: Environment-owned page guards MUST cover Environment Dashboard, Baseline Compare, Required Permissions, Provider Readiness / Onboarding Readiness, and Inventory or Inventory Coverage if browser-stable. +- **FR-007**: Baseline Compare MUST have a browser guard and a clean workspace-only invalid-access guard. +- **FR-008**: Workspace-owned analysis guards MUST cover Baseline Profiles, Baseline Snapshots, My Findings, Findings Intake, Findings Hygiene, and Cross-environment Compare. +- **FR-009**: Workspace configuration guards MUST cover Alert Rules, Alert Destinations, and Workspace Settings as Workspace-only surfaces. +- **FR-010**: Legacy Tenant alias guards MUST cover `tenant`, `tenant_id`, `managed_environment_id`, `environment`, `tenant_scope`, and `tableFilters`. +- **FR-011**: No active `/admin/t` route and no active `TenantPanelProvider` may exist. +- **FR-012**: Provider-boundary Tenant terminology MUST remain allowed only through the Spec 317 allowlist or equivalent current guard. +- **FR-013**: Cross-workspace Environment IDs MUST be rejected with safe no-access behavior and must not leak data or switch Workspace. +- **FR-014**: Browser helpers MUST avoid brittle selectors where stable text, route, ARIA, or `data-testid` hooks already exist. +- **FR-015**: Browser tests MUST stay grouped and focused rather than one large all-in-one scenario. +- **FR-016**: Any browser gap MUST be documented in the coverage manifest with a blocker reason and backed by deterministic Feature/Unit coverage. +- **FR-017**: No product behavior may be changed except narrow fixes required to satisfy existing Specs 314 through 321 contracts. +- **FR-018**: No migrations, seeders, packages, env vars, queues, scheduler, storage, or deployment asset changes are allowed unless the spec is updated before implementation continues. + +### Non-Functional Requirements + +- **NFR-001**: Browser tests MUST avoid sleeps and volatile row-count assertions unless seeded data makes them deterministic. +- **NFR-002**: Feature/static guards SHOULD cover exhaustive alias and registry checks so Browser tests remain smoke-level. +- **NFR-003**: Test setup MUST keep workspace, membership, Environment access, session, and provider fixture cost explicit. +- **NFR-004**: Test names MUST make heavy/browser lane cost visible, using `Spec322` prefixes. +- **NFR-005**: Filament v5 / Livewire v4 patterns MUST remain in test code. No Livewire v3 or Filament v3/v4 assumptions. +- **NFR-006**: Browser screenshots MAY be diagnostic, but assertions are authoritative. +- **NFR-007**: Guard failures MUST identify the surface and mismatch clearly enough for follow-up repair. +- **NFR-008**: The implementation MUST not introduce Playwright MCP dependency; use Pest Browser coverage unless the spec is explicitly revised. + +## Data / Truth-Source Requirements + +- **DTR-001**: The coverage manifest is the documentation truth for Spec 322 guard coverage, not runtime product truth. +- **DTR-002**: Test data must use existing factories and persisted records only to prove scope alignment. +- **DTR-003**: Environment filtering truth remains canonical `environment_id`; legacy aliases are invalid inputs. +- **DTR-004**: Provider Tenant terms remain provider-boundary terminology only. + +## Out Of Scope + +- New product features. +- Redesigning pages. +- Changing navigation IA unless a guard reveals an existing in-scope regression requiring a narrow fix. +- Changing Environment CTA behavior except to satisfy existing contract. +- Adding new Environment filters. +- Changing Alerts/Audit Log decisions from Spec 321. +- Refactoring all Filament pages. +- Adding a full visual-regression framework. +- Introducing Playwright MCP dependency. +- Requiring manual screenshots for every run. +- Adding flaky tests. +- Adding migrations, seeders, packages, env vars, queues, scheduler, storage, deployment assets, or compatibility layers. + +## Success Criteria + +- **SC-001**: `coverage-manifest.md` exists and lists all required surfaces with coverage status and gaps. +- **SC-002**: Feature/static guards cover classification, clean URLs, Environment CTA URLs, clear filter, cross-workspace rejection, legacy aliases, `/admin/t`, Tenant panel provider absence, and provider Tenant allowlist. +- **SC-003**: Browser guards cover clean workspace hub entry, filtered entry, clear/reload, back/forward, Environment-owned pages, workspace-owned analysis pages, workspace configuration pages, and Alerts/Audit Log contracts at the scope defined in `test-plan.md`. +- **SC-004**: Browser gaps, if any, are explicit and have deterministic non-browser guard coverage. +- **SC-005**: Targeted Feature/Unit and Browser commands pass, or failures are documented with exact blockers. +- **SC-006**: `git diff --check` passes. +- **SC-007**: No broad runtime/product change is introduced. + +## Assumptions + +- Pest Browser is the preferred durable browser lane because the repo already uses it. +- Existing browser helpers and fixtures can be reused or lightly factored without adding runtime abstraction. +- Spec 321 runtime implementation is present in current branch history and may be guarded by Spec 322. +- Some optional surfaces may remain Feature-covered only if browser fixtures are not stable or routes are not reachable. + +## Open Questions + +None blocking preparation. + +Implementation may discover browser-only fixture gaps. Those should be documented in `coverage-manifest.md` and covered by deterministic Feature/Unit guards rather than silently skipped. + +## Follow-Up Spec Candidates + +- Customer Review Workspace v1 polish / productization. +- Decision-Based Governance Inbox v1 polish. +- Localization v1 customer-facing surfaces. +- Cross-Tenant Compare & Promotion v1 productization. +- Commercial entitlements / billing-state maturity. + +These are product lanes and are not part of Spec 322. + +## Required Final Report Shape + +Implementation close-out must report: + +- Changed behavior. +- Coverage added. +- Feature tests command and result. +- Browser tests command and result. +- Coverage manifest status. +- Known browser gaps. +- Remaining risks. +- Test files added/updated. +- Surfaces covered. +- Surfaces excluded with reason. +- Whether screenshots were saved. +- Whether full suite was run. +- Known unrelated residual failures. +- Confirmation that no migrations, seeders, packages, env vars, queues, scheduler, storage, deployment asset changes, backwards compatibility layer, or legacy query alias support were added. diff --git a/specs/322-browser-no-drift-regression-guard/tasks.md b/specs/322-browser-no-drift-regression-guard/tasks.md new file mode 100644 index 00000000..a5d9111a --- /dev/null +++ b/specs/322-browser-no-drift-regression-guard/tasks.md @@ -0,0 +1,217 @@ +# Tasks: Browser No-Drift Regression Guard + +**Input**: Spec artifacts from `specs/322-browser-no-drift-regression-guard/` +**Prerequisites**: `spec.md`, `plan.md`, `test-plan.md`, `coverage-manifest.md` +**Runtime posture**: Test/guard-first. No new product behavior unless a narrow fix is required to satisfy existing Specs 314 through 321 contracts. + +## Phase 1: Discovery Confirmation + +- [x] T001 Re-read `specs/322-browser-no-drift-regression-guard/spec.md`, `plan.md`, `test-plan.md`, and `coverage-manifest.md` before implementation starts. +- [x] T002 Re-read Specs 314 through 321 as historical/context dependencies without editing their completed artifacts. +- [x] T003 Inspect `apps/platform/app/Support/Navigation/WorkspaceHubRegistry.php` and confirm required workspace hubs and exclusions still match the manifest. +- [x] T004 Inspect `apps/platform/app/Support/Navigation/AdminSurfaceScope.php` and confirm workspace-owned analysis surface classification still matches the manifest. +- [x] T005 Inspect `apps/platform/app/Support/Navigation/WorkspaceHubEnvironmentFilter.php` and confirm canonical `environment_id` remains the only accepted filter query key. +- [x] T006 Inspect `apps/platform/app/Support/Navigation/WorkspaceHubFilterStateResetter.php` and confirm legacy Environment-like query/table/session keys remain resettable. +- [x] T007 Inspect route names and URLs for all required surfaces listed in `specs/322-browser-no-drift-regression-guard/coverage-manifest.md`. +- [x] T008 Update `specs/322-browser-no-drift-regression-guard/coverage-manifest.md` if discovery proves a route, classification, or existing coverage status has changed. + +## Phase 2: Feature / Static Guards + +- [x] T009 [P] Add `it('classifies_core_admin_surfaces_without_scope_drift')` in `apps/platform/tests/Feature/Navigation/Spec322AdminSurfaceScopeContractTest.php`. +- [x] T010 [P] Add `it('workspace_hub_clean_urls_never_emit_environment_or_legacy_query_params')` in `apps/platform/tests/Feature/Navigation/Spec322AdminSurfaceScopeContractTest.php`. +- [x] T011 [P] Add `it('clear_filter_results_match_clean_workspace_hub_entry_for_filterable_hubs')` in `apps/platform/tests/Feature/Navigation/Spec322AdminSurfaceScopeContractTest.php`. +- [x] T012 [P] Add `it('environment_id_filters_reject_cross_workspace_environment_ids')` in `apps/platform/tests/Feature/Navigation/Spec322AdminSurfaceScopeContractTest.php`. +- [x] T013 [P] Add `it('environment_cta_urls_use_the_correct_surface_contract')` in `apps/platform/tests/Feature/Navigation/Spec322EnvironmentCtaUrlContractTest.php`. +- [x] T014 [P] Add `it('legacy_environment_query_aliases_do_not_create_filter_or_shell_state')` in `apps/platform/tests/Feature/Navigation/Spec322LegacyQueryAliasGuardTest.php`. +- [x] T015 [P] Add `it('has_no_active_legacy_tenant_panel_routes')` coverage by extending or referencing `apps/platform/tests/Feature/Guards/NoLegacyTenantPanelRuntimeTest.php`. +- [x] T016 [P] Add `it('allows_tenant_terms_only_in_provider_boundary_contexts')` coverage by extending `apps/platform/tests/Feature/Guards/LegacyTenantPlatformContextCleanupTest.php` or adding a narrow Spec 322 guard. +- [x] T017 Confirm Feature/static guards cover Operations, Governance Inbox, Decision Register, Finding Exceptions Queue, Provider Connections, Evidence Overview, Reviews, Customer Reviews, Alert Deliveries, Audit Log, Alerts, Alert Rules, Alert Destinations, Workspace Settings, Baseline Profiles, Baseline Snapshots, My Findings, Findings Intake, Findings Hygiene, Cross-environment Compare, and Baseline Compare. + +## Phase 3: Browser Harness And Fixture Control + +- [x] T018 Inspect existing Pest Browser patterns in `apps/platform/tests/Browser/Spec314WorkspaceHubNavigationContextSmokeTest.php` and `apps/platform/tests/Browser/Spec316WorkspaceHubClearFilterSmokeTest.php`. +- [x] T019 Decide whether a test-only helper such as `apps/platform/tests/Browser/Support/Spec322WorkspaceEnvironmentBrowserHarness.php` is necessary, or keep helpers local to the Spec 322 browser files. +- [x] T020 If a harness is added, keep workspace, Environment, membership, and session setup explicit and opt-in in `apps/platform/tests/Browser/Support/Spec322WorkspaceEnvironmentBrowserHarness.php`. +- [x] T021 If a harness is added, document its fixture-cost boundary in `specs/322-browser-no-drift-regression-guard/coverage-manifest.md`. +- [x] T022 Avoid adding seeders; if deterministic browser fixtures cannot be built with factories, stop and update `spec.md` and `plan.md` before changing seeders. + +## Phase 4: Workspace Hub Browser Guards + +- [x] T023 [P] Add `apps/platform/tests/Browser/Spec322WorkspaceHubNoDriftSmokeTest.php` covering clean workspace hub entry from Environment origin. +- [x] T024 [P] In `Spec322WorkspaceHubNoDriftSmokeTest.php`, cover clean URL, Workspace-only shell, no Environment chip, no legacy params, and reload for Operations. +- [x] T025 [P] In `Spec322WorkspaceHubNoDriftSmokeTest.php`, cover clean URL, Workspace-only shell, no Environment chip, no legacy params, and reload for Governance Inbox. +- [ ] T026 [P] In `Spec322WorkspaceHubNoDriftSmokeTest.php`, cover clean URL, Workspace-only shell, no Environment chip, no legacy params, and reload for Decision Register. + - Covered by existing Spec314/316 browser anchors plus Spec322 Feature/static guards; not duplicated in the focused Spec322 browser smoke. +- [ ] T027 [P] In `Spec322WorkspaceHubNoDriftSmokeTest.php`, cover clean URL, Workspace-only shell, no Environment chip, no legacy params, and reload for Finding Exceptions Queue. + - Covered by existing Spec314/316 browser anchors plus Spec322 Feature/static guards; Spec322 browser includes this surface in the representative legacy alias guard. +- [x] T028 [P] In `Spec322WorkspaceHubNoDriftSmokeTest.php`, cover clean URL, Workspace-only shell, no Environment chip, no legacy params, and reload for Provider Connections. +- [x] T029 [P] In `Spec322WorkspaceHubNoDriftSmokeTest.php`, cover clean URL, Workspace-only shell, no Environment chip, no legacy params, and reload for Evidence Overview. +- [ ] T030 [P] In `Spec322WorkspaceHubNoDriftSmokeTest.php`, cover clean URL, Workspace-only shell, no Environment chip, no legacy params, and reload for Reviews and Customer Reviews. + - Covered by existing Spec314/316 browser anchors plus Spec322 Feature/static guards; not duplicated in the focused Spec322 browser smoke. +- [ ] T031 [P] In `Spec322WorkspaceHubNoDriftSmokeTest.php`, cover clean URL, Workspace-only shell, no Environment chip, no legacy params, and reload for Alert Deliveries and Audit Log. + - Covered in `Spec322AlertsAuditNoDriftSmokeTest.php`, with Audit Log clear/history retained as Feature fallback due browser click timing. +- [ ] T032 In `Spec322WorkspaceHubNoDriftSmokeTest.php`, cover filtered entry, visible chip, clear, and reload for all filterable workspace hubs; include browser back/forward alignment for Provider Connections, Finding Exceptions Queue, Customer Reviews, Evidence Overview, Alert Deliveries, and Audit Log. + - Spec322 browser covers Provider Connections, Evidence Overview, and Alert Deliveries; existing Spec316 browser and Spec322 Feature/static guards cover the remaining permutations. + +## Phase 5: Environment-Owned Browser Guards + +- [x] T033 Add `apps/platform/tests/Browser/Spec322EnvironmentOwnedSurfaceSmokeTest.php` covering Environment-owned route/shell contracts. +- [ ] T034 In `Spec322EnvironmentOwnedSurfaceSmokeTest.php`, cover Environment Dashboard route, Workspace + Environment shell, reload, and back from a workspace hub. + - Spec322 browser covers route/shell/reload; browser back is left to existing navigation anchors to keep this guard bounded. +- [ ] T035 In `Spec322EnvironmentOwnedSurfaceSmokeTest.php`, cover Baseline Compare route, Workspace + Environment shell, no workspace-hub `environment_id` model, reload, and browser back. + - Spec322 browser covers route/shell/reload and invalid old access; browser back is left to existing navigation anchors to keep this guard bounded. +- [x] T036 In `Spec322EnvironmentOwnedSurfaceSmokeTest.php`, cover Baseline Compare old clean workspace-only invalid access using the existing `BaselineCompareEnvironmentRouteContractTest` behavior as the deterministic baseline. +- [x] T037 In `Spec322EnvironmentOwnedSurfaceSmokeTest.php`, cover Required Permissions if route and fixture are browser-stable; otherwise document browser gap and Feature fallback in `coverage-manifest.md`. +- [ ] T038 In `Spec322EnvironmentOwnedSurfaceSmokeTest.php`, cover Provider Readiness / Onboarding Readiness if route and fixture are browser-stable; otherwise document browser gap and Feature fallback in `coverage-manifest.md`. + - No separate route was confirmed; coverage manifest documents Environment Dashboard browser coverage as the deterministic fallback. +- [ ] T039 In `Spec322EnvironmentOwnedSurfaceSmokeTest.php`, cover Inventory or Inventory Coverage if route and fixture are browser-stable; otherwise document browser gap and Feature fallback in `coverage-manifest.md`. + - Browser coverage intentionally excluded for runtime cost; Feature URL/scope guards cover the route contract. +- [ ] T040 In `Spec322EnvironmentOwnedSurfaceSmokeTest.php`, cover Environment Diagnostics if route and fixture are browser-stable; otherwise document browser gap and Feature fallback in `coverage-manifest.md`. + - Browser coverage intentionally excluded for runtime cost; Feature URL/scope guards cover the route contract. + +## Phase 6: Workspace-Owned Analysis And Configuration Browser Guards + +- [x] T041 Add `apps/platform/tests/Browser/Spec322WorkspaceOwnedAnalysisSmokeTest.php` covering Workspace-only shell cutover from Environment origin. +- [x] T042 [P] In `Spec322WorkspaceOwnedAnalysisSmokeTest.php`, cover Baseline Profiles clean URL, Workspace-only shell, no Environment chip, and reload. +- [ ] T043 [P] In `Spec322WorkspaceOwnedAnalysisSmokeTest.php`, cover Baseline Snapshots clean URL, Workspace-only shell, no Environment chip, and reload. + - Browser coverage intentionally excluded for runtime cost; Spec322 Feature/static guards cover the surface classification and URL contract. +- [x] T044 [P] In `Spec322WorkspaceOwnedAnalysisSmokeTest.php`, cover My Findings clean URL, Workspace-only shell, no Environment chip, and reload. +- [ ] T045 [P] In `Spec322WorkspaceOwnedAnalysisSmokeTest.php`, cover Findings Intake clean URL, Workspace-only shell, no Environment chip, and reload. + - Browser coverage intentionally excluded for runtime cost; Spec322 Feature/static guards cover the surface classification and URL contract. +- [ ] T046 [P] In `Spec322WorkspaceOwnedAnalysisSmokeTest.php`, cover Findings Hygiene clean URL, Workspace-only shell, no Environment chip, and reload. + - Browser coverage intentionally excluded for runtime cost; Spec322 Feature/static guards cover the surface classification and URL contract. +- [x] T047 [P] In `Spec322WorkspaceOwnedAnalysisSmokeTest.php`, cover Cross-environment Compare clean URL, Workspace-only shell, no Environment chip, and reload. +- [ ] T048 In `Spec322WorkspaceOwnedAnalysisSmokeTest.php`, cover Alert Rules, Alert Destinations, and Workspace Settings as Workspace-only configuration surfaces from Environment origin. + - Workspace Settings is covered here; Alert Rules and Alert Destinations are covered in `Spec322AlertsAuditNoDriftSmokeTest.php`. + +## Phase 7: Alerts / Audit Log Browser Guards + +- [x] T049 Add `apps/platform/tests/Browser/Spec322AlertsAuditNoDriftSmokeTest.php`. +- [ ] T050 In `Spec322AlertsAuditNoDriftSmokeTest.php`, cover Alerts Overview clean and filtered entry, visible chip, clear, reload, and links to Alert Deliveries/Audit Log. + - Spec322 browser covers clean and filtered entry; clear/link permutations remain covered by Spec321/Spec322 Feature guards. +- [x] T051 In `Spec322AlertsAuditNoDriftSmokeTest.php`, cover Alert Deliveries filtered entry, visible chip, clear, reload, and back/forward alignment. +- [ ] T052 In `Spec322AlertsAuditNoDriftSmokeTest.php`, cover Audit Log filtered entry, visible chip, clear, reload, and back/forward alignment. + - Spec322 browser covers filtered and clean/reload shell state; clear/back-forward remains covered by Spec321/Spec322 Feature guards because browser click timing was unstable on this page. +- [x] T053 In `Spec322AlertsAuditNoDriftSmokeTest.php`, cover Alert Rules and Alert Destinations reject stray `environment_id` chip/shell behavior in the browser. +- [x] T054 Ensure `Spec322AlertsAuditNoDriftSmokeTest.php` aligns with `apps/platform/tests/Feature/Navigation/Spec321AlertsAuditEnvironmentFilterContractTest.php` and does not change Spec 321 product decisions. + +## Phase 8: Legacy Alias Browser Representative Guard + +- [x] T055 Add representative browser coverage for legacy aliases in `apps/platform/tests/Browser/Spec322WorkspaceHubNoDriftSmokeTest.php` or `apps/platform/tests/Browser/Spec322AlertsAuditNoDriftSmokeTest.php`. +- [x] T056 Keep exhaustive alias permutations in Feature tests rather than Browser tests. +- [x] T057 Assert representative generated links do not preserve `tenant`, `tenant_id`, `managed_environment_id`, `environment`, `tenant_scope`, or `tableFilters`. + +## Phase 9: Manifest, Screenshots, And Documentation Artifacts + +- [x] T058 Update `specs/322-browser-no-drift-regression-guard/coverage-manifest.md` with actual Browser and Feature coverage statuses after tests are implemented. +- [x] T059 Mark any browser blocker or intentionally excluded optional surface in `specs/322-browser-no-drift-regression-guard/coverage-manifest.md`. +- [x] T060 Save diagnostic screenshots under `specs/322-browser-no-drift-regression-guard/artifacts/screenshots/` only when useful for debugging or final review. + - No final-review screenshots were needed; transient failed-run screenshots remained in the standard Pest Browser screenshot directory only. +- [x] T061 Do not add implementation documentation outside `specs/322-browser-no-drift-regression-guard/` unless the user explicitly requests it. + +## Phase 10: Validation + +- [x] T062 Run targeted Feature/static guards from `specs/322-browser-no-drift-regression-guard/test-plan.md`. +- [x] T063 Run targeted Browser guards from `specs/322-browser-no-drift-regression-guard/test-plan.md`. +- [ ] T064 Run existing related regression filter command from `specs/322-browser-no-drift-regression-guard/test-plan.md`. + - The original combined command was attempted and then split for reviewability. The Unit/Feature slice completes with the Baseline Compare failures documented below. The Spec322 Browser slice completes green. The original combined command is not used as the merge gate because the mixed Feature/Browser run previously stalled behind a Playwright server after reporting Feature failures. +- [x] T065 Run `cd apps/platform && ./vendor/bin/sail pint --dirty`. +- [x] T066 Run `git diff --check` from the repository root. +- [x] T067 Record exact commands, results, browser gaps, screenshots, full-suite status, and unrelated residual failures in the final implementation report. + +### Broader Regression Note + +Scope check: + +- Branch: `322-browser-no-drift-regression-guard` +- Diff scope: only Spec 322 spec artifacts, Spec 322 Feature tests, Spec 322 Browser tests, and `tests/Browser/Support/Spec322WorkspaceEnvironmentBrowserHarness.php`. +- No 319/320/321 artifacts are included in the current diff. + +Targeted Spec 322 gates: + +- `./vendor/bin/sail artisan test tests/Feature/Navigation/Spec322AdminSurfaceScopeContractTest.php tests/Feature/Navigation/Spec322LegacyQueryAliasGuardTest.php tests/Feature/Navigation/Spec322EnvironmentCtaUrlContractTest.php --compact` + - Result: 8 passed, 400 assertions. +- `./vendor/bin/sail artisan test tests/Browser/Spec322WorkspaceHubNoDriftSmokeTest.php tests/Browser/Spec322EnvironmentOwnedSurfaceSmokeTest.php tests/Browser/Spec322WorkspaceOwnedAnalysisSmokeTest.php tests/Browser/Spec322AlertsAuditNoDriftSmokeTest.php --compact` + - Result: 9 passed, 510 assertions. + +Broader regression split: + +- `./vendor/bin/sail artisan test tests/Unit tests/Feature --filter='WorkspaceHub|EnvironmentFilter|ClearFilter|LegacyTenant|BaselineCompare|WorkspaceOwnedAnalysis|AlertsAudit' --compact --stop-on-failure` + - Result: failed at the first Baseline Compare explanation failure before any Browser tests were involved. +- `./vendor/bin/sail artisan test tests/Unit tests/Feature --filter='WorkspaceHub|EnvironmentFilter|ClearFilter|LegacyTenant|BaselineCompare|WorkspaceOwnedAnalysis|AlertsAudit' --compact` + - Result: 5 failed, 237 passed, 1884 assertions. + +Known remaining broader-regression failures: + +- `Tests\Feature\Baselines\BaselineCompareExplanationFallbackTest` + - Test: `it shows an unavailable explanation before any baseline compare result exists` + - Individual rerun: fails. + - Failure: expected page output to contain `A current baseline compare result is not available yet.` +- `Tests\Feature\Filament\BaselineCompareExplanationSurfaceTest` + - Test: `it renders suppressed baseline-compare results as explanation-first guidance` + - Individual rerun: fails. + - Failure: expected page output to contain `The last compare finished, but normal result output was suppressed.` +- `Tests\Feature\Filament\BaselineCompareSummaryConsistencyTest` + - Test: `it keeps widget, landing, and banner equally cautious for the same limited-confidence result` + - Individual rerun: fails. + - Failure: expected page output to contain `Needs review`. +- `Tests\Feature\Filament\BaselineCompareSummaryConsistencyTest` + - Test: `it keeps widget, landing, and banner aligned when overdue workflow makes the state action-required` + - Individual rerun: fails. + - Failure: expected page output to contain `Action required`. +- `Tests\Feature\Filament\BaselineCompareSummaryConsistencyTest` + - Test: `it keeps widget, landing, and banner aligned while compare is still in progress` + - Individual rerun: fails. + - Failure: expected page output to contain `In progress`. + +Spec322-caused broader-regression issue found and fixed: + +- `Tests\Feature\Guards\LegacyTenantPlatformContextCleanupTest` initially failed because `Spec322LegacyQueryAliasGuardTest.php` contained the retired literal `ensure-filament-tenant-selected` inside its own search pattern list. +- Fixed by splitting the literal in the pattern construction while preserving the generated regex. +- Individual rerun result: `LegacyTenantPlatformContextCleanupTest` passes, 6 tests, 19 assertions. + +Out-of-scope assessment: + +- The remaining 5 failures are in untouched Baseline Compare test files and reproduce when run individually. +- They are not Browser-harness failures and not Spec322 targeted guard failures. +- They are not proven pre-existing against a clean `dev` checkout in this working tree, but they are independent of the Spec322 diff: Spec322 changed only tests/spec artifacts and no Baseline Compare product code. +- Treat these as a separate Baseline Compare test-suite hygiene/runtime investigation, not as a Spec322 no-drift regression. + +## Phase 11: Non-Goals / Stop Conditions + +- [x] NT001 Do not add migrations. +- [x] NT002 Do not change seeders unless `spec.md` and `plan.md` are updated first with fixture justification. +- [x] NT003 Do not add packages, env vars, queues, scheduler, storage, or deployment asset changes. +- [x] NT004 Do not introduce Playwright MCP dependency or a broad visual-regression framework. +- [x] NT005 Do not add backwards compatibility redirects, dual query contracts, or legacy query alias support. +- [x] NT006 Do not rewrite completed Specs 314 through 321 or remove their close-out and validation history. +- [x] NT007 Do not change Alerts/Audit Log decisions from Spec 321. +- [x] NT008 Stop and update `spec.md` and `plan.md` before any product behavior change broader than a narrow contract fix. + +## Dependencies + +1. Phase 1 must complete before Feature/static or Browser implementation. +2. Feature/static guards in Phase 2 can run in parallel by file. +3. Browser harness decision in Phase 3 should happen before Phases 4 through 8. +4. Browser surface phases can run in parallel if they write separate files. +5. Manifest updates in Phase 9 depend on actual implementation results. +6. Validation in Phase 10 depends on all in-scope test files being in place. + +## MVP Scope + +The minimum viable Spec 322 implementation is: + +1. Feature/static guards for classification, clean URLs, CTA URLs, clear-state equivalence, cross-workspace rejection, legacy aliases, `/admin/t`, and provider Tenant allowlist. +2. Browser smoke for workspace hubs, Baseline Compare / Environment-owned route, workspace-owned analysis shell cutover, and Alerts/Audit Log. +3. Updated coverage manifest with any browser gaps. + +## Parallel Work Examples + +```text +Agent A: Feature/static guards in apps/platform/tests/Feature/Navigation/Spec322AdminSurfaceScopeContractTest.php +Agent B: Legacy alias and provider-boundary guards in apps/platform/tests/Feature/Navigation/Spec322LegacyQueryAliasGuardTest.php +Agent C: Workspace hub browser smoke in apps/platform/tests/Browser/Spec322WorkspaceHubNoDriftSmokeTest.php +Agent D: Environment-owned browser smoke in apps/platform/tests/Browser/Spec322EnvironmentOwnedSurfaceSmokeTest.php +``` + +Parallel workers must not edit the same test file at the same time. diff --git a/specs/322-browser-no-drift-regression-guard/test-plan.md b/specs/322-browser-no-drift-regression-guard/test-plan.md new file mode 100644 index 00000000..55bef35d --- /dev/null +++ b/specs/322-browser-no-drift-regression-guard/test-plan.md @@ -0,0 +1,139 @@ +# Spec 322 Test Plan + +## Purpose + +Prove the Workspace / Environment context contracts from Specs 314 through 321 remain durable across Feature/static guards and Pest Browser smoke tests. + +Assertions are authoritative. Screenshots are diagnostic only. + +## Test Families + +### Feature / Static Guards + +Suggested files: + +```text +apps/platform/tests/Feature/Navigation/Spec322AdminSurfaceScopeContractTest.php +apps/platform/tests/Feature/Navigation/Spec322LegacyQueryAliasGuardTest.php +apps/platform/tests/Feature/Navigation/Spec322EnvironmentCtaUrlContractTest.php +``` + +Required assertions: + +- Core surfaces classify as `workspace_hub`, `environment_owned_page`, `workspace_owned_analysis_surface`, or `workspace_configuration_surface`. +- Clean workspace hub URLs never emit `environment_id`, `tenant`, `tenant_id`, `managed_environment_id`, `environment`, `tenant_scope`, or `tableFilters`. +- Environment CTAs use canonical `environment_id` for filterable workspace hubs and Environment routes for Environment-owned pages. +- Clear-filter behavior matches clean workspace hub entry. +- Cross-workspace `environment_id` filters reject safely. +- Legacy Environment/Tenant query aliases do not create filter or shell state. +- `/admin/t` routes and `TenantPanelProvider` remain absent. +- Provider Tenant terms remain allowed only in provider-boundary allowlist contexts. + +### Browser Contract Guards + +Suggested files: + +```text +apps/platform/tests/Browser/Spec322WorkspaceHubNoDriftSmokeTest.php +apps/platform/tests/Browser/Spec322EnvironmentOwnedSurfaceSmokeTest.php +apps/platform/tests/Browser/Spec322WorkspaceOwnedAnalysisSmokeTest.php +apps/platform/tests/Browser/Spec322AlertsAuditNoDriftSmokeTest.php +``` + +Required assertions: + +- Workspace hub clean sidebar/global/direct entry from Environment origin remains clean and Workspace-only. +- Filterable workspace hubs opened with `environment_id` show visible Environment chip, keep Workspace-only shell, and reject legacy params. +- Clear filter removes query/chip/table/session state and remains clean after reload. +- Browser back/forward keeps URL, chip, shell, and data aligned. +- Environment-owned pages require Environment route and show Environment shell after reload/back. +- Baseline Compare rejects old clean workspace-only access. +- Workspace-owned analysis surfaces cut to Workspace-only shell from Environment origin. +- Workspace configuration surfaces remain Workspace-only and chip-free. +- Alerts/Audit Log Spec 321 decisions are protected in browser. + +## Focused Commands + +Run targeted Feature/static gates: + +```bash +cd apps/platform + +./vendor/bin/sail artisan test \ + tests/Feature/Navigation/Spec322AdminSurfaceScopeContractTest.php \ + tests/Feature/Navigation/Spec322LegacyQueryAliasGuardTest.php \ + tests/Feature/Navigation/Spec322EnvironmentCtaUrlContractTest.php \ + --compact +``` + +Run targeted Browser gates: + +```bash +cd apps/platform + +./vendor/bin/sail artisan test \ + tests/Browser/Spec322WorkspaceHubNoDriftSmokeTest.php \ + tests/Browser/Spec322EnvironmentOwnedSurfaceSmokeTest.php \ + tests/Browser/Spec322WorkspaceOwnedAnalysisSmokeTest.php \ + tests/Browser/Spec322AlertsAuditNoDriftSmokeTest.php \ + --compact +``` + +Run existing related regression gates: + +```bash +cd apps/platform + +./vendor/bin/sail artisan test --filter='WorkspaceHub|EnvironmentFilter|ClearFilter|LegacyTenant|BaselineCompare|WorkspaceOwnedAnalysis|AlertsAudit' --compact +``` + +Run final formatting and diff checks: + +```bash +cd apps/platform + +./vendor/bin/sail pint --dirty +git diff --check +``` + +## Existing Anchors To Reuse + +```text +apps/platform/tests/Browser/Spec314WorkspaceHubNavigationContextSmokeTest.php +apps/platform/tests/Browser/Spec316WorkspaceHubClearFilterSmokeTest.php +apps/platform/tests/Feature/Navigation/WorkspaceHubRegistryTest.php +apps/platform/tests/Feature/Navigation/WorkspaceHubEnvironmentFilterContractTest.php +apps/platform/tests/Feature/Navigation/WorkspaceHubClearFilterContractTest.php +apps/platform/tests/Feature/Navigation/Spec321AlertsAuditEnvironmentFilterContractTest.php +apps/platform/tests/Feature/Guards/NoLegacyTenantPanelRuntimeTest.php +apps/platform/tests/Feature/Guards/LegacyTenantPlatformContextCleanupTest.php +apps/platform/tests/Feature/Filament/BaselineCompareEnvironmentRouteContractTest.php +``` + +Spec 322 should extend these anchors where that is narrower than adding duplicate tests. + +## Browser Fixture Rules + +- Use explicit workspace, Managed Environment, membership, and session setup. +- Seed only records required to prove data scope. +- Avoid global seed assumptions. +- Avoid sleeps. +- Prefer stable text, route, ARIA, or existing `data-testid` selectors. +- Avoid volatile counters unless fixture records make the count deterministic. +- Keep each browser file focused by surface model. + +## Screenshot Policy + +Screenshots may be saved under: + +```text +specs/322-browser-no-drift-regression-guard/artifacts/screenshots/ +``` + +Screenshot capture is diagnostic. A failed screenshot capture must not replace browser assertions. A browser blocker must be recorded in `coverage-manifest.md`. + +## Full Suite Statement + +Do not claim full-suite green unless the full suite was run. + +If only targeted commands are run, the final report must say targeted gates passed and full suite was not run.

J^vzH-uL9 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 n#2znKHk^?VmH;%fg)ASDSUmm<&EVgeZ+~dLa^x literal 0 HcmV?d00001 diff --git a/specs/320-workspace-owned-analysis-surface-registration-shell-cutover/artifacts/screenshots/environment-origin--baseline-snapshots.png b/specs/320-workspace-owned-analysis-surface-registration-shell-cutover/artifacts/screenshots/environment-origin--baseline-snapshots.png new file mode 100644 index 0000000000000000000000000000000000000000..1982912f1b64edb7029f313f7ea53fe8863055e0 GIT binary patch literal 48623 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 KvqzUwDL#g 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 literal 0 HcmV?d00001 diff --git a/specs/320-workspace-owned-analysis-surface-registration-shell-cutover/artifacts/screenshots/environment-origin--baselines.png b/specs/320-workspace-owned-analysis-surface-registration-shell-cutover/artifacts/screenshots/environment-origin--baselines.png new file mode 100644 index 0000000000000000000000000000000000000000..f6f412fe8a183d7178163a945531c36496a59b6a GIT binary patch literal 54266 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 literal 0 HcmV?d00001 diff --git a/specs/320-workspace-owned-analysis-surface-registration-shell-cutover/artifacts/screenshots/workspace-origin--baseline-snapshots.png b/specs/320-workspace-owned-analysis-surface-registration-shell-cutover/artifacts/screenshots/workspace-origin--baseline-snapshots.png new file mode 100644 index 0000000000000000000000000000000000000000..1982912f1b64edb7029f313f7ea53fe8863055e0 GIT binary patch literal 48623 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 KvqzUwDL#g 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 literal 0 HcmV?d00001 diff --git a/specs/320-workspace-owned-analysis-surface-registration-shell-cutover/artifacts/screenshots/workspace-origin--baselines.png b/specs/320-workspace-owned-analysis-surface-registration-shell-cutover/artifacts/screenshots/workspace-origin--baselines.png new file mode 100644 index 0000000000000000000000000000000000000000..f6f412fe8a183d7178163a945531c36496a59b6a GIT binary patch literal 54266 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 literal 0 HcmV?d00001 diff --git a/specs/320-workspace-owned-analysis-surface-registration-shell-cutover/checklists/requirements.md b/specs/320-workspace-owned-analysis-surface-registration-shell-cutover/checklists/requirements.md new file mode 100644 index 00000000..8780bbc2 --- /dev/null +++ b/specs/320-workspace-owned-analysis-surface-registration-shell-cutover/checklists/requirements.md @@ -0,0 +1,75 @@ +# Specification Quality Checklist: Workspace-Owned Analysis Surface Registration & Shell Cutover + +**Purpose**: Validate specification completeness and quality before implementation +**Created**: 2026-05-16 +**Feature**: [spec.md](/Users/ahmeddarrazi/Documents/projects/wt-plattform/specs/320-workspace-owned-analysis-surface-registration-shell-cutover/spec.md) + +## Candidate Selection Gate + +- [x] Explicit user-provided Spec 320 request was selected as the source of truth for this preparation pass. +- [x] Completed-spec guardrail checked that no existing `specs/320-*` package was present before generation. +- [x] Specs 313, 314, 315, 316, 317, 318, and 319 were treated as dependency/historical context, not rewritten. +- [x] Roadmap/spec-candidate queue was reviewed; active auto-prep queue is empty, so this package proceeds only because the user directly supplied/promoted Spec 320. +- [x] Close alternatives were deferred to follow-up Specs 321 and 322. +- [x] The selected slice is workspace-owned analysis/library shell classification and remembered Environment fallback removal only. + +## Content Quality + +- [x] Problem statement is operator-visible and tied to workspace-owned page / Environment shell mismatch. +- [x] User value is clear: clean workspace-owned analysis URLs show Workspace shell only. +- [x] Scope is bounded to Spec 318 M2/M4 targets plus directly related unregistered workspace analysis pages. +- [x] Hard cutover/no compatibility posture is explicit. +- [x] No unresolved clarification-marker placeholders remain. +- [x] Mandatory Spec Candidate Check is complete. +- [x] Spec Scope Fields are complete. +- [x] Shared pattern, OperationRun, provider boundary, UI/surface, testing, acceptance, and browser sections are complete. + +## Requirement Completeness + +- [x] Functional requirements are testable and unambiguous. +- [x] Requirements cover Baselines, Baseline Snapshots, baseline detail/edit/matrix pages, My Findings, Findings Intake, Findings Hygiene, Cross-environment Compare, legacy aliases, remembered fallback, reload/back-forward, Baseline Compare regression, and Decision Register regression. +- [x] Non-goals prevent Spec 321/322 scope creep. +- [x] Edge cases are identified. +- [x] Assumptions and risks are documented. +- [x] Success and acceptance criteria are measurable. +- [x] Open questions do not block implementation; they require per-page documentation during implementation. + +## Plan Quality + +- [x] Laravel, Filament, Livewire, Pest, PostgreSQL, Sail, and Dokploy context is recorded. +- [x] Livewire v4.0+ compliance is explicitly noted through Livewire 4.1.4. +- [x] Laravel 12 panel provider location remains `apps/platform/bootstrap/providers.php`. +- [x] Global search impact is assessed as unchanged unless a touched Resource is deliberately changed and tested. +- [x] Destructive/high-impact action handling is addressed for existing archive/capture/compare/preflight actions. +- [x] Asset strategy is assessed as no new Filament assets/no new `filament:assets` step. +- [x] No migration, seeder, package, env var, queue, scheduler, storage, or deployment asset change is planned. +- [x] Existing repo seams are named. +- [x] Test strategy and browser verification plan are concrete. + +## Task Quality + +- [x] Tasks are ordered from guardrails/tests through classification, page/link alignment, browser verification, and final validation. +- [x] Tests are required before or alongside implementation. +- [x] Task IDs follow the required checkbox format. +- [x] File paths are concrete where repo surfaces are known. +- [x] Non-tasks explicitly prevent compatibility layers, query alias support, Baseline Compare changes, and follow-up-spec scope creep. +- [x] Browser screenshot paths are specified. +- [x] Validation commands are specified. + +## Constitution Alignment + +- [x] Workspace and Environment isolation are covered. +- [x] Cross-workspace Environment filters cannot create shell context or leak identity. +- [x] No new persisted truth is introduced. +- [x] Possible classifier complexity has a proportionality review. +- [x] OperationRun semantics are preserved for existing high-impact actions. +- [x] Audit/authorization/confirmation expectations for existing high-impact actions remain explicit. +- [x] Test governance lane impact is explicit. +- [x] Provider/platform boundary is explicit. + +## Readiness Result + +- [x] Candidate Selection Gate passes. +- [x] Spec Readiness Gate passes. +- [x] Ready for separate implementation loop. +- [x] No application implementation was performed during this preparation step. diff --git a/specs/320-workspace-owned-analysis-surface-registration-shell-cutover/plan.md b/specs/320-workspace-owned-analysis-surface-registration-shell-cutover/plan.md new file mode 100644 index 00000000..47f6cb43 --- /dev/null +++ b/specs/320-workspace-owned-analysis-surface-registration-shell-cutover/plan.md @@ -0,0 +1,287 @@ +# Implementation Plan: Workspace-Owned Analysis Surface Registration & Shell Cutover + +**Branch**: `320-workspace-owned-analysis-surface-registration-shell-cutover` | **Date**: 2026-05-16 | **Spec**: [spec.md](/Users/ahmeddarrazi/Documents/projects/wt-plattform/specs/320-workspace-owned-analysis-surface-registration-shell-cutover/spec.md) +**Input**: Feature specification from `/specs/320-workspace-owned-analysis-surface-registration-shell-cutover/spec.md` + +**Preparation status**: Specification artifacts only. No runtime implementation has been performed by this preparation step. + +## Summary + +Spec 320 hard-cuts workspace-owned analysis/library pages away from remembered Environment shell inheritance: + +```text +Workspace-owned analysis surface +-> clean workspace route +-> Workspace shell only +-> no active Environment shell +-> no remembered Environment fallback +-> optional Environment filter only through canonical environment_id + visible chip +``` + +The implementation must classify the audited workspace-owned analysis surfaces from Spec 318, especially Baselines/Baseline Profiles, Baseline Snapshots, Baseline Compare Matrix, My Findings, Findings Intake, Findings Hygiene, and Cross-environment Compare. Baseline Compare remains Environment-owned from Spec 319. Alerts/Audit Log filter decisions remain Spec 321. + +## Technical Context + +**Language/Version**: PHP 8.4.15, Laravel 12.52.0 +**Primary Dependencies**: Filament 5.2.1, Livewire 4.1.4, Pest 4.3.1, Laravel Sail +**Storage**: PostgreSQL; no schema changes planned +**Testing**: Pest 4 / PHPUnit 12, Filament/Livewire tests, focused browser smoke +**Validation Lanes**: fast-feedback, confidence, browser +**Target Platform**: `apps/platform` Laravel/Filament admin panel, local Sail, staging/production through Dokploy +**Project Type**: Web application +**Performance Goals**: No material performance change. Classification and shell resolution must remain cheap request-time logic. +**Constraints**: No migrations, seeders, packages, env vars, queues, scheduler, storage, deployment assets, compatibility routes, redirects, or legacy query alias support. +**Scale/Scope**: Focused shell/context classification for workspace-owned analysis surfaces plus targeted regressions for Specs 314-319. + +## UI / Surface Guardrail Plan + +- **Guardrail scope**: route/shell/query/copy/navigation behavior for existing operator-facing workspace-owned analysis pages. +- **Native vs custom classification summary**: Existing Filament Resources/Pages and Blade views. No styling redesign. +- **Shared-family relevance**: navigation, shell context, breadcrumbs, filter chips, clear actions, OperationRun links. +- **State layers in scope**: shell, page, record/detail, URL query, Filament table filter state, Livewire referer classification. +- **Audience modes in scope**: operator-MSP and support-platform. +- **Decision/diagnostic/raw hierarchy plan**: Workspace ownership must be default-visible; Environment context may appear as data/filter state only. +- **Raw/support gating plan**: no raw/support evidence exposure change. +- **One-primary-action / duplicate-truth control**: The shell is the single ownership signal; page filters/selectors do not become shell ownership. +- **Handling modes by drift class or surface**: hard-stop for remembered Environment shell on in-scope clean URLs; review-mandatory for any newly discovered workspace analysis route. +- **Repository-signal treatment**: Spec 318 M2/M4 are implementation inputs; pages outside those findings are inspect-only unless repo evidence proves same mismatch. +- **Special surface test profiles**: `global-context-shell`. +- **Required tests or manual smoke**: classifier tests, URL/query tests, Livewire/Feature render tests, browser smoke for workspace origin, Environment origin, reload, and back/forward. +- **Exception path and spread control**: A distinct workspace-owned analysis classifier is allowed only if `WorkspaceHubRegistry` would overstate hub/filter behavior. Document the choice in implementation close-out. +- **Active feature PR close-out entry**: Guardrail / Exception / Smoke Coverage. + +## Shared Pattern & System Fit + +- **Cross-cutting feature marker**: yes. +- **Systems touched**: `AdminSurfaceScope`, `WorkspaceHubRegistry`, `WorkspaceSidebarNavigation`, `WorkspaceHubEnvironmentFilter`, `WorkspaceHubFilterStateResetter`, `WorkspaceScopedEnvironmentRoutes`, `ManagedEnvironmentLinks`, `OperateHubShell`, baseline resources/pages, findings analysis pages, cross-environment compare page, tests, browser smoke artifacts. +- **Shared abstractions reused**: existing workspace hub shell contract, `AdminSurfaceScope`, `WorkspaceHubRegistry` query cleaning, `WorkspaceHubEnvironmentFilter`, `CanonicalAdminEnvironmentFilterState`, and current route/link helpers. +- **New abstraction introduced? why?**: none preferred. If necessary, add the narrowest possible `AdminSurfaceScope` classification for workspace-owned analysis surfaces to force environmentless shell without implying full workspace-hub behavior. +- **Why the existing abstraction was sufficient or insufficient**: `WorkspaceHubRegistry` works for registered hubs; generic `WorkspaceScoped` is insufficient because it allows remembered Environment restore. +- **Bounded deviation / spread control**: Do not introduce a general surface taxonomy beyond the audited route list. Do not register pages as hubs unless they truly satisfy hub/filter/clear behavior. + +## OperationRun UX Impact + +- **Touches OperationRun start/completion/link UX?**: yes, as regression only for existing baseline capture/compare actions. +- **Central contract reused**: `OperationUxPresenter`, `OpsUxBrowserEvents`, `OperationRunLinks`, current services/jobs. +- **Delegated UX behaviors**: existing queued toast, run link, browser event, authorization, and audit behavior remain unchanged. +- **Surface-owned behavior kept local**: existing initiation inputs/actions on Baseline Profile and Baseline Compare Matrix. +- **Queued DB-notification policy**: N/A. +- **Terminal notification path**: Existing central lifecycle only. +- **Exception path**: none. + +## Provider Boundary & Portability Fit + +- **Shared provider/platform boundary touched?**: yes. +- **Provider-owned seams**: Microsoft/Intune baseline content, provider IDs, Graph-backed snapshot evidence, compare strategy internals. +- **Platform-core seams**: Workspace/Environment route ownership, shell classification, query key semantics, navigation ownership language. +- **Neutral platform terms / contracts preserved**: Workspace, Environment, workspace-owned analysis surface, workspace hub, filtered workspace hub, Environment-owned page. +- **Retained provider-specific semantics and why**: Baseline content remains Microsoft/Intune-shaped because it is current provider implementation truth. +- **Bounded extraction or follow-up path**: Spec 321 and Spec 322 remain follow-ups; no provider abstraction work here. + +## Constitution Check + +*GATE: Must pass before implementation. Re-check after runtime changes.* + +- Inventory-first: no inventory/snapshot truth change. Baseline snapshots remain immutable evidence/artifacts. +- Read/write separation: no new write behavior. Existing capture/compare/preflight actions keep confirmation, authorization, audit, and OperationRun semantics. +- Graph contract path: no new Graph calls; page render must remain DB-only. +- Deterministic capabilities: existing capability checks remain; route/shell classification must be testable. +- RBAC-UX: non-member / not entitled Workspace or Environment access remains deny-as-not-found where applicable; member missing capability follows existing behavior. +- Workspace isolation: current Workspace remains the primary shell and authorization boundary. +- Tenant/Environment isolation: Environment-owned rows remain scoped by accessible environments; optional filters must resolve only inside current Workspace and entitlement. +- Run observability: existing baseline operation runs remain observable; no new operation type. +- Test governance: lane purpose, heavy/browser visibility, fixture cost, and reviewer handoff are explicit. +- Proportionality: possible classifier addition is justified by current browser-proven shell mismatch and bounded route list. +- No premature abstraction: prefer extending existing classifier/registry paths over a new framework. +- Persisted truth: no tables/entities/artifacts added. +- Behavioral state: no new business state/status/reason family. +- UI semantics: no new badge/status taxonomy; direct shell/page/filter truth only. +- Shared pattern first: reuse workspace hub and shell resolution contracts. +- Provider boundary: no provider tenant ID alias or fallback becomes platform shell truth. +- V1 explicitness / few layers: hard cutover, no compatibility layer. +- Filament-native UI: no ad-hoc styling or published internals. +- Filament v5 / Livewire v4: Livewire 4.1.4 satisfies Filament v5 requirement; no Livewire v3 APIs. +- Provider registration: Laravel 12 panel providers remain in `apps/platform/bootstrap/providers.php`; no provider registration work planned. +- Global search: no global search behavior should change. Baseline Profile and Baseline Snapshot global search remain disabled unless implementation explicitly verifies a safe View/Edit route and updates tests. +- Destructive/high-impact actions: no new destructive action. Existing archive/capture/compare/preflight actions must keep `->action(...)`, confirmation where required, authorization, audit, notifications, and tests. +- Asset strategy: no Filament assets planned; no new `filament:assets` deployment requirement. + +## Test Governance Check + +- **Test purpose / classification by changed surface**: Unit for classifier/registry; Feature/Livewire for shell/access/filter behavior; Browser for integrated shell/sidebar/reload/history. +- **Affected validation lanes**: fast-feedback, confidence, browser. +- **Why this lane mix is the narrowest sufficient proof**: The defect is both classification logic and browser-visible shell drift. +- **Narrowest proving command(s)**: + - `cd apps/platform && ./vendor/bin/sail artisan test --filter=AdminSurfaceScope` + - `cd apps/platform && ./vendor/bin/sail artisan test --filter=WorkspaceHubRegistry` + - `cd apps/platform && ./vendor/bin/sail artisan test --filter=WorkspaceOwnedAnalysis` + - `cd apps/platform && ./vendor/bin/sail artisan test --filter=BaselineCompareEnvironmentRouteContract` + - `cd apps/platform && ./vendor/bin/sail artisan test --filter=WorkspaceHubEnvironmentFilterContract` + - focused Spec 320 browser smoke. +- **Fixture / helper / factory / seed / context cost risks**: workspace/environment/member plus small baseline/finding fixtures; keep any full browser fixture explicit and named. +- **Expensive defaults or shared helper growth introduced?**: no. If a helper is needed, make expensive setup opt-in. +- **Heavy-family additions, promotions, or visibility changes**: explicit browser smoke only; no broad discovery guard in this spec. +- **Surface-class relief / special coverage rule**: `global-context-shell`. +- **Closing validation and reviewer handoff**: prove clean URLs, filtered URLs, legacy aliases, remembered fallback rejection, Baseline Compare regression, Decision Register regression, and browser screenshots. +- **Budget / baseline / trend follow-up**: none expected; document if browser smoke runtime grows materially. +- **Review-stop questions**: Are any workspace-owned analysis URLs still generic `WorkspaceScoped` with remembered restore? Did any page get registered as a hub without supporting hub/filter/clear behavior? Did legacy aliases return? +- **Escalation path**: document-in-feature. +- **Active feature PR close-out entry**: Guardrail / Exception / Smoke Coverage. +- **Why no dedicated follow-up spec is needed**: This is the dedicated follow-up for Spec 318 M2/M4. Alerts/Audit and durable browser guard already have 321/322. + +## Project Structure + +### Documentation (this feature) + +```text +specs/320-workspace-owned-analysis-surface-registration-shell-cutover/ ++-- spec.md ++-- plan.md ++-- tasks.md ++-- checklists/ + +-- requirements.md +``` + +### Source Code (likely affected during later implementation) + +```text +apps/platform/app/ ++-- Support/Navigation/ +| +-- AdminSurfaceScope.php +| +-- WorkspaceHubRegistry.php +| +-- WorkspaceSidebarNavigation.php ++-- Support/OperateHub/OperateHubShell.php ++-- Support/ManagedEnvironmentLinks.php ++-- Filament/Resources/ +| +-- BaselineProfileResource.php +| +-- BaselineSnapshotResource.php ++-- Filament/Pages/ +| +-- BaselineCompareMatrix.php +| +-- CrossEnvironmentComparePage.php +| +-- Findings/ +| +-- MyFindingsInbox.php +| +-- FindingsIntakeQueue.php +| +-- FindingsHygieneReport.php ++-- Filament/Concerns/WorkspaceScopedEnvironmentRoutes.php + +apps/platform/tests/ ++-- Unit/Tenants/AdminSurfaceScopeTest.php ++-- Unit/Support/OperateHub/OperateHubShellResolutionTest.php ++-- Feature/Navigation/WorkspaceHubRegistryTest.php ++-- Feature/Navigation/WorkspaceHubEnvironmentFilterContractTest.php ++-- Feature/Filament/ +| +-- BaselineCompareEnvironmentRouteContractTest.php +| +-- BaselineProfile*.php +| +-- BaselineSnapshot*.php ++-- Feature/Findings/ +| +-- MyFindingsInboxNavigationContextTest.php +| +-- FindingsIntakeQueueNavigationContextTest.php ++-- Browser/ + +-- Spec320WorkspaceOwnedAnalysisSurfaceSmokeTest.php +``` + +**Structure Decision**: Use existing Laravel/Filament app structure. Do not create new base folders. Add test files only where the existing test families already live, or extend existing focused files when lower churn is clearer. + +## Complexity Tracking + +| Violation | Why Needed | Simpler Alternative Rejected Because | +|-----------|------------|-------------------------------------| +| Possible new `AdminSurfaceScope` value | Generic `WorkspaceScoped` allows remembered Environment restore; workspace hubs already force environmentless shell but not every analysis page is a hub | Blindly adding every page to `WorkspaceHubRegistry` could falsely imply hub/filter/clear behavior | + +## Proportionality Review + +- **Current operator problem**: Workspace-owned pages can appear Environment-owned in the shell with no filter chip or route ownership. +- **Existing structure is insufficient because**: `WorkspaceScoped` restores remembered Environment; `WorkspaceHubRegistry` is reserved for hub-like surfaces. +- **Narrowest correct implementation**: Classify a route list or narrow scope category as workspace-owned analysis and make it force environmentless shell. +- **Ownership cost created**: Focused classifier tests, URL/filter tests, browser smoke, and implementation close-out documentation. +- **Alternative intentionally rejected**: Keep generic fallback, add legacy aliases, or add all pages to workspace hub registry regardless of actual hub behavior. +- **Release truth**: Current-release cleanup before production. + +## Implementation Phases + +### Phase 0 - Repo Verification + +Re-read Spec 318 artifacts and current code paths. Confirm the final in-scope list before runtime edits: + +- Baselines/Baseline Profiles. +- Baseline Profile view/edit/create if applicable. +- Baseline Compare Matrix. +- Baseline Snapshots. +- My Findings, Findings Intake, Findings Hygiene. +- Cross-environment Compare. +- Any other Spec 318 unregistered workspace analysis surface still present in routes/navigation. + +### Phase 1 - Tests First + +Add focused tests that fail on current remembered Environment inheritance: + +- `AdminSurfaceScope` classification for in-scope paths. +- Shell resolution with remembered Environment present. +- Clean URL opens without active Environment. +- Legacy alias rejection. +- Optional `environment_id` filter behavior where supported. +- Baseline Compare and Decision Register regressions. + +### Phase 2 - Classification / Registry Cutover + +Implement the narrowest classifier mechanism: + +- Prefer existing registry/classifier extensions. +- Add a distinct workspace-owned analysis surface classification only if needed. +- Ensure `forcesEnvironmentlessShellContext()` returns true for these paths. +- Ensure `allowsRememberedEnvironmentRestore()` is false for these paths. +- Preserve Workspace state and authorization. + +### Phase 3 - Page / Link / Copy Alignment + +Update only in-scope surfaces: + +- Sidebar/global/workspace links emit clean workspace URLs unless explicit `environment_id` filter is supported. +- Environment-origin links do not carry active Environment shell ownership. +- Headers, breadcrumbs, empty states, and copy use workspace/library/work-queue wording. +- Existing Environment columns, selectors, badges, and filters remain data/filter state. + +### Phase 4 - Regression and Browser Proof + +Run focused tests and browser smoke: + +- Baselines workspace origin, environment origin, reload. +- Baseline Snapshots workspace origin, environment origin, reload. +- Baseline Compare Matrix direct/reload/back-forward. +- My Findings/Intake/Hygiene and Cross-environment Compare direct/from Environment context. +- Baseline Compare Environment-owned regression. +- Decision Register workspace hub/filtered hub regression. + +Save screenshots under: + +```text +specs/320-workspace-owned-analysis-surface-registration-shell-cutover/artifacts/screenshots/ +``` + +### Phase 5 - Close-Out + +Document: + +- classification outcomes for Baselines/Baseline Snapshots. +- unregistered workspace analysis pages fixed or excluded. +- whether any page was reclassified Environment-owned. +- how remembered Environment inheritance was prevented. +- tests and browser verification. +- no migrations/packages/env vars/queues/scheduler/storage/assets. +- no backwards compatibility or legacy alias support. + +## Rollout Considerations + +- No database migration or data backfill. +- No production compatibility burden because pre-production hard cutover is the standing policy. +- No Dokploy runtime change. +- No new `filament:assets` deployment step. +- Staging validation should run focused tests and browser smoke before promotion. + +## Risk Controls + +- Keep route list explicit and tested. +- Do not generalize classifier beyond audited need. +- Do not add Environment filter feature work unless a page already has product need and visible chip/clear behavior can be proven. +- Replace old tests that assert broken remembered fallback; do not keep them as compatibility coverage. +- Keep Spec 321 and Spec 322 out of scope. diff --git a/specs/320-workspace-owned-analysis-surface-registration-shell-cutover/spec.md b/specs/320-workspace-owned-analysis-surface-registration-shell-cutover/spec.md new file mode 100644 index 00000000..e57be9d5 --- /dev/null +++ b/specs/320-workspace-owned-analysis-surface-registration-shell-cutover/spec.md @@ -0,0 +1,344 @@ +# Feature Specification: Workspace-Owned Analysis Surface Registration & Shell Cutover + +**Feature Branch**: `320-workspace-owned-analysis-surface-registration-shell-cutover` +**Created**: 2026-05-16 +**Status**: Completed +**Input**: User supplied Spec 320 draft: workspace-owned analysis and library pages must be classified centrally, open with Workspace shell only, and stop inheriting remembered Environment shell context. + +## Spec Candidate Check *(mandatory - SPEC-GATE-001)* + +- **Problem**: Workspace-owned analysis and library surfaces such as Baselines, Baseline Snapshots, baseline detail/matrix pages, and several unregistered analysis pages can show an active Environment shell when opened from Environment navigation or remembered context. +- **Today's failure**: Operators can see `Workspace > Environment` shell on pages whose route and data model are workspace-owned, with no visible Environment filter chip and no route-level Environment ownership. +- **User-visible improvement**: Opening a workspace-owned analysis page from sidebar, global navigation, direct URL, reload, or browser history shows Workspace shell only. If an Environment focus is supported, it is explicit through canonical `environment_id` plus a visible chip. +- **Smallest enterprise-capable version**: Classify the exact workspace-owned analysis/library surfaces found by Spec 318, prevent remembered Environment shell fallback for them, update links/copy where needed, and add focused regression coverage. +- **Explicit non-goals**: No Baseline Compare changes except regression checks, no Alerts/Audit Log filter decision, no durable browser no-drift framework, no redesign, no new product feature, no baseline assignment semantic change, no migrations, no compatibility redirects, no legacy query aliases. +- **Permanent complexity imported**: Possible narrow classifier entries or a new `AdminSurfaceScope` value for workspace-owned analysis surfaces, plus targeted tests. No persisted entities, tables, enum/status families, broad registries, or cross-domain UI framework. +- **Why now**: Spec 318 identified workspace-owned baseline/analysis surfaces as the remaining opposite-side mismatch after Specs 314-317 stabilized workspace hubs and Spec 319 handles Environment-owned Baseline Compare. +- **Why not local**: Page-local copy or sidebar-only fixes would leave direct URLs, Livewire requests, reload/back-forward, and remembered-context shell restoration inconsistent. +- **Approval class**: Cleanup / Consolidation. +- **Red flags triggered**: New classifier semantics are possible, but the scope is bounded by existing audit evidence and does not create a new product taxonomy beyond shell-context ownership. +- **Score**: Nutzen: 2 | Dringlichkeit: 2 | Scope: 2 | Komplexitaet: 2 | Produktnaehe: 2 | Wiederverwendung: 2 | **Gesamt: 12/12** +- **Decision**: approve. + +## Spec Scope Fields *(mandatory)* + +- **Scope**: workspace. +- **Primary Routes**: + - `/admin/baseline-profiles` + - `/admin/baseline-profiles/{record}` + - `/admin/baseline-profiles/{record}/edit` + - `/admin/baseline-profiles/{record}/compare-matrix` + - `/admin/baseline-snapshots` + - `/admin/baseline-snapshots/{record}` + - `/admin/findings/my-work` + - `/admin/findings/intake` + - `/admin/findings/hygiene` + - `/admin/cross-environment-compare` + - any additional unregistered workspace analysis surface confirmed from Spec 318 or repo inspection. +- **Data Ownership**: Existing workspace-owned Baseline Profile and Baseline Snapshot records, workspace analysis pages that aggregate across accessible Environments, and optional Environment filter state. No schema ownership change. +- **RBAC**: Workspace membership and existing workspace capabilities remain required. Environment entitlements still constrain row/data visibility where the existing page aggregates Environment-owned rows. UI visibility is not authorization. + +For canonical-view specs: + +- **Default filter behavior when tenant-context is active**: Clean workspace-owned analysis URLs must ignore active/remembered Environment shell context. They may retain data filters only when the page explicitly supports canonical `environment_id` and shows a visible filter chip. +- **Explicit entitlement checks preventing cross-tenant leakage**: Any `environment_id` filter must resolve only inside the current Workspace and only to an Environment visible to the actor. Cross-workspace or unauthorized IDs must not create shell context or leak Environment identity. + +## Cross-Cutting / Shared Pattern Reuse *(mandatory)* + +- **Cross-cutting feature?**: yes. +- **Interaction class(es)**: navigation, shell/context bar, breadcrumbs, URL/query state, Filament resource/page routing, filter chips, clear-filter actions, browser reload/history behavior. +- **Systems touched**: `AdminSurfaceScope`, `WorkspaceHubRegistry`, `WorkspaceSidebarNavigation`, `WorkspaceScopedEnvironmentRoutes`, `ManagedEnvironmentLinks`, `OperateHubShell`, `WorkspaceHubEnvironmentFilter`, `WorkspaceHubFilterStateResetter`, baseline resources/pages, findings analysis pages, cross-environment compare page, tests, and browser smoke artifacts. +- **Existing pattern(s) to extend**: Workspace hub environmentless shell contract from Specs 314-316 and hard-cut no-legacy policy from Spec 317. +- **Shared contract / presenter / builder / renderer to reuse**: Prefer existing `AdminSurfaceScope`, `WorkspaceHubRegistry` query cleaning, `WorkspaceHubEnvironmentFilter`/clear-filter behavior, and `OperateHubShell` shell resolution over page-local shell hacks. +- **Why the existing shared path is sufficient or insufficient**: Registered workspace hubs already force environmentless shell. The gap is that unregistered workspace analysis pages currently fall into generic `WorkspaceScoped`, which still allows remembered Environment restore. +- **Allowed deviation and why**: A distinct `workspace_owned_analysis_surface` classification is allowed only if adding these pages to `WorkspaceHubRegistry` would falsely make them first-class workspace hubs or filtered hub participants. +- **Consistency impact**: Sidebar, URL, shell, breadcrumb, page header, copy, filter chip, and data scope must agree on Workspace ownership. +- **Review focus**: Verify no remembered Environment, Filament tenant fallback, legacy Tenant query key, or `tableFilters` state creates active Environment shell on in-scope clean URLs. + +## OperationRun UX Impact + +- **Touches OperationRun start/completion/link UX?**: yes, only because existing Baseline Profile/Baseline Compare Matrix actions can start baseline capture/compare work or link to existing runs. +- **Shared OperationRun UX contract/layer reused**: Existing `OperationUxPresenter`, `OpsUxBrowserEvents`, `OperationRunLinks`, services, jobs, and audit behavior must remain in place. +- **Delegated start/completion UX behaviors**: Existing queued toast, run link, browser event, tenant/workspace-safe URL resolution, authorization, and audit behavior remain delegated to current helpers/services. +- **Local surface-owned behavior that remains**: The pages keep their current initiation controls and filtering UI; this spec changes shell/scope classification, not operation semantics. +- **Queued DB-notification policy**: N/A - no new DB notification behavior. +- **Terminal notification path**: Existing central lifecycle behavior only. +- **Exception required?**: none. + +## Provider Boundary / Platform Core Check + +- **Shared provider/platform boundary touched?**: yes. +- **Boundary classification**: platform-core route/shell/scope contract; provider-specific Microsoft tenant identity remains provider-owned. +- **Seams affected**: shell resolution, navigation scope, route classification, query key handling, operator vocabulary (`Workspace`, `Environment`, `ManagedEnvironment`), and baseline analysis links. +- **Neutral platform terms preserved or introduced**: `Workspace`, `Environment`, `workspace-owned analysis surface`, `workspace hub`, `filtered workspace hub`, `Environment-owned page`. +- **Provider-specific semantics retained and why**: Existing Intune baseline details, compare strategy, and Graph-backed snapshot content remain provider-specific because they are current product implementation truth. +- **Why this does not deepen provider coupling accidentally**: The fix removes hidden Environment/provider tenant fallback from workspace-owned pages instead of adding provider ID routes or alias query support. +- **Follow-up path**: Spec 321 decides Alerts/Audit Log `environment_id` behavior. Spec 322 adds durable browser no-drift regression infrastructure. + +## 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 | +|---|---:|---|---|---|---|---| +| Baselines / Baseline Profiles | yes | Existing Filament Resource | navigation, shell, breadcrumbs, actions | route, shell, page, copy | no | Workspace-owned baseline library. | +| Baseline Profile detail/edit | yes | Existing Filament Resource pages | breadcrumbs, header actions, related links | route, shell, record page | no | Workspace-owned record pages. | +| Baseline Compare Matrix | yes | Existing Filament Page + Blade view | analysis page, action links, OperationRun links | route, shell, query state | no | Workspace-owned analysis matrix, not Baseline Compare landing. | +| Baseline Snapshots | yes | Existing Filament Resource | navigation, shell, filters | route, shell, page, copy | no | Workspace-owned snapshot library/report. | +| My Findings / Intake / Hygiene | yes | Existing Filament Pages + tables | analysis queues, filters, clear actions | route, shell, URL query, table filters | no | Workspace-owned analysis pages with optional Environment filtering. | +| Cross-environment Compare | yes | Existing Filament Page + form | analysis page and environment selectors | route, shell, query state | no | Workspace-owned portfolio analysis. | +| Baseline Compare | yes | Existing Environment-owned page | regression only | route, shell | no | Must remain Environment-owned from Spec 319. | + +## 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 | +|---|---|---|---|---|---|---|---| +| Baselines / Baseline Profiles | Secondary Context | Operator manages reusable baseline definitions | profile name, status, capture mode, snapshot truth, next step | assignments, compare matrix, capture run detail | Library/register, not Environment posture page | Workspace governance library | Removes false selected-Environment ownership. | +| Baseline Snapshots | Tertiary Evidence / Diagnostics | Operator inspects immutable snapshot evidence | baseline, captured time, outcome, coverage, next step | snapshot detail and related context | Evidence library, not active Environment dashboard | Workspace baseline evidence review | Keeps evidence scan workspace-owned. | +| Baseline Compare Matrix | Secondary Context | Operator reviews assigned-environment compare matrix for one baseline | matrix state, filters, visible assignments, compare readiness | run/finding/environment drilldowns | Workspace-owned analysis across assigned environments | Baseline profile detail to analysis | Clarifies that selected Environment shell is not the page owner. | +| My Findings / Intake / Hygiene | Primary/Secondary Decision Surfaces | Operator reviews assigned, intake, or hygiene finding work across visible environments | queue counts, finding state, Environment column/filter | finding detail | Workspace work queues with optional Environment filter | Governance inbox/workspace overview to queue | Environment becomes a filter, not shell owner. | +| Cross-environment Compare | Secondary Context | Operator selects source/target environments for portfolio comparison | source, target, policy type selection, preview/preflight state | environment detail links and operation links | Workspace portfolio analysis | Workspace portfolio flow | Avoids hidden current Environment changing a two-environment workflow. | + +## 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 | +|---|---|---|---|---|---|---|---| +| Workspace-owned baseline library/snapshots | operator-MSP, support-platform | Workspace library/snapshot status and next step | snapshot fidelity, compare readiness, related runs | raw Graph payloads remain out of scope/default-hidden | Open profile/snapshot or capture/compare where already allowed | raw payload/debug detail | Shell states Workspace once; Environment appears only as data column/filter. | +| Findings analysis queues | operator-MSP, support-platform | queue state, finding severity/status, Environment column/filter | hygiene/intake reason, owner/assignee context | raw provider evidence remains on detail/evidence surfaces | Open finding, claim finding, or clear filter where allowed | support/raw evidence | Active filter chip and shell do not duplicate ownership. | +| Cross-environment Compare | operator-MSP, support-platform | source/target selection and preview readiness | preflight detail, operation/run links | raw policy payloads remain out of scope/default-hidden | Generate preflight where allowed | support/raw evidence | Source/target controls are page state, not shell context. | + +## 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 | +|---|---|---|---|---|---|---|---|---|---|---|---|---|---| +| Baselines | List / Table / Bulk | Workspace-owned library resource | Open or create baseline profile | Existing clickable row | existing | Existing More/detail header | Existing archive/capture/compare confirmations stay as implemented | `/admin/baseline-profiles` | `/admin/baseline-profiles/{record}` | Workspace shell, no active Environment | Baselines | profile status, capture mode, snapshot truth | none | +| Baseline Snapshots | List / Table | Workspace-owned evidence report | Open snapshot | Existing clickable row | existing | Existing related action | N/A | `/admin/baseline-snapshots` | `/admin/baseline-snapshots/{record}` | Workspace shell, no active Environment | Baseline Snapshots | outcome, coverage, next step | none | +| Baseline Compare Matrix | Workflow / Page | Workspace-owned analysis page | Compare assigned environments or inspect matrix | Explicit controls/links | N/A | Existing header/actions | Existing high-impact compare action keeps confirmation | `/admin/baseline-profiles/{record}/compare-matrix` | N/A | Workspace shell, explicit source data in page | Compare matrix | baseline and matrix scope | none | +| Findings analysis queues | List / Table | Workspace-owned work queues/reports | Open or claim finding | Existing clickable row/action | existing | Existing header/table actions | Existing claim behavior remains authorized | `/admin/findings/my-work`, `/admin/findings/intake`, `/admin/findings/hygiene` | existing finding detail route | Workspace shell, optional Environment filter chip | Findings | queue scope, severity, status, Environment column | none | +| Cross-environment Compare | Workflow / Page | Workspace-owned portfolio analysis | Select source/target, generate preflight | Explicit form/actions | N/A | Header actions | Existing promotion preflight/execution confirmations remain | `/admin/cross-environment-compare` | N/A | Workspace shell, explicit source/target selectors | Cross-environment compare | selected environments and preview readiness | none | +| Baseline Compare | Workflow / Page | Environment-owned posture page | Regression only | Environment route | N/A | Existing | Existing Compare Now remains confirmed | N/A | `/admin/workspaces/{workspace}/environments/{environment}/baseline-compare` | Workspace + Environment shell | Baseline Compare | selected Environment posture | regression only | + +## 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 | +|---|---|---|---|---|---|---|---|---|---|---| +| Baselines | Workspace operator / manager | Manage reusable governance baseline definitions | Workspace-owned library | Which baseline should govern environments? | status, capture mode, snapshot truth, assignments count, next step | capture details, compare matrix, runs | lifecycle, data completeness, governance result | TenantPilot baseline library plus existing queued capture/compare | create/open/edit/capture/compare per current capability | archive/capture/compare remain confirmation/authorization governed | +| Baseline Snapshots | Workspace operator / support | Inspect immutable baseline evidence | Workspace-owned evidence report | Which baseline snapshots are usable? | captured time, outcome, coverage, next step | fidelity detail, related context | lifecycle, evidence completeness | TenantPilot immutable snapshot evidence | open snapshot/related record | none | +| Findings analysis queues | Workspace operator | Review assigned/intake/hygiene work across visible environments | Workspace-owned queues | What governance work needs attention? | finding, severity, status, Environment, queue reason | owner/assignee/hygiene diagnostics | workflow state, severity, SLA | Existing finding workflow only | open finding, claim finding, clear filter | existing mutations remain authorized | +| Cross-environment Compare | Workspace operator / manager | Compare/promote configuration across environments | Workspace-owned portfolio analysis | Which source/target comparison is valid? | selected source/target, preview/preflight readiness | preflight detail, run links | selection validity, execution readiness | Existing queued operation / Microsoft read-write behavior | generate preflight / execute if already implemented | existing execution action remains guarded | + +## Proportionality Review *(mandatory when structural complexity is introduced)* + +- **New source of truth?**: no. The classification expresses existing product ownership; it does not create new domain truth. +- **New persisted entity/table/artifact?**: no. +- **New abstraction?**: possibly a narrow enum case or registry section if existing `WorkspaceHubRegistry` cannot represent workspace-owned analysis surfaces without falsely making them workspace hubs. +- **New enum/state/reason family?**: no business state. A technical surface-scope enum case is allowed only if it replaces ambiguous generic `WorkspaceScoped` behavior. +- **New cross-domain UI framework/taxonomy?**: no. This uses the existing shell/surface classification vocabulary. +- **Current operator problem**: Clean workspace-owned analysis URLs can show selected Environment shell, making page ownership and data scope misleading. +- **Existing structure is insufficient because**: Generic `AdminSurfaceScope::WorkspaceScoped` allows remembered Environment restore, while `WorkspaceHubRegistry` only covers first-class hubs and filtered hub behavior. +- **Narrowest correct implementation**: Add explicit classifier coverage for the audited workspace-owned analysis paths and make those paths force environmentless shell; use `environment_id` only where the page already supports a visible filter. +- **Ownership cost**: A small set of classifier/link/copy tests plus focused browser smoke. No schema, package, or product workflow cost. +- **Alternative intentionally rejected**: Add the pages blindly to `WorkspaceHubRegistry` if that would imply hub/filter contracts they do not support, or keep remembered fallback because it is convenient. +- **Release truth**: Current-release cleanup before production. + +### Compatibility posture + +This feature assumes pre-production hard cutover. + +Backward compatibility, legacy aliases, remembered Environment fallback, redirect shims, migration shims, dual route models, and compatibility-specific tests are out of scope. + +## Testing / Lane / Runtime Impact *(mandatory for runtime behavior changes)* + +- **Test purpose / classification**: Unit for classifier/registry behavior; Feature/Livewire for page access, shell state, URL/query/filter behavior, and existing action regression; Browser for integrated shell/sidebar/reload/back-forward verification. +- **Validation lane(s)**: fast-feedback, confidence, browser. +- **Why this classification and these lanes are sufficient**: The defect is visible shell/context drift caused by classifier and navigation behavior; unit/feature tests prove the contract and browser smoke proves integrated UI state. +- **New or expanded test families**: Focused `global-context-shell` coverage for workspace-owned analysis pages. Browser additions remain explicit and bounded to Spec 320 flows. +- **Fixture / helper cost impact**: Reuse existing workspace/environment/member/baseline/finding fixtures. Do not introduce global expensive setup defaults. +- **Heavy-family visibility / justification**: Browser coverage is required because reload/back-forward/sidebar shell mismatch was found by browser audit. It must be named as Spec 320 browser smoke, not hidden inside fast lanes. +- **Special surface test profile**: `global-context-shell`. +- **Standard-native relief or required special coverage**: Existing native Filament pages keep normal UI shape; special coverage is shell/context and filter visibility only. +- **Reviewer handoff**: Verify in-scope clean URLs show Workspace shell only, explicit filtered URLs show visible chip where supported, legacy aliases do not create shell/filter state, and Baseline Compare remains Environment-owned. +- **Budget / baseline / trend impact**: none expected; if browser runtime grows materially, record in the active PR close-out. +- **Escalation needed**: document-in-feature. +- **Active feature PR close-out entry**: Guardrail / Exception / Smoke Coverage. +- **Planned validation commands**: + - `cd apps/platform && ./vendor/bin/sail artisan test --filter=AdminSurfaceScope` + - `cd apps/platform && ./vendor/bin/sail artisan test --filter=WorkspaceHubRegistry` + - `cd apps/platform && ./vendor/bin/sail artisan test --filter=WorkspaceOwnedAnalysis` + - `cd apps/platform && ./vendor/bin/sail artisan test --filter=BaselineCompareEnvironmentRouteContract` + - `cd apps/platform && ./vendor/bin/sail artisan test --filter=WorkspaceHubEnvironmentFilterContract` + - focused Spec 320 browser smoke for Baselines, Baseline Snapshots, Baseline Compare Matrix, My Findings/Intake/Hygiene, Cross-environment Compare, Baseline Compare regression, and Decision Register regression. + +## User Scenarios & Testing *(mandatory)* + +### User Story 1 - Open Baseline Library Without Environment Shell (Priority: P1) + +As a workspace operator, I can open Baselines and Baseline Snapshots from workspace or environment navigation and see Workspace shell only, so reusable baseline libraries do not appear owned by the last Environment I visited. + +**Why this priority**: Baseline library ownership is the main known mismatch and directly affects governance trust. + +**Independent Test**: Start from an active Environment context, open clean Baselines and Baseline Snapshots URLs, and assert the shell has Workspace only with no active Environment. + +**Acceptance Scenarios**: + +1. **Given** a remembered Environment exists, **When** the operator opens `/admin/baseline-profiles`, **Then** the shell shows Workspace only and no visible active Environment. +2. **Given** the operator navigates from Environment Dashboard sidebar to Baseline Snapshots, **When** `/admin/baseline-snapshots` opens, **Then** it is a clean workspace-owned page with no hidden Environment shell. +3. **Given** a valid baseline profile record, **When** view/edit/compare-matrix pages open by clean workspace URL, **Then** remembered Environment state does not become shell context. + +--- + +### User Story 2 - Workspace Analysis Pages Do Not Inherit Environment Context (Priority: P1) + +As a workspace operator, I can open My Findings, Findings Intake, Findings Hygiene, and Cross-environment Compare without the previous Environment owning the shell, so workspace analysis/work queues stay scope-honest. + +**Why this priority**: Spec 318 found these unregistered workspace analysis pages inherit remembered Environment shell because they are not registered or classified. + +**Independent Test**: With remembered Environment state present, open each clean URL and assert Workspace shell only; if `environment_id` is supported, assert it is a visible filter, not shell ownership. + +**Acceptance Scenarios**: + +1. **Given** an active Environment context, **When** the operator opens `/admin/findings/my-work`, `/admin/findings/intake`, or `/admin/findings/hygiene`, **Then** shell context remains Workspace only. +2. **Given** a valid `environment_id` filter is supported for a findings analysis page, **When** the page opens with `?environment_id=...`, **Then** shell remains Workspace only and a visible Environment filter chip/clear action exists. +3. **Given** the operator opens `/admin/cross-environment-compare`, **When** source/target selectors are empty or query-hydrated, **Then** shell is Workspace only and selected source/target environments are page state. + +--- + +### User Story 3 - Legacy Query Aliases Cannot Recreate Hidden Environment Shell (Priority: P1) + +As a security reviewer, I need legacy query aliases and Filament table filter query payloads to be ignored or stripped on workspace-owned analysis surfaces, so old Tenant/Environment parameters cannot silently resurrect shell context. + +**Why this priority**: Specs 314-317 intentionally removed legacy Tenant context and hidden filter state. + +**Independent Test**: Open each in-scope page with `tenant`, `tenant_id`, `managed_environment_id`, `tenant_scope`, and `tableFilters` payloads and assert no active Environment shell or hidden filter appears. + +**Acceptance Scenarios**: + +1. **Given** a clean workspace-owned analysis page, **When** the URL includes `tenant`, `tenant_id`, `managed_environment_id`, `tenant_scope`, or `tableFilters`, **Then** those aliases do not set shell Environment or filter state. +2. **Given** the page supports canonical `environment_id`, **When** invalid or cross-workspace `environment_id` is supplied, **Then** it is rejected/ignored without shell context or leakage. + +--- + +### User Story 4 - Environment-Owned and Workspace Hub Regressions Remain Green (Priority: P2) + +As a reviewer, I can verify Baseline Compare remains Environment-owned and Decision Register remains a filtered workspace hub, so Spec 320 does not undo Specs 314-319. + +**Why this priority**: The fix targets the opposite side of Spec 319 and must not flatten Environment-owned pages into workspace pages. + +**Independent Test**: Assert canonical Baseline Compare route shows Workspace + Environment shell, old workspace-style Baseline Compare URLs still do not render, and Decision Register clean/filtered contracts remain green. + +**Acceptance Scenarios**: + +1. **Given** a canonical Baseline Compare Environment route, **When** the page opens, **Then** Workspace + active Environment shell remains present. +2. **Given** `/admin/governance/decisions`, **When** opened clean or with `?environment_id=...`, **Then** it behaves exactly as Specs 314-316 require. + +### Edge Cases + +- A workspace-owned analysis page has no Environment selected or remembered. +- A remembered Environment belongs to the current Workspace. +- A remembered Environment belongs to a different Workspace. +- A valid `environment_id` is supplied on a page that supports explicit filtering. +- A valid `environment_id` is supplied on a page that does not support explicit filtering. +- Legacy query aliases are supplied individually and together. +- Browser reload/back/forward crosses Environment Dashboard, workspace-owned analysis pages, Baseline Compare, and Decision Register. +- Livewire update requests use referer-based surface classification and must not reintroduce remembered Environment shell. + +## Functional Requirements + +- **FR-001**: Baselines/Baseline Profiles MUST be explicitly classified as workspace-owned analysis/library surfaces unless implementation evidence proves a narrower Environment-owned split is required. +- **FR-002**: Baseline Snapshots MUST be explicitly classified as workspace-owned analysis/library surfaces unless implementation evidence proves a narrower Environment-owned split is required. +- **FR-003**: Baseline Profile view/edit pages and Baseline Compare Matrix MUST be classified so clean URLs force Workspace shell only. +- **FR-004**: My Findings, Findings Intake, Findings Hygiene, Cross-environment Compare, and any other Spec 318 unregistered workspace analysis pages confirmed in repo inspection MUST be registered/classified or explicitly excluded with evidence. +- **FR-005**: In-scope clean workspace-owned analysis URLs MUST NOT restore remembered Environment shell context. +- **FR-006**: In-scope clean URLs MUST open without requiring an active Environment context. +- **FR-007**: Workspace context MUST remain selected and valid; the fix MUST NOT clear Workspace state. +- **FR-008**: If a page supports Environment filtering, the only public filter key MUST be `environment_id`. +- **FR-009**: `environment_id` filtering MUST keep Workspace shell only and show a visible Environment filter chip or equivalent clear affordance. +- **FR-010**: `tenant`, `tenant_id`, `managed_environment_id`, `tenant_scope`, and `tableFilters` MUST NOT create active Environment shell or hidden Environment filter state on in-scope pages. +- **FR-011**: Cross-workspace or unauthorized `environment_id` MUST NOT leak Environment identity or become shell context. +- **FR-012**: Sidebar/global/workspace navigation entries for in-scope pages MUST emit clean workspace URLs unless they intentionally emit canonical `environment_id` filter URLs with visible chips. +- **FR-013**: Environment Dashboard links to workspace-owned analysis pages MUST use clean workspace URLs or explicit `environment_id` filter URLs; they MUST NOT carry active Environment shell ownership. +- **FR-014**: Breadcrumb/header/copy for workspace-owned analysis pages MUST not imply active Environment ownership as the primary scope. +- **FR-015**: Workspace-owned analysis pages MAY show Environment columns, badges, selectors, and filter labels as data/filter state. +- **FR-016**: Baseline Compare MUST remain Environment-owned according to Spec 319. +- **FR-017**: Decision Register, Governance Inbox, Operations, Finding Exceptions Queue, Provider Connections, Evidence Overview, Review Register, Customer Review Workspace, Workspace Settings, Manage Workspaces, and Managed Environments MUST retain their existing workspace hub contracts. +- **FR-018**: Alerts/Audit Log `environment_id` behavior MUST NOT be decided or changed except as regression context; that belongs to Spec 321. +- **FR-019**: No compatibility route, redirect shim, legacy alias support, migration, seeder, package, env var, queue, scheduler, storage, or deployment asset change may be introduced for this spec. +- **FR-020**: Browser verification screenshots SHOULD be saved under `specs/320-workspace-owned-analysis-surface-registration-shell-cutover/artifacts/screenshots/` when generated. + +## Acceptance Criteria + +### Surface Classification + +- [x] Baselines/Baseline Profiles classified as workspace-owned or explicitly reclassified with evidence. +- [x] Baseline Snapshots classified as workspace-owned or explicitly reclassified with evidence. +- [x] Baseline Profile detail/edit/compare-matrix classified as workspace-owned analysis surfaces. +- [x] My Findings, Findings Intake, Findings Hygiene, and Cross-environment Compare classified or explicitly excluded with evidence. +- [x] No in-scope workspace-owned analysis page remains generic ambiguous `WorkspaceScoped` if that permits remembered Environment shell fallback. +- [x] Baseline Compare remains Environment-owned. + +### Shell Context + +- [x] Baselines clean URL shows Workspace shell only. +- [x] Baseline Snapshots clean URL shows Workspace shell only. +- [x] Baseline Profile detail/edit/compare-matrix clean URLs show Workspace shell only. +- [x] Findings analysis and Cross-environment Compare clean URLs show Workspace shell only. +- [x] Opening in-scope pages from Environment context cuts to Workspace shell only. +- [x] Reload and browser back/forward do not restore active Environment shell. + +### URL / Query Contract + +- [x] In-scope clean URLs do not require Environment context. +- [x] Legacy query aliases do not create shell/filter state. +- [x] Supported Environment filters use only `environment_id`. +- [x] Visible filter chip/clear behavior exists for pages that support `environment_id`. +- [x] Unsupported `environment_id` is ignored/stripped/rejected without hidden shell/data mismatch; chosen behavior is documented in implementation close-out. + +### Regression + +- [x] Spec 314 clean workspace hub entry remains green. +- [x] Spec 315 Environment CTA `environment_id` contract remains green. +- [x] Spec 316 clear filter contract remains green. +- [x] Spec 317 legacy Tenant cleanup remains green. +- [x] Spec 319 Baseline Compare Environment-owned route remains green. +- [x] Spec 318 workspace-owned analysis mismatch is resolved for in-scope surfaces. + +## Out of Scope + +- Baseline Compare implementation changes beyond regression checks. +- Alerts/Audit Log filter decision from Spec 321. +- Durable browser no-drift automation from Spec 322. +- New product features, new baseline assignment semantics, or baseline data model redesign. +- Migrations, seeders, data backfills, package changes, env vars, queues, scheduler, storage, or deployment asset changes. +- Legacy alias support, backwards compatibility, redirects, dual shell models, or remembered Environment fallback preservation. + +## Source Evidence + +- `specs/318-admin-surface-scope-shell-context-audit/audit-report.md` identifies the classifier gap and workspace-owned baseline/analysis mismatches. +- `specs/318-admin-surface-scope-shell-context-audit/surface-inventory.md` lists Baselines/Baseline Profiles, Baseline Snapshots, Baseline Compare Matrix, My Findings, Findings Intake, Findings Hygiene, and Cross-environment Compare as mismatches or unregistered workspace analysis pages. +- `specs/318-admin-surface-scope-shell-context-audit/mismatch-findings.md` records M2 and M4 as the direct targets. +- `specs/318-admin-surface-scope-shell-context-audit/recommended-fixes.md` recommends a Workspace-Owned Baseline Registry Contract and broader classifier coverage. +- `specs/319-environment-owned-surface-routing-shell-context-contract/spec.md` leaves workspace-owned baseline analysis surfaces explicitly to Spec 320. + +## Assumptions + +- Baseline Profiles and Baseline Snapshots are workspace-owned based on current `workspace_id` queries and Spec 318 evidence. +- Baseline Compare Matrix is workspace-owned analysis over assigned Environments, while Baseline Compare landing remains Environment-owned. +- Findings analysis pages are workspace-owned queues/reports with optional Environment filters, not Environment-owned pages. +- Cross-environment Compare is workspace-owned portfolio analysis because it explicitly selects source/target Environments. +- Current product is pre-production; hard cutover is correct. + +## Risks + +- Adding all in-scope pages to `WorkspaceHubRegistry` could accidentally imply filtered-hub behavior for pages that do not support chips/clear state. +- A new classifier enum case could become a broader taxonomy if not constrained to the audited route list. +- Existing tests may assert remembered Environment fallback and must be replaced, not preserved. +- Browser smoke can become too broad; keep it focused to Spec 318 evidence and required regressions. + +## Open Questions + +- Exact unsupported `environment_id` behavior for pages without filter support: ignore, strip, or reject. Implementation must choose per page and document the result. +- Whether Baseline Profile create page should be included in workspace-owned analysis classification if implementation finds it inherits Environment shell. +- Whether findings analysis pages should converge on canonical `environment_id` visible chip behavior in this spec or only prevent shell inheritance; if current filter UI is not chip-compatible, keep the fix narrow and document follow-up rather than adding feature scope. + +## Follow-up Spec Candidates + +- **321 - Alerts / Audit Log Environment Filter Contract Decision**: decide support vs rejection of `environment_id` with no half-state. +- **322 - Browser No-Drift Regression Guard**: durable browser coverage for shell/context/filter/reload/back-forward drift. diff --git a/specs/320-workspace-owned-analysis-surface-registration-shell-cutover/tasks.md b/specs/320-workspace-owned-analysis-surface-registration-shell-cutover/tasks.md new file mode 100644 index 00000000..9a328cf9 --- /dev/null +++ b/specs/320-workspace-owned-analysis-surface-registration-shell-cutover/tasks.md @@ -0,0 +1,151 @@ +# Tasks: Workspace-Owned Analysis Surface Registration & Shell Cutover + +**Input**: Design documents from `/specs/320-workspace-owned-analysis-surface-registration-shell-cutover/` +**Prerequisites**: `plan.md`, `spec.md` +**Tests**: Required. This is a runtime route/shell/query/navigation contract change. + +## Test Governance Checklist + +- [x] Lane assignment is named and is the narrowest sufficient proof for classifier, shell, query, reload/history, and regression behavior. +- [x] New or changed tests stay in the smallest honest family; browser additions are 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 `global-context-shell` is explicit. +- [x] Any material budget, baseline, trend, or escalation note is recorded in the implementation close-out. + +## Phase 1: Guardrails and Repo Verification + +**Purpose**: Confirm current repo truth before runtime edits. + +- [x] T001 Verify implementation starts from branch `320-workspace-owned-analysis-surface-registration-shell-cutover` and record any unrelated uncommitted files. +- [x] T002 Re-read `specs/318-admin-surface-scope-shell-context-audit/audit-report.md`, `surface-inventory.md`, `page-matrix.md`, `mismatch-findings.md`, and `recommended-fixes.md`. +- [x] T003 Re-read `specs/319-environment-owned-surface-routing-shell-context-contract/spec.md`, `plan.md`, and `tasks.md` as dependency context only. +- [x] T004 Confirm Laravel/Filament/Livewire/Pest versions through Laravel Boost `application_info`. +- [x] T005 Confirm no migration, seeder, package, env var, queue, scheduler, storage, or deployment asset change is required. +- [x] T006 Inventory current classifier behavior in `apps/platform/app/Support/Navigation/AdminSurfaceScope.php`. +- [x] T007 Inventory current workspace hub behavior in `apps/platform/app/Support/Navigation/WorkspaceHubRegistry.php` and `WorkspaceSidebarNavigation.php`. +- [x] T008 Inventory shell resolution in `apps/platform/app/Support/OperateHub/OperateHubShell.php`, including remembered Environment and query hint behavior. +- [x] T009 Inventory in-scope baseline routes/pages in `BaselineProfileResource`, `BaselineSnapshotResource`, and `BaselineCompareMatrix`. +- [x] T010 Inventory in-scope workspace analysis routes/pages in `MyFindingsInbox`, `FindingsIntakeQueue`, `FindingsHygieneReport`, and `CrossEnvironmentComparePage`. +- [x] T011 Search routes/navigation for any additional Spec 318 unregistered workspace analysis page still present and decide include/exclude with evidence. +- [x] T012 Identify any existing tests asserting remembered Environment fallback on in-scope pages and mark them for replacement. + +## Phase 2: Tests First / Contract Coverage + +**Purpose**: Add failing or alongside tests that define the new contract. + +- [x] T013 Add/update `apps/platform/tests/Unit/Tenants/AdminSurfaceScopeTest.php` proving Baselines/Baseline Profiles paths are workspace-owned analysis or environmentless shell paths. +- [x] T014 Add/update `apps/platform/tests/Unit/Tenants/AdminSurfaceScopeTest.php` proving Baseline Snapshots paths are workspace-owned analysis or environmentless shell paths. +- [x] T015 Add/update `apps/platform/tests/Unit/Tenants/AdminSurfaceScopeTest.php` proving Baseline Profile detail/edit/compare-matrix paths do not allow remembered Environment restore. +- [x] T016 Add/update `apps/platform/tests/Unit/Tenants/AdminSurfaceScopeTest.php` proving My Findings, Findings Intake, Findings Hygiene, and Cross-environment Compare paths do not allow remembered Environment restore. +- [x] T017 Add/update `apps/platform/tests/Unit/Support/OperateHub/OperateHubShellResolutionTest.php` proving workspace-owned analysis clean URLs show Workspace shell only when a remembered Environment exists. +- [x] T018 Add/update `apps/platform/tests/Feature/Navigation/WorkspaceHubRegistryTest.php` proving in-scope pages are not accidentally treated as full workspace hubs unless implementation intentionally registers them with hub behavior. +- [x] T019 Add/update tests proving clean Baselines and Baseline Snapshots URLs open without active Environment context. +- [x] T020 Add/update tests proving Baseline Profile view/edit/compare-matrix URLs open with Workspace shell only. +- [x] T021 Add/update tests proving My Findings, Findings Intake, Findings Hygiene, and Cross-environment Compare clean URLs open with Workspace shell only. +- [x] T022 Add/update tests proving remembered Environment state alone does not set shell context on in-scope pages. +- [x] T023 Add/update tests proving `tenant`, `tenant_id`, `managed_environment_id`, `tenant_scope`, and `tableFilters` do not create shell or filter state on in-scope pages. +- [x] T024 For pages that support canonical `environment_id`, add/update tests proving shell remains Workspace only and a visible chip/clear affordance exists. +- [x] T025 For pages that do not support canonical `environment_id`, add/update tests proving unsupported `environment_id` is ignored, stripped, or rejected without hidden shell/data mismatch. +- [x] T026 Add/update tests proving Environment Dashboard or Environment-origin links to in-scope workspace-owned analysis pages do not carry active Environment shell ownership. +- [x] T027 Keep/add Baseline Compare regression coverage proving its canonical route remains Environment-owned. +- [x] T028 Keep/add Decision Register regression coverage proving clean and filtered workspace hub behavior remains green. +- [x] T029 Keep/add Specs 314-317 regression coverage for clean workspace hub entry, Environment CTA `environment_id`, clear filter, and no legacy Tenant aliases. +- [x] T030 Add/update existing high-impact baseline action tests only as needed to prove capture/compare actions still keep confirmation, authorization, audit, and OperationRun UX after shell classification changes. + +## Phase 3: Classification and Shell Cutover + +**Purpose**: Implement the narrowest route/shell classification fix. + +- [x] T031 Update `apps/platform/app/Support/Navigation/AdminSurfaceScope.php` to classify in-scope workspace-owned analysis paths explicitly. +- [x] T032 Ensure the chosen classification forces environmentless shell context for clean workspace-owned analysis URLs. +- [x] T033 Ensure the chosen classification does not allow remembered Environment restore. +- [x] T034 Ensure Livewire referer-based classification uses the same in-scope path behavior. +- [x] T035 If adding a new `AdminSurfaceScope` enum case, complete the proportionality note in implementation close-out and avoid using it outside audited routes. +- [x] T036 If registering any in-scope page in `WorkspaceHubRegistry`, verify it truly satisfies workspace hub/filter/clear semantics and add matching registry tests. +- [x] T037 Keep `WorkspaceHubRegistry::forbiddenQueryKeys()` and related query-cleaning behavior aligned with no legacy aliases. +- [x] T038 Do not add Baseline Compare to workspace hub or workspace-owned analysis classification. +- [x] T039 Do not alter Environment-bound route classification for required permissions, inventory, backups, evidence, reviews, stored reports, review packs, or other Spec 319 out-of-scope Environment pages. + +## Phase 4: Baseline Surfaces + +**Purpose**: Align baseline library/report pages with workspace-owned shell semantics. + +- [x] T040 Update `apps/platform/app/Filament/Resources/BaselineProfileResource.php` only if needed so list/view/edit/create URLs and navigation do not rely on active Environment shell. +- [x] T041 Update Baseline Profile breadcrumbs/header/copy if any primary wording implies active Environment ownership. +- [x] T042 Update Baseline Profile related navigation links if they carry hidden Environment shell ownership or legacy query aliases. +- [x] T043 Update `apps/platform/app/Filament/Pages/BaselineCompareMatrix.php` only if needed so the page shell is Workspace only while source Environment drilldowns remain explicit page links. +- [x] T044 Preserve Baseline Compare Matrix filter query keys such as `tenant_sort` only as page matrix state, not shell Environment ownership. +- [x] T045 Update `apps/platform/app/Filament/Resources/BaselineSnapshotResource.php` only if needed so list/view URLs and copy remain workspace snapshot library/report semantics. +- [x] T046 Preserve Baseline Profile and Baseline Snapshot global search disabled status unless implementation deliberately verifies and tests safe View/Edit pages. +- [x] T047 Preserve existing baseline archive/capture/compare action confirmation, authorization, notifications, audit, and OperationRun behavior. + +## Phase 5: Findings and Portfolio Analysis Surfaces + +**Purpose**: Align unregistered workspace analysis pages found by Spec 318. + +- [x] T048 Update `apps/platform/app/Filament/Pages/Findings/MyFindingsInbox.php` only if needed so clean URL shell is Workspace only. +- [x] T049 Update `apps/platform/app/Filament/Pages/Findings/FindingsIntakeQueue.php` only if needed so clean URL shell is Workspace only. +- [x] T050 Update `apps/platform/app/Filament/Pages/Findings/FindingsHygieneReport.php` only if needed so clean URL shell is Workspace only. +- [x] T051 Replace `tenant` query prefilter handling on findings analysis pages with canonical `environment_id` if this is already intended product behavior and can show visible filter/clear affordance. +- [x] T052 If findings analysis pages cannot safely migrate filter behavior in this slice, prevent shell inheritance and document filter-key follow-up rather than adding half-state support. +- [x] T053 Update `apps/platform/app/Filament/Pages/CrossEnvironmentComparePage.php` only if needed so source/target Environment selectors remain page state and shell is Workspace only. +- [x] T054 Ensure Cross-environment Compare direct URL, query-hydrated URL, and reload do not restore remembered Environment shell. +- [x] T055 Preserve existing promotion/preflight authorization, confirmation, audit, OperationRun links, and provider-boundary behavior. + +## Phase 6: Navigation, Links, Copy, and Legacy Aliases + +**Purpose**: Make visible navigation agree with page ownership. + +- [x] T056 Update `WorkspaceSidebarNavigation` or related navigation builders only if in-scope pages are present there and currently emit ambiguous URLs. +- [x] T057 Update `ManagedEnvironmentLinks` only if Environment-origin cards/actions link to workspace-owned analysis pages with hidden shell ownership. +- [x] T058 Ensure sidebar/global/workspace entry to Baselines, Baseline Snapshots, baseline matrix, findings analysis pages, and Cross-environment Compare uses clean workspace URLs unless canonical `environment_id` filter is intentionally supported. +- [x] T059 Ensure Environment Dashboard links to in-scope workspace-owned analysis pages use clean workspace URLs or explicit `environment_id` filter URLs with visible chip/clear behavior. +- [x] T060 Remove or replace user-facing copy that says `this environment`, `current environment`, or similar primary ownership wording on in-scope workspace-owned analysis pages. +- [x] T061 Keep Environment columns, Environment badges, source/target selectors, and Environment filters where they are data/filter state rather than shell ownership. +- [x] T062 Ensure no in-scope page starts accepting `tenant`, `tenant_id`, `managed_environment_id`, `tenant_scope`, or `tableFilters` as public Environment filter aliases. + +## Phase 7: Browser Verification + +**Purpose**: Prove visible route/shell/copy behavior. + +- [x] T063 Start local platform stack using Sail or the repo platform dev command. +- [x] T064 Browser Flow A: Workspace Overview -> Baselines; verify Workspace shell only, no active Environment, workspace/library wording. +- [x] T065 Save Flow A screenshot to `specs/320-workspace-owned-analysis-surface-registration-shell-cutover/artifacts/screenshots/workspace-origin--baselines.png`. +- [x] T066 Browser Flow B: Environment Dashboard -> Baselines through sidebar/global/navigation/card; verify shell cuts to Workspace only. +- [x] T067 Save Flow B screenshot to `artifacts/screenshots/environment-origin--baselines.png`. +- [x] T068 Browser Flow C: reload Baselines and verify active Environment shell does not return. +- [x] T069 Save Flow C screenshot to `artifacts/screenshots/baselines--after-reload.png`. +- [x] T070 Repeat workspace origin, environment origin, and reload flows for Baseline Snapshots. +- [x] T071 Save Baseline Snapshots screenshots using `workspace-origin--baseline-snapshots.png`, `environment-origin--baseline-snapshots.png`, and `baseline-snapshots--after-reload.png`. +- [x] T072 Browser verify Baseline Compare Matrix direct/reload/back-forward behavior if local fixture has a baseline profile. +- [x] T073 Browser verify My Findings, Findings Intake, Findings Hygiene, and Cross-environment Compare clean URLs from remembered Environment context. +- [x] T074 Browser verify Baseline Compare remains Environment-owned. +- [x] T075 Save Baseline Compare regression screenshot to `artifacts/screenshots/baseline-compare--regression-environment-owned.png`. +- [x] T076 Browser verify Decision Register clean and filtered workspace hub regressions. +- [x] T077 Save Decision Register regression screenshot to `artifacts/screenshots/decision-register--regression-workspace-hub.png`. +- [x] T078 If browser setup or fixture data blocks any flow, document the exact blocker and alternate proof in the implementation close-out. + +> Browser coverage note: Matrix and Baseline Compare browser flows were partially blocked by local Spec 180 fixture/capability state. The local fixture has no baseline profile for a matrix browser flow, and the environment-owned Baseline Compare browser route is intentionally capability-denied. The environment-owned Baseline Compare contract and matrix route behavior are covered by focused Pest route/RBAC tests. No runtime gap remains in Spec 320 scope. + +## Phase 8: Final Validation and Close-Out + +**Purpose**: Complete implementation proof without broad rebaseline. + +- [x] T079 Run `git diff --check`. +- [x] T080 Run the focused Pest commands listed in `plan.md`. +- [x] T081 Run formatting with the repo-standard Pint command for touched PHP files. +- [x] T082 Review `git diff --stat` and confirm only in-scope runtime/test/spec artifacts changed. +- [x] T083 Confirm no migrations, seeders, package files, env files, queue/scheduler/storage config, or deployment asset files changed. +- [x] T084 Confirm no backwards compatibility layer, redirect shim, dual route model, or legacy query alias support was introduced. +- [x] T085 Prepare final implementation report with changed behavior, workspace-owned analysis surfaces classified, surfaces registered, files changed, tests, browser verification, screenshots path, follow-ups 321/322, and any unrelated residual failures. +- [x] T086 Include the Filament v5 output contract in the final report: Livewire v4.0+ compliance, provider registration location, global search status, destructive/high-impact actions, asset strategy, and testing plan/results. + +## Explicit Non-Tasks + +- [x] NT001 Do not implement Alerts/Audit Log filter behavior; leave it to Spec 321. +- [x] NT002 Do not build durable browser no-drift infrastructure; leave it to Spec 322. +- [x] NT003 Do not change Baseline Compare except regression coverage needed to prove Spec 319 remains intact. +- [x] NT004 Do not add migrations, seeders, packages, env vars, queues, scheduler, storage, or deployment asset changes. +- [x] NT005 Do not add legacy `tenant`, `tenant_id`, `managed_environment_id`, `tenant_scope`, or `tableFilters` aliases. +- [x] NT006 Do not preserve remembered Environment fallback for workspace-owned analysis clean URLs. From d879c61204cc96076259a32bb9321a36d5f6dd22 Mon Sep 17 00:00:00 2001 From: ahmido Date: Sun, 17 May 2026 00:27:27 +0000 Subject: [PATCH 3/4] feat: implement environment filtering for alerts and audit logs (#378) ## Summary - Implement environment filtering across Filament alerts and audit log pages, widgets, and support builders. - Add a feature test covering the alerts/audit environment filter contract. - Add the supporting specification and planning artifacts under `specs/`. ## Testing - Not run in this step. Co-authored-by: Ahmed Darrazi Reviewed-on: https://git.cloudarix.de/ahmido/TenantAtlas/pulls/378 --- .../Clusters/Monitoring/AlertsCluster.php | 43 ++ .../app/Filament/Pages/Monitoring/Alerts.php | 81 +++ .../Filament/Pages/Monitoring/AuditLog.php | 93 +++- .../Pages/ListAlertDeliveries.php | 130 ++++- .../Widgets/Alerts/AlertsKpiHeader.php | 13 +- .../GovernanceInboxSectionBuilder.php | 12 +- .../SupportDiagnosticBundleBuilder.php | 5 +- .../Workspaces/WorkspaceOverviewBuilder.php | 26 +- .../pages/monitoring/alerts.blade.php | 17 +- .../pages/monitoring/audit-log.blade.php | 9 + ...ertsAuditEnvironmentFilterContractTest.php | 382 ++++++++++++++ .../checklists/requirements.md | 52 ++ .../decision.md | 58 +++ .../plan.md | 240 +++++++++ .../spec.md | 473 ++++++++++++++++++ .../tasks.md | 123 +++++ 16 files changed, 1727 insertions(+), 30 deletions(-) create mode 100644 apps/platform/tests/Feature/Navigation/Spec321AlertsAuditEnvironmentFilterContractTest.php create mode 100644 specs/321-alerts-audit-log-environment-filter-contract-decision/checklists/requirements.md create mode 100644 specs/321-alerts-audit-log-environment-filter-contract-decision/decision.md create mode 100644 specs/321-alerts-audit-log-environment-filter-contract-decision/plan.md create mode 100644 specs/321-alerts-audit-log-environment-filter-contract-decision/spec.md create mode 100644 specs/321-alerts-audit-log-environment-filter-contract-decision/tasks.md diff --git a/apps/platform/app/Filament/Clusters/Monitoring/AlertsCluster.php b/apps/platform/app/Filament/Clusters/Monitoring/AlertsCluster.php index d0daa765..9806495a 100644 --- a/apps/platform/app/Filament/Clusters/Monitoring/AlertsCluster.php +++ b/apps/platform/app/Filament/Clusters/Monitoring/AlertsCluster.php @@ -4,6 +4,10 @@ namespace App\Filament\Clusters\Monitoring; +use App\Models\Workspace; +use App\Support\Navigation\WorkspaceHubEnvironmentFilter; +use App\Support\Navigation\WorkspaceHubFilterStateResetter; +use App\Support\Workspaces\WorkspaceContext; use BackedEnum; use Filament\Clusters\Cluster; use Filament\Facades\Filament; @@ -24,4 +28,43 @@ public static function shouldRegisterNavigation(): bool { return Filament::getCurrentPanel()?->getId() === 'admin'; } + + public function mount(): void + { + app(WorkspaceHubFilterStateResetter::class)->neutralizeEnvironmentLikeQueryState(request()); + + $environmentFilterQuery = $this->environmentFilterQuery(); + + foreach ($this->getCachedSubNavigation() as $navigationGroup) { + foreach ($navigationGroup->getItems() as $navigationItem) { + $url = $navigationItem->getUrl(); + + if (is_string($url) && $url !== '' && $environmentFilterQuery !== []) { + $url = url()->query($url, $environmentFilterQuery); + } + + redirect($url); + + return; + } + } + } + + /** + * @return array + */ + private function environmentFilterQuery(): array + { + $workspace = app(WorkspaceContext::class)->currentWorkspace(request()); + + if (! $workspace instanceof Workspace) { + return []; + } + + $filter = WorkspaceHubEnvironmentFilter::fromRequest(request(), $workspace); + + return $filter instanceof WorkspaceHubEnvironmentFilter + ? $filter->queryParameters() + : []; + } } diff --git a/apps/platform/app/Filament/Pages/Monitoring/Alerts.php b/apps/platform/app/Filament/Pages/Monitoring/Alerts.php index e57cc2ea..8a23b28d 100644 --- a/apps/platform/app/Filament/Pages/Monitoring/Alerts.php +++ b/apps/platform/app/Filament/Pages/Monitoring/Alerts.php @@ -5,12 +5,17 @@ namespace App\Filament\Pages\Monitoring; use App\Filament\Clusters\Monitoring\AlertsCluster; +use App\Filament\Concerns\ClearsWorkspaceHubEnvironmentFilterState; +use App\Filament\Resources\AlertDeliveryResource; +use App\Filament\Resources\AlertDestinationResource; +use App\Filament\Resources\AlertRuleResource; use App\Filament\Widgets\Alerts\AlertsKpiHeader; use App\Models\User; use App\Models\Workspace; use App\Services\Auth\WorkspaceCapabilityResolver; use App\Support\Auth\Capabilities; use App\Support\Navigation\CanonicalNavigationContext; +use App\Support\Navigation\WorkspaceHubEnvironmentFilter; use App\Support\OperateHub\OperateHubShell; use App\Support\Ui\ActionSurface\ActionSurfaceDeclaration; use App\Support\Ui\ActionSurface\Enums\ActionSurfaceProfile; @@ -25,6 +30,8 @@ class Alerts extends Page { + use ClearsWorkspaceHubEnvironmentFilterState; + protected static ?string $cluster = AlertsCluster::class; protected static ?int $navigationSort = 20; @@ -41,6 +48,12 @@ class Alerts extends Page protected string $view = 'filament.pages.monitoring.alerts'; + public function mount(): void + { + $this->resetWorkspaceHubEnvironmentFilterStateForCleanEntry(request()); + $this->environmentFilter(); + } + public static function actionSurfaceDeclaration(): ActionSurfaceDeclaration { return ActionSurfaceDeclaration::forPage(ActionSurfaceProfile::ListOnlyReadOnly, ActionSurfaceType::ReadOnlyRegistryReport) @@ -89,6 +102,44 @@ protected function getHeaderWidgets(): array ]; } + /** + * @return array{label: string, clear_url: string, description: string}|null + */ + public function environmentFilterChip(): ?array + { + $filter = $this->environmentFilter(); + + if (! $filter instanceof WorkspaceHubEnvironmentFilter) { + return null; + } + + return [ + 'label' => $filter->displayName(), + 'clear_url' => $this->cleanWorkspaceHubUrl(route('filament.admin.alerts')), + 'description' => 'Delivery signal is filtered. Rules and targets remain workspace configuration.', + ]; + } + + public function alertDeliveriesUrl(): string + { + return AlertDeliveryResource::getUrl('index', $this->filteredNavigationParameters(), panel: 'admin'); + } + + public function alertRulesUrl(): string + { + return $this->cleanWorkspaceHubUrl(AlertRuleResource::getUrl(panel: 'admin')); + } + + public function alertDestinationsUrl(): string + { + return $this->cleanWorkspaceHubUrl(AlertDestinationResource::getUrl(panel: 'admin')); + } + + public function auditLogUrl(): string + { + return route('admin.monitoring.audit-log', $this->filteredNavigationParameters()); + } + /** * @return array */ @@ -113,4 +164,34 @@ protected function getHeaderActions(): array return $actions; } + + /** + * @return array + */ + private function filteredNavigationParameters(): array + { + return array_filter( + array_merge( + $this->navigationContext()?->toQuery() ?? [], + $this->environmentFilter()?->queryParameters() ?? [], + ), + static fn (mixed $value): bool => $value !== null && $value !== '' && $value !== [], + ); + } + + private function navigationContext(): ?CanonicalNavigationContext + { + return CanonicalNavigationContext::fromRequest(request()); + } + + private function environmentFilter(): ?WorkspaceHubEnvironmentFilter + { + $workspace = app(WorkspaceContext::class)->currentWorkspace(request()); + + if (! $workspace instanceof Workspace) { + return null; + } + + return WorkspaceHubEnvironmentFilter::fromRequest(request(), $workspace); + } } diff --git a/apps/platform/app/Filament/Pages/Monitoring/AuditLog.php b/apps/platform/app/Filament/Pages/Monitoring/AuditLog.php index d640aa5f..be39c87e 100644 --- a/apps/platform/app/Filament/Pages/Monitoring/AuditLog.php +++ b/apps/platform/app/Filament/Pages/Monitoring/AuditLog.php @@ -4,6 +4,7 @@ namespace App\Filament\Pages\Monitoring; +use App\Filament\Concerns\ClearsWorkspaceHubEnvironmentFilterState; use App\Models\AuditLog as AuditLogModel; use App\Models\ManagedEnvironment; use App\Models\SupportAccessGrant; @@ -20,6 +21,7 @@ use App\Support\Filament\TablePaginationProfiles; use App\Support\Navigation\CanonicalNavigationContext; use App\Support\Navigation\RelatedNavigationResolver; +use App\Support\Navigation\WorkspaceHubEnvironmentFilter; use App\Support\OperateHub\OperateHubShell; use App\Support\Ui\ActionSurface\ActionSurfaceDeclaration; use App\Support\Ui\ActionSurface\ActionSurfaceDefaults; @@ -45,6 +47,7 @@ class AuditLog extends Page implements HasTable { + use ClearsWorkspaceHubEnvironmentFilterState; use InteractsWithTable; protected const MONITORING_PAGE_STATE_CONTRACT = [ @@ -72,11 +75,11 @@ class AuditLog extends Page implements HasTable 'invalidFallback' => 'discard_and_continue', ], [ - 'stateKey' => 'managed_environment_id', + 'stateKey' => 'environment_id', 'stateClass' => 'contextual_prefilter', - 'carrier' => 'session', + 'carrier' => 'query_param', 'queryRole' => 'durable_restorable', - 'shareable' => false, + 'shareable' => true, 'restorableOnRefresh' => true, 'tenantSensitive' => true, 'invalidFallback' => 'discard_and_continue', @@ -96,7 +99,7 @@ class AuditLog extends Page implements HasTable 'precedenceOrder' => ['query', 'session', 'default'], 'appliesOnInitialMountOnly' => true, 'activeStateBecomesAuthoritativeAfterMount' => true, - 'clearsOnTenantSwitch' => ['managed_environment_id', 'action', 'actor_label', 'resource_type'], + 'clearsOnTenantSwitch' => ['environment_id', 'managed_environment_id', 'action', 'actor_label', 'resource_type'], 'invalidRequestedStateFallback' => 'clear_selection_and_continue', ], 'inspectContract' => [ @@ -164,9 +167,11 @@ public function mount(): void $this->supportAccessOnly = request()->boolean('supportAccess'); $requestedEventId = is_numeric(request()->query('event')) ? (int) request()->query('event') : null; - app(CanonicalAdminEnvironmentFilterState::class)->sync($this->getTableFiltersSessionKey(), request: request()); + $this->resetWorkspaceHubEnvironmentFilterStateForCleanEntry(request()); $this->mountInteractsWithTable(); + $this->resetWorkspaceHubEnvironmentFilterStateForCleanEntry(request()); + $this->applyRequestedEnvironmentFilter(); if ($requestedEventId !== null) { $this->selectedAuditLogId = $this->resolveSelectedAuditLogId($requestedEventId); @@ -328,8 +333,14 @@ public function table(Table $table): Table ->icon('heroicon-o-x-mark') ->color('gray') ->action(function (): void { + $hadEnvironmentFilter = $this->currentTenantFilterId() !== null; $this->selectedAuditLogId = null; $this->resetTable(); + $this->clearWorkspaceHubEnvironmentFilterState(request()); + + if ($hadEnvironmentFilter) { + $this->redirectToCleanWorkspaceHubUrl(route('admin.monitoring.audit-log'), request()); + } }), ]); } @@ -359,6 +370,24 @@ public function authorizedTenants(): array return $this->authorizedTenants = $tenants; } + /** + * @return array{label: string, clear_url: string, description: string}|null + */ + public function environmentFilterChip(): ?array + { + $tenant = $this->filteredTenant(); + + if (! $tenant instanceof ManagedEnvironment) { + return null; + } + + return [ + 'label' => (string) ($tenant->name ?: $tenant->external_id ?: ('Environment '.$tenant->getKey())), + 'clear_url' => $this->cleanWorkspaceHubUrl(route('admin.monitoring.audit-log')), + 'description' => 'Audit events are filtered by direct environment attribution.', + ]; + } + private function authorizePageAccess(): void { $user = auth()->user(); @@ -388,6 +417,7 @@ private function authorizePageAccess(): void private function auditBaseQuery(): Builder { $workspaceId = app(WorkspaceContext::class)->currentWorkspaceId(request()); + $tenantFilter = $this->currentTenantFilterId(); $authorizedTenantIds = array_map( static fn (ManagedEnvironment $tenant): int => (int) $tenant->getKey(), $this->authorizedTenants(), @@ -406,6 +436,10 @@ private function auditBaseQuery(): Builder ->when($this->supportAccessOnly, function (Builder $query): void { $query->whereIn('action', SupportAccessGrant::supportAccessAuditActions()); }) + ->when( + $tenantFilter !== null, + fn (Builder $query): Builder => $query->where('audit_logs.managed_environment_id', $tenantFilter), + ) ->latestFirst(); } @@ -463,10 +497,35 @@ private function auditTargetLink(AuditLogModel $record): ?array return app(RelatedNavigationResolver::class)->auditTargetLink($record); } + private function applyRequestedEnvironmentFilter(): void + { + $workspace = app(WorkspaceContext::class)->currentWorkspace(request()); + + if (! $workspace instanceof Workspace) { + return; + } + + $filter = WorkspaceHubEnvironmentFilter::fromRequest(request(), $workspace); + + if (! $filter instanceof WorkspaceHubEnvironmentFilter) { + return; + } + + $environmentId = $filter->environmentId(); + + if (! array_key_exists($environmentId, $this->authorizedTenants())) { + throw new NotFoundHttpException; + } + + $this->tableFilters['managed_environment_id']['value'] = (string) $environmentId; + $this->tableDeferredFilters['managed_environment_id']['value'] = (string) $environmentId; + } + private function auditLogUrl(array $overrides = []): string { $parameters = array_merge( $this->navigationContext()?->toQuery() ?? [], + ['environment_id' => $this->currentTenantFilterId()], ['supportAccess' => $this->supportAccessOnly ? true : null], ['event' => $this->selectedAuditLogId], $overrides, @@ -616,15 +675,29 @@ private function tenantFilterOptions(): array private function defaultTenantFilter(): ?string { - $activeEnvironment = app(OperateHubShell::class)->activeEntitledTenant(request()); + return null; + } - if (! $activeEnvironment instanceof ManagedEnvironment) { + private function currentTenantFilterId(): ?int + { + $tenantFilter = app(CanonicalAdminEnvironmentFilterState::class)->currentFilterValue( + $this->getTableFiltersSessionKey(), + $this->tableFilters ?? [], + request(), + ); + + return is_numeric($tenantFilter) ? (int) $tenantFilter : null; + } + + private function filteredTenant(): ?ManagedEnvironment + { + $tenantId = $this->currentTenantFilterId(); + + if (! is_int($tenantId)) { return null; } - return array_key_exists((int) $activeEnvironment->getKey(), $this->authorizedTenants()) - ? (string) $activeEnvironment->getKey() - : null; + return $this->authorizedTenants()[$tenantId] ?? null; } /** diff --git a/apps/platform/app/Filament/Resources/AlertDeliveryResource/Pages/ListAlertDeliveries.php b/apps/platform/app/Filament/Resources/AlertDeliveryResource/Pages/ListAlertDeliveries.php index 1e8bd24e..85460ca3 100644 --- a/apps/platform/app/Filament/Resources/AlertDeliveryResource/Pages/ListAlertDeliveries.php +++ b/apps/platform/app/Filament/Resources/AlertDeliveryResource/Pages/ListAlertDeliveries.php @@ -4,22 +4,104 @@ namespace App\Filament\Resources\AlertDeliveryResource\Pages; +use App\Filament\Concerns\ClearsWorkspaceHubEnvironmentFilterState; use App\Filament\Resources\AlertDeliveryResource; +use App\Models\ManagedEnvironment; +use App\Models\User; +use App\Models\Workspace; use App\Support\Filament\CanonicalAdminEnvironmentFilterState; use App\Support\Navigation\CanonicalNavigationContext; +use App\Support\Navigation\WorkspaceHubEnvironmentFilter; use App\Support\OperateHub\OperateHubShell; +use App\Support\Workspaces\WorkspaceContext; use Filament\Actions\Action; +use Filament\Facades\Filament; use Filament\Resources\Pages\ListRecords; +use Filament\Schemas\Components\EmbeddedTable; +use Filament\Schemas\Components\RenderHook; +use Filament\Schemas\Components\View; +use Filament\Schemas\Schema; +use Filament\View\PanelsRenderHook; class ListAlertDeliveries extends ListRecords { + use ClearsWorkspaceHubEnvironmentFilterState; + protected static string $resource = AlertDeliveryResource::class; + /** + * @var array|null + */ + private ?array $authorizedTenants = null; + public function mount(): void { - app(CanonicalAdminEnvironmentFilterState::class)->sync($this->getTableFiltersSessionKey(), request: request()); + $this->resetWorkspaceHubEnvironmentFilterStateForCleanEntry(request()); parent::mount(); + + $this->resetWorkspaceHubEnvironmentFilterStateForCleanEntry(request()); + $this->applyRequestedEnvironmentFilter(); + } + + public function content(Schema $schema): Schema + { + return $schema + ->components([ + $this->getTabsContentComponent(), + View::make('filament.partials.workspace-hub-environment-filter-chip') + ->viewData(fn (): array => [ + 'label' => $this->environmentFilterChip()['label'] ?? null, + 'clearUrl' => $this->environmentFilterChip()['clear_url'] ?? null, + 'description' => $this->environmentFilterChip()['description'] ?? null, + ]) + ->visible(fn (): bool => $this->environmentFilterChip() !== null), + RenderHook::make(PanelsRenderHook::RESOURCE_PAGES_LIST_RECORDS_TABLE_BEFORE), + EmbeddedTable::make(), + RenderHook::make(PanelsRenderHook::RESOURCE_PAGES_LIST_RECORDS_TABLE_AFTER), + ]); + } + + /** + * @return array{label: string, clear_url: string, description: string}|null + */ + public function environmentFilterChip(): ?array + { + $tenant = $this->filteredTenant(); + + if (! $tenant instanceof ManagedEnvironment) { + return null; + } + + return [ + 'label' => (string) ($tenant->name ?: $tenant->external_id ?: ('Environment '.$tenant->getKey())), + 'clear_url' => $this->cleanWorkspaceHubUrl(AlertDeliveryResource::getUrl('index', panel: 'admin')), + 'description' => 'Rows are filtered by direct delivery attribution.', + ]; + } + + /** + * @return array + */ + public function authorizedTenants(): array + { + if ($this->authorizedTenants !== null) { + return $this->authorizedTenants; + } + + $user = auth()->user(); + $workspaceId = app(WorkspaceContext::class)->currentWorkspaceId(request()); + + if (! $user instanceof User || ! is_int($workspaceId)) { + return $this->authorizedTenants = []; + } + + $tenants = collect($user->getTenants(Filament::getCurrentOrDefaultPanel())) + ->filter(static fn (ManagedEnvironment $tenant): bool => (int) $tenant->workspace_id === $workspaceId) + ->keyBy(fn (ManagedEnvironment $tenant): int => (int) $tenant->getKey()) + ->all(); + + return $this->authorizedTenants = $tenants; } protected function getHeaderActions(): array @@ -43,4 +125,50 @@ protected function getHeaderActions(): array return $actions; } + + private function applyRequestedEnvironmentFilter(): void + { + $workspace = app(WorkspaceContext::class)->currentWorkspace(request()); + + if (! $workspace instanceof Workspace) { + return; + } + + $filter = WorkspaceHubEnvironmentFilter::fromRequest(request(), $workspace); + + if (! $filter instanceof WorkspaceHubEnvironmentFilter) { + return; + } + + $environmentId = $filter->environmentId(); + + if (! array_key_exists($environmentId, $this->authorizedTenants())) { + abort(404); + } + + $this->tableFilters['managed_environment_id']['value'] = (string) $environmentId; + $this->tableDeferredFilters['managed_environment_id']['value'] = (string) $environmentId; + } + + private function currentTenantFilterId(): ?int + { + $tenantFilter = app(CanonicalAdminEnvironmentFilterState::class)->currentFilterValue( + $this->getTableFiltersSessionKey(), + $this->tableFilters ?? [], + request(), + ); + + return is_numeric($tenantFilter) ? (int) $tenantFilter : null; + } + + private function filteredTenant(): ?ManagedEnvironment + { + $tenantId = $this->currentTenantFilterId(); + + if (! is_int($tenantId)) { + return null; + } + + return $this->authorizedTenants()[$tenantId] ?? null; + } } diff --git a/apps/platform/app/Filament/Widgets/Alerts/AlertsKpiHeader.php b/apps/platform/app/Filament/Widgets/Alerts/AlertsKpiHeader.php index 411e27a8..d3e2d356 100644 --- a/apps/platform/app/Filament/Widgets/Alerts/AlertsKpiHeader.php +++ b/apps/platform/app/Filament/Widgets/Alerts/AlertsKpiHeader.php @@ -11,7 +11,9 @@ use App\Models\AlertDestination; use App\Models\AlertRule; use App\Models\User; +use App\Models\Workspace; use App\Services\Auth\ManagedEnvironmentAccessScopeResolver; +use App\Support\Navigation\WorkspaceHubEnvironmentFilter; use App\Support\Workspaces\WorkspaceContext; use Filament\Widgets\StatsOverviewWidget; use Filament\Widgets\StatsOverviewWidget\Stat; @@ -53,7 +55,7 @@ protected function getStats(): array ->count(); $stats[] = Stat::make('Enabled rules', $enabledRules) - ->description('Total '.$totalRules); + ->description('Workspace total '.$totalRules); } if (AlertDestinationResource::canViewAny()) { @@ -67,7 +69,7 @@ protected function getStats(): array ->count(); $stats[] = Stat::make('Enabled targets', $enabledDestinations) - ->description('Total '.$totalDestinations); + ->description('Workspace total '.$totalDestinations); } if (AlertDeliveryResource::canViewAny()) { @@ -101,6 +103,13 @@ private function deliveriesQueryForViewer(User $user, int $workspaceId): Builder qualifiedEnvironmentColumn: 'alert_deliveries.managed_environment_id', ); + $workspace = Workspace::query()->whereKey($workspaceId)->first(); + + if ($workspace instanceof Workspace) { + WorkspaceHubEnvironmentFilter::fromRequest(request(), $workspace) + ?->applyToQuery($query, 'alert_deliveries.managed_environment_id'); + } + return $query; } } diff --git a/apps/platform/app/Support/GovernanceInbox/GovernanceInboxSectionBuilder.php b/apps/platform/app/Support/GovernanceInbox/GovernanceInboxSectionBuilder.php index 7e056e64..05994c78 100644 --- a/apps/platform/app/Support/GovernanceInbox/GovernanceInboxSectionBuilder.php +++ b/apps/platform/app/Support/GovernanceInbox/GovernanceInboxSectionBuilder.php @@ -443,14 +443,14 @@ private function alertsSection( AlertDeliveryResource::getUrl(panel: 'admin'), array_replace_recursive( $navigationContext?->toQuery() ?? [], - [ + array_filter([ + 'environment_id' => $selectedTenant instanceof ManagedEnvironment + ? (int) $selectedTenant->getKey() + : null, 'tableFilters' => array_filter([ 'status' => ['value' => AlertDelivery::STATUS_FAILED], - 'managed_environment_id' => $selectedTenant instanceof ManagedEnvironment - ? ['value' => (string) $selectedTenant->getKey()] - : null, - ], static fn (mixed $value): bool => $value !== null), - ], + ]), + ], static fn (mixed $value): bool => $value !== null), ), ), 'entries' => $entries, diff --git a/apps/platform/app/Support/SupportDiagnostics/SupportDiagnosticBundleBuilder.php b/apps/platform/app/Support/SupportDiagnostics/SupportDiagnosticBundleBuilder.php index bca3d06b..1394d39d 100644 --- a/apps/platform/app/Support/SupportDiagnostics/SupportDiagnosticBundleBuilder.php +++ b/apps/platform/app/Support/SupportDiagnostics/SupportDiagnosticBundleBuilder.php @@ -817,7 +817,10 @@ private function auditHistorySection(Collection $auditLogs): array record: $auditLog, label: $auditLog->summaryText(), actionLabel: 'Inspect event', - url: route('admin.monitoring.audit-log', ['event' => (int) $auditLog->getKey()]), + url: route('admin.monitoring.audit-log', array_filter([ + 'event' => (int) $auditLog->getKey(), + 'environment_id' => $auditLog->managed_environment_id, + ], static fn (mixed $value): bool => $value !== null && $value !== '' && $value !== [])), freshnessAt: $auditLog->recorded_at, )) ->values() diff --git a/apps/platform/app/Support/Workspaces/WorkspaceOverviewBuilder.php b/apps/platform/app/Support/Workspaces/WorkspaceOverviewBuilder.php index 99f2f1e1..66c4e28c 100644 --- a/apps/platform/app/Support/Workspaces/WorkspaceOverviewBuilder.php +++ b/apps/platform/app/Support/Workspaces/WorkspaceOverviewBuilder.php @@ -746,7 +746,7 @@ private function attentionItems( ), badge: 'Alerts', badgeColor: 'danger', - destination: $this->alertsOverviewTarget($navigationContext, true), + destination: $this->alertsOverviewTarget($navigationContext, true, tenant: $tenant), )]; } @@ -1729,8 +1729,12 @@ private function operationDetailTarget(OperationRun $run, CanonicalNavigationCon /** * @return array */ - private function alertsOverviewTarget(CanonicalNavigationContext $navigationContext, bool $enabled, string $label = 'Open alerts'): array - { + private function alertsOverviewTarget( + CanonicalNavigationContext $navigationContext, + bool $enabled, + string $label = 'Open alerts', + ?ManagedEnvironment $tenant = null, + ): array { if (! $enabled) { return $this->disabledDestination( kind: 'alerts_overview', @@ -1740,14 +1744,24 @@ private function alertsOverviewTarget(CanonicalNavigationContext $navigationCont return $this->destination( kind: 'alerts_overview', - url: $this->alertsOverviewUrl($navigationContext), + url: $this->alertsOverviewUrl($navigationContext, $tenant), label: $label, + tenant: $tenant, + filters: $tenant instanceof ManagedEnvironment + ? ['environment_id' => (int) $tenant->getKey()] + : [], ); } - private function alertsOverviewUrl(CanonicalNavigationContext $navigationContext): string + private function alertsOverviewUrl(CanonicalNavigationContext $navigationContext, ?ManagedEnvironment $tenant = null): string { - return $this->appendQuery(route('filament.admin.alerts'), $navigationContext->toQuery()); + $query = $navigationContext->toQuery(); + + if ($tenant instanceof ManagedEnvironment) { + $query['environment_id'] = (int) $tenant->getKey(); + } + + return $this->appendQuery(route('filament.admin.alerts'), $query); } private function canTenantView(User $user, ManagedEnvironment $tenant): bool diff --git a/apps/platform/resources/views/filament/pages/monitoring/alerts.blade.php b/apps/platform/resources/views/filament/pages/monitoring/alerts.blade.php index 93898b41..d07768c2 100644 --- a/apps/platform/resources/views/filament/pages/monitoring/alerts.blade.php +++ b/apps/platform/resources/views/filament/pages/monitoring/alerts.blade.php @@ -1,5 +1,6 @@ @php($navigationContext = \App\Support\Navigation\CanonicalNavigationContext::fromRequest(request())) + @php($environmentFilterChip = $this->environmentFilterChip()) @if ($navigationContext?->backLinkLabel !== null && $navigationContext->backLinkUrl !== null) @@ -21,26 +22,34 @@ Configure alert targets and rules, then review delivery history. + @if ($environmentFilterChip !== null) + @include('filament.partials.workspace-hub-environment-filter-chip', [ + 'label' => $environmentFilterChip['label'], + 'clearUrl' => $environmentFilterChip['clear_url'], + 'description' => $environmentFilterChip['description'], + ]) + @endif +