From a770b32e87ded3fd0d3bd0da55491feb89fecc0f Mon Sep 17 00:00:00 2001 From: ahmido Date: Sun, 8 Feb 2026 20:31:36 +0000 Subject: [PATCH] feat: action-surface contract inspect affordance + clickable rows (#100) Implements Spec 082 updates to the Filament Action Surface Contract: - New required list/table slot: InspectAffordance (clickable row via recordUrl preferred; also supports View action or primary link column) - Retrofit view-only tables to remove lone View row action buttons and use clickable rows - Update validator + guard tests, add golden regression assertions - Add docs: docs/ui/action-surface-contract.md Tests (local via Sail): - vendor/bin/sail artisan test --compact tests/Feature/Guards/ActionSurfaceContractTest.php - vendor/bin/sail artisan test --compact tests/Feature/Guards/ActionSurfaceValidatorTest.php - vendor/bin/sail artisan test --compact tests/Feature/Rbac/ActionSurfaceRbacSemanticsTest.php - vendor/bin/sail artisan test --compact tests/Feature/Filament/EntraGroupSyncRunResourceTest.php Notes: - Filament v5 / Livewire v4 compatible. - No destructive-action behavior changed in this PR. Co-authored-by: Ahmed Darrazi Reviewed-on: https://git.cloudarix.de/ahmido/TenantAtlas/pulls/100 --- .github/agents/copilot-instructions.md | 3 +- .specify/memory/constitution.md | 12 +- .specify/templates/plan-template.md | 2 +- .specify/templates/spec-template.md | 4 +- .specify/templates/tasks-template.md | 1 + app/Filament/Resources/EntraGroupResource.php | 35 +- .../Resources/EntraGroupSyncRunResource.php | 22 +- .../Resources/InventoryItemResource.php | 22 +- .../Resources/InventorySyncRunResource.php | 22 +- .../Resources/OperationRunResource.php | 33 ++ app/Filament/Resources/PolicyResource.php | 21 +- .../PolicyResource/Pages/ListPolicies.php | 114 +++---- .../VersionsRelationManager.php | 14 + .../Resources/PolicyVersionResource.php | 19 +- .../ActionSurfaceDeclaration.php | 120 +++++++ .../ActionSurface/ActionSurfaceDefaults.php | 13 + .../ActionSurfaceDiscoveredComponent.php | 25 ++ .../ActionSurface/ActionSurfaceDiscovery.php | 292 +++++++++++++++++ .../ActionSurface/ActionSurfaceExemption.php | 21 ++ .../ActionSurface/ActionSurfaceExemptions.php | 69 ++++ .../ActionSurfaceProfileDefinition.php | 58 ++++ .../ActionSurfaceSlotRequirement.php | 38 +++ .../ActionSurfaceValidationIssue.php | 34 ++ .../ActionSurfaceValidationResult.php | 53 ++++ .../ActionSurface/ActionSurfaceValidator.php | 299 ++++++++++++++++++ .../Enums/ActionSurfaceComponentType.php | 12 + .../Enums/ActionSurfaceInspectAffordance.php | 12 + .../Enums/ActionSurfacePanelScope.php | 11 + .../Enums/ActionSurfaceProfile.php | 14 + .../ActionSurface/Enums/ActionSurfaceSlot.php | 15 + .../Enums/ActionSurfaceSlotStatus.php | 11 + docs/ui/action-surface-contract.md | 26 ++ .../checklists/requirements.md | 37 +++ .../action-surface-declaration.schema.json | 102 ++++++ .../082-action-surface-contract/data-model.md | 81 +++++ specs/082-action-surface-contract/plan.md | 108 +++++++ .../082-action-surface-contract/quickstart.md | 34 ++ specs/082-action-surface-contract/research.md | 104 ++++++ specs/082-action-surface-contract/spec.md | 191 +++++++++++ specs/082-action-surface-contract/tasks.md | 127 ++++++++ .../EntraGroupSyncRunResourceTest.php | 36 +++ .../Guards/ActionSurfaceContractTest.php | 209 ++++++++++++ .../Guards/ActionSurfaceValidatorTest.php | 153 +++++++++ .../Rbac/ActionSurfaceRbacSemanticsTest.php | 40 +++ 44 files changed, 2585 insertions(+), 84 deletions(-) create mode 100644 app/Support/Ui/ActionSurface/ActionSurfaceDeclaration.php create mode 100644 app/Support/Ui/ActionSurface/ActionSurfaceDefaults.php create mode 100644 app/Support/Ui/ActionSurface/ActionSurfaceDiscoveredComponent.php create mode 100644 app/Support/Ui/ActionSurface/ActionSurfaceDiscovery.php create mode 100644 app/Support/Ui/ActionSurface/ActionSurfaceExemption.php create mode 100644 app/Support/Ui/ActionSurface/ActionSurfaceExemptions.php create mode 100644 app/Support/Ui/ActionSurface/ActionSurfaceProfileDefinition.php create mode 100644 app/Support/Ui/ActionSurface/ActionSurfaceSlotRequirement.php create mode 100644 app/Support/Ui/ActionSurface/ActionSurfaceValidationIssue.php create mode 100644 app/Support/Ui/ActionSurface/ActionSurfaceValidationResult.php create mode 100644 app/Support/Ui/ActionSurface/ActionSurfaceValidator.php create mode 100644 app/Support/Ui/ActionSurface/Enums/ActionSurfaceComponentType.php create mode 100644 app/Support/Ui/ActionSurface/Enums/ActionSurfaceInspectAffordance.php create mode 100644 app/Support/Ui/ActionSurface/Enums/ActionSurfacePanelScope.php create mode 100644 app/Support/Ui/ActionSurface/Enums/ActionSurfaceProfile.php create mode 100644 app/Support/Ui/ActionSurface/Enums/ActionSurfaceSlot.php create mode 100644 app/Support/Ui/ActionSurface/Enums/ActionSurfaceSlotStatus.php create mode 100644 docs/ui/action-surface-contract.md create mode 100644 specs/082-action-surface-contract/checklists/requirements.md create mode 100644 specs/082-action-surface-contract/contracts/action-surface-declaration.schema.json create mode 100644 specs/082-action-surface-contract/data-model.md create mode 100644 specs/082-action-surface-contract/plan.md create mode 100644 specs/082-action-surface-contract/quickstart.md create mode 100644 specs/082-action-surface-contract/research.md create mode 100644 specs/082-action-surface-contract/spec.md create mode 100644 specs/082-action-surface-contract/tasks.md create mode 100644 tests/Feature/Guards/ActionSurfaceContractTest.php create mode 100644 tests/Feature/Guards/ActionSurfaceValidatorTest.php create mode 100644 tests/Feature/Rbac/ActionSurfaceRbacSemanticsTest.php diff --git a/.github/agents/copilot-instructions.md b/.github/agents/copilot-instructions.md index 1e4af7c..0e60843 100644 --- a/.github/agents/copilot-instructions.md +++ b/.github/agents/copilot-instructions.md @@ -21,6 +21,7 @@ ## Active Technologies - PHP 8.4.15 (Laravel 12) + Filament v5, Livewire v4, Tailwind v4 (080-workspace-managed-tenant-admin) - PostgreSQL (via Sail) (080-workspace-managed-tenant-admin) - PHP 8.4.15 + Laravel 12, Filament v5, Livewire v4, Socialite v5 (081-provider-connection-cutover) +- PHP 8.4.x + Laravel 12, Filament v5, Livewire v4 (082-action-surface-contract) - PHP 8.4.15 (feat/005-bulk-operations) @@ -40,9 +41,9 @@ ## Code Style PHP 8.4.15: Follow standard conventions ## Recent Changes +- 082-action-surface-contract: Added PHP 8.4.x + Laravel 12, Filament v5, Livewire v4 - 081-provider-connection-cutover: Added PHP 8.4.15 + Laravel 12, Filament v5, Livewire v4, Socialite v5 - 080-workspace-managed-tenant-admin: Added PHP 8.4.15 (Laravel 12) + Filament v5, Livewire v4, Tailwind v4 -- 078-operations-tenantless-canonical: Added PHP 8.4 (Laravel 12) + Filament v5, Livewire v4, Filament Infolists (schema-based) diff --git a/.specify/memory/constitution.md b/.specify/memory/constitution.md index 9c087ed..afba721 100644 --- a/.specify/memory/constitution.md +++ b/.specify/memory/constitution.md @@ -1,11 +1,10 @@