TenantAtlas/specs/125-table-ux-standardization/data-model.md
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

6.3 KiB

Data Model: Filament Table UX Standardization & List Consistency

Overview

This feature does not introduce new persistent storage. It defines a conceptual model for how production Filament tables are classified, reviewed, and rolled out.

Entities

TableSurface

  • Purpose: Represents one production Filament-backed list surface that must be brought into the standard.
  • Source: Existing resources, relation managers, widgets, custom pages, and Livewire table components.

Fields

Field Type Required Description
surface_key string yes Stable identifier for the table surface, typically derived from class name and route role
surface_type enum(resource,relation_manager,widget,custom_page,picker) yes Classification used for rollout rules and pagination profile
plane enum(admin,tenant,system) yes Authorization plane in which the table is rendered
route_scope enum(workspace,tenant,canonical_view) yes Scope used to reason about entitlement and visible context
class_name string yes Backing PHP class for the table surface
primary_route string yes Main route or route pattern where the table is reached
data_ownership enum(workspace_owned,tenant_owned,mixed,runtime_only) yes Ownership context of the records displayed
criticality enum(critical,standard,special_case) yes Rollout priority and review intensity
has_empty_state boolean yes Whether the surface currently defines a domain-specific empty state
has_default_sort boolean yes Whether the surface currently defines an explicit default sort
has_persistence boolean yes Whether search, sort, and filters persist across refresh in the same session
query_risk enum(low,medium,high) yes Risk level for adding or changing sort/search behavior
exception_reason string nullable no Documented rationale when a standard rule is intentionally not applied

Validation Rules

  • surface_key must be unique across the audited table inventory.
  • surface_type, plane, route_scope, and criticality must come from the controlled enums above.
  • exception_reason is required when a mandatory standard rule is not applied.
  • query_risk must be set before adding sort or search behavior to relation-backed or computed fields.

TableBehaviorProfile

  • Purpose: Captures the standardized behavior a table surface should implement.

Fields

Field Type Required Description
default_sort_column string nullable no Default sort column when the surface has one
default_sort_direction enum(asc,desc) nullable no Default sort direction
search_fields list yes User-facing searchable dimensions
visible_default_column_limit integer yes Target number of visible default columns
persistence_profile enum(resource_list,optional,none) yes Whether native table state persistence is required
pagination_profile enum(resource,relation_manager,widget,picker,custom_page) yes Page-size rules for the surface class
empty_state_required boolean yes Whether a domain-specific empty state is required
timestamp_profile enum(relative_default,absolute_required,mixed) yes Default timestamp rendering expectation
null_placeholder string yes Standard placeholder for missing values

Relationships

  • One TableSurface has one TableBehaviorProfile.
  • A TableBehaviorProfile is implemented through native Filament table methods on the owning table class.

ColumnProfile

  • Purpose: Represents one meaningful column in a standardized table.

Fields

Field Type Required Description
column_key string yes Stable column identifier matching the table definition
tier enum(primary,context,detail) yes Conceptual visibility tier
is_default_visible boolean yes Whether the column is visible in the default table surface
is_toggleable boolean yes Whether the column can be toggled by the user
is_hidden_by_default boolean yes Whether toggleable detail starts hidden
is_sortable boolean yes Whether native sorting is enabled
is_searchable boolean yes Whether native search is enabled
rendering_type enum(text,badge,icon,timestamp,count,identifier,boolean,custom) yes Rendering category used for consistency review
query_risk enum(low,medium,high) yes Risk of enabling or changing search/sort on the column

Validation Rules

  • Every table must have at least one primary column.
  • detail columns should normally be toggleable and hidden by default unless a documented exception exists.
  • is_searchable and is_sortable must remain false when the query risk is unacceptable and no mitigation exists.

TableException

  • Purpose: Captures a justified deviation from the standard.

Fields

Field Type Required Description
surface_key string yes Referenced table surface
rule_key string yes Standard rule being exempted
reason string yes Human-readable explanation for the exception
approved_phase enum(foundation,critical_rollout,broad_rollout,hardening) yes Phase in which the exception was recorded
review_action string nullable no Follow-up needed to remove or reduce the exception

State Transitions

  • Inventory: audit each production TableSurface and record its current TableBehaviorProfile and ColumnProfile set.
  • Classification: assign each relevant column to primary, context, or detail.
  • Standardization: apply the target behavior profile to the table using native Filament configuration.
  • Exception handling: record a TableException where performance, scope, or product clarity prevents full compliance.
  • Hardening: revisit medium- and high-risk exceptions after first-wave rollout and query review.

Notes

  • No migrations, new Eloquent models, or persistent tables are introduced by this feature.
  • The model exists to support planning, phased rollout, and future review consistency rather than runtime storage.