TenantAtlas/specs/125-table-ux-standardization/contracts/filament-table-state.openapi.yaml
ahmido a4f5c4f122 Spec 125: standardize Filament table UX (#152)
## Summary
- standardize Filament table defaults across resources, relation managers, widgets, custom pages, and picker tables
- add shared pagination profiles, calm default column visibility, explicit empty states, and session persistence on designated critical resource lists
- complete Spec 125 artifacts, regression tests, and dashboard widget follow-up for lazy loading, sortable columns, and toggleable detail columns

## Verification
- `docker exec tenantatlas-laravel.test-1 php artisan test --compact --filter=BaselineCompareNow`
- `docker exec tenantatlas-laravel.test-1 php artisan test --compact --filter=TableStandardsBaseline`
- `docker exec tenantatlas-laravel.test-1 php artisan test --compact --filter=TableDetailVisibility`
- `docker exec tenantatlas-laravel.test-1 php artisan test --compact --filter=FilamentTableRiskExceptions`
- full suite run completed: `2017 passed, 10 failed, 8 skipped`
- manual browser QA completed on the tenant dashboard for lazy loading, sortable widget columns, toggleable hidden status columns, badges, and pagination

## Known Failures
The full suite still has 10 pre-existing failures unrelated to this branch:
- `Tests\\Unit\\OpsUx\\SummaryCountsNormalizerTest`
- `Tests\\Feature\\BackupWithAssignmentsConsistencyTest` (2 tests)
- `Tests\\Feature\\BaselineDriftEngine\\CaptureBaselineContentTest`
- `Tests\\Feature\\BaselineDriftEngine\\CompareContentEvidenceTest`
- `Tests\\Feature\\BaselineDriftEngine\\ResolverTest`
- `Tests\\Feature\\Filament\\TenantDashboardDbOnlyTest`
- `Tests\\Feature\\Operations\\ReconcileAdapterRunsJobTrackingTest`
- `Tests\\Feature\\ReviewPack\\ReviewPackRbacTest`
- `Tests\\Feature\\Verification\\VerificationReportRedactionTest`

Co-authored-by: Ahmed Darrazi <ahmed.darrazi@live.de>
Reviewed-on: #152
2026-03-08 22:54:56 +00:00

191 lines
5.9 KiB
YAML

openapi: 3.1.0
info:
title: Filament Table State Standardization Contract
version: 1.0.0
description: |
Page-level contract for standardized Filament list surfaces affected by Spec 125.
This feature does not add public APIs. It formalizes the expected query-state
parameters and page behaviors for resource, tenant-scoped, and system-scoped
list surfaces that use native Filament tables.
paths:
/admin/{listSlug}:
get:
summary: Render a standardized workspace-scoped Filament list surface
operationId: getWorkspaceScopedListSurface
tags:
- Filament Table UX
parameters:
- $ref: '#/components/parameters/ListSlug'
- $ref: '#/components/parameters/TableSearch'
- $ref: '#/components/parameters/TableSortColumn'
- $ref: '#/components/parameters/TableSortDirection'
- $ref: '#/components/parameters/TableRecordsPerPage'
- $ref: '#/components/parameters/Page'
responses:
'200':
description: Standardized list page rendered successfully
content:
text/html:
schema:
type: string
'403':
description: Actor is a member of the scope but lacks the required capability for the page or exposed action
'404':
description: Workspace scope is unavailable or the actor is not entitled to the requested scope
/admin/t/{tenant}/{listSlug}:
get:
summary: Render a standardized tenant-scoped Filament list surface
operationId: getTenantScopedListSurface
tags:
- Filament Table UX
parameters:
- name: tenant
in: path
required: true
description: Tenant identifier resolved by the existing Filament tenant route binding
schema:
type: string
- $ref: '#/components/parameters/ListSlug'
- $ref: '#/components/parameters/TableSearch'
- $ref: '#/components/parameters/TableSortColumn'
- $ref: '#/components/parameters/TableSortDirection'
- $ref: '#/components/parameters/TableRecordsPerPage'
- $ref: '#/components/parameters/Page'
responses:
'200':
description: Standardized tenant-scoped list page rendered successfully
content:
text/html:
schema:
type: string
'403':
description: Tenant member lacks the capability required for the page or exposed action
'404':
description: Tenant or workspace context is unavailable or the actor is not entitled to the tenant scope
/system/{listSlug}:
get:
summary: Render a standardized platform-scoped Filament list surface
operationId: getSystemScopedListSurface
tags:
- Filament Table UX
parameters:
- $ref: '#/components/parameters/ListSlug'
- $ref: '#/components/parameters/TableSearch'
- $ref: '#/components/parameters/TableSortColumn'
- $ref: '#/components/parameters/TableSortDirection'
- $ref: '#/components/parameters/TableRecordsPerPage'
- $ref: '#/components/parameters/Page'
responses:
'200':
description: Standardized platform list page rendered successfully
content:
text/html:
schema:
type: string
'403':
description: Platform user lacks the capability required for the page or exposed action
'404':
description: The actor is not entitled to the platform scope
components:
parameters:
ListSlug:
name: listSlug
in: path
required: true
description: |
Logical list-surface identifier. Examples include resource list pages,
system directory tables, operations pages, or custom picker tables.
schema:
type: string
TableSearch:
name: tableSearch
in: query
required: false
description: Free-text search across the table's approved searchable fields
schema:
type: string
TableSortColumn:
name: tableSortColumn
in: query
required: false
description: Active sortable column for the table surface
schema:
type: string
TableSortDirection:
name: tableSortDirection
in: query
required: false
description: Active table sort direction
schema:
type: string
enum:
- asc
- desc
TableRecordsPerPage:
name: tableRecordsPerPage
in: query
required: false
description: Selected page-size option from the surface's pagination profile
schema:
oneOf:
- type: integer
minimum: 5
- type: string
enum:
- all
Page:
name: page
in: query
required: false
description: Current paginator page for the table surface
schema:
type: integer
minimum: 1
schemas:
StandardizedTableBehavior:
type: object
required:
- defaultSort
- emptyState
- paginationProfile
properties:
defaultSort:
type: object
properties:
column:
type: string
direction:
type: string
enum:
- asc
- desc
persistence:
type: object
properties:
search:
type: boolean
sort:
type: boolean
filters:
type: boolean
emptyState:
type: object
required:
- heading
- description
properties:
heading:
type: string
description:
type: string
hasAuthorizedAction:
type: boolean
paginationProfile:
type: string
enum:
- resource
- relation_manager
- widget
- picker
- custom_page