## Summary - add a shared tenant lifecycle presentation contract and referenced-tenant adapter for canonical lifecycle labels and helper copy - align tenant, chooser, onboarding, archived-banner, and tenantless operation viewer surfaces with the shared lifecycle vocabulary - add Spec 146 design artifacts, audit notes, and regression coverage for lifecycle presentation across Filament and onboarding surfaces ## Validation - `vendor/bin/sail bin pint --dirty --format agent` - `vendor/bin/sail artisan test --compact tests/Feature/Badges/TenantStatusBadgeTest.php tests/Unit/Badges/TenantBadgesTest.php tests/Unit/Tenants/TenantLifecycleTest.php tests/Unit/Support/Tenants/TenantLifecyclePresentationTest.php tests/Feature/Filament/TenantLifecyclePresentationAcrossTenantSurfacesTest.php tests/Feature/Filament/ReferencedTenantLifecyclePresentationTest.php tests/Feature/Filament/TenantLifecycleStatusDomainSeparationTest.php tests/Feature/Filament/TenantViewHeaderUiEnforcementTest.php tests/Feature/Onboarding/TenantLifecyclePresentationCopyTest.php tests/Feature/Onboarding/OnboardingDraftAuthorizationTest.php tests/Feature/Onboarding/OnboardingDraftLifecycleTest.php` ## Notes - Livewire v4.0+ compliance preserved; this change is presentation-only on existing Filament v5 surfaces. - Panel provider registration remains unchanged in `bootstrap/providers.php`. - No global-search behavior changed; no resource was newly made globally searchable or disabled. - No destructive actions were added or changed. - No asset registration strategy changed; existing deploy flow for `php artisan filament:assets` remains unchanged. Co-authored-by: Ahmed Darrazi <ahmed.darrazi@live.de> Reviewed-on: #175
128 lines
3.5 KiB
YAML
128 lines
3.5 KiB
YAML
openapi: 3.1.0
|
|
info:
|
|
title: Tenant Lifecycle Presentation Contract
|
|
version: 0.1.0
|
|
description: >-
|
|
Internal presentation contract for rendering tenant lifecycle consistently across
|
|
tenant management surfaces and canonical viewers. This feature introduces no new
|
|
external HTTP endpoints; the contract is expressed as shared schemas for UI-facing
|
|
presentation objects.
|
|
paths: {}
|
|
components:
|
|
schemas:
|
|
TenantLifecycleValue:
|
|
type: string
|
|
enum:
|
|
- draft
|
|
- onboarding
|
|
- active
|
|
- archived
|
|
description: Canonical tenant lifecycle values defined by the tenant domain.
|
|
TenantLifecycleBadge:
|
|
type: object
|
|
additionalProperties: false
|
|
required:
|
|
- color
|
|
- icon
|
|
properties:
|
|
color:
|
|
type: string
|
|
description: Shared badge or chip tone token.
|
|
icon:
|
|
type: string
|
|
description: Shared icon token for lifecycle rendering.
|
|
iconColor:
|
|
type:
|
|
- string
|
|
- 'null'
|
|
description: Optional icon color override.
|
|
TenantLifecyclePresentation:
|
|
type: object
|
|
additionalProperties: false
|
|
required:
|
|
- value
|
|
- label
|
|
- badge
|
|
- shortDescription
|
|
- longDescription
|
|
- isInvalidFallback
|
|
properties:
|
|
value:
|
|
$ref: '#/components/schemas/TenantLifecycleValue'
|
|
label:
|
|
type: string
|
|
enum:
|
|
- Draft
|
|
- Onboarding
|
|
- Active
|
|
- Archived
|
|
badge:
|
|
$ref: '#/components/schemas/TenantLifecycleBadge'
|
|
shortDescription:
|
|
type: string
|
|
description: Concise explanation for detail, selector, or viewer surfaces.
|
|
longDescription:
|
|
type: string
|
|
description: Detailed helper text for infolists, banners, or canonical viewers.
|
|
isInvalidFallback:
|
|
type: boolean
|
|
description: Reserved for corrupted or unexpected non-canonical values only.
|
|
TenantLifecyclePresentationVariant:
|
|
type: object
|
|
additionalProperties: false
|
|
required:
|
|
- surface
|
|
- showBadge
|
|
- showShortDescription
|
|
- showLongDescription
|
|
properties:
|
|
surface:
|
|
type: string
|
|
enum:
|
|
- table
|
|
- detail
|
|
- selector
|
|
- canonical_viewer
|
|
- banner
|
|
showBadge:
|
|
type: boolean
|
|
showShortDescription:
|
|
type: boolean
|
|
showLongDescription:
|
|
type: boolean
|
|
contextNote:
|
|
type:
|
|
- string
|
|
- 'null'
|
|
description: Optional surface-specific note that does not change lifecycle meaning.
|
|
ReferencedTenantLifecyclePresentation:
|
|
type: object
|
|
additionalProperties: false
|
|
required:
|
|
- tenantId
|
|
- tenantName
|
|
- presentation
|
|
- viewerContext
|
|
properties:
|
|
tenantId:
|
|
type:
|
|
- integer
|
|
- 'null'
|
|
tenantName:
|
|
type:
|
|
- string
|
|
- 'null'
|
|
presentation:
|
|
$ref: '#/components/schemas/TenantLifecyclePresentation'
|
|
viewerContext:
|
|
type: string
|
|
enum:
|
|
- operation_run
|
|
- report
|
|
- audit_reference
|
|
contextNote:
|
|
type:
|
|
- string
|
|
- 'null'
|
|
description: Optional explanatory copy for onboarding or archived references.
|