## 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 <ahmed.darrazi@live.de> Reviewed-on: #379
5.2 KiB
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:
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, orworkspace_configuration_surface. - Clean workspace hub URLs never emit
environment_id,tenant,tenant_id,managed_environment_id,environment,tenant_scope, ortableFilters. - Environment CTAs use canonical
environment_idfor filterable workspace hubs and Environment routes for Environment-owned pages. - Clear-filter behavior matches clean workspace hub entry.
- Cross-workspace
environment_idfilters reject safely. - Legacy Environment/Tenant query aliases do not create filter or shell state.
/admin/troutes andTenantPanelProviderremain absent.- Provider Tenant terms remain allowed only in provider-boundary allowlist contexts.
Browser Contract Guards
Suggested files:
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_idshow 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:
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:
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:
cd apps/platform
./vendor/bin/sail artisan test --filter='WorkspaceHub|EnvironmentFilter|ClearFilter|LegacyTenant|BaselineCompare|WorkspaceOwnedAnalysis|AlertsAudit' --compact
Run final formatting and diff checks:
cd apps/platform
./vendor/bin/sail pint --dirty
git diff --check
Existing Anchors To Reuse
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-testidselectors. - 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:
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.